@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/README.md +339 -12
- package/dist/client.d.ts +130 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +517 -2
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +18 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +16 -0
- package/dist/errors.js.map +1 -1
- package/dist/http.d.ts +7 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +29 -5
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +10 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/linkPing.d.ts +27 -0
- package/dist/linkPing.d.ts.map +1 -0
- package/dist/linkPing.js +39 -0
- package/dist/linkPing.js.map +1 -0
- package/dist/liveActivity.d.ts +101 -0
- package/dist/liveActivity.d.ts.map +1 -0
- package/dist/liveActivity.js +83 -0
- package/dist/liveActivity.js.map +1 -0
- package/dist/liveStatus.d.ts +168 -0
- package/dist/liveStatus.d.ts.map +1 -0
- package/dist/liveStatus.js +82 -0
- package/dist/liveStatus.js.map +1 -0
- package/dist/mcp.d.ts +23 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +54 -6
- package/dist/mcp.js.map +1 -1
- package/dist/types.d.ts +292 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/webhooks.d.ts +53 -6
- package/dist/webhooks.d.ts.map +1 -1
- package/dist/webhooks.js +93 -25
- package/dist/webhooks.js.map +1 -1
- package/package.json +2 -2
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
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
|
103
|
-
if (
|
|
104
|
-
return
|
|
150
|
+
function normalizeTimestamp(timestamp) {
|
|
151
|
+
if (timestamp === null || timestamp === undefined) {
|
|
152
|
+
return null;
|
|
105
153
|
}
|
|
106
|
-
|
|
107
|
-
|
|
154
|
+
const normalized = typeof timestamp === 'string' ? timestamp.trim() : String(timestamp);
|
|
155
|
+
if (!/^\d+$/.test(normalized)) {
|
|
156
|
+
return null;
|
|
108
157
|
}
|
|
109
|
-
|
|
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,
|
|
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) {
|
package/dist/webhooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAAA
|
|
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.
|
|
4
|
-
"description": "Official TypeScript/JavaScript SDK for the PingRoom agent API —
|
|
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",
|