ntfy-reverse-proxy 0.0.0 → 2.0.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.
Files changed (199) hide show
  1. package/README.md +48 -0
  2. package/build/src/cli/commands/config-io.d.ts +5 -0
  3. package/build/src/cli/commands/config-io.d.ts.map +1 -0
  4. package/build/src/cli/commands/config-io.js +19 -0
  5. package/build/src/cli/commands/config-io.js.map +1 -0
  6. package/build/src/cli/commands/context.d.ts +9 -0
  7. package/build/src/cli/commands/context.d.ts.map +1 -0
  8. package/build/src/cli/commands/context.js +108 -0
  9. package/build/src/cli/commands/context.js.map +1 -0
  10. package/build/src/cli/commands/deploy.d.ts +4 -0
  11. package/build/src/cli/commands/deploy.d.ts.map +1 -0
  12. package/build/src/cli/commands/deploy.js +496 -0
  13. package/build/src/cli/commands/deploy.js.map +1 -0
  14. package/build/src/cli/commands/generate.d.ts +4 -0
  15. package/build/src/cli/commands/generate.d.ts.map +1 -0
  16. package/build/src/cli/commands/generate.js +68 -0
  17. package/build/src/cli/commands/generate.js.map +1 -0
  18. package/build/src/cli/commands/server.d.ts +7 -0
  19. package/build/src/cli/commands/server.d.ts.map +1 -0
  20. package/build/src/cli/commands/server.js +43 -0
  21. package/build/src/cli/commands/server.js.map +1 -0
  22. package/build/src/cli/commands/settings.d.ts +5 -0
  23. package/build/src/cli/commands/settings.d.ts.map +1 -0
  24. package/build/src/cli/commands/settings.js +16 -0
  25. package/build/src/cli/commands/settings.js.map +1 -0
  26. package/build/src/cli/commands/validate.d.ts +4 -0
  27. package/build/src/cli/commands/validate.d.ts.map +1 -0
  28. package/build/src/cli/commands/validate.js +45 -0
  29. package/build/src/cli/commands/validate.js.map +1 -0
  30. package/build/src/cli/index.d.ts +5 -0
  31. package/build/src/cli/index.d.ts.map +1 -0
  32. package/build/src/cli/index.js +118 -0
  33. package/build/src/cli/index.js.map +1 -0
  34. package/build/src/cli/menu/interactive.d.ts +4 -0
  35. package/build/src/cli/menu/interactive.d.ts.map +1 -0
  36. package/build/src/cli/menu/interactive.js +902 -0
  37. package/build/src/cli/menu/interactive.js.map +1 -0
  38. package/build/src/lib/item.d.ts +3 -0
  39. package/build/src/lib/item.d.ts.map +1 -0
  40. package/build/src/lib/item.js +3 -0
  41. package/build/src/lib/item.js.map +1 -0
  42. package/build/src/lib/regex.d.ts +30 -0
  43. package/build/src/lib/regex.d.ts.map +1 -0
  44. package/build/src/lib/regex.js +30 -0
  45. package/build/src/lib/regex.js.map +1 -0
  46. package/build/src/lib/schema.d.ts +167 -0
  47. package/build/src/lib/schema.d.ts.map +1 -0
  48. package/build/src/lib/schema.js +70 -0
  49. package/build/src/lib/schema.js.map +1 -0
  50. package/build/src/lib/utility.d.ts +4 -0
  51. package/build/src/lib/utility.d.ts.map +1 -0
  52. package/build/src/lib/utility.js +14 -0
  53. package/build/src/lib/utility.js.map +1 -0
  54. package/build/src/types/cli/commands/config-io.d.ts +38 -0
  55. package/build/src/types/cli/commands/context.d.ts +131 -0
  56. package/build/src/types/cli/commands/deploy.d.ts +622 -0
  57. package/build/src/types/cli/commands/generate.d.ts +51 -0
  58. package/build/src/types/cli/commands/server.d.ts +65 -0
  59. package/build/src/types/cli/commands/settings.d.ts +25 -0
  60. package/build/src/types/cli/commands/validate.d.ts +37 -0
  61. package/build/src/types/cli/index.d.ts +55 -0
  62. package/build/src/types/cli/menu/interactive.d.ts +381 -0
  63. package/build/src/types/fetch-response.d.ts +11 -0
  64. package/build/src/types/lib/schema.d.ts +134 -0
  65. package/build/src/types/lib/utility.d.ts +8 -0
  66. package/build/src/types/tests/cli/commands/context.test.d.ts +57 -0
  67. package/build/src/types/tests/cli/commands/generate.test.d.ts +12 -0
  68. package/build/src/types/tests/cli/commands/server.test.d.ts +45 -0
  69. package/build/src/types/tests/cli/commands/settings.test.d.ts +40 -0
  70. package/build/src/types/tests/cli/commands/validate.test.d.ts +19 -0
  71. package/build/src/types/tests/cli/menu/interactive.test.d.ts +6 -0
  72. package/build/src/types/tests/lib/schema.test.d.ts +10 -0
  73. package/build/src/types/tests/type-declarations.test.d.ts +173 -0
  74. package/build/src/types/tests/worker/index.test.d.ts +20 -0
  75. package/build/src/types/tests/worker/interpreters/ntfy-json.test.d.ts +19 -0
  76. package/build/src/types/tests/worker/interpreters/pfsense.test.d.ts +10 -0
  77. package/build/src/types/tests/worker/interpreters/plain-text.test.d.ts +10 -0
  78. package/build/src/types/tests/worker/interpreters/seerr.test.d.ts +8 -0
  79. package/build/src/types/tests/worker/interpreters/statuspage.test.d.ts +58 -0
  80. package/build/src/types/tests/worker/interpreters/synology.test.d.ts +8 -0
  81. package/build/src/types/tests/worker/interpreters/unifi.test.d.ts +8 -0
  82. package/build/src/types/tests/worker/landing/page.test.d.ts +55 -0
  83. package/build/src/types/tests/worker/pipeline/accumulate.test.d.ts +28 -0
  84. package/build/src/types/tests/worker/pipeline/authenticate.test.d.ts +9 -0
  85. package/build/src/types/tests/worker/pipeline/email.test.d.ts +15 -0
  86. package/build/src/types/tests/worker/pipeline/format.test.d.ts +38 -0
  87. package/build/src/types/tests/worker/pipeline/interpret.test.d.ts +43 -0
  88. package/build/src/types/tests/worker/pipeline/parse.test.d.ts +17 -0
  89. package/build/src/types/tests/worker/pipeline/receive.test.d.ts +23 -0
  90. package/build/src/types/tests/worker/pipeline/respond.test.d.ts +20 -0
  91. package/build/src/types/tests/worker/pipeline/route.test.d.ts +80 -0
  92. package/build/src/types/tests/worker/pipeline/send.test.d.ts +37 -0
  93. package/build/src/types/tests/worker/pipeline/split.test.d.ts +17 -0
  94. package/build/src/types/worker/index.d.ts +232 -0
  95. package/build/src/types/worker/interpreters/ntfy-json.d.ts +28 -0
  96. package/build/src/types/worker/interpreters/pfsense.d.ts +97 -0
  97. package/build/src/types/worker/interpreters/plain-text.d.ts +24 -0
  98. package/build/src/types/worker/interpreters/seerr.d.ts +124 -0
  99. package/build/src/types/worker/interpreters/statuspage.d.ts +239 -0
  100. package/build/src/types/worker/interpreters/synology.d.ts +99 -0
  101. package/build/src/types/worker/interpreters/unifi.d.ts +111 -0
  102. package/build/src/types/worker/landing/page.d.ts +44 -0
  103. package/build/src/types/worker/pipeline/accumulate.d.ts +79 -0
  104. package/build/src/types/worker/pipeline/authenticate.d.ts +68 -0
  105. package/build/src/types/worker/pipeline/email.d.ts +108 -0
  106. package/build/src/types/worker/pipeline/format.d.ts +47 -0
  107. package/build/src/types/worker/pipeline/interpret.d.ts +63 -0
  108. package/build/src/types/worker/pipeline/parse.d.ts +39 -0
  109. package/build/src/types/worker/pipeline/receive.d.ts +64 -0
  110. package/build/src/types/worker/pipeline/respond.d.ts +113 -0
  111. package/build/src/types/worker/pipeline/route.d.ts +34 -0
  112. package/build/src/types/worker/pipeline/send.d.ts +143 -0
  113. package/build/src/types/worker/pipeline/shared.d.ts +85 -0
  114. package/build/src/types/worker/pipeline/split.d.ts +35 -0
  115. package/build/src/worker/handlers.d.ts +5 -0
  116. package/build/src/worker/handlers.d.ts.map +1 -0
  117. package/build/src/worker/handlers.js +360 -0
  118. package/build/src/worker/handlers.js.map +1 -0
  119. package/build/src/worker/index.d.ts +4 -0
  120. package/build/src/worker/index.d.ts.map +1 -0
  121. package/build/src/worker/index.js +52 -0
  122. package/build/src/worker/index.js.map +1 -0
  123. package/build/src/worker/interpreters/ntfy-json.d.ts +4 -0
  124. package/build/src/worker/interpreters/ntfy-json.d.ts.map +1 -0
  125. package/build/src/worker/interpreters/ntfy-json.js +49 -0
  126. package/build/src/worker/interpreters/ntfy-json.js.map +1 -0
  127. package/build/src/worker/interpreters/pfsense.d.ts +4 -0
  128. package/build/src/worker/interpreters/pfsense.d.ts.map +1 -0
  129. package/build/src/worker/interpreters/pfsense.js +150 -0
  130. package/build/src/worker/interpreters/pfsense.js.map +1 -0
  131. package/build/src/worker/interpreters/plain-text.d.ts +4 -0
  132. package/build/src/worker/interpreters/plain-text.d.ts.map +1 -0
  133. package/build/src/worker/interpreters/plain-text.js +18 -0
  134. package/build/src/worker/interpreters/plain-text.js.map +1 -0
  135. package/build/src/worker/interpreters/seerr.d.ts +4 -0
  136. package/build/src/worker/interpreters/seerr.d.ts.map +1 -0
  137. package/build/src/worker/interpreters/seerr.js +173 -0
  138. package/build/src/worker/interpreters/seerr.js.map +1 -0
  139. package/build/src/worker/interpreters/statuspage.d.ts +4 -0
  140. package/build/src/worker/interpreters/statuspage.d.ts.map +1 -0
  141. package/build/src/worker/interpreters/statuspage.js +266 -0
  142. package/build/src/worker/interpreters/statuspage.js.map +1 -0
  143. package/build/src/worker/interpreters/synology.d.ts +4 -0
  144. package/build/src/worker/interpreters/synology.d.ts.map +1 -0
  145. package/build/src/worker/interpreters/synology.js +177 -0
  146. package/build/src/worker/interpreters/synology.js.map +1 -0
  147. package/build/src/worker/interpreters/unifi.d.ts +4 -0
  148. package/build/src/worker/interpreters/unifi.d.ts.map +1 -0
  149. package/build/src/worker/interpreters/unifi.js +152 -0
  150. package/build/src/worker/interpreters/unifi.js.map +1 -0
  151. package/build/src/worker/landing/page.d.ts +4 -0
  152. package/build/src/worker/landing/page.d.ts.map +1 -0
  153. package/build/src/worker/landing/page.js +260 -0
  154. package/build/src/worker/landing/page.js.map +1 -0
  155. package/build/src/worker/pipeline/accumulate.d.ts +7 -0
  156. package/build/src/worker/pipeline/accumulate.d.ts.map +1 -0
  157. package/build/src/worker/pipeline/accumulate.js +53 -0
  158. package/build/src/worker/pipeline/accumulate.js.map +1 -0
  159. package/build/src/worker/pipeline/authenticate.d.ts +4 -0
  160. package/build/src/worker/pipeline/authenticate.d.ts.map +1 -0
  161. package/build/src/worker/pipeline/authenticate.js +53 -0
  162. package/build/src/worker/pipeline/authenticate.js.map +1 -0
  163. package/build/src/worker/pipeline/email.d.ts +4 -0
  164. package/build/src/worker/pipeline/email.d.ts.map +1 -0
  165. package/build/src/worker/pipeline/email.js +149 -0
  166. package/build/src/worker/pipeline/email.js.map +1 -0
  167. package/build/src/worker/pipeline/format.d.ts +5 -0
  168. package/build/src/worker/pipeline/format.d.ts.map +1 -0
  169. package/build/src/worker/pipeline/format.js +48 -0
  170. package/build/src/worker/pipeline/format.js.map +1 -0
  171. package/build/src/worker/pipeline/interpret.d.ts +4 -0
  172. package/build/src/worker/pipeline/interpret.d.ts.map +1 -0
  173. package/build/src/worker/pipeline/interpret.js +30 -0
  174. package/build/src/worker/pipeline/interpret.js.map +1 -0
  175. package/build/src/worker/pipeline/parse.d.ts +4 -0
  176. package/build/src/worker/pipeline/parse.d.ts.map +1 -0
  177. package/build/src/worker/pipeline/parse.js +59 -0
  178. package/build/src/worker/pipeline/parse.js.map +1 -0
  179. package/build/src/worker/pipeline/receive.d.ts +4 -0
  180. package/build/src/worker/pipeline/receive.d.ts.map +1 -0
  181. package/build/src/worker/pipeline/receive.js +52 -0
  182. package/build/src/worker/pipeline/receive.js.map +1 -0
  183. package/build/src/worker/pipeline/respond.d.ts +4 -0
  184. package/build/src/worker/pipeline/respond.d.ts.map +1 -0
  185. package/build/src/worker/pipeline/respond.js +48 -0
  186. package/build/src/worker/pipeline/respond.js.map +1 -0
  187. package/build/src/worker/pipeline/route.d.ts +5 -0
  188. package/build/src/worker/pipeline/route.d.ts.map +1 -0
  189. package/build/src/worker/pipeline/route.js +23 -0
  190. package/build/src/worker/pipeline/route.js.map +1 -0
  191. package/build/src/worker/pipeline/send.d.ts +4 -0
  192. package/build/src/worker/pipeline/send.d.ts.map +1 -0
  193. package/build/src/worker/pipeline/send.js +156 -0
  194. package/build/src/worker/pipeline/send.js.map +1 -0
  195. package/build/src/worker/pipeline/split.d.ts +4 -0
  196. package/build/src/worker/pipeline/split.d.ts.map +1 -0
  197. package/build/src/worker/pipeline/split.js +40 -0
  198. package/build/src/worker/pipeline/split.js.map +1 -0
  199. package/package.json +95 -2
@@ -0,0 +1,48 @@
1
+ function format(notification, options) {
2
+ let body = notification['body'];
3
+ if (options['showVisitorInfo'] === true && options['cfProperties'] !== undefined) {
4
+ const cf = options['cfProperties'];
5
+ const ip = options['visitorIp'] ?? 'unknown';
6
+ const separator = (notification['markdown'] === true) ? '\n\n---\n\n' : '\n\n';
7
+ const isMarkdown = notification['markdown'] === true;
8
+ const bold = (text) => (isMarkdown === true) ? `**${text}**` : text;
9
+ const lines = [
10
+ bold('« Incoming Request Details »'),
11
+ `${bold('IP address')}: ${ip}`,
12
+ `${bold('Location')}: ${cf['region'] ?? 'Unknown'} (country: ${cf['country'] ?? 'Unknown'}, colo: ${cf['colo'] ?? 'Unknown'})`,
13
+ `${bold('Coordinates')}: ${cf['latitude'] ?? 'Unknown'}, ${cf['longitude'] ?? 'Unknown'}`,
14
+ `${bold('Provider')}: ${cf['asOrganization'] ?? 'Unknown'} (asn: ${String(cf['asn'] ?? 'Unknown')})`,
15
+ ];
16
+ body = `${body}${separator}${lines.join('\n')}`;
17
+ }
18
+ const headers = {};
19
+ if (notification['title'] !== undefined) {
20
+ Reflect.set(headers, 'X-Title', notification['title']);
21
+ }
22
+ if (notification['priority'] !== undefined) {
23
+ Reflect.set(headers, 'X-Priority', String(notification['priority']));
24
+ }
25
+ if (notification['tags'] !== undefined) {
26
+ Reflect.set(headers, 'X-Tags', notification['tags'].join(','));
27
+ }
28
+ if (notification['markdown'] !== undefined) {
29
+ Reflect.set(headers, 'X-Markdown', String(notification['markdown']));
30
+ }
31
+ if (notification['icon'] !== undefined) {
32
+ Reflect.set(headers, 'X-Icon', notification['icon']);
33
+ }
34
+ if (notification['actions'] !== undefined) {
35
+ Reflect.set(headers, 'X-Actions', notification['actions']);
36
+ }
37
+ if (notification['attach'] !== undefined) {
38
+ Reflect.set(headers, 'X-Attach', notification['attach']);
39
+ }
40
+ if (notification['filename'] !== undefined) {
41
+ Reflect.set(headers, 'X-Filename', notification['filename']);
42
+ }
43
+ return {
44
+ body, headers,
45
+ };
46
+ }
47
+ export { format, };
48
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../src/worker/pipeline/format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WorkerPipelineInterpretContext, WorkerPipelineInterpretInput, WorkerPipelineInterpretInterpreterName, WorkerPipelineInterpretReturns } from '../../types/worker/pipeline/interpret.d.ts';
2
+ declare function interpret(interpreterName: WorkerPipelineInterpretInterpreterName, input: WorkerPipelineInterpretInput, context?: WorkerPipelineInterpretContext): WorkerPipelineInterpretReturns;
3
+ export { interpret, };
4
+ //# sourceMappingURL=interpret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpret.d.ts","sourceRoot":"","sources":["../../../../src/worker/pipeline/interpret.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,8BAA8B,EAC9B,4BAA4B,EAE5B,sCAAsC,EAEtC,8BAA8B,EAE/B,MAAM,4CAA4C,CAAC;AA4BpD,iBAAe,SAAS,CAAC,eAAe,EAAE,sCAAsC,EAAE,KAAK,EAAE,4BAA4B,EAAE,OAAO,CAAC,EAAE,8BAA8B,GAAG,8BAA8B,CAc/L;AAED,OAAO,EACL,SAAS,GACV,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { stripHtml } from '../../lib/utility.js';
2
+ import { ntfyJsonInterpreter } from '../interpreters/ntfy-json.js';
3
+ import { pfsenseInterpreter } from '../interpreters/pfsense.js';
4
+ import { plainTextInterpreter } from '../interpreters/plain-text.js';
5
+ import { seerrInterpreter } from '../interpreters/seerr.js';
6
+ import { statuspageInterpreter } from '../interpreters/statuspage.js';
7
+ import { synologyInterpreter } from '../interpreters/synology.js';
8
+ import { unifiInterpreter } from '../interpreters/unifi.js';
9
+ const interpreterMap = {
10
+ 'plain-text': plainTextInterpreter,
11
+ 'ntfy-json': ntfyJsonInterpreter,
12
+ 'seerr': seerrInterpreter,
13
+ 'pfsense': pfsenseInterpreter,
14
+ 'synology': synologyInterpreter,
15
+ 'statuspage': statuspageInterpreter,
16
+ 'unifi': unifiInterpreter,
17
+ };
18
+ async function interpret(interpreterName, input, context) {
19
+ const interpreter = interpreterMap[interpreterName];
20
+ if (interpreter === undefined) {
21
+ throw new Error(`Unknown interpreter: ${interpreterName}`);
22
+ }
23
+ const result = await interpreter(input, context);
24
+ if (result !== null) {
25
+ Reflect.set(result['notification'], 'body', stripHtml(result['notification']['body']));
26
+ }
27
+ return result;
28
+ }
29
+ export { interpret, };
30
+ //# sourceMappingURL=interpret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpret.js","sourceRoot":"","sources":["../../../../src/worker/pipeline/interpret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAoB5D,MAAM,cAAc,GAA0C;IAC5D,YAAY,EAAE,oBAAoB;IAClC,WAAW,EAAE,mBAAmB;IAChC,OAAO,EAAE,gBAAgB;IACzB,SAAS,EAAE,kBAAkB;IAC7B,UAAU,EAAE,mBAAmB;IAC/B,YAAY,EAAE,qBAAqB;IACnC,OAAO,EAAE,gBAAgB;CAC1B,CAAC;AAUF,KAAK,UAAU,SAAS,CAAC,eAAuD,EAAE,KAAmC,EAAE,OAAwC;IAC7J,MAAM,WAAW,GAA+C,cAAc,CAAC,eAAe,CAAC,CAAC;IAEhG,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,wBAAwB,eAAe,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,MAAM,GAA6C,MAAM,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAE3F,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,OAAO,EACL,SAAS,GACV,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WorkerPipelineParseResult } from '../../types/worker/pipeline/parse.d.ts';
2
+ declare function parse(rawBody: ArrayBuffer, headers: Headers): WorkerPipelineParseResult;
3
+ export { parse, };
4
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../src/worker/pipeline/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAUV,yBAAyB,EAE1B,MAAM,wCAAwC,CAAC;AAUhD,iBAAS,KAAK,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,yBAAyB,CA6EhF;AAED,OAAO,EACL,KAAK,GACN,CAAC"}
@@ -0,0 +1,59 @@
1
+ function parse(rawBody, headers) {
2
+ if (rawBody.byteLength === 0) {
3
+ return { type: 'unknown' };
4
+ }
5
+ const contentType = headers.get('content-type') ?? '';
6
+ const contentTypePart = contentType.split(';')[0];
7
+ const baseContentType = (contentTypePart !== undefined) ? contentTypePart.trim() : '';
8
+ const isBinaryContentType = (baseContentType === 'application/octet-stream'
9
+ || baseContentType.startsWith('image/')
10
+ || baseContentType.startsWith('audio/')
11
+ || baseContentType.startsWith('video/'));
12
+ if (isBinaryContentType === true) {
13
+ return {
14
+ type: 'binary', binary: rawBody,
15
+ };
16
+ }
17
+ const bytes = new Uint8Array(rawBody);
18
+ for (let i = 0; i < bytes.length; i += 1) {
19
+ if (bytes[i] === 0) {
20
+ return {
21
+ type: 'binary', binary: rawBody,
22
+ };
23
+ }
24
+ }
25
+ let text = undefined;
26
+ try {
27
+ const decoder = new TextDecoder('utf-8', {
28
+ fatal: true, ignoreBOM: false,
29
+ });
30
+ text = decoder.decode(rawBody);
31
+ }
32
+ catch {
33
+ return {
34
+ type: 'binary', binary: rawBody,
35
+ };
36
+ }
37
+ if (text.includes('\u0000') === true) {
38
+ return {
39
+ type: 'binary', binary: rawBody,
40
+ };
41
+ }
42
+ const isJsonContentType = baseContentType === 'application/json';
43
+ const looksLikeJson = text.trimStart().startsWith('{') === true || text.trimStart().startsWith('[') === true;
44
+ if (isJsonContentType === true || looksLikeJson === true) {
45
+ try {
46
+ const json = JSON.parse(text);
47
+ return {
48
+ type: 'json', json,
49
+ };
50
+ }
51
+ catch {
52
+ }
53
+ }
54
+ return {
55
+ type: 'text', text,
56
+ };
57
+ }
58
+ export { parse, };
59
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../src/worker/pipeline/parse.ts"],"names":[],"mappings":"AAsBA,SAAS,KAAK,CAAC,OAAoB,EAAE,OAAgB;IAEnD,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,WAAW,GAAmC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IACtF,MAAM,eAAe,GAAuC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,eAAe,GAAuC,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAG1H,MAAM,mBAAmB,GAA2C,CAClE,eAAe,KAAK,0BAA0B;WAC3C,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC;WACpC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC;WACpC,eAAe,CAAC,UAAU,CAAC,QAAQ,CAAC,CACxC,CAAC;IAEF,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO;YACL,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO;SAChC,CAAC;IACJ,CAAC;IAGD,MAAM,KAAK,GAA6B,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO;gBACL,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO;aAChC,CAAC;QACJ,CAAC;IACH,CAAC;IAGD,IAAI,IAAI,GAA4B,SAAS,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,OAAO,GAA+B,IAAI,WAAW,CAAC,OAAO,EAAE;YACnE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK;SAC9B,CAAC,CAAC;QAEH,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO;SAChC,CAAC;IACJ,CAAC;IAGD,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;QACrC,OAAO;YACL,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO;SAChC,CAAC;IACJ,CAAC;IAGD,MAAM,iBAAiB,GAAyC,eAAe,KAAK,kBAAkB,CAAC;IACvG,MAAM,aAAa,GAAqC,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IAE/I,IAAI,iBAAiB,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,GAA4B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEvD,OAAO;gBACL,IAAI,EAAE,MAAM,EAAE,IAAI;aACnB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAGD,OAAO;QACL,IAAI,EAAE,MAAM,EAAE,IAAI;KACnB,CAAC;AACJ,CAAC;AAED,OAAO,EACL,KAAK,GACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WorkerPipelineReceiveBaseDomain, WorkerPipelineReceiveRequest, WorkerPipelineReceiveReturns } from '../../types/worker/pipeline/receive.d.ts';
2
+ declare function receive(request: WorkerPipelineReceiveRequest, baseDomain: WorkerPipelineReceiveBaseDomain): WorkerPipelineReceiveReturns;
3
+ export { receive, };
4
+ //# sourceMappingURL=receive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receive.d.ts","sourceRoot":"","sources":["../../../../src/worker/pipeline/receive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,+BAA+B,EAY/B,4BAA4B,EAC5B,4BAA4B,EAE7B,MAAM,0CAA0C,CAAC;AAUlD,iBAAe,OAAO,CAAC,OAAO,EAAE,4BAA4B,EAAE,UAAU,EAAE,+BAA+B,GAAG,4BAA4B,CA8DvI;AAED,OAAO,EACL,OAAO,GACR,CAAC"}
@@ -0,0 +1,52 @@
1
+ async function receive(request, baseDomain) {
2
+ const method = request.method;
3
+ const parsedUrl = new URL(request.url);
4
+ const hostname = parsedUrl.hostname;
5
+ const protocol = parsedUrl.protocol;
6
+ const url = request.url;
7
+ const headers = request.headers;
8
+ const includesBaseDomain = hostname.includes(baseDomain);
9
+ if (protocol === 'http:'
10
+ && hostname !== 'localhost'
11
+ && includesBaseDomain === true) {
12
+ const redirect = request.url.replace('http://', 'https://');
13
+ return {
14
+ method,
15
+ hostname,
16
+ url,
17
+ headers,
18
+ rawBody: new ArrayBuffer(0),
19
+ isGet: method === 'GET',
20
+ redirect,
21
+ };
22
+ }
23
+ if (method !== 'GET'
24
+ && method !== 'POST'
25
+ && method !== 'PUT') {
26
+ return {
27
+ method,
28
+ hostname,
29
+ url,
30
+ headers,
31
+ rawBody: new ArrayBuffer(0),
32
+ isGet: false,
33
+ error: `Method not allowed: ${method}`,
34
+ };
35
+ }
36
+ const rawBody = (method === 'POST' || method === 'PUT') ? await request.arrayBuffer() : new ArrayBuffer(0);
37
+ const isGet = method === 'GET';
38
+ const cfRequestUnknown = request;
39
+ const cfRequestRecord = cfRequestUnknown;
40
+ const cfProperties = cfRequestRecord['cf'];
41
+ return {
42
+ method,
43
+ hostname,
44
+ url,
45
+ headers,
46
+ rawBody,
47
+ isGet,
48
+ ...(cfProperties !== undefined ? { cfProperties } : {}),
49
+ };
50
+ }
51
+ export { receive, };
52
+ //# sourceMappingURL=receive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receive.js","sourceRoot":"","sources":["../../../../src/worker/pipeline/receive.ts"],"names":[],"mappings":"AA0BA,KAAK,UAAU,OAAO,CAAC,OAAqC,EAAE,UAA2C;IACvG,MAAM,MAAM,GAAgC,OAAO,CAAC,MAAM,CAAC;IAC3D,MAAM,SAAS,GAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAkC,SAAS,CAAC,QAAQ,CAAC;IACnE,MAAM,QAAQ,GAAkC,SAAS,CAAC,QAAQ,CAAC;IACnE,MAAM,GAAG,GAA6B,OAAO,CAAC,GAAG,CAAC;IAClD,MAAM,OAAO,GAAiC,OAAO,CAAC,OAAO,CAAC;IAG9D,MAAM,kBAAkB,GAA4C,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAElG,IACE,QAAQ,KAAK,OAAO;WACjB,QAAQ,KAAK,WAAW;WACxB,kBAAkB,KAAK,IAAI,EAC9B,CAAC;QACD,MAAM,QAAQ,GAAkC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QAE3F,OAAO;YACL,MAAM;YACN,QAAQ;YACR,GAAG;YACH,OAAO;YACP,OAAO,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC;YAC3B,KAAK,EAAE,MAAM,KAAK,KAAK;YACvB,QAAQ;SACT,CAAC;IACJ,CAAC;IAGD,IACE,MAAM,KAAK,KAAK;WACb,MAAM,KAAK,MAAM;WACjB,MAAM,KAAK,KAAK,EACnB,CAAC;QACD,OAAO;YACL,MAAM;YACN,QAAQ;YACR,GAAG;YACH,OAAO;YACP,OAAO,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC;YAC3B,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,uBAAuB,MAAM,EAAE;SACvC,CAAC;IACJ,CAAC;IAGD,MAAM,OAAO,GAAiC,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IACzI,MAAM,KAAK,GAA+B,MAAM,KAAK,KAAK,CAAC;IAC3D,MAAM,gBAAgB,GAA0C,OAAO,CAAC;IACxE,MAAM,eAAe,GAAyC,gBAAwD,CAAC;IACvH,MAAM,YAAY,GAAsC,eAAe,CAAC,IAAI,CAAsC,CAAC;IAEnH,OAAO;QACL,MAAM;QACN,QAAQ;QACR,GAAG;QACH,OAAO;QACP,OAAO;QACP,KAAK;QACL,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,OAAO,EACL,OAAO,GACR,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WorkerPipelineRespondOptions, WorkerPipelineRespondReturn, WorkerPipelineRespondSendResult } from '../../types/worker/pipeline/respond.d.ts';
2
+ declare function respond(sendResult: WorkerPipelineRespondSendResult, options: WorkerPipelineRespondOptions): WorkerPipelineRespondReturn;
3
+ export { respond, };
4
+ //# sourceMappingURL=respond.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respond.d.ts","sourceRoot":"","sources":["../../../../src/worker/pipeline/respond.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAaV,4BAA4B,EAG5B,2BAA2B,EAC3B,+BAA+B,EAGhC,MAAM,0CAA0C,CAAC;AAUlD,iBAAS,OAAO,CAAC,UAAU,EAAE,+BAA+B,EAAE,OAAO,EAAE,4BAA4B,GAAG,2BAA2B,CAwDhI;AAED,OAAO,EACL,OAAO,GACR,CAAC"}
@@ -0,0 +1,48 @@
1
+ function respond(sendResult, options) {
2
+ const results = sendResult['results'];
3
+ const fallbackNote = sendResult['fallbackNote'];
4
+ const showResponseOutput = options['showResponseOutput'];
5
+ const contextName = options['contextName'];
6
+ const interpreterName = options['interpreterName'];
7
+ const messageTitle = options['messageTitle'];
8
+ const bodySize = options['bodySize'];
9
+ const parts = options['parts'];
10
+ const hasAttachment = options['hasAttachment'];
11
+ const anySuccess = results.some((result) => result['success'] === true);
12
+ const allSuccess = results.every((result) => result['success'] === true);
13
+ const partialStatus = (anySuccess === true) ? 'partial' : 'failed';
14
+ const status = (allSuccess === true) ? 'success' : partialStatus;
15
+ const httpStatus = (anySuccess === true) ? 200 : 502;
16
+ const body = {
17
+ status,
18
+ };
19
+ if (fallbackNote !== undefined) {
20
+ Reflect.set(body, 'fallback_note', fallbackNote);
21
+ }
22
+ if (showResponseOutput === true) {
23
+ Reflect.set(body, 'context', contextName);
24
+ Reflect.set(body, 'interpreter', interpreterName);
25
+ const servers = results.map((result) => ({
26
+ name: result['name'],
27
+ status: result['status'],
28
+ success: result['success'],
29
+ stages: result['stages'],
30
+ }));
31
+ Reflect.set(body, 'servers', servers);
32
+ const message = {
33
+ title: messageTitle,
34
+ body_size: bodySize,
35
+ parts,
36
+ has_attachment: hasAttachment,
37
+ };
38
+ Reflect.set(body, 'message', message);
39
+ }
40
+ return new Response(JSON.stringify(body, null, 2), {
41
+ status: httpStatus,
42
+ headers: {
43
+ 'Content-Type': 'application/json',
44
+ },
45
+ });
46
+ }
47
+ export { respond, };
48
+ //# sourceMappingURL=respond.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respond.js","sourceRoot":"","sources":["../../../../src/worker/pipeline/respond.ts"],"names":[],"mappings":"AA8BA,SAAS,OAAO,CAAC,UAA2C,EAAE,OAAqC;IACjG,MAAM,OAAO,GAAiC,UAAU,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,YAAY,GAAsC,UAAU,CAAC,cAAc,CAAC,CAAC;IACnF,MAAM,kBAAkB,GAA4C,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClG,MAAM,WAAW,GAAqC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAyC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACzF,MAAM,YAAY,GAAsC,OAAO,CAAC,cAAc,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAkC,OAAO,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,KAAK,GAA+B,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAuC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEnF,MAAM,UAAU,GAAoC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;IACzG,MAAM,UAAU,GAAoC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;IAE1G,MAAM,aAAa,GAAgC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAChG,MAAM,MAAM,GAAgC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC;IAE9F,MAAM,UAAU,GAAoC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEtF,MAAM,IAAI,GAA8B;QACtC,MAAM;KACP,CAAC;IAEF,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;QAElD,MAAM,OAAO,GAAqC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACzE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;YACxB,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC;YAC1B,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;SACzB,CAAC,CAAC,CAAC;QAEJ,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAqC;YAChD,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,QAAQ;YACnB,KAAK;YACL,cAAc,EAAE,aAAa;SAC9B,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACjD,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EACL,OAAO,GACR,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { LibSchemaConfigSchema } from '../../types/lib/schema.d.ts';
2
+ import type { WorkerPipelineRouteIdentifier, WorkerPipelineRouteResult, WorkerPipelineRouteType } from '../../types/worker/pipeline/route.d.ts';
3
+ declare function route(routeType: WorkerPipelineRouteType, identifier: WorkerPipelineRouteIdentifier, config: LibSchemaConfigSchema): WorkerPipelineRouteResult;
4
+ export { route, };
5
+ //# sourceMappingURL=route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/worker/pipeline/route.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAyB,MAAM,6BAA6B,CAAC;AAChG,OAAO,KAAK,EAEV,6BAA6B,EAG7B,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,wCAAwC,CAAC;AAUhD,iBAAS,KAAK,CAAC,SAAS,EAAE,uBAAuB,EAAE,UAAU,EAAE,6BAA6B,EAAE,MAAM,EAAE,qBAAqB,GAAG,yBAAyB,CA0BtJ;AAED,OAAO,EACL,KAAK,GACN,CAAC"}
@@ -0,0 +1,23 @@
1
+ function route(routeType, identifier, config) {
2
+ const context = config['contexts'].find((ctx) => ctx['type'] === routeType && ctx['id'] === identifier);
3
+ if (context === undefined) {
4
+ return {
5
+ context: undefined,
6
+ resolvedServers: undefined,
7
+ primaryServer: undefined,
8
+ error: `No context found for ${routeType} identifier: ${identifier}`,
9
+ };
10
+ }
11
+ const resolvedServers = context['servers']
12
+ .map((serverName) => config['servers'].find((server) => server['name'] === serverName))
13
+ .filter((server) => server !== undefined);
14
+ const primaryServer = config['servers'].find((server) => server['name'] === context['primary_server']);
15
+ return {
16
+ context,
17
+ resolvedServers,
18
+ primaryServer,
19
+ error: undefined,
20
+ };
21
+ }
22
+ export { route, };
23
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../src/worker/pipeline/route.ts"],"names":[],"mappings":"AAkBA,SAAS,KAAK,CAAC,SAAkC,EAAE,UAAyC,EAAE,MAA6B;IACzH,MAAM,OAAO,GAA+B,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,CAAC;IAEpI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,eAAe,EAAE,SAAS;YAC1B,aAAa,EAAE,SAAS;YACxB,KAAK,EAAE,wBAAwB,SAAS,gBAAgB,UAAU,EAAE;SACrE,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAuC,OAAO,CAAC,SAAS,CAAC;SAC3E,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,CAAC;SACtF,MAAM,CAAC,CAAC,MAAM,EAAmC,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAE7E,MAAM,aAAa,GAAqC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAC5E,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,gBAAgB,CAAC,CACzD,CAAC;IAEF,OAAO;QACL,OAAO;QACP,eAAe;QACf,aAAa;QACb,KAAK,EAAE,SAAS;KACjB,CAAC;AACJ,CAAC;AAED,OAAO,EACL,KAAK,GACN,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { WorkerPipelineSendOptions, WorkerPipelineSendReturns } from '../../types/worker/pipeline/send.d.ts';
2
+ declare function send(options: WorkerPipelineSendOptions): WorkerPipelineSendReturns;
3
+ export { send, };
4
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../../src/worker/pipeline/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAcV,yBAAyB,EAOzB,yBAAyB,EAkB1B,MAAM,uCAAuC,CAAC;AA0J/C,iBAAe,IAAI,CAAC,OAAO,EAAE,yBAAyB,GAAG,yBAAyB,CA+DjF;AAED,OAAO,EACL,IAAI,GACL,CAAC"}
@@ -0,0 +1,156 @@
1
+ async function sendToServer(server, messages, topic, visitorIp, attachment, filename, attachmentHeaders) {
2
+ const stages = [];
3
+ const url = `${server['server']}/${topic}`;
4
+ let lastStatus = 0;
5
+ const totalParts = messages.length;
6
+ let partIndex = 0;
7
+ for (const message of messages) {
8
+ const partLabel = (totalParts > 1) ? `stage-1 (${String(partIndex + 1)}/${String(totalParts)})` : 'stage-1';
9
+ const headers = {
10
+ ...message['headers'],
11
+ Authorization: `Bearer ${server['token']}`,
12
+ };
13
+ if (visitorIp !== undefined) {
14
+ Reflect.set(headers, 'X-Forwarded-For', visitorIp);
15
+ }
16
+ try {
17
+ const response = await fetch(url, {
18
+ method: 'POST',
19
+ headers,
20
+ body: message['body'],
21
+ });
22
+ lastStatus = response.status;
23
+ if (response.ok === false) {
24
+ const stage = `${partLabel}: failed (HTTP ${String(response.status)})`;
25
+ stages.push(stage);
26
+ return {
27
+ name: server['name'],
28
+ success: false,
29
+ status: response.status,
30
+ stages,
31
+ error: `HTTP ${String(response.status)}`,
32
+ };
33
+ }
34
+ const okStage = `${partLabel}: ok`;
35
+ stages.push(okStage);
36
+ }
37
+ catch (err) {
38
+ const errorMessage = (err instanceof Error) ? err.message : 'Unknown error';
39
+ const stage = `${partLabel}: failed (${errorMessage})`;
40
+ stages.push(stage);
41
+ return {
42
+ name: server['name'],
43
+ success: false,
44
+ status: 0,
45
+ stages,
46
+ error: errorMessage,
47
+ };
48
+ }
49
+ partIndex += 1;
50
+ }
51
+ if (attachment !== undefined) {
52
+ const headers = {
53
+ Authorization: `Bearer ${server['token']}`,
54
+ ...attachmentHeaders,
55
+ };
56
+ if (visitorIp !== undefined) {
57
+ Reflect.set(headers, 'X-Forwarded-For', visitorIp);
58
+ }
59
+ if (filename !== undefined) {
60
+ Reflect.set(headers, 'X-Filename', filename);
61
+ }
62
+ try {
63
+ const response = await fetch(url, {
64
+ method: 'PUT',
65
+ headers,
66
+ body: attachment,
67
+ });
68
+ lastStatus = response.status;
69
+ if (response.ok === false) {
70
+ const stage = `stage-2: failed (HTTP ${String(response.status)})`;
71
+ stages.push(stage);
72
+ return {
73
+ name: server['name'],
74
+ success: false,
75
+ status: response.status,
76
+ stages,
77
+ error: `HTTP ${String(response.status)}`,
78
+ };
79
+ }
80
+ const okStage = 'stage-2: ok';
81
+ stages.push(okStage);
82
+ }
83
+ catch (err) {
84
+ const errorMessage = (err instanceof Error) ? err.message : 'Unknown error';
85
+ const stage = `stage-2: failed (${errorMessage})`;
86
+ stages.push(stage);
87
+ return {
88
+ name: server['name'],
89
+ success: false,
90
+ status: 0,
91
+ stages,
92
+ error: errorMessage,
93
+ };
94
+ }
95
+ }
96
+ return {
97
+ name: server['name'],
98
+ success: true,
99
+ status: lastStatus,
100
+ stages,
101
+ };
102
+ }
103
+ async function send(options) {
104
+ const messages = options['messages'];
105
+ const servers = options['servers'];
106
+ const primaryServer = options['primaryServer'];
107
+ const topic = options['topic'];
108
+ const mode = options['mode'];
109
+ const visitorIp = options['visitorIp'];
110
+ const attachment = options['attachment'];
111
+ const filename = options['filename'];
112
+ const attachmentHeaders = options['attachmentHeaders'];
113
+ if (mode === 'send-all') {
114
+ const results = await Promise.all(servers.map((server) => sendToServer(server, messages, topic, visitorIp, attachment, filename, attachmentHeaders)));
115
+ return {
116
+ results,
117
+ fallbackUsed: false,
118
+ };
119
+ }
120
+ const orderedServers = [
121
+ primaryServer,
122
+ ...servers.filter((server) => server['name'] !== primaryServer['name']),
123
+ ];
124
+ const results = [];
125
+ for (const server of orderedServers) {
126
+ const isFallback = server['name'] !== primaryServer['name'];
127
+ let messagesToSend = messages;
128
+ if (isFallback === true && messages.length > 0) {
129
+ const fallbackNote = `\u26A0\uFE0F Primary server "${primaryServer['name']}" was unreachable. This notification was delivered via "${server['name']}".\n\n`;
130
+ const firstMessage = messages[0];
131
+ const modifiedMessages = [
132
+ {
133
+ body: `${fallbackNote}${firstMessage['body']}`, headers: firstMessage['headers'],
134
+ },
135
+ ...messages.slice(1),
136
+ ];
137
+ messagesToSend = modifiedMessages;
138
+ }
139
+ const result = await sendToServer(server, messagesToSend, topic, visitorIp, attachment, filename, attachmentHeaders);
140
+ results.push(result);
141
+ if (result['success'] === true) {
142
+ const fallbackDeliveryNote = `Delivered via fallback server "${server['name']}"`;
143
+ return {
144
+ results,
145
+ fallbackUsed: isFallback,
146
+ fallbackNote: (isFallback === true) ? fallbackDeliveryNote : undefined,
147
+ };
148
+ }
149
+ }
150
+ return {
151
+ results,
152
+ fallbackUsed: false,
153
+ };
154
+ }
155
+ export { send, };
156
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../../src/worker/pipeline/send.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WorkerPipelineSplitBody, WorkerPipelineSplitMessagePartHeaders, WorkerPipelineSplitReturns } from '../../types/worker/pipeline/split.d.ts';
2
+ declare function split(body: WorkerPipelineSplitBody, headers: WorkerPipelineSplitMessagePartHeaders): WorkerPipelineSplitReturns;
3
+ export { split, };
4
+ //# sourceMappingURL=split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../../../src/worker/pipeline/split.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,uBAAuB,EAMvB,qCAAqC,EACrC,0BAA0B,EAE3B,MAAM,wCAAwC,CAAC;AAYhD,iBAAS,KAAK,CAAC,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,qCAAqC,GAAG,0BAA0B,CA2CxH;AAED,OAAO,EACL,KAAK,GACN,CAAC"}
@@ -0,0 +1,40 @@
1
+ const MAX_BYTES = 4000;
2
+ function split(body, headers) {
3
+ const encoder = new TextEncoder();
4
+ if (encoder.encode(body).length <= MAX_BYTES) {
5
+ return [{
6
+ body, headers,
7
+ }];
8
+ }
9
+ const chunks = [];
10
+ let currentChunk = '';
11
+ let currentBytes = 0;
12
+ for (const char of body) {
13
+ const charBytes = encoder.encode(char).length;
14
+ if (currentBytes + charBytes > MAX_BYTES) {
15
+ chunks.push(currentChunk);
16
+ currentChunk = char;
17
+ currentBytes = charBytes;
18
+ }
19
+ else {
20
+ currentChunk += char;
21
+ currentBytes += charBytes;
22
+ }
23
+ }
24
+ if (currentChunk.length > 0) {
25
+ chunks.push(currentChunk);
26
+ }
27
+ const total = chunks.length;
28
+ const baseTitle = headers['X-Title'] ?? 'Message';
29
+ return chunks.map((chunkBody, index) => {
30
+ const partHeaders = {
31
+ ...headers,
32
+ 'X-Title': `${baseTitle} (${index + 1}/${total})`,
33
+ };
34
+ return {
35
+ body: chunkBody, headers: partHeaders,
36
+ };
37
+ });
38
+ }
39
+ export { split, };
40
+ //# sourceMappingURL=split.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.js","sourceRoot":"","sources":["../../../../src/worker/pipeline/split.ts"],"names":[],"mappings":"AAaA,MAAM,SAAS,GAAG,IAAI,CAAC;AAUvB,SAAS,KAAK,CAAC,IAA6B,EAAE,OAA8C;IAC1F,MAAM,OAAO,GAA+B,IAAI,WAAW,EAAE,CAAC;IAE9D,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC7C,OAAO,CAAC;gBACN,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAA8B,EAAE,CAAC;IAC7C,IAAI,YAAY,GAAoC,EAAE,CAAC;IACvD,IAAI,YAAY,GAAoC,CAAC,CAAC;IAEtD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,SAAS,GAAiC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAE5E,IAAI,YAAY,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1B,YAAY,GAAG,IAAI,CAAC;YACpB,YAAY,GAAG,SAAS,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,YAAY,IAAI,IAAI,CAAC;YACrB,YAAY,IAAI,SAAS,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,KAAK,GAA6B,MAAM,CAAC,MAAM,CAAC;IACtD,MAAM,SAAS,GAAiC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IAEhF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QACrC,MAAM,WAAW,GAA0C;YACzD,GAAG,OAAO;YACV,SAAS,EAAE,GAAG,SAAS,KAAK,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG;SAClD,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW;SACtC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EACL,KAAK,GACN,CAAC"}