alchemy 0.93.6 → 0.93.9

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 (78) hide show
  1. package/bin/alchemy.js +1966 -1825
  2. package/bin/alchemy.ts +2 -0
  3. package/bin/commands/state.ts +58 -0
  4. package/bin/services/execute-alchemy.ts +9 -1
  5. package/lib/alchemy.d.ts.map +1 -1
  6. package/lib/alchemy.js +7 -0
  7. package/lib/alchemy.js.map +1 -1
  8. package/lib/cloudflare/access-application.d.ts +204 -0
  9. package/lib/cloudflare/access-application.d.ts.map +1 -0
  10. package/lib/cloudflare/access-application.js +205 -0
  11. package/lib/cloudflare/access-application.js.map +1 -0
  12. package/lib/cloudflare/access-group.d.ts +115 -0
  13. package/lib/cloudflare/access-group.d.ts.map +1 -0
  14. package/lib/cloudflare/access-group.js +147 -0
  15. package/lib/cloudflare/access-group.js.map +1 -0
  16. package/lib/cloudflare/access-identity-provider.d.ts +261 -0
  17. package/lib/cloudflare/access-identity-provider.d.ts.map +1 -0
  18. package/lib/cloudflare/access-identity-provider.js +229 -0
  19. package/lib/cloudflare/access-identity-provider.js.map +1 -0
  20. package/lib/cloudflare/access-policy.d.ts +168 -0
  21. package/lib/cloudflare/access-policy.d.ts.map +1 -0
  22. package/lib/cloudflare/access-policy.js +176 -0
  23. package/lib/cloudflare/access-policy.js.map +1 -0
  24. package/lib/cloudflare/access-rule.d.ts +248 -0
  25. package/lib/cloudflare/access-rule.d.ts.map +1 -0
  26. package/lib/cloudflare/access-rule.js +37 -0
  27. package/lib/cloudflare/access-rule.js.map +1 -0
  28. package/lib/cloudflare/access-service-token.d.ts +86 -0
  29. package/lib/cloudflare/access-service-token.d.ts.map +1 -0
  30. package/lib/cloudflare/access-service-token.js +127 -0
  31. package/lib/cloudflare/access-service-token.js.map +1 -0
  32. package/lib/cloudflare/index.d.ts +6 -0
  33. package/lib/cloudflare/index.d.ts.map +1 -1
  34. package/lib/cloudflare/index.js +6 -0
  35. package/lib/cloudflare/index.js.map +1 -1
  36. package/lib/cloudflare/miniflare/tunnel.d.ts.map +1 -1
  37. package/lib/cloudflare/miniflare/tunnel.js +10 -5
  38. package/lib/cloudflare/miniflare/tunnel.js.map +1 -1
  39. package/lib/state/file-system-state-store.d.ts +1 -0
  40. package/lib/state/file-system-state-store.d.ts.map +1 -1
  41. package/lib/state/file-system-state-store.js +16 -0
  42. package/lib/state/file-system-state-store.js.map +1 -1
  43. package/lib/state/operations.d.ts +1 -0
  44. package/lib/state/operations.d.ts.map +1 -1
  45. package/lib/state/operations.js +24 -0
  46. package/lib/state/operations.js.map +1 -1
  47. package/lib/state/proxy.d.ts +1 -0
  48. package/lib/state/proxy.d.ts.map +1 -1
  49. package/lib/state/proxy.js +3 -0
  50. package/lib/state/proxy.js.map +1 -1
  51. package/lib/state-cli.d.ts +9 -0
  52. package/lib/state-cli.d.ts.map +1 -0
  53. package/lib/state-cli.js +110 -0
  54. package/lib/state-cli.js.map +1 -0
  55. package/lib/state.d.ts +2 -0
  56. package/lib/state.d.ts.map +1 -1
  57. package/lib/stripe/price.d.ts.map +1 -1
  58. package/lib/stripe/price.js +13 -3
  59. package/lib/stripe/price.js.map +1 -1
  60. package/package.json +1 -1
  61. package/src/alchemy.ts +9 -0
  62. package/src/cloudflare/access-application.ts +489 -0
  63. package/src/cloudflare/access-group.ts +271 -0
  64. package/src/cloudflare/access-identity-provider.ts +584 -0
  65. package/src/cloudflare/access-policy.ts +392 -0
  66. package/src/cloudflare/access-rule.ts +307 -0
  67. package/src/cloudflare/access-service-token.ts +255 -0
  68. package/src/cloudflare/index.ts +6 -0
  69. package/src/cloudflare/miniflare/tunnel.ts +10 -5
  70. package/src/state/file-system-state-store.ts +16 -0
  71. package/src/state/operations.ts +22 -0
  72. package/src/state/proxy.ts +4 -0
  73. package/src/state-cli.ts +134 -0
  74. package/src/state.ts +2 -0
  75. package/src/stripe/price.ts +13 -3
  76. package/workers/cloudflare-state-store.js +17 -0
  77. package/workers/tunnel-proxy.js +3 -1
  78. package/workers/tunnel-proxy.ts +2 -0
package/bin/alchemy.ts CHANGED
@@ -8,6 +8,7 @@ import { init } from "./commands/init.ts";
8
8
  import { login } from "./commands/login.ts";
9
9
  import { logout } from "./commands/logout.ts";
10
10
  import { run } from "./commands/run.ts";
11
+ import { state } from "./commands/state.ts";
11
12
  import { telemetry } from "./commands/telemetry.ts";
12
13
  import { util } from "./commands/util.ts";
13
14
  import { getPackageVersion } from "./services/get-package-version.ts";
@@ -23,6 +24,7 @@ const router = t.router({
23
24
  logout,
24
25
  configure,
25
26
  run,
27
+ state,
26
28
  telemetry,
27
29
  util,
28
30
  });
@@ -0,0 +1,58 @@
1
+ import z from "zod";
2
+ import {
3
+ entrypoint,
4
+ execAlchemy,
5
+ execArgs,
6
+ } from "../services/execute-alchemy.ts";
7
+ import { loggedProcedure, t } from "../trpc.ts";
8
+
9
+ const tree = loggedProcedure
10
+ .meta({
11
+ description:
12
+ "Print a tree of all stages, scopes, and resources in the configured state store",
13
+ })
14
+ .input(z.tuple([entrypoint, z.object(execArgs)]))
15
+ .mutation(async ({ input: [main, options] }) =>
16
+ execAlchemy(main, {
17
+ ...options,
18
+ stateCmd: "tree",
19
+ }),
20
+ );
21
+
22
+ const list = loggedProcedure
23
+ .meta({
24
+ description:
25
+ "List the fully-qualified resource names tracked by the configured state store",
26
+ })
27
+ .input(z.tuple([entrypoint, z.object(execArgs)]))
28
+ .mutation(async ({ input: [main, options] }) =>
29
+ execAlchemy(main, {
30
+ ...options,
31
+ stateCmd: "list",
32
+ }),
33
+ );
34
+
35
+ const get = loggedProcedure
36
+ .meta({
37
+ description: "Print the JSON-encoded state for a single resource",
38
+ })
39
+ .input(
40
+ z.tuple([
41
+ z.string().describe("Fully-qualified resource name (app/stage/.../id)"),
42
+ entrypoint,
43
+ z.object(execArgs),
44
+ ]),
45
+ )
46
+ .mutation(async ({ input: [fqn, main, options] }) =>
47
+ execAlchemy(main, {
48
+ ...options,
49
+ stateCmd: "get",
50
+ stateArg: fqn,
51
+ }),
52
+ );
53
+
54
+ export const state = t.router({
55
+ tree,
56
+ list,
57
+ get,
58
+ });
@@ -112,6 +112,8 @@ export async function execAlchemy(
112
112
  rootDir,
113
113
  profile,
114
114
  eraseSecrets,
115
+ stateCmd,
116
+ stateArg,
115
117
  }: {
116
118
  cwd?: string;
117
119
  quiet?: boolean;
@@ -130,6 +132,8 @@ export async function execAlchemy(
130
132
  rootDir?: string;
131
133
  profile?: string;
132
134
  eraseSecrets?: boolean;
135
+ stateCmd?: "tree" | "list" | "get";
136
+ stateArg?: string;
133
137
  },
134
138
  ) {
135
139
  const args: string[] = [];
@@ -146,7 +150,7 @@ export async function execAlchemy(
146
150
  }`,
147
151
  );
148
152
 
149
- if (quiet) args.push("--quiet");
153
+ if (quiet || stateCmd) args.push("--quiet");
150
154
  if (read) args.push("--read");
151
155
  if (force) args.push("--force");
152
156
  if (stage) args.push(`--stage ${stage}`);
@@ -175,6 +179,10 @@ export async function execAlchemy(
175
179
  if (eraseSecrets) args.push("--erase-secrets");
176
180
  if (profile) args.push(`--profile ${profile}`);
177
181
  if (app) args.push(`--app ${app}`);
182
+ if (stateCmd) {
183
+ args.push(`--state-cmd ${stateCmd}`);
184
+ if (stateArg) args.push(`--state-arg ${stateArg}`);
185
+ }
178
186
  if (rootDir) {
179
187
  args.push(`--root-dir ${rootDir}`);
180
188
  } else if (app) {
@@ -1 +1 @@
1
- {"version":3,"file":"alchemy.d.ts","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alchemy.d.ts","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"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"}
package/lib/alchemy.js CHANGED
@@ -3,6 +3,7 @@ import path from "pathe";
3
3
  import { onExit } from "signal-exit";
4
4
  import { isReplacedSignal } from "./apply.js";
5
5
  import { DestroyStrategy, destroy, isDestroyedSignal } from "./destroy.js";
6
+ import { runStateCommand } from "./state-cli.js";
6
7
  import { env } from "./env.js";
7
8
  import { ResourceFQN, ResourceID, ResourceKind, ResourceScope, ResourceSeq, } from "./resource.js";
8
9
  import { DEFAULT_STAGE, Scope } from "./scope.js";
@@ -132,6 +133,12 @@ If this is a mistake, you can disable this check by setting the ALCHEMY_CI_STATE
132
133
  });
133
134
  Scope.storage.enterWith(root);
134
135
  Scope.storage.enterWith(stage);
136
+ const stateCmd = parseOption("--state-cmd");
137
+ if (stateCmd) {
138
+ const stateArg = parseOption("--state-arg");
139
+ await runStateCommand(stage, stateCmd, stateArg);
140
+ return process.exit(0);
141
+ }
135
142
  if (mergedOptions?.phase === "destroy") {
136
143
  const err = await destroy(stage).catch((e) => e);
137
144
  if (!options?.noTrack) {
@@ -1 +1 @@
1
- {"version":3,"file":"alchemy.js","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,IAAI,MAAM,OAAO,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAEL,WAAW,EACX,UAAU,EACV,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAA4B,KAAK,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAOzD,MAAM,CAAC,MAAM,OAAO,GAAY,QAAe,CAAC;AAkEhD,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;AACnB,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;AACzB,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;AAEnB;;GAEG;AACH,KAAK,UAAU,QAAQ,CACrB,OAAe,EACf,OAAyC;IAEzC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,IAAI,qBAAgD,CAAC;IACrD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QACtB,qBAAqB,GAAG,kBAAkB,CAAC;YACzC,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS;SACxC,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEjC,MAAM,UAAU,GAAG;QACjB,KAAK,EACH,GAAG,IAAI,GAAG,KAAK,OAAO;YACpB,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC7B,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC1B,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,IAAI;QAEd,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC/D,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;QACpC,4FAA4F;QAC5F,KAAK,EAAE,CAAC,SAAS,UAAU;YACzB,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM;gBACvC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB,CAAC,CAAC,EAAE;QACJ,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;QACtC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClC,YAAY,EAAE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACjD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC9D,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC;KACA,CAAC;IACpC,MAAM,aAAa,GAAG;QACpB,GAAG,UAAU;QACb,GAAG,OAAO;KACX,CAAC;IACF,IACE,aAAa,CAAC,UAAU,KAAK,SAAS;QACtC,OAAO,CAAC,GAAG,CAAC,EAAE;QACd,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,OAAO,EACpD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC;;;;;;;;;;CAUnB,CAAC,CAAC;IACD,CAAC;IAED,IAAI,aAAa,CAAC,YAAY,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEzE,IAAI,GAAG,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,8BAA8B,OAAO,EAAE,KAAK,6BAA6B,GAAG,EAAE,CAC/E,CAAC;IACJ,CAAC;IAED,IACE,OAAO,EAAE,KAAK,KAAK,IAAI;QACvB,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;IACJ,CAAC;IAED,IACE,OAAO,EAAE,KAAK,KAAK,SAAS;QAC5B,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzD,mFAAmF;MACnF,CAAC;QACD,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,IACE,gBAAgB;QAChB,OAAO,EAAE,KAAK,KAAK,SAAS;QAC5B,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAC9B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,0GAA0G,CAC3G,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,EAAE,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAED,IACE,gBAAgB;QAChB,OAAO,EAAE,KAAK,KAAK,MAAM;QACzB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC3B,CAAC;QACD,MAAM,CAAC,IAAI,CACT,8HAA8H,CAC/H,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,aAAa,EAAE,KAAK,IAAI,IAAI,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC;QACrB,GAAG,aAAa;QAChB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,OAAO;QAClB,KAAK;QACL,QAAQ,EAAE,aAAa,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB;QACjE,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,KAAK;QACxC,UAAU,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO;QAC3D,SAAS;KACV,CAAC,CAAC;IACH,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACvB,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,aAAa,EAAE,KAAK,IAAI,aAAa,CAAC;IACxD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,GAAG,aAAa;QAChB,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,aAAa,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,MAAM,kBAAkB,CACtB;gBACE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB;gBACjE,QAAQ,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;aAC7C,EACD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CACvC,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,qBAAqB,EAAE,CAAC;QAC1B,MAAM,qBAAqB,CAAC;IAC9B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAsID;;;;;;;;;;;;;;GAcG;AACH,KAAK,UAAU,GAAG,CAChB,GAAG,IAME;IAEL,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,GACrB,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU;QAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAE,IAIC,CAAC;IACT,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC;QACvB,GAAG,OAAO;QACV,MAAM,EAAE,OAAO,EAAE,MAAM;QACvB,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;KACnC,CAAC,CAAC;IACH,IAAI,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,OAAO,EAAE,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClD,uFAAuF;YACvF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG;gBACb,CAAC,UAAU,CAAC,EAAE,EAAE;gBAChB,CAAC,WAAW,CAAC,EAAE,EAAE;gBACjB,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,IAAI;gBAC1B,CAAC,aAAa,CAAC,EAAE,MAAM;gBACvB,CAAC,WAAW,CAAC,EAAE,GAAG;gBAClB,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,eAAe,IAAI,YAAY;aACnD,CAAC;YACX,MAAM,QAAQ,GAAG;gBACf,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,EAAE;gBACF,GAAG;gBACH,IAAI,EAAE,EAAE;gBACR,GAAG,EAAE,EAAE;gBACP,KAAK,EAAE,EAAE;gBACT,MAAM,EAAE,SAAS;gBACjB,MAAM;aACE,CAAC;YACX,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,MAAM,CAAC,MAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,2DAA2D,IAAI,CAAC,IAAI,MAAM,EAAE,EAAE,CAC/E,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,MAAO,CAAC,SAAS,CAAC,GAAG,CAC1B,EAAE,EACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAoB,CACpE,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC;QAC5B,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,QAAQ,CAAC;YACpB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"alchemy.js","sourceRoot":"","sources":["../src/alchemy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,204 @@
1
+ import type { Context } from "../context.ts";
2
+ import type { Secret } from "../secret.ts";
3
+ import type { AccessIdentityProvider } from "./access-identity-provider.ts";
4
+ import type { AccessPolicy } from "./access-policy.ts";
5
+ import { type CloudflareApiOptions } from "./api.ts";
6
+ import { type Zone } from "./zone.ts";
7
+ /**
8
+ * Cloudflare Access application types. Three are strictly typed below;
9
+ * everything else falls back to {@link OtherAccessApplicationProps}.
10
+ *
11
+ * @see https://developers.cloudflare.com/cloudflare-one/applications/
12
+ */
13
+ export type AccessApplicationType = "self_hosted" | "saas" | "bookmark" | "ssh" | "vnc" | "rdp" | "app_launcher" | "warp" | "biso" | "dash_sso" | "infrastructure" | "mcp" | "mcp_portal" | "proxy_endpoint" | (string & {});
14
+ interface BaseAccessApplicationProps extends CloudflareApiOptions {
15
+ /**
16
+ * Display name shown in the Access dashboard.
17
+ *
18
+ * @default ${app}-${stage}-${id}
19
+ */
20
+ name?: string;
21
+ /**
22
+ * Identity providers permitted to authenticate to this application.
23
+ * If unset, all account IdPs are allowed.
24
+ */
25
+ allowedIdps?: (string | AccessIdentityProvider)[];
26
+ /**
27
+ * Reusable Access policies attached to this application, in priority order.
28
+ */
29
+ policies?: (string | AccessPolicy)[];
30
+ /** Cloudflare duration string, e.g. `"24h"`. */
31
+ sessionDuration?: string;
32
+ /** Show this app in the user-facing App Launcher. */
33
+ appLauncherVisible?: boolean;
34
+ /** Skip the IdP-selection screen when only one IdP applies. */
35
+ autoRedirectToIdentity?: boolean;
36
+ /** Custom message shown to denied users. */
37
+ customDenyMessage?: string;
38
+ /** URL users are redirected to when denied. */
39
+ customDenyUrl?: string;
40
+ /** URL non-identity users (e.g. service tokens) are redirected to when denied. */
41
+ customNonIdentityDenyUrl?: string;
42
+ /** Free-form labels for grouping applications. */
43
+ tags?: string[];
44
+ /** Skip the Access interstitial page on first load. */
45
+ skipInterstitial?: boolean;
46
+ /**
47
+ * For service-token authenticated requests, return 401 on failure
48
+ * (instead of redirecting).
49
+ */
50
+ serviceAuth401Redirect?: boolean;
51
+ /**
52
+ * Adopt an existing application with the same name instead of failing.
53
+ *
54
+ * @default false
55
+ */
56
+ adopt?: boolean;
57
+ /**
58
+ * Whether to delete the application when removed from Alchemy.
59
+ *
60
+ * @default true
61
+ */
62
+ delete?: boolean;
63
+ }
64
+ /**
65
+ * A self-hosted application protected by Access at a specific domain.
66
+ */
67
+ export interface SelfHostedAccessApplicationProps extends BaseAccessApplicationProps {
68
+ type: "self_hosted";
69
+ /** Hostname (or hostname/path prefix) the application lives at. */
70
+ domain: string;
71
+ /**
72
+ * Bind the application to a specific zone. If omitted, the application
73
+ * is account-scoped. Moving between scopes triggers replacement.
74
+ */
75
+ zone?: string | Zone;
76
+ }
77
+ /**
78
+ * SaaS OIDC integration configuration.
79
+ */
80
+ export interface SaasOidcConfig {
81
+ authType: "oidc";
82
+ redirectUris: string[];
83
+ scopes?: ("openid" | "groups" | "email" | "profile")[];
84
+ groupFilterRegex?: string;
85
+ }
86
+ /**
87
+ * SaaS SAML 2.0 integration configuration.
88
+ */
89
+ export interface SaasSamlConfig {
90
+ authType: "saml";
91
+ spEntityId: string;
92
+ consumerServiceUrl: string;
93
+ nameIdFormat?: string;
94
+ defaultRelayState?: string;
95
+ }
96
+ /**
97
+ * A SaaS application — Cloudflare brokers SSO between your IdP and the SaaS
98
+ * vendor over either OIDC or SAML.
99
+ */
100
+ export interface SaasAccessApplicationProps extends BaseAccessApplicationProps {
101
+ type: "saas";
102
+ saas: SaasOidcConfig | SaasSamlConfig;
103
+ }
104
+ /**
105
+ * A bookmark — a vanity link in the Access launcher with no policy
106
+ * enforcement.
107
+ */
108
+ export interface BookmarkAccessApplicationProps extends BaseAccessApplicationProps {
109
+ type: "bookmark";
110
+ /** URL the bookmark points to. */
111
+ domain: string;
112
+ /**
113
+ * Bind the bookmark to a zone. If omitted, the bookmark is account-scoped.
114
+ */
115
+ zone?: string | Zone;
116
+ }
117
+ /**
118
+ * Catch-all variant for application types not covered by a strict variant
119
+ * (`ssh`, `vnc`, `rdp`, `app_launcher`, `warp`, `biso`, `dash_sso`,
120
+ * `infrastructure`, `mcp`, `mcp_portal`, `proxy_endpoint`, or future types).
121
+ */
122
+ export interface OtherAccessApplicationProps extends BaseAccessApplicationProps {
123
+ type: Exclude<AccessApplicationType, "self_hosted" | "saas" | "bookmark">;
124
+ /** Required for `ssh`, `vnc`, `rdp`, `proxy_endpoint`. */
125
+ domain?: string;
126
+ /** Zone-scope the application where supported by the type. */
127
+ zone?: string | Zone;
128
+ }
129
+ /**
130
+ * Properties for creating or updating an {@link AccessApplication}.
131
+ */
132
+ export type AccessApplicationProps = SelfHostedAccessApplicationProps | SaasAccessApplicationProps | BookmarkAccessApplicationProps | OtherAccessApplicationProps;
133
+ /**
134
+ * Output for an {@link AccessApplication}.
135
+ */
136
+ export type AccessApplication = Omit<AccessApplicationProps, "adopt" | "delete" | "zone"> & {
137
+ /** Cloudflare-assigned application UUID. */
138
+ id: string;
139
+ /** Display name. */
140
+ name: string;
141
+ /**
142
+ * Audience tag (used to validate Access JWTs at your origin).
143
+ */
144
+ aud: string;
145
+ /**
146
+ * Resolved zone ID, if the application is zone-scoped.
147
+ */
148
+ zoneId?: string;
149
+ /**
150
+ * SaaS OIDC client identifier (only set for SaaS OIDC apps).
151
+ */
152
+ clientId?: string;
153
+ /**
154
+ * SaaS OIDC client secret (only returned on creation; retained on update).
155
+ */
156
+ clientSecret?: Secret;
157
+ /** ISO 8601 creation timestamp. */
158
+ createdAt: string;
159
+ /** ISO 8601 last-update timestamp. */
160
+ updatedAt: string;
161
+ };
162
+ /**
163
+ * Type guard for {@link AccessApplication}.
164
+ */
165
+ export declare function isAccessApplication(resource: any): resource is AccessApplication;
166
+ /**
167
+ * Creates a Cloudflare Zero Trust [Access application](https://developers.cloudflare.com/cloudflare-one/applications/)
168
+ * — a protected resource users authenticate to via Access.
169
+ *
170
+ * @example
171
+ * // Self-hosted application protected by an Access policy.
172
+ * const app = await AccessApplication("admin", {
173
+ * type: "self_hosted",
174
+ * name: "Internal Admin",
175
+ * domain: "admin.acme.com",
176
+ * policies: [employeesPolicy],
177
+ * sessionDuration: "8h",
178
+ * });
179
+ *
180
+ * @example
181
+ * // Bookmark in the Access launcher.
182
+ * const wiki = await AccessApplication("wiki", {
183
+ * type: "bookmark",
184
+ * name: "Internal Wiki",
185
+ * domain: "https://wiki.acme.com",
186
+ * appLauncherVisible: true,
187
+ * });
188
+ *
189
+ * @example
190
+ * // SaaS OIDC integration.
191
+ * const slack = await AccessApplication("slack-saas", {
192
+ * type: "saas",
193
+ * name: "Slack",
194
+ * saas: {
195
+ * authType: "oidc",
196
+ * redirectUris: ["https://acme.slack.com/oidc/callback"],
197
+ * scopes: ["openid", "email", "profile"],
198
+ * },
199
+ * policies: [employeesPolicy],
200
+ * });
201
+ */
202
+ export declare const AccessApplication: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<AccessApplication>, id: string, props: AccessApplicationProps) => Promise<AccessApplication>);
203
+ export {};
204
+ //# sourceMappingURL=access-application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-application.d.ts","sourceRoot":"","sources":["../../src/cloudflare/access-application.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,205 @@
1
+ import { alchemy } from "../alchemy.js";
2
+ import { Resource, ResourceKind } from "../resource.js";
3
+ import { logger } from "../util/logger.js";
4
+ import { isCloudflareApiError } from "./api-error.js";
5
+ import { extractCloudflareResult, } from "./api-response.js";
6
+ import { createCloudflareApi, } from "./api.js";
7
+ import { findZoneForHostname } from "./zone.js";
8
+ /**
9
+ * Type guard for {@link AccessApplication}.
10
+ */
11
+ export function isAccessApplication(resource) {
12
+ return resource?.[ResourceKind] === "cloudflare::AccessApplication";
13
+ }
14
+ /**
15
+ * Creates a Cloudflare Zero Trust [Access application](https://developers.cloudflare.com/cloudflare-one/applications/)
16
+ * — a protected resource users authenticate to via Access.
17
+ *
18
+ * @example
19
+ * // Self-hosted application protected by an Access policy.
20
+ * const app = await AccessApplication("admin", {
21
+ * type: "self_hosted",
22
+ * name: "Internal Admin",
23
+ * domain: "admin.acme.com",
24
+ * policies: [employeesPolicy],
25
+ * sessionDuration: "8h",
26
+ * });
27
+ *
28
+ * @example
29
+ * // Bookmark in the Access launcher.
30
+ * const wiki = await AccessApplication("wiki", {
31
+ * type: "bookmark",
32
+ * name: "Internal Wiki",
33
+ * domain: "https://wiki.acme.com",
34
+ * appLauncherVisible: true,
35
+ * });
36
+ *
37
+ * @example
38
+ * // SaaS OIDC integration.
39
+ * const slack = await AccessApplication("slack-saas", {
40
+ * type: "saas",
41
+ * name: "Slack",
42
+ * saas: {
43
+ * authType: "oidc",
44
+ * redirectUris: ["https://acme.slack.com/oidc/callback"],
45
+ * scopes: ["openid", "email", "profile"],
46
+ * },
47
+ * policies: [employeesPolicy],
48
+ * });
49
+ */
50
+ export const AccessApplication = Resource("cloudflare::AccessApplication", async function (id, props) {
51
+ const api = await createCloudflareApi(props);
52
+ const name = props.name ?? this.scope.createPhysicalName(id);
53
+ const zoneId = "zone" in props && props.zone
54
+ ? typeof props.zone === "string"
55
+ ? (await findZoneForHostname(api, props.zone)).zoneId
56
+ : props.zone.id
57
+ : undefined;
58
+ const basePath = zoneId
59
+ ? `/zones/${zoneId}/access/apps`
60
+ : `/accounts/${api.accountId}/access/apps`;
61
+ if (this.phase === "delete") {
62
+ if (this.output?.id && props.delete !== false) {
63
+ const deletePath = this.output.zoneId
64
+ ? `/zones/${this.output.zoneId}/access/apps/${this.output.id}`
65
+ : `/accounts/${api.accountId}/access/apps/${this.output.id}`;
66
+ await deleteAccessApplication(api, deletePath);
67
+ }
68
+ return this.destroy();
69
+ }
70
+ // type and zone are immutable — recreate if either changed.
71
+ if (this.phase === "update" && this.output) {
72
+ if (this.output.type !== props.type ||
73
+ (this.output.zoneId ?? undefined) !== (zoneId ?? undefined)) {
74
+ this.replace(true);
75
+ }
76
+ }
77
+ if (props.type === "self_hosted" &&
78
+ !props.domain) {
79
+ throw new Error(`AccessApplication "${name}": 'domain' is required for self_hosted applications.`);
80
+ }
81
+ const body = {
82
+ name,
83
+ type: props.type,
84
+ };
85
+ if ("domain" in props && props.domain)
86
+ body.domain = props.domain;
87
+ if (props.allowedIdps)
88
+ body.allowed_idps = props.allowedIdps.map((idp) => typeof idp === "string" ? idp : idp.id);
89
+ if (props.policies)
90
+ body.policies = props.policies.map((p) => typeof p === "string" ? p : p.id);
91
+ if (props.sessionDuration !== undefined)
92
+ body.session_duration = props.sessionDuration;
93
+ if (props.appLauncherVisible !== undefined)
94
+ body.app_launcher_visible = props.appLauncherVisible;
95
+ if (props.autoRedirectToIdentity !== undefined)
96
+ body.auto_redirect_to_identity = props.autoRedirectToIdentity;
97
+ if (props.customDenyMessage !== undefined)
98
+ body.custom_deny_message = props.customDenyMessage;
99
+ if (props.customDenyUrl !== undefined)
100
+ body.custom_deny_url = props.customDenyUrl;
101
+ if (props.customNonIdentityDenyUrl !== undefined)
102
+ body.custom_non_identity_deny_url = props.customNonIdentityDenyUrl;
103
+ if (props.tags)
104
+ body.tags = props.tags;
105
+ if (props.skipInterstitial !== undefined)
106
+ body.skip_interstitial = props.skipInterstitial;
107
+ if (props.serviceAuth401Redirect !== undefined)
108
+ body.service_auth_401_redirect = props.serviceAuth401Redirect;
109
+ if (props.type === "saas" && props.saas) {
110
+ const saas = props.saas;
111
+ body.saas =
112
+ saas.authType === "oidc"
113
+ ? {
114
+ auth_type: "oidc",
115
+ redirect_uris: saas.redirectUris,
116
+ scopes: saas.scopes,
117
+ group_filter_regex: saas.groupFilterRegex,
118
+ }
119
+ : {
120
+ auth_type: "saml",
121
+ sp_entity_id: saas.spEntityId,
122
+ consumer_service_url: saas.consumerServiceUrl,
123
+ name_id_format: saas.nameIdFormat,
124
+ default_relay_state: saas.defaultRelayState,
125
+ };
126
+ }
127
+ let app;
128
+ if (this.phase === "update" && this.output?.id) {
129
+ const updatePath = this.output.zoneId
130
+ ? `/zones/${this.output.zoneId}/access/apps/${this.output.id}`
131
+ : `/accounts/${api.accountId}/access/apps/${this.output.id}`;
132
+ app = await extractCloudflareResult(`update access application "${name}"`, api.put(updatePath, body));
133
+ }
134
+ else {
135
+ const adopt = props.adopt ?? this.scope.adopt;
136
+ try {
137
+ app = await extractCloudflareResult(`create access application "${name}"`, api.post(basePath, body));
138
+ }
139
+ catch (err) {
140
+ if (adopt && isAccessDuplicateNameError(err)) {
141
+ const existing = await findAccessApplicationByName(api, basePath, name);
142
+ if (!existing) {
143
+ throw new Error(`Access application "${name}" already exists but could not be found for adoption.`, { cause: err });
144
+ }
145
+ logger.log(`Adopting existing access application "${name}" (${existing.id})`);
146
+ app = await extractCloudflareResult(`adopt access application "${name}"`, api.put(`${basePath}/${existing.id}`, body));
147
+ }
148
+ else {
149
+ throw err;
150
+ }
151
+ }
152
+ }
153
+ // SaaS OIDC client_secret is only returned on POST — retain on update.
154
+ const clientSecret = app.client_secret
155
+ ? alchemy.secret(app.client_secret)
156
+ : this.output?.clientSecret;
157
+ const rest = { ...props };
158
+ delete rest.adopt;
159
+ delete rest.delete;
160
+ delete rest.zone;
161
+ return {
162
+ ...rest,
163
+ id: app.id,
164
+ name: app.name,
165
+ aud: app.aud,
166
+ zoneId,
167
+ clientId: app.client_id,
168
+ clientSecret,
169
+ createdAt: app.created_at,
170
+ updatedAt: app.updated_at,
171
+ };
172
+ });
173
+ function isAccessDuplicateNameError(err) {
174
+ if (isCloudflareApiError(err, { status: 409 }) ||
175
+ isCloudflareApiError(err, { status: 400 })) {
176
+ const data = err.errorData;
177
+ return (Array.isArray(data) &&
178
+ data.some((e) => "message" in e && /already exists/i.test(String(e.message))));
179
+ }
180
+ return false;
181
+ }
182
+ async function findAccessApplicationByName(api, basePath, name) {
183
+ let page = 1;
184
+ const perPage = 50;
185
+ while (true) {
186
+ const response = await api.get(`${basePath}?page=${page}&per_page=${perPage}`);
187
+ if (!response.ok)
188
+ return null;
189
+ const data = (await response.json());
190
+ const match = data.result.find((a) => a.name === name);
191
+ if (match)
192
+ return match;
193
+ const info = data.result_info;
194
+ if (!info || info.page * info.per_page >= info.total_count)
195
+ return null;
196
+ page++;
197
+ }
198
+ }
199
+ async function deleteAccessApplication(api, path) {
200
+ const response = await api.delete(path);
201
+ if (!response.ok && response.status !== 404) {
202
+ logger.error(`Error deleting access application at ${path}: ${response.status} ${response.statusText}`);
203
+ }
204
+ }
205
+ //# sourceMappingURL=access-application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access-application.js","sourceRoot":"","sources":["../../src/cloudflare/access-application.ts"],"names":[],"mappings":"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"}