@dual-os/box-api 0.0.0-stage → 6.0.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.
- package/LICENSE +4 -0
- package/Runner.js +5537 -0
- package/Runner.js.map +59 -0
- package/bundle-inventory.json +1 -0
- package/dist/_virtual/_rolldown/runtime.js +10 -0
- package/dist/_virtual/_rolldown/runtime.js.map +9 -0
- package/dist/auth.d.ts +43 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +17 -0
- package/dist/auth.js.map +9 -0
- package/dist/generated/http.d.ts +81 -0
- package/dist/generated/http.d.ts.map +1 -0
- package/dist/generated/http.js +64 -0
- package/dist/generated/http.js.map +9 -0
- package/dist/generated/operations.d.ts +6059 -0
- package/dist/generated/operations.d.ts.map +1 -0
- package/dist/generated/operations.js +1532 -0
- package/dist/generated/operations.js.map +9 -0
- package/dist/generated/plugin.d.ts +1167 -0
- package/dist/generated/plugin.d.ts.map +1 -0
- package/dist/generated/plugin.js +2869 -0
- package/dist/generated/plugin.js.map +10 -0
- package/dist/triggers.d.ts +172 -0
- package/dist/triggers.d.ts.map +1 -0
- package/dist/triggers.js +17 -0
- package/dist/triggers.js.map +9 -0
- package/dual-plugin.json +1 -0
- package/licenses/@dual-os_sdk@0.9.0/LICENSE +4 -0
- package/licenses/@effect_platform-node-shared@4.1.2/LICENSE +21 -0
- package/licenses/@effect_platform-node@4.1.2/LICENSE +21 -0
- package/licenses/effect@4.1.2/LICENSE +21 -0
- package/package.json +1 -6
- package/plugin-2jdfj02n.js +18 -0
- package/plugin-2jdfj02n.js.map +10 -0
- package/plugin-7wasva88.js +62 -0
- package/plugin-7wasva88.js.map +10 -0
- package/plugin-by2fjv4r.js +10970 -0
- package/plugin-by2fjv4r.js.map +10 -0
- package/plugin-p1a27j0f.js +116 -0
- package/plugin-p1a27j0f.js.map +10 -0
- package/plugin-q33ks0q6.js +19115 -0
- package/plugin-q33ks0q6.js.map +158 -0
- package/plugin-rnyttrxf.js +1361 -0
- package/plugin-rnyttrxf.js.map +18 -0
- package/plugin.json +29 -0
- package/README.md +0 -3
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
exists,
|
|
4
|
+
contains,
|
|
5
|
+
minutes,
|
|
6
|
+
toMillis,
|
|
7
|
+
currentTimeMillis,
|
|
8
|
+
forEach,
|
|
9
|
+
succeed4,
|
|
10
|
+
mapError,
|
|
11
|
+
fn,
|
|
12
|
+
make3,
|
|
13
|
+
toEpochMillis,
|
|
14
|
+
decodeUnknownEffect,
|
|
15
|
+
optionalKey,
|
|
16
|
+
Unknown,
|
|
17
|
+
String3,
|
|
18
|
+
Struct,
|
|
19
|
+
Record,
|
|
20
|
+
StructWithRest,
|
|
21
|
+
NonEmptyArray,
|
|
22
|
+
Uint8Array2,
|
|
23
|
+
Action_exports,
|
|
24
|
+
Trigger_exports
|
|
25
|
+
} from "./plugin-q33ks0q6.js";
|
|
26
|
+
import {
|
|
27
|
+
ItemType2,
|
|
28
|
+
Triggers2,
|
|
29
|
+
webhooks_postWebhooks2,
|
|
30
|
+
webhooks_deleteWebhooksId2
|
|
31
|
+
} from "./plugin-by2fjv4r.js";
|
|
32
|
+
|
|
33
|
+
// dist/triggers.js
|
|
34
|
+
var tolerance = minutes(10);
|
|
35
|
+
var Event = StructWithRest(Struct({
|
|
36
|
+
id: String3,
|
|
37
|
+
trigger: String3
|
|
38
|
+
}), [Record(String3, Unknown)]);
|
|
39
|
+
var SignedDelivery = Struct({
|
|
40
|
+
headers: Struct({
|
|
41
|
+
"box-delivery-timestamp": String3,
|
|
42
|
+
"box-signature-primary": optionalKey(String3),
|
|
43
|
+
"box-signature-secondary": optionalKey(String3)
|
|
44
|
+
}),
|
|
45
|
+
rawBody: Uint8Array2
|
|
46
|
+
});
|
|
47
|
+
var triggers2 = [Trigger_exports.webhook("event", {
|
|
48
|
+
description: "Triggers when a subscribed event happens to a Box file or folder, such as an upload, a download, a comment or a shared link",
|
|
49
|
+
name: "Box event",
|
|
50
|
+
config: Struct({
|
|
51
|
+
target: Struct({
|
|
52
|
+
id: String3,
|
|
53
|
+
type: ItemType2
|
|
54
|
+
}),
|
|
55
|
+
triggers: NonEmptyArray(Triggers2)
|
|
56
|
+
}),
|
|
57
|
+
output: Event,
|
|
58
|
+
state: Struct({ webhookId: String3 })
|
|
59
|
+
})];
|
|
60
|
+
var handlers2 = { event: {
|
|
61
|
+
activate: fn("Box.event.activate")(function* (input, context) {
|
|
62
|
+
const keys = context.auth.current.value;
|
|
63
|
+
if (keys.webhookPrimaryKey === undefined && keys.webhookSecondaryKey === undefined)
|
|
64
|
+
return yield* Action_exports.ActionHandlerError.make({ message: "Configure a Box app webhook signature key before activating webhooks" });
|
|
65
|
+
const webhook = yield* webhooks_postWebhooks2.run({ payload: {
|
|
66
|
+
address: input.webhookUrl,
|
|
67
|
+
target: input.config.target,
|
|
68
|
+
triggers: input.config.triggers
|
|
69
|
+
} }, context);
|
|
70
|
+
if (webhook.id === undefined)
|
|
71
|
+
return yield* Action_exports.ActionHandlerError.make({ message: "Box did not return the registered webhook ID" });
|
|
72
|
+
return { state: { webhookId: webhook.id } };
|
|
73
|
+
}),
|
|
74
|
+
deactivate: fn("Box.event.deactivate")(function* (input, context) {
|
|
75
|
+
if (input.state === undefined)
|
|
76
|
+
return;
|
|
77
|
+
yield* webhooks_deleteWebhooksId2.run({ webhook_id: input.state.webhookId }, context);
|
|
78
|
+
}),
|
|
79
|
+
parse: fn("Box.event.parse")(function* (input) {
|
|
80
|
+
const payload = yield* decodeUnknownEffect(Event)(input.request.body);
|
|
81
|
+
return {
|
|
82
|
+
events: [{
|
|
83
|
+
key: payload.id,
|
|
84
|
+
payload
|
|
85
|
+
}],
|
|
86
|
+
state: input.state
|
|
87
|
+
};
|
|
88
|
+
}),
|
|
89
|
+
verify: fn("Box.event.verify")(function* (input, context) {
|
|
90
|
+
const forged = Action_exports.ActionHandlerError.make({
|
|
91
|
+
message: "Invalid Box webhook signature",
|
|
92
|
+
status: 401
|
|
93
|
+
});
|
|
94
|
+
const delivery = yield* mapError(decodeUnknownEffect(SignedDelivery)({
|
|
95
|
+
...input.request,
|
|
96
|
+
headers: input.request.headers ?? {}
|
|
97
|
+
}), () => forged);
|
|
98
|
+
const timestamp = delivery.headers["box-delivery-timestamp"];
|
|
99
|
+
const now = yield* currentTimeMillis;
|
|
100
|
+
const fresh = exists(make3(timestamp), (sent) => Math.abs(now - toEpochMillis(sent)) <= toMillis(tolerance));
|
|
101
|
+
const keys = context.auth.current.value;
|
|
102
|
+
const results = yield* forEach([[keys.webhookPrimaryKey, delivery.headers["box-signature-primary"]], [keys.webhookSecondaryKey, delivery.headers["box-signature-secondary"]]], (pair) => pair[0] === undefined || pair[1] === undefined ? succeed4(false) : Trigger_exports.verifyHmac({
|
|
103
|
+
algorithm: "sha256",
|
|
104
|
+
encoding: "base64",
|
|
105
|
+
message: [delivery.rawBody, timestamp],
|
|
106
|
+
secret: pair[0],
|
|
107
|
+
signature: pair[1]
|
|
108
|
+
}));
|
|
109
|
+
if (!fresh || !contains(results, true))
|
|
110
|
+
return yield* forged;
|
|
111
|
+
})
|
|
112
|
+
} };
|
|
113
|
+
export { triggers2, handlers2 };
|
|
114
|
+
|
|
115
|
+
//# debugId=8C93891FC3C2C5F364756E2164756E21
|
|
116
|
+
//# sourceMappingURL=plugin-p1a27j0f.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../bundle-input/dist/triggers.js"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import { ItemType, Triggers, webhooks_deleteWebhooksId, webhooks_postWebhooks } from \"./generated/operations.js\";\nimport { Array, Clock, DateTime, Duration, Effect, Option, Schema } from \"effect\";\nimport { Action, Trigger } from \"@dual-os/sdk\";\n//#region src/triggers.ts\nconst tolerance = Duration.minutes(10);\nconst Event = Schema.StructWithRest(Schema.Struct({\n\tid: Schema.String,\n\ttrigger: Schema.String\n}), [Schema.Record(Schema.String, Schema.Unknown)]);\nconst SignedDelivery = Schema.Struct({\n\theaders: Schema.Struct({\n\t\t\"box-delivery-timestamp\": Schema.String,\n\t\t\"box-signature-primary\": Schema.optionalKey(Schema.String),\n\t\t\"box-signature-secondary\": Schema.optionalKey(Schema.String)\n\t}),\n\trawBody: Schema.Uint8Array\n});\nconst triggers = [Trigger.webhook(\"event\", {\n\tdescription: \"Triggers when a subscribed event happens to a Box file or folder, such as an upload, a download, a comment or a shared link\",\n\tname: \"Box event\",\n\tconfig: Schema.Struct({\n\t\ttarget: Schema.Struct({\n\t\t\tid: Schema.String,\n\t\t\ttype: ItemType\n\t\t}),\n\t\ttriggers: Schema.NonEmptyArray(Triggers)\n\t}),\n\toutput: Event,\n\tstate: Schema.Struct({ webhookId: Schema.String })\n})];\nconst handlers = { event: {\n\tactivate: Effect.fn(\"Box.event.activate\")(function* (input, context) {\n\t\tconst keys = context.auth.current.value;\n\t\tif (keys.webhookPrimaryKey === void 0 && keys.webhookSecondaryKey === void 0) return yield* Action.ActionHandlerError.make({ message: \"Configure a Box app webhook signature key before activating webhooks\" });\n\t\tconst webhook = yield* webhooks_postWebhooks.run({ payload: {\n\t\t\taddress: input.webhookUrl,\n\t\t\ttarget: input.config.target,\n\t\t\ttriggers: input.config.triggers\n\t\t} }, context);\n\t\tif (webhook.id === void 0) return yield* Action.ActionHandlerError.make({ message: \"Box did not return the registered webhook ID\" });\n\t\treturn { state: { webhookId: webhook.id } };\n\t}),\n\tdeactivate: Effect.fn(\"Box.event.deactivate\")(function* (input, context) {\n\t\tif (input.state === void 0) return;\n\t\tyield* webhooks_deleteWebhooksId.run({ webhook_id: input.state.webhookId }, context);\n\t}),\n\tparse: Effect.fn(\"Box.event.parse\")(function* (input) {\n\t\tconst payload = yield* Schema.decodeUnknownEffect(Event)(input.request.body);\n\t\treturn {\n\t\t\tevents: [{\n\t\t\t\tkey: payload.id,\n\t\t\t\tpayload\n\t\t\t}],\n\t\t\tstate: input.state\n\t\t};\n\t}),\n\tverify: Effect.fn(\"Box.event.verify\")(function* (input, context) {\n\t\tconst forged = Action.ActionHandlerError.make({\n\t\t\tmessage: \"Invalid Box webhook signature\",\n\t\t\tstatus: 401\n\t\t});\n\t\tconst delivery = yield* Effect.mapError(Schema.decodeUnknownEffect(SignedDelivery)({\n\t\t\t...input.request,\n\t\t\theaders: input.request.headers ?? {}\n\t\t}), () => forged);\n\t\tconst timestamp = delivery.headers[\"box-delivery-timestamp\"];\n\t\tconst now = yield* Clock.currentTimeMillis;\n\t\tconst fresh = Option.exists(DateTime.make(timestamp), (sent) => Math.abs(now - DateTime.toEpochMillis(sent)) <= Duration.toMillis(tolerance));\n\t\tconst keys = context.auth.current.value;\n\t\tconst results = yield* Effect.forEach([[keys.webhookPrimaryKey, delivery.headers[\"box-signature-primary\"]], [keys.webhookSecondaryKey, delivery.headers[\"box-signature-secondary\"]]], (pair) => pair[0] === void 0 || pair[1] === void 0 ? Effect.succeed(false) : Trigger.verifyHmac({\n\t\t\talgorithm: \"sha256\",\n\t\t\tencoding: \"base64\",\n\t\t\tmessage: [delivery.rawBody, timestamp],\n\t\t\tsecret: pair[0],\n\t\t\tsignature: pair[1]\n\t\t}));\n\t\tif (!fresh || !Array.contains(results, true)) return yield* forged;\n\t})\n} };\n//#endregion\nexport { handlers, triggers };\n\n//# sourceMappingURL=triggers.js.map"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "8C93891FC3C2C5F364756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|