@seams/wallet-server 0.11.0 → 0.13.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/artifact-manifest.json +32 -27
- package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
- 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_bg.wasm +0 -0
- package/cloudflare-router-ab/build/router/build-stamp.json +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 +2 -2
- 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 +2 -2
- package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
- package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +3 -0
- package/cloudflare-router-ab/scripts/start-local-wallet-system.mjs +3 -0
- package/dist/esm/cloud-host.js +2 -3
- package/dist/esm/core/ThresholdService/kv.js +1 -218
- package/dist/esm/index.js +3 -3
- package/dist/esm/local-hosted-wallet-gateway-worker.js +4 -2
- package/dist/esm/localHostedWalletGatewayHandler.js +20 -7
- package/dist/esm/router/cloudflare/d1/registration/d1WalletExecutionAuthority.js +109 -14
- package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +16 -2
- package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +7 -12
- package/dist/esm/router/cloudflare-adaptor.js +1 -2
- package/dist/esm/router/cloudflare.js +2 -86
- package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +1 -1
- package/dist/esm/threshold/session/signingSessionSeal/guards/backends.js +2 -98
- package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +2 -69
- package/dist/esm/threshold/session/signingSessionSeal/index.js +3 -3
- package/dist/types/wallet-server/src/cloud-host.d.ts +1 -1
- package/dist/types/wallet-server/src/core/ThresholdService/kv.d.ts +0 -29
- package/dist/types/wallet-server/src/localHostedWalletGatewayHandler.d.ts +2 -0
- package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletExecutionAuthority.d.ts +22 -2
- 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/walletRegistrationEstablishedSessionIssuer.d.ts +1 -1
- package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +0 -2
- package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +13 -18
- package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +1 -1
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/guards/backends.d.ts +1 -16
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyBackends.d.ts +1 -16
- package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/index.d.ts +4 -4
- package/migrations/d1-signer/0081_registration_directory_publications.sql +26 -0
- package/package.json +1 -1
- package/dist/esm/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js +0 -93
- package/dist/types/wallet-server/src/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.d.ts +0 -23
package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js
CHANGED
|
@@ -49,9 +49,9 @@ function requireWalletSessionPrincipalId(value) {
|
|
|
49
49
|
if (!parsed.ok) throw new Error(`Wallet Session principal is invalid: ${parsed.error.message}`);
|
|
50
50
|
return parsed.value;
|
|
51
51
|
}
|
|
52
|
-
function
|
|
53
|
-
if (!committed.registration) throw new Error("Registration
|
|
54
|
-
return home.
|
|
52
|
+
function prepareCommittedRegistrationActivation(home, committed) {
|
|
53
|
+
if (!committed.registration) throw new Error("Registration activation requires a committed registration session");
|
|
54
|
+
return home.prepareEstablished({
|
|
55
55
|
registration: committed.registration,
|
|
56
56
|
session: committed.publication
|
|
57
57
|
});
|
|
@@ -346,13 +346,11 @@ async function issueDirectRegistrationEstablishedEcdsaSession(input) {
|
|
|
346
346
|
runtimePolicyScope: input.runtimePolicyScope,
|
|
347
347
|
keyHandle
|
|
348
348
|
});
|
|
349
|
-
const published = await publishCommittedRegistration(input.homeCompletion, committed);
|
|
350
|
-
if (!published.ok) throw new Error(published.message);
|
|
351
349
|
return directRegistrationResultFromIssue({
|
|
352
350
|
directIssue,
|
|
353
351
|
authorization,
|
|
354
352
|
tokens,
|
|
355
|
-
activation:
|
|
353
|
+
activation: prepareCommittedRegistrationActivation(input.homeCompletion, committed)
|
|
356
354
|
});
|
|
357
355
|
}
|
|
358
356
|
async function issueDirectRegistrationEstablishedEd25519Session(input) {
|
|
@@ -417,16 +415,13 @@ async function issueDirectRegistrationEstablishedEd25519Session(input) {
|
|
|
417
415
|
}).ed25519,
|
|
418
416
|
predecessor: input.predecessor
|
|
419
417
|
});
|
|
420
|
-
const
|
|
421
|
-
|
|
422
|
-
if (preparation.status === "rejected") throw preparation.reason;
|
|
423
|
-
const published = publication.value;
|
|
424
|
-
if (!published.ok) throw new Error(published.message);
|
|
418
|
+
const activation = prepareCommittedRegistrationActivation(input.homeCompletion, committed);
|
|
419
|
+
await input.onSessionCommitted?.(projectDirectRegistrationSession(authorization, tokens));
|
|
425
420
|
return directRegistrationResultFromIssue({
|
|
426
421
|
directIssue,
|
|
427
422
|
authorization,
|
|
428
423
|
tokens,
|
|
429
|
-
activation
|
|
424
|
+
activation
|
|
430
425
|
});
|
|
431
426
|
}
|
|
432
427
|
function projectCurrentNearRegistrationSession(authorization, tokens) {
|
|
@@ -28,7 +28,6 @@ import { buildRouterAbEd25519YaoProductAdmissionRequestV1, createRouterAbEd25519
|
|
|
28
28
|
import { RouterAbEd25519YaoHttpRegistrationBackend, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv } from "./domains/ed25519Yao/registration/routerAbEd25519YaoHttpRegistrationBackend.js";
|
|
29
29
|
import { StaticCloudflareTenantStorageRouteResolver, createCloudflareTenantStorageRoute, createSignerD1DoStorageTarget, createStaticCloudflareTenantStorageRouteResolver, createStaticCloudflareTenantStorageRouteResolverFromBindings } from "../storage/tenantRoute.js";
|
|
30
30
|
import { createInMemoryRouterApiRuntimeSnapshotConsumer, validateRuntimeSnapshotExpectation } from "./framework/runtimeSnapshotConsumer.js";
|
|
31
|
-
import { createSelfHostedCloudflareSigningRouter, createSelfHostedCloudflareSigningWorker } from "./cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js";
|
|
32
31
|
import { CloudflareDurableObjectVersionedJsonRecordStore, CloudflareVersionedJsonRecordStoreError, createCloudflareDurableObjectVersionedJsonRecordStore } from "./cloudflare/durableObjects/versionedJsonRecordStore.js";
|
|
33
32
|
import { CloudflareD1VersionedJsonRecordStore, CloudflareD1VersionedJsonRecordStoreError, createCloudflareD1VersionedJsonRecordStore } from "./cloudflare/d1/versionedJson/d1VersionedJsonRecordStore.js";
|
|
34
33
|
import { createRouterAbEd25519YaoCeremonyStateStoreV1, encodeRouterAbEd25519YaoProductRegistrationStateV1, parseRouterAbEd25519YaoCeremonyKeyV1, parseRouterAbEd25519YaoProductRegistrationStateJsonV1, resolveRouterAbEd25519YaoCeremonyKeyFromRequestV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationPersistence.js";
|
|
@@ -41,4 +40,4 @@ import { handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1 } from ".
|
|
|
41
40
|
import { createRouterAbEd25519YaoProductRegistrationRequestScopedRuntimeV1 } from "./domains/ed25519Yao/capabilityLifecycle/routerAbEd25519YaoProductRegistrationRequestScopedRuntime.js";
|
|
42
41
|
import { runRouterAbEd25519YaoRegistrationSideEffectV1 } from "./domains/ed25519Yao/registration/routerAbEd25519YaoRegistrationSideEffectBoundary.js";
|
|
43
42
|
import { CLOUDFLARE_ROUTER_ED25519_YAO_SOURCE_PRESERVING_EXECUTE_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_DEACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_RESERVE_INACTIVE_SOURCE_PRESERVING_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_DEACTIVATE_RESERVATION_PATH_V1, CloudflareOrdinaryInactiveSignerMaterialDeactivationWorkerV1, CloudflareOrdinaryInactiveSignerMaterialReservationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialDeactivationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1, createUnavailableOrdinaryInactiveSignerMaterialDeactivationPortV1, createUnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1 } from "./cloudflare/signingLanes/cloudflareOrdinaryInactiveSignerMaterialReservation.js";
|
|
44
|
-
export { CLOUDFLARE_ROUTER_ED25519_YAO_SOURCE_PRESERVING_EXECUTE_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_DEACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_RESERVE_INACTIVE_SOURCE_PRESERVING_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_DEACTIVATE_RESERVATION_PATH_V1, CloudflareD1AuthorizationStore, CloudflareD1RouterAbNormalSigningAdmissionStore, CloudflareD1VaultProxyStore, CloudflareD1VersionedJsonRecordStore, CloudflareD1VersionedJsonRecordStoreError, CloudflareD1WebAuthnAuthService, CloudflareD1WebAuthnStore, CloudflareDurableObjectVersionedJsonRecordStore, CloudflareOrdinaryInactiveSignerMaterialDeactivationWorkerV1, CloudflareOrdinaryInactiveSignerMaterialReservationWorkerV1, CloudflareVersionedJsonRecordStoreError, DEFAULT_WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_V1, DEFAULT_WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_V1, InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter, InMemoryRouterAbEd25519YaoRegistrationService, InMemoryRouterAbNormalSigningAdmissionStore, ROUTER_AB_ED25519_YAO_SHARED_STATE_RECORD_KEY_V1, ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_VERSION_V2, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH, RouterAbEd25519YaoHttpRegistrationBackend, StaticCloudflareTenantStorageRouteResolver, UnavailableOrdinaryInactiveSignerMaterialDeactivationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, WALLET_CONSOLE_API_WALLET_DETAIL_PREFIX_V1, WALLET_CONSOLE_OPS_BASE_PATH_V1, WALLET_CONSOLE_OP_PATHS_V1, WALLET_CONSOLE_SERVICE_ORIGIN_V1, WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_ID_V1, WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_ID_V1, WALLET_CONTROL_AUTH_MARKER_V1, WALLET_CONTROL_BASE_PATH_V1, WALLET_CONTROL_SERVICE_ORIGIN_V1, WALLET_RUNTIME_OPS_BASE_PATH_V1, WALLET_RUNTIME_OP_PATHS_V1, WALLET_RUNTIME_SERVICE_ORIGIN_V1, buildRouterAbEd25519YaoProductAdmissionRequestV1, coerceRouterLogger, createCloudflareD1RouterAbNormalSigningAdmissionStore, createCloudflareD1VersionedJsonRecordStore, createCloudflareDurableObjectVersionedJsonRecordStore, createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1, createCloudflareRouter, createCloudflareTenantStorageRoute, createCloudflareWalletGatewayRouterV1, createInMemoryRouterAbNormalSigningAdmissionAdapter, createInMemoryRouterAbNormalSigningAdmissionStore, createInMemoryRouterApiRuntimeSnapshotConsumer, createRouterAbEd25519YaoCeremonyStateStoreV1, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv, createRouterAbEd25519YaoProductRegistrationCompositionFromPortsV1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1, createRouterAbEd25519YaoProductRegistrationRequestScopedRuntimeV1, createRouterAbEd25519YaoProductRegistrationRuntimeV1, createRouterAbEd25519YaoProductRegistrationStateV1, createRouterAbEd25519YaoRegistrationModule, createRouterAbNormalSigningAdmissionAdapter, createRouterApiModule,
|
|
43
|
+
export { CLOUDFLARE_ROUTER_ED25519_YAO_SOURCE_PRESERVING_EXECUTE_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_DEACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_RESERVE_INACTIVE_SOURCE_PRESERVING_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_DEACTIVATE_RESERVATION_PATH_V1, CloudflareD1AuthorizationStore, CloudflareD1RouterAbNormalSigningAdmissionStore, CloudflareD1VaultProxyStore, CloudflareD1VersionedJsonRecordStore, CloudflareD1VersionedJsonRecordStoreError, CloudflareD1WebAuthnAuthService, CloudflareD1WebAuthnStore, CloudflareDurableObjectVersionedJsonRecordStore, CloudflareOrdinaryInactiveSignerMaterialDeactivationWorkerV1, CloudflareOrdinaryInactiveSignerMaterialReservationWorkerV1, CloudflareVersionedJsonRecordStoreError, DEFAULT_WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_V1, DEFAULT_WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_V1, InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter, InMemoryRouterAbEd25519YaoRegistrationService, InMemoryRouterAbNormalSigningAdmissionStore, ROUTER_AB_ED25519_YAO_SHARED_STATE_RECORD_KEY_V1, ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_VERSION_V2, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH, RouterAbEd25519YaoHttpRegistrationBackend, StaticCloudflareTenantStorageRouteResolver, UnavailableOrdinaryInactiveSignerMaterialDeactivationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, WALLET_CONSOLE_API_WALLET_DETAIL_PREFIX_V1, WALLET_CONSOLE_OPS_BASE_PATH_V1, WALLET_CONSOLE_OP_PATHS_V1, WALLET_CONSOLE_SERVICE_ORIGIN_V1, WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_ID_V1, WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_ID_V1, WALLET_CONTROL_AUTH_MARKER_V1, WALLET_CONTROL_BASE_PATH_V1, WALLET_CONTROL_SERVICE_ORIGIN_V1, WALLET_RUNTIME_OPS_BASE_PATH_V1, WALLET_RUNTIME_OP_PATHS_V1, WALLET_RUNTIME_SERVICE_ORIGIN_V1, buildRouterAbEd25519YaoProductAdmissionRequestV1, coerceRouterLogger, createCloudflareD1RouterAbNormalSigningAdmissionStore, createCloudflareD1VersionedJsonRecordStore, createCloudflareDurableObjectVersionedJsonRecordStore, createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1, createCloudflareRouter, createCloudflareTenantStorageRoute, createCloudflareWalletGatewayRouterV1, createInMemoryRouterAbNormalSigningAdmissionAdapter, createInMemoryRouterAbNormalSigningAdmissionStore, createInMemoryRouterApiRuntimeSnapshotConsumer, createRouterAbEd25519YaoCeremonyStateStoreV1, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv, createRouterAbEd25519YaoProductRegistrationCompositionFromPortsV1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1, createRouterAbEd25519YaoProductRegistrationRequestScopedRuntimeV1, createRouterAbEd25519YaoProductRegistrationRuntimeV1, createRouterAbEd25519YaoProductRegistrationStateV1, createRouterAbEd25519YaoRegistrationModule, createRouterAbNormalSigningAdmissionAdapter, createRouterApiModule, createSignerD1DoStorageTarget, createStaticCloudflareTenantStorageRouteResolver, createStaticCloudflareTenantStorageRouteResolverFromBindings, createStaticWalletConsoleBindingV1, createUnavailableOrdinaryInactiveSignerMaterialDeactivationPortV1, createUnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, createWalletConsoleOpsClient, createWalletConsoleRelayProxyExtensionV1, createWalletControlClientBindings, createWalletRuntimeOpsHandler, decodeWalletConsoleTenantRootActiveLineageRequestV1, decodeWalletConsoleTenantRootActiveLineageResponseV1, defineRoute, encodeRouterAbEd25519YaoProductRegistrationPartitionRecordV1, encodeRouterAbEd25519YaoProductRegistrationStateV1, extractBearerCredential, extractRouterApiEnvironmentId, getRouterApiRouteExtensionRoutes, handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1, handleStaticWalletConsoleRequestV1, handleWalletControlRequest, matchesRouteDefinitionRequest, mergeRouterAbEd25519YaoProductRegistrationStatePartitionV1, parseRouterAbEd25519YaoCeremonyKeyV1, parseRouterAbEd25519YaoProductRegistrationPartitionRecordV1, parseRouterAbEd25519YaoProductRegistrationStateJsonV1, parseRouterAbPublicKeysetV2, parseStaticWalletConsoleBindingConfigV1, parseWalletRegistrationContextResponse, parseWalletRuntimeExecuteSignedDelegateRequest, parseWalletRuntimeExecuteSignedDelegateResponse, parseWalletRuntimeExecuteSignedDelegateResult, parseWalletRuntimeRelayerAccount, parseWalletRuntimeWalletIdentitiesResult, parseWalletRuntimeWalletIdentityRequest, partitionRouterAbEd25519YaoProductRegistrationStateV1, randomTenantRootCreationGrantBytesV1, readEnvironmentCsv, readEnvironmentString, requireEnvironmentString, resolveRouterAbEd25519YaoCeremonyKeyFromRequestV1, resolveRuntimeTenantRootLineage, resolveSourceIpFromFetchHeaders, runRouterAbEd25519YaoProductRegistrationRequestScopedV1, runRouterAbEd25519YaoRegistrationSideEffectV1, runRouterAbEd25519YaoRegistrationTwoPhaseV1, runRouterAbPrewarmScheduledV1, signTenantRootCreationGrantV1, tenantRootIdentityDigestB64uV1, validateRuntimeSnapshotExpectation, walletConsoleApiWalletGetRouteDefinitionV1, walletConsoleApiWalletListRouteDefinitionV1, walletConsoleApiWalletSearchRouteDefinitionV1, walletConsoleRelayRouteDefinitionsV1, walletConsoleSignedDelegateRouteDefinitionV1, walletConsoleSponsoredEvmCallRouteDefinitionV1 };
|
|
@@ -14366,7 +14366,7 @@ async function handleRouterApiWalletRegistrationActivate(input) {
|
|
|
14366
14366
|
...body.emailOtpEnrollment ? { emailOtpEnrollment: body.emailOtpEnrollment } : {},
|
|
14367
14367
|
...body.walletCustodyCommit !== void 0 ? { walletCustodyCommit: body.walletCustodyCommit } : {},
|
|
14368
14368
|
verifier: session
|
|
14369
|
-
}, traceContext.value ?? void 0, serverTiming);
|
|
14369
|
+
}, traceContext.value ?? void 0, serverTiming, input.waitUntil);
|
|
14370
14370
|
if (!result.ok) return routeJson(400, result);
|
|
14371
14371
|
if (!isEmailOtpWalletRegistrationActivateSuccessV2(result) && !isPasskeyWalletRegistrationActivateSuccessV2(result)) return routeError(500, "internal", "Wallet registration activation returned an invalid authority");
|
|
14372
14372
|
return routeJson(200, result, { headers: registrationServerTimingHeaders(serverTiming) });
|
|
@@ -39464,90 +39464,6 @@ function createInMemoryRouterApiRuntimeSnapshotConsumer() {
|
|
|
39464
39464
|
};
|
|
39465
39465
|
}
|
|
39466
39466
|
//#endregion
|
|
39467
|
-
//#region src/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.ts
|
|
39468
|
-
function notFound() {
|
|
39469
|
-
return new Response("Not Found", { status: 404 });
|
|
39470
|
-
}
|
|
39471
|
-
function selfHostedHealthResponse(ctx) {
|
|
39472
|
-
if (ctx.method !== "GET") return null;
|
|
39473
|
-
if (ctx.pathname !== "/healthz" && ctx.pathname !== "/readyz") return null;
|
|
39474
|
-
if (ctx.pathname === "/healthz" && !ctx.opts.healthz) return null;
|
|
39475
|
-
if (ctx.pathname === "/readyz" && !ctx.opts.readyz) return null;
|
|
39476
|
-
return json$3({
|
|
39477
|
-
ok: true,
|
|
39478
|
-
selfHosted: true,
|
|
39479
|
-
threshold: { configured: Boolean(ctx.opts.routerAbNormalSigningRouterProxy) }
|
|
39480
|
-
}, { status: 200 });
|
|
39481
|
-
}
|
|
39482
|
-
function createSelfHostedContext(input) {
|
|
39483
|
-
const url = new URL(input.request.url);
|
|
39484
|
-
return {
|
|
39485
|
-
request: input.request,
|
|
39486
|
-
url,
|
|
39487
|
-
pathname: url.pathname,
|
|
39488
|
-
method: input.request.method.toUpperCase(),
|
|
39489
|
-
runtime: input.cfCtx ? {
|
|
39490
|
-
kind: "background",
|
|
39491
|
-
waitUntil: (promise) => input.cfCtx?.waitUntil(promise)
|
|
39492
|
-
} : { kind: "inline" },
|
|
39493
|
-
service: input.service,
|
|
39494
|
-
opts: input.opts,
|
|
39495
|
-
logger: input.logger,
|
|
39496
|
-
routeDefinitions: []
|
|
39497
|
-
};
|
|
39498
|
-
}
|
|
39499
|
-
function createSelfHostedCloudflareSigningRouter(service, opts = {}) {
|
|
39500
|
-
const sessionCookieName = String(opts.sessionCookieName || "").trim() || "seams-jwt";
|
|
39501
|
-
const effectiveOpts = {
|
|
39502
|
-
...opts,
|
|
39503
|
-
sessionCookieName
|
|
39504
|
-
};
|
|
39505
|
-
if (effectiveOpts.ror) validateRouterApiRorOptions(effectiveOpts.ror);
|
|
39506
|
-
const logger = coerceRouterLogger(effectiveOpts.logger);
|
|
39507
|
-
const handler = async (request, _env, cfCtx) => {
|
|
39508
|
-
if (request.method.toUpperCase() === "OPTIONS") {
|
|
39509
|
-
const res = new Response(null, { status: 204 });
|
|
39510
|
-
withCors(res.headers, effectiveOpts, request);
|
|
39511
|
-
return res;
|
|
39512
|
-
}
|
|
39513
|
-
const ctx = createSelfHostedContext({
|
|
39514
|
-
request,
|
|
39515
|
-
cfCtx,
|
|
39516
|
-
service,
|
|
39517
|
-
opts: effectiveOpts,
|
|
39518
|
-
logger
|
|
39519
|
-
});
|
|
39520
|
-
try {
|
|
39521
|
-
const response = selfHostedHealthResponse(ctx) || await handleThresholdEd25519(ctx) || await handleThresholdEcdsa(ctx) || notFound();
|
|
39522
|
-
withCors(response.headers, effectiveOpts, request);
|
|
39523
|
-
return response;
|
|
39524
|
-
} catch (error) {
|
|
39525
|
-
const res = json$3({
|
|
39526
|
-
code: "internal",
|
|
39527
|
-
message: error instanceof Error ? error.message : String(error)
|
|
39528
|
-
}, { status: 500 });
|
|
39529
|
-
withCors(res.headers, effectiveOpts, request);
|
|
39530
|
-
return res;
|
|
39531
|
-
}
|
|
39532
|
-
};
|
|
39533
|
-
return handler;
|
|
39534
|
-
}
|
|
39535
|
-
function createSelfHostedCloudflareSigningWorker(input) {
|
|
39536
|
-
return { async fetch(request, env, ctx) {
|
|
39537
|
-
const service = await input.createAuthService({
|
|
39538
|
-
request,
|
|
39539
|
-
env,
|
|
39540
|
-
ctx
|
|
39541
|
-
});
|
|
39542
|
-
return createSelfHostedCloudflareSigningRouter(service, typeof input.routerOptions === "function" ? await input.routerOptions({
|
|
39543
|
-
request,
|
|
39544
|
-
env,
|
|
39545
|
-
ctx,
|
|
39546
|
-
service
|
|
39547
|
-
}) : input.routerOptions || {})(request, env, ctx);
|
|
39548
|
-
} };
|
|
39549
|
-
}
|
|
39550
|
-
//#endregion
|
|
39551
39467
|
//#region src/router/cloudflare/durableObjects/versionedJsonRecordStore.ts
|
|
39552
39468
|
var CloudflareVersionedJsonRecordStoreError = class extends Error {
|
|
39553
39469
|
constructor(code, message) {
|
|
@@ -43027,6 +42943,6 @@ async function establishedGeneration(admit, walletId) {
|
|
|
43027
42943
|
return admitted.ownershipGeneration;
|
|
43028
42944
|
}
|
|
43029
42945
|
//#endregion
|
|
43030
|
-
export { CLOUDFLARE_ROUTER_ED25519_YAO_SOURCE_PRESERVING_EXECUTE_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_DEACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_RESERVE_INACTIVE_SOURCE_PRESERVING_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_DEACTIVATE_RESERVATION_PATH_V1, CloudflareD1AuthorizationStore, CloudflareD1RouterAbNormalSigningAdmissionStore, CloudflareD1VaultProxyStore, CloudflareD1VersionedJsonRecordStore, CloudflareD1VersionedJsonRecordStoreError, CloudflareD1WebAuthnAuthService, CloudflareD1WebAuthnStore, CloudflareDurableObjectVersionedJsonRecordStore, CloudflareOrdinaryInactiveSignerMaterialDeactivationWorkerV1, CloudflareOrdinaryInactiveSignerMaterialReservationWorkerV1, CloudflareVersionedJsonRecordStoreError, DEFAULT_WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_V1, DEFAULT_WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_V1, InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter, InMemoryRouterAbEd25519YaoRegistrationService, InMemoryRouterAbNormalSigningAdmissionStore, ROUTER_AB_ED25519_YAO_SHARED_STATE_RECORD_KEY_V1, ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_VERSION_V2, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH, RouterAbEd25519YaoHttpRegistrationBackend, StaticCloudflareTenantStorageRouteResolver, UnavailableOrdinaryInactiveSignerMaterialDeactivationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, WALLET_CONSOLE_API_WALLET_DETAIL_PREFIX_V1, WALLET_CONSOLE_OPS_BASE_PATH_V1, WALLET_CONSOLE_OP_PATHS_V1, WALLET_CONSOLE_SERVICE_ORIGIN_V1, WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_ID_V1, WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_ID_V1, WALLET_CONTROL_AUTH_MARKER_V1, WALLET_CONTROL_BASE_PATH_V1, WALLET_CONTROL_SERVICE_ORIGIN_V1, WALLET_RUNTIME_OPS_BASE_PATH_V1, WALLET_RUNTIME_OP_PATHS_V1, WALLET_RUNTIME_SERVICE_ORIGIN_V1, buildRouterAbEd25519YaoProductAdmissionRequestV1, coerceRouterLogger, createCloudflareD1RouterAbNormalSigningAdmissionStore, createCloudflareD1VersionedJsonRecordStore, createCloudflareDurableObjectVersionedJsonRecordStore, createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1, createCloudflareRouter, createCloudflareTenantStorageRoute, createCloudflareWalletGatewayRouterV1, createInMemoryRouterAbNormalSigningAdmissionAdapter, createInMemoryRouterAbNormalSigningAdmissionStore, createInMemoryRouterApiRuntimeSnapshotConsumer, createRouterAbEd25519YaoCeremonyStateStoreV1, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv, createRouterAbEd25519YaoProductRegistrationCompositionFromPortsV1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1, createRouterAbEd25519YaoProductRegistrationRequestScopedRuntimeV1, createRouterAbEd25519YaoProductRegistrationRuntimeV1, createRouterAbEd25519YaoProductRegistrationStateV1, createRouterAbEd25519YaoRegistrationModule, createRouterAbNormalSigningAdmissionAdapter, createRouterApiModule,
|
|
42946
|
+
export { CLOUDFLARE_ROUTER_ED25519_YAO_SOURCE_PRESERVING_EXECUTE_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_DEACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ECDSA_RESERVE_INACTIVE_SOURCE_PRESERVING_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_ACTIVATE_RESERVATION_PATH_V1, CLOUDFLARE_SIGNING_WORKER_ED25519_YAO_DEACTIVATE_RESERVATION_PATH_V1, CloudflareD1AuthorizationStore, CloudflareD1RouterAbNormalSigningAdmissionStore, CloudflareD1VaultProxyStore, CloudflareD1VersionedJsonRecordStore, CloudflareD1VersionedJsonRecordStoreError, CloudflareD1WebAuthnAuthService, CloudflareD1WebAuthnStore, CloudflareDurableObjectVersionedJsonRecordStore, CloudflareOrdinaryInactiveSignerMaterialDeactivationWorkerV1, CloudflareOrdinaryInactiveSignerMaterialReservationWorkerV1, CloudflareVersionedJsonRecordStoreError, DEFAULT_WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_V1, DEFAULT_WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_V1, InMemoryRouterAbEd25519YaoRegistrationIntentAuthorizationAdapter, InMemoryRouterAbEd25519YaoRegistrationService, InMemoryRouterAbNormalSigningAdmissionStore, ROUTER_AB_ED25519_YAO_SHARED_STATE_RECORD_KEY_V1, ROUTER_AB_PUBLIC_KEYSET_PATH, ROUTER_AB_PUBLIC_KEYSET_VERSION_V2, ROUTER_AB_PUBLIC_KEYSET_WELL_KNOWN_PATH, RouterAbEd25519YaoHttpRegistrationBackend, StaticCloudflareTenantStorageRouteResolver, UnavailableOrdinaryInactiveSignerMaterialDeactivationWorkerV1, UnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, WALLET_CONSOLE_API_WALLET_DETAIL_PREFIX_V1, WALLET_CONSOLE_OPS_BASE_PATH_V1, WALLET_CONSOLE_OP_PATHS_V1, WALLET_CONSOLE_SERVICE_ORIGIN_V1, WALLET_CONSOLE_SIGNED_DELEGATE_ROUTE_ID_V1, WALLET_CONSOLE_SPONSORED_EVM_CALL_ROUTE_ID_V1, WALLET_CONTROL_AUTH_MARKER_V1, WALLET_CONTROL_BASE_PATH_V1, WALLET_CONTROL_SERVICE_ORIGIN_V1, WALLET_RUNTIME_OPS_BASE_PATH_V1, WALLET_RUNTIME_OP_PATHS_V1, WALLET_RUNTIME_SERVICE_ORIGIN_V1, buildRouterAbEd25519YaoProductAdmissionRequestV1, coerceRouterLogger, createCloudflareD1RouterAbNormalSigningAdmissionStore, createCloudflareD1VersionedJsonRecordStore, createCloudflareDurableObjectVersionedJsonRecordStore, createCloudflareLinkedDeviceEd25519SourcePreservingRouterEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialActivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialDeactivationPortV1, createCloudflareOrdinaryInactiveSignerMaterialReservationEndpointV1, createCloudflareOrdinaryInactiveSignerMaterialReservationServiceV1, createCloudflareRouter, createCloudflareTenantStorageRoute, createCloudflareWalletGatewayRouterV1, createInMemoryRouterAbNormalSigningAdmissionAdapter, createInMemoryRouterAbNormalSigningAdmissionStore, createInMemoryRouterApiRuntimeSnapshotConsumer, createRouterAbEd25519YaoCeremonyStateStoreV1, createRouterAbEd25519YaoHttpRegistrationBackendFromEnv, createRouterAbEd25519YaoProductRegistrationCompositionFromPortsV1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreFromD1V1, createRouterAbEd25519YaoProductRegistrationPartitionedStateStoreV1, createRouterAbEd25519YaoProductRegistrationRequestScopedRuntimeV1, createRouterAbEd25519YaoProductRegistrationRuntimeV1, createRouterAbEd25519YaoProductRegistrationStateV1, createRouterAbEd25519YaoRegistrationModule, createRouterAbNormalSigningAdmissionAdapter, createRouterApiModule, createSignerD1DoStorageTarget, createStaticCloudflareTenantStorageRouteResolver, createStaticCloudflareTenantStorageRouteResolverFromBindings, createStaticWalletConsoleBindingV1, createUnavailableOrdinaryInactiveSignerMaterialDeactivationPortV1, createUnavailableOrdinaryInactiveSignerMaterialReservationWorkerV1, createWalletConsoleOpsClient, createWalletConsoleRelayProxyExtensionV1, createWalletControlClientBindings, createWalletRuntimeOpsHandler, decodeWalletConsoleTenantRootActiveLineageRequestV1, decodeWalletConsoleTenantRootActiveLineageResponseV1, defineRoute, encodeRouterAbEd25519YaoProductRegistrationPartitionRecordV1, encodeRouterAbEd25519YaoProductRegistrationStateV1, extractBearerCredential, extractRouterApiEnvironmentId, getRouterApiRouteExtensionRoutes, handleRouterAbEd25519YaoRegistrationRequestScopedCloudflareV1, handleStaticWalletConsoleRequestV1, handleWalletControlRequest, matchesRouteDefinitionRequest, mergeRouterAbEd25519YaoProductRegistrationStatePartitionV1, parseRouterAbEd25519YaoCeremonyKeyV1, parseRouterAbEd25519YaoProductRegistrationPartitionRecordV1, parseRouterAbEd25519YaoProductRegistrationStateJsonV1, parseRouterAbPublicKeysetV2, parseStaticWalletConsoleBindingConfigV1, parseWalletRegistrationContextResponse, parseWalletRuntimeExecuteSignedDelegateRequest, parseWalletRuntimeExecuteSignedDelegateResponse, parseWalletRuntimeExecuteSignedDelegateResult, parseWalletRuntimeRelayerAccount, parseWalletRuntimeWalletIdentitiesResult, parseWalletRuntimeWalletIdentityRequest, partitionRouterAbEd25519YaoProductRegistrationStateV1, randomTenantRootCreationGrantBytesV1, readEnvironmentCsv, readEnvironmentString, requireEnvironmentString, resolveRouterAbEd25519YaoCeremonyKeyFromRequestV1, resolveRuntimeTenantRootLineage, resolveSourceIpFromFetchHeaders, runRouterAbEd25519YaoProductRegistrationRequestScopedV1, runRouterAbEd25519YaoRegistrationSideEffectV1, runRouterAbEd25519YaoRegistrationTwoPhaseV1, runRouterAbPrewarmScheduledV1, signTenantRootCreationGrantV1, tenantRootIdentityDigestB64uV1, validateRuntimeSnapshotExpectation, walletConsoleApiWalletGetRouteDefinitionV1, walletConsoleApiWalletListRouteDefinitionV1, walletConsoleApiWalletSearchRouteDefinitionV1, walletConsoleRelayRouteDefinitionsV1, walletConsoleSignedDelegateRouteDefinitionV1, walletConsoleSponsoredEvmCallRouteDefinitionV1 };
|
|
43031
42947
|
|
|
43032
42948
|
//# sourceMappingURL=cloudflare.js.map
|
|
@@ -1891,7 +1891,7 @@ async function handleRouterApiWalletRegistrationActivate(input) {
|
|
|
1891
1891
|
...body.emailOtpEnrollment ? { emailOtpEnrollment: body.emailOtpEnrollment } : {},
|
|
1892
1892
|
...body.walletCustodyCommit !== void 0 ? { walletCustodyCommit: body.walletCustodyCommit } : {},
|
|
1893
1893
|
verifier: session
|
|
1894
|
-
}, traceContext.value ?? void 0, serverTiming);
|
|
1894
|
+
}, traceContext.value ?? void 0, serverTiming, input.waitUntil);
|
|
1895
1895
|
if (!result.ok) return routeJson(400, result);
|
|
1896
1896
|
if (!isEmailOtpWalletRegistrationActivateSuccessV2(result) && !isPasskeyWalletRegistrationActivateSuccessV2(result)) return routeError(500, "internal", "Wallet registration activation returned an invalid authority");
|
|
1897
1897
|
return routeJson(200, result, { headers: registrationServerTimingHeaders(serverTiming) });
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../../../../shared-ts/src/utils/normalize.js";
|
|
2
|
-
import {
|
|
3
|
-
import { RedisTcpClient, UpstashRedisRestClient } from "../../../../core/ThresholdService/kv.js";
|
|
2
|
+
import { UpstashRedisRestClient } from "../../../../core/ThresholdService/kv.js";
|
|
4
3
|
//#region src/threshold/session/signingSessionSeal/guards/backends.ts
|
|
5
4
|
const WINDOW_COUNTER_LUA = `
|
|
6
5
|
local key = KEYS[1]
|
|
@@ -87,105 +86,10 @@ var UpstashSigningSessionSealRateLimiter = class {
|
|
|
87
86
|
}
|
|
88
87
|
}
|
|
89
88
|
};
|
|
90
|
-
function redisRespToString(resp) {
|
|
91
|
-
if (resp.type === "error") return null;
|
|
92
|
-
if (resp.type === "bulk") return typeof resp.value === "string" ? resp.value : null;
|
|
93
|
-
if (resp.type === "integer") return String(resp.value);
|
|
94
|
-
if (resp.type === "simple") return resp.value;
|
|
95
|
-
return null;
|
|
96
|
-
}
|
|
97
|
-
var RedisTcpSigningSessionSealRateLimiter = class {
|
|
98
|
-
constructor(input) {
|
|
99
|
-
this.client = new RedisTcpClient(input.redisUrl);
|
|
100
|
-
this.keyPrefix = normalizeOptionalTrimmedString(input.keyPrefix);
|
|
101
|
-
}
|
|
102
|
-
withPrefix(key) {
|
|
103
|
-
return this.keyPrefix ? `${this.keyPrefix}${key}` : key;
|
|
104
|
-
}
|
|
105
|
-
async consume(input) {
|
|
106
|
-
const key = this.withPrefix(normalizeOptionalTrimmedString(input.key));
|
|
107
|
-
if (!key) return {
|
|
108
|
-
ok: false,
|
|
109
|
-
code: "invalid_rate_limit_key",
|
|
110
|
-
message: "Rate-limit key is required"
|
|
111
|
-
};
|
|
112
|
-
try {
|
|
113
|
-
const resp = await this.client.send([
|
|
114
|
-
"EVAL",
|
|
115
|
-
WINDOW_COUNTER_LUA,
|
|
116
|
-
"1",
|
|
117
|
-
key,
|
|
118
|
-
String(Math.max(1, Math.floor(Number(input.windowMs) || 0)))
|
|
119
|
-
]);
|
|
120
|
-
if (resp.type === "error") return {
|
|
121
|
-
ok: false,
|
|
122
|
-
code: "internal",
|
|
123
|
-
message: `Redis EVAL error: ${resp.value}`
|
|
124
|
-
};
|
|
125
|
-
const parsed = parseCounterWindow(redisRespToString(resp));
|
|
126
|
-
if (!parsed) return {
|
|
127
|
-
ok: false,
|
|
128
|
-
code: "internal",
|
|
129
|
-
message: "Invalid Redis rate-limit response"
|
|
130
|
-
};
|
|
131
|
-
return finalizeConsume({
|
|
132
|
-
count: parsed.count,
|
|
133
|
-
ttlMs: parsed.ttlMs,
|
|
134
|
-
limit: Math.max(1, Math.floor(Number(input.limit) || 0)),
|
|
135
|
-
nowMs: Math.floor(Number(input.nowMs) || 0)
|
|
136
|
-
});
|
|
137
|
-
} catch (error) {
|
|
138
|
-
return {
|
|
139
|
-
ok: false,
|
|
140
|
-
code: "internal",
|
|
141
|
-
message: error instanceof Error ? error.message : String(error || "Redis rate-limit failed")
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
89
|
function createUpstashSigningSessionSealRateLimiter(options) {
|
|
147
90
|
return new UpstashSigningSessionSealRateLimiter(options);
|
|
148
91
|
}
|
|
149
|
-
function createRedisTcpSigningSessionSealRateLimiter(options) {
|
|
150
|
-
return new RedisTcpSigningSessionSealRateLimiter(options);
|
|
151
|
-
}
|
|
152
|
-
function resolveSigningSessionSealRateLimitFromEnv(input) {
|
|
153
|
-
const limiterKind = normalizeOptionalTrimmedString(input.limiterKind || "").toLowerCase();
|
|
154
|
-
const upstashUrl = normalizeOptionalTrimmedString(input.upstashUrl || "");
|
|
155
|
-
const upstashToken = normalizeOptionalTrimmedString(input.upstashToken || "");
|
|
156
|
-
const redisUrl = normalizeOptionalTrimmedString(input.redisUrl || "");
|
|
157
|
-
const keyPrefix = normalizeOptionalTrimmedString(input.keyPrefix || "") || void 0;
|
|
158
|
-
const selectedKind = limiterKind || (upstashUrl || upstashToken ? "upstash-redis-rest" : redisUrl ? "redis-tcp" : "in-memory");
|
|
159
|
-
if (selectedKind === "upstash-redis-rest") {
|
|
160
|
-
if (!upstashUrl || !upstashToken) throw new Error("Upstash Signing-session seal rate limiter requires both upstashUrl and upstashToken");
|
|
161
|
-
return {
|
|
162
|
-
limiter: createUpstashSigningSessionSealRateLimiter({
|
|
163
|
-
url: upstashUrl,
|
|
164
|
-
token: upstashToken,
|
|
165
|
-
keyPrefix
|
|
166
|
-
}),
|
|
167
|
-
limit: input.limit,
|
|
168
|
-
windowMs: input.windowMs
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
if (selectedKind === "redis-tcp") {
|
|
172
|
-
if (!redisUrl) throw new Error("Redis TCP Signing-session seal rate limiter requires redisUrl");
|
|
173
|
-
return {
|
|
174
|
-
limiter: createRedisTcpSigningSessionSealRateLimiter({
|
|
175
|
-
redisUrl,
|
|
176
|
-
keyPrefix
|
|
177
|
-
}),
|
|
178
|
-
limit: input.limit,
|
|
179
|
-
windowMs: input.windowMs
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
return {
|
|
183
|
-
limiter: createInMemorySigningSessionSealRateLimiter(),
|
|
184
|
-
limit: input.limit,
|
|
185
|
-
windowMs: input.windowMs
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
92
|
//#endregion
|
|
189
|
-
export {
|
|
93
|
+
export { createUpstashSigningSessionSealRateLimiter };
|
|
190
94
|
|
|
191
95
|
//# sourceMappingURL=backends.js.map
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { normalizeOptionalTrimmedString } from "../../../shared-ts/src/utils/normalize.js";
|
|
2
|
-
import {
|
|
3
|
-
import { createInMemorySigningSessionSealIdempotencyStore } from "./idempotency.js";
|
|
2
|
+
import { UpstashRedisRestClient } from "../../../core/ThresholdService/kv.js";
|
|
4
3
|
import { parseCurrentSigningSessionSealIdempotencyResultRecord, parseCurrentSigningSessionSealIdempotencyStoredEntry } from "./idempotencyRecords.js";
|
|
5
4
|
//#region src/threshold/session/signingSessionSeal/idempotencyBackends.ts
|
|
6
5
|
const DEFAULT_KEY_PREFIX = "threshold:signing-session-seal:idempotency:";
|
|
@@ -55,76 +54,10 @@ var UpstashSigningSessionSealIdempotencyStore = class {
|
|
|
55
54
|
}, ttlMs);
|
|
56
55
|
}
|
|
57
56
|
};
|
|
58
|
-
var RedisTcpSigningSessionSealIdempotencyStore = class {
|
|
59
|
-
constructor(options) {
|
|
60
|
-
this.client = new RedisTcpClient(options.redisUrl);
|
|
61
|
-
this.keyPrefix = normalizeOptionalTrimmedString(options.keyPrefix) || DEFAULT_KEY_PREFIX;
|
|
62
|
-
this.nowMs = options.nowMs || Date.now;
|
|
63
|
-
}
|
|
64
|
-
async get(input) {
|
|
65
|
-
const key = prefixedKey(this.keyPrefix, input.key);
|
|
66
|
-
if (!key) return null;
|
|
67
|
-
const entry = parseCurrentSigningSessionSealIdempotencyStoredEntry(await redisGetJson(this.client, key));
|
|
68
|
-
if (!entry) return null;
|
|
69
|
-
if (entry.expiresAtMs <= input.nowMs) {
|
|
70
|
-
try {
|
|
71
|
-
await redisDel(this.client, key);
|
|
72
|
-
} catch {}
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
return entry.result;
|
|
76
|
-
}
|
|
77
|
-
async set(input) {
|
|
78
|
-
const key = prefixedKey(this.keyPrefix, input.key);
|
|
79
|
-
if (!key) return;
|
|
80
|
-
const expiresAtMs = toPositiveInt(input.expiresAtMs);
|
|
81
|
-
if (expiresAtMs === void 0) return;
|
|
82
|
-
const normalizedResult = parseCurrentSigningSessionSealIdempotencyResultRecord(input.result);
|
|
83
|
-
if (!normalizedResult) return;
|
|
84
|
-
const ttlMs = ttlMsUntilExpiry(expiresAtMs, this.nowMs());
|
|
85
|
-
if (ttlMs <= 0) return;
|
|
86
|
-
await redisSetJson(this.client, key, {
|
|
87
|
-
result: normalizedResult,
|
|
88
|
-
expiresAtMs
|
|
89
|
-
}, ttlMs);
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
57
|
function createUpstashSigningSessionSealIdempotencyStore(options) {
|
|
93
58
|
return new UpstashSigningSessionSealIdempotencyStore(options);
|
|
94
59
|
}
|
|
95
|
-
function createRedisTcpSigningSessionSealIdempotencyStore(options) {
|
|
96
|
-
return new RedisTcpSigningSessionSealIdempotencyStore(options);
|
|
97
|
-
}
|
|
98
|
-
function resolveSigningSessionSealIdempotencyFromEnv(input) {
|
|
99
|
-
const idempotencyKind = normalizeOptionalTrimmedString(input.idempotencyKind || "").toLowerCase();
|
|
100
|
-
const upstashUrl = normalizeOptionalTrimmedString(input.upstashUrl || "");
|
|
101
|
-
const upstashToken = normalizeOptionalTrimmedString(input.upstashToken || "");
|
|
102
|
-
const redisUrl = normalizeOptionalTrimmedString(input.redisUrl || "");
|
|
103
|
-
const keyPrefix = normalizeOptionalTrimmedString(input.keyPrefix || "") || DEFAULT_KEY_PREFIX;
|
|
104
|
-
const ttlMs = toPositiveInt(input.ttlMs);
|
|
105
|
-
const selectedKind = idempotencyKind || (upstashUrl || upstashToken ? "upstash-redis-rest" : redisUrl ? "redis-tcp" : "in-memory");
|
|
106
|
-
let store;
|
|
107
|
-
if (selectedKind === "upstash-redis-rest") {
|
|
108
|
-
if (!upstashUrl || !upstashToken) throw new Error("Upstash signing session-seal idempotency requires both upstashUrl and upstashToken");
|
|
109
|
-
store = createUpstashSigningSessionSealIdempotencyStore({
|
|
110
|
-
url: upstashUrl,
|
|
111
|
-
token: upstashToken,
|
|
112
|
-
keyPrefix
|
|
113
|
-
});
|
|
114
|
-
} else if (selectedKind === "redis-tcp") {
|
|
115
|
-
if (!redisUrl) throw new Error("Redis TCP signing session-seal idempotency requires redisUrl");
|
|
116
|
-
store = createRedisTcpSigningSessionSealIdempotencyStore({
|
|
117
|
-
redisUrl,
|
|
118
|
-
keyPrefix
|
|
119
|
-
});
|
|
120
|
-
} else if (selectedKind === "in-memory") store = createInMemorySigningSessionSealIdempotencyStore();
|
|
121
|
-
else throw new Error(`Unsupported signing session-seal idempotency kind "${selectedKind}". Expected in-memory, upstash-redis-rest, or redis-tcp.`);
|
|
122
|
-
return {
|
|
123
|
-
store,
|
|
124
|
-
...ttlMs ? { ttlMs } : {}
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
60
|
//#endregion
|
|
128
|
-
export {
|
|
61
|
+
export { createUpstashSigningSessionSealIdempotencyStore };
|
|
129
62
|
|
|
130
63
|
//# sourceMappingURL=idempotencyBackends.js.map
|
|
@@ -7,6 +7,6 @@ import { createSigningSessionSealService } from "./service.js";
|
|
|
7
7
|
import { createSigningSessionSealRoutesOptions } from "./routesOptions.js";
|
|
8
8
|
import { createSigningSessionSealOptions, parseSigningSessionSealRootConfig } from "./options.js";
|
|
9
9
|
import { createInMemorySigningSessionSealIdempotencyStore } from "./idempotency.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
export { authorizeSigningSessionSealRequest, buildSigningSessionSealApplyPath, buildSigningSessionSealRemovePath, composeSigningSessionSealGuards, createInMemorySigningSessionSealIdempotencyStore, createInMemorySigningSessionSealRateLimiter, createPassthroughSigningSessionSealCipherAdapter,
|
|
10
|
+
import { createUpstashSigningSessionSealRateLimiter } from "./guards/backends.js";
|
|
11
|
+
import { createUpstashSigningSessionSealIdempotencyStore } from "./idempotencyBackends.js";
|
|
12
|
+
export { authorizeSigningSessionSealRequest, buildSigningSessionSealApplyPath, buildSigningSessionSealRemovePath, composeSigningSessionSealGuards, createInMemorySigningSessionSealIdempotencyStore, createInMemorySigningSessionSealRateLimiter, createPassthroughSigningSessionSealCipherAdapter, createSigningSessionSealAuditLogger, createSigningSessionSealCipherAdapter, createSigningSessionSealOptions, createSigningSessionSealRateLimitGuard, createSigningSessionSealRoutesOptions, createSigningSessionSealService, createSigningSessionSealShamir3PassCipherAdapter, createUpstashSigningSessionSealIdempotencyStore, createUpstashSigningSessionSealRateLimiter, encodeSigningSessionSealServerLockContext, handleSigningSessionSealRoutes, parseSigningSessionSealApplyBody, parseSigningSessionSealRemoveBody, parseSigningSessionSealRootConfig, resolveSigningSessionSealBasePath, signingSessionSealAuthorizeStatusCode, signingSessionSealStatusCode };
|
|
@@ -119,7 +119,7 @@ export type { LinkedDeviceBootstrapStore, LinkedDeviceBootstrapResult, } from '.
|
|
|
119
119
|
export { parseLinkedDeviceSessionRecordV1 } from './core/deviceLinking/linkedDeviceSessionRecord';
|
|
120
120
|
export type { LinkedDeviceSessionRecordV1 } from './core/deviceLinking/linkedDeviceSessionRecord';
|
|
121
121
|
export { computeLinkedDeviceSessionClaimDigestV1 } from '../../shared-ts/src/device-linking/digests';
|
|
122
|
-
export { admitD1EstablishedWalletHome } from './router/cloudflare/d1/registration/d1WalletExecutionAuthority';
|
|
122
|
+
export { admitD1EstablishedWalletHome, resumeRegistrationDirectoryPublicationsV1, type RegistrationDirectoryPublicationDelivery, } from './router/cloudflare/d1/registration/d1WalletExecutionAuthority';
|
|
123
123
|
export { D1WalletObjectAddresses } from './router/cloudflare/d1/walletObjectAddresses';
|
|
124
124
|
export { walletObjectIdentity, WalletObjectAddressSnapshot, type WalletObjectIdentity } from './router/cloudflare/runtime/walletObjectAddresses';
|
|
125
125
|
//# sourceMappingURL=cloud-host.d.ts.map
|
|
@@ -13,33 +13,4 @@ export declare class UpstashRedisRestClient {
|
|
|
13
13
|
setJson(key: string, value: unknown, ttlMs?: number): Promise<void>;
|
|
14
14
|
eval(script: string, keys: string[], args: string[]): Promise<unknown | null>;
|
|
15
15
|
}
|
|
16
|
-
export type RedisResp = {
|
|
17
|
-
type: 'simple';
|
|
18
|
-
value: string;
|
|
19
|
-
} | {
|
|
20
|
-
type: 'error';
|
|
21
|
-
value: string;
|
|
22
|
-
} | {
|
|
23
|
-
type: 'integer';
|
|
24
|
-
value: number;
|
|
25
|
-
} | {
|
|
26
|
-
type: 'bulk';
|
|
27
|
-
value: string | null;
|
|
28
|
-
};
|
|
29
|
-
export declare class RedisTcpClient {
|
|
30
|
-
private readonly url;
|
|
31
|
-
private socket;
|
|
32
|
-
private buffer;
|
|
33
|
-
private pending;
|
|
34
|
-
private connecting;
|
|
35
|
-
constructor(redisUrl: string);
|
|
36
|
-
private ensureConnected;
|
|
37
|
-
private connect;
|
|
38
|
-
private drain;
|
|
39
|
-
private failAll;
|
|
40
|
-
send(args: string[]): Promise<RedisResp>;
|
|
41
|
-
}
|
|
42
|
-
export declare function redisGetJson(client: RedisTcpClient, key: string): Promise<unknown | null>;
|
|
43
|
-
export declare function redisDel(client: RedisTcpClient, key: string): Promise<void>;
|
|
44
|
-
export declare function redisSetJson(client: RedisTcpClient, key: string, value: unknown, ttlMs?: number): Promise<void>;
|
|
45
16
|
//# sourceMappingURL=kv.d.ts.map
|
|
@@ -3,6 +3,8 @@ import type { CfExecutionContext } from './router/cloudflare/runtime/cloudflare.
|
|
|
3
3
|
export type LocalHostedWalletGatewayEnv = CloudflareD1GatewayBaseEnv & {
|
|
4
4
|
readonly WALLET_LOCAL_DEPLOYMENT_JSON: string;
|
|
5
5
|
};
|
|
6
|
+
/** Sends the due directory publications to the local registration authority. */
|
|
7
|
+
export declare function resumeLocalRegistrationDirectoryPublicationsV1(env: LocalHostedWalletGatewayEnv): Promise<void>;
|
|
6
8
|
/**
|
|
7
9
|
* The local Gateway: the hosted Gateway handler plus the intended-suite
|
|
8
10
|
* transport faults, which a request arms with local-only headers. The local
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type D1TenantScope } from '../../../../core/d1TenantStore';
|
|
2
2
|
import type { D1DatabaseLike, D1ResultLike } from '../../../../storage/tenantRoute';
|
|
3
|
-
import type {
|
|
3
|
+
import type { RegistrationActivationWrite, WalletExecutionAuthority, WalletRegistrationHomeAuthority, WalletRegistrationReservationAuthority } from '../../../domains/walletRegistration/walletRegistrationReservation';
|
|
4
4
|
type Authority = WalletRegistrationReservationAuthority;
|
|
5
5
|
type HomeAdmission = Awaited<ReturnType<Authority['admitHome']>>;
|
|
6
6
|
type OrdinaryAdmission = Awaited<ReturnType<WalletExecutionAuthority['admitEstablishedHome']>>;
|
|
@@ -10,6 +10,7 @@ type RegistrationHomeRow = {
|
|
|
10
10
|
readonly registration_completion: string;
|
|
11
11
|
readonly relocation_blocked: number;
|
|
12
12
|
};
|
|
13
|
+
export type RegistrationDirectoryPublicationDelivery = 'acknowledged' | 'deferred' | 'refused';
|
|
13
14
|
export declare class D1WalletExecutionAuthority implements WalletRegistrationHomeAuthority, WalletExecutionAuthority {
|
|
14
15
|
private readonly database;
|
|
15
16
|
private readonly scope;
|
|
@@ -26,7 +27,14 @@ export declare class D1WalletExecutionAuthority implements WalletRegistrationHom
|
|
|
26
27
|
readonly code: string;
|
|
27
28
|
readonly message: string;
|
|
28
29
|
}>;
|
|
29
|
-
|
|
30
|
+
prepareEstablished(input: Parameters<WalletRegistrationHomeAuthority['prepareEstablished']>[0]): RegistrationActivationWrite | null;
|
|
31
|
+
/** Sends the publications that are due, oldest first, one at a time. */
|
|
32
|
+
resumeDirectoryPublications(input: {
|
|
33
|
+
readonly nowMs: number;
|
|
34
|
+
readonly limit: number;
|
|
35
|
+
}): Promise<Record<RegistrationDirectoryPublicationDelivery, number>>;
|
|
36
|
+
private deliver;
|
|
37
|
+
private preparePublicationUpdate;
|
|
30
38
|
private fixCancellation;
|
|
31
39
|
/** The state update with its guard. The guard reads the row count of the update before it. */
|
|
32
40
|
private prepareState;
|
|
@@ -37,5 +45,17 @@ export declare function prepareD1RegistrationHomeReservation(database: D1Databas
|
|
|
37
45
|
readonly ownershipGeneration: number;
|
|
38
46
|
}): import("../../../cloudflare-adaptor").D1PreparedStatementLike[];
|
|
39
47
|
export declare function admitD1EstablishedWalletHome(database: D1DatabaseLike, scope: D1TenantScope, input: Parameters<WalletExecutionAuthority['admitEstablishedHome']>[0]): Promise<OrdinaryAdmission>;
|
|
48
|
+
/**
|
|
49
|
+
* Sends the due directory publications of one tenant scope. The Gateway's
|
|
50
|
+
* scheduled handler runs it, so a publication that the finalize response could
|
|
51
|
+
* not deliver still reaches the directory.
|
|
52
|
+
*/
|
|
53
|
+
export declare function resumeRegistrationDirectoryPublicationsV1(input: {
|
|
54
|
+
readonly database: D1DatabaseLike;
|
|
55
|
+
readonly scope: D1TenantScope;
|
|
56
|
+
readonly registrationAuthority: Authority;
|
|
57
|
+
readonly nowMs?: number;
|
|
58
|
+
readonly limit?: number;
|
|
59
|
+
}): Promise<Record<RegistrationDirectoryPublicationDelivery, number>>;
|
|
40
60
|
export {};
|
|
41
61
|
//# sourceMappingURL=d1WalletExecutionAuthority.d.ts.map
|
|
@@ -320,7 +320,7 @@ export declare class CloudflareD1WalletRegistrationService {
|
|
|
320
320
|
* before execution; an ambiguous outcome after the custody call stays
|
|
321
321
|
* `uncertain` rather than being guessed either way.
|
|
322
322
|
*/
|
|
323
|
-
activateWalletRegistration(input: WalletRegistrationActivateInput, traceContext?: RouterAbTraceContextV1, serverTiming?: Array<readonly [string, number]>): Promise<WalletRegistrationActivateResponseV2>;
|
|
323
|
+
activateWalletRegistration(input: WalletRegistrationActivateInput, traceContext?: RouterAbTraceContextV1, serverTiming?: Array<readonly [string, number]>, waitUntil?: (promise: Promise<unknown>) => void): Promise<WalletRegistrationActivateResponseV2>;
|
|
324
324
|
/**
|
|
325
325
|
* Router/SigningWorker activation followed by the blocking finalize
|
|
326
326
|
* persistence, as one unit inside the operation row. The commit is told the
|
|
@@ -18,7 +18,7 @@ type RegistrationEstablishedSessionIssuanceDependencies = {
|
|
|
18
18
|
readonly authorizationService: RegistrationEstablishedSessionIssuerAuthorizationService;
|
|
19
19
|
readonly authorizationTenantId: TenantId;
|
|
20
20
|
readonly foundingAuthority: ActiveWalletAuthorityV1;
|
|
21
|
-
readonly homeCompletion: Pick<WalletRegistrationHomeAuthority, '
|
|
21
|
+
readonly homeCompletion: Pick<WalletRegistrationHomeAuthority, 'prepareEstablished'>;
|
|
22
22
|
};
|
|
23
23
|
export type RegistrationInitialSessionCommit = {
|
|
24
24
|
readonly kind: 'uncommitted';
|
|
@@ -44,8 +44,6 @@ export type { InMemoryRouterApiRuntimeSnapshotConsumer, RouterApiRuntimeSnapshot
|
|
|
44
44
|
export { createInMemoryRouterApiRuntimeSnapshotConsumer, validateRuntimeSnapshotExpectation, } from './framework/runtimeSnapshotConsumer';
|
|
45
45
|
export { extractBearerCredential, extractRouterApiEnvironmentId, resolveSourceIpFromFetchHeaders, } from './auth/routerApiKeyAuth';
|
|
46
46
|
export { createCloudflareRouter } from './cloudflare/runtime/createCloudflareRouter';
|
|
47
|
-
export type { SelfHostedCloudflareSigningWorkerFactoryInput } from './cloudflare/runtime/createSelfHostedCloudflareSigningWorker';
|
|
48
|
-
export { createSelfHostedCloudflareSigningRouter, createSelfHostedCloudflareSigningWorker, } from './cloudflare/runtime/createSelfHostedCloudflareSigningWorker';
|
|
49
47
|
export { CloudflareDurableObjectVersionedJsonRecordStore, CloudflareVersionedJsonRecordStoreError, createCloudflareDurableObjectVersionedJsonRecordStore, } from './cloudflare/durableObjects/versionedJsonRecordStore';
|
|
50
48
|
export type { CloudflareVersionedJsonRecordStoreOptions } from './cloudflare/durableObjects/versionedJsonRecordStore';
|
|
51
49
|
export type { VersionedJsonObject, VersionedJsonRecordPutResult, VersionedJsonRecordReadResult, VersionedJsonValue, } from './framework/versionedJsonRecordStore';
|
|
@@ -93,37 +93,32 @@ export interface WalletRegistrationReservationAuthority {
|
|
|
93
93
|
})): Promise<ReservationOutcome>;
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
96
|
-
* The local write that makes an established registration active
|
|
97
|
-
*
|
|
96
|
+
* The local write that makes an established registration active and records
|
|
97
|
+
* its directory publication as pending. It commits in the batch of the record
|
|
98
98
|
* that completes the registration operation, or it does not commit.
|
|
99
99
|
*/
|
|
100
100
|
export type RegistrationActivationWrite = {
|
|
101
101
|
readonly statements: readonly D1PreparedStatementLike[];
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
readonly
|
|
107
|
-
readonly code?: never;
|
|
108
|
-
readonly message?: never;
|
|
109
|
-
} | {
|
|
110
|
-
readonly ok: false;
|
|
111
|
-
readonly code: string;
|
|
112
|
-
readonly message: string;
|
|
113
|
-
readonly activation?: never;
|
|
102
|
+
/**
|
|
103
|
+
* Sends the pending directory publication. Call it only after the statements
|
|
104
|
+
* commit. It never throws: a failed delivery stays pending for the next attempt.
|
|
105
|
+
*/
|
|
106
|
+
readonly publish: () => Promise<void>;
|
|
114
107
|
};
|
|
115
108
|
/** The registration authority at the wallet's home, which owns the local activation. */
|
|
116
109
|
export interface WalletRegistrationHomeAuthority extends Pick<WalletRegistrationReservationAuthority, 'reserve' | 'admitHome'> {
|
|
117
110
|
/**
|
|
118
|
-
*
|
|
119
|
-
*
|
|
111
|
+
* Prepares the activation of the committed registration decision with its
|
|
112
|
+
* pending directory publication. None when an earlier completion already
|
|
113
|
+
* activated the registration. The caller commits the activation with its
|
|
114
|
+
* completion record, then publishes.
|
|
120
115
|
*/
|
|
121
|
-
|
|
116
|
+
prepareEstablished(input: {
|
|
122
117
|
readonly registration: CommittedWalletRegistration;
|
|
123
118
|
readonly session: WalletSessionLocatorPublication & {
|
|
124
119
|
readonly kind: 'credential';
|
|
125
120
|
};
|
|
126
|
-
}):
|
|
121
|
+
}): RegistrationActivationWrite | null;
|
|
127
122
|
/** Fixes a definitive cancellation, publishes it, and retires the local home. */
|
|
128
123
|
cancel(input: {
|
|
129
124
|
readonly ceremonyId: string;
|