@tinycloud/node-sdk 2.11.0-beta.1 → 2.11.0-beta.10

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.
@@ -1,4 +1,4 @@
1
- import { ISessionStorage, PersistedSessionData, AutoSignStrategy, AutoRejectStrategy, CallbackStrategy, IUserAuthorization, ISigner, ISpaceCreationHandler, LocalNodeIdentityStore, IWasmBindings, ISessionManager, SiweConfig, Manifest, ComposedManifestRequest, ClientSession, TinyCloudSession, Extension, SignRequest, SignInOptions, Delegation, DelegatedResource, PermissionEntry, TelemetryConfig, IKVService, ISQLService, IDuckDbService, IHooksService, CreateOwnerDelegationParams as CreateOwnerDelegationParams$1, OwnerDelegationReceipt as OwnerDelegationReceipt$1, INotificationHandler, IENSResolver, AccountService, RegisterOwnerSharePolicyParams, OwnerSharePolicyRegistrationReceipt, ShareDeliveryAuthorizationReceipt, IDataVaultService, IEncryptionService, NetworkDescriptor, ISecretsService, ICapabilityKeyRegistry, DelegationManager, ISpaceService, ISpace, ISharingService, CreateDelegationParams, DelegationResult, DelegationRevocationReceipt, DelegationStatus, ResolvedDelegate, KeyProvider, JWK } from '@tinycloud/sdk-core';
1
+ import { ISessionStorage, PersistedSessionData, AutoSignStrategy, AutoRejectStrategy, CallbackStrategy, IUserAuthorization, ISigner, ISpaceCreationHandler, LocalNodeIdentityStore, IWasmBindings, ISessionManager, SiweConfig, Manifest, ComposedManifestRequest, ClientSession, TinyCloudSession, Extension, SignRequest, SignInOptions, CapabilityPresentationEnvelopeV1, Delegation, DelegatedResource, PermissionEntry, TelemetryConfig, IKVService, ISQLService, IDuckDbService, IHooksService, CreateOwnerDelegationParams as CreateOwnerDelegationParams$1, OwnerDelegationReceipt as OwnerDelegationReceipt$1, INotificationHandler, IENSResolver, AccountService, InvokeAnyFunction as InvokeAnyFunction$1, RegisterOwnerSharePolicyParams, OwnerSharePolicyRegistrationReceipt, ShareDeliveryAuthorizationReceipt, IDataVaultService, IEncryptionService, NetworkDescriptor, ISecretsService, ICapabilityKeyRegistry, DelegationManager, ISpaceService, ISpace, ISharingService, CreateDelegationParams, DelegationResult, DelegationRevocationReceipt, DelegationStatus, ResolvedDelegate, KeyProvider, JWK } from '@tinycloud/sdk-core';
2
2
  import { EventEmitter } from 'events';
3
3
  import { InvokeFunction, InvokeAnyFunction } from '@tinycloud/sdk-services';
4
4
 
@@ -195,9 +195,9 @@ interface NodeUserAuthorizationConfig {
195
195
  tinycloudRegistryUrl?: string | null;
196
196
  /** Fallback TinyCloud hosts. Default: hosted TinyCloud node. */
197
197
  tinycloudFallbackHosts?: string[] | null;
198
- /** Probe for a locally-running TinyCloud node before registry/fallback resolution. Default: true. */
198
+ /** Probe configured/registered local nodes before registry/fallback resolution. Default: true. */
199
199
  autoDiscoverLocalNode?: boolean;
200
- /** Local loopback node URL to probe. Default: http://127.0.0.1:8000. */
200
+ /** Local loopback node URL to probe. Omit to avoid probing loopback. */
201
201
  localNodeUrl?: string;
202
202
  /** Known `*.local.tinycloud.link` subdomain name, probed directly. */
203
203
  localLinkName?: string;
@@ -319,6 +319,12 @@ declare class NodeUserAuthorization implements IUserAuthorization {
319
319
  private _address?;
320
320
  private _chainId?;
321
321
  private _nodeFeatures;
322
+ /**
323
+ * `nodeId` from the `GET /info` performed during sign-in/restore, tagged with
324
+ * the host it came from. Callers that need the node DID (encryption-network
325
+ * admin invocations) reuse this instead of re-fetching `/info`.
326
+ */
327
+ private _nodeInfoIdentity?;
322
328
  private _lastActivationSkippedSpaceIds;
323
329
  constructor(config: NodeUserAuthorizationConfig);
324
330
  /**
@@ -387,6 +393,13 @@ declare class NodeUserAuthorization implements IUserAuthorization {
387
393
  private requireTinyCloudHosts;
388
394
  private get primaryTinyCloudHost();
389
395
  get nodeFeatures(): string[];
396
+ /**
397
+ * The node DID reported by `GET /info` for `host`, if the sign-in (or
398
+ * restore) that populated it targeted that same host. Returns `undefined`
399
+ * for any other host, and for nodes whose `/info` omits `nodeId`, so callers
400
+ * fall back to fetching it themselves rather than using a foreign node's DID.
401
+ */
402
+ nodeIdForHost(host: string): string | undefined;
390
403
  get lastActivationSkippedSpaceIds(): string[];
391
404
  /**
392
405
  * Compute the `abilities` map the WASM `prepareSession` call should
@@ -533,6 +546,153 @@ declare class NodeUserAuthorization implements IUserAuthorization {
533
546
  spaceId: string;
534
547
  verificationMethod: string;
535
548
  }, signature: string, keyId: string, jwk: Record<string, unknown>): Promise<ClientSession>;
549
+ /**
550
+ * End-to-end sign-in via OpenKey `authorizeTinyCloud()` (Sol CRITICAL-4).
551
+ *
552
+ * This is the production entry point that wires
553
+ * {@link prepareSessionForSigning} → OpenKey `authorizeTinyCloud()` →
554
+ * {@link signInWithOpenKeyResult} into one call. Consumers pass in a
555
+ * caller-provided `authorizeFn` (typically a thin wrapper around
556
+ * `openkey.authorizeTinyCloud()`) so this method has no direct
557
+ * dependency on the OpenKey SDK — it works with any transport that
558
+ * conforms to the versioned protocol.
559
+ *
560
+ * The `authorizeFn` MUST:
561
+ * 1. Send the prepared SIWE bytes to OpenKey.
562
+ * 2. Return the exact `TinyCloudAuthorizationResultV1` shape (with
563
+ * `signedMessage` — the bytes the signature actually verifies
564
+ * against — plus `selectedActionKeys` and `permissions`).
565
+ *
566
+ * NodeUserAuthorization then completes the session with `signedMessage`
567
+ * (never the prepared bytes), verifying the signature, the immutable
568
+ * SIWE fields, and every subset invariant enforced by
569
+ * {@link signInWithOpenKeyResult}. This preserves the exact-byte
570
+ * guarantee: if the user did NOT narrow, the returned `signedMessage`
571
+ * equals the prepared SIWE byte-for-byte; if the user narrowed, only
572
+ * the ReCap block differs and every immutable header field survives.
573
+ *
574
+ * Legacy exact-byte {@link signIn} callers are unaffected — this method
575
+ * is opt-in.
576
+ *
577
+ * @param authorizeFn Callback that invokes the versioned OpenKey
578
+ * `authorizeTinyCloud()` protocol and returns the result. Receives
579
+ * the prepared SIWE bytes plus a `host` hint the widget should bind
580
+ * into its /authorize-sign-prepare context.
581
+ * @param options Optional overrides for the OpenKey request.
582
+ */
583
+ signInWithOpenKey(authorizeFn: (input: {
584
+ protocolVersion: 1;
585
+ siwe: string;
586
+ jwk: Record<string, unknown>;
587
+ host?: string;
588
+ /**
589
+ * Sol MAJOR-3: OpenKey key ID (managed or external key) to sign
590
+ * with. When omitted, the OpenKey SDK falls back to the last
591
+ * connected key. Callers who want to bind the flow to a specific
592
+ * OpenKey key can override via options.openkeyKeyId; otherwise the
593
+ * bridge relies on the SDK's connected-key state.
594
+ */
595
+ keyId?: string;
596
+ /**
597
+ * Optional presentation envelope forwarded to the OpenKey widget.
598
+ * Built from this instance's `_manifest` when set. Display-only —
599
+ * the widget/server MUST NOT let it expand authority. The envelope
600
+ * carries `manifests` payloads plus a stable SHA-256 digest so the
601
+ * OpenKey server can origin-bind the browser origin against the
602
+ * app's well-known manifest.
603
+ */
604
+ presentation?: CapabilityPresentationEnvelopeV1;
605
+ }) => Promise<{
606
+ protocolVersion: 1;
607
+ address: string;
608
+ signature: string;
609
+ signedMessage: string;
610
+ selectedActionKeys: string[];
611
+ permissions: Array<{
612
+ service: string;
613
+ space: string;
614
+ path: string;
615
+ actions: string[];
616
+ }>;
617
+ }>, options?: {
618
+ host?: string;
619
+ openkeyKeyId?: string;
620
+ /**
621
+ * Optional caller-supplied reason string forwarded in the
622
+ * presentation envelope. Rendered as caller-supplied (never
623
+ * verified) in the widget.
624
+ */
625
+ reason?: string;
626
+ }): Promise<ClientSession>;
627
+ /**
628
+ * Build a `CapabilityPresentationEnvelopeV1` from `this._manifest`. The
629
+ * envelope is display-only — the OpenKey widget renders it under an
630
+ * honest trust label, and the server /authorize-sign-prepare route
631
+ * decides whether to upgrade the label to `origin-bound` by fetching
632
+ * the well-known manifest and comparing its digest to
633
+ * `manifestDigest`.
634
+ *
635
+ * Returns `undefined` when no manifest is set — the widget renders as
636
+ * "no manifest supplied" (unsigned).
637
+ *
638
+ * The digest is a deterministic SHA-256 over canonical JSON of the
639
+ * first manifest payload; OpenKey parses the fetched well-known manifest
640
+ * and applies the same canonicalization before comparing digests.
641
+ */
642
+ private buildPresentationEnvelope;
643
+ /**
644
+ * Complete sign-in with a versioned OpenKey authorization result.
645
+ *
646
+ * Where `signInWithPreparedSession` completes with a signature over the
647
+ * ORIGINAL prepared SIWE, this method completes with the SIWE bytes the
648
+ * OpenKey widget actually presented and signed (`signedMessage`). It
649
+ * exists because the versioned authorizeTinyCloud protocol lets the user
650
+ * narrow capabilities; the returned bytes may differ from the original
651
+ * request and are the only ones the signature actually verifies against.
652
+ *
653
+ * The `result` parameter is validated at the trust boundary via
654
+ * `validateAuthorizationResultV1` (in sdk-core). Callers should validate
655
+ * BEFORE calling this method so unknown/missing fields are rejected
656
+ * before any session state is created.
657
+ *
658
+ * Validation performed here (defence-in-depth: even a "valid" v1 payload
659
+ * must clear these checks before any session state is created):
660
+ * 1. `result.address` matches the local signer's address.
661
+ * 2. `result.signature` recovers to `result.address` when verified against
662
+ * `result.signedMessage`.
663
+ * 3. Every immutable SIWE header field (domain, address, URI, version,
664
+ * chainId, nonce, issuedAt) in the original prepared SIWE is preserved
665
+ * byte-for-byte in `result.signedMessage`. `statement` is NOT in this
666
+ * list because the WASM renders it from the ReCap contents; it MUST
667
+ * change when the ReCap is narrowed.
668
+ * 4. Every capability in `result.signedMessage`'s ReCap block was present
669
+ * in the original prepared SIWE — narrowing OK, broadening rejected.
670
+ * 5. Every `result.selectedActionKeys` entry corresponds to a
671
+ * (resource, action) pair in the returned SIWE.
672
+ */
673
+ signInWithOpenKeyResult(result: {
674
+ protocolVersion: 1;
675
+ address: string;
676
+ signature: string;
677
+ signedMessage: string;
678
+ selectedActionKeys: string[];
679
+ permissions: Array<{
680
+ service: string;
681
+ space: string;
682
+ path: string;
683
+ actions: string[];
684
+ }>;
685
+ }, prepared: {
686
+ /**
687
+ * The ORIGINAL SIWE the SDK produced via {@link prepareSessionForSigning}.
688
+ * Used as the source-of-truth reference for immutable-header and
689
+ * capability-subset comparison against `result.signedMessage`.
690
+ */
691
+ siwe: string;
692
+ jwk: Record<string, unknown>;
693
+ spaceId: string;
694
+ verificationMethod: string;
695
+ }, keyId: string, jwk: Record<string, unknown>): Promise<ClientSession>;
536
696
  /**
537
697
  * Clear persisted session data.
538
698
  */
@@ -887,9 +1047,9 @@ interface TinyCloudNodeConfig {
887
1047
  tinycloudRegistryUrl?: string | null;
888
1048
  /** Fallback TinyCloud hosts. Default: hosted TinyCloud node. */
889
1049
  tinycloudFallbackHosts?: string[] | null;
890
- /** Probe for a locally-running TinyCloud node before registry/fallback resolution. Default: true. */
1050
+ /** Probe configured/registered local nodes before registry/fallback resolution. Default: true. */
891
1051
  autoDiscoverLocalNode?: boolean;
892
- /** Local loopback node URL to probe. Default: http://127.0.0.1:8000. */
1052
+ /** Local loopback node URL to probe. Omit to avoid probing loopback. */
893
1053
  localNodeUrl?: string;
894
1054
  /** Known `*.local.tinycloud.link` subdomain name, probed directly. */
895
1055
  localLinkName?: string;
@@ -987,6 +1147,21 @@ interface RuntimePermissionGrantOptions {
987
1147
  /** Override expiry. ms-format string ("7d", "1h") or raw milliseconds. */
988
1148
  expiry?: string | number;
989
1149
  }
1150
+ interface EnsureEncryptionNetworkOptions {
1151
+ /**
1152
+ * Skip the `GET /encryption/networks/{id}` existence probe and go straight
1153
+ * to the create.
1154
+ *
1155
+ * The probe pays for itself only when the network already exists. On a
1156
+ * freshly bootstrapped account it is a guaranteed 404, so it costs a round
1157
+ * trip on the cold sign-in path and saves nothing. Creating without it is
1158
+ * safe: the server answers `409 Conflict` if the network is already there,
1159
+ * which {@link TinyCloudNode.createEncryptionNetwork} resolves by reading the
1160
+ * existing descriptor. Set this only when the caller knows the account was
1161
+ * just provisioned.
1162
+ */
1163
+ assumeMissing?: boolean;
1164
+ }
990
1165
  /**
991
1166
  * High-level TinyCloud API for Node.js environments.
992
1167
  *
@@ -998,6 +1173,23 @@ interface NodeDefaults {
998
1173
  createWasmBindings: () => IWasmBindings;
999
1174
  createSigner: (privateKey: string, chainId?: number) => ISigner;
1000
1175
  }
1176
+ /**
1177
+ * A bootstrap step that COMPLETED but did so in a degraded way — e.g. a KV
1178
+ * batch write that failed ambiguously and was recovered by per-space
1179
+ * reconciliation. Structured (not prose) so callers can branch on `kind` and
1180
+ * `code` without parsing messages (TC-361).
1181
+ */
1182
+ interface BootstrapWarning {
1183
+ /** The BootstrapStep.id that degraded, e.g. "account:seed-spaces"
1184
+ * (BootstrapStepBase.id — packages/bootstrap/src/index.ts:642-645). */
1185
+ stepId: string;
1186
+ /** What kind of degradation. Additive union; one member today. */
1187
+ kind: "batch-write-reconciled";
1188
+ /** ServiceError.code of the underlying failure that was recovered from. */
1189
+ code: string;
1190
+ /** Human-readable detail. Diagnostics only — never parse this. */
1191
+ message: string;
1192
+ }
1001
1193
  declare class TinyCloudNode {
1002
1194
  /** @internal Registered by importing @tinycloud/node-sdk (not /core) */
1003
1195
  private static nodeDefaults?;
@@ -1044,6 +1236,12 @@ declare class TinyCloudNode {
1044
1236
  * so this avoids re-parsing the recap on every registration.
1045
1237
  */
1046
1238
  private _recapOperationsCache?;
1239
+ /**
1240
+ * Owned space ids this sign-in has already confirmed are hosted. Consulted by
1241
+ * {@link ensureOwnedSpaceHostedById}; cleared on every {@link signIn} because
1242
+ * hosting is confirmed against the session that was active at the time.
1243
+ */
1244
+ private readonly confirmedHostedSpaceIds;
1047
1245
  /**
1048
1246
  * TinyCloudSession captured by {@link restoreSession} when there's no
1049
1247
  * auth-layer signer available (session-only mode used by OpenKey-backed
@@ -1051,6 +1249,7 @@ declare class TinyCloudNode {
1051
1249
  * {@link currentTinyCloudSession} as a fallback for `auth.tinyCloudSession`.
1052
1250
  */
1053
1251
  private _restoredTcSession?;
1252
+ private _activeServiceSession?;
1054
1253
  /**
1055
1254
  * True when the last signIn() detected an interactive signer and skipped
1056
1255
  * client-side bootstrap. Apps can read this to know whether bootstrap was
@@ -1061,7 +1260,10 @@ declare class TinyCloudNode {
1061
1260
  * Outcome of the last signIn()'s account-bootstrap attempt. `skipped` is
1062
1261
  * true when bootstrap did not complete (interactive signer, auto-sign
1063
1262
  * denied, or a bootstrap step failed); `reason` carries the cause so apps
1064
- * can surface a "finish account setup" call-to-action.
1263
+ * can surface a "finish account setup" call-to-action. `warnings` is
1264
+ * present when bootstrap completed, but one or more steps recovered from
1265
+ * an ambiguous failure (e.g. a KV batch write reconciled via per-space
1266
+ * fallback) — clean vs. recovered runs are otherwise byte-identical.
1065
1267
  */
1066
1268
  private _bootstrapStatus;
1067
1269
  /** Whether the last signIn() skipped client-side bootstrap because the
@@ -1071,6 +1273,7 @@ declare class TinyCloudNode {
1071
1273
  get bootstrapStatus(): {
1072
1274
  skipped: boolean;
1073
1275
  reason?: string;
1276
+ warnings?: BootstrapWarning[];
1074
1277
  };
1075
1278
  private get nodeFeatures();
1076
1279
  /** SIWE domain — uses config override or defaults to app.tinycloud.xyz */
@@ -1252,6 +1455,22 @@ declare class TinyCloudNode {
1252
1455
  private withAccountRegistryRetry;
1253
1456
  private requestedEncryptionNetworkIds;
1254
1457
  private ensureRequestedEncryptionNetworks;
1458
+ /**
1459
+ * Ensure one of this user's owned spaces is hosted, at most once per space
1460
+ * per sign-in.
1461
+ *
1462
+ * Account bootstrap funnels six calls through here (via
1463
+ * `AccountService.ensureAccountSpaceHosted`), and each one re-submits
1464
+ * `activateSessionWithHost` with the *primary* session. That session's recap
1465
+ * covers only `default` and `secrets`, so the account space appears in
1466
+ * neither `activated` nor `skipped` and the guard below returns immediately
1467
+ * — the repeat calls cannot change the outcome, they only cost round trips.
1468
+ *
1469
+ * The memo is per sign-in ({@link confirmedHostedSpaceIds} is cleared in
1470
+ * `signIn`) and only records confirmed successes. A wrong skip is
1471
+ * self-revealing: the next write to the space fails immediately and loudly
1472
+ * with `404 Space not found`.
1473
+ */
1255
1474
  private ensureOwnedSpaceHostedById;
1256
1475
  /**
1257
1476
  * Host one of this user's owned spaces by name (e.g. `"applications"`).
@@ -1399,6 +1618,16 @@ declare class TinyCloudNode {
1399
1618
  * rehydration set by {@link restoreSession} (session-only mode).
1400
1619
  */
1401
1620
  private currentTinyCloudSession;
1621
+ /**
1622
+ * Mint a multi-capability invocation through the established session key.
1623
+ * Callers receive only the signed headers; session key material remains
1624
+ * owned by the session manager and is never part of the caller contract.
1625
+ */
1626
+ invokeAny(entries: Parameters<InvokeAnyFunction$1>[1], facts?: Parameters<InvokeAnyFunction$1>[2]): ReturnType<InvokeAnyFunction$1>;
1627
+ /** Sign protocol bytes with the established in-memory session key. */
1628
+ signSessionBytes(bytes: Uint8Array): Promise<Uint8Array>;
1629
+ /** Bind a session-signed invocation to the canonical service audience. */
1630
+ bindInvocationAudience(authorization: string, audience: string): Promise<string>;
1402
1631
  /**
1403
1632
  * Connect a wallet to upgrade from session-only mode to wallet mode.
1404
1633
  *
@@ -1462,6 +1691,14 @@ declare class TinyCloudNode {
1462
1691
  */
1463
1692
  private requireEncryptionSession;
1464
1693
  private createEncryptionCrypto;
1694
+ /**
1695
+ * The node DID for {@link config.host}.
1696
+ *
1697
+ * Sign-in already performs `GET /info` for the protocol-version check, and
1698
+ * that response carries `nodeId`, so reuse it rather than fetching `/info` a
1699
+ * second time. Only a value recorded for this exact host qualifies; older
1700
+ * nodes that omit `nodeId` fall through to the fetch.
1701
+ */
1465
1702
  private fetchNodeId;
1466
1703
  private signRawNetworkAuthorization;
1467
1704
  private fetchEncryptionNetworkAt;
@@ -1518,6 +1755,7 @@ declare class TinyCloudNode {
1518
1755
  readonly recipientEmail: string;
1519
1756
  readonly shareUrl: string;
1520
1757
  readonly documentName: string;
1758
+ readonly idempotencyKey: string;
1521
1759
  readonly expiresAt: string;
1522
1760
  /** The enrolled receipt key from the node trust bundle. */
1523
1761
  readonly nodeProof: {
@@ -1586,7 +1824,13 @@ declare class TinyCloudNode {
1586
1824
  get encryption(): IEncryptionService;
1587
1825
  getEncryptionNetwork(nameOrNetworkId?: string): Promise<NetworkDescriptor | null>;
1588
1826
  createEncryptionNetwork(name?: string): Promise<NetworkDescriptor>;
1589
- ensureEncryptionNetwork(nameOrNetworkId?: string): Promise<NetworkDescriptor>;
1827
+ /**
1828
+ * Ensure an encryption network exists, creating it if necessary.
1829
+ *
1830
+ * @param nameOrNetworkId - Network name or full `urn:tinycloud:encryption:` id.
1831
+ * @param options - See {@link EnsureEncryptionNetworkOptions}.
1832
+ */
1833
+ ensureEncryptionNetwork(nameOrNetworkId?: string, options?: EnsureEncryptionNetworkOptions): Promise<NetworkDescriptor>;
1590
1834
  /**
1591
1835
  * App-facing secrets API backed by the `secrets` space vault.
1592
1836
  */
@@ -2168,4 +2412,4 @@ declare class WasmKeyProvider implements KeyProvider {
2168
2412
  */
2169
2413
  declare function createWasmKeyProvider(sessionManager: SessionManagerWithListing): WasmKeyProvider;
2170
2414
 
2171
- export { type AuthDelegationArtifact as A, type CreateOwnerDelegationParams as C, type DelegateToOptions as D, FileSessionStorage as F, MemorySessionStorage as M, type NodeEventEmitterStrategy as N, type OwnerDelegationReceipt as O, type PortableDelegation as P, type RestorableSession as R, type SecretPermissionHint as S, TinyCloudNode as T, UnsupportedSessionRestoreError as U, type ValidatedRuntimeDelegation as V, WasmKeyProvider as W, type AuthRequestArtifact as a, type DelegateToResult as b, DelegatedAccess as c, type DelegationAuthority as d, NodeUserAuthorization as e, type NodeUserAuthorizationConfig as f, type RuntimeDelegationActivator as g, type RuntimePermissionGrantOptions as h, type SecretReadInput as i, type SecretReadResult as j, type SignStrategy as k, type TinyCloudNodeConfig as l, type WasmKeyProviderConfig as m, activateValidatedRuntimeDelegation as n, createWasmKeyProvider as o, defaultSignStrategy as p, deserializeDelegation as q, grantAuthRequest as r, serializeDelegation as s };
2415
+ export { type AuthDelegationArtifact as A, type BootstrapWarning as B, type CreateOwnerDelegationParams as C, type DelegateToOptions as D, type EnsureEncryptionNetworkOptions as E, FileSessionStorage as F, MemorySessionStorage as M, type NodeEventEmitterStrategy as N, type OwnerDelegationReceipt as O, type PortableDelegation as P, type RestorableSession as R, type SecretPermissionHint as S, TinyCloudNode as T, UnsupportedSessionRestoreError as U, type ValidatedRuntimeDelegation as V, WasmKeyProvider as W, type AuthRequestArtifact as a, type DelegateToResult as b, DelegatedAccess as c, type DelegationAuthority as d, NodeUserAuthorization as e, type NodeUserAuthorizationConfig as f, type RuntimeDelegationActivator as g, type RuntimePermissionGrantOptions as h, type SecretReadInput as i, type SecretReadResult as j, type SignStrategy as k, type TinyCloudNodeConfig as l, type WasmKeyProviderConfig as m, activateValidatedRuntimeDelegation as n, createWasmKeyProvider as o, defaultSignStrategy as p, deserializeDelegation as q, grantAuthRequest as r, serializeDelegation as s };