@tailor-platform/sdk 2.14.2 → 2.16.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 (129) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/bin/tailor.mjs +2 -2
  3. package/dist/application-Dw3t9p2f.mjs +1 -0
  4. package/dist/{application-BAqZFMWP.mjs → application-wYQ-ivDg.mjs} +27 -27
  5. package/dist/application-wYQ-ivDg.mjs.map +1 -0
  6. package/dist/cli/commands/deploy/app-id-lock.d.mts +97 -0
  7. package/dist/cli/commands/executor/jobs.d.mts +1 -0
  8. package/dist/cli/commands/generate/seed/bundler.d.mts +18 -0
  9. package/dist/cli/commands/tailordb/migrate/config.d.mts +1 -0
  10. package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +15 -1
  11. package/dist/cli/commands/tailordb/migrate/generate.d.mts +5 -2
  12. package/dist/cli/commands/tailordb/migrate/rename-detection.d.mts +13 -0
  13. package/dist/cli/commands/tailordb/migrate/snapshot-comparison.d.mts +7 -1
  14. package/dist/cli/commands/workflow/executions.d.mts +2 -0
  15. package/dist/cli/commands/workflow/waiter.d.mts +1 -0
  16. package/dist/cli/commands/workspace/create.d.mts +16 -1
  17. package/dist/cli/commands/workspace/expiry.d.mts +5 -0
  18. package/dist/cli/commands/workspace/get.d.mts +6 -1
  19. package/dist/cli/commands/workspace/list.d.mts +1 -0
  20. package/dist/cli/lib.d.mts +6 -3
  21. package/dist/cli/lib.mjs +1 -1
  22. package/dist/cli/lib.mjs.map +1 -1
  23. package/dist/cli/main.d.mts +8 -8
  24. package/dist/cli/main.mjs +56 -60
  25. package/dist/cli/main.mjs.map +1 -1
  26. package/dist/cli/shared/command.d.mts +1 -1
  27. package/dist/cli/shared/error-json.d.mts +2 -1
  28. package/dist/cli/shared/errors.d.mts +1 -0
  29. package/dist/cli/shared/function-execution.d.mts +14 -0
  30. package/dist/cli/shared/github-actions.d.mts +13 -0
  31. package/dist/completion/zsh-worker.zsh +98 -5
  32. package/dist/configure/config/types.d.mts +23 -6
  33. package/dist/configure/index.mjs +1 -1
  34. package/dist/configure/index.mjs.map +1 -1
  35. package/dist/configure/services/executor/trigger/event.d.mts +5 -2
  36. package/dist/crashreport-DF8YMIE5.mjs +1 -0
  37. package/dist/{crashreport-BN28xp5B.mjs → crashreport-Doz2Kuuq.mjs} +2 -2
  38. package/dist/{crashreport-BN28xp5B.mjs.map → crashreport-Doz2Kuuq.mjs.map} +1 -1
  39. package/dist/date-CGBZbMW5.mjs +2 -0
  40. package/dist/date-CGBZbMW5.mjs.map +1 -0
  41. package/dist/errors-BtTxkzgy.mjs +7 -0
  42. package/dist/errors-BtTxkzgy.mjs.map +1 -0
  43. package/dist/file-DKBOj5q4.mjs +2 -0
  44. package/dist/file-DKBOj5q4.mjs.map +1 -0
  45. package/dist/guards-ForsrxnH.mjs +2 -0
  46. package/dist/guards-ForsrxnH.mjs.map +1 -0
  47. package/dist/{logger-CCjs1DuH.mjs → logger-CEAxByN5.mjs} +3 -3
  48. package/dist/{logger-CCjs1DuH.mjs.map → logger-CEAxByN5.mjs.map} +1 -1
  49. package/dist/manager-E3ffRcCt.mjs +2 -0
  50. package/dist/manager-E3ffRcCt.mjs.map +1 -0
  51. package/dist/node-builtins-DYfhPBnz.mjs +2 -0
  52. package/dist/node-builtins-DYfhPBnz.mjs.map +1 -0
  53. package/dist/plugin/builtin/file-utils/index.mjs +27 -1
  54. package/dist/plugin/builtin/file-utils/index.mjs.map +1 -1
  55. package/dist/plugin/builtin/seed/index.mjs +1 -1
  56. package/dist/plugin/builtin/seed/seed-type-processor.d.mts +17 -0
  57. package/dist/plugin/get-generated-table.d.mts +13 -0
  58. package/dist/plugin/index.d.mts +2 -2
  59. package/dist/plugin/index.mjs +1 -1
  60. package/dist/plugin/index.mjs.map +1 -1
  61. package/dist/register-ts-hook-DrHS-J1k.mjs +878 -0
  62. package/dist/register-ts-hook-DrHS-J1k.mjs.map +1 -0
  63. package/dist/runtime/file.d.mts +46 -2
  64. package/dist/runtime/file.mjs +1 -1
  65. package/dist/runtime/index.mjs +1 -1
  66. package/dist/{schema-DMlLMsWA.mjs → schema-BTioi2dP.mjs} +2 -2
  67. package/dist/{schema-DMlLMsWA.mjs.map → schema-BTioi2dP.mjs.map} +1 -1
  68. package/dist/{seed-CCc9Xk66.mjs → seed-C3P_T_Eh.mjs} +28 -9
  69. package/dist/seed-C3P_T_Eh.mjs.map +1 -0
  70. package/dist/service-Cw7hb5HK.mjs +2 -0
  71. package/dist/service-Cw7hb5HK.mjs.map +1 -0
  72. package/dist/service-DaoW0kzo.mjs +7 -0
  73. package/dist/service-DaoW0kzo.mjs.map +1 -0
  74. package/dist/service-dn9jxC8c.mjs +1 -0
  75. package/dist/service_pb-DKrsO1_u.mjs +1 -0
  76. package/dist/service_pb-DprmLNsq.mjs +2 -0
  77. package/dist/{service_pb-BdzjiHfC.mjs.map → service_pb-DprmLNsq.mjs.map} +1 -1
  78. package/dist/types/auth.generated.d.mts +1 -19
  79. package/dist/types/executor.generated.d.mts +5 -3
  80. package/dist/types/field.generated.d.mts +40 -0
  81. package/dist/types/helpers.d.mts +9 -1
  82. package/dist/types/resolver.generated.d.mts +5 -40
  83. package/dist/utils/test/index.d.mts +7 -5
  84. package/dist/utils/test/index.mjs +1 -1
  85. package/dist/utils/test/index.mjs.map +1 -1
  86. package/dist/vitest/index.d.mts +2 -3
  87. package/dist/vitest/index.mjs +1 -1
  88. package/dist/vitest/index.mjs.map +1 -1
  89. package/dist/vitest/mocks/file.d.mts +2 -2
  90. package/dist/vitest/setup.d.mts +0 -37
  91. package/dist/vitest/setup.mjs +1 -1
  92. package/dist/vitest/setup.mjs.map +1 -1
  93. package/dist/{workspace_resource_pb-C4EY-Gns.mjs → workspace_resource_pb-BOoRts_z.mjs} +2 -2
  94. package/dist/{workspace_resource_pb-C4EY-Gns.mjs.map → workspace_resource_pb-BOoRts_z.mjs.map} +1 -1
  95. package/docs/cli/application.md +1 -1
  96. package/docs/cli/function.md +19 -6
  97. package/docs/cli/tailordb.md +11 -11
  98. package/docs/cli/workspace.md +133 -20
  99. package/docs/cli-reference.md +94 -25
  100. package/docs/configuration.md +20 -3
  101. package/docs/github-actions.md +45 -13
  102. package/docs/migration/v3.md +38 -0
  103. package/docs/plugin/custom.md +36 -4
  104. package/docs/runtime.md +39 -0
  105. package/docs/services/resolver.md +3 -1
  106. package/docs/services/tailordb-migration.md +31 -9
  107. package/docs/testing.md +3 -7
  108. package/package.json +10 -10
  109. package/dist/application-BAqZFMWP.mjs.map +0 -1
  110. package/dist/application-BKlOiD1x.mjs +0 -1
  111. package/dist/crashreport-By23O2k-.mjs +0 -1
  112. package/dist/date-DrUO8rOJ.mjs +0 -2
  113. package/dist/date-DrUO8rOJ.mjs.map +0 -1
  114. package/dist/errors-BlX4gUw5.mjs +0 -4
  115. package/dist/errors-BlX4gUw5.mjs.map +0 -1
  116. package/dist/file-COPYfju_.mjs +0 -2
  117. package/dist/file-COPYfju_.mjs.map +0 -1
  118. package/dist/node-builtins-TQHhwNzG.mjs +0 -2
  119. package/dist/node-builtins-TQHhwNzG.mjs.map +0 -1
  120. package/dist/register-ts-hook-Cphn4r8s.mjs +0 -642
  121. package/dist/register-ts-hook-Cphn4r8s.mjs.map +0 -1
  122. package/dist/seed-CCc9Xk66.mjs.map +0 -1
  123. package/dist/service-7SCy2bhm.mjs +0 -7
  124. package/dist/service-7SCy2bhm.mjs.map +0 -1
  125. package/dist/service-CWFQ8EVo.mjs +0 -1
  126. package/dist/service-CqbQXFDp.mjs +0 -2
  127. package/dist/service-CqbQXFDp.mjs.map +0 -1
  128. package/dist/service_pb-BdzjiHfC.mjs +0 -2
  129. package/dist/service_pb-p68oLtp9.mjs +0 -1
@@ -1,5 +1,5 @@
1
1
  import { CommonArgsType } from "./args.mjs";
2
- import { createDefineCommand } from "politty";
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,7 +11,7 @@ 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.
@@ -0,0 +1 @@
1
+ import { Jsonifiable } from "type-fest";
@@ -0,0 +1,14 @@
1
+ import "../../tailor-proto/src/tailor/v1/function_resource_pb.mjs";
2
+ //#region src/cli/shared/function-execution.d.ts
3
+ /**
4
+ * A structured log line recorded while a function execution ran.
5
+ */
6
+ export interface FunctionLogEntryInfo {
7
+ /** Log message */
8
+ message: string;
9
+ /** Severity name such as `INFO`, `WARNING`, or `ERROR` */
10
+ severity: string;
11
+ /** When the line was logged, or null when unknown */
12
+ timestamp: Date | null;
13
+ }
14
+ //#endregion
@@ -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
@@ -1,5 +1,5 @@
1
1
  # politty-completion-version: 1
2
- # politty-bin-sig: 1788846647
2
+ # politty-bin-sig: 1789393909
3
3
  # politty-bin-path: /home/runner/work/sdk/sdk/node_modules/.bin/tailor
4
4
  # program: tailor
5
5
  # shell: zsh
@@ -593,6 +593,8 @@ __tailor_worker_opt_takes_value() {
593
593
  function:logs:--profile|function:logs:-p|function:logs:--p) return 0 ;;
594
594
  function:logs:--order) return 0 ;;
595
595
  function:logs:--limit|function:logs:-l|function:logs:--l) return 0 ;;
596
+ function:logs:--interval|function:logs:-i|function:logs:--i) return 0 ;;
597
+ function:logs:--timeout|function:logs:-t|function:logs:--t) return 0 ;;
596
598
  function:run:--workspace-id|function:run:--workspaceId|function:run:-w|function:run:--w) return 0 ;;
597
599
  function:run:--profile|function:run:-p|function:run:--p) return 0 ;;
598
600
  function:run:--name|function:run:-n|function:run:--n) return 0 ;;
@@ -821,6 +823,7 @@ __tailor_worker_opt_takes_value() {
821
823
  workspace:create:--region|workspace:create:-r|workspace:create:--r) return 0 ;;
822
824
  workspace:create:--organization-id|workspace:create:--organizationId|workspace:create:-o|workspace:create:--o) return 0 ;;
823
825
  workspace:create:--folder-id|workspace:create:--folderId|workspace:create:-f|workspace:create:--f) return 0 ;;
826
+ workspace:create:--ttl) return 0 ;;
824
827
  workspace:create:--profile-name|workspace:create:--profileName|workspace:create:-p|workspace:create:--p) return 0 ;;
825
828
  workspace:create:--profile) return 0 ;;
826
829
  workspace:create:--profile-user|workspace:create:--profileUser) return 0 ;;
@@ -831,7 +834,19 @@ __tailor_worker_opt_takes_value() {
831
834
  workspace:list:--order) return 0 ;;
832
835
  workspace:list:--limit|workspace:list:-l|workspace:list:--l) return 0 ;;
833
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 ;;
834
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 ;;
835
850
  workspace:user:invite:--workspace-id|workspace:user:invite:--workspaceId|workspace:user:invite:-w|workspace:user:invite:--w) return 0 ;;
836
851
  workspace:user:invite:--profile|workspace:user:invite:-p|workspace:user:invite:--p) return 0 ;;
837
852
  workspace:user:invite:--email) return 0 ;;
@@ -989,7 +1004,11 @@ __tailor_worker_is_subcmd() {
989
1004
  workspace:delete) return 0 ;;
990
1005
  workspace:get) return 0 ;;
991
1006
  workspace:list) return 0 ;;
1007
+ workspace:prune) return 0 ;;
992
1008
  workspace:restore) return 0 ;;
1009
+ workspace:ttl:set) return 0 ;;
1010
+ workspace:ttl:clear) return 0 ;;
1011
+ workspace:ttl) return 0 ;;
993
1012
  workspace:user:invite) return 0 ;;
994
1013
  workspace:user:list) return 0 ;;
995
1014
  workspace:user:remove) return 0 ;;
@@ -1646,6 +1665,9 @@ __tailor_worker_complete_function_logs() {
1646
1665
  __tailor_worker_not_used "--profile" "-p" "--p" && _opts+=("--profile:Workspace profile")
1647
1666
  __tailor_worker_not_used "--order" && _opts+=("--order:Sort order (asc or desc)")
1648
1667
  __tailor_worker_not_used "--limit" "-l" "--l" && _opts+=("--limit:Maximum number of items to return (0\: unlimited)")
1668
+ __tailor_worker_not_used "--follow" "-f" "--f" && _opts+=("--follow:Keep polling a running execution and print new log entries as they arrive (detail mode only)")
1669
+ __tailor_worker_not_used "--interval" "-i" "--i" && _opts+=("--interval:Polling interval for --follow (e.g., '3s', '500ms', '1m')")
1670
+ __tailor_worker_not_used "--timeout" "-t" "--t" && _opts+=("--timeout:Maximum time to keep following (e.g., '30s', '10m'); unbounded by default")
1649
1671
  __tailor_worker_not_used "--help" && _opts+=("--help:Show help")
1650
1672
  __tailor_worker_cdescribe 'options' _opts
1651
1673
  return 0
@@ -2965,9 +2987,9 @@ __tailor_worker_complete_tailordb_migration_generate() {
2965
2987
  __tailor_worker_not_used "--init" && _opts+=("--init:Delete existing migrations and start fresh")
2966
2988
  __tailor_worker_not_used "--data-only" "--dataOnly" && _opts+=("--data-only:Create a migration with no schema changes whose migration script runs a standalone data transformation")
2967
2989
  __tailor_worker_not_used "--namespace" && _opts+=("--namespace:Target TailorDB namespace for --data-only (required if multiple namespaces exist)")
2968
- _opts+=("--rename:Record a field or table rename instead of remove + add (format\: \"Table.oldField\:newField\" or \"OldTable\:NewTable\"; repeatable). Renames require a migration script that copies the data.")
2969
- _opts+=("--drop:Confirm that a removed field or table is a genuine removal, not a rename (format\: \"Table.field\" or \"Table\"; repeatable). Required in non-interactive runs for a removal with rename candidates.")
2970
- _opts+=("--expand-contract:Convert a field type through a temporary field (format\: \"Table.field\"; repeatable). Generates two migrations.")
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.")
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.")
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.")
2971
2993
  __tailor_worker_not_used "--help" && _opts+=("--help:Show help")
2972
2994
  __tailor_worker_cdescribe 'options' _opts
2973
2995
  return 0
@@ -3874,6 +3896,7 @@ __tailor_worker_complete_workspace_create() {
3874
3896
  __tailor_worker_not_used "--delete-protection" "--deleteProtection" "-d" "--d" && _opts+=("--delete-protection:Enable delete protection")
3875
3897
  __tailor_worker_not_used "--organization-id" "--organizationId" "-o" "--o" && _opts+=("--organization-id:Organization ID to workspace associate with")
3876
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")
3877
3900
  __tailor_worker_not_used "--profile-name" "--profileName" "-p" "--p" && _opts+=("--profile-name:Profile name to create")
3878
3901
  __tailor_worker_not_used "--profile" && _opts+=("--profile:Workspace profile used for authentication and Platform selection")
3879
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)")
@@ -3933,6 +3956,29 @@ __tailor_worker_complete_workspace_list() {
3933
3956
  fi
3934
3957
  }
3935
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
+
3936
3982
  __tailor_worker_complete_workspace_restore() {
3937
3983
  local -a _vals=()
3938
3984
  if __tailor_worker_opt_takes_value "workspace:restore" "${words[CURRENT-1]}"; then return 0; fi
@@ -3947,6 +3993,49 @@ __tailor_worker_complete_workspace_restore() {
3947
3993
  fi
3948
3994
  }
3949
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
+
3950
4039
  __tailor_worker_complete_workspace_user_invite() {
3951
4040
  local -a _vals=()
3952
4041
  case "${words[CURRENT-1]}" in
@@ -4053,7 +4142,7 @@ __tailor_worker_complete_workspace() {
4053
4142
  __tailor_worker_cdescribe 'options' _opts
4054
4143
  return 0
4055
4144
  fi
4056
- 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")
4057
4146
  __tailor_worker_cdescribe 'subcommands' _subs
4058
4147
  }
4059
4148
 
@@ -4341,7 +4430,11 @@ _tailor_worker_completions() {
4341
4430
  workspace:delete) __tailor_worker_complete_workspace_delete ;;
4342
4431
  workspace:get) __tailor_worker_complete_workspace_get ;;
4343
4432
  workspace:list) __tailor_worker_complete_workspace_list ;;
4433
+ workspace:prune) __tailor_worker_complete_workspace_prune ;;
4344
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 ;;
4345
4438
  workspace:user:invite) __tailor_worker_complete_workspace_user_invite ;;
4346
4439
  workspace:user:list) __tailor_worker_complete_workspace_user_list ;;
4347
4440
  workspace:user:remove) __tailor_worker_complete_workspace_user_remove ;;
@@ -85,12 +85,13 @@ export interface AppConfig<Auth extends AuthConfig = AuthConfig, Idp extends IdP
85
85
  name: string;
86
86
  /**
87
87
  * Stable identifier used to track the application across renames.
88
- * Managed by the SDK: auto-generated and written into `tailor.config.ts`
89
- * on first `deploy`. Delete this field if you want the SDK to assign a
90
- * new id on the next `deploy` — typical case: `tailor.config.ts` was
91
- * copied from another project and the new application should not share
92
- * the original's id. Existing resources are re-tagged with the new id;
93
- * data is preserved.
88
+ * Managed by the SDK and assigned on the first local `deploy`. Projects
89
+ * that use `tailor setup` keep it in `.github/tailor.lock` under `appIds`
90
+ * and leave this field unset; other projects get it written here. Delete
91
+ * this field if you want the SDK to assign a new id on the next `deploy`
92
+ * — typical case: `tailor.config.ts` was copied from another project and
93
+ * the new application should not share the original's id. Existing
94
+ * resources are re-tagged with the new id; data is preserved.
94
95
  */
95
96
  id?: string;
96
97
  /**
@@ -108,6 +109,22 @@ export interface AppConfig<Auth extends AuthConfig = AuthConfig, Idp extends IdP
108
109
  allowedIpAddresses?: string[];
109
110
  /** Disable GraphQL introspection in production. */
110
111
  disableIntrospection?: boolean;
112
+ /**
113
+ * Extra labels written to the deployed application's metadata, alongside the
114
+ * labels the SDK writes itself. Use it to record information about the
115
+ * application that tooling reads back from the platform, e.g. the version of
116
+ * a framework the config is generated from.
117
+ *
118
+ * Keys must match `^[a-z][a-z0-9_-]{0,62}$` and must not start with `sdk-`.
119
+ * Values must be empty or match `^[a-z][a-z0-9_-]{0,62}$`, so a version like
120
+ * `1.2.3` is written as `v1-2-3`. At most 17 entries can be set.
121
+ *
122
+ * Entries are only added or overwritten: an entry removed from this config
123
+ * keeps its last deployed value on the platform. Those retained labels count
124
+ * towards the platform's limit of 20 labels per resource, so `deploy` stops
125
+ * before changing the application when the total would exceed it.
126
+ */
127
+ metadata?: Record<string, string>;
111
128
  /** TailorDB service configuration with table definition files. */
112
129
  db?: TailorDBServiceInput;
113
130
  /** Resolver service configuration with resolver files. */
@@ -1,2 +1,2 @@
1
- import{i as e,n as t,t as n}from"../schema-DMlLMsWA.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{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};
2
2
  //# sourceMappingURL=index.mjs.map