@openclaw/nostr 2026.7.1-beta.2 → 2026.7.1-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.
Files changed (114) hide show
  1. package/dist/api.js +5 -16
  2. package/dist/{channel-CV0aX1uq.js → channel-B2Y66pl3.js} +11 -4
  3. package/dist/channel-plugin-api.js +1 -1
  4. package/dist/doctor-contract-api.js +3 -22
  5. package/dist/setup-api.js +1 -1
  6. package/dist/setup-plugin-api.js +1 -1
  7. package/dist/{setup-surface-BqBa2C0K.js → setup-surface-CKamwGa3.js} +1 -1
  8. package/node_modules/nostr-tools/README.md +37 -15
  9. package/node_modules/nostr-tools/lib/cjs/abstract-pool.js +134 -6
  10. package/node_modules/nostr-tools/lib/cjs/abstract-pool.js.map +4 -4
  11. package/node_modules/nostr-tools/lib/cjs/abstract-relay.js +35 -6
  12. package/node_modules/nostr-tools/lib/cjs/abstract-relay.js.map +2 -2
  13. package/node_modules/nostr-tools/lib/cjs/filter.js.map +1 -1
  14. package/node_modules/nostr-tools/lib/cjs/index.js +401 -72
  15. package/node_modules/nostr-tools/lib/cjs/index.js.map +4 -4
  16. package/node_modules/nostr-tools/lib/cjs/kinds.js +196 -4
  17. package/node_modules/nostr-tools/lib/cjs/kinds.js.map +2 -2
  18. package/node_modules/nostr-tools/lib/cjs/nip10.js +5 -4
  19. package/node_modules/nostr-tools/lib/cjs/nip10.js.map +2 -2
  20. package/node_modules/nostr-tools/lib/cjs/nip17.js.map +2 -2
  21. package/node_modules/nostr-tools/lib/cjs/nip18.js.map +2 -2
  22. package/node_modules/nostr-tools/lib/cjs/nip19.js +2 -0
  23. package/node_modules/nostr-tools/lib/cjs/nip19.js.map +2 -2
  24. package/node_modules/nostr-tools/lib/cjs/nip21.js +2 -0
  25. package/node_modules/nostr-tools/lib/cjs/nip21.js.map +2 -2
  26. package/node_modules/nostr-tools/lib/cjs/nip22.js +11 -5
  27. package/node_modules/nostr-tools/lib/cjs/nip22.js.map +2 -2
  28. package/node_modules/nostr-tools/lib/cjs/nip25.js.map +1 -1
  29. package/node_modules/nostr-tools/lib/cjs/nip27.js +2 -0
  30. package/node_modules/nostr-tools/lib/cjs/nip27.js.map +2 -2
  31. package/node_modules/nostr-tools/lib/cjs/nip28.js.map +2 -2
  32. package/node_modules/nostr-tools/lib/cjs/nip29.js +2 -0
  33. package/node_modules/nostr-tools/lib/cjs/nip29.js.map +2 -2
  34. package/node_modules/nostr-tools/lib/cjs/nip42.js.map +2 -2
  35. package/node_modules/nostr-tools/lib/cjs/nip45.js +183 -0
  36. package/node_modules/nostr-tools/lib/cjs/nip45.js.map +7 -0
  37. package/node_modules/nostr-tools/lib/cjs/nip46.js +149 -9
  38. package/node_modules/nostr-tools/lib/cjs/nip46.js.map +4 -4
  39. package/node_modules/nostr-tools/lib/cjs/nip47.js.map +2 -2
  40. package/node_modules/nostr-tools/lib/cjs/nip49.js.map +2 -2
  41. package/node_modules/nostr-tools/lib/cjs/nip57.js.map +1 -1
  42. package/node_modules/nostr-tools/lib/cjs/nip58.js.map +2 -2
  43. package/node_modules/nostr-tools/lib/cjs/nip59.js.map +2 -2
  44. package/node_modules/nostr-tools/lib/cjs/nip75.js.map +2 -2
  45. package/node_modules/nostr-tools/lib/cjs/nip94.js.map +2 -2
  46. package/node_modules/nostr-tools/lib/cjs/nip98.js.map +2 -2
  47. package/node_modules/nostr-tools/lib/cjs/nip99.js.map +2 -2
  48. package/node_modules/nostr-tools/lib/cjs/nipb0.js +1064 -0
  49. package/node_modules/nostr-tools/lib/cjs/nipb0.js.map +7 -0
  50. package/node_modules/nostr-tools/lib/cjs/pool.js +134 -6
  51. package/node_modules/nostr-tools/lib/cjs/pool.js.map +4 -4
  52. package/node_modules/nostr-tools/lib/cjs/references.js +2 -0
  53. package/node_modules/nostr-tools/lib/cjs/references.js.map +2 -2
  54. package/node_modules/nostr-tools/lib/cjs/relay.js +35 -6
  55. package/node_modules/nostr-tools/lib/cjs/relay.js.map +2 -2
  56. package/node_modules/nostr-tools/lib/esm/abstract-pool.js +134 -6
  57. package/node_modules/nostr-tools/lib/esm/abstract-pool.js.map +4 -4
  58. package/node_modules/nostr-tools/lib/esm/abstract-relay.js +35 -6
  59. package/node_modules/nostr-tools/lib/esm/abstract-relay.js.map +2 -2
  60. package/node_modules/nostr-tools/lib/esm/filter.js.map +1 -1
  61. package/node_modules/nostr-tools/lib/esm/index.js +377 -48
  62. package/node_modules/nostr-tools/lib/esm/index.js.map +4 -4
  63. package/node_modules/nostr-tools/lib/esm/kinds.js +196 -4
  64. package/node_modules/nostr-tools/lib/esm/kinds.js.map +2 -2
  65. package/node_modules/nostr-tools/lib/esm/nip10.js +5 -4
  66. package/node_modules/nostr-tools/lib/esm/nip10.js.map +2 -2
  67. package/node_modules/nostr-tools/lib/esm/nip17.js.map +2 -2
  68. package/node_modules/nostr-tools/lib/esm/nip18.js.map +2 -2
  69. package/node_modules/nostr-tools/lib/esm/nip19.js +2 -0
  70. package/node_modules/nostr-tools/lib/esm/nip19.js.map +2 -2
  71. package/node_modules/nostr-tools/lib/esm/nip21.js +2 -0
  72. package/node_modules/nostr-tools/lib/esm/nip21.js.map +2 -2
  73. package/node_modules/nostr-tools/lib/esm/nip22.js +11 -5
  74. package/node_modules/nostr-tools/lib/esm/nip22.js.map +2 -2
  75. package/node_modules/nostr-tools/lib/esm/nip25.js.map +1 -1
  76. package/node_modules/nostr-tools/lib/esm/nip27.js +2 -0
  77. package/node_modules/nostr-tools/lib/esm/nip27.js.map +2 -2
  78. package/node_modules/nostr-tools/lib/esm/nip28.js.map +2 -2
  79. package/node_modules/nostr-tools/lib/esm/nip29.js +2 -0
  80. package/node_modules/nostr-tools/lib/esm/nip29.js.map +2 -2
  81. package/node_modules/nostr-tools/lib/esm/nip42.js.map +2 -2
  82. package/node_modules/nostr-tools/lib/esm/nip45.js +162 -0
  83. package/node_modules/nostr-tools/lib/esm/nip45.js.map +7 -0
  84. package/node_modules/nostr-tools/lib/esm/nip46.js +149 -9
  85. package/node_modules/nostr-tools/lib/esm/nip46.js.map +4 -4
  86. package/node_modules/nostr-tools/lib/esm/nip47.js.map +2 -2
  87. package/node_modules/nostr-tools/lib/esm/nip49.js.map +2 -2
  88. package/node_modules/nostr-tools/lib/esm/nip57.js.map +1 -1
  89. package/node_modules/nostr-tools/lib/esm/nip58.js.map +2 -2
  90. package/node_modules/nostr-tools/lib/esm/nip59.js.map +2 -2
  91. package/node_modules/nostr-tools/lib/esm/nip75.js.map +2 -2
  92. package/node_modules/nostr-tools/lib/esm/nip94.js.map +2 -2
  93. package/node_modules/nostr-tools/lib/esm/nip98.js.map +2 -2
  94. package/node_modules/nostr-tools/lib/esm/nip99.js.map +2 -2
  95. package/node_modules/nostr-tools/lib/esm/nipb0.js +1049 -0
  96. package/node_modules/nostr-tools/lib/esm/nipb0.js.map +7 -0
  97. package/node_modules/nostr-tools/lib/esm/pool.js +134 -6
  98. package/node_modules/nostr-tools/lib/esm/pool.js.map +4 -4
  99. package/node_modules/nostr-tools/lib/esm/references.js +2 -0
  100. package/node_modules/nostr-tools/lib/esm/references.js.map +2 -2
  101. package/node_modules/nostr-tools/lib/esm/relay.js +35 -6
  102. package/node_modules/nostr-tools/lib/esm/relay.js.map +2 -2
  103. package/node_modules/nostr-tools/lib/nostr.bundle.js +350 -23
  104. package/node_modules/nostr-tools/lib/nostr.bundle.js.map +4 -4
  105. package/node_modules/nostr-tools/lib/types/abstract-pool.d.ts +9 -0
  106. package/node_modules/nostr-tools/lib/types/abstract-relay.d.ts +10 -1
  107. package/node_modules/nostr-tools/lib/types/kinds.d.ts +200 -8
  108. package/node_modules/nostr-tools/lib/types/nip45.d.ts +13 -0
  109. package/node_modules/nostr-tools/lib/types/nip45.test.d.ts +1 -0
  110. package/node_modules/nostr-tools/lib/types/nip46.d.ts +12 -5
  111. package/node_modules/nostr-tools/lib/types/nipb0.d.ts +129 -0
  112. package/node_modules/nostr-tools/package.json +13 -1
  113. package/npm-shrinkwrap.json +7 -7
  114. package/package.json +5 -5
@@ -453,7 +453,9 @@ var AbstractRelay = class {
453
453
  connectionTimeoutHandle = setTimeout(() => {
454
454
  reject("connection timed out");
455
455
  this.connectionPromise = void 0;
456
- this.skipReconnection = true;
456
+ if (this.reconnectAttempts === 0) {
457
+ this.skipReconnection = true;
458
+ }
457
459
  this.onclose?.();
458
460
  this.handleHardClose("relay connection timed out");
459
461
  }, opts.timeout);
@@ -497,7 +499,9 @@ var AbstractRelay = class {
497
499
  clearTimeout(connectionTimeoutHandle);
498
500
  reject("connection failed");
499
501
  this.connectionPromise = void 0;
500
- this.skipReconnection = true;
502
+ if (this.reconnectAttempts === 0) {
503
+ this.skipReconnection = true;
504
+ }
501
505
  this.onclose?.();
502
506
  this.handleHardClose("relay connection failed");
503
507
  };
@@ -598,19 +602,38 @@ var AbstractRelay = class {
598
602
  }, this.publishTimeout);
599
603
  this.openEventPublishes.set(event.id, { resolve, reject, timeout });
600
604
  });
601
- this.send('["EVENT",' + JSON.stringify(event) + "]");
605
+ try {
606
+ await this.send('["EVENT",' + JSON.stringify(event) + "]");
607
+ } catch (err) {
608
+ const ep = this.openEventPublishes.get(event.id);
609
+ if (ep) {
610
+ ep.reject(err);
611
+ this.openEventPublishes.delete(event.id);
612
+ }
613
+ }
602
614
  this.ongoingOperations--;
603
615
  if (this.ongoingOperations === 0)
604
616
  this.idleSince = Date.now();
605
617
  return ret;
606
618
  }
607
619
  async count(filters, params) {
620
+ return (await this.countWithHLL(filters, params)).count;
621
+ }
622
+ async countWithHLL(filters, params) {
608
623
  this.serial++;
609
624
  const id = params?.id || "count:" + this.serial;
610
625
  const ret = new Promise((resolve, reject) => {
611
626
  this.openCountRequests.set(id, { resolve, reject });
612
627
  });
613
- this.send('["COUNT","' + id + '",' + JSON.stringify(filters).substring(1));
628
+ try {
629
+ await this.send('["COUNT","' + id + '",' + JSON.stringify(filters).substring(1));
630
+ } catch (err) {
631
+ const cr = this.openCountRequests.get(id);
632
+ if (cr) {
633
+ cr.reject(err);
634
+ this.openCountRequests.delete(id);
635
+ }
636
+ }
614
637
  return ret;
615
638
  }
616
639
  subscribe(filters, params) {
@@ -688,7 +711,7 @@ var AbstractRelay = class {
688
711
  const payload = data[2];
689
712
  const cr = this.openCountRequests.get(id);
690
713
  if (cr) {
691
- cr.resolve(payload.count);
714
+ cr.resolve(payload);
692
715
  this.openCountRequests.delete(id);
693
716
  }
694
717
  return;
@@ -718,8 +741,14 @@ var AbstractRelay = class {
718
741
  case "CLOSED": {
719
742
  const id = data[1];
720
743
  const so = this.openSubs.get(id);
721
- if (!so)
744
+ if (!so) {
745
+ const cr = this.openCountRequests.get(id);
746
+ if (cr) {
747
+ cr.reject(new Error(data[2]));
748
+ this.openCountRequests.delete(id);
749
+ }
722
750
  return;
751
+ }
723
752
  so.closed = true;
724
753
  so.close(data[2]);
725
754
  return;
@@ -828,6 +857,63 @@ var alwaysTrue = (t) => {
828
857
  return true;
829
858
  };
830
859
 
860
+ // nip45.ts
861
+ var import_sha23 = require("@noble/hashes/sha2.js");
862
+ var import_utils8 = require("@noble/hashes/utils.js");
863
+ var M = 256;
864
+ var HLL_HEX_LENGTH = M * 2;
865
+ var utf8Encoder2 = new TextEncoder();
866
+ function getCountManyFilter(target, directive) {
867
+ switch (directive) {
868
+ case "reactions":
869
+ return { "#e": [target], kinds: [7] };
870
+ case "reposts":
871
+ return { "#e": [target], kinds: [6] };
872
+ case "quotes":
873
+ return { "#q": [target], kinds: [1, 1111] };
874
+ case "replies":
875
+ return { "#e": [target], kinds: [1] };
876
+ case "comments":
877
+ return { "#E": [target], kinds: [1111] };
878
+ case "followers":
879
+ return { "#p": [target], kinds: [3] };
880
+ }
881
+ }
882
+ function newHll() {
883
+ return new Uint8Array(M);
884
+ }
885
+ function hllDecode(hex) {
886
+ if (hex.length !== HLL_HEX_LENGTH || !/^[0-9a-fA-F]+$/.test(hex))
887
+ return void 0;
888
+ const registers = new Uint8Array(M);
889
+ for (let i2 = 0; i2 < M; i2++) {
890
+ registers[i2] = parseInt(hex.slice(i2 * 2, i2 * 2 + 2), 16);
891
+ }
892
+ return registers;
893
+ }
894
+ function hllEncode(registers) {
895
+ if (registers.length !== M)
896
+ throw new Error(`invalid number of registers ${registers.length}`);
897
+ let hex = "";
898
+ for (let i2 = 0; i2 < M; i2++) {
899
+ hex += registers[i2].toString(16).padStart(2, "0");
900
+ }
901
+ return hex;
902
+ }
903
+ function mergeHll(target, source) {
904
+ if (target.length === 0)
905
+ target = newHll();
906
+ if (target.length !== M)
907
+ throw new Error(`invalid number of registers ${target.length}`);
908
+ if (source.length !== M)
909
+ throw new Error(`invalid number of registers ${source.length}`);
910
+ for (let i2 = 0; i2 < M; i2++) {
911
+ if (source[i2] > target[i2])
912
+ target[i2] = source[i2];
913
+ }
914
+ return target;
915
+ }
916
+
831
917
  // abstract-pool.ts
832
918
  var AbstractSimplePool = class {
833
919
  relays = /* @__PURE__ */ new Map();
@@ -1055,6 +1141,48 @@ var AbstractSimplePool = class {
1055
1141
  events.sort((a, b) => b.created_at - a.created_at);
1056
1142
  return events[0] || null;
1057
1143
  }
1144
+ async countMany(relays, target, directive, params) {
1145
+ const filter = getCountManyFilter(target, directive);
1146
+ const urls = [];
1147
+ for (let i2 = 0; i2 < relays.length; i2++) {
1148
+ const url = normalizeURL(relays[i2]);
1149
+ if (urls.indexOf(url) === -1)
1150
+ urls.push(url);
1151
+ }
1152
+ const responses = await Promise.all(
1153
+ urls.map(async (url) => {
1154
+ if (this.allowConnectingToRelay?.(url, ["read", [filter]]) === false)
1155
+ return null;
1156
+ let relay;
1157
+ try {
1158
+ relay = await this.ensureRelay(url, {
1159
+ connectionTimeout: this.maxWaitForConnection < (params?.maxWait || 0) ? Math.max(params.maxWait * 0.8, params.maxWait - 1e3) : this.maxWaitForConnection,
1160
+ abort: params?.abort
1161
+ });
1162
+ } catch (err) {
1163
+ this.onRelayConnectionFailure?.(url);
1164
+ return null;
1165
+ }
1166
+ this.onRelayConnectionSuccess?.(url);
1167
+ return relay.countWithHLL([filter], { id: params?.id }).catch(() => null);
1168
+ })
1169
+ );
1170
+ let count = 0;
1171
+ let hll;
1172
+ for (const response of responses) {
1173
+ if (!response)
1174
+ continue;
1175
+ if (response.count > count)
1176
+ count = response.count;
1177
+ if (!response.hll || response.hll.length !== 512)
1178
+ continue;
1179
+ const registers = hllDecode(response.hll);
1180
+ if (!registers)
1181
+ continue;
1182
+ hll = mergeHll(hll || new Uint8Array(0), registers);
1183
+ }
1184
+ return hll ? { count, hll: hllEncode(hll) } : { count };
1185
+ }
1058
1186
  publish(relays, event, params) {
1059
1187
  return relays.map(normalizeURL).map(async (url, i2, arr) => {
1060
1188
  if (arr.indexOf(url) !== i2) {
@@ -1344,7 +1472,8 @@ var BunkerSigner = class {
1344
1472
  }
1345
1473
  async close() {
1346
1474
  this.isOpen = false;
1347
- this.subCloser.close();
1475
+ this.subCloser?.close();
1476
+ this.subCloser = void 0;
1348
1477
  }
1349
1478
  async sendRequest(method, params) {
1350
1479
  return new Promise(async (resolve, reject) => {
@@ -1378,8 +1507,19 @@ var BunkerSigner = class {
1378
1507
  if (resp !== "pong")
1379
1508
  throw new Error(`result is not pong: ${resp}`);
1380
1509
  }
1381
- async connect() {
1382
- await this.sendRequest("connect", [this.bp.pubkey, this.bp.secret || ""]);
1510
+ async connect(clientMetadata) {
1511
+ const params = [this.bp.pubkey, this.bp.secret || ""];
1512
+ if (clientMetadata) {
1513
+ params.push("");
1514
+ params.push(JSON.stringify(clientMetadata));
1515
+ }
1516
+ await this.sendRequest("connect", params);
1517
+ }
1518
+ async logout() {
1519
+ let resp = await this.sendRequest("logout", []);
1520
+ if (resp !== "ack")
1521
+ throw new Error(`result is not ack: ${resp}`);
1522
+ await this.close();
1383
1523
  }
1384
1524
  async getPublicKey() {
1385
1525
  if (!this.cachedPubKey) {