@robono/server 0.4.0 → 0.6.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/CHANGELOG.md +15 -0
- package/README.md +91 -5
- package/dist/adapter-smoke-test.d.ts +3 -0
- package/dist/adapter-smoke-test.d.ts.map +1 -0
- package/dist/adapter-smoke-test.js +78 -0
- package/dist/adapter-smoke-test.js.map +1 -0
- package/dist/adapter.d.ts +1 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +124 -25
- package/dist/adapter.js.map +1 -1
- package/dist/client.d.ts +44 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +315 -13
- package/dist/client.js.map +1 -1
- package/dist/sandbox-test.js +16 -11
- package/dist/sandbox-test.js.map +1 -1
- package/dist/types.d.ts +249 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/webhooks.d.ts.map +1 -1
- package/dist/webhooks.js +32 -3
- package/dist/webhooks.js.map +1 -1
- package/package.json +3 -7
package/dist/webhooks.js
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
1
|
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
2
2
|
import { RobonoWebhookError } from "./errors.js";
|
|
3
|
+
const webhookEventNames = new Set([
|
|
4
|
+
"connection.status_changed",
|
|
5
|
+
"connection.profile_updated",
|
|
6
|
+
"message.created",
|
|
7
|
+
"message.delivered",
|
|
8
|
+
"message.heard",
|
|
9
|
+
"message.reaction_updated",
|
|
10
|
+
"bridge.connection_requested",
|
|
11
|
+
"bridge.connection_status_changed",
|
|
12
|
+
"bridge.connection_updated",
|
|
13
|
+
"bridge.message_created",
|
|
14
|
+
"bridge.message_status_changed",
|
|
15
|
+
"bridge.guardian_message_created",
|
|
16
|
+
"bridge.guardian_message_status_changed",
|
|
17
|
+
"transform.completed",
|
|
18
|
+
"transform.failed",
|
|
19
|
+
"diagnostic.push_requested",
|
|
20
|
+
]);
|
|
3
21
|
export async function verifyRobonoWebhook(rawBody, headers, webhookSecret, options = {}) {
|
|
4
22
|
const timestamp = header(headers, "robono-webhook-timestamp");
|
|
5
23
|
const signatureHeader = header(headers, "robono-webhook-signature");
|
|
6
24
|
const headerEventId = header(headers, "robono-webhook-id");
|
|
7
25
|
const requestId = header(headers, "robono-request-id");
|
|
26
|
+
if (!webhookSecret?.trim()) {
|
|
27
|
+
throw new RobonoWebhookError("The Robono webhook secret is missing.", "missing_webhook_secret");
|
|
28
|
+
}
|
|
8
29
|
if (!timestamp || !signatureHeader) {
|
|
9
30
|
throw new RobonoWebhookError("The Robono webhook signature headers are missing.", "missing_webhook_signature");
|
|
10
31
|
}
|
|
@@ -35,13 +56,21 @@ export async function verifyRobonoWebhook(rawBody, headers, webhookSecret, optio
|
|
|
35
56
|
if (!event || typeof event !== "object" || typeof event.event !== "string") {
|
|
36
57
|
throw new RobonoWebhookError("The Robono webhook event is missing.", "invalid_webhook_event");
|
|
37
58
|
}
|
|
59
|
+
if (!webhookEventNames.has(event.event)) {
|
|
60
|
+
throw new RobonoWebhookError(`The Robono webhook event "${event.event}" is not supported.`, "unsupported_webhook_event");
|
|
61
|
+
}
|
|
38
62
|
const eventId = event.event_id || headerEventId;
|
|
39
63
|
if (!eventId) {
|
|
40
64
|
throw new RobonoWebhookError("The Robono webhook event ID is missing.", "missing_webhook_event_id");
|
|
41
65
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
66
|
+
if (event.event_id && headerEventId && event.event_id !== headerEventId) {
|
|
67
|
+
throw new RobonoWebhookError("The Robono webhook event ID does not match its header.", "webhook_event_id_mismatch");
|
|
68
|
+
}
|
|
69
|
+
const duplicate = options.claimEvent
|
|
70
|
+
? !(await options.claimEvent(eventId))
|
|
71
|
+
: options.hasProcessedEvent
|
|
72
|
+
? await options.hasProcessedEvent(eventId)
|
|
73
|
+
: false;
|
|
45
74
|
return {
|
|
46
75
|
event,
|
|
47
76
|
eventId,
|
package/dist/webhooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../src/webhooks.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@robono/server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Provider-neutral server SDK for the Robono Bridge API.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"robono",
|
|
@@ -11,11 +11,6 @@
|
|
|
11
11
|
"typescript"
|
|
12
12
|
],
|
|
13
13
|
"homepage": "https://robono.com/docs#start",
|
|
14
|
-
"repository": {
|
|
15
|
-
"type": "git",
|
|
16
|
-
"url": "git+https://github.com/IMLX16/Robono.git",
|
|
17
|
-
"directory": "packages/server"
|
|
18
|
-
},
|
|
19
14
|
"bugs": {
|
|
20
15
|
"url": "https://robono.com/contact"
|
|
21
16
|
},
|
|
@@ -33,7 +28,8 @@
|
|
|
33
28
|
}
|
|
34
29
|
},
|
|
35
30
|
"bin": {
|
|
36
|
-
"robono-sandbox-test": "dist/sandbox-test.js"
|
|
31
|
+
"robono-sandbox-test": "dist/sandbox-test.js",
|
|
32
|
+
"robono-adapter-test": "dist/adapter-smoke-test.js"
|
|
37
33
|
},
|
|
38
34
|
"files": [
|
|
39
35
|
"dist",
|