run402 4.22.0 → 4.23.0

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.
@@ -0,0 +1,310 @@
1
+ /**
2
+ * `run402 buzz notifications` — project-event routing into a Buzz channel.
3
+ *
4
+ * Gateway subsystem: add-buzz-project-event-routing
5
+ * (/buzz-project-event-routes/v1/*). JSON envelopes to stdout (pipe
6
+ * contract); the authorization handoff and wait narration go to stderr.
7
+ */
8
+ import { getSdk } from "./sdk.mjs";
9
+ import { fail, reportSdkError } from "./sdk-errors.mjs";
10
+ import {
11
+ normalizeArgv,
12
+ hasHelp,
13
+ assertKnownFlags,
14
+ parseIntegerFlag,
15
+ flagValue,
16
+ positionalArgs,
17
+ requirePositionalCount,
18
+ failUnknownSubcommand,
19
+ } from "./argparse.mjs";
20
+
21
+ const HELP = `run402 buzz notifications — route project events into a Buzz community channel
22
+
23
+ Usage:
24
+ run402 buzz notifications configure --org <uuid> --installation <buzzci_id> --name <route_name> --channel <uuid> --project <id> [--project <id> ...] [--event-type <t> ...] [--event-class <c> ...]
25
+ run402 buzz notifications status [--org <uuid> | <buzzper_id>]
26
+ run402 buzz notifications test <buzzper_id> [--wait] [--poll-seconds <n>] [--timeout-seconds <n>]
27
+ run402 buzz notifications deliveries <buzzper_id> [--limit <n>] [--cursor <c>] [--delivery <buzzped_id>]
28
+ run402 buzz notifications pause <buzzper_id>
29
+ run402 buzz notifications resume <buzzper_id>
30
+ run402 buzz notifications rotate <buzzper_id>
31
+ run402 buzz notifications revoke <buzzper_id>
32
+
33
+ THE WORKFLOW — configure -> authorize -> test -> live:
34
+ 1. configure Creates the route. The response's \`authorization\` block is
35
+ either \`authorized\` (live now) or \`pending_buzz_authorization\`
36
+ with the ONE exact, non-secret handoff: a Buzz community owner
37
+ or admin adds the printed notification_pubkey as a relay
38
+ member (the approving human's own Buzz key lives in
39
+ Buzz Desktop -> Settings -> Profile -> Identity).
40
+ 2. authorize Done on the Buzz side by that human — nothing to run here.
41
+ 3. test Re-checks the Buzz-side membership (activating the route when
42
+ it landed) and queues one signed test message. \`--wait\` polls
43
+ the delivery for you.
44
+ 4. live Matching project events flow as channel messages. NEW events
45
+ only — nothing that predates the route is ever delivered.
46
+
47
+ What can be routed:
48
+ event types deploy_activated, error_fingerprints_observed,
49
+ platform_incident — the three reviewed projectors. Nothing
50
+ else has one, so nothing else can be routed.
51
+ event classes security, billing_critical, destructive_lifecycle,
52
+ verification, and recovery may NEVER be routed to Buzz.
53
+ Omitting --event-type/--event-class routes every registered type / every
54
+ non-forbidden class. There is no empty filter: the gateway rejects [].
55
+
56
+ Buzz is never a deadman channel: mandatory operator notifications keep their
57
+ human paths (email, Telegram) regardless of route state, and a Buzz delivery
58
+ acknowledges nothing.
59
+
60
+ Delivery semantics:
61
+ At-least-once, one row per (route, event), byte-identical republish on
62
+ retry. Backoff 1m/5m/30m/2h/12h to 8 attempts or 48h, then dead_letter —
63
+ visible in \`deliveries\`. Ten consecutive hard failures auto-pause the
64
+ route (pause_reason: delivery_failures); \`resume\` re-arms it.
65
+
66
+ Security:
67
+ - JSON stdout only; progress and the authorization handoff go to stderr.
68
+ - No command here ever accepts or prints a signing secret — the
69
+ notification_pubkey and signing_generation are the only credential
70
+ material on the wire. \`rotate\` stages the NEXT key; the swap activates
71
+ only after its own Buzz-side membership verifies.
72
+ - Every command in this group has zero spend impact.
73
+
74
+ Examples:
75
+ run402 buzz notifications configure --org 8f14…-uuid --installation buzzci_… --name deploys --channel <nip29-channel-id> --project prj_myapp --event-type deploy_activated
76
+ run402 buzz notifications test buzzper_… --wait
77
+ run402 buzz notifications deliveries buzzper_… --limit 20
78
+ `;
79
+
80
+ function out(value) {
81
+ console.log(JSON.stringify(value, null, 2));
82
+ }
83
+
84
+ /** All values of a repeatable value-flag, in argv order. */
85
+ function flagValues(args, flag) {
86
+ const values = [];
87
+ for (let i = 0; i < args.length; i++) {
88
+ if (args[i] !== flag) continue;
89
+ if (i + 1 >= args.length || (typeof args[i + 1] === "string" && args[i + 1].startsWith("--"))) {
90
+ fail({ code: "BAD_FLAG", message: `${flag} requires a value`, details: { flag } });
91
+ }
92
+ values.push(args[i + 1]);
93
+ i += 1;
94
+ }
95
+ return values;
96
+ }
97
+
98
+ function requiredFlag(args, flag) {
99
+ const value = flagValue(args, flag);
100
+ if (value === null) fail({ code: "BAD_FLAG", message: `${flag} is required`, details: { flag } });
101
+ return value;
102
+ }
103
+
104
+ /**
105
+ * The authorization block is the one exact handoff a human must complete —
106
+ * it goes to stderr LOUDLY (the JSON on stdout already carries it verbatim).
107
+ */
108
+ function narrateAuthorization(authorization) {
109
+ if (!authorization || authorization.status !== "pending_buzz_authorization") return;
110
+ console.error("PENDING BUZZ AUTHORIZATION — the route cannot deliver until a Buzz community owner or admin completes this handoff:");
111
+ console.error(` notification_pubkey: ${authorization.notification_pubkey}`);
112
+ if (authorization.connect_command) console.error(` connect command: ${authorization.connect_command}`);
113
+ if (authorization.instructions) console.error(` ${authorization.instructions}`);
114
+ console.error(" (The approving human's Buzz key lives in Buzz Desktop -> Settings -> Profile -> Identity.)");
115
+ console.error(" Then run `run402 buzz notifications test <buzzper_id> --wait` to verify it landed.");
116
+ }
117
+
118
+ async function configure(args) {
119
+ const a = normalizeArgv(args);
120
+ const valueFlags = ["--org", "--installation", "--name", "--channel", "--project", "--event-type", "--event-class", "--idempotency-key"];
121
+ assertKnownFlags(a, [...valueFlags, "--help", "-h"], valueFlags);
122
+ requirePositionalCount(positionalArgs(a, valueFlags), valueFlags, {
123
+ min: 0, max: 0, command: "run402 buzz notifications configure", missing: "",
124
+ });
125
+ const projectIds = flagValues(a, "--project");
126
+ if (projectIds.length === 0) {
127
+ fail({ code: "BAD_FLAG", message: "--project is required at least once — a route's scope is always explicit", details: { flag: "--project" } });
128
+ }
129
+ const eventTypes = flagValues(a, "--event-type");
130
+ const eventClasses = flagValues(a, "--event-class");
131
+ try {
132
+ const created = await getSdk().buzz.notifications.createRoute(requiredFlag(a, "--org"), {
133
+ installationId: requiredFlag(a, "--installation"),
134
+ routeName: requiredFlag(a, "--name"),
135
+ buzzChannelId: requiredFlag(a, "--channel"),
136
+ projectIds,
137
+ ...(eventTypes.length ? { eventTypes } : {}),
138
+ ...(eventClasses.length ? { eventClasses } : {}),
139
+ ...(flagValue(a, "--idempotency-key") ? { idempotencyKey: flagValue(a, "--idempotency-key") } : {}),
140
+ });
141
+ out(created);
142
+ narrateAuthorization(created.authorization);
143
+ if (created.authorization?.status === "authorized") {
144
+ console.error("Route is authorized and active. Run `run402 buzz notifications test <buzzper_id> --wait` to see a delivery land.");
145
+ }
146
+ } catch (err) {
147
+ reportSdkError(err);
148
+ }
149
+ }
150
+
151
+ async function status(args) {
152
+ const a = normalizeArgv(args);
153
+ const valueFlags = ["--org"];
154
+ assertKnownFlags(a, [...valueFlags, "--help", "-h"], valueFlags);
155
+ const positionals = requirePositionalCount(positionalArgs(a, valueFlags), valueFlags, {
156
+ min: 0, max: 1, command: "run402 buzz notifications status [--org <uuid> | <buzzper_id>]", missing: "",
157
+ });
158
+ try {
159
+ const sdk = getSdk();
160
+ if (positionals.length === 1) {
161
+ out(await sdk.buzz.notifications.get(positionals[0]));
162
+ return;
163
+ }
164
+ const routes = await sdk.buzz.notifications.list(requiredFlag(a, "--org"));
165
+ out({ buzz_project_event_routes: routes });
166
+ } catch (err) {
167
+ reportSdkError(err);
168
+ }
169
+ }
170
+
171
+ async function test(args) {
172
+ const a = normalizeArgv(args);
173
+ const valueFlags = ["--poll-seconds", "--timeout-seconds", "--idempotency-key"];
174
+ assertKnownFlags(a, [...valueFlags, "--wait", "--help", "-h"], valueFlags);
175
+ const positionals = requirePositionalCount(positionalArgs(a, valueFlags), valueFlags, {
176
+ min: 1, max: 1, command: "run402 buzz notifications test", missing: "<buzzper_id>",
177
+ });
178
+ const routeId = positionals[0];
179
+ const idempotencyKey = flagValue(a, "--idempotency-key") ?? undefined;
180
+ try {
181
+ const sdk = getSdk();
182
+ if (!a.includes("--wait")) {
183
+ const queued = await sdk.buzz.notifications.test(routeId, idempotencyKey);
184
+ out(queued);
185
+ console.error(`Queued ${queued.buzz_project_event_delivery_id} — the tick publishes within ~60s. Poll: run402 buzz notifications deliveries ${routeId} --delivery ${queued.buzz_project_event_delivery_id}`);
186
+ return;
187
+ }
188
+ const pollSeconds = flagValue(a, "--poll-seconds");
189
+ const timeoutSeconds = flagValue(a, "--timeout-seconds");
190
+ const pollMs = (pollSeconds != null ? parseIntegerFlag("--poll-seconds", pollSeconds, { min: 2, max: 600 }) : 5) * 1000;
191
+ const timeoutMs = (timeoutSeconds != null ? parseIntegerFlag("--timeout-seconds", timeoutSeconds, { min: 10, max: 3600 }) : 180) * 1000;
192
+ // The SDK owns the wait (shared waitFor contract: a timeout RETURNS the
193
+ // still-queued delivery, never throws). The CLI only narrates on stderr —
194
+ // stdout stays one JSON doc (the pipe contract).
195
+ let announced = false;
196
+ const delivery = await sdk.buzz.notifications.testAndWait(routeId, {
197
+ pollMs,
198
+ timeoutMs,
199
+ onPoll: (state) => {
200
+ if (!announced) {
201
+ announced = true;
202
+ console.error(`Queued ${state.buzz_project_event_delivery_id} (${state.status}); waiting for the publisher tick…`);
203
+ }
204
+ },
205
+ });
206
+ out(delivery);
207
+ if (delivery.status === "delivered") {
208
+ console.error(`Delivered — Nostr event ${delivery.nostr_event_id ?? "(id pending)"} is on the relay. The route is live.`);
209
+ } else if (delivery.status === "queued" || delivery.status === "retryable") {
210
+ console.error("Timed out still queued — the tick publishes within ~60s; silence is not failure, poll deliveries. If the route was pending authorization, the Buzz-side member-add may not have landed yet.");
211
+ process.exitCode = 2;
212
+ } else {
213
+ console.error(`Terminal without delivering (${delivery.status}${delivery.last_error ? `: ${delivery.last_error}` : ""}) — inspect \`run402 buzz notifications status ${routeId}\` for route health.`);
214
+ process.exitCode = 2;
215
+ }
216
+ } catch (err) {
217
+ reportSdkError(err);
218
+ }
219
+ }
220
+
221
+ async function deliveries(args) {
222
+ const a = normalizeArgv(args);
223
+ const valueFlags = ["--limit", "--cursor", "--delivery"];
224
+ assertKnownFlags(a, [...valueFlags, "--help", "-h"], valueFlags);
225
+ const positionals = requirePositionalCount(positionalArgs(a, valueFlags), valueFlags, {
226
+ min: 1, max: 1, command: "run402 buzz notifications deliveries", missing: "<buzzper_id>",
227
+ });
228
+ try {
229
+ out(await getSdk().buzz.notifications.deliveries(positionals[0], {
230
+ ...(flagValue(a, "--limit") != null
231
+ ? { limit: parseIntegerFlag("--limit", flagValue(a, "--limit"), { min: 1, max: 200 }) }
232
+ : {}),
233
+ ...(flagValue(a, "--cursor") ? { cursor: flagValue(a, "--cursor") } : {}),
234
+ ...(flagValue(a, "--delivery") ? { deliveryId: flagValue(a, "--delivery") } : {}),
235
+ }));
236
+ } catch (err) {
237
+ reportSdkError(err);
238
+ }
239
+ }
240
+
241
+ async function lifecycle(action, args) {
242
+ const a = normalizeArgv(args);
243
+ const valueFlags = ["--idempotency-key"];
244
+ assertKnownFlags(a, [...valueFlags, "--help", "-h"], valueFlags);
245
+ const positionals = requirePositionalCount(positionalArgs(a, valueFlags), valueFlags, {
246
+ min: 1, max: 1, command: `run402 buzz notifications ${action}`, missing: "<buzzper_id>",
247
+ });
248
+ const routeId = positionals[0];
249
+ const idempotencyKey = flagValue(a, "--idempotency-key") ?? undefined;
250
+ try {
251
+ const sdk = getSdk();
252
+ if (action === "rotate") {
253
+ const staged = await sdk.buzz.notifications.rotate(routeId, idempotencyKey);
254
+ out(staged);
255
+ console.error("Rotation STAGED, not active: the current key keeps signing until the NEXT pubkey's own Buzz-side membership verifies.");
256
+ narrateAuthorization({
257
+ status: "pending_buzz_authorization",
258
+ notification_pubkey: staged.rotation?.next_notification_pubkey,
259
+ instructions: staged.rotation?.authorize_hint,
260
+ });
261
+ return;
262
+ }
263
+ if (action === "revoke") {
264
+ const revoked = await sdk.buzz.notifications.revoke(routeId, idempotencyKey);
265
+ out(revoked);
266
+ if (revoked.notification_credential_destroyed) {
267
+ console.error("This was the installation's last live route — its notification credential was destroyed with it.");
268
+ }
269
+ console.error("Queued deliveries were cancelled; the route's sanitized history stays readable.");
270
+ return;
271
+ }
272
+ out(action === "pause"
273
+ ? await sdk.buzz.notifications.pause(routeId, idempotencyKey)
274
+ : await sdk.buzz.notifications.resume(routeId, idempotencyKey));
275
+ } catch (err) {
276
+ reportSdkError(err);
277
+ }
278
+ }
279
+
280
+ export async function run(sub, args) {
281
+ const argv = Array.isArray(args) ? args : [];
282
+ if (!sub || sub === "help" || hasHelp([sub, ...argv])) {
283
+ console.log(HELP);
284
+ return;
285
+ }
286
+ switch (sub) {
287
+ case "configure":
288
+ await configure(argv);
289
+ break;
290
+ case "status":
291
+ await status(argv);
292
+ break;
293
+ case "test":
294
+ await test(argv);
295
+ break;
296
+ case "deliveries":
297
+ await deliveries(argv);
298
+ break;
299
+ case "pause":
300
+ case "resume":
301
+ case "rotate":
302
+ case "revoke":
303
+ await lifecycle(sub, argv);
304
+ break;
305
+ default:
306
+ failUnknownSubcommand("buzz notifications", sub, {
307
+ hint: "Run `run402 buzz notifications --help` for usage.",
308
+ });
309
+ }
310
+ }
package/lib/buzz.mjs CHANGED
@@ -40,6 +40,14 @@ Explicit consent/decision commands:
40
40
  run402 buzz deny <buzzae_id> [--reason <text>]
41
41
  run402 buzz revoke <buzzae_id>
42
42
 
43
+ Project-event routing into a Buzz channel (configure → authorize → test → live):
44
+ run402 buzz notifications configure --org <uuid> --installation <buzzci_id> --name <route_name> --channel <uuid> --project <id> [--event-type <t> ...] [--event-class <c> ...]
45
+ run402 buzz notifications status [--org <uuid> | <buzzper_id>]
46
+ run402 buzz notifications test <buzzper_id> [--wait]
47
+ run402 buzz notifications deliveries <buzzper_id> [--limit <n>] [--cursor <c>] [--delivery <buzzped_id>]
48
+ run402 buzz notifications pause|resume|rotate|revoke <buzzper_id>
49
+ (run \`run402 buzz notifications --help\` for the full workflow)
50
+
43
51
  Advanced recovery reads:
44
52
  run402 buzz adopt direct --org <org_id> --identity-link <idlnk_id>
45
53
  run402 buzz adopt list --org <org_id>
@@ -308,6 +316,12 @@ async function revoke(args) {
308
316
  }
309
317
 
310
318
  export async function run(sub, args = []) {
319
+ if (sub === "notifications") {
320
+ // The group owns its own help (`run402 buzz notifications --help` must
321
+ // teach the routing workflow, not this module's lifecycle states).
322
+ const { run: runNotifications } = await import("./buzz-notifications.mjs");
323
+ return runNotifications(args[0], args.slice(1));
324
+ }
311
325
  if (!sub || sub === "help" || sub === "--help" || sub === "-h" || args.includes("--help") || args.includes("-h")) {
312
326
  console.log(HELP);
313
327
  return;
package/lib/buzz.test.mjs CHANGED
@@ -17,6 +17,10 @@ mock.module("./sdk.mjs", {
17
17
  });
18
18
 
19
19
  const { run } = await import("./buzz.mjs");
20
+ // Link the notifications group NOW, while the sdk.mjs module mock is active —
21
+ // buzz.mjs imports it lazily, and a first import that happens mid-suite (after
22
+ // an afterEach mock.restoreAll) would bind the REAL getSdk.
23
+ await import("./buzz-notifications.mjs");
20
24
 
21
25
  let stdout;
22
26
  let stderr;
@@ -231,3 +235,210 @@ describe("run402 buzz CLI", () => {
231
235
  assert.equal(calls[1][2], "revoke-installation-1");
232
236
  });
233
237
  });
238
+
239
+ describe("run402 buzz notifications CLI", () => {
240
+ const ORG = "11111111-1111-4111-8111-111111111111";
241
+ const ROUTE_ID = `buzzper_${"1".repeat(32)}`;
242
+ const DELIVERY_ID = `buzzped_${"2".repeat(32)}`;
243
+
244
+ beforeEach(() => {
245
+ process.exitCode = undefined;
246
+ });
247
+
248
+ it("teaches the configure → authorize → test → live workflow in group help", async () => {
249
+ sdk = {};
250
+ await run("notifications", ["--help"]);
251
+ const help = stdout.join("\n");
252
+ assert.match(help, /Usage:/);
253
+ assert.match(help, /configure -> authorize -> test -> live/);
254
+ assert.match(help, /deploy_activated, error_fingerprints_observed/);
255
+ assert.match(help, /may NEVER be routed/);
256
+ assert.match(help, /Buzz Desktop -> Settings -> Profile -> Identity/);
257
+ assert.match(help, /never a deadman channel/);
258
+ });
259
+
260
+ it("configure maps repeatable flags onto the SDK input and shouts the pending authorization handoff on stderr", async () => {
261
+ let observedOrg;
262
+ let observedInput;
263
+ const pubkey = "ab".repeat(32);
264
+ sdk = {
265
+ buzz: {
266
+ notifications: {
267
+ createRoute: async (orgId, input) => {
268
+ observedOrg = orgId;
269
+ observedInput = input;
270
+ return {
271
+ buzz_project_event_route_id: ROUTE_ID,
272
+ org_id: orgId,
273
+ status: "pending_authorization",
274
+ authorization: {
275
+ status: "pending_buzz_authorization",
276
+ notification_pubkey: pubkey,
277
+ connect_command: `buzz-admin add-member --pubkey ${pubkey}`,
278
+ instructions: `Ask a community owner or admin to add this pubkey as a relay member (e.g. ./run.sh add-member ${pubkey}), then POST the test route to verify.`,
279
+ verify_path: `/buzz-project-event-routes/v1/${ROUTE_ID}/test`,
280
+ },
281
+ };
282
+ },
283
+ },
284
+ },
285
+ };
286
+ await run("notifications", [
287
+ "configure",
288
+ "--org", ORG,
289
+ "--installation", `buzzci_${"3".repeat(32)}`,
290
+ "--name", "deploys",
291
+ "--channel", "chan-1",
292
+ "--project", "prj_a",
293
+ "--project", "prj_b",
294
+ "--event-type", "deploy_activated",
295
+ "--idempotency-key", "route-1",
296
+ ]);
297
+ assert.equal(observedOrg, ORG, "org_id is the bare dashed UUID, passed through verbatim");
298
+ assert.deepEqual(observedInput.projectIds, ["prj_a", "prj_b"]);
299
+ assert.deepEqual(observedInput.eventTypes, ["deploy_activated"]);
300
+ assert.equal(observedInput.eventClasses, undefined, "an unset filter is omitted, never fabricated");
301
+ assert.equal(observedInput.idempotencyKey, "route-1");
302
+ assert.equal(JSON.parse(stdout[0]).authorization.status, "pending_buzz_authorization");
303
+ const err = stderr.join("\n");
304
+ assert.match(err, /PENDING BUZZ AUTHORIZATION/);
305
+ assert.ok(err.includes(pubkey), "the notification pubkey is the one exact handoff and must be on stderr");
306
+ assert.match(err, /add-member/);
307
+ assert.doesNotMatch(err, /private|nsec|secret/i);
308
+ });
309
+
310
+ it("status lists for an org and reads one route by positional id", async () => {
311
+ const calls = [];
312
+ sdk = {
313
+ buzz: {
314
+ notifications: {
315
+ list: async (orgId) => { calls.push(["list", orgId]); return [{ buzz_project_event_route_id: ROUTE_ID }]; },
316
+ get: async (routeId) => { calls.push(["get", routeId]); return { buzz_project_event_route_id: routeId, health: "active" }; },
317
+ },
318
+ },
319
+ };
320
+ await run("notifications", ["status", "--org", ORG]);
321
+ await run("notifications", ["status", ROUTE_ID]);
322
+ assert.deepEqual(calls, [["list", ORG], ["get", ROUTE_ID]]);
323
+ assert.deepEqual(JSON.parse(stdout[0]).buzz_project_event_routes, [{ buzz_project_event_route_id: ROUTE_ID }]);
324
+ assert.equal(JSON.parse(stdout[1]).health, "active");
325
+ });
326
+
327
+ it("test --wait narrates once on stderr and reports a delivered route as live", async () => {
328
+ sdk = {
329
+ buzz: {
330
+ notifications: {
331
+ testAndWait: async (routeId, opts) => {
332
+ opts.onPoll({ buzz_project_event_delivery_id: DELIVERY_ID, status: "queued", poll: { path: "p" } });
333
+ const delivered = {
334
+ buzz_project_event_delivery_id: DELIVERY_ID,
335
+ status: "delivered",
336
+ nostr_event_id: "ev1",
337
+ };
338
+ opts.onPoll(delivered);
339
+ return delivered;
340
+ },
341
+ },
342
+ },
343
+ };
344
+ await run("notifications", ["test", ROUTE_ID, "--wait"]);
345
+ assert.equal(JSON.parse(stdout[0]).status, "delivered");
346
+ const announcements = stderr.filter((line) => line.includes(DELIVERY_ID) && line.includes("waiting"));
347
+ assert.equal(announcements.length, 1, "the queued announcement happens exactly once");
348
+ assert.match(stderr.join("\n"), /route is live/i);
349
+ assert.equal(process.exitCode, undefined);
350
+ });
351
+
352
+ it("test --wait exits 2 on a still-queued timeout — the tick cadence is not failure", async () => {
353
+ sdk = {
354
+ buzz: {
355
+ notifications: {
356
+ testAndWait: async (routeId, opts) => {
357
+ const queued = { buzz_project_event_delivery_id: DELIVERY_ID, status: "queued", poll: { path: "p" } };
358
+ opts.onPoll(queued);
359
+ return queued;
360
+ },
361
+ },
362
+ },
363
+ };
364
+ await run("notifications", ["test", ROUTE_ID, "--wait", "--poll-seconds", "2", "--timeout-seconds", "10"]);
365
+ const exitCode = process.exitCode;
366
+ // Reset before asserting so a signalled exit code never leaks into the
367
+ // test child process's own exit status.
368
+ process.exitCode = undefined;
369
+ assert.equal(JSON.parse(stdout[0]).status, "queued", "stdout stays one JSON doc — the still-queued delivery");
370
+ assert.match(stderr.join("\n"), /still queued — the tick publishes within ~60s; silence is not failure, poll deliveries/);
371
+ assert.equal(exitCode, 2);
372
+ });
373
+
374
+ it("test without --wait prints the queued 202 and the poll handoff", async () => {
375
+ sdk = {
376
+ buzz: {
377
+ notifications: {
378
+ test: async (routeId, key) => ({
379
+ buzz_project_event_delivery_id: DELIVERY_ID,
380
+ status: "queued",
381
+ poll: { path: `/buzz-project-event-routes/v1/${routeId}/deliveries?delivery_id=${DELIVERY_ID}` },
382
+ _key: key,
383
+ }),
384
+ },
385
+ },
386
+ };
387
+ await run("notifications", ["test", ROUTE_ID]);
388
+ assert.equal(JSON.parse(stdout[0]).status, "queued");
389
+ assert.match(stderr.join("\n"), /publishes within ~60s/);
390
+ assert.match(stderr.join("\n"), new RegExp(`deliveries ${ROUTE_ID} --delivery ${DELIVERY_ID}`));
391
+ assert.equal(process.exitCode, undefined);
392
+ });
393
+
394
+ it("deliveries maps limit/cursor/delivery flags onto SDK options", async () => {
395
+ let observed;
396
+ sdk = {
397
+ buzz: {
398
+ notifications: {
399
+ deliveries: async (routeId, opts) => {
400
+ observed = [routeId, opts];
401
+ return { buzz_project_event_deliveries: [], has_more: false };
402
+ },
403
+ },
404
+ },
405
+ };
406
+ await run("notifications", ["deliveries", ROUTE_ID, "--limit", "20", "--cursor", "cur_1", "--delivery", DELIVERY_ID]);
407
+ assert.deepEqual(observed, [ROUTE_ID, { limit: 20, cursor: "cur_1", deliveryId: DELIVERY_ID }]);
408
+ assert.equal(JSON.parse(stdout[0]).has_more, false);
409
+ });
410
+
411
+ it("revoke reports credential destruction and rotate shouts the staged next-key handoff", async () => {
412
+ const nextPubkey = "cd".repeat(32);
413
+ sdk = {
414
+ buzz: {
415
+ notifications: {
416
+ revoke: async (routeId, key) => ({
417
+ buzz_project_event_route_id: routeId,
418
+ status: "revoked",
419
+ notification_credential_destroyed: true,
420
+ _key: key,
421
+ }),
422
+ rotate: async (routeId) => ({
423
+ buzz_project_event_route_id: routeId,
424
+ rotation: {
425
+ status: "pending_buzz_authorization",
426
+ next_signing_generation: 2,
427
+ next_notification_pubkey: nextPubkey,
428
+ authorize_hint: "Ask a community owner or admin to add the NEXT pubkey as a relay member; the swap activates only after that membership verifies.",
429
+ verify_path: `/buzz-project-event-routes/v1/${routeId}/test`,
430
+ },
431
+ }),
432
+ },
433
+ },
434
+ };
435
+ await run("notifications", ["revoke", ROUTE_ID, "--idempotency-key", "rm-1"]);
436
+ assert.equal(JSON.parse(stdout[0]).notification_credential_destroyed, true);
437
+ assert.match(stderr.join("\n"), /last live route/);
438
+ await run("notifications", ["rotate", ROUTE_ID]);
439
+ assert.equal(JSON.parse(stdout[1]).rotation.next_signing_generation, 2);
440
+ const err = stderr.join("\n");
441
+ assert.match(err, /STAGED, not active/);
442
+ assert.ok(err.includes(nextPubkey), "the NEXT pubkey is the rotation handoff and must be on stderr");
443
+ });
444
+ });
@@ -57,6 +57,16 @@ export const COMMAND_MANIFEST = [
57
57
  { path: ["buzz", "approve"], positionals: [p("buzz_agent_enrollment_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["buzzae_11111111111111111111111111111111", "--grants-file", "__FIXTURE_FILE__", "--descriptor-revision", "1", "--policy-revision", "1"], skipBehavioral: "requires owner step-up and a live pending enrollment" },
58
58
  { path: ["buzz", "deny"], positionals: [p("buzz_agent_enrollment_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["buzzae_11111111111111111111111111111111"], skipBehavioral: "requires owner step-up and a live pending enrollment" },
59
59
  { path: ["buzz", "revoke"], positionals: [p("buzz_agent_enrollment_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["buzzae_11111111111111111111111111111111"], skipBehavioral: "requires a live enrollment" },
60
+ // Project-event routing into a Buzz channel (add-buzz-project-event-routing).
61
+ // org ids on this surface are BARE dashed UUIDs, never org_-prefixed.
62
+ { path: ["buzz", "notifications", "configure"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["--org", "11111111-1111-4111-8111-111111111111", "--installation", "buzzci_11111111111111111111111111111111", "--name", "deploys", "--channel", "22222222-2222-4222-8222-222222222222"], skipBehavioral: "requires live owner authentication and an active Buzz installation (and its repeatable --project scope flag is reserved by the gate)" },
63
+ { path: ["buzz", "notifications", "status"], positionals: [p("buzz_project_event_route_id", { required: false })], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["--org", "11111111-1111-4111-8111-111111111111"], skipBehavioral: "requires live owner authentication" },
64
+ { path: ["buzz", "notifications", "test"], positionals: [p("buzz_project_event_route_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["buzzper_11111111111111111111111111111111"], skipBehavioral: "requires live owner authentication and a live route" },
65
+ { path: ["buzz", "notifications", "deliveries"], positionals: [p("buzz_project_event_route_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["buzzper_11111111111111111111111111111111"], skipBehavioral: "requires live owner authentication and a live route" },
66
+ { path: ["buzz", "notifications", "pause"], positionals: [p("buzz_project_event_route_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["buzzper_11111111111111111111111111111111"], skipBehavioral: "requires live owner authentication and a live route" },
67
+ { path: ["buzz", "notifications", "resume"], positionals: [p("buzz_project_event_route_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["buzzper_11111111111111111111111111111111"], skipBehavioral: "requires live owner authentication and a live route" },
68
+ { path: ["buzz", "notifications", "rotate"], positionals: [p("buzz_project_event_route_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["buzzper_11111111111111111111111111111111"], skipBehavioral: "requires live owner authentication and a live route" },
69
+ { path: ["buzz", "notifications", "revoke"], positionals: [p("buzz_project_event_route_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["buzzper_11111111111111111111111111111111"], skipBehavioral: "requires live owner authentication and a live route" },
60
70
 
61
71
  // ── up / init / status (flat runners) ────────────────────────────────────
62
72
  { path: ["up"], positionals: [p("source", { required: false })], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["--check", "-y"], runStyle: "flat", skipBehavioral: "orchestrates a full provision/build/deploy against the real cwd" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "run402",
3
- "version": "4.22.0",
3
+ "version": "4.23.0",
4
4
  "description": "CLI for Run402 — provision Postgres databases, deploy static sites, generate images, and manage wallets via x402 and MPP micropayments.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -337,8 +337,9 @@ export type * from "./namespaces/projects.types.js";
337
337
  export { IdentityLinks, NostrIdentityLinks } from "./namespaces/identity-links.js";
338
338
  export type * from "./namespaces/identity-links.js";
339
339
  export type * from "./namespaces/identity-links.types.js";
340
- export { Buzz, BuzzHumanAdoptions, BuzzHumanAdoptionOffers, BuzzCommunityInstallations, BuzzAgentEnrollments } from "./namespaces/buzz.js";
340
+ export { Buzz, BuzzHumanAdoptions, BuzzHumanAdoptionOffers, BuzzCommunityInstallations, BuzzAgentEnrollments, BuzzNotifications } from "./namespaces/buzz.js";
341
341
  export type * from "./namespaces/buzz.types.js";
342
+ export type * from "./namespaces/buzz-notifications.types.js";
342
343
  export type * from "./namespaces/secrets.js";
343
344
  export type * from "./namespaces/sender-domain.js";
344
345
  export type * from "./namespaces/service.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/sdk/dist/index.js CHANGED
@@ -373,6 +373,6 @@ export { Archives } from "./namespaces/archives.js";
373
373
  export { Snapshots } from "./namespaces/snapshots.js";
374
374
  export { Branches } from "./namespaces/branches.js";
375
375
  export { IdentityLinks, NostrIdentityLinks } from "./namespaces/identity-links.js";
376
- export { Buzz, BuzzHumanAdoptions, BuzzHumanAdoptionOffers, BuzzCommunityInstallations, BuzzAgentEnrollments } from "./namespaces/buzz.js";
376
+ export { Buzz, BuzzHumanAdoptions, BuzzHumanAdoptionOffers, BuzzCommunityInstallations, BuzzAgentEnrollments, BuzzNotifications } from "./namespaces/buzz.js";
377
377
  export { ScopedWallet } from "./namespaces/wallets.js";
378
378
  //# sourceMappingURL=index.js.map