@tailor-platform/sdk 2.15.0 → 2.17.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 (102) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/dist/{application-BpoMu4Af.mjs → application-ChuNPwnl.mjs} +28 -28
  3. package/dist/application-ChuNPwnl.mjs.map +1 -0
  4. package/dist/application-Oh5dMmb5.mjs +1 -0
  5. package/dist/cli/commands/executor/jobs.d.mts +1 -0
  6. package/dist/cli/commands/generate/seed/bundler.d.mts +18 -0
  7. package/dist/cli/commands/tailordb/migrate/config.d.mts +1 -0
  8. package/dist/cli/commands/tailordb/migrate/snapshot-files.d.mts +5 -1
  9. package/dist/cli/commands/tailordb/migrate/snapshot.d.mts +2 -2
  10. package/dist/cli/commands/workflow/waiter.d.mts +1 -0
  11. package/dist/cli/commands/workspace/create.d.mts +16 -1
  12. package/dist/cli/commands/workspace/expiry.d.mts +5 -0
  13. package/dist/cli/commands/workspace/get.d.mts +6 -1
  14. package/dist/cli/commands/workspace/list.d.mts +1 -0
  15. package/dist/cli/lib.d.mts +4 -3
  16. package/dist/cli/lib.mjs +1 -1
  17. package/dist/cli/lib.mjs.map +1 -1
  18. package/dist/cli/main.mjs +57 -59
  19. package/dist/cli/main.mjs.map +1 -1
  20. package/dist/cli/shared/command.d.mts +1 -1
  21. package/dist/cli/shared/error-json.d.mts +21 -1
  22. package/dist/cli/shared/errors.d.mts +1 -0
  23. package/dist/cli/shared/github-actions.d.mts +13 -0
  24. package/dist/cli/shared/logger.d.mts +18 -0
  25. package/dist/completion/zsh-worker.zsh +92 -4
  26. package/dist/configure/index.mjs +1 -1
  27. package/dist/configure/index.mjs.map +1 -1
  28. package/dist/crashreport-CgymxQDu.mjs +1 -0
  29. package/dist/crashreport-Cyuz1qiu.mjs +42 -0
  30. package/dist/crashreport-Cyuz1qiu.mjs.map +1 -0
  31. package/dist/errors-BjJnpXkK.mjs +7 -0
  32. package/dist/errors-BjJnpXkK.mjs.map +1 -0
  33. package/dist/field-parse-CzlKC4b7.mjs +2 -0
  34. package/dist/field-parse-CzlKC4b7.mjs.map +1 -0
  35. package/dist/guards-ForsrxnH.mjs +2 -0
  36. package/dist/guards-ForsrxnH.mjs.map +1 -0
  37. package/dist/kysely-type-B_oA8D1k.mjs +43 -0
  38. package/dist/kysely-type-B_oA8D1k.mjs.map +1 -0
  39. package/dist/{logger-CCjs1DuH.mjs → logger-72hM4JWZ.mjs} +4 -4
  40. package/dist/logger-72hM4JWZ.mjs.map +1 -0
  41. package/dist/manager-C26Gi1bX.mjs +2 -0
  42. package/dist/manager-C26Gi1bX.mjs.map +1 -0
  43. package/dist/node-builtins-DYfhPBnz.mjs +2 -0
  44. package/dist/node-builtins-DYfhPBnz.mjs.map +1 -0
  45. package/dist/plugin/builtin/kysely-type/index.d.mts +2 -0
  46. package/dist/plugin/builtin/kysely-type/index.mjs +1 -1
  47. package/dist/plugin/builtin/seed/index.mjs +1 -1
  48. package/dist/plugin/builtin/seed/seed-type-processor.d.mts +17 -0
  49. package/dist/plugin/get-generated-table.d.mts +13 -0
  50. package/dist/plugin/index.d.mts +2 -2
  51. package/dist/plugin/index.mjs +1 -1
  52. package/dist/plugin/index.mjs.map +1 -1
  53. package/dist/register-ts-hook-Dn-XlVSD.mjs +917 -0
  54. package/dist/register-ts-hook-Dn-XlVSD.mjs.map +1 -0
  55. package/dist/schema-DRyQEabV.mjs +2 -0
  56. package/dist/schema-DRyQEabV.mjs.map +1 -0
  57. package/dist/{seed-CCc9Xk66.mjs → seed-C3P_T_Eh.mjs} +28 -9
  58. package/dist/seed-C3P_T_Eh.mjs.map +1 -0
  59. package/dist/service-B3OiWCYg.mjs +1 -0
  60. package/dist/service-B4Gh_bbL.mjs +2 -0
  61. package/dist/service-B4Gh_bbL.mjs.map +1 -0
  62. package/dist/service-eM7Fd8zS.mjs +7 -0
  63. package/dist/service-eM7Fd8zS.mjs.map +1 -0
  64. package/dist/tailordb-ddl-Fgm2cNvT.mjs +7 -0
  65. package/dist/tailordb-ddl-Fgm2cNvT.mjs.map +1 -0
  66. package/dist/utils/test/index.d.mts +7 -5
  67. package/dist/utils/test/index.mjs +1 -1
  68. package/dist/utils/test/index.mjs.map +1 -1
  69. package/dist/vitest/index.mjs +1 -1
  70. package/dist/vitest/index.mjs.map +1 -1
  71. package/dist/vitest/mocks/tailordb-pglite.d.mts +5 -4
  72. package/docs/cli/tailordb.md +9 -9
  73. package/docs/cli/workspace.md +133 -20
  74. package/docs/cli-reference.md +101 -28
  75. package/docs/plugin/custom.md +36 -4
  76. package/docs/services/tailordb-migration.md +31 -28
  77. package/docs/testing.md +23 -21
  78. package/package.json +11 -10
  79. package/dist/application-BpoMu4Af.mjs.map +0 -1
  80. package/dist/application-fIhVKX78.mjs +0 -1
  81. package/dist/crashreport-BN28xp5B.mjs +0 -42
  82. package/dist/crashreport-BN28xp5B.mjs.map +0 -1
  83. package/dist/crashreport-By23O2k-.mjs +0 -1
  84. package/dist/errors-BlX4gUw5.mjs +0 -4
  85. package/dist/errors-BlX4gUw5.mjs.map +0 -1
  86. package/dist/field-column-type-QMtF6lUp.mjs +0 -2
  87. package/dist/field-column-type-QMtF6lUp.mjs.map +0 -1
  88. package/dist/kysely-type-B-BOlXH7.mjs +0 -43
  89. package/dist/kysely-type-B-BOlXH7.mjs.map +0 -1
  90. package/dist/logger-CCjs1DuH.mjs.map +0 -1
  91. package/dist/node-builtins-TQHhwNzG.mjs +0 -2
  92. package/dist/node-builtins-TQHhwNzG.mjs.map +0 -1
  93. package/dist/register-ts-hook-CAUcxCt4.mjs +0 -711
  94. package/dist/register-ts-hook-CAUcxCt4.mjs.map +0 -1
  95. package/dist/schema-BTioi2dP.mjs +0 -2
  96. package/dist/schema-BTioi2dP.mjs.map +0 -1
  97. package/dist/seed-CCc9Xk66.mjs.map +0 -1
  98. package/dist/service-7SCy2bhm.mjs +0 -7
  99. package/dist/service-7SCy2bhm.mjs.map +0 -1
  100. package/dist/service-CWFQ8EVo.mjs +0 -1
  101. package/dist/service-CqbQXFDp.mjs +0 -2
  102. package/dist/service-CqbQXFDp.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { CommonArgsType } from "./args.mjs";
2
- import { createDefineCommand } from "@politty/zod";
2
+ import { AnyCommand, createDefineCommand } from "@politty/zod";
3
3
  //#region src/cli/shared/command.d.ts
4
4
  /**
5
5
  * defineCommand with global args type (CommonArgsType).
@@ -1,3 +1,4 @@
1
+ import { Jsonifiable } from "type-fest";
1
2
  //#region src/cli/shared/error-json.d.ts
2
3
  export interface ErrorToJsonOptions {
3
4
  /** Include the original stack trace in the error envelope. */
@@ -10,10 +11,29 @@ export interface ErrorToJsonOptions {
10
11
  * @returns JSON-compatible error envelope
11
12
  */
12
13
  export declare function errorToJson(error: unknown, options?: ErrorToJsonOptions): {
13
- error: Readonly<Record<string, unknown>>;
14
+ error: Readonly<Record<string, Jsonifiable | undefined>>;
14
15
  };
15
16
  /**
16
17
  * Serialize a CLI failure into the stable JSON error envelope.
18
+ *
19
+ * Redacts registered secrets from every string, number, boolean, and `null` *value* in the
20
+ * envelope, however deeply nested, before this function's own `JSON.stringify` call, rather
21
+ * than relying only on the redaction `logger.log()` does on the final string: an upstream
22
+ * error message (or `error.context`, an arbitrary record) can already embed a secret in
23
+ * JSON-escaped form (e.g. echoed back inside a JSON API error body), and stringifying the
24
+ * envelope would escape that a second time, no longer matching a registered secret's
25
+ * single-level-escaped form. Redacting non-string bare tokens here also matters because the
26
+ * later, structure-unaware `redactSecrets()` pass over the fully rendered JSON text cannot
27
+ * tell a bare token apart from a JSON string, so a secret whose value coincides with an
28
+ * unrelated number/boolean/`null` elsewhere in the envelope would otherwise become an
29
+ * unquoted `<redacted>` and break the output as JSON.
30
+ *
31
+ * Does not cover a secret used as an object *key* (e.g. `context: { [secret]: true }`) —
32
+ * `JSON.stringify`'s replacer can only transform values, never rename keys. No current
33
+ * caller does this (`context` keys are always fixed, SDK-chosen strings), and the CLI's own
34
+ * `logger.log(serializeError(...))` call site is still protected regardless, since that
35
+ * redaction pass re-scans the fully rendered JSON text and does not distinguish key
36
+ * position from value position.
17
37
  * @param error - Failure to serialize
18
38
  * @param options - JSON serialization options
19
39
  * @returns Serialized JSON error envelope
@@ -0,0 +1 @@
1
+ import { Jsonifiable } from "type-fest";
@@ -0,0 +1,13 @@
1
+ //#region src/cli/shared/github-actions.d.ts
2
+ /**
3
+ * Annotate the failure that ended the command, when running in GitHub Actions.
4
+ * @param error - Failure that ended the command
5
+ * @param options - JSON mode state and the suggestion shown for a plain error
6
+ * @param options.jsonMode - Whether the CLI is producing a JSON document
7
+ * @param options.suggestion - Suggestion shown for a plain error
8
+ */
9
+ export declare function annotateTerminalError(error: unknown, options: {
10
+ jsonMode: boolean;
11
+ suggestion?: string;
12
+ }): void;
13
+ //#endregion
@@ -58,6 +58,24 @@ export declare const logger: {
58
58
  log(message: string): void;
59
59
  newline(): void;
60
60
  debug(message: string): void;
61
+ /**
62
+ * Registers a value to be redacted from diagnostic log output (`info`/`success`/`warn`/
63
+ * `error`/`log`/`debug`). Any occurrence of `value` — or of its JSON-string-escaped form
64
+ * (so a value embedded in `JSON.stringify`d output, e.g. `--json` mode error envelopes, is
65
+ * also caught) or its `application/x-www-form-urlencoded` form (so a value that reached the
66
+ * process via a URL query string, e.g. an OAuth authorization code decoded from a callback
67
+ * URL via `URLSearchParams`, is still caught if that same URL — still encoded — is later
68
+ * echoed into a diagnostic message) — is replaced with `<redacted>` before it reaches
69
+ * stderr. Does not affect `out()`, since some commands intentionally print secret values as
70
+ * their primary result.
71
+ *
72
+ * Values shorter than 4 characters are ignored, since they are too likely to match
73
+ * unrelated text. A non-string value (e.g. `undefined` from an unvalidated external
74
+ * payload cast to a typed shape) is ignored the same way, rather than throwing, since a
75
+ * logging call must never be what crashes the process.
76
+ * @param value - The secret value to redact from future log output
77
+ */
78
+ registerSecret(value: string): void;
61
79
  out(data: string | object | object[], options?: OutOptions): void;
62
80
  };
63
81
  //#endregion
@@ -1,5 +1,5 @@
1
1
  # politty-completion-version: 1
2
- # politty-bin-sig: 1788974837
2
+ # politty-bin-sig: 1789518173
3
3
  # politty-bin-path: /home/runner/work/sdk/sdk/node_modules/.bin/tailor
4
4
  # program: tailor
5
5
  # shell: zsh
@@ -823,6 +823,7 @@ __tailor_worker_opt_takes_value() {
823
823
  workspace:create:--region|workspace:create:-r|workspace:create:--r) return 0 ;;
824
824
  workspace:create:--organization-id|workspace:create:--organizationId|workspace:create:-o|workspace:create:--o) return 0 ;;
825
825
  workspace:create:--folder-id|workspace:create:--folderId|workspace:create:-f|workspace:create:--f) return 0 ;;
826
+ workspace:create:--ttl) return 0 ;;
826
827
  workspace:create:--profile-name|workspace:create:--profileName|workspace:create:-p|workspace:create:--p) return 0 ;;
827
828
  workspace:create:--profile) return 0 ;;
828
829
  workspace:create:--profile-user|workspace:create:--profileUser) return 0 ;;
@@ -833,7 +834,19 @@ __tailor_worker_opt_takes_value() {
833
834
  workspace:list:--order) return 0 ;;
834
835
  workspace:list:--limit|workspace:list:-l|workspace:list:--l) return 0 ;;
835
836
  workspace:list:--profile) return 0 ;;
837
+ workspace:prune:--name) return 0 ;;
838
+ workspace:prune:--older-than|workspace:prune:--olderThan) return 0 ;;
839
+ workspace:prune:--organization-root|workspace:prune:--organizationRoot) return 0 ;;
840
+ workspace:prune:--folder-id|workspace:prune:--folderId) return 0 ;;
841
+ workspace:prune:--exclude) return 0 ;;
842
+ workspace:prune:--limit) return 0 ;;
843
+ workspace:prune:--profile) return 0 ;;
836
844
  workspace:restore:--workspace-id|workspace:restore:--workspaceId|workspace:restore:-w|workspace:restore:--w) return 0 ;;
845
+ workspace:ttl:set:--workspace-id|workspace:ttl:set:--workspaceId|workspace:ttl:set:-w|workspace:ttl:set:--w) return 0 ;;
846
+ workspace:ttl:set:--profile|workspace:ttl:set:-p|workspace:ttl:set:--p) return 0 ;;
847
+ workspace:ttl:set:--ttl) return 0 ;;
848
+ workspace:ttl:clear:--workspace-id|workspace:ttl:clear:--workspaceId|workspace:ttl:clear:-w|workspace:ttl:clear:--w) return 0 ;;
849
+ workspace:ttl:clear:--profile|workspace:ttl:clear:-p|workspace:ttl:clear:--p) return 0 ;;
837
850
  workspace:user:invite:--workspace-id|workspace:user:invite:--workspaceId|workspace:user:invite:-w|workspace:user:invite:--w) return 0 ;;
838
851
  workspace:user:invite:--profile|workspace:user:invite:-p|workspace:user:invite:--p) return 0 ;;
839
852
  workspace:user:invite:--email) return 0 ;;
@@ -991,7 +1004,11 @@ __tailor_worker_is_subcmd() {
991
1004
  workspace:delete) return 0 ;;
992
1005
  workspace:get) return 0 ;;
993
1006
  workspace:list) return 0 ;;
1007
+ workspace:prune) return 0 ;;
994
1008
  workspace:restore) return 0 ;;
1009
+ workspace:ttl:set) return 0 ;;
1010
+ workspace:ttl:clear) return 0 ;;
1011
+ workspace:ttl) return 0 ;;
995
1012
  workspace:user:invite) return 0 ;;
996
1013
  workspace:user:list) return 0 ;;
997
1014
  workspace:user:remove) return 0 ;;
@@ -2972,7 +2989,7 @@ __tailor_worker_complete_tailordb_migration_generate() {
2972
2989
  __tailor_worker_not_used "--namespace" && _opts+=("--namespace:Target TailorDB namespace for --data-only (required if multiple namespaces exist)")
2973
2990
  _opts+=("--rename:Record a field, table, or nested member rename instead of remove + add (format\: \"Table.oldField\:newField\", \"OldTable\:NewTable\", or \"Table.field.oldMember\:newMember\"; repeatable). Renames require a migration script that copies the data.")
2974
2991
  _opts+=("--drop:Confirm that a removed field, table, or nested member is a genuine removal, not a rename (format\: \"Table.field\", \"Table\", or \"Table.field.member\"; repeatable). Required in non-interactive runs for a removal with rename candidates.")
2975
- _opts+=("--expand-contract:Convert a field type through a temporary field (format\: \"Table.field\"; repeatable). Generates two migrations.")
2992
+ _opts+=("--expand-contract:Convert a field type, or a single value into an array, through a temporary field (format\: \"Table.field\"; repeatable). Generates two migrations.")
2976
2993
  __tailor_worker_not_used "--help" && _opts+=("--help:Show help")
2977
2994
  __tailor_worker_cdescribe 'options' _opts
2978
2995
  return 0
@@ -3068,7 +3085,7 @@ __tailor_worker_complete_tailordb_migration_script() {
3068
3085
  __tailor_worker_not_used "--namespace" "-n" "--n" && _opts+=("--namespace:Target TailorDB namespace (required if multiple namespaces exist)")
3069
3086
  __tailor_worker_not_used "--no-script" "--noScript" && _opts+=("--no-script:Record that this migration intentionally runs without a migration script (requires --reason)")
3070
3087
  __tailor_worker_not_used "--reason" && _opts+=("--reason:Reason why no migration script is needed (used with --no-script)")
3071
- __tailor_worker_not_used "--with-test" "--withTest" && _opts+=("--with-test:Also add a migrate.test.ts unit-test scaffold; when migrate.ts already exists, only the test is added")
3088
+ __tailor_worker_not_used "--with-test" "--withTest" && _opts+=("--with-test:Also add the migrate.test.ts and migrate.pglite.test.ts scaffolds")
3072
3089
  __tailor_worker_not_used "--help" && _opts+=("--help:Show help")
3073
3090
  __tailor_worker_cdescribe 'options' _opts
3074
3091
  return 0
@@ -3879,6 +3896,7 @@ __tailor_worker_complete_workspace_create() {
3879
3896
  __tailor_worker_not_used "--delete-protection" "--deleteProtection" "-d" "--d" && _opts+=("--delete-protection:Enable delete protection")
3880
3897
  __tailor_worker_not_used "--organization-id" "--organizationId" "-o" "--o" && _opts+=("--organization-id:Organization ID to workspace associate with")
3881
3898
  __tailor_worker_not_used "--folder-id" "--folderId" "-f" "--f" && _opts+=("--folder-id:Folder ID to workspace associate with")
3899
+ __tailor_worker_not_used "--ttl" && _opts+=("--ttl:Record on the workspace itself when it becomes prunable, such as 30m, 24h, or 7d. \`workspace prune --expired\` deletes it once that has passed")
3882
3900
  __tailor_worker_not_used "--profile-name" "--profileName" "-p" "--p" && _opts+=("--profile-name:Profile name to create")
3883
3901
  __tailor_worker_not_used "--profile" && _opts+=("--profile:Workspace profile used for authentication and Platform selection")
3884
3902
  __tailor_worker_not_used "--profile-user" "--profileUser" && _opts+=("--profile-user:User email address or machine user client ID for the profile (defaults to current user)")
@@ -3938,6 +3956,29 @@ __tailor_worker_complete_workspace_list() {
3938
3956
  fi
3939
3957
  }
3940
3958
 
3959
+ __tailor_worker_complete_workspace_prune() {
3960
+ local -a _vals=()
3961
+ if __tailor_worker_opt_takes_value "workspace:prune" "${words[CURRENT-1]}"; then return 0; fi
3962
+ if (( _after_dd )); then return 0; fi
3963
+ if [[ "${words[CURRENT]}" == -* ]]; then
3964
+ local -a _opts=()
3965
+ _opts+=("--name:Select workspaces whose whole name matches this regular expression (repeatable)")
3966
+ __tailor_worker_not_used "--older-than" "--olderThan" && _opts+=("--older-than:Minimum age since creation, such as 30m, 24h, or 7d. 0s disables the age check and requires a location. Required unless --expired is given")
3967
+ __tailor_worker_not_used "--expired" && _opts+=("--expired:Select workspaces whose own --ttl expiry has passed, instead of by name and age. Requires --organization-root, --folder-id, or --personal")
3968
+ _opts+=("--organization-root:Consider the workspaces directly under this organization, excluding those in its folders (repeatable)")
3969
+ _opts+=("--folder-id:Consider the workspaces in this folder (repeatable)")
3970
+ __tailor_worker_not_used "--personal" && _opts+=("--personal:Consider the workspaces belonging to no organization and no folder")
3971
+ _opts+=("--exclude:Keep a workspace with this exact name even when it matches (repeatable)")
3972
+ __tailor_worker_not_used "--limit" && _opts+=("--limit:Abort when more workspaces match than this, without deleting anything. 0 removes the cap")
3973
+ __tailor_worker_not_used "--dry-run" "--dryRun" && _opts+=("--dry-run:List the workspaces that would be deleted without deleting them")
3974
+ __tailor_worker_not_used "--profile" && _opts+=("--profile:Workspace profile used for authentication and Platform selection")
3975
+ __tailor_worker_not_used "--yes" "-y" "--y" && _opts+=("--yes:Skip confirmation prompts")
3976
+ __tailor_worker_not_used "--help" && _opts+=("--help:Show help")
3977
+ __tailor_worker_cdescribe 'options' _opts
3978
+ return 0
3979
+ fi
3980
+ }
3981
+
3941
3982
  __tailor_worker_complete_workspace_restore() {
3942
3983
  local -a _vals=()
3943
3984
  if __tailor_worker_opt_takes_value "workspace:restore" "${words[CURRENT-1]}"; then return 0; fi
@@ -3952,6 +3993,49 @@ __tailor_worker_complete_workspace_restore() {
3952
3993
  fi
3953
3994
  }
3954
3995
 
3996
+ __tailor_worker_complete_workspace_ttl_set() {
3997
+ local -a _vals=()
3998
+ if __tailor_worker_opt_takes_value "workspace:ttl:set" "${words[CURRENT-1]}"; then return 0; fi
3999
+ if (( _after_dd )); then return 0; fi
4000
+ if [[ "${words[CURRENT]}" == -* ]]; then
4001
+ local -a _opts=()
4002
+ __tailor_worker_not_used "--workspace-id" "--workspaceId" "-w" "--w" && _opts+=("--workspace-id:Workspace ID")
4003
+ __tailor_worker_not_used "--profile" "-p" "--p" && _opts+=("--profile:Workspace profile")
4004
+ __tailor_worker_not_used "--ttl" && _opts+=("--ttl:Time from now until the workspace becomes prunable, such as 30m, 24h, or 7d")
4005
+ __tailor_worker_not_used "--help" && _opts+=("--help:Show help")
4006
+ __tailor_worker_cdescribe 'options' _opts
4007
+ return 0
4008
+ fi
4009
+ }
4010
+
4011
+ __tailor_worker_complete_workspace_ttl_clear() {
4012
+ local -a _vals=()
4013
+ if __tailor_worker_opt_takes_value "workspace:ttl:clear" "${words[CURRENT-1]}"; then return 0; fi
4014
+ if (( _after_dd )); then return 0; fi
4015
+ if [[ "${words[CURRENT]}" == -* ]]; then
4016
+ local -a _opts=()
4017
+ __tailor_worker_not_used "--workspace-id" "--workspaceId" "-w" "--w" && _opts+=("--workspace-id:Workspace ID")
4018
+ __tailor_worker_not_used "--profile" "-p" "--p" && _opts+=("--profile:Workspace profile")
4019
+ __tailor_worker_not_used "--help" && _opts+=("--help:Show help")
4020
+ __tailor_worker_cdescribe 'options' _opts
4021
+ return 0
4022
+ fi
4023
+ }
4024
+
4025
+ __tailor_worker_complete_workspace_ttl() {
4026
+ local -a _vals=()
4027
+ if __tailor_worker_opt_takes_value "workspace:ttl" "${words[CURRENT-1]}"; then return 0; fi
4028
+ if (( _after_dd )); then return 0; fi
4029
+ if [[ "${words[CURRENT]}" == -* ]]; then
4030
+ local -a _opts=()
4031
+ __tailor_worker_not_used "--help" && _opts+=("--help:Show help")
4032
+ __tailor_worker_cdescribe 'options' _opts
4033
+ return 0
4034
+ fi
4035
+ local -a _subs=("set:Record when a workspace becomes prunable, replacing any expiry it already records." "clear:Drop a workspace's recorded prune expiry.")
4036
+ __tailor_worker_cdescribe 'subcommands' _subs
4037
+ }
4038
+
3955
4039
  __tailor_worker_complete_workspace_user_invite() {
3956
4040
  local -a _vals=()
3957
4041
  case "${words[CURRENT-1]}" in
@@ -4058,7 +4142,7 @@ __tailor_worker_complete_workspace() {
4058
4142
  __tailor_worker_cdescribe 'options' _opts
4059
4143
  return 0
4060
4144
  fi
4061
- local -a _subs=("app:Manage workspace applications" "create:Create a new Tailor Platform workspace." "delete:Delete a Tailor Platform workspace." "get:Show detailed information about a workspace" "list:List all Tailor Platform workspaces." "restore:Restore a deleted workspace" "user:Manage workspace users")
4145
+ local -a _subs=("app:Manage workspace applications" "create:Create a new Tailor Platform workspace." "delete:Delete a Tailor Platform workspace." "get:Show detailed information about a workspace" "list:List all Tailor Platform workspaces." "prune:Delete stale temporary workspaces, by name and age or by the expiry each recorded at creation." "restore:Restore a deleted workspace" "ttl:Manage when a workspace becomes prunable." "user:Manage workspace users")
4062
4146
  __tailor_worker_cdescribe 'subcommands' _subs
4063
4147
  }
4064
4148
 
@@ -4346,7 +4430,11 @@ _tailor_worker_completions() {
4346
4430
  workspace:delete) __tailor_worker_complete_workspace_delete ;;
4347
4431
  workspace:get) __tailor_worker_complete_workspace_get ;;
4348
4432
  workspace:list) __tailor_worker_complete_workspace_list ;;
4433
+ workspace:prune) __tailor_worker_complete_workspace_prune ;;
4349
4434
  workspace:restore) __tailor_worker_complete_workspace_restore ;;
4435
+ workspace:ttl:set) __tailor_worker_complete_workspace_ttl_set ;;
4436
+ workspace:ttl:clear) __tailor_worker_complete_workspace_ttl_clear ;;
4437
+ workspace:ttl) __tailor_worker_complete_workspace_ttl ;;
4350
4438
  workspace:user:invite) __tailor_worker_complete_workspace_user_invite ;;
4351
4439
  workspace:user:list) __tailor_worker_complete_workspace_user_list ;;
4352
4440
  workspace:user:remove) __tailor_worker_complete_workspace_user_remove ;;
@@ -1,2 +1,2 @@
1
- import{i as e,n as t,t as n}from"../schema-BTioi2dP.mjs";import{t as r}from"../brand-C8nMKhJC.mjs";import{a as i,n as a,r as o}from"../registry-HlEaGvl5.mjs";import{l as s,n as c,r as l,t as u}from"../wait-point-invoker-eiP-IIux.mjs";import{a as d,i as f,o as p,r as m}from"../wait-point-registry-B-ESkTZX.mjs";function createTailorField(n,r,i,a,o){let s=o?{...o,...o.allowedValues&&{allowedValues:o.allowedValues.map(e=>({...e}))},...o.validate&&{validate:o.validate.map(e=>Array.isArray(e)?[...e]:e)}}:{required:!0};o||(r&&(r.optional===!0&&(s.required=!1),r.array===!0&&(s.array=!0)),a&&(s.allowedValues=t(a)));function parseInternal$1(t){return e({...t,field:c})}function cloneWith(e){let t=c.clone();return Object.assign(t._metadata,e),t}let c={type:n,fields:i??{},_defined:void 0,_output:void 0,_metadata:s,get metadata(){return{...this._metadata}},description(e){return cloneWith({description:e})},typeName(e){return cloneWith({typeName:e})},validate(...e){return cloneWith({validate:e})},parse(e){return parseInternal$1({value:e.value,data:e.data,invoker:e.invoker,pathArray:[]})},clone(){let e=i;if(i){let t={};for(let[e,n]of Object.entries(i))t[e]=n.clone();e=t}return createTailorField(n,r,e,a,this._metadata)}};return c}function uuid(e){return createTailorField(`uuid`,e)}function string(e){return createTailorField(`string`,e)}function bool(e){return createTailorField(`boolean`,e)}function int(e){return createTailorField(`integer`,e)}function float(e){return createTailorField(`float`,e)}function decimal(e){return createTailorField(`decimal`,e)}function date(e){let t=createTailorField(`date`,e);return e?.as===`date`&&(t._metadata.as=`date`),t}function datetime(e){return createTailorField(`datetime`,e)}function time(e){return createTailorField(`time`,e)}function _enum(e,t){return createTailorField(`enum`,t,void 0,e)}function object(e,t){return createTailorField(`nested`,t,e)}const h={uuid,string,bool,int,float,decimal,date,datetime,time,enum:_enum,object};function defineAuth(e,t){return{...t,name:e}}const g={create:[{conditions:[],permit:!0}],read:[{conditions:[],permit:!0}],update:[{conditions:[],permit:!0}],delete:[{conditions:[],permit:!0}]},_=[{conditions:[],actions:`all`,permit:!0}];function createResolver(e){let t=(e=>typeof e==`object`&&!!e&&`type`in e&&typeof e.type==`string`)(e.output)?e.output:h.object(e.output);return r({...e,output:t},`resolver`)}function createExecutor(e){return r(e,`executor`)}const v={created:`tailordb.type_record.created`,updated:`tailordb.type_record.updated`,deleted:`tailordb.type_record.deleted`};function recordCreatedTrigger(e){let{type:t,condition:n}=e;return{kind:`tailordb`,events:[`tailordb.type_record.created`],tableName:t.name,condition:n,__args:{}}}function recordUpdatedTrigger(e){let{type:t,condition:n}=e;return{kind:`tailordb`,events:[`tailordb.type_record.updated`],tableName:t.name,condition:n,__args:{}}}function recordDeletedTrigger(e){let{type:t,condition:n}=e;return{kind:`tailordb`,events:[`tailordb.type_record.deleted`],tableName:t.name,condition:n,__args:{}}}function recordTrigger(e){let{type:t,events:n,condition:r}=e;return{kind:`tailordb`,events:n.map(e=>v[e]),tableName:t.name,condition:r,__args:{}}}function resolverExecutedTrigger(e){let{resolver:t,condition:n}=e;return{kind:`resolverExecuted`,resolverName:t.name,condition:n,__args:{}}}const y={created:`idp.user.created`,updated:`idp.user.updated`,deleted:`idp.user.deleted`};function idpUserCreatedTrigger(e){return{kind:`idpUser`,events:[`idp.user.created`],...e?.idp==null?{}:{idp:e.idp},__args:{}}}function idpUserUpdatedTrigger(e){return{kind:`idpUser`,events:[`idp.user.updated`],...e?.idp==null?{}:{idp:e.idp},__args:{}}}function idpUserDeletedTrigger(e){return{kind:`idpUser`,events:[`idp.user.deleted`],...e?.idp==null?{}:{idp:e.idp},__args:{}}}function idpUserTrigger(e){let{events:t,idp:n}=e;return{kind:`idpUser`,events:t.map(e=>y[e]),...n==null?{}:{idp:n},__args:{}}}const b={issued:`auth.access_token.issued`,refreshed:`auth.access_token.refreshed`,revoked:`auth.access_token.revoked`};function authAccessTokenIssuedTrigger(){return{kind:`authAccessToken`,events:[`auth.access_token.issued`],__args:{}}}function authAccessTokenRefreshedTrigger(){return{kind:`authAccessToken`,events:[`auth.access_token.refreshed`],__args:{}}}function authAccessTokenRevokedTrigger(){return{kind:`authAccessToken`,events:[`auth.access_token.revoked`],__args:{}}}function authAccessTokenTrigger(e){let{events:t}=e;return{kind:`authAccessToken`,events:t.map(e=>b[e]),__args:{}}}const x={started:`workflow.workflow_execution.started`,completed:`workflow.workflow_execution.completed`,retried:`workflow.workflow_execution.retried`,resumed:`workflow.workflow_execution.resumed`,wait_started:`workflow.workflow_execution.wait_started`,wait_resolved:`workflow.workflow_execution.wait_resolved`};function workflowExecutionTriggerConfig(e,t){return{kind:`workflowExecution`,events:e,workflowName:t.workflow.name,condition:t.condition,__args:{}}}function workflowExecutionStartedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.started`],e)}function workflowExecutionCompletedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.completed`],e)}function workflowExecutionRetriedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.retried`],e)}function workflowExecutionResumedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.resumed`],e)}function workflowExecutionWaitStartedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.wait_started`],e)}function workflowExecutionWaitResolvedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.wait_resolved`],e)}function workflowExecutionTrigger(e){let{events:t,workflow:n,condition:r}=e;return workflowExecutionTriggerConfig(t.map(e=>x[e]),{workflow:n,condition:r})}const S={started:`workflow.workflow_execution.job_execution.started`,completed:`workflow.workflow_execution.job_execution.completed`,wait_started:`workflow.workflow_execution.job_execution.wait_started`,wait_resolved:`workflow.workflow_execution.job_execution.wait_resolved`};function workflowJobExecutionTriggerConfig(e,t){return{kind:`workflowJobExecution`,events:e,workflowName:t.workflow.name,condition:t.condition,__args:{}}}function workflowJobExecutionStartedTrigger(e){return workflowJobExecutionTriggerConfig([`workflow.workflow_execution.job_execution.started`],e)}function workflowJobExecutionCompletedTrigger(e){return workflowJobExecutionTriggerConfig([`workflow.workflow_execution.job_execution.completed`],e)}function workflowJobExecutionWaitStartedTrigger(e){return workflowJobExecutionTriggerConfig([`workflow.workflow_execution.job_execution.wait_started`],e)}function workflowJobExecutionWaitResolvedTrigger(e){return workflowJobExecutionTriggerConfig([`workflow.workflow_execution.job_execution.wait_resolved`],e)}function workflowJobExecutionTrigger(e){let{events:t,workflow:n,condition:r}=e;return workflowJobExecutionTriggerConfig(t.map(e=>S[e]),{workflow:n,condition:r})}function scheduleTrigger(e){let{cron:t,timezone:n}=e;return{kind:`schedule`,cron:t,timezone:n,__args:{}}}function incomingWebhookTrigger(e){let t=typeof e?.response==`function`?{body:e.response}:e?.response;return{kind:`incomingWebhook`,...t?{response:t}:{},__args:{}}}const C=/^[a-z0-9][a-z0-9_:.-]{0,62}[a-z0-9]$/;function createExecutionPolicyInstance(e,t,n,i,a,o,s){let c=i===`prefix`,l={name:e,key:t,matchType:i,...n&&{concurrencyPolicy:n},...c&&{keyFor:e=>{let t=`${l.key}${a}${e}`;if(!C.test(t))throw Error(`Invalid execution policy key "${t}" built by keyFor("${e}"): must match [a-z0-9_:.-] (2-64 chars; must start and end with [a-z0-9]).`);return t}}};return{instance:r(l,`execution-policy`),setName:o?e=>{l.name=e}:void 0,setKey:s?e=>{l.key=e}:void 0}}function defineWorkflowExecutionPolicy(e,t){return createExecutionPolicyInstance(e,t?.key??e,t?.concurrencyPolicy,t?.matchType??`exact`,t?.separator??`.`,!1,!1).instance}function defineWorkflowExecutionPolicies(e,t){let n=t?.separator??`.`,r=new Map,i=new Map,a=e(e=>{let t=e?.name,a=e?.key,{instance:o,setName:s,setKey:c}=createExecutionPolicyInstance(t??`__pending__`,a??t??`__pending__`,e?.concurrencyPolicy,e?.matchType??`exact`,n,t===void 0,a===void 0&&t===void 0);return s&&r.set(o,s),c&&i.set(o,c),o});for(let e of Object.keys(a)){let t=a[e];r.get(t)?.(e),i.get(t)?.(e)}return a}function createWorkflowJob(e){let t=e.body,n=process.env.__TAILOR_PLATFORM_BUNDLE?t:(e,n)=>s(n.invoker,()=>t(e,n));process.env.__TAILOR_PLATFORM_BUNDLE||i(e.name,n);let o=process.env.__TAILOR_PLATFORM_BUNDLE?()=>{throw Error(`.start() on workflow job "${e.name}" is rewritten at build time and is unavailable in the bundle`)}:function(t,n){return arguments.length>=2?a(e.name,t,n):a(e.name,t)};return r({name:e.name,start:o,body:n,...e.publishEvents===void 0?{}:{publishEvents:e.publishEvents}},`workflow-job`)}const w=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;function parseKey(e){let t=e.split(`-`);return{segments:t,paramNames:t.filter(p).map(e=>e.slice(1))}}function composeKey(e,t,n){let r=t.segments.map(t=>{if(!p(t))return t;let r=t.slice(1),i=n[r];if(typeof i!=`string`)throw Error(`Wait point "${e}" needs a string for parameter "${r}" but received ${i===void 0?`undefined`:typeof i}.`);if(!w.test(i))throw Error(`Wait point "${e}" cannot use ${JSON.stringify(i)} for parameter "${r}": values may only contain [a-z0-9-] and cannot be empty or start or end with "-".`);return i}).join(`-`);if(r.length>63)throw Error(`Wait point key "${r}" built from "${e}" is ${r.length} characters; the limit is 63.`);if(!d.test(r))throw Error(`Wait point key "${r}" built from "${e}" must match ${f}.`);return r}function createBoundWaitPoint(e,t){return{wait(n){return Promise.resolve(e.wait(t(),n))},async resolve(n,r){await e.resolve(t(),n,r)}}}function createWaitPointInstance(e){let t=e,n=l(),i=r(createBoundWaitPoint(n,()=>t),`wait-point`);return u(i,n),{instance:i,setKey:e=>{t=e}}}function createParameterizedWaitPointInstance(e,t,n){let i=l(),unbound=()=>{throw Error(n===`define`?`Wait point key "${e}" has $params, so it identifies no single suspension on its own. Bind them first: waitPoint.with({ ... }).wait(...).`:`Wait point key "${e}" has $params, which createWaitPoint cannot type. Declare it through createWaitPoints instead: createWaitPoints((define) => ({ myWaitPoint: define.for("${e}")<Payload, Result>() })).`)},a=r({with(n){let r=composeKey(e,t,n);return c(createBoundWaitPoint(i,()=>r),r)},wait:unbound,resolve:unbound},`wait-point`);return u(a,i),a}function createKeyedWaitPoint(e,t){m({key:e,declaredBy:t});let n=parseKey(e);return n.paramNames.length>0?createParameterizedWaitPointInstance(e,n,t):createWaitPointInstance(e).instance}function createWaitPoint(e){return createKeyedWaitPoint(e,`createWaitPoint`)}function createWaitPoints(e){let t=new Map,n=e(Object.assign(()=>{let{instance:e,setKey:n}=createWaitPointInstance(`__pending__`);return t.set(e,n),e},{for:e=>{let t=createKeyedWaitPoint(e,`define`);return()=>t}}));for(let e of Object.keys(n)){let r=t.get(n[e]);r&&(m({key:e,declaredBy:`property`}),r(e))}return n}function createWorkflow(e){return r({...e,start:process.env.__TAILOR_PLATFORM_BUNDLE?async()=>{throw Error(`workflow.start() is rewritten at build time and unavailable in the bundle`)}:async function(t,n){return arguments.length>=2?await o(e.name,t,n):await o(e.name,t)}},`workflow`)}function defineStaticWebSite(e,t){return{...t,name:e,get url(){return`${e}:url`}}}function defineAIGateway(e,t){return{...t,name:e}}const T={create:[{conditions:[],permit:!0}],read:[{conditions:[],permit:!0}],update:[{conditions:[],permit:!0}],delete:[{conditions:[],permit:!0}],sendPasswordResetEmail:[{conditions:[],permit:!0}],unenrollMfa:[{conditions:[],permit:!0}]};function defineIdp(e,t){return{...t,name:e,provider(t,n){return{name:t,kind:`BuiltInIdP`,namespace:e,clientName:n}}}}function defineSecretManager(e,t){let n={vaults:e,options:{ignoreNullishValues:t?.ignoreNullishValues??!1}};return Object.defineProperty(n,"get",{value:async(e,t)=>tailor.secretmanager.getSecret(e,t),enumerable:!1}),Object.defineProperty(n,"getAll",{value:async(e,t)=>{let n=await tailor.secretmanager.getSecrets(e,t);return t.map(e=>n[e])},enumerable:!1}),n}function createHttpAdapter(e){return r({...e},`http-adapter`)}function defineConfig(e){return e}function definePlugins(...e){return e}const E=h;export{authAccessTokenIssuedTrigger,authAccessTokenRefreshedTrigger,authAccessTokenRevokedTrigger,authAccessTokenTrigger,createExecutor,createHttpAdapter,createResolver,createWaitPoint,createWaitPoints,createWorkflow,createWorkflowJob,n as db,defineAIGateway,defineAuth,defineConfig,defineIdp,definePlugins,defineSecretManager,defineStaticWebSite,defineWorkflowExecutionPolicies,defineWorkflowExecutionPolicy,idpUserCreatedTrigger,idpUserDeletedTrigger,idpUserTrigger,idpUserUpdatedTrigger,incomingWebhookTrigger,recordCreatedTrigger,recordDeletedTrigger,recordTrigger,recordUpdatedTrigger,resolverExecutedTrigger,scheduleTrigger,E as t,_ as unsafeAllowAllGqlPermission,T as unsafeAllowAllIdPPermission,g as unsafeAllowAllTypePermission,workflowExecutionCompletedTrigger,workflowExecutionResumedTrigger,workflowExecutionRetriedTrigger,workflowExecutionStartedTrigger,workflowExecutionTrigger,workflowExecutionWaitResolvedTrigger,workflowExecutionWaitStartedTrigger,workflowJobExecutionCompletedTrigger,workflowJobExecutionStartedTrigger,workflowJobExecutionTrigger,workflowJobExecutionWaitResolvedTrigger,workflowJobExecutionWaitStartedTrigger};
1
+ import{r as e}from"../field-parse-CzlKC4b7.mjs";import{n as t,t as n}from"../schema-DRyQEabV.mjs";import{t as r}from"../brand-C8nMKhJC.mjs";import{a as i,n as a,r as o}from"../registry-HlEaGvl5.mjs";import{l as s,n as c,r as l,t as u}from"../wait-point-invoker-eiP-IIux.mjs";import{a as d,i as f,o as p,r as m}from"../wait-point-registry-B-ESkTZX.mjs";function createTailorField(n,r,i,a,o){let s=o?{...o,...o.allowedValues&&{allowedValues:o.allowedValues.map(e=>({...e}))},...o.validate&&{validate:o.validate.map(e=>Array.isArray(e)?[...e]:e)}}:{required:!0};o||(r&&(r.optional===!0&&(s.required=!1),r.array===!0&&(s.array=!0)),a&&(s.allowedValues=t(a)));function parseInternal$1(t){return e({...t,field:c})}function cloneWith(e){let t=c.clone();return Object.assign(t._metadata,e),t}let c={type:n,fields:i??{},_defined:void 0,_output:void 0,_metadata:s,get metadata(){return{...this._metadata}},description(e){return cloneWith({description:e})},typeName(e){return cloneWith({typeName:e})},validate(...e){return cloneWith({validate:e})},parse(e){return parseInternal$1({value:e.value,data:e.data,invoker:e.invoker,pathArray:[]})},clone(){let e=i;if(i){let t={};for(let[e,n]of Object.entries(i))t[e]=n.clone();e=t}return createTailorField(n,r,e,a,this._metadata)}};return c}function uuid(e){return createTailorField(`uuid`,e)}function string(e){return createTailorField(`string`,e)}function bool(e){return createTailorField(`boolean`,e)}function int(e){return createTailorField(`integer`,e)}function float(e){return createTailorField(`float`,e)}function decimal(e){return createTailorField(`decimal`,e)}function date(e){let t=createTailorField(`date`,e);return e?.as===`date`&&(t._metadata.as=`date`),t}function datetime(e){return createTailorField(`datetime`,e)}function time(e){return createTailorField(`time`,e)}function _enum(e,t){return createTailorField(`enum`,t,void 0,e)}function object(e,t){return createTailorField(`nested`,t,e)}const h={uuid,string,bool,int,float,decimal,date,datetime,time,enum:_enum,object};function defineAuth(e,t){return{...t,name:e}}const g={create:[{conditions:[],permit:!0}],read:[{conditions:[],permit:!0}],update:[{conditions:[],permit:!0}],delete:[{conditions:[],permit:!0}]},_=[{conditions:[],actions:`all`,permit:!0}];function createResolver(e){let t=(e=>typeof e==`object`&&!!e&&`type`in e&&typeof e.type==`string`)(e.output)?e.output:h.object(e.output);return r({...e,output:t},`resolver`)}function createExecutor(e){return r(e,`executor`)}const v={created:`tailordb.type_record.created`,updated:`tailordb.type_record.updated`,deleted:`tailordb.type_record.deleted`};function recordCreatedTrigger(e){let{type:t,condition:n}=e;return{kind:`tailordb`,events:[`tailordb.type_record.created`],tableName:t.name,condition:n,__args:{}}}function recordUpdatedTrigger(e){let{type:t,condition:n}=e;return{kind:`tailordb`,events:[`tailordb.type_record.updated`],tableName:t.name,condition:n,__args:{}}}function recordDeletedTrigger(e){let{type:t,condition:n}=e;return{kind:`tailordb`,events:[`tailordb.type_record.deleted`],tableName:t.name,condition:n,__args:{}}}function recordTrigger(e){let{type:t,events:n,condition:r}=e;return{kind:`tailordb`,events:n.map(e=>v[e]),tableName:t.name,condition:r,__args:{}}}function resolverExecutedTrigger(e){let{resolver:t,condition:n}=e;return{kind:`resolverExecuted`,resolverName:t.name,condition:n,__args:{}}}const y={created:`idp.user.created`,updated:`idp.user.updated`,deleted:`idp.user.deleted`};function idpUserCreatedTrigger(e){return{kind:`idpUser`,events:[`idp.user.created`],...e?.idp==null?{}:{idp:e.idp},__args:{}}}function idpUserUpdatedTrigger(e){return{kind:`idpUser`,events:[`idp.user.updated`],...e?.idp==null?{}:{idp:e.idp},__args:{}}}function idpUserDeletedTrigger(e){return{kind:`idpUser`,events:[`idp.user.deleted`],...e?.idp==null?{}:{idp:e.idp},__args:{}}}function idpUserTrigger(e){let{events:t,idp:n}=e;return{kind:`idpUser`,events:t.map(e=>y[e]),...n==null?{}:{idp:n},__args:{}}}const b={issued:`auth.access_token.issued`,refreshed:`auth.access_token.refreshed`,revoked:`auth.access_token.revoked`};function authAccessTokenIssuedTrigger(){return{kind:`authAccessToken`,events:[`auth.access_token.issued`],__args:{}}}function authAccessTokenRefreshedTrigger(){return{kind:`authAccessToken`,events:[`auth.access_token.refreshed`],__args:{}}}function authAccessTokenRevokedTrigger(){return{kind:`authAccessToken`,events:[`auth.access_token.revoked`],__args:{}}}function authAccessTokenTrigger(e){let{events:t}=e;return{kind:`authAccessToken`,events:t.map(e=>b[e]),__args:{}}}const x={started:`workflow.workflow_execution.started`,completed:`workflow.workflow_execution.completed`,retried:`workflow.workflow_execution.retried`,resumed:`workflow.workflow_execution.resumed`,wait_started:`workflow.workflow_execution.wait_started`,wait_resolved:`workflow.workflow_execution.wait_resolved`};function workflowExecutionTriggerConfig(e,t){return{kind:`workflowExecution`,events:e,workflowName:t.workflow.name,condition:t.condition,__args:{}}}function workflowExecutionStartedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.started`],e)}function workflowExecutionCompletedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.completed`],e)}function workflowExecutionRetriedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.retried`],e)}function workflowExecutionResumedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.resumed`],e)}function workflowExecutionWaitStartedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.wait_started`],e)}function workflowExecutionWaitResolvedTrigger(e){return workflowExecutionTriggerConfig([`workflow.workflow_execution.wait_resolved`],e)}function workflowExecutionTrigger(e){let{events:t,workflow:n,condition:r}=e;return workflowExecutionTriggerConfig(t.map(e=>x[e]),{workflow:n,condition:r})}const S={started:`workflow.workflow_execution.job_execution.started`,completed:`workflow.workflow_execution.job_execution.completed`,wait_started:`workflow.workflow_execution.job_execution.wait_started`,wait_resolved:`workflow.workflow_execution.job_execution.wait_resolved`};function workflowJobExecutionTriggerConfig(e,t){return{kind:`workflowJobExecution`,events:e,workflowName:t.workflow.name,condition:t.condition,__args:{}}}function workflowJobExecutionStartedTrigger(e){return workflowJobExecutionTriggerConfig([`workflow.workflow_execution.job_execution.started`],e)}function workflowJobExecutionCompletedTrigger(e){return workflowJobExecutionTriggerConfig([`workflow.workflow_execution.job_execution.completed`],e)}function workflowJobExecutionWaitStartedTrigger(e){return workflowJobExecutionTriggerConfig([`workflow.workflow_execution.job_execution.wait_started`],e)}function workflowJobExecutionWaitResolvedTrigger(e){return workflowJobExecutionTriggerConfig([`workflow.workflow_execution.job_execution.wait_resolved`],e)}function workflowJobExecutionTrigger(e){let{events:t,workflow:n,condition:r}=e;return workflowJobExecutionTriggerConfig(t.map(e=>S[e]),{workflow:n,condition:r})}function scheduleTrigger(e){let{cron:t,timezone:n}=e;return{kind:`schedule`,cron:t,timezone:n,__args:{}}}function incomingWebhookTrigger(e){let t=typeof e?.response==`function`?{body:e.response}:e?.response;return{kind:`incomingWebhook`,...t?{response:t}:{},__args:{}}}const C=/^[a-z0-9][a-z0-9_:.-]{0,62}[a-z0-9]$/;function createExecutionPolicyInstance(e,t,n,i,a,o,s){let c=i===`prefix`,l={name:e,key:t,matchType:i,...n&&{concurrencyPolicy:n},...c&&{keyFor:e=>{let t=`${l.key}${a}${e}`;if(!C.test(t))throw Error(`Invalid execution policy key "${t}" built by keyFor("${e}"): must match [a-z0-9_:.-] (2-64 chars; must start and end with [a-z0-9]).`);return t}}};return{instance:r(l,`execution-policy`),setName:o?e=>{l.name=e}:void 0,setKey:s?e=>{l.key=e}:void 0}}function defineWorkflowExecutionPolicy(e,t){return createExecutionPolicyInstance(e,t?.key??e,t?.concurrencyPolicy,t?.matchType??`exact`,t?.separator??`.`,!1,!1).instance}function defineWorkflowExecutionPolicies(e,t){let n=t?.separator??`.`,r=new Map,i=new Map,a=e(e=>{let t=e?.name,a=e?.key,{instance:o,setName:s,setKey:c}=createExecutionPolicyInstance(t??`__pending__`,a??t??`__pending__`,e?.concurrencyPolicy,e?.matchType??`exact`,n,t===void 0,a===void 0&&t===void 0);return s&&r.set(o,s),c&&i.set(o,c),o});for(let e of Object.keys(a)){let t=a[e];r.get(t)?.(e),i.get(t)?.(e)}return a}function createWorkflowJob(e){let t=e.body,n=process.env.__TAILOR_PLATFORM_BUNDLE?t:(e,n)=>s(n.invoker,()=>t(e,n));process.env.__TAILOR_PLATFORM_BUNDLE||i(e.name,n);let o=process.env.__TAILOR_PLATFORM_BUNDLE?()=>{throw Error(`.start() on workflow job "${e.name}" is rewritten at build time and is unavailable in the bundle`)}:function(t,n){return arguments.length>=2?a(e.name,t,n):a(e.name,t)};return r({name:e.name,start:o,body:n,...e.publishEvents===void 0?{}:{publishEvents:e.publishEvents}},`workflow-job`)}const w=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;function parseKey(e){let t=e.split(`-`);return{segments:t,paramNames:t.filter(p).map(e=>e.slice(1))}}function composeKey(e,t,n){let r=t.segments.map(t=>{if(!p(t))return t;let r=t.slice(1),i=n[r];if(typeof i!=`string`)throw Error(`Wait point "${e}" needs a string for parameter "${r}" but received ${i===void 0?`undefined`:typeof i}.`);if(!w.test(i))throw Error(`Wait point "${e}" cannot use ${JSON.stringify(i)} for parameter "${r}": values may only contain [a-z0-9-] and cannot be empty or start or end with "-".`);return i}).join(`-`);if(r.length>63)throw Error(`Wait point key "${r}" built from "${e}" is ${r.length} characters; the limit is 63.`);if(!d.test(r))throw Error(`Wait point key "${r}" built from "${e}" must match ${f}.`);return r}function createBoundWaitPoint(e,t){return{wait(n){return Promise.resolve(e.wait(t(),n))},async resolve(n,r){await e.resolve(t(),n,r)}}}function createWaitPointInstance(e){let t=e,n=l(),i=r(createBoundWaitPoint(n,()=>t),`wait-point`);return u(i,n),{instance:i,setKey:e=>{t=e}}}function createParameterizedWaitPointInstance(e,t,n){let i=l(),unbound=()=>{throw Error(n===`define`?`Wait point key "${e}" has $params, so it identifies no single suspension on its own. Bind them first: waitPoint.with({ ... }).wait(...).`:`Wait point key "${e}" has $params, which createWaitPoint cannot type. Declare it through createWaitPoints instead: createWaitPoints((define) => ({ myWaitPoint: define.for("${e}")<Payload, Result>() })).`)},a=r({with(n){let r=composeKey(e,t,n);return c(createBoundWaitPoint(i,()=>r),r)},wait:unbound,resolve:unbound},`wait-point`);return u(a,i),a}function createKeyedWaitPoint(e,t){m({key:e,declaredBy:t});let n=parseKey(e);return n.paramNames.length>0?createParameterizedWaitPointInstance(e,n,t):createWaitPointInstance(e).instance}function createWaitPoint(e){return createKeyedWaitPoint(e,`createWaitPoint`)}function createWaitPoints(e){let t=new Map,n=e(Object.assign(()=>{let{instance:e,setKey:n}=createWaitPointInstance(`__pending__`);return t.set(e,n),e},{for:e=>{let t=createKeyedWaitPoint(e,`define`);return()=>t}}));for(let e of Object.keys(n)){let r=t.get(n[e]);r&&(m({key:e,declaredBy:`property`}),r(e))}return n}function createWorkflow(e){return r({...e,start:process.env.__TAILOR_PLATFORM_BUNDLE?async()=>{throw Error(`workflow.start() is rewritten at build time and unavailable in the bundle`)}:async function(t,n){return arguments.length>=2?await o(e.name,t,n):await o(e.name,t)}},`workflow`)}function defineStaticWebSite(e,t){return{...t,name:e,get url(){return`${e}:url`}}}function defineAIGateway(e,t){return{...t,name:e}}const T={create:[{conditions:[],permit:!0}],read:[{conditions:[],permit:!0}],update:[{conditions:[],permit:!0}],delete:[{conditions:[],permit:!0}],sendPasswordResetEmail:[{conditions:[],permit:!0}],unenrollMfa:[{conditions:[],permit:!0}]};function defineIdp(e,t){return{...t,name:e,provider(t,n){return{name:t,kind:`BuiltInIdP`,namespace:e,clientName:n}}}}function defineSecretManager(e,t){let n={vaults:e,options:{ignoreNullishValues:t?.ignoreNullishValues??!1}};return Object.defineProperty(n,"get",{value:async(e,t)=>tailor.secretmanager.getSecret(e,t),enumerable:!1}),Object.defineProperty(n,"getAll",{value:async(e,t)=>{let n=await tailor.secretmanager.getSecrets(e,t);return t.map(e=>n[e])},enumerable:!1}),n}function createHttpAdapter(e){return r({...e},`http-adapter`)}function defineConfig(e){return e}function definePlugins(...e){return e}const E=h;export{authAccessTokenIssuedTrigger,authAccessTokenRefreshedTrigger,authAccessTokenRevokedTrigger,authAccessTokenTrigger,createExecutor,createHttpAdapter,createResolver,createWaitPoint,createWaitPoints,createWorkflow,createWorkflowJob,n as db,defineAIGateway,defineAuth,defineConfig,defineIdp,definePlugins,defineSecretManager,defineStaticWebSite,defineWorkflowExecutionPolicies,defineWorkflowExecutionPolicy,idpUserCreatedTrigger,idpUserDeletedTrigger,idpUserTrigger,idpUserUpdatedTrigger,incomingWebhookTrigger,recordCreatedTrigger,recordDeletedTrigger,recordTrigger,recordUpdatedTrigger,resolverExecutedTrigger,scheduleTrigger,E as t,_ as unsafeAllowAllGqlPermission,T as unsafeAllowAllIdPPermission,g as unsafeAllowAllTypePermission,workflowExecutionCompletedTrigger,workflowExecutionResumedTrigger,workflowExecutionRetriedTrigger,workflowExecutionStartedTrigger,workflowExecutionTrigger,workflowExecutionWaitResolvedTrigger,workflowExecutionWaitStartedTrigger,workflowJobExecutionCompletedTrigger,workflowJobExecutionStartedTrigger,workflowJobExecutionTrigger,workflowJobExecutionWaitResolvedTrigger,workflowJobExecutionWaitStartedTrigger};
2
2
  //# sourceMappingURL=index.mjs.map