@pingroom/sdk 0.2.0 → 0.4.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.
package/dist/webhooks.js CHANGED
@@ -2,12 +2,13 @@
2
2
  * Webhook helpers — usable standalone, no client/token required.
3
3
  *
4
4
  * - verifyWebhookSignature: verify an OUTGOING webhook PingRoom sent you.
5
- * PingRoom signs `HMAC-SHA256(signing_secret, rawBody)` and sends it as
6
- * `X-PingRoom-Signature: sha256=<hex>`. Verify over the EXACT raw request
7
- * body bytes — re-serializing the parsed JSON will not match.
5
+ * New deliveries carry both the legacy timestamp/body HMAC and a v2 HMAC
6
+ * that also binds the delivery ID. Verify over the EXACT raw request body
7
+ * bytes — re-serializing the parsed JSON will not match.
8
8
  *
9
9
  * - sendIncomingWebhook: fire a room's INCOMING webhook (the URL carries its
10
10
  * own secret, so no agent token is needed) — the one-line CI/deploy ping.
11
+ * Pass a top-level `live_status` to drive a Live Activity instead.
11
12
  */
12
13
  import { PingRoomError } from './errors.js';
13
14
  import { combineSignals } from './internal/async.js';
@@ -15,6 +16,7 @@ import { assertActionNumber, assertStructuredData } from './internal/guards.js';
15
16
  import { assertSecureUrl } from './internal/url.js';
16
17
  import { VERSION } from './version.js';
17
18
  export const WEBHOOK_SIGNATURE_HEADER = 'X-PingRoom-Signature';
19
+ export const WEBHOOK_SIGNATURE_V2_HEADER = 'X-PingRoom-Signature-V2';
18
20
  export const WEBHOOK_TIMESTAMP_HEADER = 'X-PingRoom-Timestamp';
19
21
  export const WEBHOOK_DELIVERY_HEADER = 'X-PingRoom-Delivery';
20
22
  export const WEBHOOK_EVENT_HEADER = 'X-PingRoom-Event';
@@ -23,34 +25,80 @@ export const WEBHOOK_EVENT_HEADER = 'X-PingRoom-Event';
23
25
  * boolean and never throws on mismatch.
24
26
  */
25
27
  export async function verifyWebhookSignature(opts) {
26
- if (!opts.signature || !opts.secret) {
28
+ const hasV2Signature = opts.signatureV2 !== null && opts.signatureV2 !== undefined;
29
+ const selectedSignature = hasV2Signature ? opts.signatureV2 : opts.signature;
30
+ if (!selectedSignature || !opts.secret) {
27
31
  return false;
28
32
  }
29
- const provided = normalizeSignature(opts.signature).toLowerCase();
33
+ const timestamp = normalizeTimestamp(opts.timestamp);
34
+ if (timestamp === null) {
35
+ return false;
36
+ }
37
+ const maxAgeSeconds = opts.maxAgeSeconds ?? 300;
38
+ if (!Number.isFinite(maxAgeSeconds) || maxAgeSeconds < 0) {
39
+ return false;
40
+ }
41
+ if (Math.abs(Date.now() / 1000 - Number(timestamp)) > maxAgeSeconds) {
42
+ return false;
43
+ }
44
+ const provided = normalizeSignature(selectedSignature).toLowerCase();
30
45
  if (!/^[0-9a-f]{64}$/.test(provided)) {
31
46
  return false;
32
47
  }
33
- const expected = await hmacSha256Hex(opts.secret, toMessageString(opts.payload));
48
+ let message;
49
+ if (hasV2Signature) {
50
+ const deliveryId = normalizeDeliveryId(opts.deliveryId);
51
+ if (deliveryId === null) {
52
+ return false;
53
+ }
54
+ message = signedMessage(`v2\n${timestamp}\n${deliveryId}\n`, opts.payload);
55
+ }
56
+ else {
57
+ message = signedMessage(`${timestamp}.`, opts.payload);
58
+ }
59
+ const expected = await hmacSha256Hex(opts.secret, message);
34
60
  return timingSafeEqualHex(provided, expected);
35
61
  }
62
+ /**
63
+ * Every field the incoming-webhook endpoint accepts, in the server's own order
64
+ * (`WebhookController::trigger`'s validate block, plus `live_status`, which it
65
+ * detects before that block and routes to the stream handler).
66
+ *
67
+ * The request body is built by walking this list rather than a hand-written run
68
+ * of `if`s. That run silently dropped whatever nobody remembered to add to it:
69
+ * first `live_status` (pre-0.3.1 — posted only `{correlation_id}`, fell into the
70
+ * legacy webhook branch, and returned `success: true` having created no activity
71
+ * at all), then `emoji`/`icon`/`color`/`sound`. Exported so a test can fail the
72
+ * moment this list and the server contract diverge again.
73
+ */
74
+ export const INCOMING_WEBHOOK_FIELDS = [
75
+ 'title',
76
+ 'message',
77
+ 'action',
78
+ 'emoji',
79
+ 'icon',
80
+ 'color',
81
+ 'sound',
82
+ 'data',
83
+ 'correlation_id',
84
+ 'reply_to',
85
+ 'requires_ack',
86
+ 'ack_timeout_seconds',
87
+ // Top level, never folded into `data` — the server routes on this key and
88
+ // strips it from `data` so a legacy-path caller cannot spoof completion alerts.
89
+ 'live_status',
90
+ ];
36
91
  /** POST to a room's incoming-webhook URL (which embeds the secret in its path). */
37
92
  export async function sendIncomingWebhook(webhookUrl, payload, options = {}) {
38
93
  assertSecureUrl(webhookUrl, options.allowInsecure ?? false);
39
94
  assertActionNumber(payload.action);
40
95
  assertStructuredData(payload.data);
41
96
  const body = {};
42
- if (payload.message !== undefined)
43
- body.message = payload.message;
44
- if (payload.title !== undefined)
45
- body.title = payload.title;
46
- if (payload.action !== undefined)
47
- body.action = payload.action;
48
- if (payload.data !== undefined)
49
- body.data = payload.data;
50
- if (payload.correlation_id !== undefined)
51
- body.correlation_id = payload.correlation_id;
52
- if (payload.reply_to !== undefined)
53
- body.reply_to = payload.reply_to;
97
+ for (const field of INCOMING_WEBHOOK_FIELDS) {
98
+ const value = payload[field];
99
+ if (value !== undefined)
100
+ body[field] = value;
101
+ }
54
102
  const headers = {
55
103
  'Content-Type': 'application/json',
56
104
  Accept: 'application/json',
@@ -99,19 +147,39 @@ function normalizeSignature(sig) {
99
147
  const s = sig.trim();
100
148
  return s.startsWith('sha256=') ? s.slice('sha256='.length) : s;
101
149
  }
102
- function toMessageString(payload) {
103
- if (typeof payload === 'string') {
104
- return payload;
150
+ function normalizeTimestamp(timestamp) {
151
+ if (timestamp === null || timestamp === undefined) {
152
+ return null;
105
153
  }
106
- if (payload instanceof Uint8Array) {
107
- return new TextDecoder().decode(payload);
154
+ const normalized = typeof timestamp === 'string' ? timestamp.trim() : String(timestamp);
155
+ if (!/^\d+$/.test(normalized)) {
156
+ return null;
108
157
  }
109
- return new TextDecoder().decode(new Uint8Array(payload));
158
+ const seconds = Number(normalized);
159
+ return Number.isSafeInteger(seconds) ? normalized : null;
160
+ }
161
+ function normalizeDeliveryId(deliveryId) {
162
+ return typeof deliveryId === 'string' && /^[\x21-\x7e]{1,255}$/.test(deliveryId)
163
+ ? deliveryId
164
+ : null;
165
+ }
166
+ function signedMessage(prefixText, payload) {
167
+ const enc = new TextEncoder();
168
+ const prefix = enc.encode(prefixText);
169
+ const body = typeof payload === 'string'
170
+ ? enc.encode(payload)
171
+ : payload instanceof Uint8Array
172
+ ? payload
173
+ : new Uint8Array(payload);
174
+ const message = new Uint8Array(prefix.byteLength + body.byteLength);
175
+ message.set(prefix, 0);
176
+ message.set(body, prefix.byteLength);
177
+ return message;
110
178
  }
111
179
  async function hmacSha256Hex(secret, message) {
112
180
  const enc = new TextEncoder();
113
181
  const key = await crypto.subtle.importKey('raw', enc.encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
114
- const signature = await crypto.subtle.sign('HMAC', key, enc.encode(message));
182
+ const signature = await crypto.subtle.sign('HMAC', key, message);
115
183
  const bytes = new Uint8Array(signature);
116
184
  let hex = '';
117
185
  for (const b of bytes) {
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pingroom/sdk",
3
- "version": "0.2.0",
4
- "description": "Official TypeScript/JavaScript SDK for the PingRoom agent API — auth, rooms, pings, agent-to-agent messaging, human-in-the-loop approvals & questions, real-time listen, MCP, and webhook signature verification.",
3
+ "version": "0.4.0",
4
+ "description": "Official TypeScript/JavaScript SDK for the PingRoom agent API — app pairing, rooms, pings, human-in-the-loop approvals, questions and handoffs, live status, MCP, and webhook verification.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",