@seams/wallet-server 0.9.3 → 0.10.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.
- package/THIRD_PARTY_NOTICES.md +33 -1
- package/artifact-manifest.json +57 -37
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-a/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/deriver-b/index.js +2 -2
- package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-arm64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/darwin-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/local-tools/linux-x64/router_ab_local_init +0 -0
- package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/router/index.js +1 -1
- package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/signing-worker/index.js +1 -1
- package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
- package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
- package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +1 -1
- package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
- package/cloudflare-router-ab/migrations/deriver-a/0020_registration_preparation.sql +7 -0
- package/cloudflare-router-ab/migrations/deriver-b/0020_registration_preparation.sql +7 -0
- package/dist/esm/cloud-host.js +9 -9
- package/dist/esm/core/d1Ed25519SignerRead.js +3 -19
- package/dist/esm/hosted-wallet-gateway.js +15 -1
- package/dist/esm/localHostedWalletGatewayHandler.js +1 -1
- package/dist/esm/router/cloudflare/d1/authorization/d1AuthorizationStore.js +26 -20
- package/dist/esm/router/cloudflare/d1/ed25519Yao/d1Ed25519YaoProductRegistrationPartitionedStateStore.js +1 -1
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyRecords.js +21 -2
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.js +11 -4
- package/dist/esm/router/cloudflare/d1/registration/d1RegistrationSetupRateLimit.js +34 -0
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationCommitStore.js +17 -16
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +45 -65
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.js +87 -10
- package/dist/esm/router/cloudflare/d1/wallet/d1WalletAddSignerService.js +1 -1
- package/dist/esm/router/cloudflare/runtime/walletGateway.js +2 -0
- package/dist/esm/router/cloudflare-adaptor.js +7 -7
- package/dist/esm/router/cloudflare.js +8812 -8594
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.js +45 -24
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.js +52 -3
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore.js +1 -1
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitioning.js +13 -5
- package/dist/esm/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js +41 -7
- package/dist/esm/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.js +1 -1
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js +24 -4
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.js +24 -14
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.js +10 -1
- package/dist/esm/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.js +45 -5
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +48 -8
- package/dist/esm/router/express.js +107 -16
- package/dist/esm/router/framework/registrationSetupDispatch.js +28 -2
- package/dist/esm/router/framework/registrationSetupRateLimit.js +0 -0
- package/dist/esm/router/transport/fetch/routes/walletRegistration.js +3 -2
- package/dist/esm/storage/d1Retry.js +38 -0
- package/dist/types/shared-ts/src/utils/walletManagementProtocol.d.ts +1 -1
- package/dist/types/wallet-server/src/core/RegistrationCeremonyStore.d.ts +12 -0
- package/dist/types/wallet-server/src/core/d1Ed25519SignerRead.d.ts +1 -4
- package/dist/types/wallet-server/src/core/threeRouteRegistrationContracts.d.ts +50 -6
- package/dist/types/wallet-server/src/hosted-wallet-gateway.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationCeremonyStore.d.ts +7 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1RegistrationSetupRateLimit.d.ts +7 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationSetupExecution.d.ts +3 -0
- package/dist/types/wallet-server/src/router/cloudflare/runtime/walletGateway.d.ts +1 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoCapabilityCommit.d.ts +18 -4
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistration.d.ts +35 -4
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.d.ts +1 -1
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecovery.d.ts +7 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/recovery/routerAbEd25519YaoRecoveryRequestScopedCloudflare.d.ts +2 -2
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.d.ts +5 -3
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistration.d.ts +18 -3
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationIntentAuthorization.d.ts +2 -0
- package/dist/types/wallet-server/src/router/domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts +39 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts +6 -0
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +16 -2
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts +1 -0
- package/dist/types/wallet-server/src/router/framework/registrationSetupRateLimit.d.ts +11 -0
- package/dist/types/wallet-server/src/router/framework/routerApi.d.ts +1 -0
- package/dist/types/wallet-server/src/storage/d1Retry.d.ts +10 -0
- package/migrations/d1-signer/0079_tenant_lookup_indexes.sql +33 -0
- package/migrations/d1-signer/0080_registration_setup_rate_limits.sql +11 -0
- package/package.json +1 -1
- package/src/README.md +1 -1
|
@@ -8,7 +8,7 @@ export type RouterAbEd25519YaoProductRegistrationRequestScopedRuntimeInputV1 = {
|
|
|
8
8
|
readonly store: RouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1;
|
|
9
9
|
/** The Router, which owns each registration's execution and its consumption. */
|
|
10
10
|
readonly registrationBackend: RouterAbEd25519YaoPinnedRegistrationBackend;
|
|
11
|
-
/** Loads
|
|
11
|
+
/** Loads the canonical signer record of a capability lookup. */
|
|
12
12
|
readonly loadPersistedActiveCapability?: (input: RouterAbEd25519YaoActiveCapabilityLookupV1) => Promise<WalletEd25519YaoActiveCapabilityRecord | null>;
|
|
13
13
|
};
|
|
14
14
|
/**
|
|
@@ -372,6 +372,13 @@ type RouterAbEd25519YaoWarmRecoveryBootstrapV1 = RouterAbEd25519YaoExactRecovery
|
|
|
372
372
|
export interface RouterAbEd25519YaoActiveCapabilityResolverV1 {
|
|
373
373
|
resolveActiveCapability(input: RouterAbEd25519YaoActiveCapabilityLookupV1): Promise<RouterAbEd25519YaoActiveCapabilityLookupResultV1> | RouterAbEd25519YaoActiveCapabilityLookupResultV1;
|
|
374
374
|
}
|
|
375
|
+
/**
|
|
376
|
+
* Stores a wallet's signer-row capability in the recovery state, so that a
|
|
377
|
+
* recovery admission can suspend it. A lookup alone stores nothing.
|
|
378
|
+
*/
|
|
379
|
+
export interface RouterAbEd25519YaoActiveCapabilityRehydratorV1 {
|
|
380
|
+
rehydrateActiveCapability(input: RouterAbEd25519YaoActiveCapabilityLookupV1): Promise<RouterAbEd25519YaoActiveCapabilityLookupResultV1> | RouterAbEd25519YaoActiveCapabilityLookupResultV1;
|
|
381
|
+
}
|
|
375
382
|
type CapabilityIdentity = {
|
|
376
383
|
readonly capabilityBinding: RouterAbEd25519YaoBytes32V1;
|
|
377
384
|
readonly nearAccountId: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type WalletLifecycleRoutingPublisher } from '../../../../authorization/lifecycleRouting';
|
|
2
|
-
import { type RouterAbEd25519YaoCapabilityPersistenceV1, type RouterAbEd25519YaoRecoveryAuthorizationAdapter, type RouterAbEd25519YaoRecoveryBackend, type RouterAbEd25519YaoActiveCapabilityResolverV1, type WarmBootstrapLinkedEd25519AuthorityReaderV1 } from './routerAbEd25519YaoRecovery';
|
|
2
|
+
import { type RouterAbEd25519YaoCapabilityPersistenceV1, type RouterAbEd25519YaoRecoveryAuthorizationAdapter, type RouterAbEd25519YaoRecoveryBackend, type RouterAbEd25519YaoActiveCapabilityRehydratorV1, type RouterAbEd25519YaoActiveCapabilityResolverV1, type WarmBootstrapLinkedEd25519AuthorityReaderV1 } from './routerAbEd25519YaoRecovery';
|
|
3
3
|
export type { WarmBootstrapLinkedEd25519AuthorityReaderV1 } from './routerAbEd25519YaoRecovery';
|
|
4
4
|
import type { RouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1 } from '../capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore';
|
|
5
5
|
export type RouterAbEd25519YaoRecoveryRequestScopedCloudflareInputV1 = {
|
|
@@ -9,7 +9,7 @@ export type RouterAbEd25519YaoRecoveryRequestScopedCloudflareInputV1 = {
|
|
|
9
9
|
readonly backend: RouterAbEd25519YaoRecoveryBackend;
|
|
10
10
|
readonly authorization: RouterAbEd25519YaoRecoveryAuthorizationAdapter;
|
|
11
11
|
readonly capabilityPersistence: RouterAbEd25519YaoCapabilityPersistenceV1;
|
|
12
|
-
readonly capabilities: RouterAbEd25519YaoActiveCapabilityResolverV1;
|
|
12
|
+
readonly capabilities: RouterAbEd25519YaoActiveCapabilityResolverV1 & RouterAbEd25519YaoActiveCapabilityRehydratorV1;
|
|
13
13
|
readonly linkedAuthorities?: WarmBootstrapLinkedEd25519AuthorityReaderV1 | null;
|
|
14
14
|
};
|
|
15
15
|
export declare function handleRouterAbEd25519YaoRecoveryRequestScopedCloudflareV1(input: RouterAbEd25519YaoRecoveryRequestScopedCloudflareInputV1): Promise<Response>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { type WalletObjectIdentity } from '../../../cloudflare/runtime/walletObjectAddresses';
|
|
1
2
|
import type { RouterAbEd25519YaoRegistrationExecutionAuthorityV1 } from './routerAbEd25519YaoRegistrationExecutionRecord';
|
|
2
|
-
import { type RouterAbEd25519YaoActivationExecuteRequestV1, type RouterAbEd25519YaoActivationKeysetV1, type RouterAbEd25519YaoRecoveryActivationRequestV1, type RouterAbEd25519YaoRecoveryAdmissionRequestV1, type RouterAbEd25519YaoRegistrationAdmissionRequestV1, type RouterAbEd25519YaoExportAdmissionRequestV1, type RouterAbEd25519YaoExportExecuteRequestV1 } from '../../../../../../shared-ts/src/utils/routerAbEd25519Yao';
|
|
3
|
+
import { type RouterAbEd25519YaoBytes32V1, type RouterAbEd25519YaoActivationAdmissionReceiptV1, type RouterAbEd25519YaoActivationExecuteRequestV1, type RouterAbEd25519YaoActivationKeysetV1, type RouterAbEd25519YaoRecoveryActivationRequestV1, type RouterAbEd25519YaoRecoveryAdmissionRequestV1, type RouterAbEd25519YaoRegistrationAdmissionRequestV1, type RouterAbEd25519YaoExportAdmissionRequestV1, type RouterAbEd25519YaoExportExecuteRequestV1 } from '../../../../../../shared-ts/src/utils/routerAbEd25519Yao';
|
|
3
4
|
import type { RouterAbEd25519YaoRegistrationBackend, RouterAbEd25519YaoRegistrationBackendResult } from './routerAbEd25519YaoRegistration';
|
|
4
5
|
import type { RouterAbEd25519YaoExportBackend, RouterAbEd25519YaoExportExecuteClaimV1 } from '../export/routerAbEd25519YaoExport';
|
|
5
6
|
import type { RouterAbEd25519YaoRecoveryBackend, RouterAbEd25519YaoRecoveryExecuteClaimV1 } from '../recovery/routerAbEd25519YaoRecovery';
|
|
@@ -57,7 +58,8 @@ export declare class RouterAbEd25519YaoHttpRegistrationBackend implements Router
|
|
|
57
58
|
private lastRouterServerTiming;
|
|
58
59
|
constructor(config: RouterAbEd25519YaoHttpRegistrationBackendConfig);
|
|
59
60
|
takeLastRouterServerTiming(): string | null;
|
|
60
|
-
|
|
61
|
+
prepareRegistrationPair(identity: WalletObjectIdentity, request: RouterAbEd25519YaoRegistrationAdmissionRequestV1, receipt: RouterAbEd25519YaoActivationAdmissionReceiptV1<'registration'>, expiresAtMs: number): Promise<void>;
|
|
62
|
+
admit(request: RouterAbEd25519YaoRegistrationAdmissionRequestV1, _traceContext?: RouterAbTraceContextV1, mintedSessionId?: RouterAbEd25519YaoBytes32V1): Promise<RouterAbEd25519YaoRegistrationBackendResult>;
|
|
61
63
|
admitRecovery(request: RouterAbEd25519YaoRecoveryAdmissionRequestV1, _traceContext?: RouterAbTraceContextV1): Promise<RouterAbEd25519YaoRegistrationBackendResult>;
|
|
62
64
|
admitExport(request: RouterAbEd25519YaoExportAdmissionRequestV1, _traceContext?: RouterAbTraceContextV1): Promise<RouterAbEd25519YaoRegistrationBackendResult>;
|
|
63
65
|
executeExport(request: RouterAbEd25519YaoExportExecuteRequestV1, claim: RouterAbEd25519YaoExportExecuteClaimV1, traceContext?: RouterAbTraceContextV1): Promise<RouterAbEd25519YaoRegistrationBackendResult>;
|
|
@@ -81,6 +83,6 @@ export declare function createRouterAbEd25519YaoHttpRegistrationBackendFromEnv(i
|
|
|
81
83
|
resolveTenantRoot: RouterAbEd25519YaoTenantRootResolverV1;
|
|
82
84
|
onSpan?: (span: RouterAbEd25519YaoGatewaySpanV1) => void;
|
|
83
85
|
fetch: typeof fetch;
|
|
84
|
-
}):
|
|
86
|
+
}): RouterAbEd25519YaoHttpRegistrationBackend;
|
|
85
87
|
export {};
|
|
86
88
|
//# sourceMappingURL=routerAbEd25519YaoHttpRegistrationBackend.d.ts.map
|
|
@@ -30,11 +30,16 @@ export type RouterAbEd25519YaoRegistrationBackendResult = {
|
|
|
30
30
|
} | RouterAbEd25519YaoRegistrationBackendFailure;
|
|
31
31
|
export interface RouterAbEd25519YaoRegistrationBackend {
|
|
32
32
|
takeLastRouterServerTiming?(): string | null;
|
|
33
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Issues the admission receipt. A registration passes the session that its
|
|
35
|
+
* setup minted, and the receipt is over that session. Without one the
|
|
36
|
+
* backend mints the session here.
|
|
37
|
+
*/
|
|
38
|
+
admit(request: RouterAbEd25519YaoRegistrationAdmissionRequestV1, traceContext?: RouterAbTraceContextV1, mintedSessionId?: RouterAbEd25519YaoBytes32V1): Promise<RouterAbEd25519YaoRegistrationBackendResult> | RouterAbEd25519YaoRegistrationBackendResult;
|
|
34
39
|
execute(request: RouterAbEd25519YaoRegistrationExecuteRequestV1, admissionRequest: RouterAbEd25519YaoRegistrationExecuteAdmissionContextV1, ownershipGeneration: number, traceContext?: RouterAbTraceContextV1): Promise<RouterAbEd25519YaoRegistrationBackendResult> | RouterAbEd25519YaoRegistrationBackendResult;
|
|
35
40
|
}
|
|
36
41
|
export interface RouterAbEd25519YaoRegistrationService {
|
|
37
|
-
admit(request: RouterAbEd25519YaoRegistrationAdmissionRequestV1, traceContext?: RouterAbTraceContextV1): Promise<RouterAbEd25519YaoRegistrationServiceResult<RouterAbEd25519YaoRegistrationAdmissionReceiptV1>>;
|
|
42
|
+
admit(request: RouterAbEd25519YaoRegistrationAdmissionRequestV1, traceContext?: RouterAbTraceContextV1, mintedSessionId?: RouterAbEd25519YaoBytes32V1): Promise<RouterAbEd25519YaoRegistrationServiceResult<RouterAbEd25519YaoRegistrationAdmissionReceiptV1>>;
|
|
38
43
|
execute(request: RouterAbEd25519YaoRegistrationExecuteRequestV1, ownershipGeneration: number, traceContext?: RouterAbTraceContextV1): Promise<RouterAbEd25519YaoRegistrationServiceResult<RouterAbEd25519YaoRegistrationResultV1>>;
|
|
39
44
|
}
|
|
40
45
|
export type RouterAbEd25519YaoRegistrationAdmissionClaimV1 = {
|
|
@@ -181,6 +186,16 @@ export interface RouterAbEd25519YaoActivationConsumerV1 {
|
|
|
181
186
|
consumeActivated(request: RouterAbEd25519YaoActivationConsumptionRequestV1): Promise<RouterAbEd25519YaoActivationConsumptionResultV1> | RouterAbEd25519YaoActivationConsumptionResultV1;
|
|
182
187
|
}
|
|
183
188
|
export declare function encodeRouterAbEd25519YaoRegistrationAdmissionFingerprintV1(request: RouterAbEd25519YaoRegistrationAdmissionRequestV1): string;
|
|
189
|
+
/**
|
|
190
|
+
* The receipt that `backend` issues for `request` over the session that setup
|
|
191
|
+
* minted, checked as an admission checks it. It stores nothing and admits
|
|
192
|
+
* nothing: the admission still follows the verified proof.
|
|
193
|
+
*/
|
|
194
|
+
export declare function describeRouterAbEd25519YaoRegistrationAdmissionV1(input: {
|
|
195
|
+
readonly backend: RouterAbEd25519YaoRegistrationBackend;
|
|
196
|
+
readonly request: RouterAbEd25519YaoRegistrationAdmissionRequestV1;
|
|
197
|
+
readonly mintedSessionId: RouterAbEd25519YaoBytes32V1;
|
|
198
|
+
}): Promise<RouterAbEd25519YaoRegistrationServiceResult<RouterAbEd25519YaoRegistrationAdmissionReceiptV1>>;
|
|
184
199
|
export declare function routerAbEd25519YaoExecutionMatchesAdmissionV1(request: RouterAbEd25519YaoRegistrationExecuteRequestV1, receipt: RouterAbEd25519YaoRegistrationAdmissionReceiptV1): boolean;
|
|
185
200
|
export declare function createRouterAbEd25519YaoRegistrationModule(input: {
|
|
186
201
|
service: RouterAbEd25519YaoRegistrationService;
|
|
@@ -192,7 +207,7 @@ export declare class InMemoryRouterAbEd25519YaoRegistrationService implements Ro
|
|
|
192
207
|
private readonly lifecycleSessions;
|
|
193
208
|
private readonly admissionClaims;
|
|
194
209
|
constructor(backend: RouterAbEd25519YaoRegistrationBackend, state?: InMemoryRouterAbEd25519YaoRegistrationStateV1);
|
|
195
|
-
admit(request: RouterAbEd25519YaoRegistrationAdmissionRequestV1, traceContext?: RouterAbTraceContextV1): Promise<RouterAbEd25519YaoRegistrationServiceResult<RouterAbEd25519YaoRegistrationAdmissionReceiptV1>>;
|
|
210
|
+
admit(request: RouterAbEd25519YaoRegistrationAdmissionRequestV1, traceContext?: RouterAbTraceContextV1, mintedSessionId?: RouterAbEd25519YaoBytes32V1): Promise<RouterAbEd25519YaoRegistrationServiceResult<RouterAbEd25519YaoRegistrationAdmissionReceiptV1>>;
|
|
196
211
|
prepareAdmit(request: RouterAbEd25519YaoRegistrationAdmissionRequestV1): RouterAbEd25519YaoRegistrationAdmissionPreparationV1;
|
|
197
212
|
commitAdmit(input: RouterAbEd25519YaoRegistrationAdmissionCommitInputV1): RouterAbEd25519YaoRegistrationServiceResult<RouterAbEd25519YaoRegistrationAdmissionReceiptV1>;
|
|
198
213
|
execute(request: RouterAbEd25519YaoRegistrationExecuteRequestV1, ownershipGeneration: number, traceContext?: RouterAbTraceContextV1): Promise<RouterAbEd25519YaoRegistrationServiceResult<RouterAbEd25519YaoRegistrationResultV1>>;
|
|
@@ -68,6 +68,8 @@ type RouterAbEd25519YaoBearerCredentialDigestResultV1 = {
|
|
|
68
68
|
};
|
|
69
69
|
export declare function routerAbEd25519YaoBearerCredentialDigestV1(request: Request): Promise<RouterAbEd25519YaoBearerCredentialDigestResultV1>;
|
|
70
70
|
export declare function routerAbEd25519YaoCredentialDigestHexV1(digest: Uint8Array): string;
|
|
71
|
+
/** The digest that an admission binds for the credential of its registration intent. */
|
|
72
|
+
export declare function routerAbEd25519YaoCredentialDigestSha256HexV1(credential: string): Promise<string>;
|
|
71
73
|
export declare class InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationStateV1 {
|
|
72
74
|
readonly authorities: IntentAuthority[];
|
|
73
75
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { VerifiedNearRegistrationContinuationV1 } from './routerAbEd25519YaoRegistrationIntentAuthorization';
|
|
2
|
+
import { type RouterAbEd25519YaoActivationExecuteRequestV1, type RouterAbEd25519YaoActivationResultV1 } from '../../../../../../shared-ts/src/utils/routerAbEd25519Yao';
|
|
3
|
+
import { type RouterAbTraceContextV1 } from '../../../../../../shared-ts/src/utils/routerAbTraceContext';
|
|
4
|
+
import type { RouterAbEd25519YaoRegistrationServiceResult } from './routerAbEd25519YaoRegistration';
|
|
2
5
|
import type { RouterAbEd25519YaoPinnedRegistrationBackend } from './routerAbEd25519YaoHttpRegistrationBackend';
|
|
3
6
|
import { type RouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1 } from '../capabilityLifecycle/routerAbEd25519YaoProductRegistrationPartitionedStateStore';
|
|
4
7
|
export type RouterAbEd25519YaoRegistrationRequestScopedCloudflareInputV1 = {
|
|
@@ -10,5 +13,41 @@ export type RouterAbEd25519YaoRegistrationRequestScopedCloudflareInputV1 = {
|
|
|
10
13
|
readonly store: RouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1;
|
|
11
14
|
readonly backend: RouterAbEd25519YaoPinnedRegistrationBackend;
|
|
12
15
|
};
|
|
16
|
+
type RouterAbEd25519YaoRegistrationExecuteRequestV1 = RouterAbEd25519YaoActivationExecuteRequestV1<'registration'>;
|
|
17
|
+
type RouterAbEd25519YaoRegistrationResultV1 = RouterAbEd25519YaoActivationResultV1<'registration'>;
|
|
18
|
+
type AuthorizationFailure = {
|
|
19
|
+
readonly ok: false;
|
|
20
|
+
readonly status: 401 | 403 | 409 | 429 | 503;
|
|
21
|
+
readonly code: string;
|
|
22
|
+
readonly message: string;
|
|
23
|
+
};
|
|
24
|
+
type RegistrationExecutionTimingV1 = {
|
|
25
|
+
readonly credentialDigestMs: number;
|
|
26
|
+
readonly d1AdmissionReadMs: number;
|
|
27
|
+
readonly routerExecutionMs: number;
|
|
28
|
+
readonly routerServerTiming: string | null;
|
|
29
|
+
readonly resultReconstructionMs: number;
|
|
30
|
+
};
|
|
31
|
+
export type RouterAbEd25519YaoTimedRegistrationExecutionResultV1 = {
|
|
32
|
+
readonly result: RouterAbEd25519YaoRegistrationServiceResult<RouterAbEd25519YaoRegistrationResultV1> | AuthorizationFailure;
|
|
33
|
+
readonly timing: RegistrationExecutionTimingV1;
|
|
34
|
+
};
|
|
13
35
|
export declare function handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1(input: RouterAbEd25519YaoRegistrationRequestScopedCloudflareInputV1): Promise<Response>;
|
|
36
|
+
/**
|
|
37
|
+
* Runs one admitted registration for the holder of its credential. The
|
|
38
|
+
* execute route takes the credential from its bearer. A respond that carries
|
|
39
|
+
* the execute request takes it from the signed setup that it just verified.
|
|
40
|
+
*/
|
|
41
|
+
export declare function executeRouterAbEd25519YaoAdmittedRegistrationV1(input: Pick<RouterAbEd25519YaoRegistrationRequestScopedCloudflareInputV1, 'store' | 'backend'> & {
|
|
42
|
+
readonly request: RouterAbEd25519YaoRegistrationExecuteRequestV1;
|
|
43
|
+
readonly credentialDigestSha256Hex: string;
|
|
44
|
+
readonly credentialDigestMs: number;
|
|
45
|
+
readonly trace: RouterAbTraceContextV1;
|
|
46
|
+
}): Promise<RouterAbEd25519YaoTimedRegistrationExecutionResultV1>;
|
|
47
|
+
/**
|
|
48
|
+
* The timing of one execution as Server-Timing entries, for a route that
|
|
49
|
+
* reports them in its own header: a respond that ran the execution.
|
|
50
|
+
*/
|
|
51
|
+
export declare function routerAbEd25519YaoRegistrationExecutionTimingEntriesV1(timing: RouterAbEd25519YaoTimedRegistrationExecutionResultV1['timing']): Array<readonly [string, number]>;
|
|
52
|
+
export {};
|
|
14
53
|
//# sourceMappingURL=routerAbEd25519YaoRegistrationRequestScopedCloudflare.d.ts.map
|
package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationInputs.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { RegistrationSignerSetSelection } from '../../../../../shared-ts/sr
|
|
|
3
3
|
import type { RegistrationEstablishedSessionProjectionV2 } from '../../../../../shared-ts/src/utils/registrationEstablishedSession';
|
|
4
4
|
import type { RegisterWalletInput, RegistrationAuthMethodInput } from '../../../../../shared-ts/src/utils/registrationAuthMethodInput';
|
|
5
5
|
import type { RouterAbEcdsaRegistrationRequestV1, RouterAbEcdsaVerifiedClientActivationFactsV1 } from '../../../../../shared-ts/src/utils/routerAbEcdsaDerivation';
|
|
6
|
+
import type { RouterAbEd25519YaoActivationExecuteRequestV1 } from '../../../../../shared-ts/src/utils/routerAbEd25519Yao';
|
|
6
7
|
import type { WalletRegistrationAuthorityInput, WalletRegistrationFinalizeSignerWork } from '../../../core/registrationContracts';
|
|
7
8
|
import type { ThresholdRuntimePolicyScope } from '../../../core/types';
|
|
8
9
|
import type { WalletRegistrationSetupMinter, WalletRegistrationSetupVerifier } from './walletRegistrationSetupPayload';
|
|
@@ -33,6 +34,11 @@ export type WalletRegistrationRespondInput = {
|
|
|
33
34
|
readonly strictRegistration: RouterAbEcdsaRegistrationRequestV1;
|
|
34
35
|
readonly requestDigestB64u: string;
|
|
35
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* The execute request of an Ed25519-only plan, prepared from the admission
|
|
39
|
+
* that setup described. Respond admits, then runs it in the same request.
|
|
40
|
+
*/
|
|
41
|
+
readonly ed25519Execution?: RouterAbEd25519YaoActivationExecuteRequestV1<'registration'>;
|
|
36
42
|
/** Verifies the opaque setup token before authority-bound work begins. */
|
|
37
43
|
readonly verifier: WalletRegistrationSetupVerifier;
|
|
38
44
|
readonly userAgent?: string;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import type { Variant } from '../../../../../shared-ts/src/utils/variant';
|
|
1
2
|
import type { WalletSessionLocatorPublication } from '../../../authorization/sessionRouting';
|
|
2
3
|
import type { CommittedWalletRegistration } from '../../../authorization/domain';
|
|
3
4
|
import type { D1PreparedStatementLike } from '../../../storage/tenantRoute';
|
|
4
5
|
import { type DeviceId } from '../../../../../shared-ts/src/authorization/capabilityKinds';
|
|
5
6
|
import { type WalletAuthorityId, type WalletAuthMethodId, type WalletId } from '../../../../../shared-ts/src/utils/domainIds';
|
|
6
7
|
import type { WalletRegistrationSetupInput } from './walletRegistrationInputs';
|
|
8
|
+
import type { RouterAbEd25519YaoActivationAdmissionReceiptV1, RouterAbEd25519YaoRegistrationAdmissionRequestV1 } from '../../../../../shared-ts/src/utils/routerAbEd25519Yao';
|
|
7
9
|
export type WalletRegistrationSetupReservation = {
|
|
8
10
|
readonly walletId: WalletId;
|
|
9
11
|
readonly ceremonyId: string;
|
|
@@ -30,10 +32,22 @@ export type WalletRegistrationSetupReservationResult = {
|
|
|
30
32
|
readonly lifecycle?: never;
|
|
31
33
|
};
|
|
32
34
|
/** Persist custody addresses before setup completes, then start the reserved wallet objects. */
|
|
33
|
-
export type
|
|
35
|
+
export type RegistrationWalletStartup = {
|
|
34
36
|
readonly walletId: WalletId;
|
|
35
37
|
readonly ownershipGeneration: number;
|
|
36
|
-
}
|
|
38
|
+
} & ({
|
|
39
|
+
readonly kind: 'objects';
|
|
40
|
+
readonly admissionRequest?: never;
|
|
41
|
+
readonly admissionReceipt?: never;
|
|
42
|
+
readonly expiresAtMs?: never;
|
|
43
|
+
} | {
|
|
44
|
+
readonly kind: 'pair';
|
|
45
|
+
readonly admissionRequest: RouterAbEd25519YaoRegistrationAdmissionRequestV1;
|
|
46
|
+
readonly admissionReceipt: RouterAbEd25519YaoActivationAdmissionReceiptV1<'registration'>;
|
|
47
|
+
readonly expiresAtMs: number;
|
|
48
|
+
});
|
|
49
|
+
export type RegistrationPairStartup = Variant<RegistrationWalletStartup, 'kind', 'pair'>;
|
|
50
|
+
export type RegistrationWalletStarter = (registration: RegistrationWalletStartup) => Promise<void>;
|
|
37
51
|
type ReservationOutcome = {
|
|
38
52
|
readonly ok: true;
|
|
39
53
|
} | {
|
package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationRoutes.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ type RouterApiWalletRegistrationServices = {
|
|
|
21
21
|
session?: SessionAdapter | null;
|
|
22
22
|
publishableKeyAuth?: RouterApiPublishableKeyAuthAdapter | null;
|
|
23
23
|
registrationContext?: WalletRegistrationContextResolver | null;
|
|
24
|
+
registrationSetupRateLimit?: import('../../framework/registrationSetupRateLimit').RegistrationSetupRateLimit;
|
|
24
25
|
};
|
|
25
26
|
type RouterApiWalletRegistrationInput = {
|
|
26
27
|
body: unknown;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type RegistrationSetupRateLimitInput = {
|
|
2
|
+
readonly apiKeyId: string;
|
|
3
|
+
readonly orgId: string;
|
|
4
|
+
readonly projectId: string;
|
|
5
|
+
readonly envId: string;
|
|
6
|
+
readonly sourceIp: string;
|
|
7
|
+
};
|
|
8
|
+
export type RegistrationSetupRateLimit = (input: RegistrationSetupRateLimitInput) => Promise<{
|
|
9
|
+
readonly allowed: boolean;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=registrationSetupRateLimit.d.ts.map
|
|
@@ -157,6 +157,7 @@ export interface RouterApiOptions {
|
|
|
157
157
|
publishableKeyAuth?: RouterApiPublishableKeyAuthAdapter | null;
|
|
158
158
|
/** Fresh credential and active-environment resolution for registration setup. */
|
|
159
159
|
registrationContext?: WalletRegistrationContextResolver | null;
|
|
160
|
+
registrationSetupRateLimit?: import('./registrationSetupRateLimit').RegistrationSetupRateLimit;
|
|
160
161
|
/**
|
|
161
162
|
* Optional Router API usage-meter adapter used to emit host runtime events.
|
|
162
163
|
*/
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function isTransientD1Error(error: unknown): boolean;
|
|
2
|
+
/**
|
|
3
|
+
* Runs `operation` again after a transient D1 fault. Such a fault does not say
|
|
4
|
+
* whether a write committed, so `operation` must give the same result when it
|
|
5
|
+
* runs after its own earlier commit: reads, `INSERT OR IGNORE`, and conditional
|
|
6
|
+
* writes that accept their own outcome. It must build its statements on each
|
|
7
|
+
* run. Every other error, and the last transient one, reaches the caller.
|
|
8
|
+
*/
|
|
9
|
+
export declare function retryTransientD1<T>(operation: () => Promise<T>): Promise<T>;
|
|
10
|
+
//# sourceMappingURL=d1Retry.d.ts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
-- Lookups that had no usable index and read every session or every wallet of
|
|
2
|
+
-- a tenant. Each index below serves statements that already exist; no
|
|
3
|
+
-- statement changes its result.
|
|
4
|
+
--
|
|
5
|
+
-- Without statistics the planner expects about ten rows behind the first
|
|
6
|
+
-- column of any index. An index that covers a lookup therefore wins over a
|
|
7
|
+
-- narrower one that needs the table row, although its first column is the
|
|
8
|
+
-- namespace, which every row shares. The two session indexes carry the columns
|
|
9
|
+
-- that their lookups read so that the planner selects them.
|
|
10
|
+
|
|
11
|
+
-- The operation triggers find the session that owns an operation through
|
|
12
|
+
-- wallet_operation_authorizations with the namespace, the tenant and the
|
|
13
|
+
-- authorization only. The primary key has org_id, project_id and env_id before
|
|
14
|
+
-- tenant_id, and the triggers compare those three inside an OR, so the key
|
|
15
|
+
-- gave a namespace prefix and the triggers read every session.
|
|
16
|
+
CREATE INDEX wallet_session_authorizations_v2_tenant_authorization_idx
|
|
17
|
+
ON wallet_session_authorizations_v2 (
|
|
18
|
+
namespace, tenant_id, authorization_id, org_id, project_id, env_id, wallet_id
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
-- The quota freeze triggers find the session of a quota with the namespace,
|
|
22
|
+
-- the tenant, the quota and the wallet session only.
|
|
23
|
+
CREATE INDEX wallet_session_authorizations_v2_tenant_quota_idx
|
|
24
|
+
ON wallet_session_authorizations_v2 (
|
|
25
|
+
namespace, tenant_id, quota_id, wallet_session_id, org_id, project_id, env_id, wallet_id
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
-- The registration cancellation fences and the Gateway admission find a wallet
|
|
29
|
+
-- by its registration ceremony. wallet_id is last so that the first match is
|
|
30
|
+
-- the one the primary key order gave, and so that the admission reads the
|
|
31
|
+
-- index only.
|
|
32
|
+
CREATE INDEX wallet_execution_generations_origin_idx
|
|
33
|
+
ON wallet_execution_generations (namespace, org_id, project_id, env_id, origin, origin_id, wallet_id);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
CREATE TABLE registration_setup_rate_limits (
|
|
2
|
+
namespace TEXT NOT NULL,
|
|
3
|
+
org_id TEXT NOT NULL,
|
|
4
|
+
project_id TEXT NOT NULL,
|
|
5
|
+
env_id TEXT NOT NULL,
|
|
6
|
+
rate_key TEXT NOT NULL,
|
|
7
|
+
consumed_count INTEGER NOT NULL CHECK (consumed_count BETWEEN 1 AND 30),
|
|
8
|
+
reset_at_ms INTEGER NOT NULL,
|
|
9
|
+
PRIMARY KEY (namespace, org_id, project_id, env_id, rate_key)
|
|
10
|
+
);
|
|
11
|
+
CREATE INDEX registration_setup_rate_limits_expiry ON registration_setup_rate_limits (reset_at_ms);
|
package/package.json
CHANGED
package/src/README.md
CHANGED
|
@@ -23,7 +23,7 @@ authentication is intentionally outside this package.
|
|
|
23
23
|
## Primary wallet routes
|
|
24
24
|
|
|
25
25
|
Wallet-management routes (registration, signer setup/inventory, auth-method
|
|
26
|
-
management and implicit NEAR funding) require `X-Seams-Wallet-Protocol:
|
|
26
|
+
management and implicit NEAR funding) require `X-Seams-Wallet-Protocol: 4`.
|
|
27
27
|
Missing or unsupported values return HTTP 409, `wallet_protocol_mismatch`, with
|
|
28
28
|
reload/upgrade instructions before parsing the body or invoking route services.
|
|
29
29
|
The current Wallet SDK sends this header automatically. Direct HTTP clients,
|