@tinycloud/sdk-core 2.3.0-beta.2 → 2.3.0-beta.4

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
@@ -37,51 +37,52 @@ __export(index_exports, {
37
37
  CapabilityKeyRegistryErrorCodes: () => CapabilityKeyRegistryErrorCodes,
38
38
  ClientSessionSchema: () => ClientSessionSchema,
39
39
  CloudLocationResolutionError: () => CloudLocationResolutionError,
40
- DECRYPT_ACTION: () => import_sdk_services5.DECRYPT_ACTION,
41
- DECRYPT_FACT_TYPE: () => import_sdk_services5.DECRYPT_FACT_TYPE,
42
- DECRYPT_RESULT_TYPE: () => import_sdk_services5.DECRYPT_RESULT_TYPE,
40
+ DECRYPT_ACTION: () => import_sdk_services6.DECRYPT_ACTION,
41
+ DECRYPT_FACT_TYPE: () => import_sdk_services6.DECRYPT_FACT_TYPE,
42
+ DECRYPT_RESULT_TYPE: () => import_sdk_services6.DECRYPT_RESULT_TYPE,
43
43
  DEFAULT_DEFAULTS: () => DEFAULT_DEFAULTS,
44
- DEFAULT_ENCRYPTION_ALG: () => import_sdk_services5.DEFAULT_ENCRYPTION_ALG,
44
+ DEFAULT_ENCRYPTION_ALG: () => import_sdk_services6.DEFAULT_ENCRYPTION_ALG,
45
45
  DEFAULT_EXPIRY: () => DEFAULT_EXPIRY,
46
- DEFAULT_KEY_VERSION: () => import_sdk_services5.DEFAULT_KEY_VERSION,
46
+ DEFAULT_KEY_VERSION: () => import_sdk_services6.DEFAULT_KEY_VERSION,
47
47
  DEFAULT_MANIFEST_SPACE: () => DEFAULT_MANIFEST_SPACE,
48
48
  DEFAULT_MANIFEST_VERSION: () => DEFAULT_MANIFEST_VERSION,
49
49
  DEFAULT_SIGNED_READ_URL_EXPIRY_MS: () => DEFAULT_SIGNED_READ_URL_EXPIRY_MS,
50
50
  DEFAULT_TINYCLOUD_FALLBACK_HOST: () => DEFAULT_TINYCLOUD_FALLBACK_HOST,
51
51
  DEFAULT_TINYCLOUD_LOCATION_REGISTRY_URL: () => DEFAULT_TINYCLOUD_LOCATION_REGISTRY_URL,
52
- DataVaultService: () => import_sdk_services5.DataVaultService,
53
- DatabaseHandle: () => import_sdk_services5.DatabaseHandle,
52
+ DataVaultService: () => import_sdk_services6.DataVaultService,
53
+ DatabaseHandle: () => import_sdk_services6.DatabaseHandle,
54
54
  DelegationErrorCodes: () => DelegationErrorCodes,
55
55
  DelegationManager: () => DelegationManager,
56
- DuckDbAction: () => import_sdk_services5.DuckDbAction,
57
- DuckDbDatabaseHandle: () => import_sdk_services5.DuckDbDatabaseHandle,
58
- DuckDbService: () => import_sdk_services5.DuckDbService,
56
+ DuckDbAction: () => import_sdk_services6.DuckDbAction,
57
+ DuckDbDatabaseHandle: () => import_sdk_services6.DuckDbDatabaseHandle,
58
+ DuckDbService: () => import_sdk_services6.DuckDbService,
59
59
  ENCRYPTION_MANIFEST_SPACE: () => ENCRYPTION_MANIFEST_SPACE,
60
- ENCRYPTION_NETWORK_URN_PREFIX: () => import_sdk_services5.ENCRYPTION_NETWORK_URN_PREFIX,
60
+ ENCRYPTION_NETWORK_URN_PREFIX: () => import_sdk_services6.ENCRYPTION_NETWORK_URN_PREFIX,
61
61
  ENCRYPTION_PERMISSION_SERVICE: () => ENCRYPTION_PERMISSION_SERVICE,
62
- ENCRYPTION_SERVICE: () => import_sdk_services5.ENCRYPTION_SERVICE,
63
- ENCRYPTION_SERVICE_SHORT: () => import_sdk_services5.ENCRYPTION_SERVICE_SHORT,
64
- ENVELOPE_VERSION: () => import_sdk_services5.ENVELOPE_VERSION,
62
+ ENCRYPTION_SERVICE: () => import_sdk_services6.ENCRYPTION_SERVICE,
63
+ ENCRYPTION_SERVICE_SHORT: () => import_sdk_services6.ENCRYPTION_SERVICE_SHORT,
64
+ ENVELOPE_VERSION: () => import_sdk_services6.ENVELOPE_VERSION,
65
65
  EXPIRY: () => EXPIRY,
66
- EncryptionService: () => import_sdk_services5.EncryptionService,
66
+ EncryptionService: () => import_sdk_services6.EncryptionService,
67
67
  EnsDataSchema: () => EnsDataSchema,
68
- ErrorCodes: () => import_sdk_services5.ErrorCodes,
69
- HooksService: () => import_sdk_services5.HooksService,
70
- KVService: () => import_sdk_services5.KVService,
68
+ ErrorCodes: () => import_sdk_services6.ErrorCodes,
69
+ HooksService: () => import_sdk_services6.HooksService,
70
+ IdentityParseError: () => IdentityParseError,
71
+ KVService: () => import_sdk_services6.KVService,
71
72
  LocationRecordValidationError: () => LocationRecordValidationError,
72
73
  ManifestValidationError: () => ManifestValidationError,
73
- NETWORK_NAME_PATTERN: () => import_sdk_services5.NETWORK_NAME_PATTERN,
74
- NetworkIdError: () => import_sdk_services5.NetworkIdError,
74
+ NETWORK_NAME_PATTERN: () => import_sdk_services6.NETWORK_NAME_PATTERN,
75
+ NetworkIdError: () => import_sdk_services6.NetworkIdError,
75
76
  PermissionNotInManifestError: () => PermissionNotInManifestError,
76
- PrefixedKVService: () => import_sdk_services5.PrefixedKVService,
77
+ PrefixedKVService: () => import_sdk_services6.PrefixedKVService,
77
78
  ProtocolMismatchError: () => ProtocolMismatchError,
78
- SECRET_NAME_RE: () => import_sdk_services5.SECRET_NAME_RE,
79
+ SECRET_NAME_RE: () => import_sdk_services6.SECRET_NAME_RE,
79
80
  SERVICE_LONG_TO_SHORT: () => SERVICE_LONG_TO_SHORT,
80
81
  SERVICE_SHORT_TO_LONG: () => SERVICE_SHORT_TO_LONG,
81
- SQLAction: () => import_sdk_services5.SQLAction,
82
- SQLService: () => import_sdk_services5.SQLService,
83
- SecretsService: () => import_sdk_services5.SecretsService,
84
- ServiceContext: () => import_sdk_services5.ServiceContext,
82
+ SQLAction: () => import_sdk_services6.SQLAction,
83
+ SQLService: () => import_sdk_services6.SQLService,
84
+ SecretsService: () => import_sdk_services6.SecretsService,
85
+ ServiceContext: () => import_sdk_services6.ServiceContext,
85
86
  SessionExpiredError: () => SessionExpiredError,
86
87
  SharingService: () => SharingService,
87
88
  SilentNotificationHandler: () => SilentNotificationHandler,
@@ -93,84 +94,98 @@ __export(index_exports, {
93
94
  TinyCloud: () => TinyCloud,
94
95
  UnsupportedFeatureError: () => UnsupportedFeatureError,
95
96
  VAULT_PERMISSION_SERVICE: () => VAULT_PERMISSION_SERVICE,
96
- VaultHeaders: () => import_sdk_services5.VaultHeaders,
97
- VaultPublicSpaceKVActions: () => import_sdk_services5.VaultPublicSpaceKVActions,
97
+ VaultHeaders: () => import_sdk_services6.VaultHeaders,
98
+ VaultPublicSpaceKVActions: () => import_sdk_services6.VaultPublicSpaceKVActions,
98
99
  VersionCheckError: () => VersionCheckError,
99
100
  activateSessionWithHost: () => activateSessionWithHost,
101
+ addressStorageKey: () => addressStorageKey,
100
102
  applyPrefix: () => applyPrefix,
101
- buildCanonicalDecryptRequest: () => import_sdk_services5.buildCanonicalDecryptRequest,
102
- buildDecryptAttenuation: () => import_sdk_services5.buildDecryptAttenuation,
103
- buildDecryptFacts: () => import_sdk_services5.buildDecryptFacts,
104
- buildDecryptInvocation: () => import_sdk_services5.buildDecryptInvocation,
105
- buildNetworkId: () => import_sdk_services5.buildNetworkId,
103
+ buildCanonicalDecryptRequest: () => import_sdk_services6.buildCanonicalDecryptRequest,
104
+ buildDecryptAttenuation: () => import_sdk_services6.buildDecryptAttenuation,
105
+ buildDecryptFacts: () => import_sdk_services6.buildDecryptFacts,
106
+ buildDecryptInvocation: () => import_sdk_services6.buildDecryptInvocation,
107
+ buildNetworkId: () => import_sdk_services6.buildNetworkId,
106
108
  buildSpaceUri: () => buildSpaceUri,
107
- canonicalHashHex: () => import_sdk_services5.canonicalHashHex,
109
+ canonicalHashHex: () => import_sdk_services6.canonicalHashHex,
108
110
  canonicalLocationPayload: () => canonicalLocationPayload,
109
- canonicalSignedResponse: () => import_sdk_services5.canonicalSignedResponse,
110
- canonicalizeEncryptionJson: () => import_sdk_services5.canonicalizeEncryptionJson,
111
- canonicalizeSecretScope: () => import_sdk_services5.canonicalizeSecretScope,
112
- checkDecryptInvocationInput: () => import_sdk_services5.checkDecryptInvocationInput,
111
+ canonicalSignedResponse: () => import_sdk_services6.canonicalSignedResponse,
112
+ canonicalizeAddress: () => canonicalizeAddress,
113
+ canonicalizeDid: () => canonicalizeDid,
114
+ canonicalizeDidUrl: () => canonicalizeDidUrl,
115
+ canonicalizeEncryptionJson: () => import_sdk_services6.canonicalizeEncryptionJson,
116
+ canonicalizeNetworkId: () => canonicalizeNetworkId,
117
+ canonicalizeSecretScope: () => import_sdk_services6.canonicalizeSecretScope,
118
+ checkDecryptInvocationInput: () => import_sdk_services6.checkDecryptInvocationInput,
113
119
  checkNodeInfo: () => checkNodeInfo,
114
120
  composeManifestRequest: () => composeManifestRequest,
115
121
  createCapabilityKeyRegistry: () => createCapabilityKeyRegistry,
116
122
  createSharingService: () => createSharingService,
117
123
  createSpaceService: () => createSpaceService,
118
- createVaultCrypto: () => import_sdk_services5.createVaultCrypto,
119
- decryptEnvelopeWithKey: () => import_sdk_services5.decryptEnvelopeWithKey,
120
- defaultRetryPolicy: () => import_sdk_services5.defaultRetryPolicy,
124
+ createVaultCrypto: () => import_sdk_services6.createVaultCrypto,
125
+ decryptEnvelopeWithKey: () => import_sdk_services6.decryptEnvelopeWithKey,
126
+ defaultRetryPolicy: () => import_sdk_services6.defaultRetryPolicy,
121
127
  defaultSignStrategy: () => defaultSignStrategy,
122
128
  defaultSpaceCreationHandler: () => defaultSpaceCreationHandler,
123
- deriveSignedReceiverKey: () => import_sdk_services5.deriveSignedReceiverKey,
124
- discoverNetwork: () => import_sdk_services5.discoverNetwork,
125
- encryptToNetwork: () => import_sdk_services5.encryptToNetwork,
126
- encryptionBase64Decode: () => import_sdk_services5.base64Decode,
127
- encryptionBase64Encode: () => import_sdk_services5.base64Encode,
128
- encryptionError: () => import_sdk_services5.encryptionError,
129
- encryptionUtf8Decode: () => import_sdk_services5.utf8Decode,
130
- encryptionUtf8Encode: () => import_sdk_services5.utf8Encode,
131
- ensureNetworkUsableForDecrypt: () => import_sdk_services5.ensureNetworkUsableForDecrypt,
132
- err: () => import_sdk_services5.err,
129
+ deriveSignedReceiverKey: () => import_sdk_services6.deriveSignedReceiverKey,
130
+ didCacheKey: () => didCacheKey,
131
+ didEquals: () => didEquals,
132
+ discoverNetwork: () => import_sdk_services6.discoverNetwork,
133
+ encryptToNetwork: () => import_sdk_services6.encryptToNetwork,
134
+ encryptionBase64Decode: () => import_sdk_services6.base64Decode,
135
+ encryptionBase64Encode: () => import_sdk_services6.base64Encode,
136
+ encryptionError: () => import_sdk_services6.encryptionError,
137
+ encryptionUtf8Decode: () => import_sdk_services6.utf8Decode,
138
+ encryptionUtf8Encode: () => import_sdk_services6.utf8Encode,
139
+ ensureNetworkUsableForDecrypt: () => import_sdk_services6.ensureNetworkUsableForDecrypt,
140
+ err: () => import_sdk_services6.err,
133
141
  expandActionShortNames: () => expandActionShortNames,
134
142
  expandPermissionEntries: () => expandPermissionEntries,
135
143
  expandPermissionEntry: () => expandPermissionEntry,
136
144
  fetchLocationRecord: () => fetchLocationRecord,
137
145
  fetchPeerId: () => fetchPeerId,
138
- generateRandomReceiverKey: () => import_sdk_services5.generateRandomReceiverKey,
139
- hexDecode: () => import_sdk_services5.hexDecode,
140
- hexEncode: () => import_sdk_services5.hexEncode,
146
+ generateRandomReceiverKey: () => import_sdk_services6.generateRandomReceiverKey,
147
+ hexDecode: () => import_sdk_services6.hexDecode,
148
+ hexEncode: () => import_sdk_services6.hexEncode,
141
149
  httpUrlToMultiaddr: () => httpUrlToMultiaddr,
142
150
  isCapabilitySubset: () => isCapabilitySubset,
143
- isNetworkId: () => import_sdk_services5.isNetworkId,
151
+ isEvmAddress: () => isEvmAddress,
152
+ isNetworkId: () => import_sdk_services6.isNetworkId,
144
153
  loadManifest: () => loadManifest,
145
154
  locationPayloadForRecord: () => locationPayloadForRecord,
155
+ makePkhSpaceId: () => makePkhSpaceId,
146
156
  makePublicSpaceId: () => makePublicSpaceId,
147
157
  manifestAbilitiesUnion: () => manifestAbilitiesUnion,
148
158
  multiaddrToHttpUrl: () => multiaddrToHttpUrl,
149
- networkDiscoveryKey: () => import_sdk_services5.networkDiscoveryKey,
159
+ networkDiscoveryKey: () => import_sdk_services6.networkDiscoveryKey,
150
160
  normalizeDefaults: () => normalizeDefaults,
151
- ok: () => import_sdk_services5.ok,
152
- openWrappedKey: () => import_sdk_services5.openWrappedKey,
161
+ ok: () => import_sdk_services6.ok,
162
+ openWrappedKey: () => import_sdk_services6.openWrappedKey,
163
+ parseCanonicalNetworkId: () => parseCanonicalNetworkId,
153
164
  parseExpiry: () => parseExpiry,
154
- parseNetworkId: () => import_sdk_services5.parseNetworkId,
165
+ parseNetworkId: () => import_sdk_services6.parseNetworkId,
166
+ parsePkhDid: () => parsePkhDid,
155
167
  parseRecapCapabilities: () => parseRecapCapabilities,
156
168
  parseSpaceUri: () => parseSpaceUri,
169
+ pkhDid: () => pkhDid,
170
+ principalDid: () => principalDid,
171
+ principalDidEquals: () => principalDidEquals,
157
172
  resolveCloudLocation: () => resolveCloudLocation,
158
173
  resolveManifest: () => resolveManifest,
159
- resolveSecretListPrefix: () => import_sdk_services5.resolveSecretListPrefix,
160
- resolveSecretPath: () => import_sdk_services5.resolveSecretPath,
174
+ resolveSecretListPrefix: () => import_sdk_services6.resolveSecretListPrefix,
175
+ resolveSecretPath: () => import_sdk_services6.resolveSecretPath,
161
176
  resolveTinyCloudHosts: () => resolveTinyCloudHosts,
162
177
  resourceCapabilitiesToAbilitiesMap: () => resourceCapabilitiesToAbilitiesMap,
163
178
  resourceCapabilitiesToSpaceAbilitiesMap: () => resourceCapabilitiesToSpaceAbilitiesMap,
164
- serviceError: () => import_sdk_services5.serviceError,
179
+ serviceError: () => import_sdk_services6.serviceError,
165
180
  signLocationRecord: () => signLocationRecord,
166
181
  submitHostDelegation: () => submitHostDelegation,
167
182
  validateClientSession: () => validateClientSession,
168
- validateEnvelope: () => import_sdk_services5.validateEnvelope,
183
+ validateEnvelope: () => import_sdk_services6.validateEnvelope,
169
184
  validateLocationRecord: () => validateLocationRecord,
170
185
  validateLocationRecordPayload: () => validateLocationRecordPayload,
171
186
  validateManifest: () => validateManifest,
172
187
  validatePersistedSessionData: () => validatePersistedSessionData,
173
- verifyDecryptResponse: () => import_sdk_services5.verifyDecryptResponse,
188
+ verifyDecryptResponse: () => import_sdk_services6.verifyDecryptResponse,
174
189
  verifyDidKeyEd25519Signature: () => verifyDidKeyEd25519Signature,
175
190
  verifyLocationRecord: () => verifyLocationRecord
176
191
  });
@@ -218,6 +233,108 @@ var SilentNotificationHandler = class {
218
233
  }
219
234
  };
220
235
 
236
+ // src/identity.ts
237
+ var import_viem = require("viem");
238
+ var IdentityParseError = class extends Error {
239
+ constructor(message) {
240
+ super(message);
241
+ this.name = "IdentityParseError";
242
+ }
243
+ };
244
+ var PKH_DID_RE = /^did:pkh:eip155:(\d+):(0x[a-fA-F0-9]{40})$/;
245
+ var DID_RE = /^did:[a-z0-9]+:.+$/;
246
+ function splitDidUrl(input) {
247
+ const fragmentIndex = input.indexOf("#");
248
+ if (fragmentIndex < 0) {
249
+ return { did: input, fragment: "" };
250
+ }
251
+ return {
252
+ did: input.slice(0, fragmentIndex),
253
+ fragment: input.slice(fragmentIndex)
254
+ };
255
+ }
256
+ function assertValidChainId(chainId) {
257
+ if (!Number.isSafeInteger(chainId) || chainId <= 0) {
258
+ throw new IdentityParseError(`Invalid EIP-155 chain ID: ${chainId}`);
259
+ }
260
+ }
261
+ function isEvmAddress(input) {
262
+ return (0, import_viem.isAddress)(input, { strict: false });
263
+ }
264
+ function canonicalizeAddress(address) {
265
+ if (!isEvmAddress(address)) {
266
+ throw new IdentityParseError(`Invalid EVM address: ${address}`);
267
+ }
268
+ return (0, import_viem.getAddress)(address);
269
+ }
270
+ function addressStorageKey(address) {
271
+ return canonicalizeAddress(address).toLowerCase();
272
+ }
273
+ function pkhDid(address, chainId = 1) {
274
+ assertValidChainId(chainId);
275
+ return `did:pkh:eip155:${chainId}:${canonicalizeAddress(address)}`;
276
+ }
277
+ function parsePkhDid(did) {
278
+ const match = did.match(PKH_DID_RE);
279
+ if (!match) return null;
280
+ const chainId = Number(match[1]);
281
+ assertValidChainId(chainId);
282
+ return {
283
+ method: "pkh",
284
+ namespace: "eip155",
285
+ chainId,
286
+ address: canonicalizeAddress(match[2])
287
+ };
288
+ }
289
+ function canonicalizeDid(did) {
290
+ const pkh = parsePkhDid(did);
291
+ if (pkh) {
292
+ return pkhDid(pkh.address, pkh.chainId);
293
+ }
294
+ if (DID_RE.test(did)) {
295
+ return did;
296
+ }
297
+ throw new IdentityParseError(`Invalid DID: ${did}`);
298
+ }
299
+ function canonicalizeDidUrl(didUrl) {
300
+ const { did, fragment } = splitDidUrl(didUrl);
301
+ return `${canonicalizeDid(did)}${fragment}`;
302
+ }
303
+ function principalDid(didUrl) {
304
+ return canonicalizeDid(splitDidUrl(didUrl).did);
305
+ }
306
+ function didEquals(a, b, options = {}) {
307
+ const canonicalize = options.ignoreFragment ? principalDid : canonicalizeDidUrl;
308
+ return canonicalize(a) === canonicalize(b);
309
+ }
310
+ function principalDidEquals(a, b) {
311
+ return didEquals(a, b, { ignoreFragment: true });
312
+ }
313
+ function didCacheKey(input, options = {}) {
314
+ const { did, fragment } = splitDidUrl(input);
315
+ const pkh = parsePkhDid(did);
316
+ const base = pkh ? `did:pkh:eip155:${pkh.chainId}:${addressStorageKey(pkh.address)}` : canonicalizeDid(did);
317
+ return options.preserveFragment ? `${base}${fragment}` : base;
318
+ }
319
+ function makePkhSpaceId(address, chainId, name) {
320
+ assertValidChainId(chainId);
321
+ if (!name) {
322
+ throw new IdentityParseError("Space name cannot be empty");
323
+ }
324
+ return `tinycloud:pkh:eip155:${chainId}:${canonicalizeAddress(address)}:${name}`;
325
+ }
326
+
327
+ // src/networkId.ts
328
+ var import_sdk_services = require("@tinycloud/sdk-services");
329
+ function canonicalizeNetworkId(networkId) {
330
+ const parsed = (0, import_sdk_services.parseNetworkId)(networkId);
331
+ return (0, import_sdk_services.buildNetworkId)(canonicalizeDid(parsed.ownerDid), parsed.name);
332
+ }
333
+ function parseCanonicalNetworkId(networkId) {
334
+ const canonical = canonicalizeNetworkId(networkId);
335
+ return (0, import_sdk_services.parseNetworkId)(canonical);
336
+ }
337
+
221
338
  // src/storage.schema.ts
222
339
  var import_zod2 = require("zod");
223
340
  var ethereumAddressPattern = /^0x[a-fA-F0-9]{40}$/;
@@ -306,10 +423,10 @@ function validatePersistedSessionData(data) {
306
423
  }
307
424
 
308
425
  // src/TinyCloud.ts
309
- var import_sdk_services2 = require("@tinycloud/sdk-services");
426
+ var import_sdk_services3 = require("@tinycloud/sdk-services");
310
427
 
311
428
  // src/spaces/SpaceService.ts
312
- var import_sdk_services = require("@tinycloud/sdk-services");
429
+ var import_sdk_services2 = require("@tinycloud/sdk-services");
313
430
 
314
431
  // src/spaces/Space.ts
315
432
  var Space = class {
@@ -915,6 +1032,14 @@ var DEFAULT_SIGNED_READ_URL_EXPIRY_MS = EXPIRY.SIGNED_READ_URL_MS;
915
1032
 
916
1033
  // src/spaces/SpaceService.ts
917
1034
  var SERVICE_NAME = "space";
1035
+ function ownerDidEquals(a, b) {
1036
+ if (!b) return false;
1037
+ try {
1038
+ return principalDidEquals(a, b);
1039
+ } catch {
1040
+ return a === b;
1041
+ }
1042
+ }
918
1043
  var SpaceErrorCodes = {
919
1044
  /** Space not found */
920
1045
  NOT_FOUND: "SPACE_NOT_FOUND",
@@ -932,7 +1057,7 @@ var SpaceErrorCodes = {
932
1057
  NOT_INITIALIZED: "NOT_INITIALIZED"
933
1058
  };
934
1059
  function makePublicSpaceId(address, chainId) {
935
- return `tinycloud:pkh:eip155:${chainId}:${address}:public`;
1060
+ return makePkhSpaceId(address, chainId, "public");
936
1061
  }
937
1062
  function parseSpaceUri(uri) {
938
1063
  const fullUriMatch = uri.match(
@@ -940,12 +1065,18 @@ function parseSpaceUri(uri) {
940
1065
  );
941
1066
  if (fullUriMatch) {
942
1067
  const [, chainId, address, name] = fullUriMatch;
943
- return {
944
- owner: `did:pkh:eip155:${chainId}:${address}`,
945
- name,
946
- chainId,
947
- address
948
- };
1068
+ try {
1069
+ const chainIdNumber = Number(chainId);
1070
+ const canonicalAddress = canonicalizeAddress(address);
1071
+ return {
1072
+ owner: pkhDid(canonicalAddress, chainIdNumber),
1073
+ name,
1074
+ chainId: String(chainIdNumber),
1075
+ address: canonicalAddress
1076
+ };
1077
+ } catch {
1078
+ return null;
1079
+ }
949
1080
  }
950
1081
  if (/^[a-zA-Z0-9_-]+$/.test(uri)) {
951
1082
  return {
@@ -957,10 +1088,9 @@ function parseSpaceUri(uri) {
957
1088
  return null;
958
1089
  }
959
1090
  function buildSpaceUri(owner, name) {
960
- const pkhMatch = owner.match(/^did:pkh:eip155:(\d+):(0x[a-fA-F0-9]{40})$/);
961
- if (pkhMatch) {
962
- const [, chainId, address] = pkhMatch;
963
- return `tinycloud:pkh:eip155:${chainId}:${address}:${name}`;
1091
+ const pkh = parsePkhDid(owner);
1092
+ if (pkh) {
1093
+ return makePkhSpaceId(pkh.address, pkh.chainId, name);
964
1094
  }
965
1095
  return `tinycloud:${owner}:${name}`;
966
1096
  }
@@ -1070,8 +1200,8 @@ var SpaceService = class {
1070
1200
  */
1071
1201
  async list() {
1072
1202
  if (!this.session) {
1073
- return (0, import_sdk_services.err)(
1074
- (0, import_sdk_services.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
1203
+ return (0, import_sdk_services2.err)(
1204
+ (0, import_sdk_services2.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
1075
1205
  );
1076
1206
  }
1077
1207
  try {
@@ -1085,10 +1215,10 @@ var SpaceService = class {
1085
1215
  spaces.push(...delegatedSpaces);
1086
1216
  }
1087
1217
  const uniqueSpaces = this.deduplicateSpaces(spaces);
1088
- return (0, import_sdk_services.ok)(uniqueSpaces);
1218
+ return (0, import_sdk_services2.ok)(uniqueSpaces);
1089
1219
  } catch (error) {
1090
- return (0, import_sdk_services.err)(
1091
- (0, import_sdk_services.serviceError)(
1220
+ return (0, import_sdk_services2.err)(
1221
+ (0, import_sdk_services2.serviceError)(
1092
1222
  SpaceErrorCodes.NETWORK_ERROR,
1093
1223
  `Failed to list spaces: ${String(error)}`,
1094
1224
  SERVICE_NAME,
@@ -1109,8 +1239,8 @@ var SpaceService = class {
1109
1239
  });
1110
1240
  if (!response.ok) {
1111
1241
  const errorText = await response.text();
1112
- return (0, import_sdk_services.err)(
1113
- (0, import_sdk_services.serviceError)(
1242
+ return (0, import_sdk_services2.err)(
1243
+ (0, import_sdk_services2.serviceError)(
1114
1244
  SpaceErrorCodes.NETWORK_ERROR,
1115
1245
  `Failed to list owned spaces: ${response.status} - ${errorText}`,
1116
1246
  SERVICE_NAME,
@@ -1121,8 +1251,8 @@ var SpaceService = class {
1121
1251
  const rawData = await response.json();
1122
1252
  const validationResult = validateServerOwnedSpacesResponse(rawData);
1123
1253
  if (!validationResult.ok) {
1124
- return (0, import_sdk_services.err)(
1125
- (0, import_sdk_services.serviceError)(
1254
+ return (0, import_sdk_services2.err)(
1255
+ (0, import_sdk_services2.serviceError)(
1126
1256
  SpaceErrorCodes.NETWORK_ERROR,
1127
1257
  validationResult.error.message,
1128
1258
  SERVICE_NAME,
@@ -1138,10 +1268,10 @@ var SpaceService = class {
1138
1268
  permissions: ["*"]
1139
1269
  // Full permissions for owned spaces
1140
1270
  }));
1141
- return (0, import_sdk_services.ok)(spaces);
1271
+ return (0, import_sdk_services2.ok)(spaces);
1142
1272
  } catch (error) {
1143
- return (0, import_sdk_services.err)(
1144
- (0, import_sdk_services.serviceError)(
1273
+ return (0, import_sdk_services2.err)(
1274
+ (0, import_sdk_services2.serviceError)(
1145
1275
  SpaceErrorCodes.NETWORK_ERROR,
1146
1276
  `Network error listing owned spaces: ${String(error)}`,
1147
1277
  SERVICE_NAME,
@@ -1222,13 +1352,13 @@ var SpaceService = class {
1222
1352
  */
1223
1353
  async create(name) {
1224
1354
  if (!this.session) {
1225
- return (0, import_sdk_services.err)(
1226
- (0, import_sdk_services.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
1355
+ return (0, import_sdk_services2.err)(
1356
+ (0, import_sdk_services2.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
1227
1357
  );
1228
1358
  }
1229
1359
  if (!name || !/^[a-zA-Z0-9_-]+$/.test(name)) {
1230
- return (0, import_sdk_services.err)(
1231
- (0, import_sdk_services.serviceError)(
1360
+ return (0, import_sdk_services2.err)(
1361
+ (0, import_sdk_services2.serviceError)(
1232
1362
  SpaceErrorCodes.INVALID_NAME,
1233
1363
  "Space name must contain only alphanumeric characters, underscores, and hyphens",
1234
1364
  SERVICE_NAME
@@ -1245,16 +1375,16 @@ var SpaceService = class {
1245
1375
  if (!response.ok) {
1246
1376
  const errorText = await response.text();
1247
1377
  if (response.status === 409) {
1248
- return (0, import_sdk_services.err)(
1249
- (0, import_sdk_services.serviceError)(
1378
+ return (0, import_sdk_services2.err)(
1379
+ (0, import_sdk_services2.serviceError)(
1250
1380
  SpaceErrorCodes.ALREADY_EXISTS,
1251
1381
  `Space "${name}" already exists`,
1252
1382
  SERVICE_NAME
1253
1383
  )
1254
1384
  );
1255
1385
  }
1256
- return (0, import_sdk_services.err)(
1257
- (0, import_sdk_services.serviceError)(
1386
+ return (0, import_sdk_services2.err)(
1387
+ (0, import_sdk_services2.serviceError)(
1258
1388
  SpaceErrorCodes.CREATION_FAILED,
1259
1389
  `Failed to create space: ${response.status} - ${errorText}`,
1260
1390
  SERVICE_NAME,
@@ -1265,8 +1395,8 @@ var SpaceService = class {
1265
1395
  const rawData = await response.json();
1266
1396
  const validationResult = validateServerCreateSpaceResponse(rawData);
1267
1397
  if (!validationResult.ok) {
1268
- return (0, import_sdk_services.err)(
1269
- (0, import_sdk_services.serviceError)(
1398
+ return (0, import_sdk_services2.err)(
1399
+ (0, import_sdk_services2.serviceError)(
1270
1400
  SpaceErrorCodes.CREATION_FAILED,
1271
1401
  validationResult.error.message,
1272
1402
  SERVICE_NAME,
@@ -1282,10 +1412,10 @@ var SpaceService = class {
1282
1412
  permissions: ["*"]
1283
1413
  };
1284
1414
  this.infoCache.set(spaceInfo.id, { info: spaceInfo, cachedAt: Date.now() });
1285
- return (0, import_sdk_services.ok)(spaceInfo);
1415
+ return (0, import_sdk_services2.ok)(spaceInfo);
1286
1416
  } catch (error) {
1287
- return (0, import_sdk_services.err)(
1288
- (0, import_sdk_services.serviceError)(
1417
+ return (0, import_sdk_services2.err)(
1418
+ (0, import_sdk_services2.serviceError)(
1289
1419
  SpaceErrorCodes.NETWORK_ERROR,
1290
1420
  `Network error creating space: ${String(error)}`,
1291
1421
  SERVICE_NAME,
@@ -1349,10 +1479,10 @@ var SpaceService = class {
1349
1479
  const spaceId = this.resolveSpaceId(nameOrUri);
1350
1480
  const cached = this.infoCache.get(spaceId);
1351
1481
  if (cached && Date.now() - cached.cachedAt < this.cacheTTL) {
1352
- return (0, import_sdk_services.ok)(true);
1482
+ return (0, import_sdk_services2.ok)(true);
1353
1483
  }
1354
1484
  const infoResult = await this.getSpaceInfo(spaceId);
1355
- return (0, import_sdk_services.ok)(infoResult.ok);
1485
+ return (0, import_sdk_services2.ok)(infoResult.ok);
1356
1486
  }
1357
1487
  // ===========================================================================
1358
1488
  // Space Info
@@ -1363,11 +1493,11 @@ var SpaceService = class {
1363
1493
  async getSpaceInfo(spaceId) {
1364
1494
  const cached = this.infoCache.get(spaceId);
1365
1495
  if (cached && Date.now() - cached.cachedAt < this.cacheTTL) {
1366
- return (0, import_sdk_services.ok)(cached.info);
1496
+ return (0, import_sdk_services2.ok)(cached.info);
1367
1497
  }
1368
1498
  if (!this.session) {
1369
- return (0, import_sdk_services.err)(
1370
- (0, import_sdk_services.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
1499
+ return (0, import_sdk_services2.err)(
1500
+ (0, import_sdk_services2.serviceError)(SpaceErrorCodes.AUTH_REQUIRED, "Authentication required", SERVICE_NAME)
1371
1501
  );
1372
1502
  }
1373
1503
  try {
@@ -1379,13 +1509,13 @@ var SpaceService = class {
1379
1509
  });
1380
1510
  if (!response.ok) {
1381
1511
  if (response.status === 404) {
1382
- return (0, import_sdk_services.err)(
1383
- (0, import_sdk_services.serviceError)(SpaceErrorCodes.NOT_FOUND, `Space not found: ${spaceId}`, SERVICE_NAME)
1512
+ return (0, import_sdk_services2.err)(
1513
+ (0, import_sdk_services2.serviceError)(SpaceErrorCodes.NOT_FOUND, `Space not found: ${spaceId}`, SERVICE_NAME)
1384
1514
  );
1385
1515
  }
1386
1516
  const errorText = await response.text();
1387
- return (0, import_sdk_services.err)(
1388
- (0, import_sdk_services.serviceError)(
1517
+ return (0, import_sdk_services2.err)(
1518
+ (0, import_sdk_services2.serviceError)(
1389
1519
  SpaceErrorCodes.NETWORK_ERROR,
1390
1520
  `Failed to get space info: ${response.status} - ${errorText}`,
1391
1521
  SERVICE_NAME
@@ -1395,8 +1525,8 @@ var SpaceService = class {
1395
1525
  const rawData = await response.json();
1396
1526
  const validationResult = validateServerSpaceInfoResponse(rawData);
1397
1527
  if (!validationResult.ok) {
1398
- return (0, import_sdk_services.err)(
1399
- (0, import_sdk_services.serviceError)(
1528
+ return (0, import_sdk_services2.err)(
1529
+ (0, import_sdk_services2.serviceError)(
1400
1530
  SpaceErrorCodes.NETWORK_ERROR,
1401
1531
  validationResult.error.message,
1402
1532
  SERVICE_NAME,
@@ -1409,15 +1539,15 @@ var SpaceService = class {
1409
1539
  id: data.id,
1410
1540
  name: data.name ?? this.extractNameFromId(data.id),
1411
1541
  owner: data.owner,
1412
- type: data.type ?? (data.owner === this.userDid ? "owned" : "delegated"),
1542
+ type: data.type ?? (ownerDidEquals(data.owner, this.userDid) ? "owned" : "delegated"),
1413
1543
  permissions: data.permissions,
1414
1544
  expiresAt: data.expiresAt ? new Date(data.expiresAt) : void 0
1415
1545
  };
1416
1546
  this.infoCache.set(spaceId, { info: spaceInfo, cachedAt: Date.now() });
1417
- return (0, import_sdk_services.ok)(spaceInfo);
1547
+ return (0, import_sdk_services2.ok)(spaceInfo);
1418
1548
  } catch (error) {
1419
- return (0, import_sdk_services.err)(
1420
- (0, import_sdk_services.serviceError)(
1549
+ return (0, import_sdk_services2.err)(
1550
+ (0, import_sdk_services2.serviceError)(
1421
1551
  SpaceErrorCodes.NETWORK_ERROR,
1422
1552
  `Network error getting space info: ${String(error)}`,
1423
1553
  SERVICE_NAME,
@@ -1488,8 +1618,8 @@ var SpaceService = class {
1488
1618
  });
1489
1619
  if (!response.ok) {
1490
1620
  const errorText = await response.text();
1491
- return (0, import_sdk_services.err)(
1492
- (0, import_sdk_services.serviceError)(
1621
+ return (0, import_sdk_services2.err)(
1622
+ (0, import_sdk_services2.serviceError)(
1493
1623
  SpaceErrorCodes.NETWORK_ERROR,
1494
1624
  `Failed to list delegations: ${response.status} - ${errorText}`,
1495
1625
  SERVICE_NAME
@@ -1499,8 +1629,8 @@ var SpaceService = class {
1499
1629
  const rawData = await response.json();
1500
1630
  const validationResult = validateServerDelegationsResponse(rawData);
1501
1631
  if (!validationResult.ok) {
1502
- return (0, import_sdk_services.err)(
1503
- (0, import_sdk_services.serviceError)(
1632
+ return (0, import_sdk_services2.err)(
1633
+ (0, import_sdk_services2.serviceError)(
1504
1634
  SpaceErrorCodes.NETWORK_ERROR,
1505
1635
  validationResult.error.message,
1506
1636
  SERVICE_NAME,
@@ -1509,10 +1639,10 @@ var SpaceService = class {
1509
1639
  );
1510
1640
  }
1511
1641
  const delegations = transformServerDelegations(validationResult.data, spaceId);
1512
- return (0, import_sdk_services.ok)(delegations);
1642
+ return (0, import_sdk_services2.ok)(delegations);
1513
1643
  } catch (error) {
1514
- return (0, import_sdk_services.err)(
1515
- (0, import_sdk_services.serviceError)(
1644
+ return (0, import_sdk_services2.err)(
1645
+ (0, import_sdk_services2.serviceError)(
1516
1646
  SpaceErrorCodes.NETWORK_ERROR,
1517
1647
  `Network error listing delegations: ${String(error)}`,
1518
1648
  SERVICE_NAME
@@ -1543,8 +1673,8 @@ var SpaceService = class {
1543
1673
  });
1544
1674
  if (!response.ok) {
1545
1675
  const errorText = await response.text();
1546
- return (0, import_sdk_services.err)(
1547
- (0, import_sdk_services.serviceError)(
1676
+ return (0, import_sdk_services2.err)(
1677
+ (0, import_sdk_services2.serviceError)(
1548
1678
  SpaceErrorCodes.NETWORK_ERROR,
1549
1679
  `Failed to list received delegations: ${response.status} - ${errorText}`,
1550
1680
  SERVICE_NAME
@@ -1554,8 +1684,8 @@ var SpaceService = class {
1554
1684
  const rawData = await response.json();
1555
1685
  const validationResult = validateServerDelegationsResponse(rawData);
1556
1686
  if (!validationResult.ok) {
1557
- return (0, import_sdk_services.err)(
1558
- (0, import_sdk_services.serviceError)(
1687
+ return (0, import_sdk_services2.err)(
1688
+ (0, import_sdk_services2.serviceError)(
1559
1689
  SpaceErrorCodes.NETWORK_ERROR,
1560
1690
  validationResult.error.message,
1561
1691
  SERVICE_NAME,
@@ -1564,10 +1694,10 @@ var SpaceService = class {
1564
1694
  );
1565
1695
  }
1566
1696
  const delegations = transformServerDelegations(validationResult.data, spaceId);
1567
- return (0, import_sdk_services.ok)(delegations);
1697
+ return (0, import_sdk_services2.ok)(delegations);
1568
1698
  } catch (error) {
1569
- return (0, import_sdk_services.err)(
1570
- (0, import_sdk_services.serviceError)(
1699
+ return (0, import_sdk_services2.err)(
1700
+ (0, import_sdk_services2.serviceError)(
1571
1701
  SpaceErrorCodes.NETWORK_ERROR,
1572
1702
  `Network error listing received delegations: ${String(error)}`,
1573
1703
  SERVICE_NAME
@@ -1579,8 +1709,8 @@ var SpaceService = class {
1579
1709
  if (self.createDelegationFn) {
1580
1710
  return self.createDelegationFn({ ...params, spaceId });
1581
1711
  }
1582
- return (0, import_sdk_services.err)(
1583
- (0, import_sdk_services.serviceError)(
1712
+ return (0, import_sdk_services2.err)(
1713
+ (0, import_sdk_services2.serviceError)(
1584
1714
  SpaceErrorCodes.NOT_INITIALIZED,
1585
1715
  "Delegation creation requires a createDelegation function. This should be provided by the platform SDK (web-sdk or node-sdk).",
1586
1716
  SERVICE_NAME
@@ -1602,18 +1732,18 @@ var SpaceService = class {
1602
1732
  });
1603
1733
  if (!response.ok) {
1604
1734
  const errorText = await response.text();
1605
- return (0, import_sdk_services.err)(
1606
- (0, import_sdk_services.serviceError)(
1735
+ return (0, import_sdk_services2.err)(
1736
+ (0, import_sdk_services2.serviceError)(
1607
1737
  SpaceErrorCodes.NETWORK_ERROR,
1608
1738
  `Failed to revoke delegation: ${response.status} - ${errorText}`,
1609
1739
  SERVICE_NAME
1610
1740
  )
1611
1741
  );
1612
1742
  }
1613
- return (0, import_sdk_services.ok)(void 0);
1743
+ return (0, import_sdk_services2.ok)(void 0);
1614
1744
  } catch (error) {
1615
- return (0, import_sdk_services.err)(
1616
- (0, import_sdk_services.serviceError)(
1745
+ return (0, import_sdk_services2.err)(
1746
+ (0, import_sdk_services2.serviceError)(
1617
1747
  SpaceErrorCodes.NETWORK_ERROR,
1618
1748
  `Network error revoking delegation: ${String(error)}`,
1619
1749
  SERVICE_NAME
@@ -1636,18 +1766,18 @@ var SpaceService = class {
1636
1766
  if (self.sharingService) {
1637
1767
  const result = await self.sharingService.generate(params);
1638
1768
  if (!result.ok) {
1639
- return (0, import_sdk_services.err)(
1640
- (0, import_sdk_services.serviceError)(
1769
+ return (0, import_sdk_services2.err)(
1770
+ (0, import_sdk_services2.serviceError)(
1641
1771
  SpaceErrorCodes.NETWORK_ERROR,
1642
1772
  result.error.message || "Failed to generate share link",
1643
1773
  SERVICE_NAME
1644
1774
  )
1645
1775
  );
1646
1776
  }
1647
- return (0, import_sdk_services.ok)(result.data);
1777
+ return (0, import_sdk_services2.ok)(result.data);
1648
1778
  }
1649
- return (0, import_sdk_services.err)(
1650
- (0, import_sdk_services.serviceError)(
1779
+ return (0, import_sdk_services2.err)(
1780
+ (0, import_sdk_services2.serviceError)(
1651
1781
  SpaceErrorCodes.NOT_INITIALIZED,
1652
1782
  "SharingService not configured. V2 sharing requires a SharingService instance.",
1653
1783
  SERVICE_NAME
@@ -1655,8 +1785,8 @@ var SpaceService = class {
1655
1785
  );
1656
1786
  },
1657
1787
  async list() {
1658
- return (0, import_sdk_services.err)(
1659
- (0, import_sdk_services.serviceError)(
1788
+ return (0, import_sdk_services2.err)(
1789
+ (0, import_sdk_services2.serviceError)(
1660
1790
  SpaceErrorCodes.NOT_INITIALIZED,
1661
1791
  "Listing share links is not supported in v2. Share links are self-contained tokens that are not tracked on the server.",
1662
1792
  SERVICE_NAME
@@ -1664,8 +1794,8 @@ var SpaceService = class {
1664
1794
  );
1665
1795
  },
1666
1796
  async revoke(token) {
1667
- return (0, import_sdk_services.err)(
1668
- (0, import_sdk_services.serviceError)(
1797
+ return (0, import_sdk_services2.err)(
1798
+ (0, import_sdk_services2.serviceError)(
1669
1799
  SpaceErrorCodes.NOT_INITIALIZED,
1670
1800
  "Revoking share links by token is not supported in v2. To revoke access, revoke the underlying delegation using space.delegations.revoke(cid).",
1671
1801
  SERVICE_NAME
@@ -1725,7 +1855,7 @@ var TinyCloud = class _TinyCloud {
1725
1855
  "hosts are required to initialize services. Provide them via config.hosts or initializeServices()."
1726
1856
  );
1727
1857
  }
1728
- this._serviceContext = new import_sdk_services2.ServiceContext({
1858
+ this._serviceContext = new import_sdk_services3.ServiceContext({
1729
1859
  invoke: effectiveInvoke,
1730
1860
  invokeAny: this.config.invokeAny,
1731
1861
  fetch: fetchFn ?? this.config.fetch ?? globalThis.fetch.bind(globalThis),
@@ -1733,10 +1863,10 @@ var TinyCloud = class _TinyCloud {
1733
1863
  retryPolicy: this.config.retryPolicy
1734
1864
  });
1735
1865
  const serviceConstructors = {
1736
- kv: import_sdk_services2.KVService,
1737
- sql: import_sdk_services2.SQLService,
1738
- duckdb: import_sdk_services2.DuckDbService,
1739
- hooks: import_sdk_services2.HooksService,
1866
+ kv: import_sdk_services3.KVService,
1867
+ sql: import_sdk_services3.SQLService,
1868
+ duckdb: import_sdk_services3.DuckDbService,
1869
+ hooks: import_sdk_services3.HooksService,
1740
1870
  ...this.config.services
1741
1871
  };
1742
1872
  for (const [name, ServiceClass] of Object.entries(serviceConstructors)) {
@@ -1991,18 +2121,18 @@ var TinyCloud = class _TinyCloud {
1991
2121
  const address = this.address();
1992
2122
  const chainId = this.chainId();
1993
2123
  if (!address || !chainId) {
1994
- return (0, import_sdk_services2.err)(
1995
- (0, import_sdk_services2.serviceError)(
1996
- import_sdk_services2.ErrorCodes.AUTH_REQUIRED,
2124
+ return (0, import_sdk_services3.err)(
2125
+ (0, import_sdk_services3.serviceError)(
2126
+ import_sdk_services3.ErrorCodes.AUTH_REQUIRED,
1997
2127
  "Must be signed in to ensure public space",
1998
2128
  "public-space"
1999
2129
  )
2000
2130
  );
2001
2131
  }
2002
2132
  if (!this._serviceContext) {
2003
- return (0, import_sdk_services2.err)(
2004
- (0, import_sdk_services2.serviceError)(
2005
- import_sdk_services2.ErrorCodes.AUTH_REQUIRED,
2133
+ return (0, import_sdk_services3.err)(
2134
+ (0, import_sdk_services3.serviceError)(
2135
+ import_sdk_services3.ErrorCodes.AUTH_REQUIRED,
2006
2136
  "Services not initialized. Call initializeServices() or signIn() first.",
2007
2137
  "public-space"
2008
2138
  )
@@ -2012,9 +2142,9 @@ var TinyCloud = class _TinyCloud {
2012
2142
  try {
2013
2143
  const session = this._serviceContext.session;
2014
2144
  if (!session) {
2015
- return (0, import_sdk_services2.err)(
2016
- (0, import_sdk_services2.serviceError)(
2017
- import_sdk_services2.ErrorCodes.AUTH_REQUIRED,
2145
+ return (0, import_sdk_services3.err)(
2146
+ (0, import_sdk_services3.serviceError)(
2147
+ import_sdk_services3.ErrorCodes.AUTH_REQUIRED,
2018
2148
  "No active session",
2019
2149
  "public-space"
2020
2150
  )
@@ -2031,7 +2161,7 @@ var TinyCloud = class _TinyCloud {
2031
2161
  { method: "POST", headers, body: JSON.stringify({ spaceId }) }
2032
2162
  );
2033
2163
  if (response.ok) {
2034
- return (0, import_sdk_services2.ok)(void 0);
2164
+ return (0, import_sdk_services3.ok)(void 0);
2035
2165
  }
2036
2166
  if (response.status === 404) {
2037
2167
  const createHeaders = this._serviceContext.invoke(
@@ -2050,31 +2180,31 @@ var TinyCloud = class _TinyCloud {
2050
2180
  );
2051
2181
  if (!createResponse.ok) {
2052
2182
  if (createResponse.status === 409) {
2053
- return (0, import_sdk_services2.ok)(void 0);
2183
+ return (0, import_sdk_services3.ok)(void 0);
2054
2184
  }
2055
2185
  const errorText2 = await createResponse.text();
2056
- return (0, import_sdk_services2.err)(
2057
- (0, import_sdk_services2.serviceError)(
2058
- import_sdk_services2.ErrorCodes.NETWORK_ERROR,
2186
+ return (0, import_sdk_services3.err)(
2187
+ (0, import_sdk_services3.serviceError)(
2188
+ import_sdk_services3.ErrorCodes.NETWORK_ERROR,
2059
2189
  `Failed to create public space: ${createResponse.status} - ${errorText2}`,
2060
2190
  "public-space"
2061
2191
  )
2062
2192
  );
2063
2193
  }
2064
- return (0, import_sdk_services2.ok)(void 0);
2194
+ return (0, import_sdk_services3.ok)(void 0);
2065
2195
  }
2066
2196
  const errorText = await response.text();
2067
- return (0, import_sdk_services2.err)(
2068
- (0, import_sdk_services2.serviceError)(
2069
- import_sdk_services2.ErrorCodes.NETWORK_ERROR,
2197
+ return (0, import_sdk_services3.err)(
2198
+ (0, import_sdk_services3.serviceError)(
2199
+ import_sdk_services3.ErrorCodes.NETWORK_ERROR,
2070
2200
  `Failed to check public space: ${response.status} - ${errorText}`,
2071
2201
  "public-space"
2072
2202
  )
2073
2203
  );
2074
2204
  } catch (error) {
2075
- return (0, import_sdk_services2.err)(
2076
- (0, import_sdk_services2.serviceError)(
2077
- import_sdk_services2.ErrorCodes.NETWORK_ERROR,
2205
+ return (0, import_sdk_services3.err)(
2206
+ (0, import_sdk_services3.serviceError)(
2207
+ import_sdk_services3.ErrorCodes.NETWORK_ERROR,
2078
2208
  `Network error ensuring public space: ${String(error)}`,
2079
2209
  "public-space",
2080
2210
  { cause: error instanceof Error ? error : void 0 }
@@ -2107,8 +2237,8 @@ var TinyCloud = class _TinyCloud {
2107
2237
  if (!session) {
2108
2238
  throw new Error("No active session. Sign in first.");
2109
2239
  }
2110
- const publicKV = new import_sdk_services2.KVService({ prefix: "" });
2111
- const publicContext = new import_sdk_services2.ServiceContext({
2240
+ const publicKV = new import_sdk_services3.KVService({ prefix: "" });
2241
+ const publicContext = new import_sdk_services3.ServiceContext({
2112
2242
  invoke: this._serviceContext.invoke,
2113
2243
  fetch: this._serviceContext.fetch,
2114
2244
  hosts: this._serviceContext.hosts,
@@ -2140,18 +2270,18 @@ var TinyCloud = class _TinyCloud {
2140
2270
  const response = await doFetch(url, { method: "GET" });
2141
2271
  if (!response.ok) {
2142
2272
  if (response.status === 404) {
2143
- return (0, import_sdk_services2.err)(
2144
- (0, import_sdk_services2.serviceError)(
2145
- import_sdk_services2.ErrorCodes.NOT_FOUND,
2273
+ return (0, import_sdk_services3.err)(
2274
+ (0, import_sdk_services3.serviceError)(
2275
+ import_sdk_services3.ErrorCodes.NOT_FOUND,
2146
2276
  `Key not found: ${key} in space ${spaceId}`,
2147
2277
  "public-space"
2148
2278
  )
2149
2279
  );
2150
2280
  }
2151
2281
  const errorText = await response.text();
2152
- return (0, import_sdk_services2.err)(
2153
- (0, import_sdk_services2.serviceError)(
2154
- import_sdk_services2.ErrorCodes.NETWORK_ERROR,
2282
+ return (0, import_sdk_services3.err)(
2283
+ (0, import_sdk_services3.serviceError)(
2284
+ import_sdk_services3.ErrorCodes.NETWORK_ERROR,
2155
2285
  `Failed to read public space: ${response.status} - ${errorText}`,
2156
2286
  "public-space",
2157
2287
  { meta: { status: response.status } }
@@ -2170,11 +2300,11 @@ var TinyCloud = class _TinyCloud {
2170
2300
  data = text;
2171
2301
  }
2172
2302
  }
2173
- return (0, import_sdk_services2.ok)(data);
2303
+ return (0, import_sdk_services3.ok)(data);
2174
2304
  } catch (error) {
2175
- return (0, import_sdk_services2.err)(
2176
- (0, import_sdk_services2.serviceError)(
2177
- import_sdk_services2.ErrorCodes.NETWORK_ERROR,
2305
+ return (0, import_sdk_services3.err)(
2306
+ (0, import_sdk_services3.serviceError)(
2307
+ import_sdk_services3.ErrorCodes.NETWORK_ERROR,
2178
2308
  `Network error reading public space: ${String(error)}`,
2179
2309
  "public-space",
2180
2310
  { cause: error instanceof Error ? error : void 0 }
@@ -2200,7 +2330,7 @@ var TinyCloud = class _TinyCloud {
2200
2330
  };
2201
2331
 
2202
2332
  // src/index.ts
2203
- var import_sdk_services5 = require("@tinycloud/sdk-services");
2333
+ var import_sdk_services6 = require("@tinycloud/sdk-services");
2204
2334
 
2205
2335
  // src/space.ts
2206
2336
  async function fetchPeerId(host, spaceId) {
@@ -2868,7 +2998,7 @@ function validateEncodedShareData(data) {
2868
2998
 
2869
2999
  // src/manifest.ts
2870
3000
  var import_ms = __toESM(require("ms"), 1);
2871
- var import_sdk_services3 = require("@tinycloud/sdk-services");
3001
+ var import_sdk_services4 = require("@tinycloud/sdk-services");
2872
3002
  var ManifestValidationError = class extends Error {
2873
3003
  constructor(message) {
2874
3004
  super(`Manifest validation failed: ${message}`);
@@ -3115,13 +3245,13 @@ function validateManifestSecrets(secrets) {
3115
3245
  throw new ManifestValidationError("manifest.secrets must be an object");
3116
3246
  }
3117
3247
  for (const [name, spec] of Object.entries(secrets)) {
3118
- if (!import_sdk_services3.SECRET_NAME_RE.test(name)) {
3248
+ if (!import_sdk_services4.SECRET_NAME_RE.test(name)) {
3119
3249
  throw new ManifestValidationError(
3120
- `manifest.secrets.${name} must match ${import_sdk_services3.SECRET_NAME_RE.source}`
3250
+ `manifest.secrets.${name} must match ${import_sdk_services4.SECRET_NAME_RE.source}`
3121
3251
  );
3122
3252
  }
3123
3253
  try {
3124
- (0, import_sdk_services3.resolveSecretPath)(
3254
+ (0, import_sdk_services4.resolveSecretPath)(
3125
3255
  secretNameFromSpec(name, spec),
3126
3256
  { scope: secretScopeFromSpec(spec) }
3127
3257
  );
@@ -3333,7 +3463,7 @@ function secretEntriesForManifest(secrets) {
3333
3463
  const entries = [];
3334
3464
  for (const [name, spec] of Object.entries(secrets)) {
3335
3465
  const actions = secretActionsFromSpec(name, spec);
3336
- const secretPath = (0, import_sdk_services3.resolveSecretPath)(
3466
+ const secretPath = (0, import_sdk_services4.resolveSecretPath)(
3337
3467
  secretNameFromSpec(name, spec),
3338
3468
  { scope: secretScopeFromSpec(spec) }
3339
3469
  );
@@ -4264,7 +4394,7 @@ function createSharingService(config) {
4264
4394
  }
4265
4395
 
4266
4396
  // src/authorization/CapabilityKeyRegistry.ts
4267
- var import_sdk_services4 = require("@tinycloud/sdk-services");
4397
+ var import_sdk_services5 = require("@tinycloud/sdk-services");
4268
4398
  var SERVICE_NAME2 = "capability-key-registry";
4269
4399
  var CapabilityKeyRegistryErrorCodes = {
4270
4400
  /** Key not found in registry */
@@ -4482,8 +4612,8 @@ var CapabilityKeyRegistry = class {
4482
4612
  revokeDelegation(cid) {
4483
4613
  const stored = this.store.byCid.get(cid);
4484
4614
  if (!stored) {
4485
- return (0, import_sdk_services4.err)(
4486
- (0, import_sdk_services4.serviceError)(
4615
+ return (0, import_sdk_services5.err)(
4616
+ (0, import_sdk_services5.serviceError)(
4487
4617
  CapabilityKeyRegistryErrorCodes.KEY_NOT_FOUND,
4488
4618
  `Delegation not found: ${cid}`,
4489
4619
  SERVICE_NAME2
@@ -4505,7 +4635,7 @@ var CapabilityKeyRegistry = class {
4505
4635
  }
4506
4636
  }
4507
4637
  }
4508
- return (0, import_sdk_services4.ok)(void 0);
4638
+ return (0, import_sdk_services5.ok)(void 0);
4509
4639
  }
4510
4640
  // ===========================================================================
4511
4641
  // Search
@@ -4762,7 +4892,7 @@ var import_multiaddr_to_uri = require("@multiformats/multiaddr-to-uri");
4762
4892
  var import_uri_to_multiaddr = require("@multiformats/uri-to-multiaddr");
4763
4893
  var import_ed25519 = require("@noble/curves/ed25519");
4764
4894
  var import_basics = require("multiformats/basics");
4765
- var import_viem = require("viem");
4895
+ var import_viem2 = require("viem");
4766
4896
  var DEFAULT_TINYCLOUD_LOCATION_REGISTRY_URL = "https://registry.tinycloud.xyz";
4767
4897
  var DEFAULT_TINYCLOUD_FALLBACK_HOST = "https://node.tinycloud.xyz";
4768
4898
  var LocationRecordValidationError = class extends Error {
@@ -5068,7 +5198,7 @@ async function verifyPkhSignature(did, payload, signature) {
5068
5198
  if (!/^0x[0-9a-fA-F]+$/.test(signature)) {
5069
5199
  throw new LocationRecordValidationError("did:pkh signature must be hex");
5070
5200
  }
5071
- return (0, import_viem.verifyMessage)({
5201
+ return (0, import_viem2.verifyMessage)({
5072
5202
  address,
5073
5203
  message: payload,
5074
5204
  signature
@@ -5303,6 +5433,7 @@ function parseRecapCapabilities(parseWasm, siwe) {
5303
5433
  EnsDataSchema,
5304
5434
  ErrorCodes,
5305
5435
  HooksService,
5436
+ IdentityParseError,
5306
5437
  KVService,
5307
5438
  LocationRecordValidationError,
5308
5439
  ManifestValidationError,
@@ -5333,6 +5464,7 @@ function parseRecapCapabilities(parseWasm, siwe) {
5333
5464
  VaultPublicSpaceKVActions,
5334
5465
  VersionCheckError,
5335
5466
  activateSessionWithHost,
5467
+ addressStorageKey,
5336
5468
  applyPrefix,
5337
5469
  buildCanonicalDecryptRequest,
5338
5470
  buildDecryptAttenuation,
@@ -5343,7 +5475,11 @@ function parseRecapCapabilities(parseWasm, siwe) {
5343
5475
  canonicalHashHex,
5344
5476
  canonicalLocationPayload,
5345
5477
  canonicalSignedResponse,
5478
+ canonicalizeAddress,
5479
+ canonicalizeDid,
5480
+ canonicalizeDidUrl,
5346
5481
  canonicalizeEncryptionJson,
5482
+ canonicalizeNetworkId,
5347
5483
  canonicalizeSecretScope,
5348
5484
  checkDecryptInvocationInput,
5349
5485
  checkNodeInfo,
@@ -5357,6 +5493,8 @@ function parseRecapCapabilities(parseWasm, siwe) {
5357
5493
  defaultSignStrategy,
5358
5494
  defaultSpaceCreationHandler,
5359
5495
  deriveSignedReceiverKey,
5496
+ didCacheKey,
5497
+ didEquals,
5360
5498
  discoverNetwork,
5361
5499
  encryptToNetwork,
5362
5500
  encryptionBase64Decode,
@@ -5376,9 +5514,11 @@ function parseRecapCapabilities(parseWasm, siwe) {
5376
5514
  hexEncode,
5377
5515
  httpUrlToMultiaddr,
5378
5516
  isCapabilitySubset,
5517
+ isEvmAddress,
5379
5518
  isNetworkId,
5380
5519
  loadManifest,
5381
5520
  locationPayloadForRecord,
5521
+ makePkhSpaceId,
5382
5522
  makePublicSpaceId,
5383
5523
  manifestAbilitiesUnion,
5384
5524
  multiaddrToHttpUrl,
@@ -5386,10 +5526,15 @@ function parseRecapCapabilities(parseWasm, siwe) {
5386
5526
  normalizeDefaults,
5387
5527
  ok,
5388
5528
  openWrappedKey,
5529
+ parseCanonicalNetworkId,
5389
5530
  parseExpiry,
5390
5531
  parseNetworkId,
5532
+ parsePkhDid,
5391
5533
  parseRecapCapabilities,
5392
5534
  parseSpaceUri,
5535
+ pkhDid,
5536
+ principalDid,
5537
+ principalDidEquals,
5393
5538
  resolveCloudLocation,
5394
5539
  resolveManifest,
5395
5540
  resolveSecretListPrefix,