@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
@@ -419,7 +419,9 @@ var AbstractRelay = class {
419
419
  connectionTimeoutHandle = setTimeout(() => {
420
420
  reject("connection timed out");
421
421
  this.connectionPromise = void 0;
422
- this.skipReconnection = true;
422
+ if (this.reconnectAttempts === 0) {
423
+ this.skipReconnection = true;
424
+ }
423
425
  this.onclose?.();
424
426
  this.handleHardClose("relay connection timed out");
425
427
  }, opts.timeout);
@@ -463,7 +465,9 @@ var AbstractRelay = class {
463
465
  clearTimeout(connectionTimeoutHandle);
464
466
  reject("connection failed");
465
467
  this.connectionPromise = void 0;
466
- this.skipReconnection = true;
468
+ if (this.reconnectAttempts === 0) {
469
+ this.skipReconnection = true;
470
+ }
467
471
  this.onclose?.();
468
472
  this.handleHardClose("relay connection failed");
469
473
  };
@@ -564,19 +568,38 @@ var AbstractRelay = class {
564
568
  }, this.publishTimeout);
565
569
  this.openEventPublishes.set(event.id, { resolve, reject, timeout });
566
570
  });
567
- this.send('["EVENT",' + JSON.stringify(event) + "]");
571
+ try {
572
+ await this.send('["EVENT",' + JSON.stringify(event) + "]");
573
+ } catch (err) {
574
+ const ep = this.openEventPublishes.get(event.id);
575
+ if (ep) {
576
+ ep.reject(err);
577
+ this.openEventPublishes.delete(event.id);
578
+ }
579
+ }
568
580
  this.ongoingOperations--;
569
581
  if (this.ongoingOperations === 0)
570
582
  this.idleSince = Date.now();
571
583
  return ret;
572
584
  }
573
585
  async count(filters, params) {
586
+ return (await this.countWithHLL(filters, params)).count;
587
+ }
588
+ async countWithHLL(filters, params) {
574
589
  this.serial++;
575
590
  const id = params?.id || "count:" + this.serial;
576
591
  const ret = new Promise((resolve, reject) => {
577
592
  this.openCountRequests.set(id, { resolve, reject });
578
593
  });
579
- this.send('["COUNT","' + id + '",' + JSON.stringify(filters).substring(1));
594
+ try {
595
+ await this.send('["COUNT","' + id + '",' + JSON.stringify(filters).substring(1));
596
+ } catch (err) {
597
+ const cr = this.openCountRequests.get(id);
598
+ if (cr) {
599
+ cr.reject(err);
600
+ this.openCountRequests.delete(id);
601
+ }
602
+ }
580
603
  return ret;
581
604
  }
582
605
  subscribe(filters, params) {
@@ -654,7 +677,7 @@ var AbstractRelay = class {
654
677
  const payload = data[2];
655
678
  const cr = this.openCountRequests.get(id);
656
679
  if (cr) {
657
- cr.resolve(payload.count);
680
+ cr.resolve(payload);
658
681
  this.openCountRequests.delete(id);
659
682
  }
660
683
  return;
@@ -684,8 +707,14 @@ var AbstractRelay = class {
684
707
  case "CLOSED": {
685
708
  const id = data[1];
686
709
  const so = this.openSubs.get(id);
687
- if (!so)
710
+ if (!so) {
711
+ const cr = this.openCountRequests.get(id);
712
+ if (cr) {
713
+ cr.reject(new Error(data[2]));
714
+ this.openCountRequests.delete(id);
715
+ }
688
716
  return;
717
+ }
689
718
  so.closed = true;
690
719
  so.close(data[2]);
691
720
  return;
@@ -794,6 +823,63 @@ var alwaysTrue = (t) => {
794
823
  return true;
795
824
  };
796
825
 
826
+ // nip45.ts
827
+ import { sha256 as sha2563 } from "@noble/hashes/sha2.js";
828
+ import { bytesToHex as bytesToHex3 } from "@noble/hashes/utils.js";
829
+ var M = 256;
830
+ var HLL_HEX_LENGTH = M * 2;
831
+ var utf8Encoder2 = new TextEncoder();
832
+ function getCountManyFilter(target, directive) {
833
+ switch (directive) {
834
+ case "reactions":
835
+ return { "#e": [target], kinds: [7] };
836
+ case "reposts":
837
+ return { "#e": [target], kinds: [6] };
838
+ case "quotes":
839
+ return { "#q": [target], kinds: [1, 1111] };
840
+ case "replies":
841
+ return { "#e": [target], kinds: [1] };
842
+ case "comments":
843
+ return { "#E": [target], kinds: [1111] };
844
+ case "followers":
845
+ return { "#p": [target], kinds: [3] };
846
+ }
847
+ }
848
+ function newHll() {
849
+ return new Uint8Array(M);
850
+ }
851
+ function hllDecode(hex) {
852
+ if (hex.length !== HLL_HEX_LENGTH || !/^[0-9a-fA-F]+$/.test(hex))
853
+ return void 0;
854
+ const registers = new Uint8Array(M);
855
+ for (let i2 = 0; i2 < M; i2++) {
856
+ registers[i2] = parseInt(hex.slice(i2 * 2, i2 * 2 + 2), 16);
857
+ }
858
+ return registers;
859
+ }
860
+ function hllEncode(registers) {
861
+ if (registers.length !== M)
862
+ throw new Error(`invalid number of registers ${registers.length}`);
863
+ let hex = "";
864
+ for (let i2 = 0; i2 < M; i2++) {
865
+ hex += registers[i2].toString(16).padStart(2, "0");
866
+ }
867
+ return hex;
868
+ }
869
+ function mergeHll(target, source) {
870
+ if (target.length === 0)
871
+ target = newHll();
872
+ if (target.length !== M)
873
+ throw new Error(`invalid number of registers ${target.length}`);
874
+ if (source.length !== M)
875
+ throw new Error(`invalid number of registers ${source.length}`);
876
+ for (let i2 = 0; i2 < M; i2++) {
877
+ if (source[i2] > target[i2])
878
+ target[i2] = source[i2];
879
+ }
880
+ return target;
881
+ }
882
+
797
883
  // abstract-pool.ts
798
884
  var AbstractSimplePool = class {
799
885
  relays = /* @__PURE__ */ new Map();
@@ -1021,6 +1107,48 @@ var AbstractSimplePool = class {
1021
1107
  events.sort((a, b) => b.created_at - a.created_at);
1022
1108
  return events[0] || null;
1023
1109
  }
1110
+ async countMany(relays, target, directive, params) {
1111
+ const filter = getCountManyFilter(target, directive);
1112
+ const urls = [];
1113
+ for (let i2 = 0; i2 < relays.length; i2++) {
1114
+ const url = normalizeURL(relays[i2]);
1115
+ if (urls.indexOf(url) === -1)
1116
+ urls.push(url);
1117
+ }
1118
+ const responses = await Promise.all(
1119
+ urls.map(async (url) => {
1120
+ if (this.allowConnectingToRelay?.(url, ["read", [filter]]) === false)
1121
+ return null;
1122
+ let relay;
1123
+ try {
1124
+ relay = await this.ensureRelay(url, {
1125
+ connectionTimeout: this.maxWaitForConnection < (params?.maxWait || 0) ? Math.max(params.maxWait * 0.8, params.maxWait - 1e3) : this.maxWaitForConnection,
1126
+ abort: params?.abort
1127
+ });
1128
+ } catch (err) {
1129
+ this.onRelayConnectionFailure?.(url);
1130
+ return null;
1131
+ }
1132
+ this.onRelayConnectionSuccess?.(url);
1133
+ return relay.countWithHLL([filter], { id: params?.id }).catch(() => null);
1134
+ })
1135
+ );
1136
+ let count = 0;
1137
+ let hll;
1138
+ for (const response of responses) {
1139
+ if (!response)
1140
+ continue;
1141
+ if (response.count > count)
1142
+ count = response.count;
1143
+ if (!response.hll || response.hll.length !== 512)
1144
+ continue;
1145
+ const registers = hllDecode(response.hll);
1146
+ if (!registers)
1147
+ continue;
1148
+ hll = mergeHll(hll || new Uint8Array(0), registers);
1149
+ }
1150
+ return hll ? { count, hll: hllEncode(hll) } : { count };
1151
+ }
1024
1152
  publish(relays, event, params) {
1025
1153
  return relays.map(normalizeURL).map(async (url, i2, arr) => {
1026
1154
  if (arr.indexOf(url) !== i2) {
@@ -1310,7 +1438,8 @@ var BunkerSigner = class {
1310
1438
  }
1311
1439
  async close() {
1312
1440
  this.isOpen = false;
1313
- this.subCloser.close();
1441
+ this.subCloser?.close();
1442
+ this.subCloser = void 0;
1314
1443
  }
1315
1444
  async sendRequest(method, params) {
1316
1445
  return new Promise(async (resolve, reject) => {
@@ -1344,8 +1473,19 @@ var BunkerSigner = class {
1344
1473
  if (resp !== "pong")
1345
1474
  throw new Error(`result is not pong: ${resp}`);
1346
1475
  }
1347
- async connect() {
1348
- await this.sendRequest("connect", [this.bp.pubkey, this.bp.secret || ""]);
1476
+ async connect(clientMetadata) {
1477
+ const params = [this.bp.pubkey, this.bp.secret || ""];
1478
+ if (clientMetadata) {
1479
+ params.push("");
1480
+ params.push(JSON.stringify(clientMetadata));
1481
+ }
1482
+ await this.sendRequest("connect", params);
1483
+ }
1484
+ async logout() {
1485
+ let resp = await this.sendRequest("logout", []);
1486
+ if (resp !== "ack")
1487
+ throw new Error(`result is not ack: ${resp}`);
1488
+ await this.close();
1349
1489
  }
1350
1490
  async getPublicKey() {
1351
1491
  if (!this.cachedPubKey) {