From 4f430a7ea9ea07850e941f78e90e734b8ad64e24 Mon Sep 17 00:00:00 2001 From: Milena-Czierlinski Date: Tue, 17 Mar 2026 15:49:55 +0100 Subject: [PATCH 1/2] feat: add ephemeral to emtpy token --- .../src/modules/tokens/TokenController.ts | 4 ++++ .../src/modules/tokens/local/EmptyToken.ts | 16 ++++++++-------- .../tokens/local/SendEmptyTokenParameters.ts | 5 +++++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/transport/src/modules/tokens/TokenController.ts b/packages/transport/src/modules/tokens/TokenController.ts index 29aa473de..042fa6963 100644 --- a/packages/transport/src/modules/tokens/TokenController.ts +++ b/packages/transport/src/modules/tokens/TokenController.ts @@ -107,6 +107,10 @@ export class TokenController extends TransportController { passwordProtection }); + if (!input.ephemeral) { + await this.tokens.create(token); + } + return token; } diff --git a/packages/transport/src/modules/tokens/local/EmptyToken.ts b/packages/transport/src/modules/tokens/local/EmptyToken.ts index db4ab3c22..0a3616da5 100644 --- a/packages/transport/src/modules/tokens/local/EmptyToken.ts +++ b/packages/transport/src/modules/tokens/local/EmptyToken.ts @@ -1,21 +1,21 @@ -import { ISerializable, Serializable, serialize, type, validate } from "@js-soft/ts-serval"; -import { CoreDate, CoreId, ICoreDate, ICoreId } from "@nmshd/core-types"; +import { serialize, type, validate } from "@js-soft/ts-serval"; +import { CoreDate, ICoreDate } from "@nmshd/core-types"; import { CryptoSecretKey, ICryptoSecretKey } from "@nmshd/crypto"; +import { nameof } from "ts-simple-nameof"; +import { CoreSynchronizable, ICoreSynchronizable } from "../../../core"; import { IPasswordProtection, PasswordProtection } from "../../../core/types/PasswordProtection"; import { TokenReference } from "../transmission/TokenReference"; -export interface IEmptyToken extends ISerializable { - id: ICoreId; +export interface IEmptyToken extends ICoreSynchronizable { secretKey: ICryptoSecretKey; expiresAt: ICoreDate; passwordProtection: IPasswordProtection; } @type("EmptyToken") -export class EmptyToken extends Serializable implements IEmptyToken { - @validate() - @serialize() - public id: CoreId; +export class EmptyToken extends CoreSynchronizable implements IEmptyToken { + public override readonly technicalProperties = ["@type", "@context", nameof((r) => r.secretKey), nameof((r) => r.expiresAt)]; + public override readonly userdataProperties = [nameof((r) => r.passwordProtection)]; @validate() @serialize() diff --git a/packages/transport/src/modules/tokens/local/SendEmptyTokenParameters.ts b/packages/transport/src/modules/tokens/local/SendEmptyTokenParameters.ts index 282b6d1d2..f09cea641 100644 --- a/packages/transport/src/modules/tokens/local/SendEmptyTokenParameters.ts +++ b/packages/transport/src/modules/tokens/local/SendEmptyTokenParameters.ts @@ -3,6 +3,7 @@ import { CoreDate, ICoreDate } from "@nmshd/core-types"; export interface ISendEmptyTokenParameters extends ISerializable { expiresAt: ICoreDate; + ephemeral: boolean; } @type("SendEmptyTokenParameters") @@ -11,6 +12,10 @@ export class SendEmptyTokenParameters extends Serializable implements ISendEmpty @serialize() public expiresAt: CoreDate; + @validate() + @serialize() + public ephemeral: boolean; + public static from(value: ISendEmptyTokenParameters): SendEmptyTokenParameters { return this.fromAny(value); } From 848de82c0ff28399338781b2d606de15085494e3 Mon Sep 17 00:00:00 2001 From: Milena-Czierlinski Date: Tue, 17 Mar 2026 16:10:14 +0100 Subject: [PATCH 2/2] test: update test --- .../transport/test/modules/tokens/TokenController.test.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/transport/test/modules/tokens/TokenController.test.ts b/packages/transport/test/modules/tokens/TokenController.test.ts index a635cfbbc..5eb0ed425 100644 --- a/packages/transport/test/modules/tokens/TokenController.test.ts +++ b/packages/transport/test/modules/tokens/TokenController.test.ts @@ -69,9 +69,7 @@ describe("TokenController", function () { test("should send an empty token", async function () { const expiresAt = CoreDate.utc().add({ hours: 1 }); - const sentToken = await sender.tokens.sendEmptyToken({ - expiresAt - }); + const sentToken = await sender.tokens.sendEmptyToken({ expiresAt, ephemeral: true }); expect(sentToken).toBeDefined(); });