@robono/server 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.
@@ -0,0 +1,371 @@
1
+ export type MessageKind = "text" | "voice" | "image" | "video" | "document";
2
+ export type BridgeConnectionStatus = "pending_target_approval" | "accepted" | "rejected" | "not_found" | "blocked" | "disconnected" | "expired";
3
+ export type JsonObject = Record<string, unknown>;
4
+ export interface RobonoRequestOptions {
5
+ idempotencyKey?: string;
6
+ requestId?: string;
7
+ signal?: AbortSignal;
8
+ timeoutMs?: number;
9
+ retries?: number;
10
+ }
11
+ export interface RobonoServerOptions {
12
+ apiKey: string;
13
+ baseUrl?: string;
14
+ timeoutMs?: number;
15
+ retries?: number;
16
+ fetch?: typeof globalThis.fetch;
17
+ userAgent?: string;
18
+ apiVersion?: string;
19
+ }
20
+ export interface IdentifierDescription {
21
+ label: string;
22
+ description: string;
23
+ example: string;
24
+ format: string;
25
+ }
26
+ export interface DirectoryEntry {
27
+ type: "connected_app" | "robono_phone";
28
+ id: string;
29
+ slug: string;
30
+ display_name: string;
31
+ description: string;
32
+ icon_url: string;
33
+ accepts_inbound_bridge_requests: boolean;
34
+ accepted_identifier: IdentifierDescription;
35
+ default_capabilities: ConnectionCapabilities;
36
+ }
37
+ export interface DirectoryResponse {
38
+ ok: true;
39
+ request_id: string;
40
+ directory: DirectoryEntry[];
41
+ }
42
+ export interface Guardian {
43
+ external_guardian_id: string;
44
+ display_name?: string | null;
45
+ relationship_to_child?: string | null;
46
+ avatar_url?: string | null;
47
+ }
48
+ export interface MediaOutputPreference {
49
+ preferred_mime_type?: string;
50
+ preferred_codec?: string;
51
+ transcoding?: "off" | "preferred" | "required";
52
+ }
53
+ export interface MediaCapability {
54
+ max_duration_ms?: number;
55
+ max_file_bytes?: number;
56
+ allowed_input_mime_types?: string[];
57
+ max_width_px?: number;
58
+ max_height_px?: number;
59
+ max_items_per_message?: number;
60
+ strip_metadata?: boolean;
61
+ output?: MediaOutputPreference;
62
+ }
63
+ export interface HistoryCapability {
64
+ max_items: number | null;
65
+ message_expires_after_seconds: number | null;
66
+ }
67
+ export interface DirectionCapabilities {
68
+ allowed_message_kinds: MessageKind[];
69
+ text?: {
70
+ max_characters?: number;
71
+ };
72
+ voice?: MediaCapability;
73
+ photo?: MediaCapability;
74
+ video?: MediaCapability;
75
+ document?: MediaCapability;
76
+ limitations?: unknown[];
77
+ }
78
+ export interface ConnectionCapabilities extends JsonObject {
79
+ protocol_version?: string;
80
+ allowed_outbound_message_kinds?: MessageKind[];
81
+ allowed_inbound_message_kinds?: MessageKind[];
82
+ history?: HistoryCapability;
83
+ voice?: MediaCapability;
84
+ photo?: MediaCapability;
85
+ video?: MediaCapability;
86
+ document?: MediaCapability;
87
+ receive_voice_waveforms?: boolean;
88
+ receive_delivery_events?: boolean;
89
+ receive_message_heard_events?: boolean;
90
+ emoji_reactions?: boolean | {
91
+ allowed: boolean;
92
+ };
93
+ from_source_to_target?: DirectionCapabilities;
94
+ from_target_to_source?: DirectionCapabilities;
95
+ source?: ConnectionCapabilities;
96
+ target?: ConnectionCapabilities;
97
+ }
98
+ export interface AppIdentity {
99
+ id: string;
100
+ slug?: string;
101
+ display_name?: string;
102
+ }
103
+ export interface BridgeConnection {
104
+ bridge_connection_id: string;
105
+ status: BridgeConnectionStatus;
106
+ source: {
107
+ app: DirectoryEntry | AppIdentity;
108
+ external_user_id: string;
109
+ display_name: string;
110
+ guardians?: Guardian[];
111
+ };
112
+ target: {
113
+ app: DirectoryEntry | AppIdentity;
114
+ identifier: string;
115
+ external_user_id: string | null;
116
+ display_name: string | null;
117
+ contact_label?: string | null;
118
+ guardians?: Guardian[];
119
+ };
120
+ guardian_messaging_enabled: boolean;
121
+ capabilities: ConnectionCapabilities;
122
+ expires_at: string | null;
123
+ accepted_at: string | null;
124
+ responded_at: string | null;
125
+ created_at: string | null;
126
+ }
127
+ export interface BridgeConnectionResponse extends BridgeConnection {
128
+ ok: true;
129
+ request_id: string;
130
+ push_status?: "accepted" | "retry_scheduled";
131
+ }
132
+ export interface BridgeConnectionListResponse {
133
+ ok: true;
134
+ request_id: string;
135
+ connections: BridgeConnection[];
136
+ has_more: boolean;
137
+ next_before: string | null;
138
+ }
139
+ export interface RequestBridgeConnectionInput {
140
+ target_app_id?: string;
141
+ target_app_slug?: string;
142
+ source_external_user_id: string;
143
+ source_display_name: string;
144
+ target_identifier: string;
145
+ target_contact_label?: string;
146
+ capabilities?: ConnectionCapabilities;
147
+ guardian_messaging_enabled?: boolean;
148
+ source_guardians?: Guardian[];
149
+ monitoring_disclosure?: string;
150
+ external_approval?: JsonObject;
151
+ }
152
+ export interface RespondBridgeConnectionInput {
153
+ bridge_connection_id: string;
154
+ status: "accepted" | "rejected" | "not_found";
155
+ target_external_user_id?: string;
156
+ target_display_name?: string;
157
+ target_guardians?: Guardian[];
158
+ capabilities?: ConnectionCapabilities;
159
+ response_details?: JsonObject;
160
+ }
161
+ export interface UpdateBridgeConnectionInput {
162
+ bridge_connection_id: string;
163
+ external_user_id: string;
164
+ display_name?: string;
165
+ capabilities?: ConnectionCapabilities;
166
+ guardians?: Guardian[];
167
+ }
168
+ export interface ExternalProfileInput {
169
+ display_name?: string;
170
+ avatar?: {
171
+ source_url: string;
172
+ mime_type?: string;
173
+ version?: string;
174
+ updated_at?: string;
175
+ };
176
+ }
177
+ export interface CreateRobonoConnectionInput {
178
+ target_phone_e164: string;
179
+ external_user_id: string;
180
+ external_display_name: string;
181
+ external_profile?: ExternalProfileInput;
182
+ target_contact_label?: string;
183
+ monitoring_disclosure?: string;
184
+ external_approval?: JsonObject;
185
+ capabilities?: ConnectionCapabilities;
186
+ }
187
+ export interface RobonoUserSummary {
188
+ id: string;
189
+ display_name: string | null;
190
+ phone_masked: string | null;
191
+ avatar_url?: string | null;
192
+ }
193
+ export interface RobonoConnectionResponse {
194
+ ok: true;
195
+ request_id: string;
196
+ connection_id: string;
197
+ conversation_id: string | null;
198
+ status: "active" | "pending_invite" | "blocked" | "disconnected" | "expired";
199
+ external_user_id: string;
200
+ external_display_name: string | null;
201
+ target_contact_label: string | null;
202
+ capabilities: ConnectionCapabilities;
203
+ robono_user: RobonoUserSummary | null;
204
+ phone_masked: string | null;
205
+ }
206
+ export interface MediaInput extends JsonObject {
207
+ source_url: string;
208
+ mime_type: string;
209
+ byte_size?: number;
210
+ duration_ms?: number;
211
+ file_name?: string;
212
+ waveform?: number[];
213
+ }
214
+ export type MessageContent = {
215
+ message_kind: "text";
216
+ text_body: string;
217
+ } | {
218
+ message_kind: "voice" | "image" | "video" | "document";
219
+ media: MediaInput;
220
+ text_body?: string;
221
+ };
222
+ export type SendBridgeMessageInput = MessageContent & {
223
+ bridge_connection_id: string;
224
+ external_user_id: string;
225
+ external_message_id: string;
226
+ dry_run?: boolean;
227
+ };
228
+ export interface SendBridgeMessageResponse {
229
+ ok: true;
230
+ request_id: string;
231
+ bridge_message_id?: string;
232
+ status: "validated" | "stored" | "accepted" | "delivered" | "read" | "heard" | "failed" | "replaced";
233
+ duplicate?: boolean;
234
+ dry_run?: boolean;
235
+ accepted_at?: string | null;
236
+ accepted_via?: "push" | "polling" | null;
237
+ push_status?: "accepted" | "retry_scheduled";
238
+ recipient?: {
239
+ child_app_id: string;
240
+ external_user_id: string;
241
+ };
242
+ connection?: BridgeConnection;
243
+ }
244
+ export interface BridgeMessageRecord extends JsonObject {
245
+ bridge_message_id: string;
246
+ bridge_connection_id: string;
247
+ direction: "inbound" | "outbound";
248
+ sender_external_user_id: string;
249
+ external_message_id: string;
250
+ message_kind: MessageKind;
251
+ text_body: string | null;
252
+ media: MediaInput | JsonObject;
253
+ status: "stored" | "accepted" | "delivered" | "read" | "heard" | "failed" | "replaced";
254
+ accepted_at: string | null;
255
+ accepted_via: "push" | "polling" | null;
256
+ delivered_at: string | null;
257
+ read_at: string | null;
258
+ heard_at: string | null;
259
+ failed_at: string | null;
260
+ failure_code: string | null;
261
+ created_at: string;
262
+ }
263
+ export interface BridgeMessageListResponse {
264
+ ok: true;
265
+ request_id: string;
266
+ messages: BridgeMessageRecord[];
267
+ has_more: boolean;
268
+ next_before: string | null;
269
+ }
270
+ export interface BridgeMessageEventResponse {
271
+ ok: true;
272
+ request_id: string;
273
+ bridge_message_id: string;
274
+ status: BridgeMessageRecord["status"];
275
+ occurred_at: string;
276
+ }
277
+ export type SendRobonoMessageInput = MessageContent & {
278
+ connection_id: string;
279
+ external_user_id: string;
280
+ external_message_id: string;
281
+ send_invite_sms_if_pending?: boolean;
282
+ external_profile?: ExternalProfileInput;
283
+ dry_run?: boolean;
284
+ };
285
+ export interface SendRobonoMessageResponse {
286
+ ok: true;
287
+ request_id: string;
288
+ robono_message_id?: string;
289
+ external_user_id?: string;
290
+ status: string;
291
+ invite_sms_sent?: boolean;
292
+ dry_run?: boolean;
293
+ connection_state?: JsonObject;
294
+ }
295
+ export interface SendGuardianMessageInput {
296
+ bridge_connection_id: string;
297
+ external_guardian_id: string;
298
+ external_message_id: string;
299
+ text_body: string;
300
+ message_kind?: "text";
301
+ dry_run?: boolean;
302
+ }
303
+ export interface SendGuardianMessageResponse {
304
+ ok: true;
305
+ request_id: string;
306
+ guardian_message_id?: string;
307
+ status: string;
308
+ duplicate?: boolean;
309
+ dry_run?: boolean;
310
+ }
311
+ export interface GuardianMessageRecord extends JsonObject {
312
+ guardian_message_id: string;
313
+ bridge_connection_id: string;
314
+ direction: "inbound" | "outbound";
315
+ sender_external_guardian_id: string;
316
+ external_message_id: string;
317
+ message_kind: "text";
318
+ text_body: string;
319
+ status: Exclude<BridgeMessageRecord["status"], "heard">;
320
+ accepted_at: string | null;
321
+ accepted_via: "push" | "polling" | null;
322
+ delivered_at: string | null;
323
+ read_at: string | null;
324
+ failed_at: string | null;
325
+ failure_code: string | null;
326
+ created_at: string;
327
+ }
328
+ export interface GuardianMessageListResponse {
329
+ ok: true;
330
+ request_id: string;
331
+ messages: GuardianMessageRecord[];
332
+ has_more: boolean;
333
+ next_before: string | null;
334
+ }
335
+ export interface Language {
336
+ code: string;
337
+ name: string;
338
+ }
339
+ export interface LanguageResponse {
340
+ ok: true;
341
+ request_id: string;
342
+ languages: Language[];
343
+ }
344
+ export type TransformOutput = "transcript" | "translated_text" | "voice" | "translated_voice";
345
+ export interface TransformResponse extends JsonObject {
346
+ ok: true;
347
+ request_id: string;
348
+ }
349
+ export type RobonoWebhookEventName = "connection.status_changed" | "connection.profile_updated" | "message.created" | "message.delivered" | "message.heard" | "message.reaction_updated" | "bridge.connection_requested" | "bridge.connection_status_changed" | "bridge.connection_updated" | "bridge.message_created" | "bridge.message_status_changed" | "bridge.guardian_message_created" | "bridge.guardian_message_status_changed";
350
+ export interface RobonoWebhookEvent extends JsonObject {
351
+ event: RobonoWebhookEventName;
352
+ event_id: string;
353
+ request_id: string;
354
+ created_at: string;
355
+ }
356
+ export interface VerifiedWebhook<T extends RobonoWebhookEvent = RobonoWebhookEvent> {
357
+ event: T;
358
+ eventId: string;
359
+ requestId: string;
360
+ timestamp: string;
361
+ duplicate: boolean;
362
+ }
363
+ export interface WebhookHeaders {
364
+ [name: string]: string | string[] | undefined;
365
+ }
366
+ export interface WebhookVerificationOptions {
367
+ toleranceSeconds?: number;
368
+ now?: Date;
369
+ hasProcessedEvent?: (eventId: string) => boolean | Promise<boolean>;
370
+ }
371
+ //# 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { RobonoWebhookEvent, VerifiedWebhook, WebhookHeaders, WebhookVerificationOptions } from "./types.js";
2
+ export declare function verifyRobonoWebhook<T extends RobonoWebhookEvent = RobonoWebhookEvent>(rawBody: string | Uint8Array, headers: Headers | WebhookHeaders, webhookSecret: string, options?: WebhookVerificationOptions): Promise<VerifiedWebhook<T>>;
3
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAEpB,wBAAsB,mBAAmB,CACvC,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,EAEjD,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,OAAO,EAAE,OAAO,GAAG,cAAc,EACjC,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA4E7B"}
@@ -0,0 +1,67 @@
1
+ import { createHmac, timingSafeEqual } from "node:crypto";
2
+ import { RobonoWebhookError } from "./errors.js";
3
+ export async function verifyRobonoWebhook(rawBody, headers, webhookSecret, options = {}) {
4
+ const timestamp = header(headers, "robono-webhook-timestamp");
5
+ const signatureHeader = header(headers, "robono-webhook-signature");
6
+ const headerEventId = header(headers, "robono-webhook-id");
7
+ const requestId = header(headers, "robono-request-id");
8
+ if (!timestamp || !signatureHeader) {
9
+ throw new RobonoWebhookError("The Robono webhook signature headers are missing.", "missing_webhook_signature");
10
+ }
11
+ const timestampMs = Date.parse(timestamp);
12
+ if (!Number.isFinite(timestampMs)) {
13
+ throw new RobonoWebhookError("The Robono webhook timestamp is invalid.", "invalid_webhook_timestamp");
14
+ }
15
+ const toleranceSeconds = options.toleranceSeconds ?? 300;
16
+ const nowMs = (options.now ?? new Date()).getTime();
17
+ if (Math.abs(nowMs - timestampMs) > toleranceSeconds * 1_000) {
18
+ throw new RobonoWebhookError("The Robono webhook is outside the accepted timestamp window.", "stale_webhook");
19
+ }
20
+ const body = typeof rawBody === "string"
21
+ ? rawBody
22
+ : new TextDecoder().decode(rawBody);
23
+ const received = signatureHeader.replace(/^v1=/i, "").trim().toLowerCase();
24
+ const expected = createHmac("sha256", webhookSecret).update(`${timestamp}.${body}`).digest("hex");
25
+ if (!safeEqual(received, expected)) {
26
+ throw new RobonoWebhookError("The Robono webhook signature does not match.", "webhook_signature_mismatch");
27
+ }
28
+ let event;
29
+ try {
30
+ event = JSON.parse(body);
31
+ }
32
+ catch (cause) {
33
+ throw new RobonoWebhookError("The Robono webhook body is not valid JSON.", "invalid_webhook_json", { cause });
34
+ }
35
+ if (!event || typeof event !== "object" || typeof event.event !== "string") {
36
+ throw new RobonoWebhookError("The Robono webhook event is missing.", "invalid_webhook_event");
37
+ }
38
+ const eventId = event.event_id || headerEventId;
39
+ if (!eventId) {
40
+ throw new RobonoWebhookError("The Robono webhook event ID is missing.", "missing_webhook_event_id");
41
+ }
42
+ const duplicate = options.hasProcessedEvent
43
+ ? await options.hasProcessedEvent(eventId)
44
+ : false;
45
+ return {
46
+ event,
47
+ eventId,
48
+ requestId: event.request_id || requestId || eventId,
49
+ timestamp,
50
+ duplicate,
51
+ };
52
+ }
53
+ function header(headers, name) {
54
+ if (headers instanceof Headers)
55
+ return headers.get(name) ?? "";
56
+ const match = Object.entries(headers).find(([key]) => key.toLowerCase() === name);
57
+ const value = match?.[1];
58
+ return Array.isArray(value) ? value[0] ?? "" : value ?? "";
59
+ }
60
+ function safeEqual(received, expected) {
61
+ if (!/^[a-f0-9]{64}$/.test(received))
62
+ return false;
63
+ const left = Buffer.from(received, "hex");
64
+ const right = Buffer.from(expected, "hex");
65
+ return left.length === right.length && timingSafeEqual(left, right);
66
+ }
67
+ //# 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,48 @@
1
+ {
2
+ "name": "@robono/server",
3
+ "version": "0.1.0",
4
+ "description": "Provider-neutral server SDK for the Robono Bridge API.",
5
+ "keywords": [
6
+ "robono",
7
+ "messaging",
8
+ "bridge",
9
+ "sdk",
10
+ "webhooks",
11
+ "typescript"
12
+ ],
13
+ "homepage": "https://robono.com/docs#sdks",
14
+ "author": "Robono",
15
+ "license": "SEE LICENSE IN LICENSE",
16
+ "type": "module",
17
+ "sideEffects": false,
18
+ "main": "./dist/index.js",
19
+ "types": "./dist/index.d.ts",
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "README.md",
29
+ "LICENSE"
30
+ ],
31
+ "scripts": {
32
+ "build": "tsc -p tsconfig.json",
33
+ "typecheck": "tsc -p tsconfig.json --noEmit",
34
+ "test": "npm run build && node --test test/*.test.mjs",
35
+ "test:sandbox": "npm run build && node test/sandbox.e2e.mjs",
36
+ "prepublishOnly": "npm test"
37
+ },
38
+ "engines": {
39
+ "node": ">=18"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "^20.19.0",
46
+ "typescript": "^6.0.3"
47
+ }
48
+ }