@tinycloud/sdk-core 3.8.0-beta.9 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -74,13 +74,13 @@ __export(index_exports, {
74
74
  ClientSessionSchema: () => ClientSessionSchema,
75
75
  CloudLocationResolutionError: () => CloudLocationResolutionError,
76
76
  CredentialError: () => CredentialError,
77
- DECRYPT_ACTION: () => import_sdk_services9.DECRYPT_ACTION,
78
- DECRYPT_FACT_TYPE: () => import_sdk_services9.DECRYPT_FACT_TYPE,
79
- DECRYPT_RESULT_TYPE: () => import_sdk_services9.DECRYPT_RESULT_TYPE,
77
+ DECRYPT_ACTION: () => import_sdk_services10.DECRYPT_ACTION,
78
+ DECRYPT_FACT_TYPE: () => import_sdk_services10.DECRYPT_FACT_TYPE,
79
+ DECRYPT_RESULT_TYPE: () => import_sdk_services10.DECRYPT_RESULT_TYPE,
80
80
  DEFAULT_DEFAULTS: () => DEFAULT_DEFAULTS,
81
- DEFAULT_ENCRYPTION_ALG: () => import_sdk_services9.DEFAULT_ENCRYPTION_ALG,
81
+ DEFAULT_ENCRYPTION_ALG: () => import_sdk_services10.DEFAULT_ENCRYPTION_ALG,
82
82
  DEFAULT_EXPIRY: () => DEFAULT_EXPIRY,
83
- DEFAULT_KEY_VERSION: () => import_sdk_services9.DEFAULT_KEY_VERSION,
83
+ DEFAULT_KEY_VERSION: () => import_sdk_services10.DEFAULT_KEY_VERSION,
84
84
  DEFAULT_KNOWLEDGE_ROOT: () => DEFAULT_KNOWLEDGE_ROOT,
85
85
  DEFAULT_LOCAL_NODE_PIN_STORAGE_KEY: () => DEFAULT_LOCAL_NODE_PIN_STORAGE_KEY,
86
86
  DEFAULT_LOCAL_NODE_URL: () => DEFAULT_LOCAL_NODE_URL,
@@ -95,36 +95,36 @@ __export(index_exports, {
95
95
  DEFAULT_TINYCLOUD_LOCATION_REGISTRY_URL: () => DEFAULT_TINYCLOUD_LOCATION_REGISTRY_URL,
96
96
  DELIVERY_ADMISSION_DOMAIN: () => DELIVERY_ADMISSION_DOMAIN,
97
97
  DUCKDB: () => import_bootstrap4.DUCKDB,
98
- DataVaultService: () => import_sdk_services9.DataVaultService,
99
- DatabaseHandle: () => import_sdk_services9.DatabaseHandle,
100
- DecryptTransportResponseError: () => import_sdk_services9.DecryptTransportResponseError,
98
+ DataVaultService: () => import_sdk_services10.DataVaultService,
99
+ DatabaseHandle: () => import_sdk_services10.DatabaseHandle,
100
+ DecryptTransportResponseError: () => import_sdk_services10.DecryptTransportResponseError,
101
101
  DelegationErrorCodes: () => DelegationErrorCodes,
102
102
  DelegationManager: () => DelegationManager,
103
- DuckDbAction: () => import_sdk_services9.DuckDbAction,
104
- DuckDbDatabaseHandle: () => import_sdk_services9.DuckDbDatabaseHandle,
105
- DuckDbService: () => import_sdk_services9.DuckDbService,
103
+ DuckDbAction: () => import_sdk_services10.DuckDbAction,
104
+ DuckDbDatabaseHandle: () => import_sdk_services10.DuckDbDatabaseHandle,
105
+ DuckDbService: () => import_sdk_services10.DuckDbService,
106
106
  ED25519_JCS_SIGNATURE_SUITE: () => ED25519_JCS_SIGNATURE_SUITE,
107
107
  EIP191_JCS_SIGNATURE_SUITE: () => EIP191_JCS_SIGNATURE_SUITE,
108
108
  EMAIL_CREDENTIAL_MAX_AGE_SECONDS: () => EMAIL_CREDENTIAL_MAX_AGE_SECONDS,
109
109
  EMAIL_DOMAIN_CREDENTIAL_MAX_AGE_SECONDS: () => EMAIL_DOMAIN_CREDENTIAL_MAX_AGE_SECONDS,
110
110
  ENCRYPTION: () => import_bootstrap4.ENCRYPTION,
111
111
  ENCRYPTION_MANIFEST_SPACE: () => ENCRYPTION_MANIFEST_SPACE,
112
- ENCRYPTION_NETWORK_URN_PREFIX: () => import_sdk_services9.ENCRYPTION_NETWORK_URN_PREFIX,
112
+ ENCRYPTION_NETWORK_URN_PREFIX: () => import_sdk_services10.ENCRYPTION_NETWORK_URN_PREFIX,
113
113
  ENCRYPTION_PERMISSION_SERVICE: () => ENCRYPTION_PERMISSION_SERVICE,
114
- ENCRYPTION_SERVICE: () => import_sdk_services9.ENCRYPTION_SERVICE,
115
- ENCRYPTION_SERVICE_SHORT: () => import_sdk_services9.ENCRYPTION_SERVICE_SHORT,
116
- ENVELOPE_VERSION: () => import_sdk_services9.ENVELOPE_VERSION,
114
+ ENCRYPTION_SERVICE: () => import_sdk_services10.ENCRYPTION_SERVICE,
115
+ ENCRYPTION_SERVICE_SHORT: () => import_sdk_services10.ENCRYPTION_SERVICE_SHORT,
116
+ ENVELOPE_VERSION: () => import_sdk_services10.ENVELOPE_VERSION,
117
117
  EXPIRY: () => EXPIRY,
118
- EncryptionService: () => import_sdk_services9.EncryptionService,
118
+ EncryptionService: () => import_sdk_services10.EncryptionService,
119
119
  EnsDataSchema: () => EnsDataSchema,
120
- ErrorCodes: () => import_sdk_services9.ErrorCodes,
120
+ ErrorCodes: () => import_sdk_services10.ErrorCodes,
121
121
  HOLDER_BINDING_DOMAIN: () => HOLDER_BINDING_DOMAIN,
122
122
  HOLDER_KEY_BINDING_PRESENTATION_SCHEMA: () => HOLDER_KEY_BINDING_PRESENTATION_SCHEMA,
123
123
  HOOKS: () => import_bootstrap4.HOOKS,
124
- HooksService: () => import_sdk_services9.HooksService,
124
+ HooksService: () => import_sdk_services10.HooksService,
125
125
  IdentityParseError: () => IdentityParseError,
126
126
  KV: () => import_bootstrap4.KV,
127
- KVService: () => import_sdk_services9.KVService,
127
+ KVService: () => import_sdk_services10.KVService,
128
128
  LAST_V2_CREATE_AT: () => LAST_V2_CREATE_AT,
129
129
  LAST_V2_READ_AT: () => LAST_V2_READ_AT,
130
130
  LISTEN_SQL_STATEMENT_CATALOG: () => LISTEN_SQL_STATEMENT_CATALOG,
@@ -136,7 +136,7 @@ __export(index_exports, {
136
136
  MAX_CONTENT_BYTES: () => MAX_CONTENT_BYTES,
137
137
  MAX_LEGACY_ENVELOPE_EXPIRES_AT: () => MAX_LEGACY_ENVELOPE_EXPIRES_AT,
138
138
  MAX_SEALED_SHARE_CONTENT_BYTES: () => MAX_SEALED_SHARE_CONTENT_BYTES,
139
- MAX_SECRET_SCOPE_LENGTH: () => import_sdk_services9.MAX_SECRET_SCOPE_LENGTH,
139
+ MAX_SECRET_SCOPE_LENGTH: () => import_sdk_services10.MAX_SECRET_SCOPE_LENGTH,
140
140
  MAX_SHARE_ARTIFACT_BYTES: () => MAX_SHARE_ARTIFACT_BYTES,
141
141
  MAX_SHARE_CONTENT_BYTES: () => MAX_SHARE_CONTENT_BYTES,
142
142
  ManifestValidationError: () => ManifestValidationError,
@@ -144,8 +144,8 @@ __export(index_exports, {
144
144
  MemorySenderShareRecordStorage: () => MemorySenderShareRecordStorage,
145
145
  MemoryShareCache: () => MemoryShareCache,
146
146
  NATIVE_PROJECTION_V1_DOMAIN: () => NATIVE_PROJECTION_V1_DOMAIN,
147
- NETWORK_NAME_PATTERN: () => import_sdk_services9.NETWORK_NAME_PATTERN,
148
- NetworkIdError: () => import_sdk_services9.NetworkIdError,
147
+ NETWORK_NAME_PATTERN: () => import_sdk_services10.NETWORK_NAME_PATTERN,
148
+ NetworkIdError: () => import_sdk_services10.NetworkIdError,
149
149
  NodeNotFoundError: () => NodeNotFoundError,
150
150
  NodeRegistryEntryExistsError: () => NodeRegistryEntryExistsError,
151
151
  OPENKEY_ACTION_ID_SEPARATOR: () => OPENKEY_ACTION_ID_SEPARATOR,
@@ -174,7 +174,7 @@ __export(index_exports, {
174
174
  POLICY_V2_SCHEMA: () => POLICY_V2_SCHEMA,
175
175
  PORTABLE_DELEGATION_SCHEMA: () => PORTABLE_DELEGATION_SCHEMA,
176
176
  PermissionNotInManifestError: () => PermissionNotInManifestError,
177
- PrefixedKVService: () => import_sdk_services9.PrefixedKVService,
177
+ PrefixedKVService: () => import_sdk_services10.PrefixedKVService,
178
178
  ProtocolMismatchError: () => ProtocolMismatchError,
179
179
  REGISTRY_LOOKUP_MAX_BODY_BYTES: () => REGISTRY_LOOKUP_MAX_BODY_BYTES,
180
180
  REGISTRY_NOT_FOUND_BODY: () => REGISTRY_NOT_FOUND_BODY,
@@ -189,22 +189,22 @@ __export(index_exports, {
189
189
  RegistryLookupInputError: () => RegistryLookupInputError,
190
190
  RegistryUnavailableError: () => RegistryUnavailableError,
191
191
  SECRETS_SPACE: () => SECRETS_SPACE,
192
- SECRET_NAME_RE: () => import_sdk_services9.SECRET_NAME_RE,
192
+ SECRET_NAME_RE: () => import_sdk_services10.SECRET_NAME_RE,
193
193
  SECRET_RECORDS_SCHEMA: () => import_bootstrap4.SECRET_RECORDS_SCHEMA,
194
- SECRET_SCOPE_RE: () => import_sdk_services9.SECRET_SCOPE_RE,
194
+ SECRET_SCOPE_RE: () => import_sdk_services10.SECRET_SCOPE_RE,
195
195
  SERVICE_LONG_TO_SHORT: () => SERVICE_LONG_TO_SHORT,
196
196
  SERVICE_SHORT_TO_LONG: () => SERVICE_SHORT_TO_LONG,
197
197
  SPACE: () => import_bootstrap4.SPACE,
198
198
  SQL: () => import_bootstrap4.SQL,
199
- SQLAction: () => import_sdk_services9.SQLAction,
200
- SQLService: () => import_sdk_services9.SQLService,
201
- STORAGE_FULL_MESSAGE: () => import_sdk_services9.STORAGE_FULL_MESSAGE,
202
- STORAGE_MANAGE_URL: () => import_sdk_services9.STORAGE_MANAGE_URL,
203
- STORAGE_NEARLY_FULL_RATIO: () => import_sdk_services9.STORAGE_NEARLY_FULL_RATIO,
204
- STORAGE_WRITE_TOO_LARGE_MESSAGE: () => import_sdk_services9.STORAGE_WRITE_TOO_LARGE_MESSAGE,
205
- SecretsService: () => import_sdk_services9.SecretsService,
199
+ SQLAction: () => import_sdk_services10.SQLAction,
200
+ SQLService: () => import_sdk_services10.SQLService,
201
+ STORAGE_FULL_MESSAGE: () => import_sdk_services10.STORAGE_FULL_MESSAGE,
202
+ STORAGE_MANAGE_URL: () => import_sdk_services10.STORAGE_MANAGE_URL,
203
+ STORAGE_NEARLY_FULL_RATIO: () => import_sdk_services10.STORAGE_NEARLY_FULL_RATIO,
204
+ STORAGE_WRITE_TOO_LARGE_MESSAGE: () => import_sdk_services10.STORAGE_WRITE_TOO_LARGE_MESSAGE,
205
+ SecretsService: () => import_sdk_services10.SecretsService,
206
206
  SenderShareStore: () => SenderShareStore,
207
- ServiceContext: () => import_sdk_services9.ServiceContext,
207
+ ServiceContext: () => import_sdk_services10.ServiceContext,
208
208
  SessionExpiredError: () => SessionExpiredError,
209
209
  ShareAccessError: () => ShareAccessError,
210
210
  ShareAddressedDelegationEnvelopeV2Schema: () => ShareAddressedDelegationEnvelopeV2Schema,
@@ -230,8 +230,8 @@ __export(index_exports, {
230
230
  Space: () => Space,
231
231
  SpaceErrorCodes: () => SpaceErrorCodes,
232
232
  SpaceService: () => SpaceService,
233
- StorageFullMonitor: () => import_sdk_services9.StorageFullMonitor,
234
- TC832_RESERVED_SCOPES: () => import_sdk_services9.TC832_RESERVED_SCOPES,
233
+ StorageFullMonitor: () => import_sdk_services10.StorageFullMonitor,
234
+ TC832_RESERVED_SCOPES: () => import_sdk_services10.TC832_RESERVED_SCOPES,
235
235
  TERMINAL_DELEGATION_FACT: () => TERMINAL_DELEGATION_FACT,
236
236
  TINYCLOUD_ACCOUNT_SPACE_MANIFEST: () => import_bootstrap4.TINYCLOUD_ACCOUNT_SPACE_MANIFEST,
237
237
  TINYCLOUD_AGENTS_SPACE_MANIFEST: () => import_bootstrap4.TINYCLOUD_AGENTS_SPACE_MANIFEST,
@@ -242,55 +242,55 @@ __export(index_exports, {
242
242
  TINYCLOUD_PUBLIC_SPACE_MANIFEST: () => import_bootstrap4.TINYCLOUD_PUBLIC_SPACE_MANIFEST,
243
243
  TINYCLOUD_SECRETS_BOOTSTRAP_MANIFEST: () => import_bootstrap4.TINYCLOUD_SECRETS_BOOTSTRAP_MANIFEST,
244
244
  TinyCloud: () => TinyCloud,
245
- TinyCloudDebugLogger: () => import_sdk_services9.TinyCloudDebugLogger,
245
+ TinyCloudDebugLogger: () => import_sdk_services10.TinyCloudDebugLogger,
246
246
  TranscriptRequester: () => TranscriptRequester,
247
247
  TranscriptRequesterError: () => TranscriptRequesterError,
248
248
  UnsupportedFeatureError: () => UnsupportedFeatureError,
249
249
  UnsupportedSignatureSuiteError: () => UnsupportedSignatureSuiteError,
250
250
  VAULT_PERMISSION_SERVICE: () => VAULT_PERMISSION_SERVICE,
251
- VaultHeaders: () => import_sdk_services9.VaultHeaders,
252
- VaultPublicSpaceKVActions: () => import_sdk_services9.VaultPublicSpaceKVActions,
251
+ VaultHeaders: () => import_sdk_services10.VaultHeaders,
252
+ VaultPublicSpaceKVActions: () => import_sdk_services10.VaultPublicSpaceKVActions,
253
253
  VersionCheckError: () => VersionCheckError,
254
254
  actionContains: () => actionContains,
255
255
  activateSessionWithHost: () => activateSessionWithHost,
256
256
  addressStorageKey: () => addressStorageKey,
257
257
  admitPolicyCredentialV3: () => admitPolicyCredentialV3,
258
258
  admitPolicyCredentialV4: () => admitPolicyCredentialV4,
259
- appSecretScope: () => import_sdk_services9.appSecretScope,
259
+ appSecretScope: () => import_sdk_services10.appSecretScope,
260
260
  applyPrefix: () => applyPrefix,
261
261
  assertSpaceCreationAllowed: () => assertSpaceCreationAllowed,
262
- authorizationVerdictOf: () => import_sdk_services9.authorizationVerdictOf,
262
+ authorizationVerdictOf: () => import_sdk_services10.authorizationVerdictOf,
263
263
  bootstrapEncryptionNetworkId: () => import_bootstrap4.bootstrapEncryptionNetworkId,
264
264
  bootstrapSpaceId: () => import_bootstrap4.bootstrapSpaceId,
265
265
  bootstrapSteps: () => import_bootstrap4.bootstrapSteps,
266
- buildCanonicalDecryptRequest: () => import_sdk_services9.buildCanonicalDecryptRequest,
267
- buildDecryptAttenuation: () => import_sdk_services9.buildDecryptAttenuation,
268
- buildDecryptFacts: () => import_sdk_services9.buildDecryptFacts,
269
- buildDecryptInvocation: () => import_sdk_services9.buildDecryptInvocation,
270
- buildNetworkId: () => import_sdk_services9.buildNetworkId,
266
+ buildCanonicalDecryptRequest: () => import_sdk_services10.buildCanonicalDecryptRequest,
267
+ buildDecryptAttenuation: () => import_sdk_services10.buildDecryptAttenuation,
268
+ buildDecryptFacts: () => import_sdk_services10.buildDecryptFacts,
269
+ buildDecryptInvocation: () => import_sdk_services10.buildDecryptInvocation,
270
+ buildNetworkId: () => import_sdk_services10.buildNetworkId,
271
271
  buildPolicyCredentialPresentationV3: () => buildPolicyCredentialPresentationV3,
272
272
  buildPolicyCredentialPresentationV4: () => buildPolicyCredentialPresentationV4,
273
273
  buildSpaceUri: () => buildSpaceUri,
274
274
  canonicalDigest: () => canonicalDigest,
275
275
  canonicalEmailDomain: () => import_share_envelope.canonicalEmailDomain,
276
- canonicalHashHex: () => import_sdk_services9.canonicalHashHex,
276
+ canonicalHashHex: () => import_sdk_services10.canonicalHashHex,
277
277
  canonicalLocationPayload: () => canonicalLocationPayload,
278
278
  canonicalMailbox: () => import_share_envelope.canonicalMailbox,
279
279
  canonicalOwnerSharePolicy: () => canonicalOwnerSharePolicy,
280
- canonicalSignedResponse: () => import_sdk_services9.canonicalSignedResponse,
280
+ canonicalSignedResponse: () => import_sdk_services10.canonicalSignedResponse,
281
281
  canonicalizeAddress: () => canonicalizeAddress,
282
282
  canonicalizeDid: () => canonicalizeDid,
283
283
  canonicalizeDidUrl: () => canonicalizeDidUrl,
284
- canonicalizeEncryptionJson: () => import_sdk_services9.canonicalizeEncryptionJson,
284
+ canonicalizeEncryptionJson: () => import_sdk_services10.canonicalizeEncryptionJson,
285
285
  canonicalizeNetworkId: () => canonicalizeNetworkId,
286
286
  canonicalizeRecapCaveats: () => canonicalizeRecapCaveats,
287
- canonicalizeSecretScope: () => import_sdk_services9.canonicalizeSecretScope,
287
+ canonicalizeSecretScope: () => import_sdk_services10.canonicalizeSecretScope,
288
288
  canonicalizeSignedObjectUnsigned: () => canonicalizeSignedObjectUnsigned,
289
289
  canonicalizeUnifiedPolicyCapability: () => canonicalizeUnifiedPolicyCapability,
290
- checkDecryptInvocationInput: () => import_sdk_services9.checkDecryptInvocationInput,
290
+ checkDecryptInvocationInput: () => import_sdk_services10.checkDecryptInvocationInput,
291
291
  checkNodeInfo: () => checkNodeInfo,
292
292
  classifyRegistryLookup: () => classifyRegistryLookup,
293
- clearTinyCloudDebugLogs: () => import_sdk_services9.clearTinyCloudDebugLogs,
293
+ clearTinyCloudDebugLogs: () => import_sdk_services10.clearTinyCloudDebugLogs,
294
294
  compactAttenuationContains: () => compactAttenuationContains,
295
295
  composeBootstrapSpaceManifest: () => import_bootstrap4.composeBootstrapSpaceManifest,
296
296
  composeManifestRequest: () => composeManifestRequest,
@@ -321,7 +321,7 @@ __export(index_exports, {
321
321
  createStorageReceipt: () => createStorageReceipt,
322
322
  createStoredCredentialRecord: () => createStoredCredentialRecord,
323
323
  createTranscriptRequester: () => createTranscriptRequester,
324
- createVaultCrypto: () => import_sdk_services9.createVaultCrypto,
324
+ createVaultCrypto: () => import_sdk_services10.createVaultCrypto,
325
325
  credentialEndpointPath: () => credentialEndpointPath,
326
326
  credentialError: () => credentialError,
327
327
  credentialIndexKey: () => credentialIndexKey,
@@ -329,65 +329,67 @@ __export(index_exports, {
329
329
  credentialRecordKey: () => credentialRecordKey,
330
330
  credentialRequirementDigest: () => credentialRequirementDigest,
331
331
  decodeBase64Url: () => decodeBase64Url,
332
- decryptEnvelopeWithKey: () => import_sdk_services9.decryptEnvelopeWithKey,
332
+ decryptEnvelopeWithKey: () => import_sdk_services10.decryptEnvelopeWithKey,
333
333
  decryptShareBytesAsync: () => decryptShareBytesAsync,
334
- defaultRetryPolicy: () => import_sdk_services9.defaultRetryPolicy,
334
+ defaultRetryPolicy: () => import_sdk_services10.defaultRetryPolicy,
335
335
  defaultSignStrategy: () => defaultSignStrategy,
336
336
  defaultSpaceCreationHandler: () => defaultSpaceCreationHandler,
337
337
  delegatePortablePolicySession: () => delegatePortablePolicySession,
338
338
  deriveDelegationCid: () => deriveDelegationCid,
339
339
  deriveSignedObjectMaterial: () => deriveSignedObjectMaterial,
340
- deriveSignedReceiverKey: () => import_sdk_services9.deriveSignedReceiverKey,
340
+ deriveSignedReceiverKey: () => import_sdk_services10.deriveSignedReceiverKey,
341
341
  descriptorSatisfiesRequirement: () => descriptorSatisfiesRequirement,
342
342
  didCacheKey: () => didCacheKey,
343
343
  didEquals: () => didEquals,
344
344
  diffImmutableSiweFields: () => diffImmutableSiweFields,
345
- disableTinyCloudDebug: () => import_sdk_services9.disableTinyCloudDebug,
345
+ disableTinyCloudDebug: () => import_sdk_services10.disableTinyCloudDebug,
346
346
  discoverLocalTinyCloudNode: () => discoverLocalTinyCloudNode,
347
- discoverNetwork: () => import_sdk_services9.discoverNetwork,
348
- enableTinyCloudDebug: () => import_sdk_services9.enableTinyCloudDebug,
347
+ discoverNetwork: () => import_sdk_services10.discoverNetwork,
348
+ enableTinyCloudDebug: () => import_sdk_services10.enableTinyCloudDebug,
349
349
  encodeBase64Url: () => encodeBase64Url,
350
350
  encodeInlineShareUrl: () => encodeInlineShareUrl,
351
351
  encodeShareArtifact: () => encodeShareArtifact,
352
352
  encodeShareUrl: () => encodeShareUrl,
353
353
  encryptShareBytes: () => encryptShareBytes,
354
354
  encryptShareBytesAsync: () => encryptShareBytesAsync,
355
- encryptToNetwork: () => import_sdk_services9.encryptToNetwork,
356
- encryptionBase64Decode: () => import_sdk_services9.base64Decode,
357
- encryptionBase64Encode: () => import_sdk_services9.base64Encode,
358
- encryptionError: () => import_sdk_services9.encryptionError,
359
- encryptionUtf8Decode: () => import_sdk_services9.utf8Decode,
360
- encryptionUtf8Encode: () => import_sdk_services9.utf8Encode,
361
- ensureNetworkUsableForDecrypt: () => import_sdk_services9.ensureNetworkUsableForDecrypt,
362
- err: () => import_sdk_services9.err,
355
+ encryptToNetwork: () => import_sdk_services10.encryptToNetwork,
356
+ encryptionBase64Decode: () => import_sdk_services10.base64Decode,
357
+ encryptionBase64Encode: () => import_sdk_services10.base64Encode,
358
+ encryptionError: () => import_sdk_services10.encryptionError,
359
+ encryptionUtf8Decode: () => import_sdk_services10.utf8Decode,
360
+ encryptionUtf8Encode: () => import_sdk_services10.utf8Encode,
361
+ ensureNetworkUsableForDecrypt: () => import_sdk_services10.ensureNetworkUsableForDecrypt,
362
+ err: () => import_sdk_services10.err,
363
363
  expandActionShortNames: () => expandActionShortNames,
364
+ expandDelegationPermissionEntries: () => expandDelegationPermissionEntries,
364
365
  expandPermissionEntries: () => expandPermissionEntries,
365
366
  expandPermissionEntry: () => expandPermissionEntry,
367
+ expandRuntimePermissionEntries: () => expandRuntimePermissionEntries,
366
368
  extractImmutableSiweFields: () => extractImmutableSiweFields,
367
369
  extractRecapAttenuations: () => extractRecapAttenuations,
368
370
  fetchLocationRecord: () => fetchLocationRecord,
369
371
  fetchPeerId: () => fetchPeerId,
370
- generateRandomReceiverKey: () => import_sdk_services9.generateRandomReceiverKey,
372
+ generateRandomReceiverKey: () => import_sdk_services10.generateRandomReceiverKey,
371
373
  getPolicyRootStatusV3: () => getPolicyRootStatusV3,
372
- getTinyCloudDebugLogs: () => import_sdk_services9.getTinyCloudDebugLogs,
374
+ getTinyCloudDebugLogs: () => import_sdk_services10.getTinyCloudDebugLogs,
373
375
  hasTinyCloudManageKeyScope: () => hasTinyCloudManageKeyScope,
374
- hexDecode: () => import_sdk_services9.hexDecode,
375
- hexEncode: () => import_sdk_services9.hexEncode,
376
+ hexDecode: () => import_sdk_services10.hexDecode,
377
+ hexEncode: () => import_sdk_services10.hexEncode,
376
378
  holderBindingCanonicalBytes: () => holderBindingCanonicalBytes,
377
379
  holderBindingSigningBytes: () => holderBindingSigningBytes,
378
380
  httpResponseError: () => httpResponseError,
379
381
  httpUrlToMultiaddr: () => httpUrlToMultiaddr,
380
382
  importPortableDelegation: () => importPortableDelegation,
381
- installTinyCloudDebugGlobals: () => import_sdk_services9.installTinyCloudDebugGlobals,
383
+ installTinyCloudDebugGlobals: () => import_sdk_services10.installTinyCloudDebugGlobals,
382
384
  intersectShareCapabilities: () => intersectShareCapabilities,
383
385
  isCanonicalEmailDomain: () => import_share_envelope.isCanonicalEmailDomain,
384
386
  isCapabilitySubset: () => isCapabilitySubset,
385
387
  isDigest: () => isDigest,
386
388
  isEvmAddress: () => isEvmAddress,
387
389
  isExplicitOnlyAction: () => isExplicitOnlyAction,
388
- isNetworkId: () => import_sdk_services9.isNetworkId,
390
+ isNetworkId: () => import_sdk_services10.isNetworkId,
389
391
  isPlausibleOpenKeyActionId: () => isPlausibleOpenKeyActionId,
390
- isStorageFullError: () => import_sdk_services9.isStorageFullError,
392
+ isStorageFullError: () => import_sdk_services10.isStorageFullError,
391
393
  isV2ShareLink: () => isV2ShareLink,
392
394
  issuedCredentialEnvelopeFromVerified: () => issuedCredentialEnvelopeFromVerified,
393
395
  jcsCanonicalize: () => jcsCanonicalize,
@@ -400,36 +402,36 @@ __export(index_exports, {
400
402
  manifestAbilitiesUnion: () => manifestAbilitiesUnion,
401
403
  markDelegationTerminal: () => markDelegationTerminal,
402
404
  multiaddrToHttpUrl: () => multiaddrToHttpUrl,
403
- networkDiscoveryKey: () => import_sdk_services9.networkDiscoveryKey,
405
+ networkDiscoveryKey: () => import_sdk_services10.networkDiscoveryKey,
404
406
  normalizeDefaults: () => normalizeDefaults,
405
407
  normalizeJson: () => normalizeJson,
406
408
  normalizeShareActions: () => normalizeShareActions,
407
409
  normalizeShareRecipientTarget: () => normalizeShareRecipientTarget,
408
410
  normalizeShareResource: () => normalizeShareResource,
409
411
  normalizeUnifiedPolicyCapability: () => normalizeUnifiedPolicyCapability,
410
- ok: () => import_sdk_services9.ok,
411
- openWrappedKey: () => import_sdk_services9.openWrappedKey,
412
+ ok: () => import_sdk_services10.ok,
413
+ openWrappedKey: () => import_sdk_services10.openWrappedKey,
412
414
  parseCanonicalNetworkId: () => parseCanonicalNetworkId,
413
415
  parseCanonicalRecapResource: () => parseCanonicalRecapResource,
414
416
  parseCanonicalTinyCloudIdentity: () => parseCanonicalTinyCloudIdentity,
415
417
  parseCanonicalTinyCloudIdentityClaims: () => parseCanonicalTinyCloudIdentityClaims,
416
- parseCapabilityResource: () => import_sdk_services9.parseCapabilityResource,
418
+ parseCapabilityResource: () => import_sdk_services10.parseCapabilityResource,
417
419
  parseCompactUcanAuthorization: () => parseCompactUcanAuthorization,
418
420
  parseExpiry: () => parseExpiry,
419
- parseNetworkId: () => import_sdk_services9.parseNetworkId,
421
+ parseNetworkId: () => import_sdk_services10.parseNetworkId,
420
422
  parseNodeNativePortableDelegation: () => parseNodeNativePortableDelegation,
421
423
  parsePkhDid: () => parsePkhDid,
422
424
  parsePolicySessionUcan: () => parsePolicySessionUcan,
423
425
  parsePortableDelegation: () => parsePortableDelegation,
424
426
  parseRecapCapabilities: () => parseRecapCapabilities,
425
- parseSecretCatalogKey: () => import_sdk_services9.parseSecretCatalogKey,
427
+ parseSecretCatalogKey: () => import_sdk_services10.parseSecretCatalogKey,
426
428
  parseShareArtifact: () => parseShareArtifact,
427
429
  parseShareUrl: () => parseShareUrl,
428
430
  parseSignedCompactUcanAttenuation: () => parseSignedCompactUcanAttenuation,
429
431
  parseSignedSiweCacao: () => parseSignedSiweCacao,
430
432
  parseSpaceUri: () => parseSpaceUri,
431
- parseStorageRejection: () => import_sdk_services9.parseStorageRejection,
432
- parseStorageStatus: () => import_sdk_services9.parseStorageStatus,
433
+ parseStorageRejection: () => import_sdk_services10.parseStorageRejection,
434
+ parseStorageStatus: () => import_sdk_services10.parseStorageStatus,
433
435
  pkhDid: () => pkhDid,
434
436
  policyCidFromCanonicalBytes: () => policyCidFromCanonicalBytes,
435
437
  policyDigestHex: () => policyDigestHex,
@@ -450,8 +452,8 @@ __export(index_exports, {
450
452
  resolveManifest: () => resolveManifest,
451
453
  resolveManifestKnowledgeRoot: () => resolveManifestKnowledgeRoot,
452
454
  resolveOwnerHosts: () => resolveOwnerHosts,
453
- resolveSecretListPrefix: () => import_sdk_services9.resolveSecretListPrefix,
454
- resolveSecretPath: () => import_sdk_services9.resolveSecretPath,
455
+ resolveSecretListPrefix: () => import_sdk_services10.resolveSecretListPrefix,
456
+ resolveSecretPath: () => import_sdk_services10.resolveSecretPath,
455
457
  resolveTinyCloudHosts: () => resolveTinyCloudHosts,
456
458
  resourceCapabilitiesToAbilitiesMap: () => resourceCapabilitiesToAbilitiesMap,
457
459
  resourceCapabilitiesToSpaceAbilitiesMap: () => resourceCapabilitiesToSpaceAbilitiesMap,
@@ -459,7 +461,7 @@ __export(index_exports, {
459
461
  revokePolicyRootV3: () => revokePolicyRootV3,
460
462
  serializeJcsJson: () => serialize,
461
463
  serializePortableDelegation: () => serializePortableDelegation,
462
- serviceError: () => import_sdk_services9.serviceError,
464
+ serviceError: () => import_sdk_services10.serviceError,
463
465
  sha256Base64Url: () => sha256Base64Url,
464
466
  shareCapabilityAllows: () => shareCapabilityAllows,
465
467
  shortDeliveryLinkBodyCid: () => shortDeliveryLinkBodyCid,
@@ -470,9 +472,9 @@ __export(index_exports, {
470
472
  signPolicyCredentialPresentationV4: () => signPolicyCredentialPresentationV4,
471
473
  signShareEnvelope: () => signShareEnvelope,
472
474
  signedObjectIdFor: () => signedObjectIdFor,
473
- storageUsageState: () => import_sdk_services9.storageUsageState,
475
+ storageUsageState: () => import_sdk_services10.storageUsageState,
474
476
  submitHostDelegation: () => submitHostDelegation,
475
- tinyCloudDebugLogger: () => import_sdk_services9.tinyCloudDebugLogger,
477
+ tinyCloudDebugLogger: () => import_sdk_services10.tinyCloudDebugLogger,
476
478
  toSignedObjectError: () => toSignedObjectError,
477
479
  unauthorizedRecapCapabilities: () => unauthorizedRecapCapabilities,
478
480
  unifiedNativeProjectionHashHex: () => unifiedNativeProjectionHashHex,
@@ -484,7 +486,7 @@ __export(index_exports, {
484
486
  validateCredentialFlowDescriptor: () => validateCredentialFlowDescriptor,
485
487
  validateCredentialHolderBinding: () => validateCredentialHolderBinding,
486
488
  validateCredentialRequirement: () => validateCredentialRequirement,
487
- validateEnvelope: () => import_sdk_services9.validateEnvelope,
489
+ validateEnvelope: () => import_sdk_services10.validateEnvelope,
488
490
  validateLocationRecord: () => validateLocationRecord,
489
491
  validateLocationRecordPayload: () => validateLocationRecordPayload,
490
492
  validateManifest: () => validateManifest,
@@ -502,8 +504,8 @@ __export(index_exports, {
502
504
  validatePolicyStatusUnsigned: () => validatePolicyStatusUnsigned,
503
505
  validatePolicyUnsigned: () => validatePolicyUnsigned,
504
506
  validateUnifiedPolicyV2: () => validateUnifiedPolicyV2,
505
- validatedCapabilityOf: () => import_sdk_services9.validatedCapabilityOf,
506
- verifyDecryptResponse: () => import_sdk_services9.verifyDecryptResponse,
507
+ validatedCapabilityOf: () => import_sdk_services10.validatedCapabilityOf,
508
+ verifyDecryptResponse: () => import_sdk_services10.verifyDecryptResponse,
507
509
  verifyDidKeyEd25519Signature: () => verifyDidKeyEd25519Signature,
508
510
  verifyEip191MessageSignature: () => verifyEip191MessageSignature,
509
511
  verifyIssuedCredential: () => verifyIssuedCredential,
@@ -3947,6 +3949,7 @@ var import_sha256 = require("@noble/hashes/sha256");
3947
3949
  var import_blake3 = require("@noble/hashes/blake3");
3948
3950
  var import_ed255193 = require("@noble/curves/ed25519");
3949
3951
  var import_zod2 = require("zod");
3952
+ var import_sdk_services2 = require("@tinycloud/sdk-services");
3950
3953
 
3951
3954
  // src/http-error.ts
3952
3955
  var import_sdk_services = require("@tinycloud/sdk-services");
@@ -4215,12 +4218,9 @@ function parseKvResource(resource) {
4215
4218
  return { space, path };
4216
4219
  }
4217
4220
  function parseEncryptionResource(resource) {
4218
- if (!resource.startsWith("urn:tinycloud:encryption:")) throw new Error("encryption capability is invalid");
4219
- const rest = resource.slice("urn:tinycloud:encryption:".length);
4220
- const separator = rest.lastIndexOf(":");
4221
- const ownerDid = separator < 0 ? "" : rest.slice(0, separator);
4222
- const network = separator < 0 ? "" : rest.slice(separator + 1);
4223
- if (!ownerDid.startsWith("did:") || network.length === 0 || network.includes(":") || network.includes("/") || network.includes("%") || network.includes("?") || network.includes("#")) {
4221
+ try {
4222
+ if ((0, import_sdk_services2.parseEncryptionResource)(resource).keyPath?.endsWith("/")) throw new Error("prefix");
4223
+ } catch {
4224
4224
  throw new Error("encryption capability is invalid");
4225
4225
  }
4226
4226
  }
@@ -6687,7 +6687,11 @@ var DelegationErrorCodes = {
6687
6687
  KV_SERVICE_UNAVAILABLE: "KV_SERVICE_UNAVAILABLE",
6688
6688
  DATA_FETCH_FAILED: "DATA_FETCH_FAILED",
6689
6689
  VALIDATION_ERROR: "VALIDATION_ERROR",
6690
- UNSUPPORTED_OPERATION: "UNSUPPORTED_OPERATION"
6690
+ UNSUPPORTED_OPERATION: "UNSUPPORTED_OPERATION",
6691
+ /** The node answered 503: the delegation chain is too deep to evaluate right now. Retry later. */
6692
+ CHAIN_TOO_DEEP: "CHAIN_TOO_DEEP",
6693
+ /** The node answered 400 "invalid delegation query cursor": malformed, foreign or from another filter. Start the listing again without it. */
6694
+ INVALID_CURSOR: "INVALID_CURSOR"
6691
6695
  };
6692
6696
  var DelegationSchema = import_zod4.z.object({
6693
6697
  /** Content identifier (CID) of the delegation */
@@ -6764,7 +6768,7 @@ var AccountDelegationPageSchema = import_zod4.z.object({
6764
6768
  nextCursor: import_zod4.z.string().optional()
6765
6769
  }).strict();
6766
6770
  var AccountDelegationQueryOptionsSchema = import_zod4.z.object({
6767
- direction: import_zod4.z.enum(["granted", "received", "all"]).optional(),
6771
+ direction: import_zod4.z.enum(["granted", "received", "all", "issued"]).optional(),
6768
6772
  status: import_zod4.z.enum(["active", "pending", "expired", "revoked", "ancestor_revoked"]).optional(),
6769
6773
  space: import_zod4.z.string().trim().min(1).optional(),
6770
6774
  limit: import_zod4.z.number().int().min(1).max(100).optional(),
@@ -6950,6 +6954,8 @@ var DelegationManagerConfigSchema = import_zod4.z.object({
6950
6954
  ).optional(),
6951
6955
  /** Optional owner-signed authorization for direct CID revocation */
6952
6956
  signOwnerRevocation: import_zod4.z.custom().optional(),
6957
+ /** Optional signer for proofless invocations by the session's own did:key (issued-delegation list and revoke) */
6958
+ sessionInvocationSigner: import_zod4.z.custom().optional(),
6953
6959
  /** Optional custom fetch implementation */
6954
6960
  fetch: import_zod4.z.unknown().refine(
6955
6961
  (val) => val === void 0 || typeof val === "function",
@@ -7045,7 +7051,7 @@ var CreateDelegationWasmResultSchema = import_zod4.z.object({
7045
7051
  resources: import_zod4.z.array(DelegatedResourceSchema)
7046
7052
  });
7047
7053
 
7048
- // src/delegations/DelegationManager.ts
7054
+ // src/delegations/shared.ts
7049
7055
  var DelegationAction = {
7050
7056
  REVOKE: "tinycloud.delegation/revoke",
7051
7057
  STATUS: "tinycloud.delegation/status",
@@ -7062,6 +7068,8 @@ function createError(code3, message, cause, meta) {
7062
7068
  meta
7063
7069
  };
7064
7070
  }
7071
+
7072
+ // src/delegations/DelegationManager.ts
7065
7073
  async function readInvokedJson(response, action) {
7066
7074
  const text3 = await response.text();
7067
7075
  if (text3.trim() === "") {
@@ -7084,11 +7092,13 @@ var DelegationManager = class {
7084
7092
  * @param config - Configuration including hosts, session, and invoke function
7085
7093
  */
7086
7094
  constructor(config) {
7095
+ this.issuedState = { issuedQuerySupported: false };
7087
7096
  this.hosts = config.hosts;
7088
7097
  this.session = config.session;
7089
7098
  this.invoke = config.invoke;
7090
7099
  this.invokeAny = config.invokeAny;
7091
7100
  this.signOwnerRevocation = config.signOwnerRevocation;
7101
+ this.sessionInvocationSigner = config.sessionInvocationSigner;
7092
7102
  this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);
7093
7103
  this.accountSpaceId = config.accountSpaceId;
7094
7104
  }
@@ -7331,6 +7341,7 @@ var DelegationManager = class {
7331
7341
  )
7332
7342
  };
7333
7343
  }
7344
+ if (validated.data.direction === "issued") return this.queryIssued(validated.data);
7334
7345
  if (!this.invokeAny) {
7335
7346
  return {
7336
7347
  ok: false,
@@ -7412,6 +7423,45 @@ var DelegationManager = class {
7412
7423
  };
7413
7424
  }
7414
7425
  }
7426
+ /** The state the lazily loaded issued-delegation module reads and updates. */
7427
+ issuedContext() {
7428
+ return {
7429
+ host: this.host,
7430
+ fetchFn: this.fetchFn,
7431
+ sessionInvocationSigner: this.sessionInvocationSigner,
7432
+ state: this.issuedState
7433
+ };
7434
+ }
7435
+ /**
7436
+ * Lists the delegations this session's own key issued (`direction: "issued"`).
7437
+ * The implementation loads on first use.
7438
+ */
7439
+ async queryIssued(options2) {
7440
+ const issued = await import("@tinycloud/sdk-core/delegations/issued");
7441
+ return issued.queryIssued(this.issuedContext(), options2);
7442
+ }
7443
+ /**
7444
+ * Every delegation this session's key issued, following `nextCursor` until
7445
+ * it is absent. `maxItems` stops early once that many are collected;
7446
+ * `untilCid` stops after the page that contains that delegation. Items come
7447
+ * in CID order (each carries `issuedAt`). The implementation loads on first use.
7448
+ */
7449
+ async queryAllIssued(options2 = {}) {
7450
+ const issued = await import("@tinycloud/sdk-core/delegations/issued");
7451
+ return issued.queryAllIssued((page) => this.query(page), options2);
7452
+ }
7453
+ /**
7454
+ * Revokes a delegation this session's key issued, with no proof: a UCAN
7455
+ * signed by the session's own did:key carrying `urn:cid:<cid>` and
7456
+ * `tinycloud.delegation/revoke`. Revoking a delegation that is already revoked
7457
+ * succeeds. A refusal (the key is not the delegator) carries the node's
7458
+ * message; 503 means the chain is too deep right now, retry later.
7459
+ * The implementation loads on first use.
7460
+ */
7461
+ async revokeIssued(cid2) {
7462
+ const issued = await import("@tinycloud/sdk-core/delegations/issued");
7463
+ return issued.revokeIssued(this.issuedContext(), cid2);
7464
+ }
7415
7465
  /**
7416
7466
  * Gets the full delegation chain for a given delegation.
7417
7467
  *
@@ -7718,7 +7768,8 @@ function validateEncodedShareData(data) {
7718
7768
  // src/manifest.ts
7719
7769
  var import_ms = __toESM(require("ms"), 1);
7720
7770
  var import_bootstrap2 = require("@tinycloud/bootstrap");
7721
- var import_sdk_services2 = require("@tinycloud/sdk-services");
7771
+ var import_sdk_services3 = require("@tinycloud/sdk-services");
7772
+ var import_resource = require("@tinycloud/sdk-services/encryption/resource");
7722
7773
  var DEFAULT_KNOWLEDGE_ROOT = "knowledge/index.md";
7723
7774
  var ManifestValidationError = class extends Error {
7724
7775
  constructor(message) {
@@ -7841,11 +7892,13 @@ function expandEncryptionPermissionEntry(entry) {
7841
7892
  `tinycloud.encryption entries require path to be a networkId URN (got ${JSON.stringify(entry.path)})`
7842
7893
  );
7843
7894
  }
7844
- if (entry.path.includes("/")) {
7895
+ const sharePrefix = entry.path.endsWith("/share/");
7896
+ if (entry.path.includes("/") && !sharePrefix) {
7845
7897
  throw new ManifestValidationError("named keys go in manifest.keys");
7846
7898
  }
7847
7899
  try {
7848
- (0, import_sdk_services2.parseNetworkId)(entry.path);
7900
+ const network = (0, import_sdk_services3.parseNetworkId)(sharePrefix ? entry.path.slice(0, -"/share/".length) : entry.path);
7901
+ if (sharePrefix && network.name !== "default") throw new Error("share prefix requires default network");
7849
7902
  } catch {
7850
7903
  throw new ManifestValidationError("tinycloud.encryption entries require a valid networkId URN");
7851
7904
  }
@@ -7880,6 +7933,9 @@ function expandEncryptionPermissionEntry(entry) {
7880
7933
  seen.add(a);
7881
7934
  }
7882
7935
  }
7936
+ if (sharePrefix && dedupedActions.some((action) => action !== "tinycloud.encryption/decrypt")) {
7937
+ throw new ManifestValidationError("share prefix only supports decrypt");
7938
+ }
7883
7939
  return [
7884
7940
  {
7885
7941
  service: ENCRYPTION_PERMISSION_SERVICE,
@@ -7895,6 +7951,55 @@ function expandEncryptionPermissionEntry(entry) {
7895
7951
  function expandPermissionEntries(entries) {
7896
7952
  return entries.flatMap(expandPermissionEntry);
7897
7953
  }
7954
+ function expandRuntimePermissionEntries(entries, ownerDid) {
7955
+ return entries.flatMap((entry) => {
7956
+ if (entry.service !== ENCRYPTION_PERMISSION_SERVICE || typeof entry.path !== "string" || !entry.path.includes("/") || entry.path.endsWith("/share/")) {
7957
+ return expandPermissionEntry(entry);
7958
+ }
7959
+ let resource;
7960
+ let ownerNetwork;
7961
+ try {
7962
+ resource = (0, import_resource.parseEncryptionResource)(entry.path);
7963
+ if (typeof ownerDid !== "string" || ownerDid.length === 0) throw new Error("missing owner");
7964
+ ownerNetwork = (0, import_resource.parseEncryptionResource)(`urn:tinycloud:encryption:${ownerDid}:default`);
7965
+ } catch {
7966
+ throw new ManifestValidationError("runtime Share key creation requires a canonical current-owner key resource");
7967
+ }
7968
+ if (resource.kind !== "key" || resource.networkId !== ownerNetwork.networkId || !/^share\/[^/]+$/.test(resource.path) || entry.space !== void 0 && entry.space !== ENCRYPTION_MANIFEST_SPACE || !Array.isArray(entry.actions) || entry.actions.length === 0 || entry.actions.some((action) => action !== "key.create" && action !== "tinycloud.encryption/key.create")) {
7969
+ throw new ManifestValidationError("runtime Share key creation requires the current owner's exact default/share/<id> key and key.create only");
7970
+ }
7971
+ return [{
7972
+ ...entry,
7973
+ space: ENCRYPTION_MANIFEST_SPACE,
7974
+ path: `${resource.networkId}/${resource.path}`,
7975
+ actions: ["tinycloud.encryption/key.create"],
7976
+ skipPrefix: true
7977
+ }];
7978
+ });
7979
+ }
7980
+ function expandDelegationPermissionEntries(entries) {
7981
+ return entries.flatMap((entry) => {
7982
+ if (entry.service !== ENCRYPTION_PERMISSION_SERVICE || typeof entry.path !== "string" || !entry.path.includes("/")) {
7983
+ return expandPermissionEntry(entry);
7984
+ }
7985
+ let resource;
7986
+ try {
7987
+ resource = (0, import_resource.parseEncryptionResource)(entry.path);
7988
+ } catch {
7989
+ throw new ManifestValidationError("delegation requires a canonical exact named-key resource");
7990
+ }
7991
+ if (resource.kind !== "key" || !Array.isArray(entry.actions) || entry.actions.length === 0 || entry.actions.some((action) => action !== "decrypt" && action !== "tinycloud.encryption/decrypt")) {
7992
+ throw new ManifestValidationError("named-key delegation requires an exact key and decrypt only");
7993
+ }
7994
+ return [{
7995
+ ...entry,
7996
+ space: ENCRYPTION_MANIFEST_SPACE,
7997
+ path: `${resource.networkId}/${resource.path}`,
7998
+ actions: ["tinycloud.encryption/decrypt"],
7999
+ skipPrefix: true
8000
+ }];
8001
+ });
8002
+ }
7898
8003
  function applyPrefix(prefix, path, skipPrefix) {
7899
8004
  if (skipPrefix) {
7900
8005
  return path;
@@ -8047,13 +8152,13 @@ function validateManifestSecrets(secrets) {
8047
8152
  throw new ManifestValidationError("manifest.secrets must be an object");
8048
8153
  }
8049
8154
  for (const [name2, spec] of Object.entries(secrets)) {
8050
- if (!import_sdk_services2.SECRET_NAME_RE.test(name2)) {
8155
+ if (!import_sdk_services3.SECRET_NAME_RE.test(name2)) {
8051
8156
  throw new ManifestValidationError(
8052
- `manifest.secrets.${name2} must match ${import_sdk_services2.SECRET_NAME_RE.source}`
8157
+ `manifest.secrets.${name2} must match ${import_sdk_services3.SECRET_NAME_RE.source}`
8053
8158
  );
8054
8159
  }
8055
8160
  try {
8056
- (0, import_sdk_services2.resolveSecretPath)(
8161
+ (0, import_sdk_services3.resolveSecretPath)(
8057
8162
  secretNameFromSpec(name2, spec),
8058
8163
  { scope: secretScopeFromSpec(spec) }
8059
8164
  );
@@ -8270,7 +8375,7 @@ function secretEntriesForManifest(secrets) {
8270
8375
  const entries = [];
8271
8376
  for (const [name2, spec] of Object.entries(secrets)) {
8272
8377
  const actions = secretActionsFromSpec(name2, spec);
8273
- const secretPath = (0, import_sdk_services2.resolveSecretPath)(
8378
+ const secretPath = (0, import_sdk_services3.resolveSecretPath)(
8274
8379
  secretNameFromSpec(name2, spec),
8275
8380
  { scope: secretScopeFromSpec(spec) }
8276
8381
  );
@@ -8540,6 +8645,7 @@ function manifestAbilitiesUnion(resolved) {
8540
8645
  }
8541
8646
 
8542
8647
  // src/capabilities.ts
8648
+ var import_resource2 = require("@tinycloud/sdk-services/encryption/resource");
8543
8649
  var PermissionNotInManifestError = class extends Error {
8544
8650
  constructor(missing, granted) {
8545
8651
  super(
@@ -8591,10 +8697,9 @@ function isCapabilitySubset(requested, granted) {
8591
8697
  const grantedActions = matchingScope.flatMap(
8592
8698
  (entry) => expandActionShortNames(entry.service, entry.actions)
8593
8699
  );
8700
+ const namedKeyRequest = req.service === "tinycloud.encryption" && req.path.startsWith("urn:tinycloud:encryption:") && req.path.includes("/");
8594
8701
  const covered = requestedActions.every(
8595
- (requestedAction) => grantedActions.some(
8596
- (grantedAction) => actionContains(grantedAction, requestedAction)
8597
- )
8702
+ (requestedAction) => grantedActions.some((grantedAction) => namedKeyRequest ? grantedAction === requestedAction : actionContains(grantedAction, requestedAction))
8598
8703
  );
8599
8704
  if (!covered) {
8600
8705
  missing.push(cloneEntry(req));
@@ -8609,7 +8714,9 @@ function canonicalizeEntryScopeMatches(requested, granted) {
8609
8714
  if (normalizeSpace(requested.space ?? DEFAULT_MANIFEST_SPACE) !== normalizeSpace(granted.space ?? DEFAULT_MANIFEST_SPACE)) {
8610
8715
  return false;
8611
8716
  }
8612
- if (!pathContains2(granted.path, requested.path)) {
8717
+ const namedKeyRequest = requested.service === "tinycloud.encryption" && requested.path.startsWith("urn:tinycloud:encryption:") && requested.path.includes("/");
8718
+ const coveredPath = namedKeyRequest ? (0, import_resource2.encryptionResourceContains)(granted.path, requested.path) : pathContains2(granted.path, requested.path);
8719
+ if (!coveredPath) {
8613
8720
  return false;
8614
8721
  }
8615
8722
  if (!recapCaveatsEqual(requested.caveats, granted.caveats)) {
@@ -8721,7 +8828,7 @@ function parseRecapCapabilities(parseWasm, siwe) {
8721
8828
  var import_ed255197 = require("@noble/curves/ed25519");
8722
8829
 
8723
8830
  // src/delegations/ShareRecipientClient.ts
8724
- var import_sdk_services3 = require("@tinycloud/sdk-services");
8831
+ var import_sdk_services4 = require("@tinycloud/sdk-services");
8725
8832
  var import_ed255196 = require("@noble/curves/ed25519");
8726
8833
  var import_sha2565 = require("@noble/hashes/sha256");
8727
8834
 
@@ -9908,9 +10015,9 @@ function redactedCode(error) {
9908
10015
  if (error instanceof ShareConflict) return error.code;
9909
10016
  const code3 = error && typeof error === "object" && "code" in error ? error.code : void 0;
9910
10017
  if (typeof code3 !== "string") return "SHARE_INVALID";
9911
- if (code3 === import_sdk_services3.ErrorCodes.KV_PRECONDITION_FAILED || code3 === "412") return "SHARE_CONFLICT";
9912
- if (code3 === import_sdk_services3.ErrorCodes.NODE_BUSY || code3 === import_sdk_services3.ErrorCodes.REQUEST_TIMEOUT) return "SHARE_OFFLINE";
9913
- if (code3 === import_sdk_services3.ErrorCodes.OUTCOME_UNKNOWN) return "SHARE_WRITE_FAILED";
10018
+ if (code3 === import_sdk_services4.ErrorCodes.KV_PRECONDITION_FAILED || code3 === "412") return "SHARE_CONFLICT";
10019
+ if (code3 === import_sdk_services4.ErrorCodes.NODE_BUSY || code3 === import_sdk_services4.ErrorCodes.REQUEST_TIMEOUT) return "SHARE_OFFLINE";
10020
+ if (code3 === import_sdk_services4.ErrorCodes.OUTCOME_UNKNOWN) return "SHARE_WRITE_FAILED";
9914
10021
  if (code3 === "KV_NOT_FOUND" || code3 === "NOT_FOUND" || code3 === "404") return "SHARE_NOT_FOUND";
9915
10022
  if (code3.includes("EXPIRED") || code3 === "expired") return "SHARE_EXPIRED";
9916
10023
  if (code3.includes("REVOK")) return "SHARE_REVOKED";
@@ -10149,7 +10256,7 @@ var ShareRecipientClient = class {
10149
10256
  if (portableDelegation !== void 0 && kv !== void 0) {
10150
10257
  const result2 = await kv.put(resolvedPath, bytes2, { contentType: input.contentType ?? envelope.content.mimeType, ifMatch: input.etag });
10151
10258
  if (!result2.ok) {
10152
- if (result2.error.code === import_sdk_services3.ErrorCodes.KV_PRECONDITION_FAILED) throw new ShareConflict(resolvedPath, result2.error.meta?.etag);
10259
+ if (result2.error.code === import_sdk_services4.ErrorCodes.KV_PRECONDITION_FAILED) throw new ShareConflict(resolvedPath, result2.error.meta?.etag);
10153
10260
  throw result2.error;
10154
10261
  }
10155
10262
  return { etag: result2.data.headers.etag };
@@ -10157,7 +10264,7 @@ var ShareRecipientClient = class {
10157
10264
  if (policySession !== void 0) return this.nativeSave(envelope, policySession, resolvedPath, bytes2, input);
10158
10265
  const result = await kv.put(resolvedPath, bytes2, { contentType: input.contentType ?? envelope.content.mimeType, ifMatch: input.etag });
10159
10266
  if (!result.ok) {
10160
- if (result.error.code === import_sdk_services3.ErrorCodes.KV_PRECONDITION_FAILED) throw new ShareConflict(resolvedPath, result.error.meta?.etag);
10267
+ if (result.error.code === import_sdk_services4.ErrorCodes.KV_PRECONDITION_FAILED) throw new ShareConflict(resolvedPath, result.error.meta?.etag);
10161
10268
  throw result.error;
10162
10269
  }
10163
10270
  return { etag: result.data.headers.etag };
@@ -10241,8 +10348,8 @@ var ShareRecipientClient = class {
10241
10348
  if (this.options.createKVService !== void 0) {
10242
10349
  return this.options.createKVService({ hosts: [origin2], session, invoke, fetch: this.fetchFn });
10243
10350
  }
10244
- const context = new import_sdk_services3.ServiceContext({ hosts: [origin2], session, invoke, fetch: this.fetchFn });
10245
- const service = new import_sdk_services3.KVService({ prefix: "" });
10351
+ const context = new import_sdk_services4.ServiceContext({ hosts: [origin2], session, invoke, fetch: this.fetchFn });
10352
+ const service = new import_sdk_services4.KVService({ prefix: "" });
10246
10353
  context.registerService("kv", service);
10247
10354
  service.initialize(context);
10248
10355
  return service;
@@ -12790,14 +12897,14 @@ function markDelegationTerminal(token, key) {
12790
12897
  }
12791
12898
 
12792
12899
  // src/networkId.ts
12793
- var import_sdk_services4 = require("@tinycloud/sdk-services");
12900
+ var import_sdk_services5 = require("@tinycloud/sdk-services");
12794
12901
  function canonicalizeNetworkId(networkId) {
12795
- const parsed = (0, import_sdk_services4.parseNetworkId)(networkId);
12796
- return (0, import_sdk_services4.buildNetworkId)(canonicalizeDid(parsed.ownerDid), parsed.name);
12902
+ const parsed = (0, import_sdk_services5.parseNetworkId)(networkId);
12903
+ return (0, import_sdk_services5.buildNetworkId)(canonicalizeDid(parsed.ownerDid), parsed.name);
12797
12904
  }
12798
12905
  function parseCanonicalNetworkId(networkId) {
12799
12906
  const canonical = canonicalizeNetworkId(networkId);
12800
- return (0, import_sdk_services4.parseNetworkId)(canonical);
12907
+ return (0, import_sdk_services5.parseNetworkId)(canonical);
12801
12908
  }
12802
12909
 
12803
12910
  // src/storage.schema.ts
@@ -12905,10 +13012,10 @@ function validatePersistedSessionData(data) {
12905
13012
  }
12906
13013
 
12907
13014
  // src/TinyCloud.ts
12908
- var import_sdk_services6 = require("@tinycloud/sdk-services");
13015
+ var import_sdk_services7 = require("@tinycloud/sdk-services");
12909
13016
 
12910
13017
  // src/spaces/SpaceService.ts
12911
- var import_sdk_services5 = require("@tinycloud/sdk-services");
13018
+ var import_sdk_services6 = require("@tinycloud/sdk-services");
12912
13019
 
12913
13020
  // src/spaces/Space.ts
12914
13021
  function unavailableSecretsService() {
@@ -13343,8 +13450,8 @@ var SpaceService = class {
13343
13450
  */
13344
13451
  async list() {
13345
13452
  if (!this.session) {
13346
- return (0, import_sdk_services5.err)(
13347
- (0, import_sdk_services5.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
13453
+ return (0, import_sdk_services6.err)(
13454
+ (0, import_sdk_services6.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
13348
13455
  );
13349
13456
  }
13350
13457
  try {
@@ -13353,8 +13460,8 @@ var SpaceService = class {
13353
13460
  if (ownedResult.ok) {
13354
13461
  spaces.push(...ownedResult.data);
13355
13462
  } else {
13356
- const verdict = (0, import_sdk_services5.authorizationVerdictOf)(ownedResult.error);
13357
- if (verdict === "unauthenticated" || verdict === "forbidden") return (0, import_sdk_services5.err)(ownedResult.error);
13463
+ const verdict = (0, import_sdk_services6.authorizationVerdictOf)(ownedResult.error);
13464
+ if (verdict === "unauthenticated" || verdict === "forbidden") return (0, import_sdk_services6.err)(ownedResult.error);
13358
13465
  }
13359
13466
  if (this.capabilityRegistry) {
13360
13467
  const delegatedSpaces = this.discoverDelegatedSpaces();
@@ -13366,10 +13473,10 @@ var SpaceService = class {
13366
13473
  this.notifySpaceRegistered(space);
13367
13474
  }
13368
13475
  }
13369
- return (0, import_sdk_services5.ok)(uniqueSpaces);
13476
+ return (0, import_sdk_services6.ok)(uniqueSpaces);
13370
13477
  } catch (error) {
13371
- return (0, import_sdk_services5.err)(
13372
- (0, import_sdk_services5.serviceError)(
13478
+ return (0, import_sdk_services6.err)(
13479
+ (0, import_sdk_services6.serviceError)(
13373
13480
  SpaceErrorCodes.NETWORK_ERROR,
13374
13481
  `Failed to list spaces: ${String(error)}`,
13375
13482
  SERVICE_NAME,
@@ -13389,7 +13496,7 @@ var SpaceService = class {
13389
13496
  headers
13390
13497
  });
13391
13498
  if (!response.ok) {
13392
- return (0, import_sdk_services5.err)(await serviceHttpError(
13499
+ return (0, import_sdk_services6.err)(await serviceHttpError(
13393
13500
  response,
13394
13501
  SpaceErrorCodes.NETWORK_ERROR,
13395
13502
  "Failed to list owned spaces",
@@ -13399,8 +13506,8 @@ var SpaceService = class {
13399
13506
  const rawData = await response.json();
13400
13507
  const validationResult = validateServerOwnedSpacesResponse(rawData);
13401
13508
  if (!validationResult.ok) {
13402
- return (0, import_sdk_services5.err)(
13403
- (0, import_sdk_services5.serviceError)(
13509
+ return (0, import_sdk_services6.err)(
13510
+ (0, import_sdk_services6.serviceError)(
13404
13511
  SpaceErrorCodes.NETWORK_ERROR,
13405
13512
  validationResult.error.message,
13406
13513
  SERVICE_NAME,
@@ -13416,10 +13523,10 @@ var SpaceService = class {
13416
13523
  permissions: ["*"]
13417
13524
  // Full permissions for owned spaces
13418
13525
  }));
13419
- return (0, import_sdk_services5.ok)(spaces);
13526
+ return (0, import_sdk_services6.ok)(spaces);
13420
13527
  } catch (error) {
13421
- return (0, import_sdk_services5.err)(
13422
- (0, import_sdk_services5.serviceError)(
13528
+ return (0, import_sdk_services6.err)(
13529
+ (0, import_sdk_services6.serviceError)(
13423
13530
  SpaceErrorCodes.NETWORK_ERROR,
13424
13531
  `Network error listing owned spaces: ${String(error)}`,
13425
13532
  SERVICE_NAME,
@@ -13500,13 +13607,13 @@ var SpaceService = class {
13500
13607
  */
13501
13608
  async create(name2) {
13502
13609
  if (!this.session) {
13503
- return (0, import_sdk_services5.err)(
13504
- (0, import_sdk_services5.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
13610
+ return (0, import_sdk_services6.err)(
13611
+ (0, import_sdk_services6.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
13505
13612
  );
13506
13613
  }
13507
13614
  if (!name2 || !/^[a-zA-Z0-9_-]+$/.test(name2)) {
13508
- return (0, import_sdk_services5.err)(
13509
- (0, import_sdk_services5.serviceError)(
13615
+ return (0, import_sdk_services6.err)(
13616
+ (0, import_sdk_services6.serviceError)(
13510
13617
  SpaceErrorCodes.INVALID_NAME,
13511
13618
  "Space name must contain only alphanumeric characters, underscores, and hyphens",
13512
13619
  SERVICE_NAME
@@ -13522,14 +13629,14 @@ var SpaceService = class {
13522
13629
  });
13523
13630
  if (!response.ok) {
13524
13631
  if (response.status === 409) {
13525
- return (0, import_sdk_services5.err)(await serviceHttpError(
13632
+ return (0, import_sdk_services6.err)(await serviceHttpError(
13526
13633
  response,
13527
13634
  SpaceErrorCodes.ALREADY_EXISTS,
13528
13635
  `Space "${name2}" already exists`,
13529
13636
  SERVICE_NAME
13530
13637
  ));
13531
13638
  }
13532
- return (0, import_sdk_services5.err)(await serviceHttpError(
13639
+ return (0, import_sdk_services6.err)(await serviceHttpError(
13533
13640
  response,
13534
13641
  SpaceErrorCodes.CREATION_FAILED,
13535
13642
  "Failed to create space",
@@ -13539,8 +13646,8 @@ var SpaceService = class {
13539
13646
  const rawData = await response.json();
13540
13647
  const validationResult = validateServerCreateSpaceResponse(rawData);
13541
13648
  if (!validationResult.ok) {
13542
- return (0, import_sdk_services5.err)(
13543
- (0, import_sdk_services5.serviceError)(
13649
+ return (0, import_sdk_services6.err)(
13650
+ (0, import_sdk_services6.serviceError)(
13544
13651
  SpaceErrorCodes.CREATION_FAILED,
13545
13652
  validationResult.error.message,
13546
13653
  SERVICE_NAME,
@@ -13557,10 +13664,10 @@ var SpaceService = class {
13557
13664
  };
13558
13665
  this.infoCache.set(spaceInfo.id, { info: spaceInfo, cachedAt: Date.now() });
13559
13666
  this.notifySpaceRegistered(spaceInfo);
13560
- return (0, import_sdk_services5.ok)(spaceInfo);
13667
+ return (0, import_sdk_services6.ok)(spaceInfo);
13561
13668
  } catch (error) {
13562
- return (0, import_sdk_services5.err)(
13563
- (0, import_sdk_services5.serviceError)(
13669
+ return (0, import_sdk_services6.err)(
13670
+ (0, import_sdk_services6.serviceError)(
13564
13671
  SpaceErrorCodes.NETWORK_ERROR,
13565
13672
  `Network error creating space: ${String(error)}`,
13566
13673
  SERVICE_NAME,
@@ -13630,10 +13737,10 @@ var SpaceService = class {
13630
13737
  const spaceId = this.resolveSpaceId(nameOrUri);
13631
13738
  const cached = this.infoCache.get(spaceId);
13632
13739
  if (cached && Date.now() - cached.cachedAt < this.cacheTTL) {
13633
- return (0, import_sdk_services5.ok)(true);
13740
+ return (0, import_sdk_services6.ok)(true);
13634
13741
  }
13635
13742
  const infoResult = await this.getSpaceInfo(spaceId);
13636
- return (0, import_sdk_services5.ok)(infoResult.ok);
13743
+ return (0, import_sdk_services6.ok)(infoResult.ok);
13637
13744
  }
13638
13745
  // ===========================================================================
13639
13746
  // Space Info
@@ -13644,11 +13751,11 @@ var SpaceService = class {
13644
13751
  async getSpaceInfo(spaceId) {
13645
13752
  const cached = this.infoCache.get(spaceId);
13646
13753
  if (cached && Date.now() - cached.cachedAt < this.cacheTTL) {
13647
- return (0, import_sdk_services5.ok)(cached.info);
13754
+ return (0, import_sdk_services6.ok)(cached.info);
13648
13755
  }
13649
13756
  if (!this.session) {
13650
- return (0, import_sdk_services5.err)(
13651
- (0, import_sdk_services5.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
13757
+ return (0, import_sdk_services6.err)(
13758
+ (0, import_sdk_services6.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
13652
13759
  );
13653
13760
  }
13654
13761
  try {
@@ -13660,14 +13767,14 @@ var SpaceService = class {
13660
13767
  });
13661
13768
  if (!response.ok) {
13662
13769
  if (response.status === 404) {
13663
- return (0, import_sdk_services5.err)(await serviceHttpError(
13770
+ return (0, import_sdk_services6.err)(await serviceHttpError(
13664
13771
  response,
13665
13772
  SpaceErrorCodes.NOT_FOUND,
13666
13773
  `Space not found: ${spaceId}`,
13667
13774
  SERVICE_NAME
13668
13775
  ));
13669
13776
  }
13670
- return (0, import_sdk_services5.err)(await serviceHttpError(
13777
+ return (0, import_sdk_services6.err)(await serviceHttpError(
13671
13778
  response,
13672
13779
  SpaceErrorCodes.NETWORK_ERROR,
13673
13780
  "Failed to get space info",
@@ -13677,8 +13784,8 @@ var SpaceService = class {
13677
13784
  const rawData = await response.json();
13678
13785
  const validationResult = validateServerSpaceInfoResponse(rawData);
13679
13786
  if (!validationResult.ok) {
13680
- return (0, import_sdk_services5.err)(
13681
- (0, import_sdk_services5.serviceError)(
13787
+ return (0, import_sdk_services6.err)(
13788
+ (0, import_sdk_services6.serviceError)(
13682
13789
  SpaceErrorCodes.NETWORK_ERROR,
13683
13790
  validationResult.error.message,
13684
13791
  SERVICE_NAME,
@@ -13696,10 +13803,10 @@ var SpaceService = class {
13696
13803
  expiresAt: data.expiresAt ? new Date(data.expiresAt) : void 0
13697
13804
  };
13698
13805
  this.infoCache.set(spaceId, { info: spaceInfo, cachedAt: Date.now() });
13699
- return (0, import_sdk_services5.ok)(spaceInfo);
13806
+ return (0, import_sdk_services6.ok)(spaceInfo);
13700
13807
  } catch (error) {
13701
- return (0, import_sdk_services5.err)(
13702
- (0, import_sdk_services5.serviceError)(
13808
+ return (0, import_sdk_services6.err)(
13809
+ (0, import_sdk_services6.serviceError)(
13703
13810
  SpaceErrorCodes.NETWORK_ERROR,
13704
13811
  `Network error getting space info: ${String(error)}`,
13705
13812
  SERVICE_NAME,
@@ -13784,7 +13891,7 @@ var SpaceService = class {
13784
13891
  headers
13785
13892
  });
13786
13893
  if (!response.ok) {
13787
- return (0, import_sdk_services5.err)(await serviceHttpError(
13894
+ return (0, import_sdk_services6.err)(await serviceHttpError(
13788
13895
  response,
13789
13896
  SpaceErrorCodes.NETWORK_ERROR,
13790
13897
  "Failed to list delegations",
@@ -13794,8 +13901,8 @@ var SpaceService = class {
13794
13901
  const rawData = await response.json();
13795
13902
  const validationResult = validateServerDelegationsResponse(rawData);
13796
13903
  if (!validationResult.ok) {
13797
- return (0, import_sdk_services5.err)(
13798
- (0, import_sdk_services5.serviceError)(
13904
+ return (0, import_sdk_services6.err)(
13905
+ (0, import_sdk_services6.serviceError)(
13799
13906
  SpaceErrorCodes.NETWORK_ERROR,
13800
13907
  validationResult.error.message,
13801
13908
  SERVICE_NAME,
@@ -13804,10 +13911,10 @@ var SpaceService = class {
13804
13911
  );
13805
13912
  }
13806
13913
  const delegations = transformServerDelegations(validationResult.data, spaceId);
13807
- return (0, import_sdk_services5.ok)(delegations);
13914
+ return (0, import_sdk_services6.ok)(delegations);
13808
13915
  } catch (error) {
13809
- return (0, import_sdk_services5.err)(
13810
- (0, import_sdk_services5.serviceError)(
13916
+ return (0, import_sdk_services6.err)(
13917
+ (0, import_sdk_services6.serviceError)(
13811
13918
  SpaceErrorCodes.NETWORK_ERROR,
13812
13919
  `Network error listing delegations: ${String(error)}`,
13813
13920
  SERVICE_NAME
@@ -13837,7 +13944,7 @@ var SpaceService = class {
13837
13944
  headers
13838
13945
  });
13839
13946
  if (!response.ok) {
13840
- return (0, import_sdk_services5.err)(await serviceHttpError(
13947
+ return (0, import_sdk_services6.err)(await serviceHttpError(
13841
13948
  response,
13842
13949
  SpaceErrorCodes.NETWORK_ERROR,
13843
13950
  "Failed to list received delegations",
@@ -13847,8 +13954,8 @@ var SpaceService = class {
13847
13954
  const rawData = await response.json();
13848
13955
  const validationResult = validateServerDelegationsResponse(rawData);
13849
13956
  if (!validationResult.ok) {
13850
- return (0, import_sdk_services5.err)(
13851
- (0, import_sdk_services5.serviceError)(
13957
+ return (0, import_sdk_services6.err)(
13958
+ (0, import_sdk_services6.serviceError)(
13852
13959
  SpaceErrorCodes.NETWORK_ERROR,
13853
13960
  validationResult.error.message,
13854
13961
  SERVICE_NAME,
@@ -13857,10 +13964,10 @@ var SpaceService = class {
13857
13964
  );
13858
13965
  }
13859
13966
  const delegations = transformServerDelegations(validationResult.data, spaceId);
13860
- return (0, import_sdk_services5.ok)(delegations);
13967
+ return (0, import_sdk_services6.ok)(delegations);
13861
13968
  } catch (error) {
13862
- return (0, import_sdk_services5.err)(
13863
- (0, import_sdk_services5.serviceError)(
13969
+ return (0, import_sdk_services6.err)(
13970
+ (0, import_sdk_services6.serviceError)(
13864
13971
  SpaceErrorCodes.NETWORK_ERROR,
13865
13972
  `Network error listing received delegations: ${String(error)}`,
13866
13973
  SERVICE_NAME
@@ -13872,8 +13979,8 @@ var SpaceService = class {
13872
13979
  if (self.createDelegationFn) {
13873
13980
  return self.createDelegationFn({ ...params, spaceId });
13874
13981
  }
13875
- return (0, import_sdk_services5.err)(
13876
- (0, import_sdk_services5.serviceError)(
13982
+ return (0, import_sdk_services6.err)(
13983
+ (0, import_sdk_services6.serviceError)(
13877
13984
  SpaceErrorCodes.NOT_INITIALIZED,
13878
13985
  "Delegation creation requires a createDelegation function. This should be provided by the platform SDK (web-sdk or node-sdk).",
13879
13986
  SERVICE_NAME
@@ -13894,17 +14001,17 @@ var SpaceService = class {
13894
14001
  body: JSON.stringify({ cid: cid2, spaceId })
13895
14002
  });
13896
14003
  if (!response.ok) {
13897
- return (0, import_sdk_services5.err)(await serviceHttpError(
14004
+ return (0, import_sdk_services6.err)(await serviceHttpError(
13898
14005
  response,
13899
14006
  SpaceErrorCodes.NETWORK_ERROR,
13900
14007
  "Failed to revoke delegation",
13901
14008
  SERVICE_NAME
13902
14009
  ));
13903
14010
  }
13904
- return (0, import_sdk_services5.ok)(void 0);
14011
+ return (0, import_sdk_services6.ok)(void 0);
13905
14012
  } catch (error) {
13906
- return (0, import_sdk_services5.err)(
13907
- (0, import_sdk_services5.serviceError)(
14013
+ return (0, import_sdk_services6.err)(
14014
+ (0, import_sdk_services6.serviceError)(
13908
14015
  SpaceErrorCodes.NETWORK_ERROR,
13909
14016
  `Network error revoking delegation: ${String(error)}`,
13910
14017
  SERVICE_NAME
@@ -13927,18 +14034,18 @@ var SpaceService = class {
13927
14034
  if (self.sharingService) {
13928
14035
  const result = await self.sharingService.generate(params);
13929
14036
  if (!result.ok) {
13930
- return (0, import_sdk_services5.err)(
13931
- (0, import_sdk_services5.serviceError)(
14037
+ return (0, import_sdk_services6.err)(
14038
+ (0, import_sdk_services6.serviceError)(
13932
14039
  SpaceErrorCodes.NETWORK_ERROR,
13933
14040
  result.error.message || "Failed to generate share link",
13934
14041
  SERVICE_NAME
13935
14042
  )
13936
14043
  );
13937
14044
  }
13938
- return (0, import_sdk_services5.ok)(result.data);
14045
+ return (0, import_sdk_services6.ok)(result.data);
13939
14046
  }
13940
- return (0, import_sdk_services5.err)(
13941
- (0, import_sdk_services5.serviceError)(
14047
+ return (0, import_sdk_services6.err)(
14048
+ (0, import_sdk_services6.serviceError)(
13942
14049
  SpaceErrorCodes.NOT_INITIALIZED,
13943
14050
  "SharingService not configured. V2 sharing requires a SharingService instance.",
13944
14051
  SERVICE_NAME
@@ -13946,8 +14053,8 @@ var SpaceService = class {
13946
14053
  );
13947
14054
  },
13948
14055
  async list() {
13949
- return (0, import_sdk_services5.err)(
13950
- (0, import_sdk_services5.serviceError)(
14056
+ return (0, import_sdk_services6.err)(
14057
+ (0, import_sdk_services6.serviceError)(
13951
14058
  SpaceErrorCodes.NOT_INITIALIZED,
13952
14059
  "Listing share links is not supported in v2. Share links are self-contained tokens that are not tracked on the server.",
13953
14060
  SERVICE_NAME
@@ -13955,8 +14062,8 @@ var SpaceService = class {
13955
14062
  );
13956
14063
  },
13957
14064
  async revoke(token) {
13958
- return (0, import_sdk_services5.err)(
13959
- (0, import_sdk_services5.serviceError)(
14065
+ return (0, import_sdk_services6.err)(
14066
+ (0, import_sdk_services6.serviceError)(
13960
14067
  SpaceErrorCodes.NOT_INITIALIZED,
13961
14068
  "Revoking share links by token is not supported in v2. To revoke access, revoke the underlying delegation using space.delegations.revoke(cid).",
13962
14069
  SERVICE_NAME
@@ -14016,7 +14123,7 @@ var TinyCloud = class _TinyCloud {
14016
14123
  "hosts are required to initialize services. Provide them via config.hosts or initializeServices()."
14017
14124
  );
14018
14125
  }
14019
- this._serviceContext = new import_sdk_services6.ServiceContext({
14126
+ this._serviceContext = new import_sdk_services7.ServiceContext({
14020
14127
  invoke: effectiveInvoke,
14021
14128
  invokeAny: this.config.invokeAny,
14022
14129
  fetch: fetchFn ?? this.config.fetch ?? globalThis.fetch.bind(globalThis),
@@ -14025,10 +14132,10 @@ var TinyCloud = class _TinyCloud {
14025
14132
  telemetry: this.config.telemetry
14026
14133
  });
14027
14134
  const serviceConstructors = {
14028
- kv: import_sdk_services6.KVService,
14029
- sql: import_sdk_services6.SQLService,
14030
- duckdb: import_sdk_services6.DuckDbService,
14031
- hooks: import_sdk_services6.HooksService,
14135
+ kv: import_sdk_services7.KVService,
14136
+ sql: import_sdk_services7.SQLService,
14137
+ duckdb: import_sdk_services7.DuckDbService,
14138
+ hooks: import_sdk_services7.HooksService,
14032
14139
  ...this.config.services
14033
14140
  };
14034
14141
  for (const [name2, ServiceClass] of Object.entries(serviceConstructors)) {
@@ -14292,18 +14399,18 @@ var TinyCloud = class _TinyCloud {
14292
14399
  const address = this.address();
14293
14400
  const chainId = this.chainId();
14294
14401
  if (!address || !chainId) {
14295
- return (0, import_sdk_services6.err)(
14296
- (0, import_sdk_services6.serviceError)(
14297
- import_sdk_services6.ErrorCodes.AUTH_REQUIRED,
14402
+ return (0, import_sdk_services7.err)(
14403
+ (0, import_sdk_services7.serviceError)(
14404
+ import_sdk_services7.ErrorCodes.AUTH_REQUIRED,
14298
14405
  "Must be signed in to ensure public space",
14299
14406
  "public-space"
14300
14407
  )
14301
14408
  );
14302
14409
  }
14303
14410
  if (!this._serviceContext) {
14304
- return (0, import_sdk_services6.err)(
14305
- (0, import_sdk_services6.serviceError)(
14306
- import_sdk_services6.ErrorCodes.AUTH_REQUIRED,
14411
+ return (0, import_sdk_services7.err)(
14412
+ (0, import_sdk_services7.serviceError)(
14413
+ import_sdk_services7.ErrorCodes.AUTH_REQUIRED,
14307
14414
  "Services not initialized. Call initializeServices() or signIn() first.",
14308
14415
  "public-space"
14309
14416
  )
@@ -14313,9 +14420,9 @@ var TinyCloud = class _TinyCloud {
14313
14420
  try {
14314
14421
  const session = this._serviceContext.session;
14315
14422
  if (!session) {
14316
- return (0, import_sdk_services6.err)(
14317
- (0, import_sdk_services6.serviceError)(
14318
- import_sdk_services6.ErrorCodes.AUTH_REQUIRED,
14423
+ return (0, import_sdk_services7.err)(
14424
+ (0, import_sdk_services7.serviceError)(
14425
+ import_sdk_services7.ErrorCodes.AUTH_REQUIRED,
14319
14426
  "No active session",
14320
14427
  "public-space"
14321
14428
  )
@@ -14332,7 +14439,7 @@ var TinyCloud = class _TinyCloud {
14332
14439
  { method: "POST", headers, body: JSON.stringify({ spaceId }) }
14333
14440
  );
14334
14441
  if (response.ok) {
14335
- return (0, import_sdk_services6.ok)(void 0);
14442
+ return (0, import_sdk_services7.ok)(void 0);
14336
14443
  }
14337
14444
  if (response.status === 404) {
14338
14445
  const createHeaders = this._serviceContext.invoke(
@@ -14351,27 +14458,27 @@ var TinyCloud = class _TinyCloud {
14351
14458
  );
14352
14459
  if (!createResponse.ok) {
14353
14460
  if (createResponse.status === 409) {
14354
- return (0, import_sdk_services6.ok)(void 0);
14461
+ return (0, import_sdk_services7.ok)(void 0);
14355
14462
  }
14356
- return (0, import_sdk_services6.err)(await serviceHttpError(
14463
+ return (0, import_sdk_services7.err)(await serviceHttpError(
14357
14464
  createResponse,
14358
- import_sdk_services6.ErrorCodes.NETWORK_ERROR,
14465
+ import_sdk_services7.ErrorCodes.NETWORK_ERROR,
14359
14466
  "Failed to create public space",
14360
14467
  "public-space"
14361
14468
  ));
14362
14469
  }
14363
- return (0, import_sdk_services6.ok)(void 0);
14470
+ return (0, import_sdk_services7.ok)(void 0);
14364
14471
  }
14365
- return (0, import_sdk_services6.err)(await serviceHttpError(
14472
+ return (0, import_sdk_services7.err)(await serviceHttpError(
14366
14473
  response,
14367
- import_sdk_services6.ErrorCodes.NETWORK_ERROR,
14474
+ import_sdk_services7.ErrorCodes.NETWORK_ERROR,
14368
14475
  "Failed to check public space",
14369
14476
  "public-space"
14370
14477
  ));
14371
14478
  } catch (error) {
14372
- return (0, import_sdk_services6.err)(
14373
- (0, import_sdk_services6.serviceError)(
14374
- import_sdk_services6.ErrorCodes.NETWORK_ERROR,
14479
+ return (0, import_sdk_services7.err)(
14480
+ (0, import_sdk_services7.serviceError)(
14481
+ import_sdk_services7.ErrorCodes.NETWORK_ERROR,
14375
14482
  `Network error ensuring public space: ${String(error)}`,
14376
14483
  "public-space",
14377
14484
  { cause: error instanceof Error ? error : void 0 }
@@ -14404,8 +14511,8 @@ var TinyCloud = class _TinyCloud {
14404
14511
  if (!session) {
14405
14512
  throw new Error("No active session. Sign in first.");
14406
14513
  }
14407
- const publicKV = new import_sdk_services6.KVService({ prefix: "" });
14408
- const publicContext = new import_sdk_services6.ServiceContext({
14514
+ const publicKV = new import_sdk_services7.KVService({ prefix: "" });
14515
+ const publicContext = new import_sdk_services7.ServiceContext({
14409
14516
  invoke: this._serviceContext.invoke,
14410
14517
  fetch: this._serviceContext.fetch,
14411
14518
  hosts: this._serviceContext.hosts,
@@ -14438,16 +14545,16 @@ var TinyCloud = class _TinyCloud {
14438
14545
  const response = await doFetch(url, { method: "GET" });
14439
14546
  if (!response.ok) {
14440
14547
  if (response.status === 404) {
14441
- return (0, import_sdk_services6.err)(await serviceHttpError(
14548
+ return (0, import_sdk_services7.err)(await serviceHttpError(
14442
14549
  response,
14443
- import_sdk_services6.ErrorCodes.NOT_FOUND,
14550
+ import_sdk_services7.ErrorCodes.NOT_FOUND,
14444
14551
  `Key not found: ${key} in space ${spaceId}`,
14445
14552
  "public-space"
14446
14553
  ));
14447
14554
  }
14448
- return (0, import_sdk_services6.err)(await serviceHttpError(
14555
+ return (0, import_sdk_services7.err)(await serviceHttpError(
14449
14556
  response,
14450
- import_sdk_services6.ErrorCodes.NETWORK_ERROR,
14557
+ import_sdk_services7.ErrorCodes.NETWORK_ERROR,
14451
14558
  "Failed to read public space",
14452
14559
  "public-space"
14453
14560
  ));
@@ -14464,11 +14571,11 @@ var TinyCloud = class _TinyCloud {
14464
14571
  data = text3;
14465
14572
  }
14466
14573
  }
14467
- return (0, import_sdk_services6.ok)(data);
14574
+ return (0, import_sdk_services7.ok)(data);
14468
14575
  } catch (error) {
14469
- return (0, import_sdk_services6.err)(
14470
- (0, import_sdk_services6.serviceError)(
14471
- import_sdk_services6.ErrorCodes.NETWORK_ERROR,
14576
+ return (0, import_sdk_services7.err)(
14577
+ (0, import_sdk_services7.serviceError)(
14578
+ import_sdk_services7.ErrorCodes.NETWORK_ERROR,
14472
14579
  `Network error reading public space: ${String(error)}`,
14473
14580
  "public-space",
14474
14581
  { cause: error instanceof Error ? error : void 0 }
@@ -14494,7 +14601,7 @@ var TinyCloud = class _TinyCloud {
14494
14601
  };
14495
14602
 
14496
14603
  // src/account/AccountService.ts
14497
- var import_sdk_services7 = require("@tinycloud/sdk-services");
14604
+ var import_sdk_services8 = require("@tinycloud/sdk-services");
14498
14605
  var import_bootstrap3 = require("@tinycloud/bootstrap");
14499
14606
  var SERVICE_NAME2 = "account";
14500
14607
  var ACCOUNT_INDEX_DB = "account";
@@ -14542,7 +14649,7 @@ var AccountService = class {
14542
14649
  applications.push(applicationFromRecord(key, loaded.data.data));
14543
14650
  }
14544
14651
  applications.sort((a, b) => a.appId.localeCompare(b.appId));
14545
- return (0, import_sdk_services7.ok)(applications);
14652
+ return (0, import_sdk_services8.ok)(applications);
14546
14653
  },
14547
14654
  get: async (appId) => {
14548
14655
  const kvResult = this.accountKV();
@@ -14550,14 +14657,14 @@ var AccountService = class {
14550
14657
  const key = applicationKey(appId);
14551
14658
  const loaded = await kvResult.data.get(key);
14552
14659
  if (!loaded.ok) return accountErr(loaded.error);
14553
- return (0, import_sdk_services7.ok)(applicationFromRecord(key, loaded.data.data));
14660
+ return (0, import_sdk_services8.ok)(applicationFromRecord(key, loaded.data.data));
14554
14661
  },
14555
14662
  register: async (manifest, options2 = {}) => {
14556
14663
  const manifests = Array.isArray(manifest) ? manifest : [manifest];
14557
14664
  const request = composeManifestRequest(manifests);
14558
14665
  if (request.registryRecords.length === 0) {
14559
- return (0, import_sdk_services7.err)(
14560
- (0, import_sdk_services7.serviceError)(
14666
+ return (0, import_sdk_services8.err)(
14667
+ (0, import_sdk_services8.serviceError)(
14561
14668
  "INVALID_MANIFEST",
14562
14669
  "Manifest did not produce an account application registry record",
14563
14670
  SERVICE_NAME2
@@ -14591,7 +14698,7 @@ var AccountService = class {
14591
14698
  registered = applicationFromRecord(record2.key, stored);
14592
14699
  await this.upsertApplicationIndexQuietly(registered);
14593
14700
  }
14594
- return (0, import_sdk_services7.ok)(registered);
14701
+ return (0, import_sdk_services8.ok)(registered);
14595
14702
  },
14596
14703
  remove: async (appId) => {
14597
14704
  const kvResult = this.accountKV();
@@ -14599,7 +14706,7 @@ var AccountService = class {
14599
14706
  const removed = await kvResult.data.delete(applicationKey(appId));
14600
14707
  if (!removed.ok) return accountErr(removed.error);
14601
14708
  await this.deleteApplicationIndexQuietly(appId);
14602
- return (0, import_sdk_services7.ok)(void 0);
14709
+ return (0, import_sdk_services8.ok)(void 0);
14603
14710
  }
14604
14711
  };
14605
14712
  this.spaces = {
@@ -14613,7 +14720,7 @@ var AccountService = class {
14613
14720
  if (canonical.data.allRegistered && options2.refreshIndex !== false) {
14614
14721
  await this.replaceSpacesIndexQuietly(canonical.data.spaces);
14615
14722
  }
14616
- return (0, import_sdk_services7.ok)(canonical.data.spaces);
14723
+ return (0, import_sdk_services8.ok)(canonical.data.spaces);
14617
14724
  }
14618
14725
  const kvResult = this.accountKV();
14619
14726
  if (!kvResult.ok) return kvResult;
@@ -14626,14 +14733,14 @@ var AccountService = class {
14626
14733
  spaces.push(spaceFromRecord(key, loaded.data.data));
14627
14734
  }
14628
14735
  spaces.sort((a, b) => a.name.localeCompare(b.name) || a.spaceId.localeCompare(b.spaceId));
14629
- return (0, import_sdk_services7.ok)(spaces);
14736
+ return (0, import_sdk_services8.ok)(spaces);
14630
14737
  },
14631
14738
  get: async (spaceId) => {
14632
14739
  const kvResult = this.accountKV();
14633
14740
  if (!kvResult.ok) return kvResult;
14634
14741
  const loaded = await kvResult.data.get(spaceKey(spaceId));
14635
14742
  if (!loaded.ok) return accountErr(loaded.error);
14636
- return (0, import_sdk_services7.ok)(spaceFromRecord(spaceKey(spaceId), loaded.data.data));
14743
+ return (0, import_sdk_services8.ok)(spaceFromRecord(spaceKey(spaceId), loaded.data.data));
14637
14744
  },
14638
14745
  register: async (space) => {
14639
14746
  await this.config.ensureAccountSpaceHosted?.();
@@ -14644,7 +14751,7 @@ var AccountService = class {
14644
14751
  if (!written.ok) return accountErr(written.error);
14645
14752
  const registered = spaceFromRecord(spaceKey(stored.space_id), stored);
14646
14753
  await this.upsertSpaceIndexQuietly(registered);
14647
- return (0, import_sdk_services7.ok)(registered);
14754
+ return (0, import_sdk_services8.ok)(registered);
14648
14755
  },
14649
14756
  /**
14650
14757
  * Register multiple spaces in one KV batch write + one multi-row index
@@ -14657,7 +14764,7 @@ var AccountService = class {
14657
14764
  * leave the first attempt's blocks orphaned.
14658
14765
  */
14659
14766
  registerBatch: async (spaces) => {
14660
- if (spaces.length === 0) return (0, import_sdk_services7.ok)({ spaces: [] });
14767
+ if (spaces.length === 0) return (0, import_sdk_services8.ok)({ spaces: [] });
14661
14768
  await this.config.ensureAccountSpaceHosted?.();
14662
14769
  const kvResult = this.accountKV();
14663
14770
  if (!kvResult.ok) return kvResult;
@@ -14672,7 +14779,7 @@ var AccountService = class {
14672
14779
  const batchResult = await kvResult.data.batchPut(items);
14673
14780
  if (batchResult.ok) {
14674
14781
  await this.upsertSpacesIndexQuietly(registered);
14675
- return (0, import_sdk_services7.ok)({ spaces: registered });
14782
+ return (0, import_sdk_services8.ok)({ spaces: registered });
14676
14783
  }
14677
14784
  if (!isAmbiguousBatchFailure(batchResult.error)) {
14678
14785
  return accountErr(batchResult.error);
@@ -14685,8 +14792,8 @@ var AccountService = class {
14685
14792
  }
14686
14793
  }
14687
14794
  if (reconcileFailures.length > 0) {
14688
- return (0, import_sdk_services7.err)(
14689
- (0, import_sdk_services7.serviceError)(
14795
+ return (0, import_sdk_services8.err)(
14796
+ (0, import_sdk_services8.serviceError)(
14690
14797
  "KV_BATCH_RECONCILE_FAILED",
14691
14798
  `KV batch write for ${items.length} space(s) failed ambiguously (${batchResult.error.message}) and per-space reconciliation also failed for: ${reconcileFailures.join("; ")}`,
14692
14799
  SERVICE_NAME2,
@@ -14698,7 +14805,7 @@ var AccountService = class {
14698
14805
  `[AccountService] KV batch write for ${items.length} space(s) returned an ambiguous error and was reconciled via per-space fallback. Original error: ${batchResult.error.message}`
14699
14806
  );
14700
14807
  await this.upsertSpacesIndexQuietly(registered);
14701
- return (0, import_sdk_services7.ok)({ spaces: registered, recoveredFromBatchError: batchResult.error });
14808
+ return (0, import_sdk_services8.ok)({ spaces: registered, recoveredFromBatchError: batchResult.error });
14702
14809
  },
14703
14810
  /**
14704
14811
  * Register only spaces without a registry record (TC-800). Existing
@@ -14706,7 +14813,7 @@ var AccountService = class {
14706
14813
  * Bootstrap repair uses this on populated accounts.
14707
14814
  */
14708
14815
  registerMissing: async (spaces) => {
14709
- if (spaces.length === 0) return (0, import_sdk_services7.ok)([]);
14816
+ if (spaces.length === 0) return (0, import_sdk_services8.ok)([]);
14710
14817
  await this.config.ensureAccountSpaceHosted?.();
14711
14818
  const kvResult = this.accountKV();
14712
14819
  if (!kvResult.ok) return kvResult;
@@ -14722,15 +14829,15 @@ var AccountService = class {
14722
14829
  const key = keys[i];
14723
14830
  const result = byKey.get(key);
14724
14831
  if (!result) {
14725
- return (0, import_sdk_services7.err)((0, import_sdk_services7.serviceError)(
14726
- import_sdk_services7.ErrorCodes.NETWORK_ERROR,
14832
+ return (0, import_sdk_services8.err)((0, import_sdk_services8.serviceError)(
14833
+ import_sdk_services8.ErrorCodes.NETWORK_ERROR,
14727
14834
  `KV batch read omitted requested key ${JSON.stringify(key)}`,
14728
14835
  SERVICE_NAME2
14729
14836
  ));
14730
14837
  }
14731
14838
  if (result.ok) {
14732
14839
  final[i] = spaceFromRecord(key, result.data.data);
14733
- } else if (result.error.code === import_sdk_services7.ErrorCodes.KV_NOT_FOUND) {
14840
+ } else if (result.error.code === import_sdk_services8.ErrorCodes.KV_NOT_FOUND) {
14734
14841
  missing.push({ index: i, key, record: stored[i] });
14735
14842
  } else {
14736
14843
  return accountErr(result.error);
@@ -14738,21 +14845,21 @@ var AccountService = class {
14738
14845
  }
14739
14846
  const creates = await Promise.all(missing.map(async ({ index, key, record: record2 }) => {
14740
14847
  const written = await kv.put(key, record2, { ifNoneMatch: "*" });
14741
- if (written.ok) return { index, result: (0, import_sdk_services7.ok)(spaceFromRecord(key, record2)) };
14848
+ if (written.ok) return { index, result: (0, import_sdk_services8.ok)(spaceFromRecord(key, record2)) };
14742
14849
  const raced = await kv.get(key);
14743
- if (raced.ok) return { index, result: (0, import_sdk_services7.ok)(spaceFromRecord(key, raced.data.data)) };
14744
- return { index, result: (0, import_sdk_services7.err)(written.error) };
14850
+ if (raced.ok) return { index, result: (0, import_sdk_services8.ok)(spaceFromRecord(key, raced.data.data)) };
14851
+ return { index, result: (0, import_sdk_services8.err)(written.error) };
14745
14852
  }));
14746
14853
  for (const { index, result } of creates) {
14747
14854
  if (!result.ok) return accountErr(result.error);
14748
14855
  final[index] = result.data;
14749
14856
  }
14750
14857
  await this.upsertSpacesIndexQuietly(final);
14751
- return (0, import_sdk_services7.ok)(final);
14858
+ return (0, import_sdk_services8.ok)(final);
14752
14859
  },
14753
14860
  syncAccessible: async () => {
14754
14861
  const synced = await this.syncAccessibleSpaces({ tolerateStorageFull: false });
14755
- return synced.ok ? (0, import_sdk_services7.ok)(synced.data.spaces) : synced;
14862
+ return synced.ok ? (0, import_sdk_services8.ok)(synced.data.spaces) : synced;
14756
14863
  },
14757
14864
  remove: async (spaceId) => {
14758
14865
  const kvResult = this.accountKV();
@@ -14760,21 +14867,21 @@ var AccountService = class {
14760
14867
  const removed = await kvResult.data.delete(spaceKey(spaceId));
14761
14868
  if (!removed.ok) return accountErr(removed.error);
14762
14869
  await this.deleteSpaceIndexQuietly(spaceId);
14763
- return (0, import_sdk_services7.ok)(void 0);
14870
+ return (0, import_sdk_services8.ok)(void 0);
14764
14871
  }
14765
14872
  };
14766
14873
  this.delegations = {
14767
14874
  query: async (options2 = {}) => {
14768
14875
  const manager = this.config.getDelegationManager?.();
14769
14876
  if (!manager) {
14770
- return (0, import_sdk_services7.err)((0, import_sdk_services7.serviceError)(
14877
+ return (0, import_sdk_services8.err)((0, import_sdk_services8.serviceError)(
14771
14878
  "NOT_INITIALIZED",
14772
14879
  "Delegation history requires an authenticated delegation manager",
14773
14880
  SERVICE_NAME2
14774
14881
  ));
14775
14882
  }
14776
14883
  const queried = await manager.query(options2);
14777
- return queried.ok ? (0, import_sdk_services7.ok)(queried.data) : accountErr(queried.error);
14884
+ return queried.ok ? (0, import_sdk_services8.ok)(queried.data) : accountErr(queried.error);
14778
14885
  },
14779
14886
  list: async (options2 = {}) => {
14780
14887
  if (options2.preferIndex) {
@@ -14808,17 +14915,17 @@ var AccountService = class {
14808
14915
  }
14809
14916
  }
14810
14917
  delegations.sort((a, b) => a.spaceId.localeCompare(b.spaceId) || a.cid.localeCompare(b.cid));
14811
- return (0, import_sdk_services7.ok)(delegations);
14918
+ return (0, import_sdk_services8.ok)(delegations);
14812
14919
  },
14813
14920
  revoke: async (input) => {
14814
14921
  const cid2 = typeof input === "string" ? input : input.cid;
14815
14922
  const manager = this.config.getDelegationManager?.();
14816
14923
  if (manager) {
14817
14924
  const revoked2 = await manager.revoke(cid2);
14818
- return revoked2.ok ? (0, import_sdk_services7.ok)(revoked2.data) : accountErr(revoked2.error);
14925
+ return revoked2.ok ? (0, import_sdk_services8.ok)(revoked2.data) : accountErr(revoked2.error);
14819
14926
  }
14820
14927
  if (typeof input === "string") {
14821
- return (0, import_sdk_services7.err)((0, import_sdk_services7.serviceError)(
14928
+ return (0, import_sdk_services8.err)((0, import_sdk_services8.serviceError)(
14822
14929
  "NOT_INITIALIZED",
14823
14930
  "CID-only revocation requires an authenticated delegation manager",
14824
14931
  SERVICE_NAME2
@@ -14828,7 +14935,7 @@ var AccountService = class {
14828
14935
  if (!space.ok) return space;
14829
14936
  const revoked = await this.config.getSpaces().get(space.data.id).delegations.revoke(cid2);
14830
14937
  if (!revoked.ok) return accountErr(revoked.error);
14831
- return (0, import_sdk_services7.ok)(void 0);
14938
+ return (0, import_sdk_services8.ok)(void 0);
14832
14939
  }
14833
14940
  };
14834
14941
  this.index = {
@@ -14837,7 +14944,7 @@ var AccountService = class {
14837
14944
  if (!dbResult.ok) return dbResult;
14838
14945
  const schema = await this.ensureAccountIndex(dbResult.data);
14839
14946
  if (!schema.ok) return schema;
14840
- return (0, import_sdk_services7.ok)({ database: ACCOUNT_INDEX_DB });
14947
+ return (0, import_sdk_services8.ok)({ database: ACCOUNT_INDEX_DB });
14841
14948
  },
14842
14949
  rebuild: async () => {
14843
14950
  const dbResult = this.accountDb();
@@ -14919,7 +15026,7 @@ var AccountService = class {
14919
15026
  ];
14920
15027
  const rebuilt = await dbResult.data.batch(statements);
14921
15028
  if (!rebuilt.ok) return accountErr(rebuilt.error);
14922
- return (0, import_sdk_services7.ok)({
15029
+ return (0, import_sdk_services8.ok)({
14923
15030
  database: ACCOUNT_INDEX_DB,
14924
15031
  applications: applications.data.length,
14925
15032
  spaces: spaces.data.length,
@@ -14935,7 +15042,7 @@ var AccountService = class {
14935
15042
  "SELECT applications.app_id, name, description, updated_at, manifest_json, application_state.manifest_hash FROM applications LEFT JOIN application_state ON applications.app_id = application_state.app_id ORDER BY applications.app_id"
14936
15043
  );
14937
15044
  if (!queried.ok) return accountErr(queried.error);
14938
- return (0, import_sdk_services7.ok)(queried.data.rows.map(indexedApplicationFromRow));
15045
+ return (0, import_sdk_services8.ok)(queried.data.rows.map(indexedApplicationFromRow));
14939
15046
  }
14940
15047
  },
14941
15048
  spaces: {
@@ -14946,7 +15053,7 @@ var AccountService = class {
14946
15053
  "SELECT space_id, name, owner_did, type, permissions_json, status, registered_at, updated_at, expires_at FROM spaces ORDER BY name, space_id"
14947
15054
  );
14948
15055
  if (!queried.ok) return accountErr(queried.error);
14949
- return (0, import_sdk_services7.ok)(queried.data.rows.map(indexedSpaceFromRow));
15056
+ return (0, import_sdk_services8.ok)(queried.data.rows.map(indexedSpaceFromRow));
14950
15057
  }
14951
15058
  },
14952
15059
  delegations: {
@@ -14968,7 +15075,7 @@ var AccountService = class {
14968
15075
  params
14969
15076
  );
14970
15077
  if (!queried.ok) return accountErr(queried.error);
14971
- return (0, import_sdk_services7.ok)(queried.data.rows.map(indexedDelegationFromRow));
15078
+ return (0, import_sdk_services8.ok)(queried.data.rows.map(indexedDelegationFromRow));
14972
15079
  }
14973
15080
  },
14974
15081
  query: async (sql, params) => {
@@ -14976,7 +15083,7 @@ var AccountService = class {
14976
15083
  if (!dbResult.ok) return dbResult;
14977
15084
  const queried = await dbResult.data.query(sql, params);
14978
15085
  if (!queried.ok) return accountErr(queried.error);
14979
- return (0, import_sdk_services7.ok)(queried.data);
15086
+ return (0, import_sdk_services8.ok)(queried.data);
14980
15087
  },
14981
15088
  status: async () => {
14982
15089
  const dbResult = this.accountDb();
@@ -14986,11 +15093,11 @@ var AccountService = class {
14986
15093
  );
14987
15094
  if (!queried.ok) {
14988
15095
  if (isMissingIndexError(queried.error)) {
14989
- return (0, import_sdk_services7.ok)({ database: ACCOUNT_INDEX_DB, state: "missing", sources: [] });
15096
+ return (0, import_sdk_services8.ok)({ database: ACCOUNT_INDEX_DB, state: "missing", sources: [] });
14990
15097
  }
14991
15098
  return accountErr(queried.error);
14992
15099
  }
14993
- return (0, import_sdk_services7.ok)({
15100
+ return (0, import_sdk_services8.ok)({
14994
15101
  database: ACCOUNT_INDEX_DB,
14995
15102
  state: "ready",
14996
15103
  sources: queried.data.rows.map(([source, syncedAt, count]) => ({
@@ -15009,7 +15116,7 @@ var AccountService = class {
15009
15116
  if (!delegations.ok) return delegations;
15010
15117
  const spaces = await this.spaces.list();
15011
15118
  if (!spaces.ok) return spaces;
15012
- return (0, import_sdk_services7.ok)({
15119
+ return (0, import_sdk_services8.ok)({
15013
15120
  did: this.config.getDid(),
15014
15121
  host: this.config.getHost(),
15015
15122
  primarySpaceId: this.config.getPrimarySpaceId(),
@@ -15023,28 +15130,28 @@ var AccountService = class {
15023
15130
  accountKV() {
15024
15131
  const accountSpaceId = this.config.getAccountSpaceId();
15025
15132
  if (!accountSpaceId) {
15026
- return (0, import_sdk_services7.err)(
15027
- (0, import_sdk_services7.serviceError)(
15133
+ return (0, import_sdk_services8.err)(
15134
+ (0, import_sdk_services8.serviceError)(
15028
15135
  "ACCOUNT_SPACE_UNAVAILABLE",
15029
15136
  "Account space is unavailable. Sign in with a wallet-backed profile first.",
15030
15137
  SERVICE_NAME2
15031
15138
  )
15032
15139
  );
15033
15140
  }
15034
- return (0, import_sdk_services7.ok)(this.config.getSpaces().get(accountSpaceId).kv);
15141
+ return (0, import_sdk_services8.ok)(this.config.getSpaces().get(accountSpaceId).kv);
15035
15142
  }
15036
15143
  accountDb() {
15037
15144
  const db = this.config.getAccountDb?.();
15038
15145
  if (!db) {
15039
- return (0, import_sdk_services7.err)(
15040
- (0, import_sdk_services7.serviceError)(
15146
+ return (0, import_sdk_services8.err)(
15147
+ (0, import_sdk_services8.serviceError)(
15041
15148
  "ACCOUNT_INDEX_UNAVAILABLE",
15042
15149
  "Account index database is unavailable. Sign in with a wallet-backed profile first.",
15043
15150
  SERVICE_NAME2
15044
15151
  )
15045
15152
  );
15046
15153
  }
15047
- return (0, import_sdk_services7.ok)(db);
15154
+ return (0, import_sdk_services8.ok)(db);
15048
15155
  }
15049
15156
  async indexHasApplicationHash(appId, manifestHash) {
15050
15157
  const dbResult = this.accountDb();
@@ -15062,7 +15169,7 @@ var AccountService = class {
15062
15169
  }
15063
15170
  async upsertApplicationIndex(app) {
15064
15171
  const dbResult = this.accountDb();
15065
- if (!dbResult.ok) return (0, import_sdk_services7.ok)(void 0);
15172
+ if (!dbResult.ok) return (0, import_sdk_services8.ok)(void 0);
15066
15173
  const schema = await this.ensureAccountIndex(dbResult.data);
15067
15174
  if (!schema.ok) return schema;
15068
15175
  const updatedAt = app.updatedAt ?? (/* @__PURE__ */ new Date()).toISOString();
@@ -15084,14 +15191,14 @@ var AccountService = class {
15084
15191
  }
15085
15192
  ]);
15086
15193
  if (!written.ok) return accountErr(written.error);
15087
- return (0, import_sdk_services7.ok)(void 0);
15194
+ return (0, import_sdk_services8.ok)(void 0);
15088
15195
  }
15089
15196
  async deleteApplicationIndexQuietly(appId) {
15090
15197
  await ignoreIndexFailure(() => this.deleteApplicationIndex(appId));
15091
15198
  }
15092
15199
  async deleteApplicationIndex(appId) {
15093
15200
  const dbResult = this.accountDb();
15094
- if (!dbResult.ok) return (0, import_sdk_services7.ok)(void 0);
15201
+ if (!dbResult.ok) return (0, import_sdk_services8.ok)(void 0);
15095
15202
  const schema = await this.ensureAccountIndex(dbResult.data);
15096
15203
  if (!schema.ok) return schema;
15097
15204
  const deleted = await dbResult.data.batch([
@@ -15099,14 +15206,14 @@ var AccountService = class {
15099
15206
  { sql: "DELETE FROM application_state WHERE app_id = ?", params: [appId] }
15100
15207
  ]);
15101
15208
  if (!deleted.ok) return accountErr(deleted.error);
15102
- return (0, import_sdk_services7.ok)(void 0);
15209
+ return (0, import_sdk_services8.ok)(void 0);
15103
15210
  }
15104
15211
  async upsertSpaceIndexQuietly(space) {
15105
15212
  await ignoreIndexFailure(() => this.upsertSpaceIndex(space));
15106
15213
  }
15107
15214
  async upsertSpaceIndex(space) {
15108
15215
  const dbResult = this.accountDb();
15109
- if (!dbResult.ok) return (0, import_sdk_services7.ok)(void 0);
15216
+ if (!dbResult.ok) return (0, import_sdk_services8.ok)(void 0);
15110
15217
  const schema = await this.ensureAccountIndex(dbResult.data);
15111
15218
  if (!schema.ok) return schema;
15112
15219
  const updatedAt = space.updatedAt ?? (/* @__PURE__ */ new Date()).toISOString();
@@ -15127,7 +15234,7 @@ var AccountService = class {
15127
15234
  }
15128
15235
  ]);
15129
15236
  if (!written.ok) return accountErr(written.error);
15130
- return (0, import_sdk_services7.ok)(void 0);
15237
+ return (0, import_sdk_services8.ok)(void 0);
15131
15238
  }
15132
15239
  async upsertSpacesIndexQuietly(spaces) {
15133
15240
  await ignoreIndexFailure(() => this.upsertSpacesIndex(spaces));
@@ -15141,9 +15248,9 @@ var AccountService = class {
15141
15248
  * atomically: all rows or none.
15142
15249
  */
15143
15250
  async upsertSpacesIndex(spaces) {
15144
- if (spaces.length === 0) return (0, import_sdk_services7.ok)(void 0);
15251
+ if (spaces.length === 0) return (0, import_sdk_services8.ok)(void 0);
15145
15252
  const dbResult = this.accountDb();
15146
- if (!dbResult.ok) return (0, import_sdk_services7.ok)(void 0);
15253
+ if (!dbResult.ok) return (0, import_sdk_services8.ok)(void 0);
15147
15254
  const schema = await this.ensureAccountIndex(dbResult.data);
15148
15255
  if (!schema.ok) return schema;
15149
15256
  const placeholders = spaces.map(() => "(?, ?, ?, ?, ?, ?, ?, ?, ?)").join(", ");
@@ -15168,21 +15275,21 @@ var AccountService = class {
15168
15275
  }
15169
15276
  ]);
15170
15277
  if (!written.ok) return accountErr(written.error);
15171
- return (0, import_sdk_services7.ok)(void 0);
15278
+ return (0, import_sdk_services8.ok)(void 0);
15172
15279
  }
15173
15280
  async deleteSpaceIndexQuietly(spaceId) {
15174
15281
  await ignoreIndexFailure(() => this.deleteSpaceIndex(spaceId));
15175
15282
  }
15176
15283
  async deleteSpaceIndex(spaceId) {
15177
15284
  const dbResult = this.accountDb();
15178
- if (!dbResult.ok) return (0, import_sdk_services7.ok)(void 0);
15285
+ if (!dbResult.ok) return (0, import_sdk_services8.ok)(void 0);
15179
15286
  const schema = await this.ensureAccountIndex(dbResult.data);
15180
15287
  if (!schema.ok) return schema;
15181
15288
  const deleted = await dbResult.data.batch([
15182
15289
  { sql: "DELETE FROM spaces WHERE space_id = ?", params: [spaceId] }
15183
15290
  ]);
15184
15291
  if (!deleted.ok) return accountErr(deleted.error);
15185
- return (0, import_sdk_services7.ok)(void 0);
15292
+ return (0, import_sdk_services8.ok)(void 0);
15186
15293
  }
15187
15294
  /**
15188
15295
  * Register every space the session can reach and return them. With
@@ -15202,7 +15309,7 @@ var AccountService = class {
15202
15309
  spaces.push(result.data);
15203
15310
  continue;
15204
15311
  }
15205
- if (!options2.tolerateStorageFull || !(0, import_sdk_services7.isStorageFullError)(result.error)) {
15312
+ if (!options2.tolerateStorageFull || !(0, import_sdk_services8.isStorageFullError)(result.error)) {
15206
15313
  return result;
15207
15314
  }
15208
15315
  allRegistered = false;
@@ -15210,18 +15317,18 @@ var AccountService = class {
15210
15317
  const record2 = spaceRecordFromInput(space);
15211
15318
  spaces.push(spaceFromRecord(spaceKey(record2.space_id), record2));
15212
15319
  }
15213
- return (0, import_sdk_services7.ok)({ spaces, allRegistered });
15320
+ return (0, import_sdk_services8.ok)({ spaces, allRegistered });
15214
15321
  }
15215
15322
  async resolveSpace(space) {
15216
15323
  const listed = await this.config.getSpaces().list();
15217
15324
  if (!listed.ok) return accountErr(listed.error);
15218
15325
  const found = listed.data.find((candidate) => candidate.id === space || candidate.name === space);
15219
15326
  if (!found) {
15220
- return (0, import_sdk_services7.err)(
15221
- (0, import_sdk_services7.serviceError)("SPACE_NOT_FOUND", `No account space found for ${JSON.stringify(space)}`, SERVICE_NAME2)
15327
+ return (0, import_sdk_services8.err)(
15328
+ (0, import_sdk_services8.serviceError)("SPACE_NOT_FOUND", `No account space found for ${JSON.stringify(space)}`, SERVICE_NAME2)
15222
15329
  );
15223
15330
  }
15224
- return (0, import_sdk_services7.ok)(found);
15331
+ return (0, import_sdk_services8.ok)(found);
15225
15332
  }
15226
15333
  async replaceApplicationsIndexQuietly(applications) {
15227
15334
  await ignoreIndexFailure(async () => {
@@ -15363,7 +15470,7 @@ var AccountService = class {
15363
15470
  ]
15364
15471
  });
15365
15472
  if (!migrated.ok) return accountErr(migrated.error);
15366
- return (0, import_sdk_services7.ok)(void 0);
15473
+ return (0, import_sdk_services8.ok)(void 0);
15367
15474
  }
15368
15475
  };
15369
15476
  function applicationKey(appId) {
@@ -15519,17 +15626,17 @@ function mapDelegation(delegation, space, direction) {
15519
15626
  };
15520
15627
  }
15521
15628
  function accountErr(error) {
15522
- return (0, import_sdk_services7.err)((0, import_sdk_services7.serviceError)(error.code, error.message, SERVICE_NAME2, { cause: error.cause, meta: error.meta }));
15629
+ return (0, import_sdk_services8.err)((0, import_sdk_services8.serviceError)(error.code, error.message, SERVICE_NAME2, { cause: error.cause, meta: error.meta }));
15523
15630
  }
15524
15631
  function isMissingIndexError(error) {
15525
15632
  return /no such table:/i.test(error.message);
15526
15633
  }
15527
15634
  var AMBIGUOUS_WRITE_STATUSES = /* @__PURE__ */ new Set([500, 502, 503, 504, 520, 522, 524]);
15528
15635
  function isAmbiguousBatchFailure(error) {
15529
- if (error.code === import_sdk_services7.ErrorCodes.NETWORK_ERROR || error.code === import_sdk_services7.ErrorCodes.TIMEOUT) {
15636
+ if (error.code === import_sdk_services8.ErrorCodes.NETWORK_ERROR || error.code === import_sdk_services8.ErrorCodes.TIMEOUT) {
15530
15637
  return error.meta?.requestMayHaveDispatched === true;
15531
15638
  }
15532
- if (error.code === import_sdk_services7.ErrorCodes.KV_WRITE_FAILED) {
15639
+ if (error.code === import_sdk_services8.ErrorCodes.KV_WRITE_FAILED) {
15533
15640
  const status = error.meta?.status;
15534
15641
  return typeof status === "number" && AMBIGUOUS_WRITE_STATUSES.has(status);
15535
15642
  }
@@ -15543,7 +15650,7 @@ async function ignoreIndexFailure(task) {
15543
15650
  }
15544
15651
 
15545
15652
  // src/index.ts
15546
- var import_sdk_services9 = require("@tinycloud/sdk-services");
15653
+ var import_sdk_services10 = require("@tinycloud/sdk-services");
15547
15654
 
15548
15655
  // src/space.ts
15549
15656
  async function fetchPeerId(host, spaceId, signal) {
@@ -15648,7 +15755,7 @@ async function postSessionActivation(host, delegationHeader, signal) {
15648
15755
  }
15649
15756
 
15650
15757
  // src/authorization/CapabilityKeyRegistry.ts
15651
- var import_sdk_services8 = require("@tinycloud/sdk-services");
15758
+ var import_sdk_services9 = require("@tinycloud/sdk-services");
15652
15759
  var SERVICE_NAME3 = "capability-key-registry";
15653
15760
  var CapabilityKeyRegistryErrorCodes = {
15654
15761
  /** Key not found in registry */
@@ -15873,8 +15980,8 @@ var CapabilityKeyRegistry = class {
15873
15980
  revokeDelegation(cid2) {
15874
15981
  const stored = this.store.byCid.get(cid2);
15875
15982
  if (!stored || stored.length === 0) {
15876
- return (0, import_sdk_services8.err)(
15877
- (0, import_sdk_services8.serviceError)(
15983
+ return (0, import_sdk_services9.err)(
15984
+ (0, import_sdk_services9.serviceError)(
15878
15985
  CapabilityKeyRegistryErrorCodes.KEY_NOT_FOUND,
15879
15986
  `Delegation not found: ${cid2}`,
15880
15987
  SERVICE_NAME3
@@ -15894,7 +16001,7 @@ var CapabilityKeyRegistry = class {
15894
16001
  }
15895
16002
  }
15896
16003
  }
15897
- return (0, import_sdk_services8.ok)(void 0);
16004
+ return (0, import_sdk_services9.ok)(void 0);
15898
16005
  }
15899
16006
  // ===========================================================================
15900
16007
  // Search
@@ -16558,8 +16665,14 @@ function diffImmutableSiweFields(original, signed, options2) {
16558
16665
  function extractRecapAttenuations(siwe) {
16559
16666
  const merged = {};
16560
16667
  const lines = siwe.split(/\r?\n/);
16668
+ let resources = false;
16561
16669
  for (const line of lines) {
16562
- const match = line.match(/urn:recap:([A-Za-z0-9_-]+=*)/);
16670
+ if (line === "Resources:") {
16671
+ resources = true;
16672
+ continue;
16673
+ }
16674
+ if (!resources) continue;
16675
+ const match = line.match(/^- urn:recap:([A-Za-z0-9_-]+=*)$/);
16563
16676
  if (!match) continue;
16564
16677
  const encoded = match[1];
16565
16678
  let decodedJson;