@openclaw/nostr 2026.7.1-beta.6 → 2026.7.2-beta.1

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/api.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { o as resolveNostrAccount } from "./setup-surface-CKamwGa3.js";
2
2
  import { getPluginRuntimeGatewayRequestScope } from "./runtime-api.js";
3
- import { n as NostrProfileSchema } from "./config-schema-DIiXiBKr.js";
4
- import { a as setNostrRuntime, i as getNostrRuntime, n as nostrPlugin, o as contentToProfile, r as publishNostrProfile, t as getNostrProfileState } from "./channel-B2Y66pl3.js";
3
+ import { n as NostrProfileSchema } from "./config-schema-CelPzg1N.js";
4
+ import { a as setNostrRuntime, i as getNostrRuntime, n as nostrPlugin, o as contentToProfile, r as publishNostrProfile, t as getNostrProfileState } from "./channel-BZfbDZcY.js";
5
5
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalLowercaseString, readStringValue } from "openclaw/plugin-sdk/string-coerce-runtime";
6
6
  import { z } from "zod";
7
7
  import { SimplePool, verifyEvent } from "nostr-tools";
@@ -1,5 +1,5 @@
1
1
  import { a as resolveDefaultNostrAccountId, c as validatePrivateKey, i as listNostrAccountIds, n as nostrSetupWizard, o as resolveNostrAccount, s as normalizePubkey, t as nostrSetupAdapter } from "./setup-surface-CKamwGa3.js";
2
- import { a as collectStatusIssuesFromLastError, i as buildChannelConfigSchema, n as NostrProfileSchema, o as createDefaultChannelRuntimeState, r as DEFAULT_ACCOUNT_ID, s as formatPairingApproveHint, t as NostrConfigSchema } from "./config-schema-DIiXiBKr.js";
2
+ import { a as collectStatusIssuesFromLastError, i as buildChannelConfigSchema, n as NostrProfileSchema, o as createDefaultChannelRuntimeState, r as DEFAULT_ACCOUNT_ID, s as formatPairingApproveHint, t as NostrConfigSchema } from "./config-schema-CelPzg1N.js";
3
3
  import { i as DEFAULT_RELAYS } from "./setup-adapter-DEU3o8MF.js";
4
4
  import { t as normalizeNostrStateAccountId } from "./state-account-id-CvBZ9s6P.js";
5
5
  import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
@@ -20,41 +20,62 @@ import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";
20
20
  import { resolveIntegerOption, resolvePositiveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
21
21
  import { buildChannelOutboundSessionRoute, stripChannelTargetPrefix } from "openclaw/plugin-sdk/core";
22
22
  //#region extensions/nostr/src/metrics.ts
23
+ function createZeroMetricsState() {
24
+ return {
25
+ eventsReceived: 0,
26
+ eventsProcessed: 0,
27
+ eventsDuplicate: 0,
28
+ eventsRejected: {
29
+ invalidShape: 0,
30
+ wrongKind: 0,
31
+ stale: 0,
32
+ future: 0,
33
+ rateLimited: 0,
34
+ invalidSignature: 0,
35
+ oversizedCiphertext: 0,
36
+ oversizedPlaintext: 0,
37
+ decryptFailed: 0,
38
+ selfMessage: 0
39
+ },
40
+ relays: /* @__PURE__ */ new Map(),
41
+ rateLimiting: {
42
+ perSenderHits: 0,
43
+ globalHits: 0
44
+ },
45
+ decrypt: {
46
+ success: 0,
47
+ failure: 0
48
+ },
49
+ memory: {
50
+ seenTrackerSize: 0,
51
+ rateLimiterEntries: 0
52
+ }
53
+ };
54
+ }
55
+ function createMetricsSnapshot(state, snapshotAt) {
56
+ const relays = {};
57
+ for (const [url, stats] of state.relays) relays[url] = {
58
+ ...stats,
59
+ messagesReceived: { ...stats.messagesReceived }
60
+ };
61
+ return {
62
+ ...state,
63
+ eventsRejected: { ...state.eventsRejected },
64
+ relays,
65
+ rateLimiting: { ...state.rateLimiting },
66
+ decrypt: { ...state.decrypt },
67
+ memory: { ...state.memory },
68
+ snapshotAt: snapshotAt ?? Date.now()
69
+ };
70
+ }
23
71
  /**
24
72
  * Create a metrics collector instance.
25
73
  * Optionally pass an onMetric callback to receive real-time metric events.
26
74
  */
27
75
  function createMetrics(onMetric) {
28
- let eventsReceived = 0;
29
- let eventsProcessed = 0;
30
- let eventsDuplicate = 0;
31
- const eventsRejected = {
32
- invalidShape: 0,
33
- wrongKind: 0,
34
- stale: 0,
35
- future: 0,
36
- rateLimited: 0,
37
- invalidSignature: 0,
38
- oversizedCiphertext: 0,
39
- oversizedPlaintext: 0,
40
- decryptFailed: 0,
41
- selfMessage: 0
42
- };
43
- const relays = /* @__PURE__ */ new Map();
44
- const rateLimiting = {
45
- perSenderHits: 0,
46
- globalHits: 0
47
- };
48
- const decrypt = {
49
- success: 0,
50
- failure: 0
51
- };
52
- const memory = {
53
- seenTrackerSize: 0,
54
- rateLimiterEntries: 0
55
- };
76
+ let state = createZeroMetricsState();
56
77
  function getOrCreateRelay(url) {
57
- let relay = relays.get(url);
78
+ let relay = state.relays.get(url);
58
79
  if (!relay) {
59
80
  relay = {
60
81
  connects: 0,
@@ -73,7 +94,7 @@ function createMetrics(onMetric) {
73
94
  circuitBreakerOpens: 0,
74
95
  circuitBreakerCloses: 0
75
96
  };
76
- relays.set(url, relay);
97
+ state.relays.set(url, relay);
77
98
  }
78
99
  return relay;
79
100
  }
@@ -87,43 +108,43 @@ function createMetrics(onMetric) {
87
108
  const relayUrl = labels?.relay;
88
109
  switch (name) {
89
110
  case "event.received":
90
- eventsReceived += value;
111
+ state.eventsReceived += value;
91
112
  break;
92
113
  case "event.processed":
93
- eventsProcessed += value;
114
+ state.eventsProcessed += value;
94
115
  break;
95
116
  case "event.duplicate":
96
- eventsDuplicate += value;
117
+ state.eventsDuplicate += value;
97
118
  break;
98
119
  case "event.rejected.invalid_shape":
99
- eventsRejected.invalidShape += value;
120
+ state.eventsRejected.invalidShape += value;
100
121
  break;
101
122
  case "event.rejected.wrong_kind":
102
- eventsRejected.wrongKind += value;
123
+ state.eventsRejected.wrongKind += value;
103
124
  break;
104
125
  case "event.rejected.stale":
105
- eventsRejected.stale += value;
126
+ state.eventsRejected.stale += value;
106
127
  break;
107
128
  case "event.rejected.future":
108
- eventsRejected.future += value;
129
+ state.eventsRejected.future += value;
109
130
  break;
110
131
  case "event.rejected.rate_limited":
111
- eventsRejected.rateLimited += value;
132
+ state.eventsRejected.rateLimited += value;
112
133
  break;
113
134
  case "event.rejected.invalid_signature":
114
- eventsRejected.invalidSignature += value;
135
+ state.eventsRejected.invalidSignature += value;
115
136
  break;
116
137
  case "event.rejected.oversized_ciphertext":
117
- eventsRejected.oversizedCiphertext += value;
138
+ state.eventsRejected.oversizedCiphertext += value;
118
139
  break;
119
140
  case "event.rejected.oversized_plaintext":
120
- eventsRejected.oversizedPlaintext += value;
141
+ state.eventsRejected.oversizedPlaintext += value;
121
142
  break;
122
143
  case "event.rejected.decrypt_failed":
123
- eventsRejected.decryptFailed += value;
144
+ state.eventsRejected.decryptFailed += value;
124
145
  break;
125
146
  case "event.rejected.self_message":
126
- eventsRejected.selfMessage += value;
147
+ state.eventsRejected.selfMessage += value;
127
148
  break;
128
149
  case "relay.connect":
129
150
  if (relayUrl) getOrCreateRelay(relayUrl).connects += value;
@@ -173,66 +194,30 @@ function createMetrics(onMetric) {
173
194
  if (relayUrl) getOrCreateRelay(relayUrl).circuitBreakerState = "half_open";
174
195
  break;
175
196
  case "rate_limit.per_sender":
176
- rateLimiting.perSenderHits += value;
197
+ state.rateLimiting.perSenderHits += value;
177
198
  break;
178
199
  case "rate_limit.global":
179
- rateLimiting.globalHits += value;
200
+ state.rateLimiting.globalHits += value;
180
201
  break;
181
202
  case "decrypt.success":
182
- decrypt.success += value;
203
+ state.decrypt.success += value;
183
204
  break;
184
205
  case "decrypt.failure":
185
- decrypt.failure += value;
206
+ state.decrypt.failure += value;
186
207
  break;
187
208
  case "memory.seen_tracker_size":
188
- memory.seenTrackerSize = value;
209
+ state.memory.seenTrackerSize = value;
189
210
  break;
190
211
  case "memory.rate_limiter_entries":
191
- memory.rateLimiterEntries = value;
212
+ state.memory.rateLimiterEntries = value;
192
213
  break;
193
214
  }
194
215
  }
195
216
  function getSnapshot() {
196
- const relaysObj = {};
197
- for (const [url, stats] of relays) relaysObj[url] = {
198
- ...stats,
199
- messagesReceived: { ...stats.messagesReceived }
200
- };
201
- return {
202
- eventsReceived,
203
- eventsProcessed,
204
- eventsDuplicate,
205
- eventsRejected: { ...eventsRejected },
206
- relays: relaysObj,
207
- rateLimiting: { ...rateLimiting },
208
- decrypt: { ...decrypt },
209
- memory: { ...memory },
210
- snapshotAt: Date.now()
211
- };
217
+ return createMetricsSnapshot(state);
212
218
  }
213
219
  function reset() {
214
- eventsReceived = 0;
215
- eventsProcessed = 0;
216
- eventsDuplicate = 0;
217
- Object.assign(eventsRejected, {
218
- invalidShape: 0,
219
- wrongKind: 0,
220
- stale: 0,
221
- future: 0,
222
- rateLimited: 0,
223
- invalidSignature: 0,
224
- oversizedCiphertext: 0,
225
- oversizedPlaintext: 0,
226
- decryptFailed: 0,
227
- selfMessage: 0
228
- });
229
- relays.clear();
230
- rateLimiting.perSenderHits = 0;
231
- rateLimiting.globalHits = 0;
232
- decrypt.success = 0;
233
- decrypt.failure = 0;
234
- memory.seenTrackerSize = 0;
235
- memory.rateLimiterEntries = 0;
220
+ state = createZeroMetricsState();
236
221
  }
237
222
  return {
238
223
  emit,
@@ -244,37 +229,7 @@ function createMetrics(onMetric) {
244
229
  * Create a no-op metrics instance (for when metrics are disabled).
245
230
  */
246
231
  function createNoopMetrics() {
247
- const emptySnapshot = {
248
- eventsReceived: 0,
249
- eventsProcessed: 0,
250
- eventsDuplicate: 0,
251
- eventsRejected: {
252
- invalidShape: 0,
253
- wrongKind: 0,
254
- stale: 0,
255
- future: 0,
256
- rateLimited: 0,
257
- invalidSignature: 0,
258
- oversizedCiphertext: 0,
259
- oversizedPlaintext: 0,
260
- decryptFailed: 0,
261
- selfMessage: 0
262
- },
263
- relays: {},
264
- rateLimiting: {
265
- perSenderHits: 0,
266
- globalHits: 0
267
- },
268
- decrypt: {
269
- success: 0,
270
- failure: 0
271
- },
272
- memory: {
273
- seenTrackerSize: 0,
274
- rateLimiterEntries: 0
275
- },
276
- snapshotAt: 0
277
- };
232
+ const emptySnapshot = createMetricsSnapshot(createZeroMetricsState(), 0);
278
233
  return {
279
234
  emit: () => {},
280
235
  getSnapshot: () => ({
@@ -603,10 +558,7 @@ function createSeenTracker(options) {
603
558
  }
604
559
  function seed(ids) {
605
560
  const now = Date.now();
606
- for (let i = ids.length - 1; i >= 0; i--) {
607
- const id = ids[i];
608
- if (!entries.has(id) && entries.size < maxEntries) insertAtFront(id, now);
609
- }
561
+ for (const id of ids.toReversed()) if (!entries.has(id) && entries.size < maxEntries) insertAtFront(id, now);
610
562
  }
611
563
  return {
612
564
  has,
@@ -1,2 +1,2 @@
1
- import { n as nostrPlugin } from "./channel-B2Y66pl3.js";
1
+ import { n as nostrPlugin } from "./channel-BZfbDZcY.js";
2
2
  export { nostrPlugin };
@@ -1,6 +1,6 @@
1
1
  import { collectStatusIssuesFromLastError, createDefaultChannelRuntimeState } from "openclaw/plugin-sdk/status-helpers";
2
2
  import { DEFAULT_ACCOUNT_ID, buildChannelConfigSchema, formatPairingApproveHint } from "openclaw/plugin-sdk/channel-plugin-common";
3
- import { AllowFromListSchema, DmPolicySchema, MarkdownConfigSchema } from "openclaw/plugin-sdk/channel-config-primitives";
3
+ import { AllowFromListSchema, DmPolicySchema, MarkdownConfigSchema } from "openclaw/plugin-sdk/channel-config-schema";
4
4
  import { buildSecretInputSchema } from "openclaw/plugin-sdk/secret-input";
5
5
  import { z } from "zod";
6
6
  //#region extensions/nostr/src/config-schema.ts
@@ -1,4 +1,4 @@
1
- import { i as buildChannelConfigSchema, t as NostrConfigSchema } from "./config-schema-DIiXiBKr.js";
1
+ import { i as buildChannelConfigSchema, t as NostrConfigSchema } from "./config-schema-CelPzg1N.js";
2
2
  import { i as DEFAULT_RELAYS, n as createNostrSetupAdapter } from "./setup-adapter-DEU3o8MF.js";
3
3
  import { describeAccountSnapshot } from "openclaw/plugin-sdk/account-helpers";
4
4
  import { DEFAULT_ACCOUNT_ID, createDelegatedSetupWizardProxy, createSetupTranslator, createStandardChannelSetupStatus } from "openclaw/plugin-sdk/setup-runtime";
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@openclaw/nostr",
3
- "version": "2026.7.1-beta.6",
3
+ "version": "2026.7.2-beta.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/nostr",
9
- "version": "2026.7.1-beta.6",
9
+ "version": "2026.7.2-beta.1",
10
10
  "dependencies": {
11
11
  "nostr-tools": "2.23.9",
12
12
  "zod": "4.4.3"
13
13
  },
14
14
  "peerDependencies": {
15
- "openclaw": ">=2026.7.1-beta.6"
15
+ "openclaw": ">=2026.7.2-beta.1"
16
16
  },
17
17
  "peerDependenciesMeta": {
18
18
  "openclaw": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/nostr",
3
- "version": "2026.7.1-beta.6",
3
+ "version": "2026.7.2-beta.1",
4
4
  "description": "OpenClaw Nostr channel plugin for NIP-04 encrypted direct messages.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -12,7 +12,7 @@
12
12
  "zod": "4.4.3"
13
13
  },
14
14
  "peerDependencies": {
15
- "openclaw": ">=2026.7.1-beta.6"
15
+ "openclaw": ">=2026.7.2-beta.1"
16
16
  },
17
17
  "peerDependenciesMeta": {
18
18
  "openclaw": {
@@ -50,10 +50,10 @@
50
50
  "minHostVersion": ">=2026.4.10"
51
51
  },
52
52
  "compat": {
53
- "pluginApi": ">=2026.7.1-beta.6"
53
+ "pluginApi": ">=2026.7.2-beta.1"
54
54
  },
55
55
  "build": {
56
- "openclawVersion": "2026.7.1-beta.6"
56
+ "openclawVersion": "2026.7.2-beta.1"
57
57
  },
58
58
  "release": {
59
59
  "publishToClawHub": true,