@dual-os/atlassian-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.
Files changed (46) hide show
  1. package/LICENSE +4 -0
  2. package/Runner.js +5537 -0
  3. package/Runner.js.map +59 -0
  4. package/bundle-inventory.json +1 -0
  5. package/dist/_virtual/_rolldown/runtime.js +10 -0
  6. package/dist/_virtual/_rolldown/runtime.js.map +9 -0
  7. package/dist/auth.d.ts +60 -0
  8. package/dist/auth.d.ts.map +1 -0
  9. package/dist/auth.js +17 -0
  10. package/dist/auth.js.map +9 -0
  11. package/dist/generated/http.d.ts +81 -0
  12. package/dist/generated/http.d.ts.map +1 -0
  13. package/dist/generated/http.js +64 -0
  14. package/dist/generated/http.js.map +9 -0
  15. package/dist/generated/operations.d.ts +15048 -0
  16. package/dist/generated/operations.d.ts.map +1 -0
  17. package/dist/generated/operations.js +4586 -0
  18. package/dist/generated/operations.js.map +9 -0
  19. package/dist/generated/plugin.d.ts +3239 -0
  20. package/dist/generated/plugin.d.ts.map +1 -0
  21. package/dist/generated/plugin.js +10953 -0
  22. package/dist/generated/plugin.js.map +10 -0
  23. package/dist/triggers.d.ts +218 -0
  24. package/dist/triggers.d.ts.map +1 -0
  25. package/dist/triggers.js +17 -0
  26. package/dist/triggers.js.map +9 -0
  27. package/dual-plugin.json +1 -0
  28. package/licenses/@dual-os_sdk@0.9.0/LICENSE +4 -0
  29. package/licenses/@effect_platform-node-shared@4.1.2/LICENSE +21 -0
  30. package/licenses/@effect_platform-node@4.1.2/LICENSE +21 -0
  31. package/licenses/effect@4.1.2/LICENSE +21 -0
  32. package/package.json +1 -6
  33. package/plugin-0h23empw.js +1380 -0
  34. package/plugin-0h23empw.js.map +18 -0
  35. package/plugin-2jdfj02n.js +18 -0
  36. package/plugin-2jdfj02n.js.map +10 -0
  37. package/plugin-5bkpgknn.js +21541 -0
  38. package/plugin-5bkpgknn.js.map +10 -0
  39. package/plugin-djnvvdd5.js +281 -0
  40. package/plugin-djnvvdd5.js.map +10 -0
  41. package/plugin-e49xr86e.js +19129 -0
  42. package/plugin-e49xr86e.js.map +158 -0
  43. package/plugin-td2nw44v.js +62 -0
  44. package/plugin-td2nw44v.js.map +10 -0
  45. package/plugin.json +61 -0
  46. package/README.md +0 -3
@@ -0,0 +1,281 @@
1
+ // @bun
2
+ import {
3
+ pipe,
4
+ none,
5
+ some,
6
+ match,
7
+ getOrElse,
8
+ fromUndefinedOr,
9
+ has,
10
+ get2,
11
+ append,
12
+ isReadonlyArrayNonEmpty,
13
+ contains,
14
+ empty,
15
+ flatMap2,
16
+ reduce,
17
+ some2,
18
+ hours,
19
+ toMillis,
20
+ currentTimeMillis,
21
+ slice,
22
+ startsWith,
23
+ mapError,
24
+ fnUntraced,
25
+ fn,
26
+ decodeUnknownEffect,
27
+ decodeEffect,
28
+ optionalKey,
29
+ Unknown,
30
+ String3,
31
+ Struct,
32
+ Record,
33
+ StructWithRest,
34
+ ArraySchema,
35
+ Literals,
36
+ Finite,
37
+ isGreaterThanOrEqualTo,
38
+ Int,
39
+ NonEmptyString,
40
+ URLFromString,
41
+ Json,
42
+ paginate,
43
+ runCollect,
44
+ Action_exports,
45
+ Trigger_exports
46
+ } from "./plugin-e49xr86e.js";
47
+ import {
48
+ confluenceBlogPost_getBlogPosts2,
49
+ confluencePage_getPages2
50
+ } from "./plugin-5bkpgknn.js";
51
+
52
+ // dist/triggers.js
53
+ var EventType = Literals([
54
+ "board_configuration_changed",
55
+ "board_created",
56
+ "board_deleted",
57
+ "board_updated",
58
+ "comment_created",
59
+ "comment_deleted",
60
+ "comment_updated",
61
+ "jira:issue_created",
62
+ "jira:issue_deleted",
63
+ "jira:issue_updated",
64
+ "issuelink_created",
65
+ "issuelink_deleted",
66
+ "option_attachments_changed",
67
+ "option_issuelinks_changed",
68
+ "option_subtasks_changed",
69
+ "option_timetracking_changed",
70
+ "option_unassigned_issues_changed",
71
+ "option_voting_changed",
72
+ "option_watching_changed",
73
+ "project_created",
74
+ "project_deleted",
75
+ "project_updated",
76
+ "sprint_closed",
77
+ "sprint_created",
78
+ "sprint_deleted",
79
+ "sprint_started",
80
+ "sprint_updated",
81
+ "user_created",
82
+ "user_deleted",
83
+ "user_updated",
84
+ "jira:version_created",
85
+ "jira:version_deleted",
86
+ "jira:version_moved",
87
+ "jira:version_released",
88
+ "jira:version_unreleased",
89
+ "jira:version_updated",
90
+ "worklog_created",
91
+ "worklog_deleted",
92
+ "worklog_updated"
93
+ ]);
94
+ var Event = StructWithRest(Struct({
95
+ timestamp: Finite,
96
+ webhookEvent: String3
97
+ }), [Record(String3, Unknown)]);
98
+ var DELIVERY_MAX_AGE = hours(1);
99
+ var event = Trigger_exports.webhook("event", {
100
+ description: "Triggers on Jira webhook events. A Jira administrator creates the webhook under System, WebHooks with this trigger's callback URL, the same events and a secret, then enters that secret here.",
101
+ name: "Jira event",
102
+ config: Struct({
103
+ events: optionalKey(ArraySchema(EventType)),
104
+ secret: NonEmptyString.annotate({ description: "The secret set on the Jira webhook; deliveries without a matching X-Hub-Signature are rejected" })
105
+ }),
106
+ output: Event
107
+ });
108
+ var automationRule = Trigger_exports.webhook("jira-automation-rule", {
109
+ description: "Triggers when a Jira automation rule's Send web request action posts JSON to this trigger's callback URL with the header X-Dual-Token set to this trigger's token. Identical bodies count as one event.",
110
+ name: "Jira automation rule",
111
+ config: Struct({ token: NonEmptyString.annotate({ description: "The value of the rule's X-Dual-Token header; deliveries without a matching token are rejected" }) }),
112
+ output: Json
113
+ });
114
+ var ConfluencePage = StructWithRest(Struct({
115
+ id: NonEmptyString,
116
+ version: StructWithRest(Struct({ number: Int.check(isGreaterThanOrEqualTo(1)) }), [Record(String3, Unknown)])
117
+ }), [Record(String3, Unknown)]);
118
+ var contentBatch = Struct({
119
+ _links: optionalKey(Struct({ next: optionalKey(String3) })),
120
+ results: ArraySchema(ConfluencePage)
121
+ });
122
+ var invalidContent = mapError((cause) => Action_exports.ActionHandlerError.make({
123
+ cause,
124
+ message: "Invalid Confluence content collection"
125
+ }));
126
+ var contentVersions = Record(String3, ArraySchema(Int));
127
+ var contentConfig = Struct({
128
+ event: Literals([
129
+ "created",
130
+ "updated",
131
+ "changed"
132
+ ]),
133
+ spaceId: optionalKey(Int)
134
+ });
135
+ var confluencePageEvent = Trigger_exports.polling("confluence-page-event", {
136
+ description: "Polls Confluence Cloud pages, optionally in one space, and reports created pages and new versions after a silent first check. Deletions are not reported.",
137
+ name: "Confluence page event",
138
+ config: contentConfig,
139
+ output: ConfluencePage,
140
+ state: Struct({ pages: contentVersions })
141
+ });
142
+ var triggers2 = [
143
+ Trigger_exports.polling("confluence-blog-post-event", {
144
+ description: "Polls Confluence Cloud blog posts, optionally in one space, and reports created posts and new versions after a silent first check. Deletions are not reported.",
145
+ name: "Confluence blog post event",
146
+ config: contentConfig,
147
+ output: ConfluencePage,
148
+ state: Struct({ posts: contentVersions })
149
+ }),
150
+ confluencePageEvent,
151
+ event,
152
+ automationRule
153
+ ];
154
+ var handlers2 = {
155
+ "confluence-blog-post-event": { poll: fn("Confluence.blogPostEvent.poll")(function* (input, context) {
156
+ const result = yield* pollContent("blogpost", input.config, (options) => confluenceBlogPost_getBlogPosts2.run(options, context), context.auth.current.methodId, input.state?.posts);
157
+ return {
158
+ events: result.events,
159
+ state: { posts: result.versions }
160
+ };
161
+ }) },
162
+ "confluence-page-event": { poll: fn("Confluence.pageEvent.poll")(function* (input, context) {
163
+ const result = yield* pollContent("page", input.config, (options) => confluencePage_getPages2.run(options, context), context.auth.current.methodId, input.state?.pages);
164
+ return {
165
+ events: result.events,
166
+ state: { pages: result.versions }
167
+ };
168
+ }) },
169
+ event: {
170
+ parse: fn("Jira.event.parse")(function* (input) {
171
+ const payload = yield* decodeUnknownEffect(Event)(input.request.body);
172
+ const wanted = input.config.events ?? [];
173
+ if (isReadonlyArrayNonEmpty(wanted) && !some2(wanted, (type) => type === payload.webhookEvent))
174
+ return {
175
+ events: [],
176
+ state: undefined
177
+ };
178
+ return {
179
+ events: [{
180
+ key: yield* Trigger_exports.bodyDigest(input.request.rawBody ?? ""),
181
+ payload
182
+ }],
183
+ state: undefined
184
+ };
185
+ }),
186
+ verify: fn("Jira.event.verify")(function* (input) {
187
+ const signature = input.request.headers?.["x-hub-signature"];
188
+ if (!(signature !== undefined && startsWith("sha256=")(signature) && (yield* Trigger_exports.verifyHmac({
189
+ algorithm: "sha256",
190
+ encoding: "hex",
191
+ message: input.request.rawBody ?? "",
192
+ secret: input.config.secret,
193
+ signature: slice(7)(signature)
194
+ }))))
195
+ return yield* Action_exports.ActionHandlerError.make({
196
+ message: "Invalid Jira webhook signature",
197
+ status: 401
198
+ });
199
+ const delivered = yield* decodeUnknownEffect(Event)(input.request.body);
200
+ const now = yield* currentTimeMillis;
201
+ if (Math.abs(now - delivered.timestamp) > toMillis(DELIVERY_MAX_AGE))
202
+ return yield* Action_exports.ActionHandlerError.make({
203
+ message: "Stale Jira webhook delivery",
204
+ status: 401
205
+ });
206
+ })
207
+ },
208
+ "jira-automation-rule": {
209
+ parse: fn("Jira.automationRule.parse")(function* (input) {
210
+ const payload = yield* decodeUnknownEffect(Json)(input.request.body);
211
+ return {
212
+ events: [{
213
+ key: yield* Trigger_exports.bodyDigest(input.request.rawBody ?? ""),
214
+ payload
215
+ }],
216
+ state: undefined
217
+ };
218
+ }),
219
+ verify: fn("Jira.automationRule.verify")(function* (input) {
220
+ if (!(yield* Trigger_exports.verifyToken(input.config.token, input.request.headers?.["x-dual-token"])))
221
+ return yield* Action_exports.ActionHandlerError.make({
222
+ message: "Invalid Jira automation rule token",
223
+ status: 401
224
+ });
225
+ })
226
+ }
227
+ };
228
+ var pollContent = fnUntraced(function* (kind, config, list, methodId, saved) {
229
+ if (methodId === "server" || methodId === "server-pat")
230
+ return yield* Action_exports.ActionHandlerError.make({ message: "Confluence polling requires a Cloud or OAuth connection" });
231
+ const batches = yield* pipe(paginate({
232
+ cursor: none(),
233
+ visited: empty()
234
+ }, fnUntraced(function* (pageState) {
235
+ const response = yield* list({
236
+ ...match(pageState.cursor, {
237
+ onNone: () => ({}),
238
+ onSome: (cursor) => ({ cursor })
239
+ }),
240
+ limit: 250,
241
+ ...match(fromUndefinedOr(config.spaceId), {
242
+ onNone: () => ({}),
243
+ onSome: (spaceId) => ({ "space-id": [spaceId] })
244
+ })
245
+ });
246
+ const batch = yield* invalidContent(decodeUnknownEffect(contentBatch)(response));
247
+ const next = batch._links?.next;
248
+ if (next === undefined)
249
+ return [[batch], none()];
250
+ const cursor = (yield* invalidContent(decodeEffect(URLFromString)(startsWith("/")(next) ? `https://confluence.invalid${next}` : next))).searchParams.get("cursor");
251
+ if (cursor === null || cursor === "" || contains(pageState.visited, cursor))
252
+ return yield* Action_exports.ActionHandlerError.make({ message: "Confluence returned an invalid or repeated next cursor" });
253
+ return [[batch], some({
254
+ cursor: some(cursor),
255
+ visited: append(pageState.visited, cursor)
256
+ })];
257
+ })), runCollect);
258
+ return reduce(flatMap2(batches, (batch) => batch.results), {
259
+ events: empty(),
260
+ versions: saved ?? {}
261
+ }, (current, payload) => {
262
+ const versions = getOrElse(get2(current.versions, payload.id), () => []);
263
+ if (contains(versions, payload.version.number))
264
+ return current;
265
+ const created = !has(current.versions, payload.id);
266
+ return {
267
+ events: saved !== undefined && (config.event === "changed" || created && config.event === "created" || !created && config.event === "updated") ? append(current.events, {
268
+ key: `${kind}:${payload.id}:${payload.version.number}`,
269
+ payload
270
+ }) : current.events,
271
+ versions: {
272
+ ...current.versions,
273
+ [payload.id]: append(versions, payload.version.number)
274
+ }
275
+ };
276
+ });
277
+ });
278
+ export { triggers2, handlers2 };
279
+
280
+ //# debugId=B05B65EA86CC202E64756E2164756E21
281
+ //# sourceMappingURL=plugin-djnvvdd5.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../bundle-input/dist/triggers.js"],
4
+ "sourcesContent": [
5
+ "import { confluenceBlogPost_getBlogPosts, confluencePage_getPages } from \"./generated/operations.js\";\nimport { Array, Clock, Duration, Effect, Option, Record, Schema, Stream, String, pipe } from \"effect\";\nimport { Action, Trigger } from \"@dual-os/sdk\";\n//#region src/triggers.ts\nconst EventType = Schema.Literals([\n\t\"board_configuration_changed\",\n\t\"board_created\",\n\t\"board_deleted\",\n\t\"board_updated\",\n\t\"comment_created\",\n\t\"comment_deleted\",\n\t\"comment_updated\",\n\t\"jira:issue_created\",\n\t\"jira:issue_deleted\",\n\t\"jira:issue_updated\",\n\t\"issuelink_created\",\n\t\"issuelink_deleted\",\n\t\"option_attachments_changed\",\n\t\"option_issuelinks_changed\",\n\t\"option_subtasks_changed\",\n\t\"option_timetracking_changed\",\n\t\"option_unassigned_issues_changed\",\n\t\"option_voting_changed\",\n\t\"option_watching_changed\",\n\t\"project_created\",\n\t\"project_deleted\",\n\t\"project_updated\",\n\t\"sprint_closed\",\n\t\"sprint_created\",\n\t\"sprint_deleted\",\n\t\"sprint_started\",\n\t\"sprint_updated\",\n\t\"user_created\",\n\t\"user_deleted\",\n\t\"user_updated\",\n\t\"jira:version_created\",\n\t\"jira:version_deleted\",\n\t\"jira:version_moved\",\n\t\"jira:version_released\",\n\t\"jira:version_unreleased\",\n\t\"jira:version_updated\",\n\t\"worklog_created\",\n\t\"worklog_deleted\",\n\t\"worklog_updated\"\n]);\nconst Event = Schema.StructWithRest(Schema.Struct({\n\ttimestamp: Schema.Finite,\n\twebhookEvent: Schema.String\n}), [Schema.Record(Schema.String, Schema.Unknown)]);\nconst DELIVERY_MAX_AGE = Duration.hours(1);\nconst event = Trigger.webhook(\"event\", {\n\tdescription: \"Triggers on Jira webhook events. A Jira administrator creates the webhook under System, WebHooks with this trigger's callback URL, the same events and a secret, then enters that secret here.\",\n\tname: \"Jira event\",\n\tconfig: Schema.Struct({\n\t\tevents: Schema.optionalKey(Schema.Array(EventType)),\n\t\tsecret: Schema.NonEmptyString.annotate({ description: \"The secret set on the Jira webhook; deliveries without a matching X-Hub-Signature are rejected\" })\n\t}),\n\toutput: Event\n});\nconst automationRule = Trigger.webhook(\"jira-automation-rule\", {\n\tdescription: \"Triggers when a Jira automation rule's Send web request action posts JSON to this trigger's callback URL with the header X-Dual-Token set to this trigger's token. Identical bodies count as one event.\",\n\tname: \"Jira automation rule\",\n\tconfig: Schema.Struct({ token: Schema.NonEmptyString.annotate({ description: \"The value of the rule's X-Dual-Token header; deliveries without a matching token are rejected\" }) }),\n\toutput: Schema.Json\n});\nconst ConfluencePage = Schema.StructWithRest(Schema.Struct({\n\tid: Schema.NonEmptyString,\n\tversion: Schema.StructWithRest(Schema.Struct({ number: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)) }), [Schema.Record(Schema.String, Schema.Unknown)])\n}), [Schema.Record(Schema.String, Schema.Unknown)]);\nconst contentBatch = Schema.Struct({\n\t_links: Schema.optionalKey(Schema.Struct({ next: Schema.optionalKey(Schema.String) })),\n\tresults: Schema.Array(ConfluencePage)\n});\nconst invalidContent = Effect.mapError((cause) => Action.ActionHandlerError.make({\n\tcause,\n\tmessage: \"Invalid Confluence content collection\"\n}));\nconst contentVersions = Schema.Record(Schema.String, Schema.Array(Schema.Int));\nconst contentConfig = Schema.Struct({\n\tevent: Schema.Literals([\n\t\t\"created\",\n\t\t\"updated\",\n\t\t\"changed\"\n\t]),\n\tspaceId: Schema.optionalKey(Schema.Int)\n});\nconst confluencePageEvent = Trigger.polling(\"confluence-page-event\", {\n\tdescription: \"Polls Confluence Cloud pages, optionally in one space, and reports created pages and new versions after a silent first check. Deletions are not reported.\",\n\tname: \"Confluence page event\",\n\tconfig: contentConfig,\n\toutput: ConfluencePage,\n\tstate: Schema.Struct({ pages: contentVersions })\n});\nconst triggers = [\n\tTrigger.polling(\"confluence-blog-post-event\", {\n\t\tdescription: \"Polls Confluence Cloud blog posts, optionally in one space, and reports created posts and new versions after a silent first check. Deletions are not reported.\",\n\t\tname: \"Confluence blog post event\",\n\t\tconfig: contentConfig,\n\t\toutput: ConfluencePage,\n\t\tstate: Schema.Struct({ posts: contentVersions })\n\t}),\n\tconfluencePageEvent,\n\tevent,\n\tautomationRule\n];\nconst handlers = {\n\t\"confluence-blog-post-event\": { poll: Effect.fn(\"Confluence.blogPostEvent.poll\")(function* (input, context) {\n\t\tconst result = yield* pollContent(\"blogpost\", input.config, (options) => confluenceBlogPost_getBlogPosts.run(options, context), context.auth.current.methodId, input.state?.posts);\n\t\treturn {\n\t\t\tevents: result.events,\n\t\t\tstate: { posts: result.versions }\n\t\t};\n\t}) },\n\t\"confluence-page-event\": { poll: Effect.fn(\"Confluence.pageEvent.poll\")(function* (input, context) {\n\t\tconst result = yield* pollContent(\"page\", input.config, (options) => confluencePage_getPages.run(options, context), context.auth.current.methodId, input.state?.pages);\n\t\treturn {\n\t\t\tevents: result.events,\n\t\t\tstate: { pages: result.versions }\n\t\t};\n\t}) },\n\tevent: {\n\t\tparse: Effect.fn(\"Jira.event.parse\")(function* (input) {\n\t\t\tconst payload = yield* Schema.decodeUnknownEffect(Event)(input.request.body);\n\t\t\tconst wanted = input.config.events ?? [];\n\t\t\tif (Array.isReadonlyArrayNonEmpty(wanted) && !Array.some(wanted, (type) => type === payload.webhookEvent)) return {\n\t\t\t\tevents: [],\n\t\t\t\tstate: void 0\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tevents: [{\n\t\t\t\t\tkey: yield* Trigger.bodyDigest(input.request.rawBody ?? \"\"),\n\t\t\t\t\tpayload\n\t\t\t\t}],\n\t\t\t\tstate: void 0\n\t\t\t};\n\t\t}),\n\t\tverify: Effect.fn(\"Jira.event.verify\")(function* (input) {\n\t\t\tconst signature = input.request.headers?.[\"x-hub-signature\"];\n\t\t\tif (!(signature !== void 0 && String.startsWith(\"sha256=\")(signature) && (yield* Trigger.verifyHmac({\n\t\t\t\talgorithm: \"sha256\",\n\t\t\t\tencoding: \"hex\",\n\t\t\t\tmessage: input.request.rawBody ?? \"\",\n\t\t\t\tsecret: input.config.secret,\n\t\t\t\tsignature: String.slice(7)(signature)\n\t\t\t})))) return yield* Action.ActionHandlerError.make({\n\t\t\t\tmessage: \"Invalid Jira webhook signature\",\n\t\t\t\tstatus: 401\n\t\t\t});\n\t\t\tconst delivered = yield* Schema.decodeUnknownEffect(Event)(input.request.body);\n\t\t\tconst now = yield* Clock.currentTimeMillis;\n\t\t\tif (Math.abs(now - delivered.timestamp) > Duration.toMillis(DELIVERY_MAX_AGE)) return yield* Action.ActionHandlerError.make({\n\t\t\t\tmessage: \"Stale Jira webhook delivery\",\n\t\t\t\tstatus: 401\n\t\t\t});\n\t\t})\n\t},\n\t\"jira-automation-rule\": {\n\t\tparse: Effect.fn(\"Jira.automationRule.parse\")(function* (input) {\n\t\t\tconst payload = yield* Schema.decodeUnknownEffect(Schema.Json)(input.request.body);\n\t\t\treturn {\n\t\t\t\tevents: [{\n\t\t\t\t\tkey: yield* Trigger.bodyDigest(input.request.rawBody ?? \"\"),\n\t\t\t\t\tpayload\n\t\t\t\t}],\n\t\t\t\tstate: void 0\n\t\t\t};\n\t\t}),\n\t\tverify: Effect.fn(\"Jira.automationRule.verify\")(function* (input) {\n\t\t\tif (!(yield* Trigger.verifyToken(input.config.token, input.request.headers?.[\"x-dual-token\"]))) return yield* Action.ActionHandlerError.make({\n\t\t\t\tmessage: \"Invalid Jira automation rule token\",\n\t\t\t\tstatus: 401\n\t\t\t});\n\t\t})\n\t}\n};\nconst pollContent = Effect.fnUntraced(function* (kind, config, list, methodId, saved) {\n\tif (methodId === \"server\" || methodId === \"server-pat\") return yield* Action.ActionHandlerError.make({ message: \"Confluence polling requires a Cloud or OAuth connection\" });\n\tconst batches = yield* pipe(Stream.paginate({\n\t\tcursor: Option.none(),\n\t\tvisited: Array.empty()\n\t}, Effect.fnUntraced(function* (pageState) {\n\t\tconst response = yield* list({\n\t\t\t...Option.match(pageState.cursor, {\n\t\t\t\tonNone: () => ({}),\n\t\t\t\tonSome: (cursor) => ({ cursor })\n\t\t\t}),\n\t\t\tlimit: 250,\n\t\t\t...Option.match(Option.fromUndefinedOr(config.spaceId), {\n\t\t\t\tonNone: () => ({}),\n\t\t\t\tonSome: (spaceId) => ({ \"space-id\": [spaceId] })\n\t\t\t})\n\t\t});\n\t\tconst batch = yield* invalidContent(Schema.decodeUnknownEffect(contentBatch)(response));\n\t\tconst next = batch._links?.next;\n\t\tif (next === void 0) return [[batch], Option.none()];\n\t\tconst cursor = (yield* invalidContent(Schema.decodeEffect(Schema.URLFromString)(String.startsWith(\"/\")(next) ? `https://confluence.invalid${next}` : next))).searchParams.get(\"cursor\");\n\t\tif (cursor === null || cursor === \"\" || Array.contains(pageState.visited, cursor)) return yield* Action.ActionHandlerError.make({ message: \"Confluence returned an invalid or repeated next cursor\" });\n\t\treturn [[batch], Option.some({\n\t\t\tcursor: Option.some(cursor),\n\t\t\tvisited: Array.append(pageState.visited, cursor)\n\t\t})];\n\t})), Stream.runCollect);\n\treturn Array.reduce(Array.flatMap(batches, (batch) => batch.results), {\n\t\tevents: Array.empty(),\n\t\tversions: saved ?? {}\n\t}, (current, payload) => {\n\t\tconst versions = Option.getOrElse(Record.get(current.versions, payload.id), () => []);\n\t\tif (Array.contains(versions, payload.version.number)) return current;\n\t\tconst created = !Record.has(current.versions, payload.id);\n\t\treturn {\n\t\t\tevents: saved !== void 0 && (config.event === \"changed\" || created && config.event === \"created\" || !created && config.event === \"updated\") ? Array.append(current.events, {\n\t\t\t\tkey: `${kind}:${payload.id}:${payload.version.number}`,\n\t\t\t\tpayload\n\t\t\t}) : current.events,\n\t\t\tversions: {\n\t\t\t\t...current.versions,\n\t\t\t\t[payload.id]: Array.append(versions, payload.version.number)\n\t\t\t}\n\t\t};\n\t});\n});\n//#endregion\nexport { handlers, triggers };\n\n//# sourceMappingURL=triggers.js.map"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "B05B65EA86CC202E64756E2164756E21",
9
+ "names": []
10
+ }