wrangler 0.0.0-e2f9bb2 → 0.0.0-e30d1013

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 (295) hide show
  1. package/Cloudflare_CA.pem +18 -0
  2. package/README.md +26 -4
  3. package/bin/wrangler.js +154 -34
  4. package/kv-asset-handler.js +1 -0
  5. package/miniflare-dist/index.mjs +1451 -21
  6. package/package.json +191 -148
  7. package/src/__tests__/access.test.ts +25 -0
  8. package/src/__tests__/api-dev.test.ts +209 -0
  9. package/src/__tests__/api-devregistry.test.js +56 -0
  10. package/src/__tests__/api.test.ts +80 -0
  11. package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
  12. package/src/__tests__/config-cache.test.ts +30 -24
  13. package/src/__tests__/configuration.test.ts +3970 -3114
  14. package/src/__tests__/d1.test.ts +74 -0
  15. package/src/__tests__/delete.test.ts +230 -0
  16. package/src/__tests__/deployments.test.ts +91 -0
  17. package/src/__tests__/dev.test.tsx +1484 -737
  18. package/src/__tests__/dialogs.test.tsx +40 -0
  19. package/src/__tests__/generate.test.ts +235 -0
  20. package/src/__tests__/get-host-from-url.test.ts +16 -0
  21. package/src/__tests__/guess-worker-format.test.ts +68 -68
  22. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  23. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  24. package/src/__tests__/helpers/mock-bin.ts +20 -20
  25. package/src/__tests__/helpers/mock-cfetch.ts +216 -94
  26. package/src/__tests__/helpers/mock-console.ts +58 -39
  27. package/src/__tests__/helpers/mock-dialogs.ts +115 -51
  28. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
  29. package/src/__tests__/helpers/mock-http-server.ts +30 -30
  30. package/src/__tests__/helpers/mock-istty.ts +65 -18
  31. package/src/__tests__/helpers/mock-known-routes.ts +7 -0
  32. package/src/__tests__/helpers/mock-kv.ts +27 -27
  33. package/src/__tests__/helpers/mock-oauth-flow.ts +225 -228
  34. package/src/__tests__/helpers/mock-process.ts +39 -0
  35. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  36. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  37. package/src/__tests__/helpers/msw/handlers/access.ts +13 -0
  38. package/src/__tests__/helpers/msw/handlers/deployments.ts +59 -0
  39. package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
  40. package/src/__tests__/helpers/msw/handlers/oauth.ts +36 -0
  41. package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
  42. package/src/__tests__/helpers/msw/handlers/script.ts +75 -0
  43. package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
  44. package/src/__tests__/helpers/msw/handlers/zones.ts +22 -0
  45. package/src/__tests__/helpers/msw/index.ts +21 -0
  46. package/src/__tests__/helpers/run-in-tmp.ts +27 -28
  47. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  48. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  49. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  50. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  51. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  52. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  53. package/src/__tests__/helpers/write-worker-source.ts +16 -16
  54. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  55. package/src/__tests__/https-options.test.ts +142 -109
  56. package/src/__tests__/index.test.ts +244 -231
  57. package/src/__tests__/init.test.ts +2872 -1014
  58. package/src/__tests__/jest.setup.ts +163 -30
  59. package/src/__tests__/kv.test.ts +1660 -1439
  60. package/src/__tests__/logger.test.ts +100 -74
  61. package/src/__tests__/metrics.test.ts +450 -0
  62. package/src/__tests__/middleware.scheduled.test.ts +135 -0
  63. package/src/__tests__/middleware.test.ts +726 -0
  64. package/src/__tests__/package-manager.test.ts +312 -165
  65. package/src/__tests__/pages.test.ts +2380 -322
  66. package/src/__tests__/parse.test.ts +253 -245
  67. package/src/__tests__/paths.test.ts +39 -0
  68. package/src/__tests__/publish.test.ts +7536 -4778
  69. package/src/__tests__/pubsub.test.ts +370 -0
  70. package/src/__tests__/queues.test.ts +371 -0
  71. package/src/__tests__/r2.test.ts +388 -209
  72. package/src/__tests__/route.test.ts +18 -18
  73. package/src/__tests__/secret.test.ts +624 -426
  74. package/src/__tests__/tail.test.ts +677 -567
  75. package/src/__tests__/test-old-node-version.js +31 -0
  76. package/src/__tests__/type-generation.test.ts +225 -0
  77. package/src/__tests__/user.test.ts +140 -116
  78. package/src/__tests__/utils-collectKeyValues.test.ts +47 -0
  79. package/src/__tests__/validate-dev-props.test.ts +56 -0
  80. package/src/__tests__/version.test.ts +35 -0
  81. package/src/__tests__/whoami.test.tsx +264 -91
  82. package/src/__tests__/worker-namespace.test.ts +326 -0
  83. package/src/abort.d.ts +3 -0
  84. package/src/api/dev.ts +208 -0
  85. package/src/api/index.ts +2 -0
  86. package/src/bundle-reporter.tsx +68 -0
  87. package/src/bundle.ts +781 -135
  88. package/src/cfetch/index.ts +123 -67
  89. package/src/cfetch/internal.ts +216 -90
  90. package/src/cli.ts +23 -8
  91. package/src/config/config.ts +236 -195
  92. package/src/config/diagnostics.ts +61 -61
  93. package/src/config/environment.ts +506 -339
  94. package/src/config/index.ts +309 -38
  95. package/src/config/validation-helpers.ts +379 -357
  96. package/src/config/validation.ts +1942 -1263
  97. package/src/config-cache.ts +81 -41
  98. package/src/create-worker-preview.ts +239 -132
  99. package/src/create-worker-upload-form.ts +300 -224
  100. package/src/d1/backups.tsx +218 -0
  101. package/src/d1/constants.ts +2 -0
  102. package/src/d1/create.tsx +63 -0
  103. package/src/d1/delete.tsx +56 -0
  104. package/src/d1/execute.tsx +344 -0
  105. package/src/d1/formatTimeAgo.ts +14 -0
  106. package/src/d1/index.ts +99 -0
  107. package/src/d1/list.tsx +48 -0
  108. package/src/d1/migrations.tsx +446 -0
  109. package/src/d1/options.ts +22 -0
  110. package/src/d1/types.tsx +24 -0
  111. package/src/d1/utils.ts +48 -0
  112. package/src/delete.ts +108 -0
  113. package/src/deployments.ts +77 -0
  114. package/src/deprecated/index.ts +438 -0
  115. package/src/dev/dev-vars.ts +20 -17
  116. package/src/dev/dev.tsx +522 -353
  117. package/src/dev/get-local-persistence-path.tsx +31 -0
  118. package/src/dev/local.tsx +726 -292
  119. package/src/dev/remote.tsx +591 -201
  120. package/src/dev/start-server.ts +519 -0
  121. package/src/dev/use-esbuild.ts +183 -97
  122. package/src/dev/validate-dev-props.ts +31 -0
  123. package/src/dev-registry.tsx +201 -0
  124. package/src/dev.tsx +868 -0
  125. package/src/dialogs.tsx +147 -65
  126. package/src/dispatch-namespace.ts +207 -0
  127. package/src/durable.ts +102 -0
  128. package/src/entry.ts +248 -186
  129. package/src/environment-variables.ts +38 -23
  130. package/src/errors.ts +6 -6
  131. package/src/git-client.ts +124 -0
  132. package/src/global-wrangler-config-path.ts +26 -0
  133. package/src/https-options.ts +84 -80
  134. package/src/index.tsx +632 -2564
  135. package/src/init.ts +970 -0
  136. package/src/inspect.ts +706 -562
  137. package/src/intl-polyfill.d.ts +123 -123
  138. package/src/is-ci.ts +14 -0
  139. package/src/is-interactive.ts +16 -0
  140. package/src/kv/helpers.ts +430 -0
  141. package/src/kv/index.ts +596 -0
  142. package/src/logger.ts +67 -41
  143. package/src/metrics/index.ts +5 -0
  144. package/src/metrics/metrics-config.ts +239 -0
  145. package/src/metrics/metrics-dispatcher.ts +96 -0
  146. package/src/metrics/metrics-usage-headers.ts +24 -0
  147. package/src/metrics/send-event.ts +94 -0
  148. package/src/miniflare-cli/assets.ts +215 -0
  149. package/src/miniflare-cli/index.ts +205 -33
  150. package/src/miniflare-cli/request-context.ts +18 -18
  151. package/src/module-collection.ts +221 -212
  152. package/src/open-in-browser.ts +5 -14
  153. package/src/package-manager.ts +182 -90
  154. package/src/pages/build.tsx +270 -0
  155. package/src/pages/constants.ts +18 -0
  156. package/src/pages/deployments.tsx +106 -0
  157. package/src/pages/dev.tsx +708 -0
  158. package/src/pages/errors.ts +66 -0
  159. package/src/pages/functions/buildPlugin.ts +106 -0
  160. package/src/pages/functions/buildWorker.ts +165 -0
  161. package/{pages → src/pages}/functions/filepath-routing.test.ts +113 -113
  162. package/src/pages/functions/filepath-routing.ts +189 -0
  163. package/src/pages/functions/identifiers.ts +78 -0
  164. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  165. package/src/pages/functions/routes-consolidation.ts +73 -0
  166. package/src/pages/functions/routes-transformation.test.ts +282 -0
  167. package/src/pages/functions/routes-transformation.ts +115 -0
  168. package/src/pages/functions/routes-validation.test.ts +403 -0
  169. package/src/pages/functions/routes-validation.ts +202 -0
  170. package/src/pages/functions/routes.ts +151 -0
  171. package/src/pages/functions.tsx +82 -0
  172. package/src/pages/hash.tsx +13 -0
  173. package/src/pages/index.tsx +94 -0
  174. package/src/pages/projects.tsx +169 -0
  175. package/src/pages/publish.tsx +446 -0
  176. package/src/pages/types.ts +49 -0
  177. package/src/pages/upload.tsx +425 -0
  178. package/src/pages/utils.ts +12 -0
  179. package/src/parse.ts +223 -120
  180. package/src/paths.ts +53 -8
  181. package/src/proxy.ts +623 -388
  182. package/src/publish/index.ts +270 -0
  183. package/src/publish/publish.ts +1035 -0
  184. package/src/pubsub/index.ts +286 -0
  185. package/src/pubsub/pubsub-commands.tsx +624 -0
  186. package/src/queues/cli/commands/consumer/add.ts +71 -0
  187. package/src/queues/cli/commands/consumer/index.ts +22 -0
  188. package/src/queues/cli/commands/consumer/remove.ts +38 -0
  189. package/src/queues/cli/commands/create.ts +25 -0
  190. package/src/queues/cli/commands/delete.ts +26 -0
  191. package/src/queues/cli/commands/index.ts +33 -0
  192. package/src/queues/cli/commands/list.ts +25 -0
  193. package/src/queues/client.ts +135 -0
  194. package/src/r2/constants.ts +4 -0
  195. package/src/r2/helpers.ts +131 -0
  196. package/src/r2/index.ts +289 -0
  197. package/src/routes.ts +140 -0
  198. package/src/secret/index.ts +378 -0
  199. package/src/selfsigned.d.ts +23 -23
  200. package/src/sites.tsx +281 -202
  201. package/src/tail/createTail.ts +315 -0
  202. package/src/tail/filters.ts +108 -110
  203. package/src/tail/index.ts +211 -296
  204. package/src/tail/printing.ts +86 -46
  205. package/src/type-generation.ts +173 -0
  206. package/src/update-check.ts +11 -11
  207. package/src/user/access.ts +69 -0
  208. package/src/user/choose-account.tsx +69 -0
  209. package/src/user/env-vars.ts +46 -0
  210. package/src/user/generate-auth-url.ts +33 -0
  211. package/src/user/generate-random-state.ts +16 -0
  212. package/src/user/index.ts +3 -0
  213. package/src/user/user.tsx +1192 -0
  214. package/src/utils/collectKeyValues.ts +14 -0
  215. package/src/whoami.tsx +141 -42
  216. package/src/worker.ts +174 -101
  217. package/src/yargs-types.ts +20 -0
  218. package/src/zones.ts +191 -0
  219. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  220. package/templates/checked-fetch.js +17 -0
  221. package/templates/d1-beta-facade.js +196 -0
  222. package/templates/experimental-local-cache-stubs.js +27 -0
  223. package/templates/first-party-worker-module-facade.ts +18 -0
  224. package/templates/format-dev-errors.ts +32 -0
  225. package/templates/init-tests/test-jest-new-worker.js +25 -0
  226. package/templates/init-tests/test-vitest-new-worker.js +26 -0
  227. package/templates/middleware/common.ts +62 -0
  228. package/templates/middleware/loader-modules.ts +84 -0
  229. package/templates/middleware/loader-sw.ts +213 -0
  230. package/templates/middleware/middleware-pretty-error.ts +40 -0
  231. package/templates/middleware/middleware-scheduled.ts +15 -0
  232. package/templates/new-worker-scheduled.js +17 -0
  233. package/templates/new-worker-scheduled.ts +32 -0
  234. package/templates/new-worker.js +3 -3
  235. package/templates/new-worker.ts +18 -3
  236. package/templates/no-op-worker.js +10 -0
  237. package/templates/pages-dev-pipeline.ts +28 -0
  238. package/templates/pages-dev-util.ts +52 -0
  239. package/templates/pages-shim.ts +9 -0
  240. package/templates/pages-template-plugin.ts +171 -0
  241. package/templates/pages-template-worker.ts +189 -0
  242. package/templates/serve-static-assets.ts +63 -0
  243. package/templates/service-bindings-module-facade.js +54 -0
  244. package/templates/service-bindings-sw-facade.js +42 -0
  245. package/templates/tsconfig.json +96 -95
  246. package/wrangler-dist/cli.d.ts +891 -0
  247. package/wrangler-dist/cli.js +101091 -50509
  248. package/pages/functions/buildPlugin.ts +0 -92
  249. package/pages/functions/buildWorker.ts +0 -138
  250. package/pages/functions/filepath-routing.ts +0 -189
  251. package/pages/functions/identifiers.ts +0 -78
  252. package/pages/functions/routes.ts +0 -156
  253. package/pages/functions/template-plugin.ts +0 -146
  254. package/pages/functions/template-worker.ts +0 -143
  255. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  256. package/src/kv.ts +0 -319
  257. package/src/miniflare-cli/enum-keys.ts +0 -17
  258. package/src/pages.tsx +0 -1866
  259. package/src/publish.ts +0 -469
  260. package/src/r2.ts +0 -50
  261. package/src/user.tsx +0 -1193
  262. package/templates/static-asset-facade.js +0 -47
  263. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  264. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  265. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  266. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  267. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  268. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  269. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  270. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  271. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  272. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  273. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  274. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  275. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  276. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  277. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  278. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  279. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  280. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  281. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  282. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  283. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  284. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  285. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  286. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  287. package/vendor/wrangler-mime/LICENSE +0 -21
  288. package/vendor/wrangler-mime/Mime.js +0 -97
  289. package/vendor/wrangler-mime/README.md +0 -187
  290. package/vendor/wrangler-mime/cli.js +0 -46
  291. package/vendor/wrangler-mime/index.js +0 -4
  292. package/vendor/wrangler-mime/lite.js +0 -4
  293. package/vendor/wrangler-mime/package.json +0 -52
  294. package/vendor/wrangler-mime/types/other.js +0 -1
  295. 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
  }