alchemy 0.70.2 → 0.71.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 (88) hide show
  1. package/bin/alchemy.js +13 -15
  2. package/bin/commands/init.ts +0 -10
  3. package/lib/apply.d.ts.map +1 -1
  4. package/lib/apply.js +2 -0
  5. package/lib/apply.js.map +1 -1
  6. package/lib/cloudflare/bindings.d.ts +12 -2
  7. package/lib/cloudflare/bindings.d.ts.map +1 -1
  8. package/lib/cloudflare/bindings.js.map +1 -1
  9. package/lib/cloudflare/bound.d.ts +3 -2
  10. package/lib/cloudflare/bound.d.ts.map +1 -1
  11. package/lib/cloudflare/bucket.d.ts +6 -0
  12. package/lib/cloudflare/bucket.d.ts.map +1 -1
  13. package/lib/cloudflare/bucket.js +5 -3
  14. package/lib/cloudflare/bucket.js.map +1 -1
  15. package/lib/cloudflare/bun-spa/bun-spa.d.ts +6 -1
  16. package/lib/cloudflare/bun-spa/bun-spa.d.ts.map +1 -1
  17. package/lib/cloudflare/bun-spa/bun-spa.js +29 -9
  18. package/lib/cloudflare/bun-spa/bun-spa.js.map +1 -1
  19. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  20. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  21. package/lib/cloudflare/index.d.ts +2 -0
  22. package/lib/cloudflare/index.d.ts.map +1 -1
  23. package/lib/cloudflare/index.js +2 -0
  24. package/lib/cloudflare/index.js.map +1 -1
  25. package/lib/cloudflare/logpush-job.d.ts +349 -0
  26. package/lib/cloudflare/logpush-job.d.ts.map +1 -0
  27. package/lib/cloudflare/logpush-job.js +277 -0
  28. package/lib/cloudflare/logpush-job.js.map +1 -0
  29. package/lib/cloudflare/miniflare/build-worker-options.d.ts +1 -0
  30. package/lib/cloudflare/miniflare/build-worker-options.d.ts.map +1 -1
  31. package/lib/cloudflare/miniflare/build-worker-options.js +16 -6
  32. package/lib/cloudflare/miniflare/build-worker-options.js.map +1 -1
  33. package/lib/cloudflare/miniflare/remote-binding-proxy.d.ts.map +1 -1
  34. package/lib/cloudflare/miniflare/remote-binding-proxy.js +2 -0
  35. package/lib/cloudflare/miniflare/remote-binding-proxy.js.map +1 -1
  36. package/lib/cloudflare/queue-consumer.js +2 -2
  37. package/lib/cloudflare/queue-consumer.js.map +1 -1
  38. package/lib/cloudflare/worker-loader.d.ts +9 -0
  39. package/lib/cloudflare/worker-loader.d.ts.map +1 -0
  40. package/lib/cloudflare/worker-loader.js +6 -0
  41. package/lib/cloudflare/worker-loader.js.map +1 -0
  42. package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
  43. package/lib/cloudflare/worker-metadata.js +6 -0
  44. package/lib/cloudflare/worker-metadata.js.map +1 -1
  45. package/lib/cloudflare/worker-subdomain.js +1 -1
  46. package/lib/cloudflare/worker.d.ts.map +1 -1
  47. package/lib/cloudflare/worker.js +7 -0
  48. package/lib/cloudflare/worker.js.map +1 -1
  49. package/lib/cloudflare/wrangler.json.d.ts +3 -0
  50. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  51. package/lib/cloudflare/wrangler.json.js +9 -0
  52. package/lib/cloudflare/wrangler.json.js.map +1 -1
  53. package/lib/github/comment.d.ts.map +1 -1
  54. package/lib/github/comment.js +14 -7
  55. package/lib/github/comment.js.map +1 -1
  56. package/lib/scope.d.ts.map +1 -1
  57. package/lib/scope.js +6 -7
  58. package/lib/scope.js.map +1 -1
  59. package/lib/util/retry.d.ts +1 -1
  60. package/lib/util/retry.d.ts.map +1 -1
  61. package/lib/util/retry.js +2 -2
  62. package/lib/util/retry.js.map +1 -1
  63. package/lib/util/validate-resource-id.d.ts +2 -0
  64. package/lib/util/validate-resource-id.d.ts.map +1 -0
  65. package/lib/util/validate-resource-id.js +11 -0
  66. package/lib/util/validate-resource-id.js.map +1 -0
  67. package/package.json +2 -2
  68. package/src/apply.ts +2 -0
  69. package/src/cloudflare/bindings.ts +13 -0
  70. package/src/cloudflare/bound.ts +36 -32
  71. package/src/cloudflare/bucket.ts +13 -4
  72. package/src/cloudflare/bun-spa/bun-spa.ts +42 -10
  73. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  74. package/src/cloudflare/index.ts +2 -0
  75. package/src/cloudflare/logpush-job.ts +768 -0
  76. package/src/cloudflare/miniflare/build-worker-options.ts +18 -6
  77. package/src/cloudflare/miniflare/remote-binding-proxy.ts +2 -0
  78. package/src/cloudflare/queue-consumer.ts +2 -2
  79. package/src/cloudflare/worker-loader.ts +12 -0
  80. package/src/cloudflare/worker-metadata.ts +5 -0
  81. package/src/cloudflare/worker-subdomain.ts +1 -1
  82. package/src/cloudflare/worker.ts +8 -0
  83. package/src/cloudflare/wrangler.json.ts +15 -0
  84. package/src/github/comment.ts +17 -8
  85. package/src/scope.ts +7 -10
  86. package/src/util/retry.ts +2 -1
  87. package/src/util/validate-resource-id.ts +10 -0
  88. package/workers/tunnel-proxy.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"bun-spa.d.ts","sourceRoot":"","sources":["../../../src/cloudflare/bun-spa/bun-spa.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,OAAO,EAGL,OAAO,EACP,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,QAAQ,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,wBAAsB,MAAM,CAAC,CAAC,SAAS,QAAQ,EAC7C,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA8EzC"}
1
+ {"version":3,"file":"bun-spa.d.ts","sourceRoot":"","sources":["../../../src/cloudflare/bun-spa/bun-spa.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK/C,OAAO,EAGL,OAAO,EACP,KAAK,YAAY,EAClB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,QAAQ,CAAE,SAAQ,YAAY,CAAC,CAAC,CAAC;IACtE;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzE,wBAAsB,MAAM,CAAC,CAAC,SAAS,QAAQ,EAC7C,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAyGzC"}
@@ -5,13 +5,32 @@ import { exists } from "../../util/exists.js";
5
5
  import { extractStringAndSecretBindings, unencryptSecrets, } from "../util/filter-env-bindings.js";
6
6
  import { spreadBuildProps, spreadDevProps, Website, } from "../website.js";
7
7
  export async function BunSPA(id, props) {
8
- const frontendPath = path.resolve(props.frontend);
9
- if (!(await exists(frontendPath))) {
10
- throw new Error(`Frontend path ${frontendPath} does not exist`);
11
- }
12
- const stats = await fs.stat(frontendPath);
13
- if (!stats.isFile()) {
14
- throw new Error(`Frontend path ${frontendPath} is not a file`);
8
+ const frontendPaths = Array.isArray(props.frontend)
9
+ ? props.frontend.map((p) => path.resolve(p))
10
+ : [path.resolve(props.frontend)];
11
+ // Helper to check if a path contains glob patterns
12
+ const isGlobPattern = (p) => p.includes("*") || p.includes("?") || p.includes("[") || p.includes("]");
13
+ // Only validate non-glob paths
14
+ const nonGlobPaths = frontendPaths.filter((p) => !isGlobPattern(p));
15
+ if (nonGlobPaths.length > 0) {
16
+ const existsPromises = nonGlobPaths.map((p) => exists(p));
17
+ const existsResults = await Promise.all(existsPromises);
18
+ const missingPaths = nonGlobPaths.filter((_p, i) => !existsResults[i]);
19
+ if (missingPaths.length > 0) {
20
+ if (missingPaths.length === 1) {
21
+ throw new Error(`Frontend path ${missingPaths[0]} does not exist`);
22
+ }
23
+ throw new Error(`Frontend paths ${missingPaths.join(", ")} do not exist`);
24
+ }
25
+ const statsPromises = nonGlobPaths.map((p) => fs.stat(p));
26
+ const statsResults = await Promise.all(statsPromises);
27
+ const notFiles = nonGlobPaths.filter((_, i) => !statsResults[i].isFile());
28
+ if (notFiles.length > 0) {
29
+ if (notFiles.length === 1) {
30
+ throw new Error(`Frontend path ${notFiles[0]} is not a file`);
31
+ }
32
+ throw new Error(`Frontend paths ${notFiles.join(", ")} are not files`);
33
+ }
15
34
  }
16
35
  const outDir = path.resolve(props.outDir ?? "dist/client");
17
36
  if (props.assets) {
@@ -32,14 +51,15 @@ export async function BunSPA(id, props) {
32
51
  assets: {
33
52
  directory: path.resolve(outDir),
34
53
  },
35
- build: spreadBuildProps(props, `bun build '${frontendPath}' --outdir ${outDir}`),
54
+ build: spreadBuildProps(props, `bun build '${frontendPaths.join("' '")}' --outdir ${outDir}`),
36
55
  });
37
56
  let apiUrl = website.url;
38
57
  // in dev
39
58
  if (scope.local) {
40
59
  const cwd = props.cwd ?? process.cwd();
41
60
  await validateBunfigToml(cwd);
42
- const dev = spreadDevProps(props, `bun '${path.relative(cwd, frontendPath)}'`);
61
+ const frontendPathsRelativeToCwd = frontendPaths.map((p) => path.relative(cwd, p));
62
+ const dev = spreadDevProps(props, `bun '${frontendPathsRelativeToCwd.join("' '")}'`);
43
63
  const secrets = props.wrangler?.secrets ?? !props.wrangler?.path;
44
64
  const env = {
45
65
  ...(process.env ?? {}),
@@ -1 +1 @@
1
- {"version":3,"file":"bun-spa.js","sourceRoot":"","sources":["../../../src/cloudflare/bun-spa/bun-spa.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bun-spa.js","sourceRoot":"","sources":["../../../src/cloudflare/bun-spa/bun-spa.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
2
  * The default Cloudflare Workers compatibility date, set based on the latest workerd release at the time of build.
3
3
  */
4
- export declare const DEFAULT_COMPATIBILITY_DATE = "2025-10-01";
4
+ export declare const DEFAULT_COMPATIBILITY_DATE = "2025-10-08";
5
5
  //# sourceMappingURL=compatibility-date.gen.d.ts.map
@@ -3,5 +3,5 @@
3
3
  /**
4
4
  * The default Cloudflare Workers compatibility date, set based on the latest workerd release at the time of build.
5
5
  */
6
- export const DEFAULT_COMPATIBILITY_DATE = "2025-10-01";
6
+ export const DEFAULT_COMPATIBILITY_DATE = "2025-10-08";
7
7
  //# sourceMappingURL=compatibility-date.gen.js.map
@@ -36,6 +36,7 @@ export * from "./hyperdrive-ref.ts";
36
36
  export * from "./hyperdrive.ts";
37
37
  export * from "./images.ts";
38
38
  export * from "./kv-namespace.ts";
39
+ export * from "./logpush-job.ts";
39
40
  export * from "./next.ts";
40
41
  export * from "./nuxt/nuxt.ts";
41
42
  export * from "./orange.ts";
@@ -69,6 +70,7 @@ export * from "./worker-stub.ts";
69
70
  export * from "./worker-subdomain.ts";
70
71
  export * from "./worker.ts";
71
72
  export { Workflow } from "./workflow.ts";
73
+ export { WorkerLoader } from "./worker-loader.ts";
72
74
  export * from "./wrangler.json.ts";
73
75
  export * from "./zone.ts";
74
76
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
@@ -36,6 +36,7 @@ export * from "./hyperdrive-ref.js";
36
36
  export * from "./hyperdrive.js";
37
37
  export * from "./images.js";
38
38
  export * from "./kv-namespace.js";
39
+ export * from "./logpush-job.js";
39
40
  export * from "./next.js";
40
41
  export * from "./nuxt/nuxt.js";
41
42
  export * from "./orange.js";
@@ -69,6 +70,7 @@ export * from "./worker-stub.js";
69
70
  export * from "./worker-subdomain.js";
70
71
  export * from "./worker.js";
71
72
  export { Workflow } from "./workflow.js";
73
+ export { WorkerLoader } from "./worker-loader.js";
72
74
  export * from "./wrangler.json.js";
73
75
  export * from "./zone.js";
74
76
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cloudflare/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,349 @@
1
+ import { type Secret } from "../secret.ts";
2
+ import { type CloudflareApiOptions } from "./api.ts";
3
+ import { type R2Bucket } from "./bucket.ts";
4
+ /**
5
+ * Properties for creating or updating a LogPush Job
6
+ */
7
+ export interface LogPushJobProps extends CloudflareApiOptions {
8
+ /**
9
+ * Zone ID or Zone object for zone-level LogPush jobs
10
+ * Mutually exclusive with accountId
11
+ */
12
+ zone?: string | {
13
+ id: string;
14
+ name?: string;
15
+ };
16
+ /**
17
+ * Name of the dataset. A list of supported datasets can be found on the
18
+ * Developer Docs
19
+ * @default "http_requests"
20
+ * @see https://developers.cloudflare.com/logs/reference/log-fields/
21
+ */
22
+ dataset: LogPushJobDataset;
23
+ /**
24
+ * Uniquely identifies a resource (such as an s3 bucket) where data will be
25
+ * pushed. Additional configuration parameters supported by the destination
26
+ * may be included (format: uri, maxLength: 4096)
27
+ *
28
+ * Can be:
29
+ * - A full destination string (e.g., "s3://bucket/path" or "r2://bucket/path?account-id=...")
30
+ * - An R2Bucket resource (will use bucket.name and R2 credentials from environment)
31
+ * - A Secret containing a destination string
32
+ */
33
+ destination: string | R2Bucket | Secret<string>;
34
+ /**
35
+ * Filter to apply to logs (JSON string)
36
+ * @example '{"where":{"and":[{"key":"ClientCountry","operator":"neq","value":"ca"}]}}'
37
+ */
38
+ filter?: string;
39
+ /**
40
+ * Optional human readable job name. Not unique. Cloudflare suggests that you
41
+ * set this to a meaningful string, like the domain name, to make it easier to
42
+ * identify your job (maxLength: 512)
43
+ */
44
+ name?: string | undefined;
45
+ /**
46
+ * Flag that indicates if the job is enabled
47
+ */
48
+ enabled?: boolean;
49
+ /**
50
+ * Ownership challenge token (obtained from ownership validation)
51
+ * Required on creation if destination ownership not yet validated
52
+ */
53
+ ownershipChallenge?: string;
54
+ /**
55
+ * @deprecated This field is deprecated. Please use maxUploadBytes,
56
+ * maxUploadIntervalSeconds, or maxUploadRecords instead. The frequency at
57
+ * which Cloudflare sends batches of logs to your destination. Setting
58
+ * frequency to high sends your logs in larger quantities of smaller files.
59
+ * Setting frequency to low sends logs in smaller quantities of larger files
60
+ */
61
+ frequency?: "high" | "low" | undefined;
62
+ /**
63
+ * The kind parameter (optional) is used to differentiate between Logpush and
64
+ * Edge Log Delivery jobs (when supported by the dataset)
65
+ */
66
+ kind?: "edge";
67
+ /**
68
+ * The maximum uncompressed file size of a batch of logs. This setting value
69
+ * must be between 5 MB and 1 GB, or 0 to disable it. Note that you cannot
70
+ * set a minimum file size; this means that log files may be much smaller than
71
+ * this batch size
72
+ */
73
+ maxUploadBytes?: 0 | number | undefined;
74
+ /**
75
+ * The maximum interval in seconds for log batches. This setting must be
76
+ * between 30 and 300 seconds (5 minutes), or 0 to disable it. Note that you
77
+ * cannot specify a minimum interval for log batches; this means that log
78
+ * files may be sent in shorter intervals than this
79
+ */
80
+ maxUploadIntervalSeconds?: 0 | number | undefined;
81
+ /**
82
+ * The maximum number of log lines per batch. This setting must be between
83
+ * 1000 and 1,000,000 lines, or 0 to disable it. Note that you cannot specify
84
+ * a minimum number of log lines per batch; this means that log files may
85
+ * contain many fewer lines than this
86
+ */
87
+ maxUploadRecords?: 0 | number | undefined;
88
+ /**
89
+ * The structured replacement for logpull_options. When including this field,
90
+ * the logpull_option field will be ignored
91
+ */
92
+ outputOptions?: LogPushJobOutputOptions;
93
+ /**
94
+ * Whether to delete the LogPush job when removed
95
+ * @default true
96
+ */
97
+ delete?: boolean;
98
+ }
99
+ export interface LogPushJobOutputOptions {
100
+ /**
101
+ * String to join fields. This field will be ignored when recordTemplate is
102
+ * set
103
+ */
104
+ fieldDelimiter?: string | undefined;
105
+ /**
106
+ * List of field names to be included in the Logpush output. For the moment,
107
+ * there is no option to add all fields at once, so you must specify all the
108
+ * field names you are interested in
109
+ */
110
+ fieldNames?: string[];
111
+ /**
112
+ * Specifies the output type, such as ndjson or csv. This sets default
113
+ * values for the rest of the settings, depending on the chosen output type.
114
+ * Some formatting rules, like string quoting, are different between output
115
+ * types
116
+ */
117
+ outputType?: "ndjson" | "csv";
118
+ /**
119
+ * String to specify the format for timestamps, such as unixnano, unix, or
120
+ * rfc3339
121
+ */
122
+ timestampFormat?: "unixnano" | "unix" | "rfc3339";
123
+ /**
124
+ * Floating number to specify sampling rate. Sampling is applied on top of
125
+ * filtering, and regardless of the current sample_interval of the data
126
+ * (minimum: 0, maximum: 1)
127
+ */
128
+ sampleRate?: number | undefined;
129
+ /**
130
+ * Prepended before each batch
131
+ */
132
+ batchPrefix?: string | undefined;
133
+ /**
134
+ * Appended after each batch
135
+ */
136
+ batchSuffix?: string | undefined;
137
+ /**
138
+ * If set to true, will cause all occurrences of ${ in the generated files
139
+ * to be replaced with x{
140
+ */
141
+ cve202144228?: boolean | undefined;
142
+ /**
143
+ * Be inserted in-between the records as separator
144
+ */
145
+ recordDelimiter?: string | undefined;
146
+ /**
147
+ * Prepended before each record
148
+ */
149
+ recordPrefix?: string | undefined;
150
+ /**
151
+ * After each record
152
+ */
153
+ recordSuffix?: string | undefined;
154
+ /**
155
+ * Use as template for each record instead of the default json key value
156
+ * mapping. All fields used in the template must be present in fieldNames as
157
+ * well, otherwise they will end up as null. Format as a Go text/template
158
+ * without any standard functions, like conditionals, loops, sub-templates,
159
+ * etc
160
+ */
161
+ recordTemplate?: string | undefined;
162
+ }
163
+ /**
164
+ * Output returned after LogPush Job creation/update
165
+ */
166
+ export type LogPushJob = Omit<LogPushJobProps, "delete" | "ownershipChallenge" | "zone" | "destination"> & {
167
+ /**
168
+ * Resource type identifier
169
+ */
170
+ type: "logpush_job";
171
+ /**
172
+ * Unique id of the job (minimum: 1)
173
+ * Assigned by Cloudflare upon job creation
174
+ */
175
+ id?: number;
176
+ /**
177
+ * The Cloudflare account ID
178
+ */
179
+ accountId: string;
180
+ /**
181
+ * The destination of the job
182
+ */
183
+ destination: Secret<string>;
184
+ /**
185
+ * If not null, the job is currently failing. Failures are usually repetitive
186
+ * (example: no permissions to write to destination bucket). Only the last
187
+ * failure is recorded. On successful execution of a job the errorMessage and
188
+ * lastError are set to null
189
+ */
190
+ errorMessage?: string | undefined;
191
+ /**
192
+ * Records the last time for which logs have been successfully pushed. If the
193
+ * last successful push was for logs range 2018-07-23T10:00:00Z to
194
+ * 2018-07-23T10:01:00Z then the value of this field will be
195
+ * 2018-07-23T10:01:00Z. If the job has never run or has just been enabled and
196
+ * hasn't run yet then the field will be empty (format: datetime)
197
+ */
198
+ lastComplete?: string | undefined;
199
+ /**
200
+ * Records the last time the job failed. If not null, the job is currently
201
+ * failing. If null, the job has either never failed or has run successfully
202
+ * at least once since last failure. See also the errorMessage field (format:
203
+ * datetime)
204
+ */
205
+ lastError?: string | undefined;
206
+ /**
207
+ * Time at which the job was created (Unix timestamp in ms)
208
+ */
209
+ createdAt: number;
210
+ /**
211
+ * Time at which the job was last modified (Unix timestamp in ms)
212
+ */
213
+ modifiedAt: number;
214
+ };
215
+ /**
216
+ * Check if a resource is a LogPushJob
217
+ */
218
+ export declare function isLogPushJob(resource: any): resource is LogPushJob;
219
+ /**
220
+ * Creates and manages Cloudflare LogPush Jobs for streaming logs to external
221
+ * destinations.
222
+ *
223
+ * LogPush jobs can be scoped to either an account or a zone, and support
224
+ * various log datasets like HTTP requests, firewall events, DNS logs, and more.
225
+ *
226
+ * @example
227
+ * // Basic HTTP request logs to S3 (zone-level)
228
+ * const httpLogs = await LogPushJob("http-logs", {
229
+ * zone: "example.com",
230
+ * dataset: "http_requests",
231
+ * destination: "s3://my-bucket/logs?region=us-west-2",
232
+ * name: "HTTP Request Logs"
233
+ * });
234
+ *
235
+ * @example
236
+ * // Account-level firewall events with filtering using a string destination
237
+ * const blockedRequests = await LogPushJob("blocked-requests", {
238
+ * dataset: "firewall_events",
239
+ * destination: "r2://my-bucket/firewall-logs?account-id=xxx&access-key-id=xxx&secret-access-key=xxx",
240
+ * filter:
241
+ * '{"where":{"and":[{"key":"Action","operator":"eq","value":"block"}]}}',
242
+ * maxUploadBytes: 100 * 1024 * 1024, // 100MB batches
243
+ * maxUploadIntervalSeconds: 300 // 5 minutes
244
+ * });
245
+ *
246
+ * @example
247
+ * // Stream logs to R2 using R2Bucket resource (requires R2_ACCESS_KEY_ID and R2_SECRET_ACCESS_KEY env vars)
248
+ * const bucket = await R2Bucket("logs-bucket", {
249
+ * name: "my-logs-bucket"
250
+ * });
251
+ *
252
+ * const logsToR2 = await LogPushJob("http-to-r2", {
253
+ * dataset: "http_requests",
254
+ * destination: bucket // Automatically constructs R2 URL with env credentials
255
+ * });
256
+ *
257
+ * @example
258
+ * // Or use a direct destination string with embedded credentials
259
+ * const logsToR2 = await LogPushJob("http-to-r2", {
260
+ * dataset: "http_requests",
261
+ * destination: `r2://my-logs-bucket/logs/{DATE}?account-id=${accountId}&access-key-id=${R2_ACCESS_KEY_ID}&secret-access-key=${R2_SECRET_ACCESS_KEY}`
262
+ * });
263
+ *
264
+ * @example
265
+ * // High-volume analytics with custom output format
266
+ * const analyticsLogs = await LogPushJob("analytics-logs", {
267
+ * zone: myZone,
268
+ * dataset: "http_requests",
269
+ * destination: "s3://analytics-bucket/logs?region=eu-west-1",
270
+ * sample: 0.01, // 1% sampling for high-volume sites
271
+ * maxUploadRecords: 100000, // 100k records per batch
272
+ * outputOptions: {
273
+ * outputType: "ndjson",
274
+ * timestampFormat: "unixnano",
275
+ * fieldNames: [
276
+ * "ClientIP",
277
+ * "ClientRequestHost",
278
+ * "EdgeResponseStatus",
279
+ * "EdgeStartTimestamp"
280
+ * ],
281
+ * sampleRate: 0.1 // Additional 10% sampling within the batch
282
+ * }
283
+ * });
284
+ *
285
+ * @see https://developers.cloudflare.com/logs/get-started/enable-destinations/
286
+ * @see https://developers.cloudflare.com/api/resources/logpush/
287
+ */
288
+ export declare function LogPushJob(id: string, props: LogPushJobProps): Promise<LogPushJob>;
289
+ /**
290
+ * The structured replacement for logpull_options. When including this field, the logpull_option field will be ignored.
291
+ */
292
+ export interface OutputOptions {
293
+ /**
294
+ * String to be prepended before each batch.
295
+ */
296
+ batch_prefix?: string | null;
297
+ /**
298
+ * String to be appended after each batch.
299
+ */
300
+ batch_suffix?: string | null;
301
+ /**
302
+ * If set to true, will cause all occurrences of ${ in the generated files to be replaced with x{.
303
+ */
304
+ "CVE-2021-44228"?: boolean | null;
305
+ /**
306
+ * String to join fields. This field will be ignored when record_template is set.
307
+ */
308
+ field_delimiter?: string | null;
309
+ /**
310
+ * List of field names to be included in the Logpush output.
311
+ * For the moment, there is no option to add all fields at once, so you must specify all the field names you are interested in.
312
+ */
313
+ field_names?: string[];
314
+ /**
315
+ * Specifies the output type, such as ndjson or csv.
316
+ * This sets default values for the rest of the settings, depending on the chosen output type.
317
+ * Some formatting rules, like string quoting, are different between output types.
318
+ */
319
+ output_type?: "ndjson" | "csv";
320
+ /**
321
+ * String to be inserted in-between the records as separator.
322
+ */
323
+ record_delimiter?: string | null;
324
+ /**
325
+ * String to be prepended before each record.
326
+ */
327
+ record_prefix?: string | null;
328
+ /**
329
+ * String to be appended after each record.
330
+ */
331
+ record_suffix?: string | null;
332
+ /**
333
+ * String to use as template for each record instead of the default json key value mapping.
334
+ * All fields used in the template must be present in field_names as well, otherwise they will end up as null.
335
+ * Format as a Go text/template without any standard functions, like conditionals, loops, sub-templates, etc.
336
+ */
337
+ record_template?: string | null;
338
+ /**
339
+ * Floating number to specify sampling rate. Sampling is applied on top of filtering, and regardless of the current sample_interval of the data.
340
+ * (format: float, maximum: 1, minimum: 0)
341
+ */
342
+ sample_rate?: number | null;
343
+ /**
344
+ * String to specify the format for timestamps, such as unixnano, unix, or rfc3339.
345
+ */
346
+ timestamp_format?: "unixnano" | "unix" | "rfc3339";
347
+ }
348
+ export type LogPushJobDataset = "access_requests" | "audit_logs_v2" | "audit_logs" | "biso_user_actions" | "casb_findings" | "device_posture_results" | "dlp_forensic_copies" | "dns_firewall_logs" | "dns_logs" | "email_security_alerts" | "firewall_events" | "gateway_dns" | "gateway_http" | "gateway_network" | "http_requests" | "magic_ids_detections" | "nel_reports" | "network_analytics_logs" | "page_shield_events" | "sinkhole_http_logs" | "spectrum_events" | "ssh_logs" | "workers_trace_events" | "zaraz_events" | "zero_trust_network_sessions" | (string & {});
349
+ //# sourceMappingURL=logpush-job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logpush-job.d.ts","sourceRoot":"","sources":["../../src/cloudflare/logpush-job.ts"],"names":[],"mappings":"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"}