@unicitylabs/sphere-sdk 0.3.8 → 0.3.9

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.
Files changed (43) hide show
  1. package/dist/connect/index.cjs +770 -0
  2. package/dist/connect/index.cjs.map +1 -0
  3. package/dist/connect/index.d.cts +312 -0
  4. package/dist/connect/index.d.ts +312 -0
  5. package/dist/connect/index.js +747 -0
  6. package/dist/connect/index.js.map +1 -0
  7. package/dist/core/index.cjs +87 -7
  8. package/dist/core/index.cjs.map +1 -1
  9. package/dist/core/index.d.cts +57 -1
  10. package/dist/core/index.d.ts +57 -1
  11. package/dist/core/index.js +87 -7
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/impl/browser/connect/index.cjs +271 -0
  14. package/dist/impl/browser/connect/index.cjs.map +1 -0
  15. package/dist/impl/browser/connect/index.d.cts +137 -0
  16. package/dist/impl/browser/connect/index.d.ts +137 -0
  17. package/dist/impl/browser/connect/index.js +248 -0
  18. package/dist/impl/browser/connect/index.js.map +1 -0
  19. package/dist/impl/browser/index.cjs +167 -32
  20. package/dist/impl/browser/index.cjs.map +1 -1
  21. package/dist/impl/browser/index.js +170 -33
  22. package/dist/impl/browser/index.js.map +1 -1
  23. package/dist/impl/browser/ipfs.cjs.map +1 -1
  24. package/dist/impl/browser/ipfs.js.map +1 -1
  25. package/dist/impl/nodejs/connect/index.cjs +372 -0
  26. package/dist/impl/nodejs/connect/index.cjs.map +1 -0
  27. package/dist/impl/nodejs/connect/index.d.cts +178 -0
  28. package/dist/impl/nodejs/connect/index.d.ts +178 -0
  29. package/dist/impl/nodejs/connect/index.js +333 -0
  30. package/dist/impl/nodejs/connect/index.js.map +1 -0
  31. package/dist/impl/nodejs/index.cjs +114 -4
  32. package/dist/impl/nodejs/index.cjs.map +1 -1
  33. package/dist/impl/nodejs/index.d.cts +49 -0
  34. package/dist/impl/nodejs/index.d.ts +49 -0
  35. package/dist/impl/nodejs/index.js +117 -5
  36. package/dist/impl/nodejs/index.js.map +1 -1
  37. package/dist/index.cjs +87 -7
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.d.cts +57 -1
  40. package/dist/index.d.ts +57 -1
  41. package/dist/index.js +87 -7
  42. package/dist/index.js.map +1 -1
  43. package/package.json +31 -1
package/dist/index.cjs CHANGED
@@ -7749,6 +7749,28 @@ var CommunicationsModule = class {
7749
7749
  this.unsubscribeMessages = deps.transport.onMessage((msg) => {
7750
7750
  this.handleIncomingMessage(msg);
7751
7751
  });
7752
+ if (deps.transport.onReadReceipt) {
7753
+ deps.transport.onReadReceipt((receipt) => {
7754
+ const msg = this.messages.get(receipt.messageEventId);
7755
+ if (msg && msg.senderPubkey === this.deps.identity.chainPubkey) {
7756
+ msg.isRead = true;
7757
+ this.save();
7758
+ this.deps.emitEvent("message:read", {
7759
+ messageIds: [receipt.messageEventId],
7760
+ peerPubkey: receipt.senderTransportPubkey
7761
+ });
7762
+ }
7763
+ });
7764
+ }
7765
+ if (deps.transport.onTypingIndicator) {
7766
+ deps.transport.onTypingIndicator((indicator) => {
7767
+ this.deps.emitEvent("message:typing", {
7768
+ senderPubkey: indicator.senderTransportPubkey,
7769
+ senderNametag: indicator.senderNametag,
7770
+ timestamp: indicator.timestamp
7771
+ });
7772
+ });
7773
+ }
7752
7774
  }
7753
7775
  /**
7754
7776
  * Load messages from storage
@@ -7792,7 +7814,7 @@ var CommunicationsModule = class {
7792
7814
  recipientPubkey,
7793
7815
  content,
7794
7816
  timestamp: Date.now(),
7795
- isRead: true
7817
+ isRead: false
7796
7818
  };
7797
7819
  this.messages.set(message.id, message);
7798
7820
  if (this.config.autoSave) {
@@ -7838,6 +7860,16 @@ var CommunicationsModule = class {
7838
7860
  if (this.config.autoSave) {
7839
7861
  await this.save();
7840
7862
  }
7863
+ if (this.config.readReceipts && this.deps?.transport.sendReadReceipt) {
7864
+ for (const id of messageIds) {
7865
+ const msg = this.messages.get(id);
7866
+ if (msg && msg.senderPubkey !== this.deps.identity.chainPubkey) {
7867
+ this.deps.transport.sendReadReceipt(msg.senderPubkey, id).catch((err) => {
7868
+ console.warn("[Communications] Failed to send read receipt:", err);
7869
+ });
7870
+ }
7871
+ }
7872
+ }
7841
7873
  }
7842
7874
  /**
7843
7875
  * Get unread count
@@ -7851,6 +7883,15 @@ var CommunicationsModule = class {
7851
7883
  }
7852
7884
  return messages.length;
7853
7885
  }
7886
+ /**
7887
+ * Send typing indicator to a peer
7888
+ */
7889
+ async sendTypingIndicator(peerPubkey) {
7890
+ this.ensureInitialized();
7891
+ if (this.deps.transport.sendTypingIndicator) {
7892
+ await this.deps.transport.sendTypingIndicator(peerPubkey);
7893
+ }
7894
+ }
7854
7895
  /**
7855
7896
  * Subscribe to incoming DMs
7856
7897
  */
@@ -7920,7 +7961,26 @@ var CommunicationsModule = class {
7920
7961
  // Private: Message Handling
7921
7962
  // ===========================================================================
7922
7963
  handleIncomingMessage(msg) {
7964
+ if (msg.isSelfWrap && msg.recipientTransportPubkey) {
7965
+ if (this.messages.has(msg.id)) return;
7966
+ const message2 = {
7967
+ id: msg.id,
7968
+ senderPubkey: this.deps.identity.chainPubkey,
7969
+ senderNametag: msg.senderNametag,
7970
+ recipientPubkey: msg.recipientTransportPubkey,
7971
+ content: msg.content,
7972
+ timestamp: msg.timestamp,
7973
+ isRead: false
7974
+ };
7975
+ this.messages.set(message2.id, message2);
7976
+ this.deps.emitEvent("message:dm", message2);
7977
+ if (this.config.autoSave) {
7978
+ this.save();
7979
+ }
7980
+ return;
7981
+ }
7923
7982
  if (msg.senderTransportPubkey === this.deps?.identity.chainPubkey) return;
7983
+ if (this.messages.has(msg.id)) return;
7924
7984
  const message = {
7925
7985
  id: msg.id,
7926
7986
  senderPubkey: msg.senderTransportPubkey,
@@ -12209,12 +12269,22 @@ var Sphere = class _Sphere {
12209
12269
  return;
12210
12270
  }
12211
12271
  try {
12212
- if (this._identity?.directAddress && this._transport.resolve) {
12272
+ const transportPubkey = this._identity?.chainPubkey?.slice(2);
12273
+ if (transportPubkey && this._transport.resolve) {
12213
12274
  try {
12214
- const existing = await this._transport.resolve(this._identity.directAddress);
12275
+ const existing = await this._transport.resolve(transportPubkey);
12215
12276
  if (existing) {
12216
- if (existing.nametag && !this._identity.nametag) {
12217
- this._identity.nametag = existing.nametag;
12277
+ let recoveredNametag = existing.nametag;
12278
+ let fromLegacy = false;
12279
+ if (!recoveredNametag && !this._identity?.nametag && this._transport.recoverNametag) {
12280
+ try {
12281
+ recoveredNametag = await this._transport.recoverNametag() ?? void 0;
12282
+ if (recoveredNametag) fromLegacy = true;
12283
+ } catch {
12284
+ }
12285
+ }
12286
+ if (recoveredNametag && !this._identity?.nametag) {
12287
+ this._identity.nametag = recoveredNametag;
12218
12288
  await this._updateCachedProxyAddress();
12219
12289
  const entry = await this.ensureAddressTracked(this._currentAddressIndex);
12220
12290
  let nametags = this._addressNametags.get(entry.addressId);
@@ -12223,10 +12293,20 @@ var Sphere = class _Sphere {
12223
12293
  this._addressNametags.set(entry.addressId, nametags);
12224
12294
  }
12225
12295
  if (!nametags.has(0)) {
12226
- nametags.set(0, existing.nametag);
12296
+ nametags.set(0, recoveredNametag);
12227
12297
  await this.persistAddressNametags();
12228
12298
  }
12229
- this.emitEvent("nametag:recovered", { nametag: existing.nametag });
12299
+ this.emitEvent("nametag:recovered", { nametag: recoveredNametag });
12300
+ if (fromLegacy) {
12301
+ await this._transport.publishIdentityBinding(
12302
+ this._identity.chainPubkey,
12303
+ this._identity.l1Address,
12304
+ this._identity.directAddress || "",
12305
+ recoveredNametag
12306
+ );
12307
+ console.log(`[Sphere] Migrated legacy binding with nametag @${recoveredNametag}`);
12308
+ return;
12309
+ }
12230
12310
  }
12231
12311
  console.log("[Sphere] Existing binding found, skipping re-publish");
12232
12312
  return;