@pingroom/sdk 0.1.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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/client.d.ts +106 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +301 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/errors.d.ts +40 -0
  8. package/dist/errors.d.ts.map +1 -0
  9. package/dist/errors.js +59 -0
  10. package/dist/errors.js.map +1 -0
  11. package/dist/http.d.ts +38 -0
  12. package/dist/http.d.ts.map +1 -0
  13. package/dist/http.js +118 -0
  14. package/dist/http.js.map +1 -0
  15. package/dist/index.d.ts +21 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +17 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/internal/async.d.ts +5 -0
  20. package/dist/internal/async.d.ts.map +1 -0
  21. package/dist/internal/async.js +47 -0
  22. package/dist/internal/async.js.map +1 -0
  23. package/dist/internal/guards.d.ts +7 -0
  24. package/dist/internal/guards.d.ts.map +1 -0
  25. package/dist/internal/guards.js +41 -0
  26. package/dist/internal/guards.js.map +1 -0
  27. package/dist/internal/url.d.ts +8 -0
  28. package/dist/internal/url.d.ts.map +1 -0
  29. package/dist/internal/url.js +28 -0
  30. package/dist/internal/url.js.map +1 -0
  31. package/dist/mcp.d.ts +40 -0
  32. package/dist/mcp.d.ts.map +1 -0
  33. package/dist/mcp.js +46 -0
  34. package/dist/mcp.js.map +1 -0
  35. package/dist/types.d.ts +262 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +9 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/version.d.ts +3 -0
  40. package/dist/version.d.ts.map +1 -0
  41. package/dist/version.js +3 -0
  42. package/dist/version.js.map +1 -0
  43. package/dist/webhooks.d.ts +56 -0
  44. package/dist/webhooks.d.ts.map +1 -0
  45. package/dist/webhooks.js +133 -0
  46. package/dist/webhooks.js.map +1 -0
  47. package/package.json +53 -0
@@ -0,0 +1,262 @@
1
+ /**
2
+ * Public types for the PingRoom SDK.
3
+ *
4
+ * Request payload field names mirror the HTTP API verbatim (snake_case) so the
5
+ * SDK is a faithful, reviewable wrapper — what you pass is what the API sees.
6
+ * SDK-only knobs (timeouts, signals, callbacks) use camelCase.
7
+ */
8
+ /** A plain JSON object — the shape the API accepts for structured `data`. */
9
+ export type JsonObject = Record<string, unknown>;
10
+ /** Minimal fetch signature the SDK depends on (Node >= 18, browsers, workers, Deno, Bun). */
11
+ export type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
12
+ /** The scopes an agent credential can hold. */
13
+ export type AgentScope = 'pingroom:rooms:read' | 'pingroom:rooms:write' | 'pingroom:rooms:publish' | 'pingroom:rooms:join' | 'pingroom:actions:write' | 'pingroom:actions:trigger' | 'pingroom:broadcast:send' | 'pingroom:notifications:read' | 'pingroom:agents:ping' | 'pingroom:approvals:request' | 'pingroom:profile:write';
14
+ /** A known scope, or any forward-compatible string (keeps autocomplete on the knowns). */
15
+ export type ScopeInput = AgentScope | (string & {});
16
+ export interface PingRoomOptions {
17
+ /** Agent credential (Bearer JWT). Optional — public reads (directory) work without it. */
18
+ token?: string | null;
19
+ /** API base URL. Defaults to env PINGROOM_API_URL/PINGROOM_BASE_URL, else https://api.pingroom.io. */
20
+ baseUrl?: string;
21
+ /** Default per-request timeout in ms (long-poll calls extend this automatically). Default 30000. */
22
+ timeoutMs?: number;
23
+ /** Custom fetch implementation (for tests or non-global-fetch runtimes). */
24
+ fetch?: FetchLike;
25
+ /** Override the User-Agent header. */
26
+ userAgent?: string;
27
+ /** Allow plain-http base URLs to non-loopback hosts. Off by default — credentials require https. */
28
+ allowInsecure?: boolean;
29
+ }
30
+ export type AgentRegisterType = 'identity_assertion' | 'anonymous';
31
+ export type AgentAssertionType = 'urn:ietf:params:oauth:token-type:id-jag' | 'verified_email';
32
+ export interface RegisterParams {
33
+ type: AgentRegisterType;
34
+ assertion_type?: AgentAssertionType;
35
+ assertion?: string;
36
+ scopes?: ScopeInput[];
37
+ agent_label?: string;
38
+ }
39
+ export interface Credential {
40
+ credential: string;
41
+ credential_type: 'pre_claim' | 'active';
42
+ expires_in: number;
43
+ scopes: string[];
44
+ handle?: string;
45
+ claim?: {
46
+ start_uri: string;
47
+ complete_uri: string;
48
+ };
49
+ }
50
+ export interface ClaimStartParams {
51
+ email: string;
52
+ }
53
+ export interface ClaimCompleteParams {
54
+ email: string;
55
+ otp: string;
56
+ scopes?: ScopeInput[];
57
+ }
58
+ export interface QuickActionInput {
59
+ action_number: number;
60
+ label: string;
61
+ icon: string;
62
+ sound?: string | null;
63
+ haptic_style?: string | null;
64
+ }
65
+ export interface CreateRoomInput {
66
+ name: string;
67
+ icon: string;
68
+ color: string;
69
+ description?: string;
70
+ everyone_can_trigger?: boolean;
71
+ is_password_protected?: boolean;
72
+ password?: string;
73
+ actions?: QuickActionInput[];
74
+ }
75
+ export interface CreatePublicRoomInput extends CreateRoomInput {
76
+ handle: string;
77
+ category?: string;
78
+ show_owner?: boolean;
79
+ }
80
+ export interface JoinRoomInput {
81
+ invite_code: string;
82
+ password?: string;
83
+ }
84
+ export interface UpdateQuickActionInput {
85
+ label: string;
86
+ icon: string;
87
+ sound?: string | null;
88
+ haptic_style?: string | null;
89
+ }
90
+ export interface QuickAction {
91
+ id?: string;
92
+ action_number: number;
93
+ label: string;
94
+ icon: string;
95
+ sound?: string | null;
96
+ haptic_style?: string | null;
97
+ [key: string]: unknown;
98
+ }
99
+ export interface Room {
100
+ id: string;
101
+ name: string;
102
+ icon: string | null;
103
+ color: string | null;
104
+ invite_code: string;
105
+ is_public?: boolean;
106
+ handle?: string | null;
107
+ quick_actions?: QuickAction[];
108
+ [key: string]: unknown;
109
+ }
110
+ /** The body of a ping — used for broadcasts and agent-to-agent direct pings. */
111
+ export interface PingInput {
112
+ message: string;
113
+ action_number?: number;
114
+ action_icon?: string;
115
+ data?: JsonObject;
116
+ correlation_id?: string;
117
+ reply_to?: string;
118
+ }
119
+ export interface TriggerInput {
120
+ trigger_source?: string;
121
+ }
122
+ export interface PingResult {
123
+ id: string;
124
+ message: string;
125
+ action_number: number | null;
126
+ action_icon: string | null;
127
+ trigger_source: string | null;
128
+ data?: JsonObject | null;
129
+ correlation_id?: string | null;
130
+ reply_to?: string | null;
131
+ created_at: string;
132
+ recipient_count?: number;
133
+ muted_count?: number;
134
+ [key: string]: unknown;
135
+ }
136
+ export interface DirectPingResult {
137
+ id: string;
138
+ target_handle: string;
139
+ room_code: string;
140
+ message: string;
141
+ correlation_id: string | null;
142
+ reply_to: string | null;
143
+ created_at: string;
144
+ [key: string]: unknown;
145
+ }
146
+ export interface AgentNotification {
147
+ id: string;
148
+ message: string;
149
+ action_number: number | null;
150
+ action_icon: string | null;
151
+ trigger_source: string | null;
152
+ data?: JsonObject | null;
153
+ correlation_id?: string | null;
154
+ reply_to?: string | null;
155
+ created_at: string;
156
+ room?: {
157
+ code: string;
158
+ name: string;
159
+ icon: string | null;
160
+ color: string | null;
161
+ };
162
+ sender?: {
163
+ id: string;
164
+ name: string | null;
165
+ };
166
+ }
167
+ export interface ListNotificationsInput {
168
+ type?: string;
169
+ room_id?: string;
170
+ date?: string;
171
+ notifications_per_page?: number;
172
+ }
173
+ export interface WaitInput {
174
+ /** Cursor (a notification id). Omit to start from the current head. */
175
+ after?: string;
176
+ /** Seconds to hold the connection (0–30, default 20). */
177
+ timeout?: number;
178
+ /** Max notifications to return (1–100, default 50). */
179
+ limit?: number;
180
+ signal?: AbortSignal;
181
+ }
182
+ export interface WaitResult {
183
+ notifications: AgentNotification[];
184
+ cursor: string;
185
+ }
186
+ export interface ListenInput {
187
+ after?: string;
188
+ timeout?: number;
189
+ limit?: number;
190
+ signal?: AbortSignal;
191
+ /** Called on a transient error instead of throwing; the loop backs off and retries. */
192
+ onError?: (err: unknown) => void;
193
+ /** Backoff after a handled error, in ms (default 1000). */
194
+ backoffMs?: number;
195
+ }
196
+ export interface ApprovalInput {
197
+ question: string;
198
+ title?: string;
199
+ options?: string[];
200
+ correlation_id?: string;
201
+ data?: JsonObject;
202
+ ttl?: number;
203
+ }
204
+ export interface Approval {
205
+ id: string;
206
+ status: 'pending' | 'approved' | 'denied' | 'expired' | (string & {});
207
+ question: string;
208
+ title: string | null;
209
+ options: string[];
210
+ decision: string | null;
211
+ decided_at: string | null;
212
+ expires_at: string | null;
213
+ correlation_id: string | null;
214
+ data: JsonObject | null;
215
+ room_code: string;
216
+ [key: string]: unknown;
217
+ }
218
+ export interface WaitApprovalInput {
219
+ /** Seconds the server holds the connection (0–30, default 20). */
220
+ timeout?: number;
221
+ signal?: AbortSignal;
222
+ }
223
+ export interface RotateHandleResult {
224
+ handle: string;
225
+ [key: string]: unknown;
226
+ }
227
+ export type PingPolicy = 'open' | 'members' | 'closed' | (string & {});
228
+ export type ActivityBucket = 'active_now' | 'today' | 'this_week' | 'quiet' | (string & {});
229
+ export interface DirectoryEntry {
230
+ handle: string;
231
+ display_name: string;
232
+ tagline: string;
233
+ tags: string[];
234
+ icon: string | null;
235
+ color: string | null;
236
+ ping_policy: PingPolicy;
237
+ is_featured: boolean;
238
+ operated_by: string | null;
239
+ last_active: ActivityBucket;
240
+ }
241
+ export interface DirectoryProfile extends DirectoryEntry {
242
+ description: string | null;
243
+ listed_at: string | null;
244
+ card_url: string | null;
245
+ }
246
+ export interface DirectoryListInput {
247
+ search?: string;
248
+ tag?: string;
249
+ per_page?: number;
250
+ page?: number;
251
+ }
252
+ export interface Paginated<T> {
253
+ current_page: number;
254
+ data: T[];
255
+ per_page: number;
256
+ total: number;
257
+ last_page: number;
258
+ next_page_url: string | null;
259
+ prev_page_url: string | null;
260
+ [key: string]: unknown;
261
+ }
262
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Public types for the PingRoom SDK.
3
+ *
4
+ * Request payload field names mirror the HTTP API verbatim (snake_case) so the
5
+ * SDK is a faithful, reviewable wrapper — what you pass is what the API sees.
6
+ * SDK-only knobs (timeouts, signals, callbacks) use camelCase.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,3 @@
1
+ /** SDK version, surfaced in the User-Agent and the MCP clientInfo. Keep in sync with package.json. */
2
+ export declare const VERSION = "0.1.0";
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** SDK version, surfaced in the User-Agent and the MCP clientInfo. Keep in sync with package.json. */
2
+ export const VERSION = '0.1.0';
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Webhook helpers — usable standalone, no client/token required.
3
+ *
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.
8
+ *
9
+ * - sendIncomingWebhook: fire a room's INCOMING webhook (the URL carries its
10
+ * own secret, so no agent token is needed) — the one-line CI/deploy ping.
11
+ */
12
+ import type { FetchLike, JsonObject } from './types.js';
13
+ export declare const WEBHOOK_SIGNATURE_HEADER = "X-PingRoom-Signature";
14
+ export declare const WEBHOOK_TIMESTAMP_HEADER = "X-PingRoom-Timestamp";
15
+ export declare const WEBHOOK_DELIVERY_HEADER = "X-PingRoom-Delivery";
16
+ export declare const WEBHOOK_EVENT_HEADER = "X-PingRoom-Event";
17
+ export interface VerifyWebhookSignatureOptions {
18
+ /** The raw request body — the exact bytes received, NOT a re-stringified object. */
19
+ payload: string | ArrayBuffer | Uint8Array;
20
+ /** The X-PingRoom-Signature header value (with or without the `sha256=` prefix). */
21
+ signature: string | null | undefined;
22
+ /** The webhook's signing_secret. */
23
+ secret: string;
24
+ }
25
+ /**
26
+ * Constant-time verification of an outgoing-webhook signature. Returns a
27
+ * boolean and never throws on mismatch.
28
+ */
29
+ export declare function verifyWebhookSignature(opts: VerifyWebhookSignatureOptions): Promise<boolean>;
30
+ export interface IncomingWebhookPayload {
31
+ message?: string;
32
+ title?: string;
33
+ /** Quick-action slot to attribute the ping to (1–4). */
34
+ action?: number;
35
+ data?: JsonObject;
36
+ correlation_id?: string;
37
+ reply_to?: string;
38
+ }
39
+ export interface SendIncomingWebhookOptions {
40
+ /** Sent as the Idempotency-Key header; identical keys within ~1h replay the first result. */
41
+ idempotencyKey?: string;
42
+ timeoutMs?: number;
43
+ fetch?: FetchLike;
44
+ signal?: AbortSignal;
45
+ /** Allow plain-http webhook URLs to non-loopback hosts (off by default). */
46
+ allowInsecure?: boolean;
47
+ }
48
+ export interface IncomingWebhookResult {
49
+ success: boolean;
50
+ notification_id?: string;
51
+ message?: string;
52
+ [key: string]: unknown;
53
+ }
54
+ /** POST to a room's incoming-webhook URL (which embeds the secret in its path). */
55
+ export declare function sendIncomingWebhook(webhookUrl: string, payload: IncomingWebhookPayload, options?: SendIncomingWebhookOptions): Promise<IncomingWebhookResult>;
56
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxD,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAC/D,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAC/D,eAAO,MAAM,uBAAuB,wBAAwB,CAAC;AAC7D,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC5C,oFAAoF;IACpF,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,CAAC;IAC3C,oFAAoF;IACpF,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,CAUlG;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,6FAA6F;IAC7F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,mFAAmF;AACnF,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,qBAAqB,CAAC,CAwDhC"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Webhook helpers — usable standalone, no client/token required.
3
+ *
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.
8
+ *
9
+ * - sendIncomingWebhook: fire a room's INCOMING webhook (the URL carries its
10
+ * own secret, so no agent token is needed) — the one-line CI/deploy ping.
11
+ */
12
+ import { PingRoomError } from './errors.js';
13
+ import { combineSignals } from './internal/async.js';
14
+ import { assertActionNumber, assertStructuredData } from './internal/guards.js';
15
+ import { assertSecureUrl } from './internal/url.js';
16
+ import { VERSION } from './version.js';
17
+ export const WEBHOOK_SIGNATURE_HEADER = 'X-PingRoom-Signature';
18
+ export const WEBHOOK_TIMESTAMP_HEADER = 'X-PingRoom-Timestamp';
19
+ export const WEBHOOK_DELIVERY_HEADER = 'X-PingRoom-Delivery';
20
+ export const WEBHOOK_EVENT_HEADER = 'X-PingRoom-Event';
21
+ /**
22
+ * Constant-time verification of an outgoing-webhook signature. Returns a
23
+ * boolean and never throws on mismatch.
24
+ */
25
+ export async function verifyWebhookSignature(opts) {
26
+ if (!opts.signature || !opts.secret) {
27
+ return false;
28
+ }
29
+ const provided = normalizeSignature(opts.signature).toLowerCase();
30
+ if (!/^[0-9a-f]{64}$/.test(provided)) {
31
+ return false;
32
+ }
33
+ const expected = await hmacSha256Hex(opts.secret, toMessageString(opts.payload));
34
+ return timingSafeEqualHex(provided, expected);
35
+ }
36
+ /** POST to a room's incoming-webhook URL (which embeds the secret in its path). */
37
+ export async function sendIncomingWebhook(webhookUrl, payload, options = {}) {
38
+ assertSecureUrl(webhookUrl, options.allowInsecure ?? false);
39
+ assertActionNumber(payload.action);
40
+ assertStructuredData(payload.data);
41
+ 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;
54
+ const headers = {
55
+ 'Content-Type': 'application/json',
56
+ Accept: 'application/json',
57
+ 'User-Agent': `pingroom-sdk/${VERSION}`,
58
+ };
59
+ if (options.idempotencyKey) {
60
+ headers['Idempotency-Key'] = options.idempotencyKey;
61
+ }
62
+ const fetchImpl = options.fetch ?? globalThis.fetch;
63
+ if (!fetchImpl) {
64
+ throw new PingRoomError('No fetch implementation available.', { code: 'no_fetch' });
65
+ }
66
+ const controller = new AbortController();
67
+ const timer = setTimeout(() => controller.abort(), options.timeoutMs ?? 30_000);
68
+ const signal = combineSignals(controller.signal, options.signal);
69
+ let res;
70
+ try {
71
+ res = await fetchImpl(webhookUrl, { method: 'POST', headers, body: JSON.stringify(body), signal });
72
+ }
73
+ catch (err) {
74
+ throw new PingRoomError(`Webhook request failed: ${err instanceof Error ? err.message : String(err)}`, {
75
+ code: 'network_error',
76
+ });
77
+ }
78
+ finally {
79
+ clearTimeout(timer);
80
+ }
81
+ const text = await res.text();
82
+ let json = null;
83
+ if (text) {
84
+ try {
85
+ json = JSON.parse(text);
86
+ }
87
+ catch {
88
+ json = text;
89
+ }
90
+ }
91
+ const result = json && typeof json === 'object' ? json : { success: res.ok };
92
+ if (!res.ok || result.success === false) {
93
+ throw PingRoomError.fromResponse(res.status, json, res.headers);
94
+ }
95
+ return result;
96
+ }
97
+ // --- internals ------------------------------------------------------------
98
+ function normalizeSignature(sig) {
99
+ const s = sig.trim();
100
+ return s.startsWith('sha256=') ? s.slice('sha256='.length) : s;
101
+ }
102
+ function toMessageString(payload) {
103
+ if (typeof payload === 'string') {
104
+ return payload;
105
+ }
106
+ if (payload instanceof Uint8Array) {
107
+ return new TextDecoder().decode(payload);
108
+ }
109
+ return new TextDecoder().decode(new Uint8Array(payload));
110
+ }
111
+ async function hmacSha256Hex(secret, message) {
112
+ const enc = new TextEncoder();
113
+ 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));
115
+ const bytes = new Uint8Array(signature);
116
+ let hex = '';
117
+ for (const b of bytes) {
118
+ hex += b.toString(16).padStart(2, '0');
119
+ }
120
+ return hex;
121
+ }
122
+ /** Constant-time compare of two equal-length lowercase-hex strings. */
123
+ function timingSafeEqualHex(a, b) {
124
+ if (a.length !== b.length) {
125
+ return false;
126
+ }
127
+ let diff = 0;
128
+ for (let i = 0; i < a.length; i++) {
129
+ diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
130
+ }
131
+ return diff === 0;
132
+ }
133
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "@pingroom/sdk",
3
+ "version": "0.1.0",
4
+ "description": "Official TypeScript/JavaScript SDK for the PingRoom agent API — auth, rooms, pings, agent-to-agent messaging, human-in-the-loop approvals, real-time listen, MCP, and webhook signature verification.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md"
19
+ ],
20
+ "engines": {
21
+ "node": ">=20"
22
+ },
23
+ "sideEffects": false,
24
+ "scripts": {
25
+ "clean": "rm -rf dist",
26
+ "build": "tsc -p tsconfig.json",
27
+ "test": "npm run build && node --test \"test/*.test.mjs\"",
28
+ "prepublishOnly": "npm run clean && npm run build && npm test"
29
+ },
30
+ "keywords": [
31
+ "pingroom",
32
+ "notifications",
33
+ "push",
34
+ "agent",
35
+ "mcp",
36
+ "webhook",
37
+ "ci",
38
+ "sdk",
39
+ "typescript"
40
+ ],
41
+ "license": "MIT",
42
+ "homepage": "https://pingroom.io",
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/pingroom/sdk.git"
46
+ },
47
+ "bugs": {
48
+ "url": "https://github.com/pingroom/sdk/issues"
49
+ },
50
+ "devDependencies": {
51
+ "typescript": "^5.6.0"
52
+ }
53
+ }