Skip to content
Open
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
656 changes: 656 additions & 0 deletions IMPROVEMENTS.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions app-android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ plugins {
}

android {
namespace = "dev.sdkforge.template.android"
namespace = "dev.sdkforge.jwt.decode.android"
compileSdk = 36
defaultConfig {
applicationId = "dev.sdkforge.template.android"
applicationId = "dev.sdkforge.jwt.decode.android"
minSdk = 21
targetSdk = 36
versionCode = 1
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package dev.sdkforge.template.android
package dev.sdkforge.jwt.decode.android

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.ui.Modifier
import dev.sdkforge.template.app.App
import dev.sdkforge.jwt.decode.app.App

class MainActivity : ComponentActivity() {
override fun onCreate(
Expand Down
2 changes: 1 addition & 1 deletion app-shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ kotlin {
}

android {
namespace = "dev.sdkforge.template.app"
namespace = "dev.sdkforge.jwt.decode.app"
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.sdkforge.template.app
package dev.sdkforge.jwt.decode.app

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
Expand All @@ -9,7 +9,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import dev.sdkforge.template.core.currentPlatform
import dev.sdkforge.jwt.decode.core.currentPlatform

@Composable
fun App(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.sdkforge.template.app
package dev.sdkforge.jwt.decode.app

import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.shape.RoundedCornerShape
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.sdkforge.template.app
package dev.sdkforge.jwt.decode.app

import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.ui.Modifier
Expand Down
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ android.nonTransitiveRClass=true
org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true
#Publishing
publishing.group=dev.sdkforge.template
publishing.group=dev.sdkforge.jwt.decode
publishing.version=0.0.1
publishing.owner=SDKForge
publishing.repository=template-sdk
publishing.repository=JWTDecode
5 changes: 5 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ androidx-activityCompose = "1.10.1"
binary-compatibility-validator = "0.18.1"
dokka = "2.0.0"
dependency-guard = "0.5.0"
kotlinxDatetime = "0.7.1"
kotlinxSerializationJson = "1.9.0"
kover = "0.9.1"
versions = "0.52.0"
benchmark = "1.4.0"
Expand All @@ -26,6 +28,8 @@ compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref =
compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" }
compose-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "compose" }
compose-material3 = { module = "androidx.compose.material3:material3", version.ref = "compose-material3" }
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDatetime" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" }
androidx-runner = { group = "androidx.test", name = "runner", version.ref = "runner" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junit" }
junit = { group = "junit", name = "junit", version.ref = "junitVersion" }
Expand All @@ -36,6 +40,7 @@ androidApplication = { id = "com.android.application", version.ref = "agp" }
androidLibrary = { id = "com.android.library", version.ref = "agp" }
kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
compose-multiplatform = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator" }
Expand Down
3 changes: 2 additions & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,13 @@ dependencyResolutionManagement {
}
}

rootProject.name = "SDKForgeTemplate"
rootProject.name = "SDKForge-JWTDecode"

include(":app-android")
include(":app-shared")
include(":shared")
include(":shared-core")
include(":shared-domain")

include(":internal-ktlint")
// uncomment if it's needed for development
Expand Down
6 changes: 3 additions & 3 deletions shared-core/api/shared-core.api
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
public abstract interface class dev/sdkforge/template/core/Platform {
public abstract interface class dev/sdkforge/jwt/decode/core/Platform {
public abstract fun getName ()Ljava/lang/String;
public abstract fun getVersion ()Ljava/lang/String;
}

public final class dev/sdkforge/template/core/Platform_androidKt {
public static final fun getCurrentPlatform ()Ldev/sdkforge/template/core/Platform;
public final class dev/sdkforge/jwt/decode/core/Platform_androidKt {
public static final fun getCurrentPlatform ()Ldev/sdkforge/jwt/decode/core/Platform;
}

2 changes: 1 addition & 1 deletion shared-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,5 @@ kotlin {
}

android {
namespace = "dev.sdkforge.template.core"
namespace = "dev.sdkforge.jwt.decode.core"
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.sdkforge.template.core
package dev.sdkforge.jwt.decode.core

actual val currentPlatform: Platform = object : Platform {
override val name: String get() = "Android"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@file:Suppress("ktlint:standard:filename")

package dev.sdkforge.template.core
package dev.sdkforge.jwt.decode.core

import org.junit.Assert.assertTrue
import org.junit.Test
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.sdkforge.template.core
package dev.sdkforge.jwt.decode.core

interface Platform {
val name: String
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@file:Suppress("ktlint:standard:filename")

package dev.sdkforge.template.core
package dev.sdkforge.jwt.decode.core

import kotlin.test.Test
import kotlin.test.assertTrue
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dev.sdkforge.template.core
package dev.sdkforge.jwt.decode.core

import platform.UIKit.UIDevice

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@file:Suppress("ktlint:standard:filename")

package dev.sdkforge.template.core
package dev.sdkforge.jwt.decode.core

import kotlin.test.Test
import kotlin.test.assertTrue
Expand Down
76 changes: 76 additions & 0 deletions shared-domain/api/shared-domain.api
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
public final class dev/sdkforge/jwt/decode/domain/AudienceAsStringSerializer : kotlinx/serialization/KSerializer {
public static final field INSTANCE Ldev/sdkforge/jwt/decode/domain/AudienceAsStringSerializer;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/util/List;
public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/util/List;)V
}

public abstract interface class dev/sdkforge/jwt/decode/domain/Claim {
public static final field Companion Ldev/sdkforge/jwt/decode/domain/Claim$Companion;
public abstract fun asBoolean ()Ljava/lang/Boolean;
public abstract fun asDate ()Lkotlin/time/Instant;
public abstract fun asDouble ()Ljava/lang/Double;
public abstract fun asInt ()Ljava/lang/Integer;
public abstract fun asList (Lkotlinx/serialization/DeserializationStrategy;)Ljava/util/List;
public abstract fun asLong ()Ljava/lang/Long;
public abstract fun asObject (Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object;
public abstract fun asString ()Ljava/lang/String;
}

public final class dev/sdkforge/jwt/decode/domain/Claim$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}

public final class dev/sdkforge/jwt/decode/domain/ClaimAsMapSerializer : kotlinx/serialization/KSerializer {
public static final field INSTANCE Ldev/sdkforge/jwt/decode/domain/ClaimAsMapSerializer;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/util/Map;
public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/util/Map;)V
}

public final class dev/sdkforge/jwt/decode/domain/ClaimAsStringSerializer : kotlinx/serialization/KSerializer {
public static final field INSTANCE Ldev/sdkforge/jwt/decode/domain/ClaimAsStringSerializer;
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ldev/sdkforge/jwt/decode/domain/Claim;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Ldev/sdkforge/jwt/decode/domain/Claim;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
}

public final class dev/sdkforge/jwt/decode/domain/DecodeException : java/lang/RuntimeException {
}

public final class dev/sdkforge/jwt/decode/domain/InstantAsStringSerializer : kotlinx/serialization/KSerializer {
public static final field INSTANCE Ldev/sdkforge/jwt/decode/domain/InstantAsStringSerializer;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lkotlin/time/Instant;
public fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun serialize (Lkotlinx/serialization/encoding/Encoder;Lkotlin/time/Instant;)V
}

public final class dev/sdkforge/jwt/decode/domain/JWT {
public static final field Companion Ldev/sdkforge/jwt/decode/domain/JWT$Companion;
public fun <init> (Ljava/lang/String;)V
public final fun getAudience ()Ljava/util/List;
public final fun getClaim (Ljava/lang/String;)Ldev/sdkforge/jwt/decode/domain/Claim;
public final fun getClaims ()Ljava/util/Map;
public final fun getExpiresAt ()Lkotlin/time/Instant;
public final fun getHeader ()Ljava/util/Map;
public final fun getId ()Ljava/lang/String;
public final fun getIssuedAt ()Lkotlin/time/Instant;
public final fun getIssuer ()Ljava/lang/String;
public final fun getNotBefore ()Lkotlin/time/Instant;
public final fun getSignature ()Ljava/lang/String;
public final fun getSubject ()Ljava/lang/String;
public final fun isExpired-LRDsOJo (J)Z
public fun toString ()Ljava/lang/String;
}

public final class dev/sdkforge/jwt/decode/domain/JWT$Companion {
}

30 changes: 30 additions & 0 deletions shared-domain/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidLibrary)
alias(libs.plugins.kotlinSerialization)
alias(libs.plugins.binaryCompatibilityValidator)
alias(libs.plugins.dokka)
alias(libs.plugins.build.logic.library.kmp)
alias(libs.plugins.build.logic.library.android)
alias(libs.plugins.build.logic.library.publishing)
}

kotlin {
sourceSets {
commonMain {
dependencies {
implementation(libs.kotlinx.datetime)
implementation(libs.kotlinx.serialization.json)
}
}
commonTest {
dependencies {
implementation(libs.kotlin.test)
}
}
}
}

android {
namespace = "dev.sdkforge.jwt.decode.domain"
}
9 changes: 9 additions & 0 deletions shared-domain/dependencies/releaseRuntimeClasspath.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
org.jetbrains.kotlin:kotlin-stdlib:2.2.20-Beta2
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.7.1
org.jetbrains.kotlinx:kotlinx-datetime:0.7.1
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-core:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.9.0
org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0
org.jetbrains:annotations:13.0
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
@file:Suppress("ktlint:standard:function-signature")

package dev.sdkforge.jwt.decode.domain

import kotlin.time.ExperimentalTime
import kotlin.time.Instant
import kotlinx.serialization.DeserializationStrategy

/**
* The BaseClaim class is a Claim implementation that returns null when any of it's methods it's called.
*/
@OptIn(ExperimentalTime::class)
internal open class BaseClaim : Claim {
override fun asBoolean(): Boolean? = null
override fun asInt(): Int? = null
override fun asLong(): Long? = null
override fun asDouble(): Double? = null
override fun asString(): String? = null
override fun asDate(): Instant? = null

@Throws(DecodeException::class)
override fun <T> asList(deserializer: DeserializationStrategy<T>): List<T> = emptyList()

@Throws(DecodeException::class)
override fun <T> asObject(deserializer: DeserializationStrategy<T>): T? = null
}
Loading