@robono/server 0.7.2 → 0.7.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAElB,eAAe,EACf,cAAc,EACd,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAsBpB,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,CAgG7B"}
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,kBAAkB,EAElB,eAAe,EACf,cAAc,EACd,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAsBpB,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,CAmG7B"}
package/dist/webhooks.js CHANGED
@@ -47,23 +47,26 @@ export async function verifyRobonoWebhook(rawBody, headers, webhookSecret, optio
47
47
  if (!safeEqual(received, expected)) {
48
48
  throw new RobonoWebhookError("The Robono webhook signature does not match.", "webhook_signature_mismatch");
49
49
  }
50
- let event;
50
+ let parsed;
51
51
  try {
52
- event = JSON.parse(body);
52
+ parsed = JSON.parse(body);
53
53
  }
54
54
  catch (cause) {
55
55
  throw new RobonoWebhookError("The Robono webhook body is not valid JSON.", "invalid_webhook_json", { cause });
56
56
  }
57
- if (!event || typeof event !== "object" || typeof event.event !== "string") {
57
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
58
58
  throw new RobonoWebhookError("The Robono webhook event is missing.", "invalid_webhook_event");
59
59
  }
60
- if (!webhookEventNames.has(event.event)) {
61
- throw new RobonoWebhookError(`The Robono webhook event "${event.event}" is not supported.`, "unsupported_webhook_event");
60
+ const eventName = parsed.event;
61
+ if (typeof eventName !== "string") {
62
+ throw new RobonoWebhookError("The Robono webhook event is missing.", "invalid_webhook_event");
62
63
  }
63
- const eventId = event.event_id || headerEventId;
64
- if (!eventId) {
65
- throw new RobonoWebhookError("The Robono webhook event ID is missing.", "missing_webhook_event_id");
64
+ if (!webhookEventNames.has(eventName)) {
65
+ throw new RobonoWebhookError(`The Robono webhook event "${eventName}" is not supported.`, "unsupported_webhook_event");
66
66
  }
67
+ assertWebhookEvent(parsed);
68
+ const event = parsed;
69
+ const eventId = event.event_id;
67
70
  if (event.event_id && headerEventId && event.event_id !== headerEventId) {
68
71
  throw new RobonoWebhookError("The Robono webhook event ID does not match its header.", "webhook_event_id_mismatch");
69
72
  }
@@ -80,6 +83,550 @@ export async function verifyRobonoWebhook(rawBody, headers, webhookSecret, optio
80
83
  duplicate,
81
84
  };
82
85
  }
86
+ function assertWebhookEvent(value) {
87
+ const event = record(value, "event");
88
+ const name = string(event, "event");
89
+ string(event, "event_id");
90
+ string(event, "request_id");
91
+ timestamp(event, "created_at");
92
+ switch (name) {
93
+ case "connection.status_changed":
94
+ case "connection.profile_updated":
95
+ string(event, "connection_id");
96
+ string(event, "status");
97
+ return;
98
+ case "message.created":
99
+ string(event, "connection_id");
100
+ string(event, "robono_message_id");
101
+ string(event, "external_user_id");
102
+ assertRobonoSender(record(event.sender, "sender"));
103
+ messageKind(event, "message_kind");
104
+ nullableString(event, "text_body");
105
+ if (event.media !== null) {
106
+ assertMedia(record(event.media, "media"), "media");
107
+ }
108
+ if (event.attachment_batch !== undefined) {
109
+ const batch = record(event.attachment_batch, "attachment_batch");
110
+ string(batch, "id");
111
+ integer(batch, "index", "attachment_batch.index", 0);
112
+ integer(batch, "count", "attachment_batch.count", 2, 10);
113
+ }
114
+ return;
115
+ case "message.delivered":
116
+ case "message.heard":
117
+ string(event, "connection_id");
118
+ string(event, "robono_message_id");
119
+ nullableString(event, "external_message_id");
120
+ return;
121
+ case "message.reaction_updated":
122
+ string(event, "connection_id");
123
+ string(event, "robono_message_id");
124
+ record(event.reaction, "reaction");
125
+ return;
126
+ case "bridge.connection_requested": {
127
+ string(event, "bridge_connection_id");
128
+ assertBridgeSource(record(event.source, "source"));
129
+ const target = record(event.target, "target");
130
+ assertAppIdentity(record(target.app, "target.app"), "target.app");
131
+ string(target, "identifier", "target.identifier");
132
+ nullableString(target, "contact_label", "target.contact_label");
133
+ record(target.accepted_identifier, "target.accepted_identifier");
134
+ assertCapabilities(record(event.capabilities, "capabilities"), "capabilities");
135
+ return;
136
+ }
137
+ case "bridge.connection_status_changed":
138
+ case "bridge.connection_updated":
139
+ string(event, "bridge_connection_id");
140
+ assertBridgeConnection(record(event.connection, "connection"));
141
+ return;
142
+ case "bridge.directory_changed":
143
+ string(event, "endpoint_id");
144
+ oneOf(event, "change", ["created", "updated", "disabled", "removed"]);
145
+ return;
146
+ case "bridge.message_created": {
147
+ string(event, "bridge_connection_id");
148
+ string(event, "bridge_message_id");
149
+ assertBridgeConnection(record(event.connection, "connection"));
150
+ assertChildParticipant(record(event.sender, "sender"), "sender");
151
+ assertChildParticipant(record(event.recipient, "recipient"), "recipient");
152
+ const message = record(event.message, "message");
153
+ string(message, "external_message_id", "message.external_message_id");
154
+ messageKind(message, "message_kind", "message.message_kind");
155
+ optionalString(message, "text_body", "message.text_body");
156
+ if (message.media !== undefined) {
157
+ assertMedia(record(message.media, "message.media"), "message.media");
158
+ }
159
+ optionalRecord(message, "speech", "message.speech");
160
+ timestamp(message, "created_at", "message.created_at");
161
+ return;
162
+ }
163
+ case "bridge.message_status_changed":
164
+ string(event, "bridge_connection_id");
165
+ string(event, "bridge_message_id");
166
+ oneOf(event, "status", [
167
+ "stored",
168
+ "accepted",
169
+ "delivered",
170
+ "read",
171
+ "heard",
172
+ "failed",
173
+ "replaced",
174
+ ]);
175
+ return;
176
+ case "bridge.guardian_message_created": {
177
+ string(event, "bridge_connection_id");
178
+ string(event, "guardian_message_id");
179
+ assertBridgeConnection(record(event.connection, "connection"));
180
+ record(event.sender_guardian, "sender_guardian");
181
+ arrayOfRecords(event.recipient_guardians, "recipient_guardians");
182
+ assertNamedChild(record(event.sender_child, "sender_child"), "sender_child");
183
+ assertNamedChild(record(event.recipient_child, "recipient_child"), "recipient_child");
184
+ const message = record(event.message, "message");
185
+ string(message, "external_message_id", "message.external_message_id");
186
+ oneOf(message, "message_kind", ["text"], "message.message_kind");
187
+ string(message, "text_body", "message.text_body");
188
+ timestamp(message, "created_at", "message.created_at");
189
+ return;
190
+ }
191
+ case "bridge.guardian_message_status_changed":
192
+ string(event, "bridge_connection_id");
193
+ string(event, "guardian_message_id");
194
+ string(event, "status");
195
+ return;
196
+ case "transform.completed": {
197
+ oneOf(event, "transform_kind", ["message", "speech"]);
198
+ oneOf(event, "status", ["completed"]);
199
+ optionalString(event, "connection_id");
200
+ optionalString(event, "message_id");
201
+ optionalNullableString(event, "external_request_id");
202
+ assertTransformArtifacts(record(event.artifacts, "artifacts"));
203
+ assertTransformBilling(record(event.billing, "billing"));
204
+ return;
205
+ }
206
+ case "transform.failed": {
207
+ oneOf(event, "transform_kind", ["message", "speech"]);
208
+ oneOf(event, "status", ["failed"]);
209
+ optionalString(event, "connection_id");
210
+ optionalString(event, "message_id");
211
+ optionalNullableString(event, "external_request_id");
212
+ const error = record(event.error, "error");
213
+ string(error, "code", "error.code");
214
+ string(error, "message", "error.message");
215
+ return;
216
+ }
217
+ case "diagnostic.push_requested":
218
+ string(event, "push_diagnostic_id");
219
+ string(event, "diagnostic_token");
220
+ string(event, "external_user_id");
221
+ return;
222
+ }
223
+ }
224
+ function assertRobonoSender(sender) {
225
+ oneOf(sender, "type", ["robono_user"], "sender.type");
226
+ string(sender, "robono_user_id", "sender.robono_user_id");
227
+ string(sender, "display_name", "sender.display_name");
228
+ for (const key of [
229
+ "avatar_url",
230
+ "avatar_version",
231
+ "avatar_updated_at",
232
+ "profile_updated_at",
233
+ "phone_masked",
234
+ ]) {
235
+ nullableString(sender, key, `sender.${key}`);
236
+ }
237
+ }
238
+ function assertBridgeSource(source) {
239
+ assertAppIdentity(record(source.app, "source.app"), "source.app");
240
+ string(source, "external_user_id", "source.external_user_id");
241
+ string(source, "display_name", "source.display_name");
242
+ if (source.profile !== undefined) {
243
+ assertExternalProfile(record(source.profile, "source.profile"), "source.profile");
244
+ }
245
+ if (source.guardians !== undefined) {
246
+ assertGuardians(source.guardians, "source.guardians");
247
+ }
248
+ }
249
+ function assertBridgeConnection(connection) {
250
+ string(connection, "bridge_connection_id", "connection.bridge_connection_id");
251
+ oneOf(connection, "status", [
252
+ "pending_target_approval",
253
+ "accepted",
254
+ "rejected",
255
+ "not_found",
256
+ "blocked",
257
+ "disconnected",
258
+ "expired",
259
+ ], "connection.status");
260
+ assertBridgeSource(record(connection.source, "connection.source"));
261
+ const target = record(connection.target, "connection.target");
262
+ assertAppIdentity(record(target.app, "connection.target.app"), "connection.target.app");
263
+ string(target, "identifier", "connection.target.identifier");
264
+ nullableString(target, "external_user_id", "connection.target.external_user_id");
265
+ nullableString(target, "display_name", "connection.target.display_name");
266
+ if (target.profile !== undefined) {
267
+ assertExternalProfile(record(target.profile, "connection.target.profile"), "connection.target.profile");
268
+ }
269
+ if (target.contact_label !== undefined) {
270
+ nullableString(target, "contact_label", "connection.target.contact_label");
271
+ }
272
+ if (target.guardians !== undefined) {
273
+ assertGuardians(target.guardians, "connection.target.guardians");
274
+ }
275
+ boolean(connection, "guardian_messaging_enabled", "connection.guardian_messaging_enabled");
276
+ assertCapabilities(record(connection.capabilities, "connection.capabilities"), "connection.capabilities");
277
+ for (const key of [
278
+ "expires_at",
279
+ "accepted_at",
280
+ "responded_at",
281
+ "created_at",
282
+ ]) {
283
+ nullableTimestamp(connection, key, `connection.${key}`);
284
+ }
285
+ }
286
+ function assertAppIdentity(app, path) {
287
+ string(app, "id", `${path}.id`);
288
+ optionalString(app, "slug", `${path}.slug`);
289
+ optionalString(app, "display_name", `${path}.display_name`);
290
+ }
291
+ function assertChildParticipant(participant, path) {
292
+ string(participant, "child_app_id", `${path}.child_app_id`);
293
+ string(participant, "external_user_id", `${path}.external_user_id`);
294
+ }
295
+ function assertNamedChild(participant, path) {
296
+ assertChildParticipant(participant, path);
297
+ string(participant, "display_name", `${path}.display_name`);
298
+ }
299
+ function assertExternalProfile(profile, path) {
300
+ optionalString(profile, "display_name", `${path}.display_name`);
301
+ if (profile.avatar === undefined)
302
+ return;
303
+ const avatar = record(profile.avatar, `${path}.avatar`);
304
+ uri(avatar, "source_url", `${path}.avatar.source_url`);
305
+ optionalString(avatar, "mime_type", `${path}.avatar.mime_type`);
306
+ optionalString(avatar, "version", `${path}.avatar.version`);
307
+ if (avatar.updated_at !== undefined) {
308
+ timestamp(avatar, "updated_at", `${path}.avatar.updated_at`);
309
+ }
310
+ }
311
+ function assertGuardians(value, path) {
312
+ const guardians = array(value, path);
313
+ guardians.forEach((item, index) => {
314
+ const guardianPath = `${path}[${index}]`;
315
+ const guardian = record(item, guardianPath);
316
+ string(guardian, "external_guardian_id", `${guardianPath}.external_guardian_id`);
317
+ optionalNullableString(guardian, "display_name", `${guardianPath}.display_name`);
318
+ optionalNullableString(guardian, "relationship_to_child", `${guardianPath}.relationship_to_child`);
319
+ if (guardian.avatar_url !== undefined && guardian.avatar_url !== null) {
320
+ uri(guardian, "avatar_url", `${guardianPath}.avatar_url`);
321
+ }
322
+ });
323
+ }
324
+ function assertCapabilities(capabilities, path, depth = 0) {
325
+ if (depth > 6) {
326
+ invalid(path, "a capability object no more than 6 levels deep");
327
+ }
328
+ optionalString(capabilities, "protocol_version", `${path}.protocol_version`);
329
+ optionalMessageKinds(capabilities, "allowed_outbound_message_kinds", `${path}.allowed_outbound_message_kinds`);
330
+ optionalMessageKinds(capabilities, "allowed_inbound_message_kinds", `${path}.allowed_inbound_message_kinds`);
331
+ if (capabilities.history !== undefined) {
332
+ const history = record(capabilities.history, `${path}.history`);
333
+ nullableInteger(history, "max_items", `${path}.history.max_items`, 0);
334
+ nullableInteger(history, "message_expires_after_seconds", `${path}.history.message_expires_after_seconds`, 1);
335
+ }
336
+ if (capabilities.text !== undefined) {
337
+ assertTextCapabilities(record(capabilities.text, `${path}.text`), `${path}.text`);
338
+ }
339
+ for (const key of ["voice", "photo", "video", "document"]) {
340
+ if (capabilities[key] !== undefined) {
341
+ assertMediaCapabilities(record(capabilities[key], `${path}.${key}`), `${path}.${key}`);
342
+ }
343
+ }
344
+ for (const key of [
345
+ "receive_voice_waveforms",
346
+ "receive_delivery_events",
347
+ "receive_message_heard_events",
348
+ ]) {
349
+ if (capabilities[key] !== undefined) {
350
+ boolean(capabilities, key, `${path}.${key}`);
351
+ }
352
+ }
353
+ if (capabilities.emoji_reactions !== undefined) {
354
+ if (typeof capabilities.emoji_reactions !== "boolean") {
355
+ const reactions = record(capabilities.emoji_reactions, `${path}.emoji_reactions`);
356
+ boolean(reactions, "allowed", `${path}.emoji_reactions.allowed`);
357
+ }
358
+ }
359
+ for (const key of ["from_source_to_target", "from_target_to_source"]) {
360
+ if (capabilities[key] !== undefined) {
361
+ assertDirectionCapabilities(record(capabilities[key], `${path}.${key}`), `${path}.${key}`);
362
+ }
363
+ }
364
+ for (const key of ["source", "target"]) {
365
+ if (capabilities[key] !== undefined) {
366
+ assertCapabilities(record(capabilities[key], `${path}.${key}`), `${path}.${key}`, depth + 1);
367
+ }
368
+ }
369
+ }
370
+ function assertDirectionCapabilities(capabilities, path) {
371
+ messageKinds(capabilities, "allowed_message_kinds", `${path}.allowed_message_kinds`);
372
+ if (capabilities.text !== undefined) {
373
+ assertTextCapabilities(record(capabilities.text, `${path}.text`), `${path}.text`);
374
+ }
375
+ for (const key of ["voice", "photo", "video", "document"]) {
376
+ if (capabilities[key] !== undefined) {
377
+ assertMediaCapabilities(record(capabilities[key], `${path}.${key}`), `${path}.${key}`);
378
+ }
379
+ }
380
+ if (capabilities.limitations !== undefined) {
381
+ array(capabilities.limitations, `${path}.limitations`);
382
+ }
383
+ }
384
+ function assertTextCapabilities(capabilities, path) {
385
+ if (capabilities.max_characters !== undefined) {
386
+ integer(capabilities, "max_characters", `${path}.max_characters`, 1);
387
+ }
388
+ }
389
+ function assertMediaCapabilities(capabilities, path) {
390
+ for (const key of [
391
+ "max_duration_ms",
392
+ "max_file_bytes",
393
+ "max_width_px",
394
+ "max_height_px",
395
+ "max_items_per_message",
396
+ ]) {
397
+ if (capabilities[key] !== undefined) {
398
+ integer(capabilities, key, `${path}.${key}`, 1);
399
+ }
400
+ }
401
+ if (capabilities.allowed_input_mime_types !== undefined) {
402
+ arrayOfStrings(capabilities.allowed_input_mime_types, `${path}.allowed_input_mime_types`);
403
+ }
404
+ if (capabilities.strip_metadata !== undefined) {
405
+ boolean(capabilities, "strip_metadata", `${path}.strip_metadata`);
406
+ }
407
+ if (capabilities.output !== undefined) {
408
+ const output = record(capabilities.output, `${path}.output`);
409
+ optionalString(output, "preferred_mime_type", `${path}.output.preferred_mime_type`);
410
+ optionalString(output, "preferred_codec", `${path}.output.preferred_codec`);
411
+ if (output.transcoding !== undefined) {
412
+ oneOf(output, "transcoding", ["off", "preferred", "required"], `${path}.output.transcoding`);
413
+ }
414
+ }
415
+ }
416
+ function assertMedia(media, path) {
417
+ httpsUri(media, "source_url", `${path}.source_url`);
418
+ string(media, "mime_type", `${path}.mime_type`);
419
+ if (media.byte_size !== undefined) {
420
+ integer(media, "byte_size", `${path}.byte_size`, 1);
421
+ }
422
+ if (media.duration_ms !== undefined) {
423
+ integer(media, "duration_ms", `${path}.duration_ms`, 1);
424
+ }
425
+ optionalString(media, "file_name", `${path}.file_name`);
426
+ if (media.waveform !== undefined) {
427
+ arrayOfNumbers(media.waveform, `${path}.waveform`);
428
+ }
429
+ }
430
+ function assertTransformArtifacts(artifacts) {
431
+ const allowed = new Set([
432
+ "transcript",
433
+ "translated_text",
434
+ "voice",
435
+ "translated_voice",
436
+ ]);
437
+ for (const key of Object.keys(artifacts)) {
438
+ if (!allowed.has(key))
439
+ invalid(`artifacts.${key}`, "a supported artifact");
440
+ }
441
+ for (const key of ["transcript", "translated_text"]) {
442
+ if (artifacts[key] === undefined)
443
+ continue;
444
+ const path = `artifacts.${key}`;
445
+ const artifact = record(artifacts[key], path);
446
+ string(artifact, "text", `${path}.text`);
447
+ nullableString(artifact, "language", `${path}.language`);
448
+ optionalString(artifact, "target_language", `${path}.target_language`);
449
+ boolean(artifact, "cached", `${path}.cached`);
450
+ }
451
+ for (const key of ["voice", "translated_voice"]) {
452
+ if (artifacts[key] === undefined)
453
+ continue;
454
+ const path = `artifacts.${key}`;
455
+ const artifact = record(artifacts[key], path);
456
+ nullableString(artifact, "media_object_id", `${path}.media_object_id`);
457
+ if (!("media" in artifact))
458
+ invalid(`${path}.media`, "an object or null");
459
+ if (artifact.media !== null) {
460
+ assertGeneratedSpeechMedia(record(artifact.media, `${path}.media`), `${path}.media`);
461
+ }
462
+ nullableString(artifact, "language", `${path}.language`);
463
+ optionalString(artifact, "target_language", `${path}.target_language`);
464
+ boolean(artifact, "cached", `${path}.cached`);
465
+ oneOf(artifact, "disclosure", ["Generated voice"], `${path}.disclosure`);
466
+ }
467
+ }
468
+ function assertGeneratedSpeechMedia(media, path) {
469
+ uri(media, "source_url", `${path}.source_url`);
470
+ timestamp(media, "source_url_expires_at", `${path}.source_url_expires_at`);
471
+ string(media, "mime_type", `${path}.mime_type`);
472
+ nullableInteger(media, "duration_ms", `${path}.duration_ms`, 0);
473
+ integer(media, "byte_size", `${path}.byte_size`, 0);
474
+ if (media.waveform !== undefined) {
475
+ arrayOfNumbers(media.waveform, `${path}.waveform`);
476
+ }
477
+ oneOf(media, "generated_by", ["robono"], `${path}.generated_by`);
478
+ oneOf(media, "generated_kind", ["tts_audio"], `${path}.generated_kind`);
479
+ }
480
+ function assertTransformBilling(billing) {
481
+ oneOf(billing, "bill_to", ["integration", "sandbox"], "billing.bill_to");
482
+ boolean(billing, "charged", "billing.charged");
483
+ integer(billing, "operation_count", "billing.operation_count", 0);
484
+ const operations = array(billing.operations, "billing.operations");
485
+ operations.forEach((item, index) => {
486
+ const path = `billing.operations[${index}]`;
487
+ const operation = record(item, path);
488
+ oneOf(operation, "type", ["transcription", "translation", "tts"], `${path}.type`);
489
+ exactNumber(operation, "quantity", 1, `${path}.quantity`);
490
+ boolean(operation, "billable", `${path}.billable`);
491
+ });
492
+ boolean(billing, "cache_reused", "billing.cache_reused");
493
+ }
494
+ function record(value, path) {
495
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
496
+ invalid(path, "an object");
497
+ }
498
+ return value;
499
+ }
500
+ function optionalRecord(parent, key, path = key) {
501
+ if (parent[key] !== undefined)
502
+ record(parent[key], path);
503
+ }
504
+ function string(parent, key, path = key) {
505
+ const value = parent[key];
506
+ if (typeof value !== "string" || !value.trim())
507
+ invalid(path, "a string");
508
+ return value;
509
+ }
510
+ function optionalString(parent, key, path = key) {
511
+ if (parent[key] !== undefined)
512
+ string(parent, key, path);
513
+ }
514
+ function optionalNullableString(parent, key, path = key) {
515
+ if (parent[key] !== undefined && parent[key] !== null) {
516
+ string(parent, key, path);
517
+ }
518
+ }
519
+ function nullableString(parent, key, path = key) {
520
+ if (!(key in parent))
521
+ invalid(path, "a string or null");
522
+ if (parent[key] !== null)
523
+ string(parent, key, path);
524
+ }
525
+ function number(parent, key, path = key) {
526
+ if (typeof parent[key] !== "number" || !Number.isFinite(parent[key])) {
527
+ invalid(path, "a number");
528
+ }
529
+ }
530
+ function exactNumber(parent, key, expected, path = key) {
531
+ number(parent, key, path);
532
+ if (parent[key] !== expected)
533
+ invalid(path, `${expected}`);
534
+ }
535
+ function integer(parent, key, path = key, minimum, maximum) {
536
+ number(parent, key, path);
537
+ const value = parent[key];
538
+ if (!Number.isInteger(value))
539
+ invalid(path, "an integer");
540
+ if (minimum !== undefined && value < minimum) {
541
+ invalid(path, `an integer greater than or equal to ${minimum}`);
542
+ }
543
+ if (maximum !== undefined && value > maximum) {
544
+ invalid(path, `an integer less than or equal to ${maximum}`);
545
+ }
546
+ }
547
+ function nullableInteger(parent, key, path = key, minimum) {
548
+ if (!(key in parent))
549
+ invalid(path, "an integer or null");
550
+ if (parent[key] !== null)
551
+ integer(parent, key, path, minimum);
552
+ }
553
+ function boolean(parent, key, path = key) {
554
+ if (typeof parent[key] !== "boolean")
555
+ invalid(path, "a boolean");
556
+ }
557
+ function timestamp(parent, key, path = key) {
558
+ const value = string(parent, key, path);
559
+ if (!Number.isFinite(Date.parse(value)))
560
+ invalid(path, "an ISO timestamp");
561
+ }
562
+ function nullableTimestamp(parent, key, path = key) {
563
+ if (!(key in parent))
564
+ invalid(path, "an ISO timestamp or null");
565
+ if (parent[key] !== null)
566
+ timestamp(parent, key, path);
567
+ }
568
+ function uri(parent, key, path = key) {
569
+ const value = string(parent, key, path);
570
+ try {
571
+ new URL(value);
572
+ }
573
+ catch {
574
+ invalid(path, "a URL");
575
+ }
576
+ }
577
+ function httpsUri(parent, key, path = key) {
578
+ uri(parent, key, path);
579
+ if (!String(parent[key]).startsWith("https://")) {
580
+ invalid(path, "an HTTPS URL");
581
+ }
582
+ }
583
+ function oneOf(parent, key, values, path = key) {
584
+ if (!values.includes(parent[key])) {
585
+ invalid(path, `one of ${values.join(", ")}`);
586
+ }
587
+ }
588
+ function messageKind(parent, key, path = key) {
589
+ oneOf(parent, key, ["text", "voice", "image", "video", "document"], path);
590
+ }
591
+ function messageKinds(parent, key, path = key) {
592
+ const values = array(parent[key], path);
593
+ values.forEach((value, index) => {
594
+ if (!["text", "voice", "image", "video", "document"].includes(value)) {
595
+ invalid(`${path}[${index}]`, "a supported message kind");
596
+ }
597
+ });
598
+ }
599
+ function optionalMessageKinds(parent, key, path = key) {
600
+ if (parent[key] !== undefined)
601
+ messageKinds(parent, key, path);
602
+ }
603
+ function array(value, path) {
604
+ if (!Array.isArray(value))
605
+ invalid(path, "an array");
606
+ return value;
607
+ }
608
+ function arrayOfStrings(value, path) {
609
+ const values = array(value, path);
610
+ values.forEach((item, index) => {
611
+ if (typeof item !== "string" || !item.trim()) {
612
+ invalid(`${path}[${index}]`, "a string");
613
+ }
614
+ });
615
+ }
616
+ function arrayOfNumbers(value, path) {
617
+ const values = array(value, path);
618
+ values.forEach((item, index) => {
619
+ if (typeof item !== "number" || !Number.isFinite(item)) {
620
+ invalid(`${path}[${index}]`, "a number");
621
+ }
622
+ });
623
+ }
624
+ function arrayOfRecords(value, path) {
625
+ array(value, path).forEach((item, index) => record(item, `${path}[${index}]`));
626
+ }
627
+ function invalid(path, expected) {
628
+ throw new RobonoWebhookError(`The Robono webhook field "${path}" must be ${expected}.`, "invalid_webhook_payload");
629
+ }
83
630
  function header(headers, name) {
84
631
  if (headers instanceof Headers)
85
632
  return headers.get(name) ?? "";
@@ -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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"}