@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.
Files changed (45) hide show
  1. package/artifact-manifest.json +32 -27
  2. package/cloudflare-router-ab/build/deriver-a/build-stamp.json +1 -1
  3. package/cloudflare-router-ab/build/deriver-a/index_bg.wasm +0 -0
  4. package/cloudflare-router-ab/build/deriver-b/build-stamp.json +1 -1
  5. package/cloudflare-router-ab/build/deriver-b/index_bg.wasm +0 -0
  6. package/cloudflare-router-ab/build/router/build-stamp.json +1 -1
  7. package/cloudflare-router-ab/build/router/index_bg.wasm +0 -0
  8. package/cloudflare-router-ab/build/signing-worker/build-stamp.json +1 -1
  9. package/cloudflare-router-ab/build/signing-worker/index.js +2 -2
  10. package/cloudflare-router-ab/build/signing-worker/index_bg.wasm +0 -0
  11. package/cloudflare-router-ab/build/tenant-root-control-plane/build-stamp.json +1 -1
  12. package/cloudflare-router-ab/build/tenant-root-control-plane/index.js +2 -2
  13. package/cloudflare-router-ab/build/tenant-root-control-plane/index_bg.wasm +0 -0
  14. package/cloudflare-router-ab/scripts/start-local-role-workers.mjs +3 -0
  15. package/cloudflare-router-ab/scripts/start-local-wallet-system.mjs +3 -0
  16. package/dist/esm/cloud-host.js +2 -3
  17. package/dist/esm/core/ThresholdService/kv.js +1 -218
  18. package/dist/esm/index.js +3 -3
  19. package/dist/esm/local-hosted-wallet-gateway-worker.js +4 -2
  20. package/dist/esm/localHostedWalletGatewayHandler.js +20 -7
  21. package/dist/esm/router/cloudflare/d1/registration/d1WalletExecutionAuthority.js +109 -14
  22. package/dist/esm/router/cloudflare/d1/registration/d1WalletRegistrationService.js +16 -2
  23. package/dist/esm/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.js +7 -12
  24. package/dist/esm/router/cloudflare-adaptor.js +1 -2
  25. package/dist/esm/router/cloudflare.js +2 -86
  26. package/dist/esm/router/domains/walletRegistration/walletRegistrationRoutes.js +1 -1
  27. package/dist/esm/threshold/session/signingSessionSeal/guards/backends.js +2 -98
  28. package/dist/esm/threshold/session/signingSessionSeal/idempotencyBackends.js +2 -69
  29. package/dist/esm/threshold/session/signingSessionSeal/index.js +3 -3
  30. package/dist/types/wallet-server/src/cloud-host.d.ts +1 -1
  31. package/dist/types/wallet-server/src/core/ThresholdService/kv.d.ts +0 -29
  32. package/dist/types/wallet-server/src/localHostedWalletGatewayHandler.d.ts +2 -0
  33. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletExecutionAuthority.d.ts +22 -2
  34. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/d1WalletRegistrationService.d.ts +1 -1
  35. package/dist/types/wallet-server/src/router/cloudflare/d1/registration/walletRegistrationEstablishedSessionIssuer.d.ts +1 -1
  36. package/dist/types/wallet-server/src/router/cloudflare-adaptor.d.ts +0 -2
  37. package/dist/types/wallet-server/src/router/domains/walletRegistration/walletRegistrationReservation.d.ts +13 -18
  38. package/dist/types/wallet-server/src/router/framework/authServicePort.d.ts +1 -1
  39. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/guards/backends.d.ts +1 -16
  40. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/idempotencyBackends.d.ts +1 -16
  41. package/dist/types/wallet-server/src/threshold/session/signingSessionSeal/index.d.ts +4 -4
  42. package/migrations/d1-signer/0081_registration_directory_publications.sql +26 -0
  43. package/package.json +1 -1
  44. package/dist/esm/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.js +0 -93
  45. package/dist/types/wallet-server/src/router/cloudflare/runtime/createSelfHostedCloudflareSigningWorker.d.ts +0 -23
@@ -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 publishCommittedRegistration(home, committed) {
53
- if (!committed.registration) throw new Error("Registration publication requires a committed registration session");
54
- return home.publishEstablished({
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: published.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 [publication, preparation] = await Promise.allSettled([publishCommittedRegistration(input.homeCompletion, committed), input.onSessionCommitted?.(projectDirectRegistrationSession(authorization, tokens))]);
421
- if (publication.status === "rejected") throw publication.reason;
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: published.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, createSelfHostedCloudflareSigningRouter, createSelfHostedCloudflareSigningWorker, 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 };
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, createSelfHostedCloudflareSigningRouter, createSelfHostedCloudflareSigningWorker, 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 };
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 { createInMemorySigningSessionSealRateLimiter } from "./index.js";
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 { createRedisTcpSigningSessionSealRateLimiter, createUpstashSigningSessionSealRateLimiter, resolveSigningSessionSealRateLimitFromEnv };
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 { RedisTcpClient, UpstashRedisRestClient, redisDel, redisGetJson, redisSetJson } from "../../../core/ThresholdService/kv.js";
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 { createRedisTcpSigningSessionSealIdempotencyStore, createUpstashSigningSessionSealIdempotencyStore, resolveSigningSessionSealIdempotencyFromEnv };
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 { createRedisTcpSigningSessionSealRateLimiter, createUpstashSigningSessionSealRateLimiter, resolveSigningSessionSealRateLimitFromEnv } from "./guards/backends.js";
11
- import { createRedisTcpSigningSessionSealIdempotencyStore, createUpstashSigningSessionSealIdempotencyStore, resolveSigningSessionSealIdempotencyFromEnv } from "./idempotencyBackends.js";
12
- export { authorizeSigningSessionSealRequest, buildSigningSessionSealApplyPath, buildSigningSessionSealRemovePath, composeSigningSessionSealGuards, createInMemorySigningSessionSealIdempotencyStore, createInMemorySigningSessionSealRateLimiter, createPassthroughSigningSessionSealCipherAdapter, createRedisTcpSigningSessionSealIdempotencyStore, createRedisTcpSigningSessionSealRateLimiter, createSigningSessionSealAuditLogger, createSigningSessionSealCipherAdapter, createSigningSessionSealOptions, createSigningSessionSealRateLimitGuard, createSigningSessionSealRoutesOptions, createSigningSessionSealService, createSigningSessionSealShamir3PassCipherAdapter, createUpstashSigningSessionSealIdempotencyStore, createUpstashSigningSessionSealRateLimiter, encodeSigningSessionSealServerLockContext, handleSigningSessionSealRoutes, parseSigningSessionSealApplyBody, parseSigningSessionSealRemoveBody, parseSigningSessionSealRootConfig, resolveSigningSessionSealBasePath, resolveSigningSessionSealIdempotencyFromEnv, resolveSigningSessionSealRateLimitFromEnv, signingSessionSealAuthorizeStatusCode, signingSessionSealStatusCode };
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 { RegistrationEstablishedPublication, WalletExecutionAuthority, WalletRegistrationHomeAuthority, WalletRegistrationReservationAuthority } from '../../../domains/walletRegistration/walletRegistrationReservation';
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
- publishEstablished(input: Parameters<WalletRegistrationHomeAuthority['publishEstablished']>[0]): Promise<RegistrationEstablishedPublication>;
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, 'publishEstablished'>;
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. It follows
97
- * the acknowledged directory write. It commits in the batch of the record
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
- export type RegistrationEstablishedPublication = {
104
- readonly ok: true;
105
- /** None when an earlier completion already activated the registration. */
106
- readonly activation: RegistrationActivationWrite | null;
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
- * Publishes the committed registration decision to its directory and prepares the
119
- * activation. The caller commits the activation with its completion record.
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
- publishEstablished(input: {
116
+ prepareEstablished(input: {
122
117
  readonly registration: CommittedWalletRegistration;
123
118
  readonly session: WalletSessionLocatorPublication & {
124
119
  readonly kind: 'credential';
125
120
  };
126
- }): Promise<RegistrationEstablishedPublication>;
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;