wrangler 0.0.0-e64812e → 0.0.0-e7a0cd5b

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 (291) hide show
  1. package/README.md +23 -3
  2. package/bin/wrangler.js +150 -62
  3. package/kv-asset-handler.js +1 -0
  4. package/miniflare-dist/index.mjs +1451 -21
  5. package/package.json +190 -152
  6. package/src/__tests__/access.test.ts +25 -0
  7. package/src/__tests__/api-dev.test.ts +209 -0
  8. package/src/__tests__/api-devregistry.test.js +57 -0
  9. package/src/__tests__/api.test.ts +80 -0
  10. package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
  11. package/src/__tests__/config-cache.test.ts +30 -24
  12. package/src/__tests__/configuration.test.ts +4017 -3363
  13. package/src/__tests__/d1.test.ts +72 -0
  14. package/src/__tests__/delete.test.ts +230 -0
  15. package/src/__tests__/deployments.test.ts +95 -0
  16. package/src/__tests__/dev.test.tsx +1480 -951
  17. package/src/__tests__/dialogs.test.tsx +40 -0
  18. package/src/__tests__/generate.test.ts +235 -0
  19. package/src/__tests__/get-host-from-url.test.ts +16 -0
  20. package/src/__tests__/guess-worker-format.test.ts +68 -68
  21. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  22. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  23. package/src/__tests__/helpers/mock-bin.ts +20 -20
  24. package/src/__tests__/helpers/mock-cfetch.ts +216 -94
  25. package/src/__tests__/helpers/mock-console.ts +58 -39
  26. package/src/__tests__/helpers/mock-dialogs.ts +94 -71
  27. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
  28. package/src/__tests__/helpers/mock-http-server.ts +30 -30
  29. package/src/__tests__/helpers/mock-istty.ts +65 -18
  30. package/src/__tests__/helpers/mock-known-routes.ts +7 -0
  31. package/src/__tests__/helpers/mock-kv.ts +27 -27
  32. package/src/__tests__/helpers/mock-oauth-flow.ts +225 -228
  33. package/src/__tests__/helpers/mock-process.ts +39 -0
  34. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  35. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  36. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  37. package/src/__tests__/helpers/msw/handlers/deployments.ts +59 -0
  38. package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
  39. package/src/__tests__/helpers/msw/handlers/oauth.ts +36 -0
  40. package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
  41. package/src/__tests__/helpers/msw/handlers/script.ts +75 -0
  42. package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
  43. package/src/__tests__/helpers/msw/handlers/zones.ts +22 -0
  44. package/src/__tests__/helpers/msw/index.ts +21 -0
  45. package/src/__tests__/helpers/run-in-tmp.ts +27 -28
  46. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  47. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  48. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  49. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  50. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  51. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  52. package/src/__tests__/helpers/write-worker-source.ts +16 -16
  53. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  54. package/src/__tests__/https-options.test.ts +142 -109
  55. package/src/__tests__/index.test.ts +239 -233
  56. package/src/__tests__/init.test.ts +2869 -1603
  57. package/src/__tests__/jest.setup.ts +159 -34
  58. package/src/__tests__/kv.test.ts +1660 -1466
  59. package/src/__tests__/logger.test.ts +100 -74
  60. package/src/__tests__/metrics.test.ts +450 -0
  61. package/src/__tests__/middleware.scheduled.test.ts +135 -0
  62. package/src/__tests__/middleware.test.ts +726 -0
  63. package/src/__tests__/package-manager.test.ts +303 -303
  64. package/src/__tests__/pages.test.ts +2204 -735
  65. package/src/__tests__/parse.test.ts +252 -252
  66. package/src/__tests__/paths.test.ts +39 -0
  67. package/src/__tests__/publish.test.ts +7543 -5351
  68. package/src/__tests__/pubsub.test.ts +370 -0
  69. package/src/__tests__/queues.test.ts +371 -0
  70. package/src/__tests__/r2.test.ts +371 -228
  71. package/src/__tests__/route.test.ts +18 -18
  72. package/src/__tests__/secret.test.ts +622 -459
  73. package/src/__tests__/tail.test.ts +677 -567
  74. package/src/__tests__/test-old-node-version.js +31 -0
  75. package/src/__tests__/type-generation.test.ts +217 -0
  76. package/src/__tests__/user.test.ts +140 -116
  77. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  78. package/src/__tests__/validate-dev-props.test.ts +56 -0
  79. package/src/__tests__/version.test.ts +35 -0
  80. package/src/__tests__/whoami.test.tsx +264 -91
  81. package/src/__tests__/worker-namespace.test.ts +326 -0
  82. package/src/abort.d.ts +1 -1
  83. package/src/api/dev.ts +208 -0
  84. package/src/api/index.ts +2 -0
  85. package/src/bundle-reporter.tsx +68 -0
  86. package/src/bundle.ts +746 -161
  87. package/src/cfetch/index.ts +120 -81
  88. package/src/cfetch/internal.ts +209 -91
  89. package/src/cli.ts +23 -8
  90. package/src/config/config.ts +236 -195
  91. package/src/config/diagnostics.ts +61 -61
  92. package/src/config/environment.ts +500 -357
  93. package/src/config/index.ts +310 -193
  94. package/src/config/validation-helpers.ts +379 -357
  95. package/src/config/validation.ts +1941 -1367
  96. package/src/config-cache.ts +81 -41
  97. package/src/create-worker-preview.ts +239 -142
  98. package/src/create-worker-upload-form.ts +305 -238
  99. package/src/d1/backups.tsx +218 -0
  100. package/src/d1/create.tsx +54 -0
  101. package/src/d1/delete.tsx +56 -0
  102. package/src/d1/execute.tsx +299 -0
  103. package/src/d1/formatTimeAgo.ts +14 -0
  104. package/src/d1/index.ts +76 -0
  105. package/src/d1/list.tsx +48 -0
  106. package/src/d1/options.ts +12 -0
  107. package/src/d1/types.tsx +14 -0
  108. package/src/d1/utils.ts +39 -0
  109. package/src/delete.ts +108 -0
  110. package/src/deployments.ts +74 -0
  111. package/src/deprecated/index.ts +438 -0
  112. package/src/dev/dev-vars.ts +20 -17
  113. package/src/dev/dev.tsx +520 -352
  114. package/src/dev/get-local-persistence-path.tsx +31 -0
  115. package/src/dev/local.tsx +697 -298
  116. package/src/dev/remote.tsx +591 -215
  117. package/src/dev/start-server.ts +513 -0
  118. package/src/dev/use-esbuild.ts +183 -97
  119. package/src/dev/validate-dev-props.ts +31 -0
  120. package/src/dev-registry.tsx +201 -0
  121. package/src/dev.tsx +869 -0
  122. package/src/dialogs.tsx +126 -98
  123. package/src/dispatch-namespace.ts +207 -0
  124. package/src/durable.ts +87 -87
  125. package/src/entry.ts +235 -228
  126. package/src/environment-variables.ts +38 -23
  127. package/src/errors.ts +6 -6
  128. package/src/git-client.ts +124 -0
  129. package/src/global-wrangler-config-path.ts +26 -0
  130. package/src/https-options.ts +84 -80
  131. package/src/index.tsx +627 -2807
  132. package/src/init.ts +970 -0
  133. package/src/inspect.ts +698 -593
  134. package/src/intl-polyfill.d.ts +123 -123
  135. package/src/is-ci.ts +14 -0
  136. package/src/is-interactive.ts +16 -0
  137. package/src/kv/helpers.ts +430 -0
  138. package/src/kv/index.ts +596 -0
  139. package/src/logger.ts +67 -41
  140. package/src/metrics/index.ts +5 -0
  141. package/src/metrics/metrics-config.ts +239 -0
  142. package/src/metrics/metrics-dispatcher.ts +96 -0
  143. package/src/metrics/metrics-usage-headers.ts +24 -0
  144. package/src/metrics/send-event.ts +94 -0
  145. package/src/miniflare-cli/assets.ts +215 -0
  146. package/src/miniflare-cli/index.ts +205 -33
  147. package/src/miniflare-cli/request-context.ts +18 -18
  148. package/src/module-collection.ts +221 -212
  149. package/src/open-in-browser.ts +4 -6
  150. package/src/package-manager.ts +173 -128
  151. package/src/pages/build.tsx +238 -0
  152. package/src/pages/constants.ts +18 -0
  153. package/src/pages/deployments.tsx +106 -0
  154. package/src/pages/dev.tsx +693 -0
  155. package/src/pages/errors.ts +66 -0
  156. package/src/pages/functions/buildPlugin.ts +110 -0
  157. package/src/pages/functions/buildWorker.ts +156 -0
  158. package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
  159. package/src/pages/functions/filepath-routing.ts +189 -0
  160. package/src/pages/functions/identifiers.ts +78 -0
  161. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  162. package/src/pages/functions/routes-consolidation.ts +73 -0
  163. package/src/pages/functions/routes-transformation.test.ts +282 -0
  164. package/src/pages/functions/routes-transformation.ts +115 -0
  165. package/src/pages/functions/routes-validation.test.ts +403 -0
  166. package/src/pages/functions/routes-validation.ts +202 -0
  167. package/src/pages/functions/routes.ts +151 -0
  168. package/src/pages/functions.tsx +82 -0
  169. package/src/pages/hash.tsx +13 -0
  170. package/src/pages/index.tsx +94 -0
  171. package/src/pages/projects.tsx +169 -0
  172. package/src/pages/publish.tsx +436 -0
  173. package/src/pages/types.ts +49 -0
  174. package/src/pages/upload.tsx +425 -0
  175. package/src/pages/utils.ts +12 -0
  176. package/src/parse.ts +209 -125
  177. package/src/paths.ts +53 -8
  178. package/src/proxy.ts +618 -394
  179. package/src/publish/index.ts +270 -0
  180. package/src/publish/publish.ts +1035 -0
  181. package/src/pubsub/index.ts +286 -0
  182. package/src/pubsub/pubsub-commands.tsx +624 -0
  183. package/src/queues/cli/commands/consumer/add.ts +71 -0
  184. package/src/queues/cli/commands/consumer/index.ts +22 -0
  185. package/src/queues/cli/commands/consumer/remove.ts +38 -0
  186. package/src/queues/cli/commands/create.ts +25 -0
  187. package/src/queues/cli/commands/delete.ts +26 -0
  188. package/src/queues/cli/commands/index.ts +33 -0
  189. package/src/queues/cli/commands/list.ts +25 -0
  190. package/src/queues/client.ts +135 -0
  191. package/src/r2/helpers.ts +131 -0
  192. package/src/r2/index.ts +277 -0
  193. package/src/routes.ts +140 -0
  194. package/src/secret/index.ts +379 -0
  195. package/src/selfsigned.d.ts +23 -23
  196. package/src/sites.tsx +280 -203
  197. package/src/tail/createTail.ts +315 -0
  198. package/src/tail/filters.ts +108 -110
  199. package/src/tail/index.ts +211 -296
  200. package/src/tail/printing.ts +86 -46
  201. package/src/type-generation.ts +159 -0
  202. package/src/update-check.ts +11 -11
  203. package/src/user/access.ts +69 -0
  204. package/src/user/choose-account.tsx +69 -0
  205. package/src/user/env-vars.ts +46 -0
  206. package/src/user/generate-auth-url.ts +33 -0
  207. package/src/user/generate-random-state.ts +16 -0
  208. package/src/user/index.ts +3 -0
  209. package/src/user/user.tsx +1192 -0
  210. package/src/utils/collectKeyValues.ts +14 -0
  211. package/src/whoami.tsx +141 -42
  212. package/src/worker.ts +168 -106
  213. package/src/yargs-types.ts +20 -0
  214. package/src/zones.ts +191 -0
  215. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  216. package/templates/checked-fetch.js +17 -0
  217. package/templates/d1-beta-facade.js +174 -0
  218. package/templates/experimental-local-cache-stubs.js +27 -0
  219. package/templates/first-party-worker-module-facade.ts +18 -0
  220. package/templates/format-dev-errors.ts +32 -0
  221. package/templates/init-tests/test-jest-new-worker.js +25 -0
  222. package/templates/init-tests/test-vitest-new-worker.js +26 -0
  223. package/templates/middleware/common.ts +62 -0
  224. package/templates/middleware/loader-modules.ts +84 -0
  225. package/templates/middleware/loader-sw.ts +213 -0
  226. package/templates/middleware/middleware-pretty-error.ts +40 -0
  227. package/templates/middleware/middleware-scheduled.ts +15 -0
  228. package/templates/new-worker-scheduled.js +3 -3
  229. package/templates/new-worker-scheduled.ts +15 -15
  230. package/templates/new-worker.js +3 -3
  231. package/templates/new-worker.ts +15 -15
  232. package/templates/no-op-worker.js +10 -0
  233. package/templates/pages-dev-pipeline.ts +28 -0
  234. package/templates/pages-dev-util.ts +52 -0
  235. package/templates/pages-shim.ts +9 -0
  236. package/templates/pages-template-plugin.ts +171 -0
  237. package/templates/pages-template-worker.ts +189 -0
  238. package/templates/serve-static-assets.ts +63 -0
  239. package/templates/service-bindings-module-facade.js +54 -0
  240. package/templates/service-bindings-sw-facade.js +42 -0
  241. package/templates/tsconfig.json +96 -95
  242. package/wrangler-dist/cli.d.ts +892 -0
  243. package/wrangler-dist/cli.js +145674 -108957
  244. package/pages/functions/buildPlugin.ts +0 -105
  245. package/pages/functions/buildWorker.ts +0 -151
  246. package/pages/functions/filepath-routing.ts +0 -189
  247. package/pages/functions/identifiers.ts +0 -78
  248. package/pages/functions/routes.ts +0 -156
  249. package/pages/functions/template-plugin.ts +0 -147
  250. package/pages/functions/template-worker.ts +0 -143
  251. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  252. package/src/kv.ts +0 -408
  253. package/src/miniflare-cli/enum-keys.ts +0 -17
  254. package/src/pages.tsx +0 -2038
  255. package/src/publish.ts +0 -583
  256. package/src/r2.ts +0 -50
  257. package/src/user.tsx +0 -1203
  258. package/templates/static-asset-facade.js +0 -47
  259. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  260. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  261. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  262. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  263. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  264. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  265. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  266. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  267. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  268. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  269. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  270. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  271. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  272. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  273. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  274. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  275. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  276. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  277. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  278. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  279. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  280. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  281. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  282. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  283. package/vendor/wrangler-mime/LICENSE +0 -21
  284. package/vendor/wrangler-mime/Mime.js +0 -97
  285. package/vendor/wrangler-mime/README.md +0 -187
  286. package/vendor/wrangler-mime/cli.js +0 -46
  287. package/vendor/wrangler-mime/index.js +0 -4
  288. package/vendor/wrangler-mime/lite.js +0 -4
  289. package/vendor/wrangler-mime/package.json +0 -52
  290. package/vendor/wrangler-mime/types/other.js +0 -1
  291. package/vendor/wrangler-mime/types/standard.js +0 -1
@@ -0,0 +1,315 @@
1
+ import WebSocket from "ws";
2
+ import { version as packageVersion } from "../../package.json";
3
+ import { fetchResult } from "../cfetch";
4
+ import type { TailFilterMessage, Outcome } from "./filters";
5
+ export type { TailCLIFilters } from "./filters";
6
+ export { translateCLICommandToFilterMessage } from "./filters";
7
+ export { jsonPrintLogs, prettyPrintLogs } from "./printing";
8
+ import type { Request } from "undici";
9
+
10
+ /**
11
+ * When creating a Tail, the response from the API contains
12
+ * - an ID used for identifying the tail
13
+ * - a URL to a WebSocket connection available for the tail to connect to
14
+ * - an expiration date when the tail is no longer guaranteed to be valid
15
+ */
16
+ type TailCreationApiResponse = {
17
+ id: string;
18
+ url: string;
19
+ expires_at: Date;
20
+ };
21
+
22
+ /**
23
+ * Generate a URL that, when `cfetch`ed, creates a tail.
24
+ *
25
+ * https://api.cloudflare.com/#worker-tail-logs-start-tail
26
+ *
27
+ * @param accountId the account ID associated with the worker to tail
28
+ * @param workerName the name of the worker to tail
29
+ * @returns a `cfetch`-ready URL for creating a new tail
30
+ */
31
+ function makeCreateTailUrl(
32
+ accountId: string,
33
+ workerName: string,
34
+ env: string | undefined
35
+ ): string {
36
+ return env
37
+ ? `/accounts/${accountId}/workers/services/${workerName}/environments/${env}/tails`
38
+ : `/accounts/${accountId}/workers/scripts/${workerName}/tails`;
39
+ }
40
+
41
+ /**
42
+ * Generate a URL that, when `cfetch`ed, deletes a tail
43
+ *
44
+ * https://api.cloudflare.com/#worker-tail-logs-delete-tail
45
+ *
46
+ * @param accountId the account ID associated with the worker we're tailing
47
+ * @param workerName the name of the worker we're tailing
48
+ * @param tailId the ID of the tail we want to delete
49
+ * @returns a `cfetch`-ready URL for deleting a tail
50
+ */
51
+ function makeDeleteTailUrl(
52
+ accountId: string,
53
+ workerName: string,
54
+ tailId: string,
55
+ env: string | undefined
56
+ ): string {
57
+ return env
58
+ ? `/accounts/${accountId}/workers/services/${workerName}/environments/${env}/tails/${tailId}`
59
+ : `/accounts/${accountId}/workers/scripts/${workerName}/tails/${tailId}`;
60
+ }
61
+
62
+ /**
63
+ * Create and connect to a tail.
64
+ *
65
+ * Under the hood, this function
66
+ * - Registers a new Tail with the API
67
+ * - Connects to the tail worker
68
+ * - Sends any filters over the connection
69
+ *
70
+ * @param accountId the account ID associated with the worker to tail
71
+ * @param workerName the name of the worker to tail
72
+ * @param filters A list of `TailAPIFilters` given to the tail
73
+ * @param debug Flag to run tail in debug mode
74
+ * @returns a websocket connection, an expiration, and a function to call to delete the tail
75
+ */
76
+ export async function createTail(
77
+ accountId: string,
78
+ workerName: string,
79
+ filters: TailFilterMessage,
80
+ debug: boolean,
81
+ env: string | undefined
82
+ ): Promise<{
83
+ tail: WebSocket;
84
+ expiration: Date;
85
+ deleteTail: () => Promise<void>;
86
+ }> {
87
+ // create the tail
88
+ const createTailUrl = makeCreateTailUrl(accountId, workerName, env);
89
+ const {
90
+ id: tailId,
91
+ url: websocketUrl,
92
+ expires_at: expiration,
93
+ } = await fetchResult<TailCreationApiResponse>(createTailUrl, {
94
+ method: "POST",
95
+ body: JSON.stringify(filters),
96
+ });
97
+
98
+ // delete the tail (not yet!)
99
+ const deleteUrl = makeDeleteTailUrl(accountId, workerName, tailId, env);
100
+ async function deleteTail() {
101
+ await fetchResult(deleteUrl, { method: "DELETE" });
102
+ }
103
+
104
+ // connect to the tail
105
+ const tail = new WebSocket(websocketUrl, "trace-v1", {
106
+ headers: {
107
+ "Sec-WebSocket-Protocol": "trace-v1", // needs to be `trace-v1` to be accepted
108
+ "User-Agent": `wrangler-js/${packageVersion}`,
109
+ },
110
+ });
111
+
112
+ // send filters when we open up
113
+ tail.on("open", function () {
114
+ tail.send(
115
+ JSON.stringify({ debug: debug }),
116
+ { binary: false, compress: false, mask: false, fin: true },
117
+ (err) => {
118
+ if (err) {
119
+ throw err;
120
+ }
121
+ }
122
+ );
123
+ });
124
+
125
+ return { tail, expiration, deleteTail };
126
+ }
127
+
128
+ /**
129
+ * Everything captured by the trace worker and sent to us via
130
+ * `wrangler tail` is structured JSON that deserializes to this type.
131
+ */
132
+ export type TailEventMessage = {
133
+ /**
134
+ * Whether the execution of this worker succeeded or failed
135
+ */
136
+ outcome: Outcome;
137
+
138
+ /**
139
+ * The name of the script we're tailing
140
+ */
141
+ scriptName?: string;
142
+
143
+ /**
144
+ * Any exceptions raised by the worker
145
+ */
146
+ exceptions: {
147
+ /**
148
+ * The name of the exception.
149
+ */
150
+ name: string;
151
+
152
+ /**
153
+ * The error message
154
+ */
155
+ message: unknown;
156
+
157
+ /**
158
+ * When the exception was raised/thrown
159
+ */
160
+ timestamp: number;
161
+ }[];
162
+
163
+ /**
164
+ * Any logs sent out by the worker
165
+ */
166
+ logs: {
167
+ message: unknown[];
168
+ level: string; // TODO: make this a union of possible values
169
+ timestamp: number;
170
+ }[];
171
+
172
+ /**
173
+ * When the event was triggered
174
+ */
175
+ eventTimestamp: number;
176
+
177
+ /**
178
+ * The event that triggered the worker. In the case of an HTTP request,
179
+ * this will be a RequestEvent. If it's a cron trigger, it'll be a
180
+ * ScheduledEvent. If it's a durable object alarm, it's an AlarmEvent.
181
+ *
182
+ * Until workers-types exposes individual types for export, we'll have
183
+ * to just re-define these types ourselves.
184
+ */
185
+ event: RequestEvent | ScheduledEvent | AlarmEvent | undefined | null;
186
+ };
187
+
188
+ /**
189
+ * A request that triggered worker execution
190
+ */
191
+
192
+ export type RequestEvent = {
193
+ request: Pick<Request, "url" | "method" | "headers"> & {
194
+ /**
195
+ * Cloudflare-specific properties
196
+ * https://developers.cloudflare.com/workers/runtime-apis/request#incomingrequestcfproperties
197
+ */
198
+ cf: {
199
+ /**
200
+ * How long (in ms) it took for the client's TCP connection to make a
201
+ * round trip to the worker and back. For all my gamers out there,
202
+ * this is the request's ping
203
+ */
204
+ clientTcpRtt?: number;
205
+
206
+ /**
207
+ * Longitude and Latitude of where the request originated from
208
+ */
209
+ longitude?: string;
210
+ latitude?: string;
211
+
212
+ /**
213
+ * What cipher was used to establish the TLS connection
214
+ */
215
+ tlsCipher: string;
216
+
217
+ /**
218
+ * Which continent the request came from.
219
+ */
220
+ continent?: "NA";
221
+
222
+ /**
223
+ * ASN of the incoming request
224
+ */
225
+ asn: number;
226
+
227
+ /**
228
+ * The country the incoming request is coming from
229
+ */
230
+ country?: string;
231
+
232
+ /**
233
+ * The TLS version the connection used
234
+ */
235
+ tlsVersion: string;
236
+
237
+ /**
238
+ * The colo that processed the request (i.e. the airport code
239
+ * of the closest city to the server that spun up the worker)
240
+ */
241
+ colo: string;
242
+
243
+ /**
244
+ * The timezone where the request came from
245
+ */
246
+ timezone?: string;
247
+
248
+ /**
249
+ * The city where the request came from
250
+ */
251
+ city?: string;
252
+
253
+ /**
254
+ * The browser-requested prioritization information in the request object
255
+ */
256
+ requestPriority?: string;
257
+
258
+ /**
259
+ * Which version of HTTP the request came over e.g. "HTTP/2"
260
+ */
261
+ httpProtocol: string;
262
+
263
+ /**
264
+ * The region where the request originated from
265
+ */
266
+ region?: string;
267
+ regionCode?: string;
268
+
269
+ /**
270
+ * The organization which owns the ASN of the incoming request, for example, Google Cloud.
271
+ */
272
+ asOrganization: string;
273
+
274
+ /**
275
+ * Metro code (DMA) of the incoming request, for example, "635".
276
+ */
277
+ metroCode?: string;
278
+
279
+ /**
280
+ * Postal code of the incoming request, for example, "78701".
281
+ */
282
+ postalCode?: string;
283
+ };
284
+ };
285
+ };
286
+
287
+ /**
288
+ * An event that was triggered at a certain time
289
+ */
290
+ export type ScheduledEvent = {
291
+ /**
292
+ * The cron pattern that matched when this event fired
293
+ */
294
+ cron: string;
295
+
296
+ /**
297
+ * The time this worker was scheduled to run.
298
+ * For some reason, this doesn't...work correctly when we
299
+ * do it directly as a Date. So parse it later on your own.
300
+ */
301
+ scheduledTime: number;
302
+ };
303
+
304
+ /**
305
+ * A event that was triggered from a durable object alarm
306
+ */
307
+ export type AlarmEvent = {
308
+ /**
309
+ * The datetime the alarm was scheduled for.
310
+ *
311
+ * This is sent as an ISO timestamp string (different than ScheduledEvent.scheduledTime),
312
+ * you should parse it later on on your own.
313
+ */
314
+ scheduledTime: string;
315
+ };
@@ -17,12 +17,12 @@
17
17
  * CLI description or see the documentation for `ApiFilter`.
18
18
  */
19
19
  export type TailCLIFilters = {
20
- status?: ("ok" | "error" | "canceled")[];
21
- header?: string;
22
- method?: string[];
23
- search?: string;
24
- samplingRate?: number;
25
- clientIp?: string[];
20
+ status?: ("ok" | "error" | "canceled")[];
21
+ header?: string;
22
+ method?: string[];
23
+ search?: string;
24
+ samplingRate?: number;
25
+ clientIp?: string[];
26
26
  };
27
27
 
28
28
  /**
@@ -33,12 +33,12 @@ export type TailCLIFilters = {
33
33
  * TailAPIFilter to be the union of those types.
34
34
  */
35
35
  export type TailAPIFilter =
36
- | SamplingRateFilter
37
- | OutcomeFilter
38
- | MethodFilter
39
- | HeaderFilter
40
- | ClientIPFilter
41
- | QueryFilter;
36
+ | SamplingRateFilter
37
+ | OutcomeFilter
38
+ | MethodFilter
39
+ | HeaderFilter
40
+ | ClientIPFilter
41
+ | QueryFilter;
42
42
 
43
43
  /**
44
44
  * Filters logs based on a given sampling rate.
@@ -46,33 +46,34 @@ export type TailAPIFilter =
46
46
  * logs through.
47
47
  */
48
48
  type SamplingRateFilter = {
49
- sampling_rate: number;
49
+ sampling_rate: number;
50
50
  };
51
51
 
52
52
  /**
53
53
  * Filters logs based on the outcome of the worker's event handler.
54
54
  */
55
55
  type OutcomeFilter = {
56
- outcome: Outcome[];
56
+ outcome: Outcome[];
57
57
  };
58
58
 
59
59
  /**
60
60
  * There are five possible outcomes we can get, three of which
61
- * (exception, exceededCpu, and unknown) are considered errors
61
+ * (exception, exceededCpu, exceededMemory, and unknown) are considered errors
62
62
  */
63
63
  export type Outcome =
64
- | "ok"
65
- | "canceled"
66
- | "exception"
67
- | "exceededCpu"
68
- | "unknown";
64
+ | "ok"
65
+ | "canceled"
66
+ | "exception"
67
+ | "exceededCpu"
68
+ | "exceededMemory"
69
+ | "unknown";
69
70
 
70
71
  /**
71
72
  * Filters logs based on the HTTP method used for the request
72
73
  * that triggered the worker.
73
74
  */
74
75
  type MethodFilter = {
75
- method: string[];
76
+ method: string[];
76
77
  };
77
78
 
78
79
  /**
@@ -80,21 +81,21 @@ type MethodFilter = {
80
81
  * triggered the worker.
81
82
  */
82
83
  type HeaderFilter = {
83
- header: {
84
- /**
85
- * Filters on the header "key", e.g. "X-CLOUDFLARE-HEADER"
86
- * or "X-CUSTOM-HEADER"
87
- */
88
- key: string;
89
-
90
- /**
91
- * Filters on the header "value", e.g. if this is set to
92
- * "filter-for-me" and the "key" is "X-SHOULD-LOG", only
93
- * events triggered by requests with the header
94
- * "X-SHOULD-LOG:filter-for-me" will be logged.
95
- */
96
- query?: string;
97
- };
84
+ header: {
85
+ /**
86
+ * Filters on the header "key", e.g. "X-CLOUDFLARE-HEADER"
87
+ * or "X-CUSTOM-HEADER"
88
+ */
89
+ key: string;
90
+
91
+ /**
92
+ * Filters on the header "value", e.g. if this is set to
93
+ * "filter-for-me" and the "key" is "X-SHOULD-LOG", only
94
+ * events triggered by requests with the header
95
+ * "X-SHOULD-LOG:filter-for-me" will be logged.
96
+ */
97
+ query?: string;
98
+ };
98
99
  };
99
100
 
100
101
  /**
@@ -103,7 +104,7 @@ type HeaderFilter = {
103
104
  * address that is running `wrangler tail`
104
105
  */
105
106
  type ClientIPFilter = {
106
- client_ip: string[];
107
+ client_ip: string[];
107
108
  };
108
109
 
109
110
  /**
@@ -112,7 +113,7 @@ type ClientIPFilter = {
112
113
  * that don't will be discarded by the tail worker.
113
114
  */
114
115
  type QueryFilter = {
115
- query: string;
116
+ query: string;
116
117
  };
117
118
 
118
119
  /**
@@ -120,8 +121,7 @@ type QueryFilter = {
120
121
  * filters and a debug flag.
121
122
  */
122
123
  export type TailFilterMessage = {
123
- filters: TailAPIFilter[];
124
- debug: boolean;
124
+ filters: TailAPIFilter[];
125
125
  };
126
126
 
127
127
  /**
@@ -129,43 +129,40 @@ export type TailFilterMessage = {
129
129
  * into a message that we can send to the tail worker.
130
130
  *
131
131
  * @param cliFilters An object containing all the filters passed in from the CLI
132
- * @param debug Whether or not we should be in debug mode
133
132
  * @returns A filter message ready to be sent to the tail worker
134
133
  */
135
134
  export function translateCLICommandToFilterMessage(
136
- cliFilters: TailCLIFilters,
137
- debug: boolean
135
+ cliFilters: TailCLIFilters
138
136
  ): TailFilterMessage {
139
- const apiFilters: TailAPIFilter[] = [];
137
+ const apiFilters: TailAPIFilter[] = [];
140
138
 
141
- if (cliFilters.samplingRate) {
142
- apiFilters.push(parseSamplingRate(cliFilters.samplingRate));
143
- }
139
+ if (cliFilters.samplingRate) {
140
+ apiFilters.push(parseSamplingRate(cliFilters.samplingRate));
141
+ }
144
142
 
145
- if (cliFilters.status) {
146
- apiFilters.push(parseOutcome(cliFilters.status));
147
- }
143
+ if (cliFilters.status) {
144
+ apiFilters.push(parseOutcome(cliFilters.status));
145
+ }
148
146
 
149
- if (cliFilters.method) {
150
- apiFilters.push(parseMethod(cliFilters.method));
151
- }
147
+ if (cliFilters.method) {
148
+ apiFilters.push(parseMethod(cliFilters.method));
149
+ }
152
150
 
153
- if (cliFilters.header) {
154
- apiFilters.push(parseHeader(cliFilters.header));
155
- }
151
+ if (cliFilters.header) {
152
+ apiFilters.push(parseHeader(cliFilters.header));
153
+ }
156
154
 
157
- if (cliFilters.clientIp) {
158
- apiFilters.push(parseIP(cliFilters.clientIp));
159
- }
155
+ if (cliFilters.clientIp) {
156
+ apiFilters.push(parseIP(cliFilters.clientIp));
157
+ }
160
158
 
161
- if (cliFilters.search) {
162
- apiFilters.push(parseQuery(cliFilters.search));
163
- }
159
+ if (cliFilters.search) {
160
+ apiFilters.push(parseQuery(cliFilters.search));
161
+ }
164
162
 
165
- return {
166
- filters: apiFilters,
167
- debug,
168
- };
163
+ return {
164
+ filters: apiFilters,
165
+ };
169
166
  }
170
167
 
171
168
  /**
@@ -176,13 +173,13 @@ export function translateCLICommandToFilterMessage(
176
173
  * @returns a SamplingRateFilter for use with the API
177
174
  */
178
175
  function parseSamplingRate(sampling_rate: number): SamplingRateFilter {
179
- if (sampling_rate <= 0 || sampling_rate >= 1) {
180
- throw new Error(
181
- "A sampling rate must be between 0 and 1 in order to have any effect.\nFor example, a sampling rate of 0.25 means 25% of events will be logged."
182
- );
183
- }
176
+ if (sampling_rate <= 0 || sampling_rate >= 1) {
177
+ throw new Error(
178
+ "A sampling rate must be between 0 and 1 in order to have any effect.\nFor example, a sampling rate of 0.25 means 25% of events will be logged."
179
+ );
180
+ }
184
181
 
185
- return { sampling_rate };
182
+ return { sampling_rate };
186
183
  }
187
184
 
188
185
  /**
@@ -193,34 +190,35 @@ function parseSamplingRate(sampling_rate: number): SamplingRateFilter {
193
190
  * @returns an OutcomeFilter for use with the API
194
191
  */
195
192
  function parseOutcome(
196
- statuses: ("ok" | "error" | "canceled")[]
193
+ statuses: ("ok" | "error" | "canceled")[]
197
194
  ): OutcomeFilter {
198
- const outcomes = new Set<Outcome>();
199
-
200
- for (const status of statuses) {
201
- switch (status) {
202
- case "ok":
203
- outcomes.add("ok");
204
- break;
205
-
206
- case "canceled":
207
- outcomes.add("canceled");
208
- break;
209
-
210
- case "error":
211
- outcomes.add("exception");
212
- outcomes.add("exceededCpu");
213
- outcomes.add("unknown");
214
- break;
215
-
216
- default:
217
- break;
218
- }
219
- }
220
-
221
- return {
222
- outcome: Array.from(outcomes),
223
- };
195
+ const outcomes = new Set<Outcome>();
196
+
197
+ for (const status of statuses) {
198
+ switch (status) {
199
+ case "ok":
200
+ outcomes.add("ok");
201
+ break;
202
+
203
+ case "canceled":
204
+ outcomes.add("canceled");
205
+ break;
206
+
207
+ case "error":
208
+ outcomes.add("exception");
209
+ outcomes.add("exceededCpu");
210
+ outcomes.add("exceededMemory");
211
+ outcomes.add("unknown");
212
+ break;
213
+
214
+ default:
215
+ break;
216
+ }
217
+ }
218
+
219
+ return {
220
+ outcome: Array.from(outcomes),
221
+ };
224
222
  }
225
223
 
226
224
  /**
@@ -231,7 +229,7 @@ function parseOutcome(
231
229
  * @returns a MethodFilter for use with the API
232
230
  */
233
231
  function parseMethod(method: string[]): MethodFilter {
234
- return { method };
232
+ return { method };
235
233
  }
236
234
 
237
235
  /**
@@ -243,14 +241,14 @@ function parseMethod(method: string[]): MethodFilter {
243
241
  * @returns a HeaderFilter for use with the API
244
242
  */
245
243
  function parseHeader(header: string): HeaderFilter {
246
- const [headerKey, headerQuery] = header.split(":", 2);
247
-
248
- return {
249
- header: {
250
- key: headerKey.trim(),
251
- query: headerQuery?.trim(),
252
- },
253
- };
244
+ const [headerKey, headerQuery] = header.split(":", 2);
245
+
246
+ return {
247
+ header: {
248
+ key: headerKey.trim(),
249
+ query: headerQuery?.trim(),
250
+ },
251
+ };
254
252
  }
255
253
 
256
254
  /**
@@ -263,7 +261,7 @@ function parseHeader(header: string): HeaderFilter {
263
261
  * @returns a ClientIPFilter for use with the API
264
262
  */
265
263
  function parseIP(client_ip: string[]): ClientIPFilter {
266
- return { client_ip };
264
+ return { client_ip };
267
265
  }
268
266
 
269
267
  /**
@@ -275,5 +273,5 @@ function parseIP(client_ip: string[]): ClientIPFilter {
275
273
  * @returns a QueryFilter for use with the API
276
274
  */
277
275
  function parseQuery(query: string): QueryFilter {
278
- return { query };
276
+ return { query };
279
277
  }