@seams/wallet-server 0.10.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/THIRD_PARTY_NOTICES.md +33 -1812
  2. package/artifact-manifest.json +30 -30
  3. package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
  4. package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
  5. package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
  6. package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
  7. package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
  8. package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
  9. package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
  10. package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
  11. package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
  12. package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
  13. package/cloudflare-router-ab/build/router/index.js +2 -2
  14. package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
  15. package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
  16. package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
  17. package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
  18. package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
  19. package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
  20. package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
  21. package/dist/esm/cloud-host.js +8 -7
  22. package/dist/esm/hosted-wallet-gateway.js +19 -2
  23. package/dist/esm/index.js +1 -2
  24. package/dist/esm/localHostedWalletGatewayHandler.js +17 -11
  25. package/dist/esm/localIntendedYaoFault.js +34 -3
  26. package/dist/esm/localIntendedYaoRecoveryFault.js +19 -16
  27. package/dist/esm/localIntendedYaoSigningFault.js +31 -16
  28. package/dist/esm/router/auth/routerApiKeyAuth.js +1 -13
  29. package/dist/esm/router/cloudflare/d1/auth/d1RouterApiAuthService.js +13 -4
  30. package/dist/esm/router/cloudflare/d1/deviceLinking/d1LinkedDeviceOwnerAuthorizationProvider.js +1 -1
  31. package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +4 -4
  32. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecords.js +1 -1
  33. package/dist/esm/router/cloudflare/d1/emailOtp/d1EmailOtpRecoveryService.js +1 -1
  34. package/dist/esm/router/cloudflare/d1/emailOtp/d1GoogleEmailOtpSessionResolver.js +1 -1
  35. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.js +19 -0
  36. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +5 -5
  37. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +5 -2
  38. package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupSupport.js +7 -1
  39. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +56 -21
  40. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationRead.js +15 -5
  41. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +87 -34
  42. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +23 -7
  43. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerFinalizeRecord.js +1 -1
  44. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +3 -3
  45. package/dist/esm/router/cloudflare/d1/wallet/d1WalletAuthMethodService.js +3 -3
  46. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnAuthService.js +1 -1
  47. package/dist/esm/router/cloudflare/d1/webauthn/d1WebAuthnRecords.js +1 -1
  48. package/dist/esm/router/cloudflare-adaptor.js +2 -2
  49. package/dist/esm/router/cloudflare.js +2495 -2444
  50. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +1 -1
  51. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +5 -1
  52. package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +15 -3
  53. package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +39 -32
  54. package/dist/esm/router/framework/registrationSetupDispatch.js +11 -3
  55. package/dist/esm/router/framework/routeResponses.js +1 -5
  56. package/dist/esm/router/transport/fetch/routes/deviceLinkingOwnerAuthorization.js +1 -1
  57. package/dist/esm/router/transport/fetch/routes/passkeyCustody.js +2 -2
  58. package/dist/esm/router/transport/fetch/routes/thresholdEd25519.js +51 -24
  59. package/dist/esm/shared-ts/src/utils/validation.js +5 -1
  60. package/dist/esm/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.js +19 -1
  61. package/dist/esm/threshold/session/signingSessionSeal/index.js +1 -2
  62. package/dist/esm/wasm/evm_crypto/pkg/evm_crypto_bg.wasm +0 -0
  63. package/dist/esm/wasm/near_signer/pkg/wasm_signer_worker_bg.wasm +0 -0
  64. package/dist/esm/wasm/shamir3pass_runtime/pkg/shamir3pass_runtime_bg.wasm +0 -0
  65. package/dist/types/wallet-server/src/cloud-host.d.ts +1 -0
  66. package/dist/types/wallet-server/src/localHostedWalletGatewayHandler.d.ts +1 -1
  67. package/dist/types/wallet-server/src/localIntendedYaoFault.d.ts +13 -3
  68. package/dist/types/wallet-server/src/localIntendedYaoRecoveryFault.d.ts +4 -2
  69. package/dist/types/wallet-server/src/localIntendedYaoSigningFault.d.ts +4 -2
  70. package/dist/types/wallet-server/src/router/auth/routerApiKeyAuth.d.ts +0 -8
  71. package/dist/types/wallet-server/src/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.d.ts +2 -1
  72. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore.d.ts +2 -0
  73. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +1 -0
  74. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupSupport.d.ts +2 -0
  75. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.d.ts +27 -3
  76. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationRead.d.ts +20 -1
  77. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +6 -0
  78. package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +1 -1
  79. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +10 -1
  80. package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.d.ts +3 -1
  81. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +2 -0
  82. package/dist/types/wallet-server/src/router/framework/routeResponses.d.ts +0 -2
  83. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/crypto/shamir3PassWasm.d.ts +6 -0
  84. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/index.d.ts +1 -2
  85. package/package.json +2 -9
  86. package/src/README.md +5 -3
  87. package/dist/esm/router/express-adaptor.js +0 -84
  88. package/dist/esm/router/express.js +0 -26400
  89. package/dist/esm/router/node/nodeHostedWalletGateway.js +0 -64
  90. package/dist/esm/router/node/nodeHostedWalletGatewayCheck.js +0 -163
  91. package/dist/esm/router/node/nodeHostedWalletGatewayMain.js +0 -120
  92. package/dist/esm/router/node/nodeHttp.js +0 -79
  93. package/dist/esm/router/node/nodeSqlite.js +0 -43
  94. package/dist/esm/router/node/signerSqlMigrations.js +0 -48
  95. package/dist/esm/storage/syncSqlite.js +0 -79
  96. package/dist/esm/threshold/session/signingSessionSeal/transport/express.js +0 -75
  97. package/dist/types/wallet-server/src/router/express-adaptor.d.ts +0 -22
  98. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGateway.d.ts +0 -34
  99. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayCheck.d.ts +0 -21
  100. package/dist/types/wallet-server/src/router/node/nodeHostedWalletGatewayMain.d.ts +0 -2
  101. package/dist/types/wallet-server/src/router/node/nodeHttp.d.ts +0 -13
  102. package/dist/types/wallet-server/src/router/node/nodeSqlite.d.ts +0 -22
  103. package/dist/types/wallet-server/src/router/node/signerSqlMigrations.d.ts +0 -20
  104. package/dist/types/wallet-server/src/storage/syncSqlite.d.ts +0 -28
  105. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/transport/express.d.ts +0 -12
@@ -1,3 +1,4 @@
1
+ import type { D1RegistrationCeremonyRecordStore } from './router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore';
1
2
  export declare const LOCAL_INTENDED_YAO_RECOVERY_FAULT_HEADER_V1 = "x-seams-intended-yao-recovery-fault-v1";
2
3
  export declare const LOCAL_INTENDED_YAO_RECOVERY_FAULT_TOKEN_HEADER_V1 = "x-seams-intended-yao-recovery-fault-token-v1";
3
4
  /**
@@ -28,17 +29,18 @@ export declare class LocalIntendedYaoRecoveryFaultControllerV1 {
28
29
  private readonly baseFetch;
29
30
  private readonly mode;
30
31
  private readonly token;
32
+ private readonly storage;
31
33
  private executed;
32
34
  private failed;
33
35
  private kept;
34
- constructor(baseFetch: typeof globalThis.fetch, mode: 'lose_router_recovery_replies' | 'withhold_router_recovery_execute', token: string);
36
+ constructor(baseFetch: typeof globalThis.fetch, mode: 'lose_router_recovery_replies' | 'withhold_router_recovery_execute', token: string, storage: D1RegistrationCeremonyRecordStore);
35
37
  fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
36
38
  outcome(): LocalIntendedYaoRecoveryFaultOutcomeV1;
37
39
  }
38
40
  /** Sends the execution kept under `token` to the Router, exactly. */
39
41
  export declare function releaseLocalIntendedYaoRecoveryExecuteV1(router: {
40
42
  fetch(request: Request): Promise<Response>;
41
- }, token: string): Promise<Response>;
43
+ }, token: string, storage: D1RegistrationCeremonyRecordStore): Promise<Response>;
42
44
  export declare function requestWithoutLocalIntendedYaoRecoveryFaultHeadersV1(request: Request): Request;
43
45
  export declare function responseWithLocalIntendedYaoRecoveryFaultOutcomeV1(response: Response, outcome: LocalIntendedYaoRecoveryFaultOutcomeV1, token: string): Response;
44
46
  export {};
@@ -1,3 +1,4 @@
1
+ import type { D1RegistrationCeremonyRecordStore } from './router/cloudflare/d1/registration/d1RegistrationCeremonyRecordStore';
1
2
  export declare const LOCAL_INTENDED_YAO_SIGNING_FAULT_HEADER_V1 = "x-seams-intended-yao-signing-fault-v1";
2
3
  export declare const LOCAL_INTENDED_YAO_SIGNING_FAULT_TOKEN_HEADER_V1 = "x-seams-intended-yao-signing-fault-token-v1";
3
4
  export declare const ROUTER_AB_ED25519_SIGNING_FINALIZE_PATH_V1 = "/router-ab/ed25519/sign";
@@ -20,8 +21,9 @@ export declare class LocalIntendedYaoSigningFaultControllerV1 {
20
21
  private readonly baseFetch;
21
22
  private readonly mode;
22
23
  private readonly token;
24
+ private readonly storage;
23
25
  private kept;
24
- constructor(baseFetch: typeof globalThis.fetch, mode: 'capture_signing_finalize' | 'withhold_signing_finalize', token: string);
26
+ constructor(baseFetch: typeof globalThis.fetch, mode: 'capture_signing_finalize' | 'withhold_signing_finalize', token: string, storage: D1RegistrationCeremonyRecordStore);
25
27
  fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
26
28
  private keep;
27
29
  outcome(): string;
@@ -29,7 +31,7 @@ export declare class LocalIntendedYaoSigningFaultControllerV1 {
29
31
  /** Sends the finalize kept under `token` to the Router again, exactly. */
30
32
  export declare function releaseLocalIntendedYaoSigningFinalizeV1(router: {
31
33
  fetch(request: Request): Promise<Response>;
32
- }, token: string): Promise<Response>;
34
+ }, token: string, storage: D1RegistrationCeremonyRecordStore): Promise<Response>;
33
35
  export declare function requestWithoutLocalIntendedYaoSigningFaultHeadersV1(request: Request): Request;
34
36
  export declare function responseWithLocalIntendedYaoSigningFaultOutcomeV1(response: Response, outcome: string): Response;
35
37
  export {};
@@ -2,15 +2,7 @@ type HeaderBag = Headers | Record<string, unknown>;
2
2
  export declare function extractBearerCredential(headers: HeaderBag): string | null;
3
3
  export declare function normalizeSourceIp(raw: string | undefined): string | null;
4
4
  export declare function extractRouterApiEnvironmentId(headers: HeaderBag): string | null;
5
- export declare function resolveSourceIpFromExpressRequest(input: {
6
- headers: Record<string, unknown>;
7
- ip?: string | null;
8
- }): string | null;
9
5
  export declare function resolveSourceIpFromFetchHeaders(headers: HeaderBag): string | null;
10
- export declare function resolveRequestOriginRateLimitKeyFromExpressRequest(input: {
11
- headers: Record<string, unknown>;
12
- ip?: string | null;
13
- }): string;
14
6
  export declare function resolveRequestOriginRateLimitKeyFromFetchHeaders(headers: HeaderBag): string;
15
7
  export {};
16
8
  //# sourceMappingURL=routerApiKeyAuth.d.ts.map
@@ -1,7 +1,8 @@
1
- import { type CloudflareD1VersionedJsonRecordStoreOptions } from '../versionedJson/d1VersionedJsonRecordStore';
1
+ import { type CloudflareD1VersionedJsonRecordStore, type CloudflareD1VersionedJsonRecordStoreOptions } from '../versionedJson/d1VersionedJsonRecordStore';
2
2
  import type { VersionedJsonObject } from '../../../framework/versionedJsonRecordStore';
3
3
  import { type RouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1 } from '../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore';
4
4
  export type RouterAbEd25519YaoProductRegistrationPartitionedStateD1OptionsV1 = Omit<CloudflareD1VersionedJsonRecordStoreOptions<VersionedJsonObject>, 'encode' | 'parse'>;
5
5
  export declare function createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1(options: RouterAbEd25519YaoProductRegistrationPartitionedStateD1OptionsV1): RouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1;
6
6
  export declare function evictWalletEd25519CapabilityCache(options: RouterAbEd25519YaoProductRegistrationPartitionedStateD1OptionsV1, walletId: string): Promise<void>;
7
+ export declare function createD1Ed25519YaoLifecycleRecords(options: RouterAbEd25519YaoProductRegistrationPartitionedStateD1OptionsV1): CloudflareD1VersionedJsonRecordStore<VersionedJsonObject>;
7
8
  //# sourceMappingURL=d1Ed25519YaoProductRegistrationPartitionedStateStore.d.ts.map
@@ -40,6 +40,8 @@ export declare class D1RegistrationCeremonyRecordStore {
40
40
  constructor(options: D1RegistrationCeremonyRecordStoreOptions);
41
41
  get(scope: string, id: string): Promise<D1RegistrationCeremonyStoredRecord | null>;
42
42
  prepareGet(scope: string, id: string): D1PreparedStatementLike;
43
+ /** Load the ceremony's immutable founding identities and their current records together. */
44
+ prepareFoundingRecordsRead(id: string): D1PreparedStatementLike;
43
45
  parseGet(scope: string, id: string, row: StoredRow | null): Promise<D1RegistrationCeremonyStoredRecord | null>;
44
46
  putExact(mutation: D1RegistrationCeremonyRecordMutation): Promise<void>;
45
47
  insertOrRead(mutation: D1RegistrationCeremonyRecordMutation): Promise<D1RegistrationCeremonyStoredRecord>;
@@ -32,6 +32,7 @@ export declare class CloudflareD1RegistrationCeremonyIntentStore {
32
32
  reserveSetupCeremony(proposed: StoredWalletRegistrationCeremony, ownershipGeneration: number): Promise<StoredWalletRegistrationCeremony>;
33
33
  getCeremony(registrationCeremonyId: string): Promise<StoredWalletRegistrationCeremony | null>;
34
34
  prepareCeremonyRead(registrationCeremonyId: string): D1PreparedStatementLike;
35
+ prepareFoundingRecordsRead(registrationCeremonyId: string): D1PreparedStatementLike;
35
36
  parseCeremonyRead(registrationCeremonyId: string, result: D1ResultLike<Record<string, unknown>>): Promise<StoredWalletRegistrationCeremony | null>;
36
37
  parseCeremonySnapshotRead(registrationCeremonyId: string, result: D1ResultLike<Record<string, unknown>>): Promise<D1WalletRegistrationEcdsaCeremonyClaimV1 | null>;
37
38
  getCeremonySnapshot(registrationCeremonyId: string): Promise<D1WalletRegistrationEcdsaCeremonyClaimV1 | null>;
@@ -48,6 +48,8 @@ type RegistrationIntentSignerBranches = {
48
48
  readonly evmFamilyEcdsa: RegistrationEvmFamilyEcdsaSignerPlan | null;
49
49
  };
50
50
  export declare function recordRegistrationServerTiming(sink: Array<readonly [string, number]>, name: string, startedAtMs: number): void;
51
+ /** The `Server-Timing` header of a registration route's recorded waits. */
52
+ export declare function registrationServerTimingHeaders(serverTiming: readonly (readonly [string, number])[]): Record<string, string> | undefined;
51
53
  export declare function recordRegistrationPromiseTiming<T>(args: {
52
54
  readonly sink: Array<readonly [string, number]>;
53
55
  readonly name: string;
@@ -2,9 +2,11 @@ import { type PasskeyCredentialClaims } from '../../../../core/passkeyCredential
2
2
  import type { ActiveWalletAuthorityV1 } from '../../../../../../shared-ts/src/authorization/walletAuthority';
3
3
  import { type ActiveWalletAuthMethodRecordV2 } from '../../../../../../shared-ts/src/utils/walletAuthMethodRecord';
4
4
  import { type RegistrationAuthority } from '../../../../../../shared-ts/src/utils/registrationAuthMethodInput';
5
+ import type { Variant } from '../../../../../../shared-ts/src/utils/variant';
5
6
  import type { WalletRecord, WalletSignerRecord } from '../../../../core/WalletStore';
6
7
  import type { D1DatabaseLike, D1PreparedStatementLike, D1ResultLike } from '../../../../storage/tenantRoute';
7
8
  import type { D1EmailOtpRegistrationCommitPlan } from '../emailOtp/d1EmailOtpRegistrationEnrollmentFinalizer';
9
+ import type { D1WalletRegistrationOperationPreparedV1 } from './d1WalletRegistrationPreparation';
8
10
  export type D1RegistrationCommitBatch = (statements: readonly D1PreparedStatementLike[]) => Promise<readonly D1ResultLike[]>;
9
11
  type ReservedWalletRegistrationCommit = (input: D1WalletRegistrationCommitInput, executeBatch?: D1RegistrationCommitBatch) => Promise<void>;
10
12
  type D1WalletRegistrationCommitBase = {
@@ -40,9 +42,11 @@ export type HeldRegistrationPasskeyClaim = {
40
42
  export interface D1WalletRegistrationCommitStore {
41
43
  /**
42
44
  * Claims the authority's passkey through shared authority, unless `held`
43
- * records that the same claim was already granted for this ceremony.
45
+ * records that the same claim was already granted for this ceremony. Uses
46
+ * the founding snapshot when supplied; otherwise reads the named records
47
+ * beside the claim. The returned commit performs no additional read.
44
48
  */
45
- reserveAuthority(authority: RegistrationAuthority, held?: HeldRegistrationPasskeyClaim | null): Promise<ReservedWalletRegistrationCommit>;
49
+ reserveAuthority(authority: RegistrationAuthority, held: HeldRegistrationPasskeyClaim | null, founding: RegistrationFoundingRead | null): Promise<ReservedWalletRegistrationCommit>;
46
50
  /**
47
51
  * Claims a verified passkey before finalization and records a granted
48
52
  * claim. A refusal records nothing, so finalization claims again and
@@ -58,6 +62,26 @@ export interface D1WalletRegistrationCommitStore {
58
62
  /** Removes the record of a finalized ceremony. Shared authority keeps the claim. */
59
63
  deleteHeldPasskeyClaim(registrationCeremonyId: string): Promise<void>;
60
64
  }
65
+ type FoundingRecordIds = Pick<D1WalletRegistrationOperationPreparedV1, 'walletAuthorityId' | 'walletAuthMethodId'>;
66
+ export type RegistrationFoundingRead = {
67
+ readonly kind: 'read';
68
+ readonly ids: FoundingRecordIds;
69
+ readonly records?: never;
70
+ } | {
71
+ readonly kind: 'snapshot';
72
+ readonly records: StoredFoundingRecords;
73
+ readonly ids?: never;
74
+ };
75
+ export type RegistrationFoundingSnapshot = Variant<RegistrationFoundingRead, 'kind', 'snapshot'>;
76
+ export declare function parseRegistrationFoundingRead(result: D1ResultLike<Record<string, unknown>>): RegistrationFoundingSnapshot | null;
77
+ /** A registration's founding authority and auth method rows from one database snapshot. */
78
+ type StoredFoundingRecords = FoundingRecordIds & {
79
+ readonly authorityRow: D1RegistrationRecordJsonRow | null;
80
+ readonly authMethodRow: D1RegistrationRecordJsonRow | null;
81
+ };
82
+ type D1RegistrationRecordJsonRow = {
83
+ readonly record_json?: unknown;
84
+ };
61
85
  export declare class CloudflareD1WalletRegistrationCommitStore implements D1WalletRegistrationCommitStore {
62
86
  private readonly database;
63
87
  private readonly scope;
@@ -70,7 +94,7 @@ export declare class CloudflareD1WalletRegistrationCommitStore implements D1Wall
70
94
  readonly projectId: string;
71
95
  readonly envId: string;
72
96
  });
73
- reserveAuthority(authority: RegistrationAuthority, held?: HeldRegistrationPasskeyClaim | null): Promise<ReservedWalletRegistrationCommit>;
97
+ reserveAuthority(authority: RegistrationAuthority, held: HeldRegistrationPasskeyClaim | null, founding: RegistrationFoundingRead | null): Promise<ReservedWalletRegistrationCommit>;
74
98
  claimPasskeyAhead(input: {
75
99
  readonly registrationCeremonyId: string;
76
100
  readonly authority: RegistrationAuthority;
@@ -1,3 +1,4 @@
1
+ import type { createD1Ed25519YaoLifecycleRecords } from '../ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore';
1
2
  import type { D1DatabaseLike } from '../../../../storage/tenantRoute';
2
3
  import type { WalletRegistrationHomeAuthority } from '../../../domains/walletRegistration/walletRegistrationReservation';
3
4
  import type { CloudflareD1RegistrationCeremonyIntentStore } from './d1RegistrationCeremonyStore';
@@ -13,8 +14,9 @@ export declare class D1WalletRegistrationRead {
13
14
  readonly operations: D1WalletOperationStore<D1WalletRegistrationNearProvisioningSideEffectRecord>;
14
15
  private readonly getCeremonies;
15
16
  private readonly decisions;
17
+ private readonly yaoRecords;
16
18
  private readonly passkeyClaims;
17
- constructor(database: D1DatabaseLike, authority: D1WalletExecutionAuthority | null, operations: D1WalletOperationStore<D1WalletRegistrationNearProvisioningSideEffectRecord>, getCeremonies: () => CloudflareD1RegistrationCeremonyIntentStore, decisions: CloudflareD1Ed25519YaoLifecycleDecisionStoreV1, passkeyClaims: Pick<D1WalletRegistrationCommitStore, 'prepareHeldPasskeyClaimRead' | 'parseHeldPasskeyClaimRead'>);
19
+ constructor(database: D1DatabaseLike, authority: D1WalletExecutionAuthority | null, operations: D1WalletOperationStore<D1WalletRegistrationNearProvisioningSideEffectRecord>, getCeremonies: () => CloudflareD1RegistrationCeremonyIntentStore, decisions: CloudflareD1Ed25519YaoLifecycleDecisionStoreV1, yaoRecords: ReturnType<typeof createD1Ed25519YaoLifecycleRecords>, passkeyClaims: Pick<D1WalletRegistrationCommitStore, 'prepareHeldPasskeyClaimRead' | 'parseHeldPasskeyClaimRead'>);
18
20
  readRespond(home: Parameters<WalletRegistrationHomeAuthority['admitHome']>[0]): Promise<{
19
21
  readonly ok: false;
20
22
  readonly code: string;
@@ -38,9 +40,26 @@ export declare class D1WalletRegistrationRead {
38
40
  } | {
39
41
  ok: true;
40
42
  operation: import("../../../cloudflare-adaptor").VersionedJsonRecordReadResult<D1WalletRegistrationNearProvisioningSideEffectRecord>;
43
+ readFounding: () => {
44
+ readonly kind: "snapshot";
45
+ readonly records: {
46
+ readonly walletAuthMethodId: import("../../../../../../shared-ts/src/utils").WalletAuthMethodId;
47
+ readonly walletAuthorityId: import("../../../../../../shared-ts/src/utils").WalletAuthorityId;
48
+ } & {
49
+ readonly authorityRow: {
50
+ readonly record_json?: unknown;
51
+ } | null;
52
+ readonly authMethodRow: {
53
+ readonly record_json?: unknown;
54
+ } | null;
55
+ };
56
+ readonly ids?: never;
57
+ } | null;
41
58
  decision: import("../../../domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoLifecycleDecision").RouterAbEd25519YaoLifecycleDecisionV1 | null;
42
59
  heldPasskeyClaim: import("./d1WalletRegistrationCommitStore").HeldRegistrationPasskeyClaim | null;
43
60
  readCeremony: () => Promise<import("../../../../core/RegistrationCeremonyStore").StoredWalletRegistrationCeremony | null>;
61
+ readYaoAdmission: () => import("../../../domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationExecutionRecord").RouterAbEd25519YaoRegistrationExecutionAuthorityV1 | null;
44
62
  }>;
63
+ private parseYaoAdmission;
45
64
  }
46
65
  //# sourceMappingURL=d1WalletRegistrationRead.d.ts.map
@@ -260,7 +260,13 @@ export declare class CloudflareD1WalletRegistrationService {
260
260
  provisionEd25519YaoWalletSession(request: RouterAbEd25519YaoVerifiedWalletUnlockRequestV1): Promise<RouterAbEd25519YaoVerifiedWalletUnlockResponseV1>;
261
261
  setupWalletRegistration(input: WalletRegistrationSetupInput): Promise<WalletRegistrationSetupResponseV2>;
262
262
  authorizeWalletRegistrationNearAdmission(input: WalletRegistrationNearAdmissionInput): Promise<WalletRegistrationNearAdmissionResponseV2>;
263
+ /**
264
+ * Respond replays exactly, so a transient D1 fault runs it again, as a client
265
+ * retry would. A fault that outlasts the retries reports `storage_unavailable`
266
+ * without the driver's text.
267
+ */
263
268
  respondWalletRegistration(input: WalletRegistrationRespondInput, traceContext?: RouterAbTraceContextV1, timingSink?: Array<readonly [string, number]>, waitUntil?: (promise: Promise<unknown>) => void): Promise<WalletRegistrationRespondResponseV2>;
269
+ private respondWalletRegistrationAttempt;
264
270
  /** For callers that must read the context before finalize tombstones it. */
265
271
  private registrationOwnerProofWithContext;
266
272
  authorizeNearRegistrationContinuation(input: {
@@ -42,7 +42,7 @@ export type { CloudflareTenantStorageRoute, CloudflareTenantTopology, D1BindingN
42
42
  export { StaticCloudflareTenantStorageRouteResolver, createCloudflareTenantStorageRoute, createSignerD1DoStorageTarget, createStaticCloudflareTenantStorageRouteResolver, createStaticCloudflareTenantStorageRouteResolverFromBindings, } from '../storage/tenantRoute';
43
43
  export type { InMemoryRouterApiRuntimeSnapshotConsumer, RouterApiRuntimeSnapshotPublishedUpdate, } from './framework/runtimeSnapshotConsumer';
44
44
  export { createInMemoryRouterApiRuntimeSnapshotConsumer, validateRuntimeSnapshotExpectation, } from './framework/runtimeSnapshotConsumer';
45
- export { extractBearerCredential, extractRouterApiEnvironmentId, resolveSourceIpFromExpressRequest, resolveSourceIpFromFetchHeaders, } from './auth/routerApiKeyAuth';
45
+ export { extractBearerCredential, extractRouterApiEnvironmentId, resolveSourceIpFromFetchHeaders, } from './auth/routerApiKeyAuth';
46
46
  export { createCloudflareRouter } from './cloudflare/runtime/createCloudflareRouter';
47
47
  export type { SelfHostedCloudflareSigningWorkerFactoryInput } from './cloudflare/runtime/createSelfHostedCloudflareSigningWorker';
48
48
  export { createSelfHostedCloudflareSigningRouter, createSelfHostedCloudflareSigningWorker, } from './cloudflare/runtime/createSelfHostedCloudflareSigningWorker';
@@ -1,3 +1,4 @@
1
+ import type { RouterAbEd25519YaoRegistrationExecutionAuthorityV1 } from '../registration/routerAbEd25519YaoRegistrationExecutionRecord';
1
2
  import { type AddSignerIntentV1, type WalletId } from '../../../../../../shared-ts/src/utils/registrationIntent';
2
3
  import { type RegistrationEd25519AuthorityScope } from '../../../../../../shared-ts/src/utils/registrationIds';
3
4
  import { type RegistrationNearEd25519SignerPlan } from '../../../../../../shared-ts/src/utils/registrationSignerPlan';
@@ -58,6 +59,14 @@ export type RouterAbEd25519YaoWalletSessionMintInputV1 = (RouterAbEd25519YaoWall
58
59
  readonly expiresAtMs: number;
59
60
  readonly remainingUses: number;
60
61
  });
62
+ /** Admission is immutable. A finalization batch may supply it before consumption. */
63
+ export type RouterAbEd25519YaoConsumptionAdmissionV1 = {
64
+ readonly kind: 'stored';
65
+ readonly authority?: never;
66
+ } | {
67
+ readonly kind: 'snapshot';
68
+ readonly authority: RouterAbEd25519YaoRegistrationExecutionAuthorityV1 | null;
69
+ };
61
70
  export type RouterAbEd25519YaoProductRegistrationRuntimeV1 = RouterAbEd25519YaoPersistedActiveCapabilityInstallerV1 & RouterAbEd25519YaoActiveCapabilityResolverV1 & RouterAbEd25519YaoActiveCapabilityRehydratorV1 & {
62
71
  readonly kind: 'router_ab_ed25519_yao_product_registration_runtime_v1';
63
72
  readonly signingWorkerId: string;
@@ -87,7 +96,7 @@ export type RouterAbEd25519YaoProductRegistrationRuntimeV1 = RouterAbEd25519YaoP
87
96
  readonly trace: RouterAbTraceContextV1;
88
97
  }): Promise<RouterAbEd25519YaoTimedRegistrationExecutionResultV1>;
89
98
  bindVerifiedIntent(input: RouterAbEd25519YaoVerifiedActivationIntentV1): Promise<RouterAbEd25519YaoRegistrationIntentBindingResult>;
90
- consumeActivated(request: RouterAbEd25519YaoActivationConsumptionRequestV1): Promise<RouterAbEd25519YaoActivationConsumptionResultV1>;
99
+ consumeActivated(request: RouterAbEd25519YaoActivationConsumptionRequestV1, admission: RouterAbEd25519YaoConsumptionAdmissionV1): Promise<RouterAbEd25519YaoActivationConsumptionResultV1>;
91
100
  };
92
101
  /** A tenant-root read in flight, with the signing root ID that it was started for. */
93
102
  export type RouterAbEd25519YaoStartedDispatchRootV1 = {
@@ -118,7 +118,9 @@ export declare function createRouterAbEd25519YaoProductRegistrationPartitionedSt
118
118
  * The admitted authority a registration execute is checked against, from a
119
119
  * loaded ceremony state, or `null` when the lifecycle is not admitted.
120
120
  */
121
- export declare function routerAbEd25519YaoAdmittedRegistrationAuthorityV1(state: RouterAbEd25519YaoRegistrationCeremonySnapshotV1['state'], lifecycleId: string): RouterAbEd25519YaoRegistrationExecutionAuthorityV1 | null;
121
+ export declare function routerAbEd25519YaoAdmittedRegistrationAuthorityV1(state: Pick<RouterAbEd25519YaoProductRegistrationCeremonyStateV1, 'registration' | 'authorization'>, lifecycleId: string): RouterAbEd25519YaoRegistrationExecutionAuthorityV1 | null;
122
+ /** Parse an exact ceremony read for consumption; the Router owns its mutable claim. */
123
+ export declare function parseRouterAbEd25519YaoRegistrationAdmissionReadV1(lifecycleId: string, result: VersionedJsonRecordReadResult<VersionedJsonObject>): RouterAbEd25519YaoRegistrationExecutionAuthorityV1 | null;
122
124
  export declare function encodeRouterAbEd25519YaoProductRegistrationPartitionRecordV1(record: RouterAbEd25519YaoProductRegistrationPartitionRecordV1): VersionedJsonObject;
123
125
  export declare function sameRouterAbEd25519YaoSharedStateCanonicalEncodingV1(left: RouterAbEd25519YaoSharedStateCanonicalEncodingV1, right: RouterAbEd25519YaoSharedStateCanonicalEncodingV1): boolean;
124
126
  export declare function parseRouterAbEd25519YaoProductRegistrationPartitionRecordV1(input: unknown): RouterAbEd25519YaoProductRegistrationPartitionRecordV1 | null;
@@ -21,6 +21,8 @@ export type WalletRegistrationSetupInput = {
21
21
  readonly runtimePolicyScope?: ThresholdRuntimePolicyScope;
22
22
  readonly signingRootId?: string;
23
23
  readonly signingRootVersion?: string;
24
+ /** Collects the `[name, ms]` waits of this setup for its `Server-Timing` header. */
25
+ readonly serverTiming?: Array<readonly [string, number]>;
24
26
  };
25
27
  export type WalletRegistrationRespondInput = {
26
28
  readonly registrationCeremonyId: string;
@@ -1,4 +1,3 @@
1
- import type { Response as ExpressResponse } from 'express';
2
1
  import type { RouteResponse } from './routeExecutionContext';
3
2
  import type { RoutePolicyFailureCode } from './routeAuthPolicy';
4
3
  import type { RouteUsageData } from './routeMeteringPolicy';
@@ -12,6 +11,5 @@ export declare function routeJson<TBody>(status: number, body: TBody, options?:
12
11
  usage?: RouteUsageData;
13
12
  }): RouteResponse<TBody>;
14
13
  export declare function routeError(status: number, code: RouteErrorBody['code'], message: string): RouteResponse<RouteErrorBody>;
15
- export declare function sendExpressRouteResponse<TBody>(res: ExpressResponse, response: RouteResponse<TBody>): void;
16
14
  export declare function toFetchRouteResponse<TBody>(response: RouteResponse<TBody>): Response;
17
15
  //# sourceMappingURL=routeResponses.d.ts.map
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Starts the module and runs one lock round under a key derived from zero
3
+ * bytes, so the first seal in this isolate runs warm code. It uses no secret,
4
+ * and its result is discarded.
5
+ */
6
+ export declare function warmSigningSessionSealRuntime(): Promise<void>;
1
7
  export declare function deriveSigningSessionSealLockKeyHandle(input: {
2
8
  readonly groupId: string;
3
9
  readonly rootSecret32: Uint8Array;
@@ -6,7 +6,7 @@ export type { CreateSigningSessionSealOptionsInput } from './options';
6
6
  export type { CreateSigningSessionSealRateLimitGuardOptions, InMemorySigningSessionSealRateLimiterOptions, SigningSessionSealRateLimitConsumeInput, SigningSessionSealRateLimitConsumeResult, SigningSessionSealRateLimiter, SigningSessionSealRateLimitRejectedEvent, } from './guards';
7
7
  export type { CreateSigningSessionSealRateLimitFromEnvInput, CreateRedisTcpSigningSessionSealRateLimiterOptions, CreateUpstashSigningSessionSealRateLimiterOptions, } from './guards/backends';
8
8
  export type { CreateSigningSessionSealIdempotencyFromEnvInput, CreateRedisTcpSigningSessionSealIdempotencyStoreOptions, CreateUpstashSigningSessionSealIdempotencyStoreOptions, } from './idempotencyBackends';
9
- export { signingSessionSealAuthorizeStatusCode, signingSessionSealStatusCode } from './transport/shared';
9
+ export { signingSessionSealAuthorizeStatusCode, signingSessionSealStatusCode, } from './transport/shared';
10
10
  export { buildSigningSessionSealApplyPath, buildSigningSessionSealRemovePath, resolveSigningSessionSealBasePath, parseSigningSessionSealApplyBody, parseSigningSessionSealRemoveBody, authorizeSigningSessionSealRequest, } from './transport/shared';
11
11
  export { createSigningSessionSealCipherAdapter, createPassthroughSigningSessionSealCipherAdapter, createSigningSessionSealShamir3PassCipherAdapter, encodeSigningSessionSealServerLockContext, } from './crypto/cipher';
12
12
  export { createSigningSessionSealService } from './service';
@@ -18,6 +18,5 @@ export { createInMemorySigningSessionSealRateLimiter, createSigningSessionSealRa
18
18
  export { createRedisTcpSigningSessionSealRateLimiter, createUpstashSigningSessionSealRateLimiter, resolveSigningSessionSealRateLimitFromEnv, } from './guards/backends';
19
19
  export { createRedisTcpSigningSessionSealIdempotencyStore, createUpstashSigningSessionSealIdempotencyStore, resolveSigningSessionSealIdempotencyFromEnv, } from './idempotencyBackends';
20
20
  export { composeSigningSessionSealGuards } from './guards';
21
- export { registerSigningSessionSealRoutes } from './transport/express';
22
21
  export { handleSigningSessionSealRoutes } from './transport/fetch';
23
22
  //# sourceMappingURL=index.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seams/wallet-server",
3
- "version": "0.10.1",
3
+ "version": "0.11.0",
4
4
  "type": "module",
5
5
  "description": "Seams server TypeScript SDK for NEAR and EVM-family wallets",
6
6
  "main": "./dist/esm/index.js",
@@ -19,11 +19,6 @@
19
19
  "import": "./dist/esm/index.js",
20
20
  "default": "./dist/esm/index.js"
21
21
  },
22
- "./router/express": {
23
- "types": "./dist/types/wallet-server/src/router/express-adaptor.d.ts",
24
- "import": "./dist/esm/router/express.js",
25
- "default": "./dist/esm/router/express.js"
26
- },
27
22
  "./router/cloudflare": {
28
23
  "types": "./dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts",
29
24
  "import": "./dist/esm/router/cloudflare.js",
@@ -120,12 +115,10 @@
120
115
  "homepage": "https://github.com/seams-tech/seams-wallet#readme",
121
116
  "dependencies": {
122
117
  "@simplewebauthn/server": "^13.2.2",
123
- "bs58": "^6.0.0",
124
- "express": "^4.21.2"
118
+ "bs58": "^6.0.0"
125
119
  },
126
120
  "devDependencies": {
127
121
  "@near-js/types": "^2.4.0",
128
- "@types/express": "^4.17.21",
129
122
  "@types/node": "^20.19.9",
130
123
  "rolldown": "^1.0.0-beta.27",
131
124
  "typescript": "^5.8.3"
package/src/README.md CHANGED
@@ -76,7 +76,7 @@ Use fresh wallets when measuring this change.
76
76
  It does not authorize wallet ownership.
77
77
 
78
78
  ```ts
79
- import { createRouterApiRouter } from '@seams/wallet-server/router/express';
79
+ import { createCloudflareRouter } from '@seams/wallet-server/router/cloudflare';
80
80
  import { createSigningSessionSealOptions } from '@seams/wallet-server';
81
81
 
82
82
  const signingSessionSeal = createSigningSessionSealOptions({
@@ -85,10 +85,12 @@ const signingSessionSeal = createSigningSessionSealOptions({
85
85
  acceptedWarmKeyVersions: ['signing-session-seal-production-r2'],
86
86
  });
87
87
 
88
- app.use('/', createRouterApiRouter(service, {
88
+ const fetch = createCloudflareRouter(service, {
89
89
  threshold,
90
90
  signingSessionSeal,
91
- }));
91
+ });
92
+
93
+ export default { fetch };
92
94
  ```
93
95
 
94
96
  Store the random 32-byte root secret in a secrets manager. Retain accepted old
@@ -1,84 +0,0 @@
1
- import { ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_VERSION_V2, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH, parseRouterAbPublicKeysetV2 } from "../shared-ts/src/utils/routerAbPublicKeyset.js";
2
- import { defineRoute } from "./framework/routeDefinitions.js";
3
- import { InMemoryRouterAbNormalSigningAdmissionStore, createInMemoryRouterAbNormalSigningAdmissionAdapter, createInMemoryRouterAbNormalSigningAdmissionStore, createRouterAbNormalSigningAdmissionAdapter } from "./domains/signingOperations/routerAbNormalSigningAdmissionCore.js";
4
- import { createRouterApiModule } from "./framework/modules.js";
5
- import { attachRouterApiRouteSurface, getRouterApiRouteSurface } from "./framework/routerApiRouteSurface.js";
6
- import { createFetchRouter } from "./transport/fetch/createFetchRouter.js";
7
- import { createRouterAbEd25519YaoProductRegistrationCompositionFromPortsV1, createRouterAbEd25519YaoProductRegistrationRuntimeV1, createRouterAbEd25519YaoProductRegistrationStateV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js";
8
- import { RouterAbEd25519YaoHttpRegistrationBackend, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv } from "./domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js";
9
- import { createInMemoryRouterApiRuntimeSnapshotConsumer, validateRuntimeSnapshotExpectation } from "./framework/runtimeSnapshotConsumer.js";
10
- import express from "express";
11
- //#region src/router/express-adaptor.ts
12
- function appendExpressRequestHeaders(headers, req) {
13
- for (const [name, value] of Object.entries(req.headers)) {
14
- if (Array.isArray(value)) {
15
- for (const item of value) headers.append(name, item);
16
- continue;
17
- }
18
- if (typeof value === "string") headers.set(name, value);
19
- }
20
- }
21
- function resolveExpressRequestUrl(req) {
22
- const host = req.get("host") || "localhost";
23
- return `${req.protocol || "http"}://${host}${req.originalUrl || req.url}`;
24
- }
25
- function encodeExpressRequestBody(req) {
26
- const method = req.method.toUpperCase();
27
- if (method === "GET" || method === "HEAD") return void 0;
28
- if (req.body === void 0 || req.body === null) return void 0;
29
- if (typeof req.body === "string" || req.body instanceof Uint8Array) return req.body;
30
- return JSON.stringify(req.body);
31
- }
32
- function buildFetchRequestFromExpress(req) {
33
- const headers = new Headers();
34
- appendExpressRequestHeaders(headers, req);
35
- const body = encodeExpressRequestBody(req);
36
- if (body && !headers.has("content-type")) headers.set("content-type", "application/json; charset=utf-8");
37
- return new Request(resolveExpressRequestUrl(req), {
38
- method: req.method,
39
- headers,
40
- body
41
- });
42
- }
43
- async function isFetchRouterNotFound(response) {
44
- if (response.status !== 404) return false;
45
- return await response.clone().text() === "Not Found";
46
- }
47
- async function sendFetchResponseToExpress(fetchResponse, res) {
48
- fetchResponse.headers.forEach((value, name) => {
49
- res.setHeader(name, value);
50
- });
51
- res.status(fetchResponse.status);
52
- const body = Buffer.from(await fetchResponse.arrayBuffer());
53
- if (body.length === 0) {
54
- res.end();
55
- return;
56
- }
57
- res.send(body);
58
- }
59
- function createFetchBackedExpressMiddleware(fetchHandler) {
60
- return async function fetchBackedExpressMiddleware(req, res, next) {
61
- try {
62
- const fetchResponse = await fetchHandler(buildFetchRequestFromExpress(req));
63
- if (await isFetchRouterNotFound(fetchResponse)) {
64
- next();
65
- return;
66
- }
67
- await sendFetchResponseToExpress(fetchResponse, res);
68
- } catch (error) {
69
- next(error);
70
- }
71
- };
72
- }
73
- function createRouterApiRouter(service, opts = {}) {
74
- const fetchHandler = createFetchRouter(service, opts, { kind: "inline" });
75
- const router = express.Router();
76
- router.use(createFetchBackedExpressMiddleware(fetchHandler));
77
- const surface = getRouterApiRouteSurface(fetchHandler);
78
- if (!surface) return router;
79
- return attachRouterApiRouteSurface(router, surface);
80
- }
81
- //#endregion
82
- export { InMemoryRouterAbNormalSigningAdmissionStore, ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_VERSION_V2, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH, RouterAbEd25519YaoHttpRegistrationBackend, createInMemoryRouterAbNormalSigningAdmissionAdapter, createInMemoryRouterAbNormalSigningAdmissionStore, createInMemoryRouterApiRuntimeSnapshotConsumer, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv, createRouterAbEd25519YaoProductRegistrationCompositionFromPortsV1, createRouterAbEd25519YaoProductRegistrationRuntimeV1, createRouterAbEd25519YaoProductRegistrationStateV1, createRouterAbNormalSigningAdmissionAdapter, createRouterApiModule, createRouterApiRouter, defineRoute, parseRouterAbPublicKeysetV2, validateRuntimeSnapshotExpectation };
83
-
84
- //# sourceMappingURL=express-adaptor.js.map