Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
xcodebuild clean test -project TestApp.xcodeproj -scheme TestApp -destination "platform=iOS Simulator,OS=16.2,name=iPhone 12" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO region=${{ secrets.region }} clientId=${{ secrets.clientid }}
- name: Upload test result
if: ${{ always() }}
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: reports
path: build/reports/
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,5 @@ DerivedData/
!*.xcodeproj/xcshareddata/
!*.xcworkspace/contents.xcworkspacedata
**/xcshareddata/WorkspaceSettings.xcsettings
kotlin-js-store/
kotlin-js-store/
/.kotlin/
147 changes: 86 additions & 61 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,39 +1,43 @@
@file:OptIn(ExperimentalWasmDsl::class)

import com.android.build.gradle.LibraryExtension
import com.liftric.vault.GetVaultSecretTask
import org.gradle.internal.classpath.Instrumented.systemProperty
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeSimulatorTest
import org.jetbrains.kotlin.gradle.tasks.*

plugins {
kotlin("multiplatform") version libs.versions.kotlin
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.kotlin.serialization)
id("com.android.library") version libs.versions.android.tools.gradle
alias(libs.plugins.definitions)
alias(libs.plugins.npm.publishing)
alias(libs.plugins.android.library)
alias(libs.plugins.versioning)
alias(libs.plugins.vault.client)
id("maven-publish")
id("signing")
}

repositories {
mavenCentral()
google()
mavenCentral()
gradlePluginPortal()
}

java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}

kotlin {
ios {
binaries.framework()
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach {
it.binaries.framework()
}

iosSimulatorArm64()

androidTarget() {
androidTarget {
publishAllLibraryVariants()
}
jvm()
Expand All @@ -53,11 +57,21 @@ kotlin {
}
}
}
wasmJs {
browser ()
binaries.library()
compilations.all {
compileTaskProvider.configure {
compilerOptions.freeCompilerArgs.add("-Xir-minimized-member-names=false")
}
}
}

sourceSets {
val commonMain by getting {
dependencies {
api(libs.ktor.client.core)
api(libs.ktor.client.logging)
api(libs.kotlinx.coroutines)
api(libs.kotlinx.serialization)
}
Expand Down Expand Up @@ -96,17 +110,8 @@ kotlin {
implementation(libs.opt.java)
}
}
val iosMain by getting {
dependencies {
api(libs.ktor.client.darwin)
}
}
val iosTest by getting
val iosSimulatorArm64Main by getting {
dependsOn(iosMain)
}
val iosSimulatorArm64Test by getting {
dependsOn(iosTest)
iosMain.dependencies {
api(libs.ktor.client.darwin)
}
val jsMain by getting {
dependencies {
Expand All @@ -118,6 +123,12 @@ kotlin {
implementation(kotlin("test-js"))
}
}
val wasmJsMain by getting {
dependencies {
api(libs.ktor.client.cio)
api(libs.kotlinx.browser)
}
}
all {
languageSettings {
optIn("kotlinx.serialization.ExperimentalSerializationApi")
Expand All @@ -130,7 +141,7 @@ kotlin {

configure<LibraryExtension> {
defaultConfig.apply {
compileSdk = 30
compileSdk = 35
minSdkVersion(21)
targetSdkVersion(30)
testInstrumentationRunner = "org.robolectric.RobolectricTestRunner"
Expand Down Expand Up @@ -168,8 +179,57 @@ afterEvaluate {
it.groupId = group.toString()
}
}
plugins.withId(libs.plugins.kotlin.multiplatform.get().pluginId) {
afterEvaluate {
tasks.matching {
it.name.contains("test", ignoreCase = true) &&
it is org.gradle.api.tasks.testing.AbstractTestTask
}.configureEach {

this as org.gradle.api.tasks.testing.AbstractTestTask
testLogging {
showStandardStreams = true
showExceptions = true
showCauses = true
showStackTraces = true
events("passed", "skipped", "failed", "standardOut", "standardError")
exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL
}
addTestListener(object : org.gradle.api.tasks.testing.TestListener {
override fun beforeSuite(suite: org.gradle.api.tasks.testing.TestDescriptor) {}
override fun afterSuite(suite: org.gradle.api.tasks.testing.TestDescriptor, result: org.gradle.api.tasks.testing.TestResult) {
if (suite.parent == null) {
println("Test results for ${suite.name}: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} passed, ${result.failedTestCount} failed, ${result.skippedTestCount} skipped)")
}
}
override fun beforeTest(testDescriptor: org.gradle.api.tasks.testing.TestDescriptor) {
println("Starting test: ${testDescriptor.className}.${testDescriptor.name}")
}
override fun afterTest(testDescriptor: org.gradle.api.tasks.testing.TestDescriptor, result: org.gradle.api.tasks.testing.TestResult) {
println("Test ${testDescriptor.className}.${testDescriptor.name} completed: ${result.resultType}")
}
})

if (name.contains("js", ignoreCase = true) || name.contains("wasm", ignoreCase = true)) {
systemProperty("kotlin.js.browser.karma.capture.console", "true")
systemProperty("kotlin.wasm.test.capture.stdout", "true")
systemProperty("kotlin.wasm.test.capture.stderr", "true")
}
}
}
}
tasks {
withType(Test::class) {
testLogging {
showStandardStreams = true
showExceptions = true
showCauses = true
showStackTraces = true
events("passed", "skipped", "failed", "standardOut", "standardError")
exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL
}
}

withType(KotlinNativeSimulatorTest::class) {
filter.excludeTestsMatching("com.liftric.cognito.idp.IdentityProviderClientTests")
}
Expand All @@ -189,7 +249,7 @@ tasks {
doFirst {
val (clientId, region) = with(testSecrets.secret.get()) {
((System.getenv("clientId") ?: this["client_id_dev"].toString()) to
(System.getenv("region") ?: this["client_region_dev"].toString()))
(System.getenv("region") ?: this["client_region_dev"].toString()))
}

mkdir("$buildDir/gen")
Expand All @@ -214,7 +274,7 @@ tasks {
withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "11"
languageVersion = "1.5"
languageVersion = "2.1"
freeCompilerArgs = listOf(
"-Xinline-classes"
)
Expand Down Expand Up @@ -314,41 +374,6 @@ publishing {
}
}

val npmAccessKey: String? by project

npmPublish {
organization.set("liftric")
access.set(PUBLIC)
readme.set(rootProject.file("README.md"))

packages {
named("js") {
packageName.set(project.name)
packageJson {
keywords.set(
listOf(
"kotlin",
"cognito",
"identity-provider",
"liftric",
"aws"
)
)
license.set("MIT")
description.set("Lightweight AWS Cognito Identity Provider client.")
homepage.set("https://github.com/liftric/cognito-idp")
}
}
}

registries {
npmjs {
uri.set(uri("https://registry.npmjs.org"))
authToken.set(npmAccessKey)
}
}
}

signing {
val signingKey: String? by project
val signingPassword: String? by project
Expand Down
1 change: 0 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,5 @@ kotlin.incremental=true
kotlin.incremental.multiplatform=true
kotlin.caching.enabled=true
kotlin.code.style=official
kotlin.js.generate.externals=true
kotlin.native.binary.memoryModel=experimental
kotlin.js.ir.output.granularity=whole-program
38 changes: 38 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[versions]
android-tools-gradle = "8.9.3"
kotlin = "2.1.20"
ktor = "3.1.3"
kotlinx-coroutines = "1.10.2"
kotlinx-serialization = "1.8.1"
kotlinx-browser = "0.3"
androidx-test-core = "1.6.1"
roboelectric = "4.9"
opt-java = "1.3.2"
vault-client = "2.0.0"
versioning = "3.1.0"
npm-publishing = "3.5.3"
definitions = "5.124.0"

[libraries]
ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" }
ktor-client-android = { group = "io.ktor", name = "ktor-client-android", version.ref = "ktor" }
ktor-client-darwin = { group = "io.ktor", name = "ktor-client-darwin-legacy", version.ref = "ktor" }
ktor-client-jvm = { group = "io.ktor", name = "ktor-client-java", version.ref = "ktor" }
ktor-client-js = { group = "io.ktor", name = "ktor-client-js", version.ref = "ktor" }
ktor-client-cio = { group = "io.ktor", name = "ktor-client-cio", version.ref = "ktor" }
ktor-client-logging = { group = "io.ktor", name = "ktor-client-logging", version.ref = "ktor" }
kotlinx-coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
kotlinx-serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
kotlinx-browser = { group = "org.jetbrains.kotlinx", name = "kotlinx-browser", version.ref = "kotlinx-browser" }
androidx-test-core = { group = "androidx.test", name = "core", version.ref = "androidx-test-core" }
roboelectric = { group = "org.robolectric", name = "robolectric", version.ref = "roboelectric" }
opt-java = { group = "com.github.bastiaanjansen", name = "otp-java", version.ref = "opt-java" }

[plugins]
vault-client = { id = "com.liftric.vault-client-plugin", version.ref = "vault-client" }
versioning = { id = "net.nemerosa.versioning", version.ref = "versioning" }
npm-publishing = { id = "dev.petuska.npm.publish", version.ref = "npm-publishing" }
definitions = { id = "io.github.turansky.kfc.definitions", version.ref = "definitions" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
android-library = { id = "com.android.library", version.ref = "android-tools-gradle" }
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
34 changes: 1 addition & 33 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,4 @@ pluginManagement {
mavenCentral()
gradlePluginPortal()
}
}

dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}

versionCatalogs {
create("libs") {
version("android-tools-gradle", "8.1.0")
version("kotlin", "1.9.10")
version("ktor", "2.3.5")

library("ktor-client-core", "io.ktor", "ktor-client-core").versionRef("ktor")
library("ktor-client-android", "io.ktor", "ktor-client-android").versionRef("ktor")
library("ktor-client-darwin", "io.ktor", "ktor-client-darwin-legacy").versionRef("ktor")
library("ktor-client-jvm", "io.ktor", "ktor-client-java").versionRef("ktor")
library("ktor-client-js", "io.ktor", "ktor-client-js").versionRef("ktor")
library("kotlinx-coroutines", "org.jetbrains.kotlinx", "kotlinx-coroutines-core").version("1.7.2")
library("kotlinx-serialization", "org.jetbrains.kotlinx", "kotlinx-serialization-json").version("1.5.1")
library("androidx-test-core", "androidx.test", "core").version("1.2.0")
library("roboelectric", "org.robolectric", "robolectric").version("4.9")
library("opt-java", "com.github.bastiaanjansen", "otp-java").version("1.3.2")

plugin("vault-client", "com.liftric.vault-client-plugin").version("2.0.0")
plugin("versioning", "net.nemerosa.versioning").version("3.0.0")
plugin("npm-publishing", "dev.petuska.npm.publish").version("3.0.0")
plugin("definitions", "io.github.turansky.kfc.definitions").version("5.50.0")
plugin("kotlin.serialization", "org.jetbrains.kotlin.plugin.serialization").versionRef("kotlin")
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.ktor.client.*
import io.ktor.client.call.*
import io.ktor.client.engine.*
import io.ktor.client.plugins.*
import io.ktor.client.plugins.logging.*
import io.ktor.client.request.*
import io.ktor.client.statement.*
import io.ktor.http.*
Expand All @@ -27,6 +28,12 @@ open class IdentityProviderClient(region: String, clientId: String, engine: Http
}
private val configuration = Configuration(region, clientId)
private val client = HttpClient(engine ?: Engine) {
install(Logging) {
level = LogLevel.ALL
logger = Logger.SIMPLE
sanitizeHeader { header -> header == HttpHeaders.Authorization }
}

expectSuccess = true
/**
* When referencing members that are in the
Expand Down
4 changes: 2 additions & 2 deletions src/commonMain/kotlin/com/liftric/cognito/idp/core/Payload.kt
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ internal data class ConfirmForgotPassword(
val Password: String
)

@JsExport

@Serializable
data class UserAttribute(
val Name: String,
Expand Down Expand Up @@ -134,7 +134,7 @@ internal data class SetUserMFAPreference(
val SoftwareTokenMfaSettings: MfaSettings?
)

@JsExport

@Serializable
data class MfaSettings(
val Enabled: Boolean,
Expand Down
Loading