@byok-sdk/cloud 0.3.0 → 0.4.1

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/README.md CHANGED
@@ -4,7 +4,7 @@ Stateless hosted BYOK HTTP handlers and an in-memory reference composition over
4
4
  tenant-first `@byok-sdk/core` ports. It owns device-facing protocol/auth/policy
5
5
  logic but no durable database or object-storage driver.
6
6
 
7
- Pair it with `@byok-sdk/cloud-postgres` for Postgres + R2 production storage.
7
+ Pair it with `@byok-sdk/cloud-dataplane` for Postgres + R2 production storage.
8
8
 
9
9
  Hosted compositions enqueue the distinct toolset offer message explicitly:
10
10
 
@@ -22,6 +22,31 @@ await cloud.enqueueToolsetOffer(tenantId, deviceId, {
22
22
 
23
23
  Unlike the live self-hosted coordinator, this stateless enqueue API cannot
24
24
  infer current device capabilities; the host must route to a device known to
25
- advertise `toolset-selection`.
25
+ advertise `toolset-selection`. `listPresence(tenant)` includes the optional
26
+ `configuredToolsets` reported by each live daemon, so the host can narrow
27
+ candidate devices before enqueue. This is TTL-bounded discovery, not execution
28
+ authority: the daemon still resolves every required ID locally and declines
29
+ fail-closed if its configuration changed.
26
30
 
27
- MIT licensed. Node.js 22.19.0 or newer.
31
+ Reading a task's outcome goes through the same first terminal fact twice:
32
+ `readTerminalReceipt(tenant, taskId)` returns the stored envelope raw, and
33
+ `readTaskResult(tenant, taskId)` decodes that same receipt into a typed
34
+ `TerminalResult` — the state, plus `summary`/`sessionRef`/`artifactRefs`/
35
+ `document` on a completion or `reason`/`retryable` on a failure — projected
36
+ verbatim with no re-validation:
37
+
38
+ ```ts
39
+ const result = await cloud.readTaskResult(tenantId, taskId);
40
+ if (result === undefined) {
41
+ // No terminal fact yet. A declined task records none — read the attempt
42
+ // status with `readTaskAttempt(tenant, taskId)` for that case.
43
+ } else if (result.state === 'failed' && result.retryable) {
44
+ // re-offer
45
+ }
46
+ ```
47
+
48
+ `document` is absent, never null, when the daemon sent none; a receipt whose
49
+ stored body is not a terminal envelope throws `ByokCloudError` rather than
50
+ returning a best-effort shape.
51
+
52
+ MIT licensed. Node.js 22.22.0 or newer.
package/dist/cloud.d.ts CHANGED
@@ -20,6 +20,7 @@ import type { TokenSigner } from './auth/tokens';
20
20
  import type { CloudCrypto } from './crypto/port';
21
21
  import { type RouteDescriptor } from './router/registry';
22
22
  import type { BlobContentProxy, CloudStores, DeviceRecord, PairingCodeInfo, RequestReceipt, TaskAttempt } from './stores/ports';
23
+ import { type TerminalResult } from './terminal-result';
23
24
  import type { TruthCommitter, TruthObjectDownloads } from './truth/contract';
24
25
  /** Matches the reference server's ceiling (§7). */
25
26
  export declare const DEFAULT_MAX_BLOB_SIZE_BYTES: number;
@@ -127,6 +128,19 @@ export interface ByokCloud {
127
128
  readTaskAttempt(tenant: TenantId, taskId: string): Promise<TaskAttempt | undefined>;
128
129
  /** The recorded terminal for a task — the first one, re-encoded canonically under the frozen v1 codec (see `recordTerminal`, `inbound.ts`: the stored body is `encodeEnvelope` of the zod-parsed envelope, not the device's original byte sequence). */
129
130
  readTerminalReceipt(tenant: TenantId, taskId: string): Promise<RequestReceipt | undefined>;
131
+ /**
132
+ * Host control plane: the same first terminal, decoded into the typed read
133
+ * model ({@link TerminalResult}) so a host reads result fields, not envelope
134
+ * prose. `undefined` ONLY means no terminal fact is recorded yet:
135
+ * first-terminal-wins is inherited from the receipt store
136
+ * ({@link ByokCloud.readTerminalReceipt} reads the same row), and a declined
137
+ * task records no terminal at all — use {@link ByokCloud.readTaskAttempt}
138
+ * for that attempt status. An absent `document` covers both a legacy
139
+ * pre-`result-document` daemon build and a daemon with no `resultDocument`
140
+ * extractor; a receipt whose body is not a terminal envelope throws rather
141
+ * than returning a best-effort shape.
142
+ */
143
+ readTaskResult(tenant: TenantId, taskId: string): Promise<TerminalResult | undefined>;
130
144
  listDevices(tenant: TenantId): Promise<readonly DeviceRecord[]>;
131
145
  revokeDevice(tenant: TenantId, deviceId: string): Promise<void>;
132
146
  /** Host control plane: create a board row from explicit producer labels. */
package/dist/errors.d.ts CHANGED
@@ -32,6 +32,13 @@ export declare const CLOUD_ERROR_CODES: {
32
32
  readonly capability_over_declared: 'capability_over_declared';
33
33
  /** Host-supplied board labels or coordination input exceeded the explicit contract. */
34
34
  readonly coordination_input_invalid: 'coordination_input_invalid';
35
+ /**
36
+ * A terminal receipt whose stored body is not a terminal envelope — either
37
+ * undecodable or a non-terminal type. Whatever wrote that row broke the
38
+ * receipt-store contract, so the typed read model fails closed instead of
39
+ * projecting a best-effort shape.
40
+ */
41
+ readonly terminal_receipt_unreadable: 'terminal_receipt_unreadable';
35
42
  /** A progress/activity batch exceeded the configured event or byte ceiling. */
36
43
  readonly activity_batch_too_large: 'activity_batch_too_large';
37
44
  };
package/dist/index.d.ts CHANGED
@@ -40,6 +40,8 @@ export { createWebCrypto } from './crypto/web-crypto';
40
40
  export type { CloudCrypto } from './crypto/port';
41
41
  export { handleInboundEnvelope, terminalReceiptKey } from './inbound';
42
42
  export type { InboundOutcome } from './inbound';
43
+ export { projectTerminalResult } from './terminal-result';
44
+ export type { TerminalResult } from './terminal-result';
43
45
  export { tenantStoresFor } from './tenant-stores';
44
46
  export type { TenantBoundActivity, TenantBoundBoard, CloudRootStores, TenantBoundBlobs, TenantBoundDedup, TenantBoundDevices, TenantBoundMailbox, TenantBoundPresence, TenantBoundQuota, TenantBoundRateLimiter, TenantBoundReceipts, TenantBoundTaskAttempts, TenantStores, } from './tenant-stores';
45
47
  export { DEFAULT_ACTIVITY_BOUNDS, DEFAULT_ACTIVITY_CAPACITY, DEFAULT_ACTIVITY_MAX_BYTES, DEFAULT_ACTIVITY_MAX_EVENTS, DEFAULT_ACTIVITY_TTL_MS, DEFAULT_BOARD_CHANNEL_MAX_BYTES, DEFAULT_BOARD_TITLE_MAX_BYTES, DEFAULT_PRESENCE_DETAIL_MAX_BYTES, DEFAULT_PRESENCE_MINIMUM_INTERVAL_MS, DEFAULT_PRESENCE_TTL_MS, } from './coordination';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { BOARD_STATUSES, PRESENCE_LEVELS, CapabilityDeclarationSchema, NONCE_SIGNING_DOMAIN, hasCapability, isTenantId, tenantId, principalTenant, parseDeviceProofEnvelope, deviceProofSigningInput, parseCapabilityDeclaration, ByokCoreError, tenantKey, createInMemoryCoreStores, assertCapability, contentHash, isCoreConflictError, isCoreError, DEVICE_PROOF_HEADER, TRUTH_RECORD_KINDS, STORAGE_ERROR_CODES, STORAGE_ERROR_HTTP_STATUS } from '@byok-sdk/core';
2
2
  export { DEVICE_PROOF_HEADER, NONCE_SIGNING_DOMAIN, isTenantId, tenantId } from '@byok-sdk/core';
3
- import { AgentEventOrUnknownSchema, DAEMON_TO_SERVER_TYPES, encodeEnvelope, BYOK_PAIR_PATH, BYOK_CHALLENGE_PATH, BYOK_TOKEN_PATH, BYOK_CAPABILITIES_PATH, BYOK_EVENTS_PATH, BYOK_MESSAGES_PATH, BYOK_BOARD_PATH, BYOK_BOARD_CLAIM_ROUTE, BYOK_BOARD_UNCLAIM_ROUTE, BYOK_BOARD_STATUS_ROUTE, BYOK_BOARD_STREAM_PATH, BYOK_PRESENCE_PATH, BYOK_ACTIVITY_PATH, BYOK_RECORDS_PATH, BYOK_RECORD_ROUTE, BYOK_SKILL_PACKS_PATH, BYOK_SKILL_PACK_FILE_ROUTE, BYOK_BLOBS_PATH, BYOK_BLOB_FINALIZE_ROUTE, BYOK_BLOB_URL_ROUTE, BYOK_BLOB_CONTENT_ROUTE, decodeEnvelope, createEnvelope, PairRequestSchema, ChallengeRequestSchema, TokenRequestSchema, MessagesSendRequestSchema, CreateBlobRequestSchema, byokBlobContentPath } from '@byok-sdk/protocol';
3
+ import { ConfiguredToolsetsSchema, AgentEventOrUnknownSchema, DAEMON_TO_SERVER_TYPES, encodeEnvelope, decodeEnvelope, BYOK_PAIR_PATH, BYOK_CHALLENGE_PATH, BYOK_TOKEN_PATH, BYOK_CAPABILITIES_PATH, BYOK_EVENTS_PATH, BYOK_MESSAGES_PATH, BYOK_BOARD_PATH, BYOK_BOARD_CLAIM_ROUTE, BYOK_BOARD_UNCLAIM_ROUTE, BYOK_BOARD_STATUS_ROUTE, BYOK_BOARD_STREAM_PATH, BYOK_PRESENCE_PATH, BYOK_ACTIVITY_PATH, BYOK_RECORDS_PATH, BYOK_RECORD_ROUTE, BYOK_SKILL_PACKS_PATH, BYOK_SKILL_PACK_FILE_ROUTE, BYOK_BLOBS_PATH, BYOK_BLOB_FINALIZE_ROUTE, BYOK_BLOB_URL_ROUTE, BYOK_BLOB_CONTENT_ROUTE, createEnvelope, PairRequestSchema, ChallengeRequestSchema, TokenRequestSchema, MessagesSendRequestSchema, CreateBlobRequestSchema, byokBlobContentPath } from '@byok-sdk/protocol';
4
4
  import { z } from 'zod';
5
5
  import { Hono } from 'hono';
6
6
 
@@ -309,6 +309,13 @@ var CLOUD_ERROR_CODES = {
309
309
  capability_over_declared: "capability_over_declared",
310
310
  /** Host-supplied board labels or coordination input exceeded the explicit contract. */
311
311
  coordination_input_invalid: "coordination_input_invalid",
312
+ /**
313
+ * A terminal receipt whose stored body is not a terminal envelope — either
314
+ * undecodable or a non-terminal type. Whatever wrote that row broke the
315
+ * receipt-store contract, so the typed read model fails closed instead of
316
+ * projecting a best-effort shape.
317
+ */
318
+ terminal_receipt_unreadable: "terminal_receipt_unreadable",
312
319
  /** A progress/activity batch exceeded the configured event or byte ceiling. */
313
320
  activity_batch_too_large: "activity_batch_too_large"
314
321
  };
@@ -668,6 +675,7 @@ function tokenHandler(deps) {
668
675
  return c.json(response, 200);
669
676
  };
670
677
  }
678
+ var CLOUD_PROTOCOL_CAPABILITIES = ["result-document"];
671
679
  function sleep(ms) {
672
680
  return new Promise((resolve) => setTimeout(resolve, ms));
673
681
  }
@@ -696,12 +704,20 @@ function eventsHandler(deps) {
696
704
  });
697
705
  if (page.messages.length > 0) {
698
706
  const events = page.messages.map((message) => decodeEnvelope(message.body));
699
- const response2 = { events, cursor: page.nextSeq };
707
+ const response2 = {
708
+ events,
709
+ cursor: page.nextSeq,
710
+ capabilities: CLOUD_PROTOCOL_CAPABILITIES
711
+ };
700
712
  return c.json(response2, 200);
701
713
  }
702
714
  if (attempt < attempts - 1) await sleep(deps.longPollIntervalMs);
703
715
  }
704
- const response = { events: [], cursor };
716
+ const response = {
717
+ events: [],
718
+ cursor,
719
+ capabilities: CLOUD_PROTOCOL_CAPABILITIES
720
+ };
705
721
  return c.json(response, 200);
706
722
  };
707
723
  }
@@ -1053,7 +1069,8 @@ function boardFailure(c, caught) {
1053
1069
  }
1054
1070
  var PresenceBodySchema = z.object({
1055
1071
  level: z.enum(PRESENCE_LEVELS),
1056
- detail: z.string().optional()
1072
+ detail: z.string().optional(),
1073
+ configuredToolsets: ConfiguredToolsetsSchema.optional()
1057
1074
  });
1058
1075
  var ActivityBodySchema = z.object({
1059
1076
  taskId: z.string().min(1).max(200),
@@ -1075,6 +1092,7 @@ function presencePublishHandler(deps) {
1075
1092
  deviceId: authenticated.device.deviceId,
1076
1093
  level: parsed.data.level,
1077
1094
  ...parsed.data.detail === void 0 ? {} : { detail: parsed.data.detail },
1095
+ ...parsed.data.configuredToolsets === void 0 ? {} : { configuredToolsets: parsed.data.configuredToolsets },
1078
1096
  ttlMs: deps.ttlMs,
1079
1097
  minimumIntervalMs: deps.minimumIntervalMs
1080
1098
  }),
@@ -1555,6 +1573,50 @@ var CloudRouteRegistry = class {
1555
1573
  return this.#app.fetch;
1556
1574
  }
1557
1575
  };
1576
+ function projectTerminalResult(taskId, receipt) {
1577
+ let envelope;
1578
+ try {
1579
+ envelope = decodeEnvelope(receipt.body);
1580
+ } catch (cause) {
1581
+ throw new ByokCloudError(
1582
+ "terminal_receipt_unreadable",
1583
+ `The terminal receipt for task ${taskId} holds a body that is not a decodable envelope.`,
1584
+ { cause }
1585
+ );
1586
+ }
1587
+ switch (envelope.type) {
1588
+ case "task.complete":
1589
+ return {
1590
+ taskId,
1591
+ state: "complete",
1592
+ summary: envelope.payload.summary,
1593
+ sessionRef: envelope.payload.sessionRef,
1594
+ ...envelope.payload.artifactRefs !== void 0 ? { artifactRefs: envelope.payload.artifactRefs } : {},
1595
+ ...envelope.payload.document !== void 0 ? { document: envelope.payload.document } : {},
1596
+ recordedAt: receipt.recordedAt
1597
+ };
1598
+ case "task.fail":
1599
+ return {
1600
+ taskId,
1601
+ state: "failed",
1602
+ reason: envelope.payload.reason,
1603
+ ...envelope.payload.retryable !== void 0 ? { retryable: envelope.payload.retryable } : {},
1604
+ recordedAt: receipt.recordedAt
1605
+ };
1606
+ case "task.cancelled":
1607
+ return {
1608
+ taskId,
1609
+ state: "cancelled",
1610
+ ...envelope.payload.reason !== void 0 ? { reason: envelope.payload.reason } : {},
1611
+ recordedAt: receipt.recordedAt
1612
+ };
1613
+ default:
1614
+ throw new ByokCloudError(
1615
+ "terminal_receipt_unreadable",
1616
+ `The terminal receipt for task ${taskId} holds a ${envelope.type} envelope, which is not a terminal type.`
1617
+ );
1618
+ }
1619
+ }
1558
1620
 
1559
1621
  // src/cloud.ts
1560
1622
  var DEFAULT_MAX_BLOB_SIZE_BYTES = 100 * 1024 * 1024;
@@ -1786,6 +1848,12 @@ function createByokCloud(options) {
1786
1848
  readTerminalReceipt(tenant, taskId) {
1787
1849
  return tenantStoresFor(controlPlane(tenant), root).receipts.get(terminalReceiptKey(taskId));
1788
1850
  },
1851
+ async readTaskResult(tenant, taskId) {
1852
+ const receipt = await tenantStoresFor(controlPlane(tenant), root).receipts.get(
1853
+ terminalReceiptKey(taskId)
1854
+ );
1855
+ return receipt === void 0 ? void 0 : projectTerminalResult(taskId, receipt);
1856
+ },
1789
1857
  listDevices(tenant) {
1790
1858
  return tenantStoresFor(controlPlane(tenant), root).devices.list();
1791
1859
  },
@@ -2479,6 +2547,6 @@ var CLOUD_PORT_INTERFACES = {
2479
2547
  rateLimiter: "InboundRateLimiter"
2480
2548
  };
2481
2549
 
2482
- export { ACCESS_TOKEN_TTL_SECONDS, AllowAllRateLimiter, BLOB_URL_TTL_MS, BoardFeedClient, BoardFeedRetryableError, BoardFeedStoppedError, ByokCloudError, CLOUD_CAPABILITIES, CLOUD_ERROR_CODES, CLOUD_PORT_INTERFACES, CLOUD_PORT_METHODS, CLOUD_STORE_NAMES, CapabilitiesResponseSchema, CloudRouteRegistry, DEDUP_RING_CAPACITY, DEFAULT_ACTIVITY_BOUNDS, DEFAULT_ACTIVITY_CAPACITY, DEFAULT_ACTIVITY_MAX_BYTES, DEFAULT_ACTIVITY_MAX_EVENTS, DEFAULT_ACTIVITY_TTL_MS, DEFAULT_BOARD_CHANNEL_MAX_BYTES, DEFAULT_BOARD_PAGE_LIMIT, DEFAULT_BOARD_STREAM_HEARTBEAT_INTERVAL_MS, DEFAULT_BOARD_STREAM_QUERY_INTERVAL_MS, DEFAULT_BOARD_STREAM_RECONCILIATION_INTERVAL_MS, DEFAULT_BOARD_TITLE_MAX_BYTES, DEFAULT_DEVICE_PROOF_CLOCK_SKEW_MS, DEFAULT_DEVICE_PROOF_MAX_LIFETIME_MS, DEFAULT_EVENTS_PAGE_LIMIT, DEFAULT_LONG_POLL_HOLD_MS, DEFAULT_LONG_POLL_INTERVAL_MS, DEFAULT_MAX_BLOB_SIZE_BYTES, DEFAULT_MAX_TRUTH_REQUEST_BYTES, DEFAULT_PRESENCE_DETAIL_MAX_BYTES, DEFAULT_PRESENCE_MINIMUM_INTERVAL_MS, DEFAULT_PRESENCE_TTL_MS, DEFAULT_SKILL_PACK_PAGE_LIMIT, DEVICE_IDENTITY_PROOF_KEY_EPOCH, DEVICE_IDENTITY_PROOF_KEY_ID, InMemoryBlobContentProxy, InMemoryCloudBlobStore, InMemoryDeviceDirectory, InMemoryInboundDedupStore, InMemoryNonceStore, InMemoryPairingCodeStore, InMemoryProofRequestReceiptStore, InMemoryRequestReceiptStore, InMemoryTaskAttemptStore, MAX_DEVICE_PROOF_CLOCK_SKEW_MS, MAX_DEVICE_PROOF_HEADER_BYTES, MAX_DEVICE_PROOF_MAX_LIFETIME_MS, NONCE_TTL_MS, PAIRING_CODE_TTL_MS, ROUTE_CLASSES, ROUTE_METHODS, TASK_ATTEMPT_STATUSES, TRUTH_BATCH_MAX_RECORDS, TRUTH_INLINE_CONTENT_TYPE, TRUTH_LABEL_MAX_LENGTH, TRUTH_MANIFEST_MAX_LIMIT, TRUTH_RECORD_CAPABILITY, TRUTH_RECORD_KEY_MAX_LENGTH, TRUTH_REQUEST_ID_MAX_LENGTH, TruthBodyInputSchema, TruthCommitError, TruthCommitResponseSchema, TruthRecordKeySchema, TruthRecordMetadataSchema, TruthWriteRequestSchema, authenticateBearer, authenticateDeviceProof, createAuthPlane, createByokCloud, createHmacTokenSigner, createInMemoryBlobs, createInMemoryByokCloud, createInMemoryCloudStores, createWebCrypto, declares, extractBearerToken, fullCapabilityDeclaration, handleInboundEnvelope, isCloudError, isTruthCommitError, routeKey, tenantStoresFor, terminalReceiptKey, truthManifestMetadata, truthRecordMetadata, verifyNonceSignature };
2550
+ export { ACCESS_TOKEN_TTL_SECONDS, AllowAllRateLimiter, BLOB_URL_TTL_MS, BoardFeedClient, BoardFeedRetryableError, BoardFeedStoppedError, ByokCloudError, CLOUD_CAPABILITIES, CLOUD_ERROR_CODES, CLOUD_PORT_INTERFACES, CLOUD_PORT_METHODS, CLOUD_STORE_NAMES, CapabilitiesResponseSchema, CloudRouteRegistry, DEDUP_RING_CAPACITY, DEFAULT_ACTIVITY_BOUNDS, DEFAULT_ACTIVITY_CAPACITY, DEFAULT_ACTIVITY_MAX_BYTES, DEFAULT_ACTIVITY_MAX_EVENTS, DEFAULT_ACTIVITY_TTL_MS, DEFAULT_BOARD_CHANNEL_MAX_BYTES, DEFAULT_BOARD_PAGE_LIMIT, DEFAULT_BOARD_STREAM_HEARTBEAT_INTERVAL_MS, DEFAULT_BOARD_STREAM_QUERY_INTERVAL_MS, DEFAULT_BOARD_STREAM_RECONCILIATION_INTERVAL_MS, DEFAULT_BOARD_TITLE_MAX_BYTES, DEFAULT_DEVICE_PROOF_CLOCK_SKEW_MS, DEFAULT_DEVICE_PROOF_MAX_LIFETIME_MS, DEFAULT_EVENTS_PAGE_LIMIT, DEFAULT_LONG_POLL_HOLD_MS, DEFAULT_LONG_POLL_INTERVAL_MS, DEFAULT_MAX_BLOB_SIZE_BYTES, DEFAULT_MAX_TRUTH_REQUEST_BYTES, DEFAULT_PRESENCE_DETAIL_MAX_BYTES, DEFAULT_PRESENCE_MINIMUM_INTERVAL_MS, DEFAULT_PRESENCE_TTL_MS, DEFAULT_SKILL_PACK_PAGE_LIMIT, DEVICE_IDENTITY_PROOF_KEY_EPOCH, DEVICE_IDENTITY_PROOF_KEY_ID, InMemoryBlobContentProxy, InMemoryCloudBlobStore, InMemoryDeviceDirectory, InMemoryInboundDedupStore, InMemoryNonceStore, InMemoryPairingCodeStore, InMemoryProofRequestReceiptStore, InMemoryRequestReceiptStore, InMemoryTaskAttemptStore, MAX_DEVICE_PROOF_CLOCK_SKEW_MS, MAX_DEVICE_PROOF_HEADER_BYTES, MAX_DEVICE_PROOF_MAX_LIFETIME_MS, NONCE_TTL_MS, PAIRING_CODE_TTL_MS, ROUTE_CLASSES, ROUTE_METHODS, TASK_ATTEMPT_STATUSES, TRUTH_BATCH_MAX_RECORDS, TRUTH_INLINE_CONTENT_TYPE, TRUTH_LABEL_MAX_LENGTH, TRUTH_MANIFEST_MAX_LIMIT, TRUTH_RECORD_CAPABILITY, TRUTH_RECORD_KEY_MAX_LENGTH, TRUTH_REQUEST_ID_MAX_LENGTH, TruthBodyInputSchema, TruthCommitError, TruthCommitResponseSchema, TruthRecordKeySchema, TruthRecordMetadataSchema, TruthWriteRequestSchema, authenticateBearer, authenticateDeviceProof, createAuthPlane, createByokCloud, createHmacTokenSigner, createInMemoryBlobs, createInMemoryByokCloud, createInMemoryCloudStores, createWebCrypto, declares, extractBearerToken, fullCapabilityDeclaration, handleInboundEnvelope, isCloudError, isTruthCommitError, projectTerminalResult, routeKey, tenantStoresFor, terminalReceiptKey, truthManifestMetadata, truthRecordMetadata, verifyNonceSignature };
2483
2551
  //# sourceMappingURL=index.js.map
2484
2552
  //# sourceMappingURL=index.js.map