@tinycloud/node-sdk 2.2.1-beta.1 → 2.3.0-beta.3

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
@@ -17053,6 +17053,7 @@ __export(index_exports, {
17053
17053
  EncryptionService: () => import_sdk_core14.EncryptionService,
17054
17054
  FileSessionStorage: () => FileSessionStorage,
17055
17055
  HooksService: () => import_sdk_core15.HooksService,
17056
+ IdentityParseError: () => import_sdk_core8.IdentityParseError,
17056
17057
  KVService: () => import_sdk_core10.KVService,
17057
17058
  ManifestValidationError: () => import_sdk_core9.ManifestValidationError,
17058
17059
  MemorySessionStorage: () => MemorySessionStorage,
@@ -17083,6 +17084,7 @@ __export(index_exports, {
17083
17084
  VaultPublicSpaceKVActions: () => import_sdk_core13.VaultPublicSpaceKVActions,
17084
17085
  VersionCheckError: () => import_sdk_core19.VersionCheckError,
17085
17086
  WasmKeyProvider: () => WasmKeyProvider,
17087
+ addressStorageKey: () => import_sdk_core8.addressStorageKey,
17086
17088
  buildCanonicalDecryptRequest: () => import_sdk_core14.buildCanonicalDecryptRequest,
17087
17089
  buildDecryptAttenuation: () => import_sdk_core14.buildDecryptAttenuation,
17088
17090
  buildDecryptFacts: () => import_sdk_core14.buildDecryptFacts,
@@ -17091,6 +17093,9 @@ __export(index_exports, {
17091
17093
  buildSpaceUri: () => import_sdk_core18.buildSpaceUri,
17092
17094
  canonicalHashHex: () => import_sdk_core14.canonicalHashHex,
17093
17095
  canonicalSignedResponse: () => import_sdk_core14.canonicalSignedResponse,
17096
+ canonicalizeAddress: () => import_sdk_core8.canonicalizeAddress,
17097
+ canonicalizeDid: () => import_sdk_core8.canonicalizeDid,
17098
+ canonicalizeDidUrl: () => import_sdk_core8.canonicalizeDidUrl,
17094
17099
  canonicalizeEncryptionJson: () => import_sdk_core14.canonicalizeEncryptionJson,
17095
17100
  canonicalizeSecretScope: () => import_sdk_core13.canonicalizeSecretScope,
17096
17101
  checkDecryptInvocationInput: () => import_sdk_core14.checkDecryptInvocationInput,
@@ -17106,6 +17111,8 @@ __export(index_exports, {
17106
17111
  defaultSpaceCreationHandler: () => import_sdk_core8.defaultSpaceCreationHandler,
17107
17112
  deriveSignedReceiverKey: () => import_sdk_core14.deriveSignedReceiverKey,
17108
17113
  deserializeDelegation: () => deserializeDelegation,
17114
+ didCacheKey: () => import_sdk_core8.didCacheKey,
17115
+ didEquals: () => import_sdk_core8.didEquals,
17109
17116
  discoverNetwork: () => import_sdk_core14.discoverNetwork,
17110
17117
  encryptToNetwork: () => import_sdk_core14.encryptToNetwork,
17111
17118
  encryptionBase64Decode: () => import_sdk_core14.encryptionBase64Decode,
@@ -17121,14 +17128,20 @@ __export(index_exports, {
17121
17128
  hexDecode: () => import_sdk_core14.hexDecode,
17122
17129
  hexEncode: () => import_sdk_core14.hexEncode,
17123
17130
  isCapabilitySubset: () => import_sdk_core9.isCapabilitySubset,
17131
+ isEvmAddress: () => import_sdk_core8.isEvmAddress,
17124
17132
  isNetworkId: () => import_sdk_core14.isNetworkId,
17125
17133
  loadManifest: () => import_sdk_core9.loadManifest,
17134
+ makePkhSpaceId: () => import_sdk_core8.makePkhSpaceId,
17126
17135
  makePublicSpaceId: () => import_sdk_core18.makePublicSpaceId,
17127
17136
  networkDiscoveryKey: () => import_sdk_core14.networkDiscoveryKey,
17128
17137
  openWrappedKey: () => import_sdk_core14.openWrappedKey,
17129
17138
  parseExpiry: () => import_sdk_core9.parseExpiry,
17130
17139
  parseNetworkId: () => import_sdk_core14.parseNetworkId,
17140
+ parsePkhDid: () => import_sdk_core8.parsePkhDid,
17131
17141
  parseSpaceUri: () => import_sdk_core18.parseSpaceUri,
17142
+ pkhDid: () => import_sdk_core8.pkhDid,
17143
+ principalDid: () => import_sdk_core8.principalDid,
17144
+ principalDidEquals: () => import_sdk_core8.principalDidEquals,
17132
17145
  resolveManifest: () => import_sdk_core9.resolveManifest,
17133
17146
  resolveSecretListPrefix: () => import_sdk_core13.resolveSecretListPrefix,
17134
17147
  resolveSecretPath: () => import_sdk_core13.resolveSecretPath,
@@ -17440,15 +17453,16 @@ var NodeUserAuthorization = class {
17440
17453
  * expired-at-epoch-zero.
17441
17454
  */
17442
17455
  setRestoredTinyCloudSession(session) {
17443
- this._tinyCloudSession = session;
17444
- this._address = session.address;
17456
+ const address = (0, import_sdk_core.canonicalizeAddress)(session.address);
17457
+ this._tinyCloudSession = { ...session, address };
17458
+ this._address = address;
17445
17459
  this._chainId = session.chainId;
17446
17460
  }
17447
17461
  async resolveTinyCloudHostsForSignIn(address, chainId) {
17448
17462
  if (this.tinycloudHosts && this.tinycloudHosts.length > 0) {
17449
17463
  return;
17450
17464
  }
17451
- const subject = `did:pkh:eip155:${chainId}:${address}`;
17465
+ const subject = (0, import_sdk_core.pkhDid)(address, chainId);
17452
17466
  const resolved = await (0, import_sdk_core.resolveTinyCloudHosts)(subject, {
17453
17467
  registryUrl: this.tinycloudRegistryUrl,
17454
17468
  fallbackHosts: this.tinycloudFallbackHosts
@@ -17512,19 +17526,19 @@ var NodeUserAuthorization = class {
17512
17526
  if (space.startsWith("tinycloud:")) {
17513
17527
  return space;
17514
17528
  }
17515
- return this.wasm.makeSpaceId(address, chainId, space);
17529
+ return (0, import_sdk_core.makePkhSpaceId)(address, chainId, space);
17516
17530
  }
17517
17531
  defaultEncryptionNetworkId(address, chainId) {
17518
- return `urn:tinycloud:encryption:did:pkh:eip155:${chainId}:${address}:default`;
17532
+ return `urn:tinycloud:encryption:${(0, import_sdk_core.pkhDid)(address, chainId)}:default`;
17519
17533
  }
17520
17534
  resolveSignInCapabilities(address, chainId) {
17521
17535
  const request = this.getCapabilityRequest();
17522
17536
  if (request === void 0) {
17523
17537
  const defaultNetworkId = this.defaultEncryptionNetworkId(address, chainId);
17524
- const secretsSpaceId = this.wasm.makeSpaceId(address, chainId, "secrets");
17538
+ const secretsSpaceId = (0, import_sdk_core.makePkhSpaceId)(address, chainId, "secrets");
17525
17539
  return {
17526
17540
  abilities: this.defaultActions,
17527
- spaceId: this.wasm.makeSpaceId(address, chainId, this.spacePrefix),
17541
+ spaceId: (0, import_sdk_core.makePkhSpaceId)(address, chainId, this.spacePrefix),
17528
17542
  spaceAbilities: {
17529
17543
  [secretsSpaceId]: {
17530
17544
  kv: {
@@ -17786,9 +17800,9 @@ var NodeUserAuthorization = class {
17786
17800
  * @param options - Optional per-call SIWE overrides for this sign-in only
17787
17801
  */
17788
17802
  async signIn(options) {
17789
- this._address = await this.signer.getAddress();
17803
+ this._address = (0, import_sdk_core.canonicalizeAddress)(await this.signer.getAddress());
17790
17804
  this._chainId = await this.signer.getChainId();
17791
- const address = this.wasm.ensureEip55(this._address);
17805
+ const address = this._address;
17792
17806
  const chainId = this._chainId;
17793
17807
  await this.resolveTinyCloudHostsForSignIn(address, chainId);
17794
17808
  const keyId = `session-${Date.now()}`;
@@ -17833,7 +17847,7 @@ var NodeUserAuthorization = class {
17833
17847
  siwe: prepared.siwe,
17834
17848
  signature: signature2
17835
17849
  };
17836
- const spacesMetadata = this.enablePublicSpace ? { public: this.wasm.makeSpaceId(address, chainId, "public") } : void 0;
17850
+ const spacesMetadata = this.enablePublicSpace ? { public: (0, import_sdk_core.makePkhSpaceId)(address, chainId, "public") } : void 0;
17837
17851
  const tinyCloudSession = {
17838
17852
  address,
17839
17853
  chainId,
@@ -17908,7 +17922,7 @@ var NodeUserAuthorization = class {
17908
17922
  */
17909
17923
  async signMessage(message) {
17910
17924
  if (!this._address) {
17911
- this._address = await this.signer.getAddress();
17925
+ this._address = (0, import_sdk_core.canonicalizeAddress)(await this.signer.getAddress());
17912
17926
  }
17913
17927
  if (!this._chainId) {
17914
17928
  this._chainId = await this.signer.getChainId();
@@ -17935,7 +17949,7 @@ var NodeUserAuthorization = class {
17935
17949
  * ```
17936
17950
  */
17937
17951
  async prepareSessionForSigning() {
17938
- const address = this.wasm.ensureEip55(await this.signer.getAddress());
17952
+ const address = (0, import_sdk_core.canonicalizeAddress)(await this.signer.getAddress());
17939
17953
  const chainId = await this.signer.getChainId();
17940
17954
  const keyId = `session-${Date.now()}`;
17941
17955
  this.sessionManager.renameSessionKeyId("default", keyId);
@@ -17985,7 +17999,7 @@ var NodeUserAuthorization = class {
17985
17999
  ...prepared,
17986
18000
  signature: signature2
17987
18001
  });
17988
- const address = this.wasm.ensureEip55(await this.signer.getAddress());
18002
+ const address = (0, import_sdk_core.canonicalizeAddress)(await this.signer.getAddress());
17989
18003
  const chainId = await this.signer.getChainId();
17990
18004
  await this.resolveTinyCloudHostsForSignIn(address, chainId);
17991
18005
  const clientSession = {
@@ -17996,7 +18010,7 @@ var NodeUserAuthorization = class {
17996
18010
  siwe: prepared.siwe,
17997
18011
  signature: signature2
17998
18012
  };
17999
- const spacesMetadata = this.enablePublicSpace ? { public: this.wasm.makeSpaceId(address, chainId, "public") } : void 0;
18013
+ const spacesMetadata = this.enablePublicSpace ? { public: (0, import_sdk_core.makePkhSpaceId)(address, chainId, "public") } : void 0;
18000
18014
  const tinyCloudSession = {
18001
18015
  address,
18002
18016
  chainId,
@@ -18523,6 +18537,13 @@ var NETWORK_CREATE_ACTION = "tinycloud.encryption/network.create";
18523
18537
  var DECRYPT_ACTION = "tinycloud.encryption/decrypt";
18524
18538
  var NETWORK_ADMIN_TYPE = "tinycloud.encryption.network-admin/v1";
18525
18539
  var DEFAULT_SESSION_EXPIRATION_MS = import_sdk_core5.EXPIRY.SESSION_MS;
18540
+ function didPrincipalMatches(actual, expected) {
18541
+ try {
18542
+ return (0, import_sdk_core5.principalDidEquals)(actual, expected);
18543
+ } catch {
18544
+ return actual === expected;
18545
+ }
18546
+ }
18526
18547
  function base64UrlEncode(bytes) {
18527
18548
  const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
18528
18549
  let output = "";
@@ -18819,7 +18840,7 @@ var _TinyCloudNode = class _TinyCloudNode {
18819
18840
  */
18820
18841
  get did() {
18821
18842
  if (this._address) {
18822
- return `did:pkh:eip155:${this._chainId}:${this._address}`;
18843
+ return (0, import_sdk_core5.pkhDid)(this._address, this._chainId);
18823
18844
  }
18824
18845
  return this.sessionManager.getDID(this.sessionKeyId);
18825
18846
  }
@@ -18836,7 +18857,7 @@ var _TinyCloudNode = class _TinyCloudNode {
18836
18857
  * Get the Ethereum address for this user.
18837
18858
  */
18838
18859
  get address() {
18839
- return this._address;
18860
+ return this.auth?.address() ?? this._address;
18840
18861
  }
18841
18862
  /**
18842
18863
  * Check if this instance is in session-only mode (no wallet).
@@ -18874,7 +18895,7 @@ var _TinyCloudNode = class _TinyCloudNode {
18874
18895
  );
18875
18896
  }
18876
18897
  await this.wasmBindings.ensureInitialized?.();
18877
- this._address = await this.signer.getAddress();
18898
+ this._address = (0, import_sdk_core5.canonicalizeAddress)(await this.signer.getAddress());
18878
18899
  this._chainId = await this.signer.getChainId();
18879
18900
  this._kv = void 0;
18880
18901
  this._sql = void 0;
@@ -18981,8 +19002,9 @@ var _TinyCloudNode = class _TinyCloudNode {
18981
19002
  this._spaceService = void 0;
18982
19003
  this._serviceContext = void 0;
18983
19004
  this.runtimePermissionGrants = [];
18984
- if (sessionData.address) {
18985
- this._address = sessionData.address;
19005
+ const restoredAddress = sessionData.address ? (0, import_sdk_core5.canonicalizeAddress)(sessionData.address) : void 0;
19006
+ if (restoredAddress) {
19007
+ this._address = restoredAddress;
18986
19008
  }
18987
19009
  if (sessionData.chainId) {
18988
19010
  this._chainId = sessionData.chainId;
@@ -19017,9 +19039,9 @@ var _TinyCloudNode = class _TinyCloudNode {
19017
19039
  this._vault.initialize(this._serviceContext);
19018
19040
  this._serviceContext.registerService("vault", this._vault);
19019
19041
  this.initializeV2Services(serviceSession);
19020
- if (sessionData.siwe && sessionData.address && sessionData.chainId) {
19042
+ if (sessionData.siwe && restoredAddress && sessionData.chainId) {
19021
19043
  const tcSession = {
19022
- address: sessionData.address,
19044
+ address: restoredAddress,
19023
19045
  chainId: sessionData.chainId,
19024
19046
  sessionKey: JSON.stringify(sessionData.jwk),
19025
19047
  spaceId: sessionData.spaceId,
@@ -19359,7 +19381,7 @@ var _TinyCloudNode = class _TinyCloudNode {
19359
19381
  },
19360
19382
  wellKnown: {
19361
19383
  fetchWellKnown: async (principal, discoveryKey) => {
19362
- if (!this._address || principal !== this.did) {
19384
+ if (!this._address || !didPrincipalMatches(principal, this.did)) {
19363
19385
  return null;
19364
19386
  }
19365
19387
  if (!this.config.host) {
@@ -19683,7 +19705,7 @@ var _TinyCloudNode = class _TinyCloudNode {
19683
19705
  return {
19684
19706
  cid: delegationSession.delegationCid,
19685
19707
  delegateDID: params.shareKeyDID,
19686
- delegatorDID: `did:pkh:eip155:${session.chainId}:${session.address}`,
19708
+ delegatorDID: (0, import_sdk_core5.pkhDid)(session.address, session.chainId),
19687
19709
  spaceId: params.spaceId,
19688
19710
  path: params.path,
19689
19711
  actions: params.actions,
@@ -19821,11 +19843,11 @@ var _TinyCloudNode = class _TinyCloudNode {
19821
19843
  }
19822
19844
  async createEncryptionNetwork(name = DEFAULT_ENCRYPTION_NETWORK_NAME) {
19823
19845
  const targetNode = await this.fetchNodeId();
19824
- const principal = this.did;
19846
+ const ownerDid = this.did;
19825
19847
  const networkId = this.getDefaultEncryptionNetworkId(name);
19826
19848
  const body = {
19827
19849
  name,
19828
- principal,
19850
+ ownerDid,
19829
19851
  threshold: { n: 1, t: 1 }
19830
19852
  };
19831
19853
  const crypto2 = this.createEncryptionCrypto();
@@ -20015,13 +20037,8 @@ var _TinyCloudNode = class _TinyCloudNode {
20015
20037
  if (delegation.expiry.getTime() <= Date.now()) {
20016
20038
  throw new import_sdk_core5.SessionExpiredError(delegation.expiry);
20017
20039
  }
20018
- const expectedDids = /* @__PURE__ */ new Set([
20019
- session.verificationMethod,
20020
- this.didWithoutFragment(session.verificationMethod),
20021
- this.sessionDid,
20022
- this.didWithoutFragment(this.sessionDid)
20023
- ]);
20024
- if (!expectedDids.has(delegation.delegateDID)) {
20040
+ const expectedDids = [session.verificationMethod, this.sessionDid];
20041
+ if (!expectedDids.some((did) => didPrincipalMatches(delegation.delegateDID, did))) {
20025
20042
  throw new Error(
20026
20043
  `Runtime delegation targets ${delegation.delegateDID} but this session key is ${session.verificationMethod}.`
20027
20044
  );
@@ -20548,7 +20565,9 @@ var _TinyCloudNode = class _TinyCloudNode {
20548
20565
  "materializeDelegation requires a composed manifest request"
20549
20566
  );
20550
20567
  }
20551
- const target = request.delegationTargets.find((entry) => entry.did === did);
20568
+ const target = request.delegationTargets.find(
20569
+ (entry) => didPrincipalMatches(entry.did, did)
20570
+ );
20552
20571
  if (!target) {
20553
20572
  throw new Error(`No manifest delegation target found for DID ${did}`);
20554
20573
  }
@@ -20856,10 +20875,6 @@ var _TinyCloudNode = class _TinyCloudNode {
20856
20875
  expiresAt: delegation.expiry
20857
20876
  };
20858
20877
  }
20859
- didWithoutFragment(did) {
20860
- const fragment = did.indexOf("#");
20861
- return fragment === -1 ? did : did.slice(0, fragment);
20862
- }
20863
20878
  installRuntimeGrantFromServiceSession(delegation, session, expiresAt) {
20864
20879
  const operations = this.operationsFromDelegation(delegation);
20865
20880
  if (operations.length === 0) {
@@ -21055,7 +21070,7 @@ var _TinyCloudNode = class _TinyCloudNode {
21055
21070
  if (resolvedDelegateDID.endsWith(".eth") && this.config.ensResolver) {
21056
21071
  const address = await this.config.ensResolver.resolveAddress(resolvedDelegateDID);
21057
21072
  if (!address) throw new Error(`Could not resolve ENS name: ${resolvedDelegateDID}`);
21058
- resolvedDelegateDID = `did:pkh:eip155:1:${address}`;
21073
+ resolvedDelegateDID = (0, import_sdk_core5.pkhDid)(address, 1);
21059
21074
  }
21060
21075
  const entries = legacyParamsToPermissionEntries(
21061
21076
  params.actions,
@@ -21212,7 +21227,7 @@ var _TinyCloudNode = class _TinyCloudNode {
21212
21227
  const targetHost = delegation.host ?? this.config.host;
21213
21228
  if (this.isSessionOnly) {
21214
21229
  const myDid = this.did;
21215
- if (delegation.delegateDID !== myDid) {
21230
+ if (!didPrincipalMatches(delegation.delegateDID, myDid)) {
21216
21231
  throw new Error(
21217
21232
  `Delegation targets ${delegation.delegateDID} but this user's DID is ${myDid}. The delegation must target this user's DID.`
21218
21233
  );
@@ -21616,6 +21631,7 @@ var import_sdk_core20 = require("@tinycloud/sdk-core");
21616
21631
  EncryptionService,
21617
21632
  FileSessionStorage,
21618
21633
  HooksService,
21634
+ IdentityParseError,
21619
21635
  KVService,
21620
21636
  ManifestValidationError,
21621
21637
  MemorySessionStorage,
@@ -21646,6 +21662,7 @@ var import_sdk_core20 = require("@tinycloud/sdk-core");
21646
21662
  VaultPublicSpaceKVActions,
21647
21663
  VersionCheckError,
21648
21664
  WasmKeyProvider,
21665
+ addressStorageKey,
21649
21666
  buildCanonicalDecryptRequest,
21650
21667
  buildDecryptAttenuation,
21651
21668
  buildDecryptFacts,
@@ -21654,6 +21671,9 @@ var import_sdk_core20 = require("@tinycloud/sdk-core");
21654
21671
  buildSpaceUri,
21655
21672
  canonicalHashHex,
21656
21673
  canonicalSignedResponse,
21674
+ canonicalizeAddress,
21675
+ canonicalizeDid,
21676
+ canonicalizeDidUrl,
21657
21677
  canonicalizeEncryptionJson,
21658
21678
  canonicalizeSecretScope,
21659
21679
  checkDecryptInvocationInput,
@@ -21669,6 +21689,8 @@ var import_sdk_core20 = require("@tinycloud/sdk-core");
21669
21689
  defaultSpaceCreationHandler,
21670
21690
  deriveSignedReceiverKey,
21671
21691
  deserializeDelegation,
21692
+ didCacheKey,
21693
+ didEquals,
21672
21694
  discoverNetwork,
21673
21695
  encryptToNetwork,
21674
21696
  encryptionBase64Decode,
@@ -21684,14 +21706,20 @@ var import_sdk_core20 = require("@tinycloud/sdk-core");
21684
21706
  hexDecode,
21685
21707
  hexEncode,
21686
21708
  isCapabilitySubset,
21709
+ isEvmAddress,
21687
21710
  isNetworkId,
21688
21711
  loadManifest,
21712
+ makePkhSpaceId,
21689
21713
  makePublicSpaceId,
21690
21714
  networkDiscoveryKey,
21691
21715
  openWrappedKey,
21692
21716
  parseExpiry,
21693
21717
  parseNetworkId,
21718
+ parsePkhDid,
21694
21719
  parseSpaceUri,
21720
+ pkhDid,
21721
+ principalDid,
21722
+ principalDidEquals,
21695
21723
  resolveManifest,
21696
21724
  resolveSecretListPrefix,
21697
21725
  resolveSecretPath,