@tailor-platform/sdk 1.8.0 → 1.9.1

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.
@@ -1,4 +1,4 @@
1
- import { a as OAuth2ClientSchema, c as tailorUserMap, d as styles, f as symbols, i as ExecutorSchema, l as loadFilesWithIgnores, n as WorkflowJobSchema, o as ResolverSchema, r as WorkflowSchema, s as stringifyFunction, t as defineApplication, u as logger } from "./application-HIu5peO4.mjs";
1
+ import { a as OAuth2ClientSchema, c as tailorUserMap, d as styles, f as symbols, i as ExecutorSchema, l as loadFilesWithIgnores, n as WorkflowJobSchema, o as ResolverSchema, r as WorkflowSchema, s as stringifyFunction, t as defineApplication, u as logger } from "./application-_ArEfxmV.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import { arg, defineCommand } from "politty";
4
4
  import { z } from "zod";
@@ -44,33 +44,35 @@ function isCLIError(error) {
44
44
 
45
45
  //#endregion
46
46
  //#region src/cli/args.ts
47
- const durationUnits = [
48
- "ms",
49
- "s",
50
- "m"
51
- ];
52
47
  const unitToMs = {
53
48
  ms: 1,
54
49
  s: 1e3,
55
50
  m: 60 * 1e3
56
51
  };
52
+ const durationPattern = /^(\d+)(ms|s|m)$/;
57
53
  /**
58
54
  * Schema for duration string validation (e.g., "3s", "500ms", "1m")
59
- * Transforms the string to milliseconds
55
+ * Only validates format; use parseDuration() to convert to milliseconds
60
56
  */
61
- const durationSchema = z.templateLiteral([z.number().int().positive(), z.enum(durationUnits)]).transform((duration) => {
62
- const match = duration.match(/^(\d+)(ms|s|m)$/);
63
- return parseInt(match[1], 10) * unitToMs[match[2]];
64
- });
57
+ const durationArg = z.string().refine((val) => durationPattern.test(val), { message: "Invalid duration format. Expected format: '3s', '500ms', '1m'" }).refine((val) => {
58
+ const match = val.match(durationPattern);
59
+ return parseInt(match[1], 10) > 0;
60
+ }, { message: "Duration must be greater than 0" });
65
61
  /**
66
- * Parse a duration string (e.g., "3s", "500ms", "1m") to milliseconds
67
- * @param duration - Duration string with unit suffix (ms, s, m)
62
+ * Parse a validated duration string into milliseconds
63
+ * @param duration - Duration string (e.g., "3s", "500ms", "1m")
68
64
  * @returns Duration in milliseconds
69
65
  */
70
66
  function parseDuration(duration) {
71
- return durationSchema.parse(duration);
67
+ const match = duration.match(durationPattern);
68
+ return parseInt(match[1], 10) * unitToMs[match[2]];
72
69
  }
73
70
  /**
71
+ * Schema for positive integer validation (from string input)
72
+ * Transforms the string to a number
73
+ */
74
+ const positiveIntArg = z.coerce.number().int().positive();
75
+ /**
74
76
  * Load env files from parsed arguments.
75
77
  * Processes --env-file first, then --env-file-if-exists.
76
78
  *
@@ -221,6 +223,14 @@ const Subgraph_ServiceTypeSchema = /* @__PURE__ */ enumDesc(file_tailor_v1_appli
221
223
  * @generated from enum tailor.v1.Subgraph.ServiceType
222
224
  */
223
225
  const Subgraph_ServiceType = /* @__PURE__ */ tsEnum(Subgraph_ServiceTypeSchema);
226
+ /**
227
+ * Describes the enum tailor.v1.ApplicationSchemaUpdateAttemptStatus.
228
+ */
229
+ const ApplicationSchemaUpdateAttemptStatusSchema = /* @__PURE__ */ enumDesc(file_tailor_v1_application_resource, 0);
230
+ /**
231
+ * @generated from enum tailor.v1.ApplicationSchemaUpdateAttemptStatus
232
+ */
233
+ const ApplicationSchemaUpdateAttemptStatus = /* @__PURE__ */ tsEnum(ApplicationSchemaUpdateAttemptStatusSchema);
224
234
 
225
235
  //#endregion
226
236
  //#region ../tailor-proto/src/tailor/v1/resource_pb.js
@@ -268,6 +278,14 @@ const file_tailor_v1_application = /* @__PURE__ */ fileDesc("Cht0YWlsb3IvdjEvYXB
268
278
  file_tailor_v1_application_resource,
269
279
  file_tailor_v1_resource
270
280
  ]);
281
+ /**
282
+ * Describes the enum tailor.v1.GetApplicationSchemaHealthResponse.ApplicationSchemaHealthStatus.
283
+ */
284
+ const GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatusSchema = /* @__PURE__ */ enumDesc(file_tailor_v1_application, 11, 0);
285
+ /**
286
+ * @generated from enum tailor.v1.GetApplicationSchemaHealthResponse.ApplicationSchemaHealthStatus
287
+ */
288
+ const GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatus = /* @__PURE__ */ tsEnum(GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatusSchema);
271
289
 
272
290
  //#endregion
273
291
  //#region ../tailor-proto/src/tailor/v1/secret_manager_resource_pb.js
@@ -412,7 +430,7 @@ const file_tailor_v1_events = /* @__PURE__ */ fileDesc("ChZ0YWlsb3IvdjEvZXZlbnRz
412
430
  /**
413
431
  * Describes the file tailor/v1/executor_resource.proto.
414
432
  */
415
- const file_tailor_v1_executor_resource = /* @__PURE__ */ fileDesc("CiF0YWlsb3IvdjEvZXhlY3V0b3JfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSL9AgoQRXhlY3V0b3JFeGVjdXRvchI2CgRuYW1lGAEgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhMKC2Rlc2NyaXB0aW9uGAIgASgJEkIKDHRyaWdnZXJfdHlwZRgDIAEoDjIeLnRhaWxvci52MS5FeGVjdXRvclRyaWdnZXJUeXBlQgy6SAmCAQYYARgCGAMSQAoOdHJpZ2dlcl9jb25maWcYBCABKAsyIC50YWlsb3IudjEuRXhlY3V0b3JUcmlnZ2VyQ29uZmlnQga6SAPIAQESRAoLdGFyZ2V0X3R5cGUYBSABKA4yHS50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRUeXBlQhC6SA2CAQoYARgCGAMYBBgFEj4KDXRhcmdldF9jb25maWcYBiABKAsyHy50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRDb25maWdCBrpIA8gBARIQCghkaXNhYmxlZBgHIAEoCCLrAQoVRXhlY3V0b3JUcmlnZ2VyQ29uZmlnEjwKCHNjaGVkdWxlGAEgASgLMigudGFpbG9yLnYxLkV4ZWN1dG9yVHJpZ2dlclNjaGVkdWxlQ29uZmlnSAASNgoFZXZlbnQYAiABKAsyJS50YWlsb3IudjEuRXhlY3V0b3JUcmlnZ2VyRXZlbnRDb25maWdIABJLChBpbmNvbWluZ193ZWJob29rGAMgASgLMi8udGFpbG9yLnYxLkV4ZWN1dG9yVHJpZ2dlckluY29taW5nV2ViaG9va0NvbmZpZ0gAQg8KBmNvbmZpZxIFukgCCAEiVgodRXhlY3V0b3JUcmlnZ2VyU2NoZWR1bGVDb25maWcSGQoIdGltZXpvbmUYASABKAlCB7pIBHICEAESGgoJZnJlcXVlbmN5GAIgASgJQge6SARyAhABIl8KGkV4ZWN1dG9yVHJpZ2dlckV2ZW50Q29uZmlnEhsKCmV2ZW50X3R5cGUYASABKAlCB7pIBHICEAESJAoJY29uZGl0aW9uGAIgASgLMhEudGFpbG9yLnYxLlNjcmlwdCI7CiRFeGVjdXRvclRyaWdnZXJJbmNvbWluZ1dlYmhvb2tDb25maWcSEwoGc2VjcmV0GAEgASgJQgPgQQMingIKFEV4ZWN1dG9yVGFyZ2V0Q29uZmlnEjMKB3dlYmhvb2sYASABKAsyIC50YWlsb3IudjEuRXhlY3V0b3JXZWJob29rQ29uZmlnSAASRgoOdGFpbG9yX2dyYXBocWwYAiABKAsyLC50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRUYWlsb3JHcmFwaHFsQ29uZmlnSAASOwoIZnVuY3Rpb24YAyABKAsyJy50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRGdW5jdGlvbkNvbmZpZ0gAEjsKCHdvcmtmbG93GAUgASgLMicudGFpbG9yLnYxLkV4ZWN1dG9yVGFyZ2V0V29ya2Zsb3dDb25maWdIAEIPCgZjb25maWcSBbpIAggBIrkBChVFeGVjdXRvcldlYmhvb2tDb25maWcSHgoDdXJsGAEgASgLMhEudGFpbG9yLnYxLlNjcmlwdBImCgZzZWNyZXQYAiABKAsyFi50YWlsb3IudjEuU2VjcmV0VmFsdWUSNwoHaGVhZGVycxgDIAMoCzImLnRhaWxvci52MS5FeGVjdXRvclRhcmdldFdlYmhvb2tIZWFkZXISHwoEYm9keRgEIAEoCzIRLnRhaWxvci52MS5TY3JpcHQikQEKG0V4ZWN1dG9yVGFyZ2V0V2ViaG9va0hlYWRlchIUCgNrZXkYASABKAlCB7pIBHICEAESHAoJcmF3X3ZhbHVlGAIgASgJQge6SARyAhABSAASLgoMc2VjcmV0X3ZhbHVlGAMgASgLMhYudGFpbG9yLnYxLlNlY3JldFZhbHVlSABCDgoFdmFsdWUSBbpIAggBIqUBCiFFeGVjdXRvclRhcmdldFRhaWxvckdyYXBocWxDb25maWcSGQoIYXBwX25hbWUYASABKAlCB7pIBHICEAESFgoFcXVlcnkYAiABKAlCB7pIBHICEAESJAoJdmFyaWFibGVzGAMgASgLMhEudGFpbG9yLnYxLlNjcmlwdBInCgdpbnZva2VyGAQgASgLMhYudGFpbG9yLnYxLkF1dGhJbnZva2VyIp0BChxFeGVjdXRvclRhcmdldEZ1bmN0aW9uQ29uZmlnEhUKBG5hbWUYASABKAlCB7pIBHICEAESFwoGc2NyaXB0GAIgASgJQge6SARyAhABEiQKCXZhcmlhYmxlcxgDIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSJwoHaW52b2tlchgEIAEoCzIWLnRhaWxvci52MS5BdXRoSW52b2tlciKNAQocRXhlY3V0b3JUYXJnZXRXb3JrZmxvd0NvbmZpZxIeCg13b3JrZmxvd19uYW1lGAEgASgJQge6SARyAhABEiQKCXZhcmlhYmxlcxgCIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSJwoHaW52b2tlchgDIAEoCzIWLnRhaWxvci52MS5BdXRoSW52b2tlciLeAgoLRXhlY3V0b3JKb2ISCgoCaWQYASABKAkSFQoNZXhlY3V0b3JfbmFtZRgCIAEoCRIsCgZzdGF0dXMYAyABKA4yHC50YWlsb3IudjEuRXhlY3V0b3JKb2JTdGF0dXMSJgoFYWN0b3IYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EiUKBGRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Eh0KFWV2ZW50X2lkZW1wb3RlbmN5X2tleRgGIAEoCRIwCgxzY2hlZHVsZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIssCChJFeGVjdXRvckpvYkF0dGVtcHQSCgoCaWQYASABKAkSDgoGam9iX2lkGAIgASgJEiwKBnN0YXR1cxgDIAEoDjIcLnRhaWxvci52MS5FeGVjdXRvckpvYlN0YXR1cxINCgVlcnJvchgEIAEoCRIuCgpzdGFydGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgtmaW5pc2hlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKY3JlYXRlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoTb3BlcmF0aW9uX3JlZmVyZW5jZRgJIAEoCSJPChdFeGVjdXRvckluY29taW5nV2ViaG9vaxIVCg1leGVjdXRvcl9uYW1lGAEgASgJEgsKA3VybBgCIAEoCRIQCghkaXNhYmxlZBgDIAEoCCqtAQoTRXhlY3V0b3JUcmlnZ2VyVHlwZRIlCiFFWEVDVVRPUl9UUklHR0VSX1RZUEVfVU5TUEVDSUZJRUQQABIiCh5FWEVDVVRPUl9UUklHR0VSX1RZUEVfU0NIRURVTEUQARIfChtFWEVDVVRPUl9UUklHR0VSX1RZUEVfRVZFTlQQAhIqCiZFWEVDVVRPUl9UUklHR0VSX1RZUEVfSU5DT01JTkdfV0VCSE9PSxADKvIBChJFeGVjdXRvclRhcmdldFR5cGUSJAogRVhFQ1VUT1JfVEFSR0VUX1RZUEVfVU5TUEVDSUZJRUQQABIgChxFWEVDVVRPUl9UQVJHRVRfVFlQRV9XRUJIT09LEAESJwojRVhFQ1VUT1JfVEFSR0VUX1RZUEVfVEFJTE9SX0dSQVBIUUwQAhIhCh1FWEVDVVRPUl9UQVJHRVRfVFlQRV9GVU5DVElPThADEiUKIUVYRUNVVE9SX1RBUkdFVF9UWVBFX0pPQl9GVU5DVElPThAEEiEKHUVYRUNVVE9SX1RBUkdFVF9UWVBFX1dPUktGTE9XEAUq3QEKEUV4ZWN1dG9ySm9iU3RhdHVzEiMKH0VYRUNVVE9SX0pPQl9TVEFUVVNfVU5TUEVDSUZJRUQQABIfChtFWEVDVVRPUl9KT0JfU1RBVFVTX1BFTkRJTkcQARIfChtFWEVDVVRPUl9KT0JfU1RBVFVTX1JVTk5JTkcQAhIfChtFWEVDVVRPUl9KT0JfU1RBVFVTX1NVQ0NFU1MQAxIeChpFWEVDVVRPUl9KT0JfU1RBVFVTX0ZBSUxFRBAEEiAKHEVYRUNVVE9SX0pPQl9TVEFUVVNfQ0FOQ0VMRUQQBWIGcHJvdG8z", [
433
+ const file_tailor_v1_executor_resource = /* @__PURE__ */ fileDesc("CiF0YWlsb3IvdjEvZXhlY3V0b3JfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSL9AgoQRXhlY3V0b3JFeGVjdXRvchI2CgRuYW1lGAEgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhMKC2Rlc2NyaXB0aW9uGAIgASgJEkIKDHRyaWdnZXJfdHlwZRgDIAEoDjIeLnRhaWxvci52MS5FeGVjdXRvclRyaWdnZXJUeXBlQgy6SAmCAQYYARgCGAMSQAoOdHJpZ2dlcl9jb25maWcYBCABKAsyIC50YWlsb3IudjEuRXhlY3V0b3JUcmlnZ2VyQ29uZmlnQga6SAPIAQESRAoLdGFyZ2V0X3R5cGUYBSABKA4yHS50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRUeXBlQhC6SA2CAQoYARgCGAMYBBgFEj4KDXRhcmdldF9jb25maWcYBiABKAsyHy50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRDb25maWdCBrpIA8gBARIQCghkaXNhYmxlZBgHIAEoCCLrAQoVRXhlY3V0b3JUcmlnZ2VyQ29uZmlnEjwKCHNjaGVkdWxlGAEgASgLMigudGFpbG9yLnYxLkV4ZWN1dG9yVHJpZ2dlclNjaGVkdWxlQ29uZmlnSAASNgoFZXZlbnQYAiABKAsyJS50YWlsb3IudjEuRXhlY3V0b3JUcmlnZ2VyRXZlbnRDb25maWdIABJLChBpbmNvbWluZ193ZWJob29rGAMgASgLMi8udGFpbG9yLnYxLkV4ZWN1dG9yVHJpZ2dlckluY29taW5nV2ViaG9va0NvbmZpZ0gAQg8KBmNvbmZpZxIFukgCCAEiVgodRXhlY3V0b3JUcmlnZ2VyU2NoZWR1bGVDb25maWcSGQoIdGltZXpvbmUYASABKAlCB7pIBHICEAESGgoJZnJlcXVlbmN5GAIgASgJQge6SARyAhABIl8KGkV4ZWN1dG9yVHJpZ2dlckV2ZW50Q29uZmlnEhsKCmV2ZW50X3R5cGUYASABKAlCB7pIBHICEAESJAoJY29uZGl0aW9uGAIgASgLMhEudGFpbG9yLnYxLlNjcmlwdCI7CiRFeGVjdXRvclRyaWdnZXJJbmNvbWluZ1dlYmhvb2tDb25maWcSEwoGc2VjcmV0GAEgASgJQgPgQQMingIKFEV4ZWN1dG9yVGFyZ2V0Q29uZmlnEjMKB3dlYmhvb2sYASABKAsyIC50YWlsb3IudjEuRXhlY3V0b3JXZWJob29rQ29uZmlnSAASRgoOdGFpbG9yX2dyYXBocWwYAiABKAsyLC50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRUYWlsb3JHcmFwaHFsQ29uZmlnSAASOwoIZnVuY3Rpb24YAyABKAsyJy50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRGdW5jdGlvbkNvbmZpZ0gAEjsKCHdvcmtmbG93GAUgASgLMicudGFpbG9yLnYxLkV4ZWN1dG9yVGFyZ2V0V29ya2Zsb3dDb25maWdIAEIPCgZjb25maWcSBbpIAggBIrkBChVFeGVjdXRvcldlYmhvb2tDb25maWcSHgoDdXJsGAEgASgLMhEudGFpbG9yLnYxLlNjcmlwdBImCgZzZWNyZXQYAiABKAsyFi50YWlsb3IudjEuU2VjcmV0VmFsdWUSNwoHaGVhZGVycxgDIAMoCzImLnRhaWxvci52MS5FeGVjdXRvclRhcmdldFdlYmhvb2tIZWFkZXISHwoEYm9keRgEIAEoCzIRLnRhaWxvci52MS5TY3JpcHQikQEKG0V4ZWN1dG9yVGFyZ2V0V2ViaG9va0hlYWRlchIUCgNrZXkYASABKAlCB7pIBHICEAESHAoJcmF3X3ZhbHVlGAIgASgJQge6SARyAhABSAASLgoMc2VjcmV0X3ZhbHVlGAMgASgLMhYudGFpbG9yLnYxLlNlY3JldFZhbHVlSABCDgoFdmFsdWUSBbpIAggBIqUBCiFFeGVjdXRvclRhcmdldFRhaWxvckdyYXBocWxDb25maWcSGQoIYXBwX25hbWUYASABKAlCB7pIBHICEAESFgoFcXVlcnkYAiABKAlCB7pIBHICEAESJAoJdmFyaWFibGVzGAMgASgLMhEudGFpbG9yLnYxLlNjcmlwdBInCgdpbnZva2VyGAQgASgLMhYudGFpbG9yLnYxLkF1dGhJbnZva2VyIsUBChxFeGVjdXRvclRhcmdldEZ1bmN0aW9uQ29uZmlnEhUKBG5hbWUYASABKAlCB7pIBHICEAESDgoGc2NyaXB0GAIgASgJEiQKCXZhcmlhYmxlcxgDIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSJwoHaW52b2tlchgEIAEoCzIWLnRhaWxvci52MS5BdXRoSW52b2tlchIgCgpzY3JpcHRfcmVmGAUgASgJQge6SARyAhABSACIAQFCDQoLX3NjcmlwdF9yZWYijQEKHEV4ZWN1dG9yVGFyZ2V0V29ya2Zsb3dDb25maWcSHgoNd29ya2Zsb3dfbmFtZRgBIAEoCUIHukgEcgIQARIkCgl2YXJpYWJsZXMYAiABKAsyES50YWlsb3IudjEuU2NyaXB0EicKB2ludm9rZXIYAyABKAsyFi50YWlsb3IudjEuQXV0aEludm9rZXIi3gIKC0V4ZWN1dG9ySm9iEgoKAmlkGAEgASgJEhUKDWV4ZWN1dG9yX25hbWUYAiABKAkSLAoGc3RhdHVzGAMgASgOMhwudGFpbG9yLnYxLkV4ZWN1dG9ySm9iU3RhdHVzEiYKBWFjdG9yGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIlCgRkYXRhGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIdChVldmVudF9pZGVtcG90ZW5jeV9rZXkYBiABKAkSMAoMc2NoZWR1bGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpjcmVhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLLAgoSRXhlY3V0b3JKb2JBdHRlbXB0EgoKAmlkGAEgASgJEg4KBmpvYl9pZBgCIAEoCRIsCgZzdGF0dXMYAyABKA4yHC50YWlsb3IudjEuRXhlY3V0b3JKb2JTdGF0dXMSDQoFZXJyb3IYBCABKAkSLgoKc3RhcnRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLZmluaXNoZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhsKE29wZXJhdGlvbl9yZWZlcmVuY2UYCSABKAkiTwoXRXhlY3V0b3JJbmNvbWluZ1dlYmhvb2sSFQoNZXhlY3V0b3JfbmFtZRgBIAEoCRILCgN1cmwYAiABKAkSEAoIZGlzYWJsZWQYAyABKAgqrQEKE0V4ZWN1dG9yVHJpZ2dlclR5cGUSJQohRVhFQ1VUT1JfVFJJR0dFUl9UWVBFX1VOU1BFQ0lGSUVEEAASIgoeRVhFQ1VUT1JfVFJJR0dFUl9UWVBFX1NDSEVEVUxFEAESHwobRVhFQ1VUT1JfVFJJR0dFUl9UWVBFX0VWRU5UEAISKgomRVhFQ1VUT1JfVFJJR0dFUl9UWVBFX0lOQ09NSU5HX1dFQkhPT0sQAyryAQoSRXhlY3V0b3JUYXJnZXRUeXBlEiQKIEVYRUNVVE9SX1RBUkdFVF9UWVBFX1VOU1BFQ0lGSUVEEAASIAocRVhFQ1VUT1JfVEFSR0VUX1RZUEVfV0VCSE9PSxABEicKI0VYRUNVVE9SX1RBUkdFVF9UWVBFX1RBSUxPUl9HUkFQSFFMEAISIQodRVhFQ1VUT1JfVEFSR0VUX1RZUEVfRlVOQ1RJT04QAxIlCiFFWEVDVVRPUl9UQVJHRVRfVFlQRV9KT0JfRlVOQ1RJT04QBBIhCh1FWEVDVVRPUl9UQVJHRVRfVFlQRV9XT1JLRkxPVxAFKt0BChFFeGVjdXRvckpvYlN0YXR1cxIjCh9FWEVDVVRPUl9KT0JfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHwobRVhFQ1VUT1JfSk9CX1NUQVRVU19QRU5ESU5HEAESHwobRVhFQ1VUT1JfSk9CX1NUQVRVU19SVU5OSU5HEAISHwobRVhFQ1VUT1JfSk9CX1NUQVRVU19TVUNDRVNTEAMSHgoaRVhFQ1VUT1JfSk9CX1NUQVRVU19GQUlMRUQQBBIgChxFWEVDVVRPUl9KT0JfU1RBVFVTX0NBTkNFTEVEEAViBnByb3RvMw", [
416
434
  file_buf_validate_validate,
417
435
  file_google_api_field_behavior,
418
436
  file_google_protobuf_struct,
@@ -558,7 +576,7 @@ const file_tailor_v1_meter = /* @__PURE__ */ fileDesc("ChV0YWlsb3IvdjEvbWV0ZXIuc
558
576
  /**
559
577
  * Describes the file tailor/v1/pipeline_resource.proto.
560
578
  */
561
- const file_tailor_v1_pipeline_resource = /* @__PURE__ */ fileDesc("CiF0YWlsb3IvdjEvcGlwZWxpbmVfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJOCg9QaXBlbGluZVNlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRISCgpjb21tb25fc2RsGAIgASgJIoUOChBQaXBlbGluZVJlc29sdmVyEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSFQoNYXV0aG9yaXphdGlvbhgEIAEoCRIXCgpwcmVfc2NyaXB0GAUgASgJSACIAQESGAoLcG9zdF9zY3JpcHQYBiABKAlIAYgBARI3CglwaXBlbGluZXMYByADKAsyJC50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlci5QaXBlbGluZRIVCghvbl9lcnJvchgIIAEoCUgCiAEBEjEKBmlucHV0cxgJIAMoCzIhLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyLkZpZWxkEjgKCHJlc3BvbnNlGAogASgLMiEudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuRmllbGRIA4gBARIbCg5vcGVyYXRpb25fdHlwZRgLIAEoCUgEiAEBEiMKCHByZV9ob29rGAwgASgLMhEudGFpbG9yLnYxLlNjcmlwdBIkCglwb3N0X2hvb2sYDSABKAsyES50YWlsb3IudjEuU2NyaXB0EiAKGHB1Ymxpc2hfZXhlY3V0aW9uX2V2ZW50cxgOIAEoCBILCgNzZGwYDyABKAkavQEKBFR5cGUSDAoEa2luZBgBIAEoCRIMCgRuYW1lGAIgASgJEjEKBmZpZWxkcxgEIAMoCzIhLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyLkZpZWxkEhAKCHJlcXVpcmVkGAUgASgIEhMKC2Rlc2NyaXB0aW9uGAYgASgJEjkKDmFsbG93ZWRfdmFsdWVzGAcgAygLMiEudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuVmFsdWVKBAgDEAQaewoFRmllbGQSDAoEbmFtZRgBIAEoCRIuCgR0eXBlGAIgASgLMiAudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuVHlwZRINCgVhcnJheRgDIAEoCBIQCghyZXF1aXJlZBgEIAEoCBITCgtkZXNjcmlwdGlvbhgFIAEoCRpjCgVWYWx1ZRJFCgV2YWx1ZRgBIAEoCUI2ukgzcjEyHF5bYS16QS1aXVthLXpBLVowLTlfXXswLDYyfSRaBHRydWVaBWZhbHNlWgRudWxsEhMKC2Rlc2NyaXB0aW9uGAIgASgJGtEFCghQaXBlbGluZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEkEKDm9wZXJhdGlvbl90eXBlGAQgASgOMikudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuT3BlcmF0aW9uVHlwZRIdChBvcGVyYXRpb25fc291cmNlGAYgASgJSACIAQESHwoXc2tpcF9vcGVyYXRpb25fb25fZXJyb3IYByABKAgSEQoEdGVzdBgIIAEoCUgBiAEBEhsKDnByZV92YWxpZGF0aW9uGAkgASgJSAKIAQESFwoKcHJlX3NjcmlwdBgKIAEoCUgDiAEBEhgKC3Bvc3Rfc2NyaXB0GAsgASgJSASIAQESHAoPcG9zdF92YWxpZGF0aW9uGAwgASgJSAWIAQESGQoMY29udGV4dF9kYXRhGA0gASgJSAaIAQESFQoIZm9yX2VhY2gYDiABKAlIB4gBARIsCgdpbnZva2VyGA8gASgLMhYudGFpbG9yLnYxLkF1dGhJbnZva2VySAiIAQESIwoIcHJlX2hvb2sYECABKAsyES50YWlsb3IudjEuU2NyaXB0EiQKCXBvc3RfaG9vaxgRIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSGwoOb3BlcmF0aW9uX25hbWUYEiABKAlICYgBARIpCg5vcGVyYXRpb25faG9vaxgTIAEoCzIRLnRhaWxvci52MS5TY3JpcHRCEwoRX29wZXJhdGlvbl9zb3VyY2VCBwoFX3Rlc3RCEQoPX3ByZV92YWxpZGF0aW9uQg0KC19wcmVfc2NyaXB0Qg4KDF9wb3N0X3NjcmlwdEISChBfcG9zdF92YWxpZGF0aW9uQg8KDV9jb250ZXh0X2RhdGFCCwoJX2Zvcl9lYWNoQgoKCF9pbnZva2VyQhEKD19vcGVyYXRpb25fbmFtZUoECAEQAkoECAUQBiJoCg1PcGVyYXRpb25UeXBlEh4KGk9QRVJBVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASGgoWT1BFUkFUSU9OX1RZUEVfR1JBUEhRTBABEhsKF09QRVJBVElPTl9UWVBFX0ZVTkNUSU9OEAJCDQoLX3ByZV9zY3JpcHRCDgoMX3Bvc3Rfc2NyaXB0QgsKCV9vbl9lcnJvckILCglfcmVzcG9uc2VCEQoPX29wZXJhdGlvbl90eXBlSgQIARACIkMKEVBpcGVsaW5lUmVzb2x2ZXJzEi4KCXJlc29sdmVycxgBIAMoCzIbLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyIqgFCh9QaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0EgoKAmlkGAEgASgJEhsKE3NvdXJjZV9leGVjdXRpb25faWQYAiABKAkSFQoNcmVzb2x2ZXJfbmFtZRgDIAEoCRJHCgZzdGF0dXMYBCABKA4yNy50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdC5SZXN1bHRTdGF0dXMSKAoHY29udGV4dBgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSMAoPaW5pdGlhbF9jb250ZXh0GAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIaChJsYXN0X3BpcGVsaW5lX25hbWUYByABKAkSHAoUbGFzdF9waXBlbGluZV9hY3Rpb24YCCABKAkSDQoFZXJyb3IYCSABKAkSLgoKc3RhcnRlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLZmluaXNoZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIpUBCgxSZXN1bHRTdGF0dXMSHQoZUkVTVUxUX1NUQVRVU19VTlNQRUNJRklFRBAAEhYKElJFU1VMVF9TVEFUVVNfRE9ORRABEhgKFFJFU1VMVF9TVEFUVVNfRkFJTEVEEAISGQoVUkVTVUxUX1NUQVRVU19BQk9SVEVEEAMSGQoVUkVTVUxUX1NUQVRVU19SRVRSSUVEEARiBnByb3RvMw", [
579
+ const file_tailor_v1_pipeline_resource = /* @__PURE__ */ fileDesc("CiF0YWlsb3IvdjEvcGlwZWxpbmVfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJOCg9QaXBlbGluZVNlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRISCgpjb21tb25fc2RsGAIgASgJIsEOChBQaXBlbGluZVJlc29sdmVyEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSFQoNYXV0aG9yaXphdGlvbhgEIAEoCRIXCgpwcmVfc2NyaXB0GAUgASgJSACIAQESGAoLcG9zdF9zY3JpcHQYBiABKAlIAYgBARI3CglwaXBlbGluZXMYByADKAsyJC50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlci5QaXBlbGluZRIVCghvbl9lcnJvchgIIAEoCUgCiAEBEjEKBmlucHV0cxgJIAMoCzIhLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyLkZpZWxkEjgKCHJlc3BvbnNlGAogASgLMiEudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuRmllbGRIA4gBARIbCg5vcGVyYXRpb25fdHlwZRgLIAEoCUgEiAEBEiMKCHByZV9ob29rGAwgASgLMhEudGFpbG9yLnYxLlNjcmlwdBIkCglwb3N0X2hvb2sYDSABKAsyES50YWlsb3IudjEuU2NyaXB0EiAKGHB1Ymxpc2hfZXhlY3V0aW9uX2V2ZW50cxgOIAEoCBILCgNzZGwYDyABKAkavQEKBFR5cGUSDAoEa2luZBgBIAEoCRIMCgRuYW1lGAIgASgJEjEKBmZpZWxkcxgEIAMoCzIhLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyLkZpZWxkEhAKCHJlcXVpcmVkGAUgASgIEhMKC2Rlc2NyaXB0aW9uGAYgASgJEjkKDmFsbG93ZWRfdmFsdWVzGAcgAygLMiEudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuVmFsdWVKBAgDEAQaewoFRmllbGQSDAoEbmFtZRgBIAEoCRIuCgR0eXBlGAIgASgLMiAudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuVHlwZRINCgVhcnJheRgDIAEoCBIQCghyZXF1aXJlZBgEIAEoCBITCgtkZXNjcmlwdGlvbhgFIAEoCRpjCgVWYWx1ZRJFCgV2YWx1ZRgBIAEoCUI2ukgzcjEyHF5bYS16QS1aXVthLXpBLVowLTlfXXswLDYyfSRaBHRydWVaBWZhbHNlWgRudWxsEhMKC2Rlc2NyaXB0aW9uGAIgASgJGo0GCghQaXBlbGluZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEkEKDm9wZXJhdGlvbl90eXBlGAQgASgOMikudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuT3BlcmF0aW9uVHlwZRIdChBvcGVyYXRpb25fc291cmNlGAYgASgJSACIAQESHwoXc2tpcF9vcGVyYXRpb25fb25fZXJyb3IYByABKAgSEQoEdGVzdBgIIAEoCUgBiAEBEhsKDnByZV92YWxpZGF0aW9uGAkgASgJSAKIAQESFwoKcHJlX3NjcmlwdBgKIAEoCUgDiAEBEhgKC3Bvc3Rfc2NyaXB0GAsgASgJSASIAQESHAoPcG9zdF92YWxpZGF0aW9uGAwgASgJSAWIAQESGQoMY29udGV4dF9kYXRhGA0gASgJSAaIAQESFQoIZm9yX2VhY2gYDiABKAlIB4gBARIsCgdpbnZva2VyGA8gASgLMhYudGFpbG9yLnYxLkF1dGhJbnZva2VySAiIAQESIwoIcHJlX2hvb2sYECABKAsyES50YWlsb3IudjEuU2NyaXB0EiQKCXBvc3RfaG9vaxgRIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSGwoOb3BlcmF0aW9uX25hbWUYEiABKAlICYgBARIpCg5vcGVyYXRpb25faG9vaxgTIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSIQoUb3BlcmF0aW9uX3NvdXJjZV9yZWYYFCABKAlICogBAUITChFfb3BlcmF0aW9uX3NvdXJjZUIHCgVfdGVzdEIRCg9fcHJlX3ZhbGlkYXRpb25CDQoLX3ByZV9zY3JpcHRCDgoMX3Bvc3Rfc2NyaXB0QhIKEF9wb3N0X3ZhbGlkYXRpb25CDwoNX2NvbnRleHRfZGF0YUILCglfZm9yX2VhY2hCCgoIX2ludm9rZXJCEQoPX29wZXJhdGlvbl9uYW1lQhcKFV9vcGVyYXRpb25fc291cmNlX3JlZkoECAEQAkoECAUQBiJoCg1PcGVyYXRpb25UeXBlEh4KGk9QRVJBVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASGgoWT1BFUkFUSU9OX1RZUEVfR1JBUEhRTBABEhsKF09QRVJBVElPTl9UWVBFX0ZVTkNUSU9OEAJCDQoLX3ByZV9zY3JpcHRCDgoMX3Bvc3Rfc2NyaXB0QgsKCV9vbl9lcnJvckILCglfcmVzcG9uc2VCEQoPX29wZXJhdGlvbl90eXBlSgQIARACIkMKEVBpcGVsaW5lUmVzb2x2ZXJzEi4KCXJlc29sdmVycxgBIAMoCzIbLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyIqgFCh9QaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0EgoKAmlkGAEgASgJEhsKE3NvdXJjZV9leGVjdXRpb25faWQYAiABKAkSFQoNcmVzb2x2ZXJfbmFtZRgDIAEoCRJHCgZzdGF0dXMYBCABKA4yNy50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdC5SZXN1bHRTdGF0dXMSKAoHY29udGV4dBgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSMAoPaW5pdGlhbF9jb250ZXh0GAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIaChJsYXN0X3BpcGVsaW5lX25hbWUYByABKAkSHAoUbGFzdF9waXBlbGluZV9hY3Rpb24YCCABKAkSDQoFZXJyb3IYCSABKAkSLgoKc3RhcnRlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLZmluaXNoZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIpUBCgxSZXN1bHRTdGF0dXMSHQoZUkVTVUxUX1NUQVRVU19VTlNQRUNJRklFRBAAEhYKElJFU1VMVF9TVEFUVVNfRE9ORRABEhgKFFJFU1VMVF9TVEFUVVNfRkFJTEVEEAISGQoVUkVTVUxUX1NUQVRVU19BQk9SVEVEEAMSGQoVUkVTVUxUX1NUQVRVU19SRVRSSUVEEARiBnByb3RvMw", [
562
580
  file_buf_validate_validate,
563
581
  file_google_protobuf_struct,
564
582
  file_google_protobuf_timestamp,
@@ -637,7 +655,7 @@ const file_tailor_v1_staticwebsite = /* @__PURE__ */ fileDesc("Ch10YWlsb3IvdjEvc
637
655
  /**
638
656
  * Describes the file tailor/v1/tailordb_resource.proto.
639
657
  */
640
- const file_tailor_v1_tailordb_resource = /* @__PURE__ */ fileDesc("CiF0YWlsb3IvdjEvdGFpbG9yZGJfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJUCg9UYWlsb3JEQlNlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRIYChBkZWZhdWx0X3RpbWV6b25lGAIgASgJIsMlCgxUYWlsb3JEQlR5cGUSLQoEbmFtZRgBIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JBIyCgZzY2hlbWEYAiABKAsyIi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVDb25maWca3gcKClR5cGVDb25maWcSPgoGZmllbGRzGAEgAygLMi4udGFpbG9yLnYxLlRhaWxvckRCVHlwZS5UeXBlQ29uZmlnLkZpZWxkc0VudHJ5EhMKC2Rlc2NyaXB0aW9uGAIgASgJEjUKCHNldHRpbmdzGAMgASgLMiMudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5UeXBlU2V0dGluZxI/Cg90eXBlX3Blcm1pc3Npb24YBCABKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVQZXJtaXNzaW9uEg8KB2V4dGVuZHMYBSABKAgSNQoKZGlyZWN0aXZlcxgGIAMoCzIhLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRGlyZWN0aXZlEkAKB2luZGV4ZXMYByADKAsyLy50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVDb25maWcuSW5kZXhlc0VudHJ5EkgKEXJlY29yZF9wZXJtaXNzaW9uGAggASgLMigudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5SZWNvcmRQZXJtaXNzaW9uSACIAQESTAoNcmVsYXRpb25zaGlwcxgJIAMoCzI1LnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVHlwZUNvbmZpZy5SZWxhdGlvbnNoaXBzRW50cnkSNgoKcGVybWlzc2lvbhgKIAEoCzIiLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbhI8CgVmaWxlcxgLIAMoCzItLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVHlwZUNvbmZpZy5GaWxlc0VudHJ5GlIKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIyCgV2YWx1ZRgCIAEoCzIjLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRmllbGRDb25maWc6AjgBGk0KDEluZGV4ZXNFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS50YWlsb3IudjEuVGFpbG9yREJUeXBlLkluZGV4OgI4ARpgChJSZWxhdGlvbnNoaXBzRW50cnkSCwoDa2V5GAEgASgJEjkKBXZhbHVlGAIgASgLMioudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5SZWxhdGlvbnNoaXBDb25maWc6AjgBGlAKCkZpbGVzRW50cnkSCwoDa2V5GAEgASgJEjEKBXZhbHVlGAIgASgLMiIudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5GaWxlQ29uZmlnOgI4AUIUChJfcmVjb3JkX3Blcm1pc3Npb24auQIKC1R5cGVTZXR0aW5nEhMKC2FnZ3JlZ2F0aW9uGAIgASgIEhMKC2J1bGtfdXBzZXJ0GAMgASgIEiUKGGRlZmF1bHRfcXVlcnlfbGltaXRfc2l6ZRgEIAEoA0gAiAEBEiEKFG1heF9idWxrX3Vwc2VydF9zaXplGAUgASgDSAGIAQESPAoLcGx1cmFsX2Zvcm0YBiABKAlCIrpIH3IdMhteJHxeW2Etel1bYS16QS1aMC05XXswLDYyfSRIAogBARIdChVwdWJsaXNoX3JlY29yZF9ldmVudHMYByABKAgSDQoFZHJhZnQYCCABKAhCGwoZX2RlZmF1bHRfcXVlcnlfbGltaXRfc2l6ZUIXChVfbWF4X2J1bGtfdXBzZXJ0X3NpemVCDgoMX3BsdXJhbF9mb3JtSgQIARACGk0KCURpcmVjdGl2ZRIMCgRuYW1lGAEgASgJEjIKBGFyZ3MYAiADKAsyJC50YWlsb3IudjEuVGFpbG9yREJUeXBlLkRpcmVjdGl2ZUFyZxorCgxEaXJlY3RpdmVBcmcSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCRosCgVJbmRleBITCgtmaWVsZF9uYW1lcxgBIAMoCRIOCgZ1bmlxdWUYAiABKAgaogUKC0ZpZWxkQ29uZmlnEgwKBHR5cGUYASABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSFgoJc291cmNlX2lkGAQgASgJSACIAQESEAoIcmVxdWlyZWQYBSABKAgSDQoFYXJyYXkYBiABKAgSOAoIdmFsaWRhdGUYByADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlZhbGlkYXRlQ29uZmlnEj8KBmZpZWxkcxgIIAMoCzIvLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRmllbGRDb25maWcuRmllbGRzRW50cnkSDQoFaW5kZXgYCSABKAgSDgoGdW5pcXVlGAogASgIEhMKC2ZvcmVpZ25fa2V5GAsgASgIEh0KEGZvcmVpZ25fa2V5X3R5cGUYDCABKAlIAYgBARIeChFmb3JlaWduX2tleV9maWVsZBgNIAEoCUgCiAEBEjUKBWhvb2tzGA4gASgLMiEudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5GaWVsZEhvb2tIA4gBARI1Cg5hbGxvd2VkX3ZhbHVlcxgPIAMoCzIdLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVmFsdWUSDgoGdmVjdG9yGBAgASgIEi4KBnNlcmlhbBgRIAEoCzIeLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuU2VyaWFsGlIKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIyCgV2YWx1ZRgCIAEoCzIjLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRmllbGRDb25maWc6AjgBQgwKCl9zb3VyY2VfaWRCEwoRX2ZvcmVpZ25fa2V5X3R5cGVCFAoSX2ZvcmVpZ25fa2V5X2ZpZWxkQggKBl9ob29rc0oECAIQAxpwChJSZWxhdGlvbnNoaXBDb25maWcSEAoIcmVmX3R5cGUYASABKAkSEQoJcmVmX2ZpZWxkGAIgASgJEhEKCXNyY19maWVsZBgDIAEoCRINCgVhcnJheRgEIAEoCBITCgtkZXNjcmlwdGlvbhgFIAEoCRohCgpGaWxlQ29uZmlnEhMKC2Rlc2NyaXB0aW9uGAEgASgJGmMKBVZhbHVlEkUKBXZhbHVlGAEgASgJQja6SDNyMTIcXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNjJ9JFoEdHJ1ZVoFZmFsc2VaBG51bGwSEwoLZGVzY3JpcHRpb24YAiABKAkapQEKCUZpZWxkSG9vaxIYCgtjcmVhdGVfZXhwchgBIAEoCUgAiAEBEhgKC3VwZGF0ZV9leHByGAIgASgJSAGIAQESIQoGY3JlYXRlGAMgASgLMhEudGFpbG9yLnYxLlNjcmlwdBIhCgZ1cGRhdGUYBCABKAsyES50YWlsb3IudjEuU2NyaXB0Qg4KDF9jcmVhdGVfZXhwckIOCgxfdXBkYXRlX2V4cHIargEKBlNlcmlhbBIWCgVzdGFydBgBIAEoA0IHukgEIgIgABIfCgltYXhfdmFsdWUYAiABKANCB7pIBCICIABIAIgBARJSCgZmb3JtYXQYAyABKAlCPbpIOnI4GCAyNF4oPzooPzolJXxbXiVdKSopJSg/OlswLTldKyk/W2RveFhdKD86KD86JSV8W14lXSkqKSRIAYgBAUIMCgpfbWF4X3ZhbHVlQgkKB19mb3JtYXQasQEKDlZhbGlkYXRlQ29uZmlnEgwKBGV4cHIYASABKAkSQAoGYWN0aW9uGAIgASgOMiQudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXRBY3Rpb25CCrpIB4IBBBABIAASGgoNZXJyb3JfbWVzc2FnZRgDIAEoCUgAiAEBEiEKBnNjcmlwdBgEIAEoCzIRLnRhaWxvci52MS5TY3JpcHRCEAoOX2Vycm9yX21lc3NhZ2UapQIKDlR5cGVQZXJtaXNzaW9uEjYKBmNyZWF0ZRgBIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0SNAoEcmVhZBgCIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0SNgoGdXBkYXRlGAMgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRI2CgZkZWxldGUYBCADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb25JdGVtEjUKBWFkbWluGAUgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRq4AQoQUmVjb3JkUGVybWlzc2lvbhI0CgRyZWFkGAEgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRI2CgZ1cGRhdGUYAiADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb25JdGVtEjYKBmRlbGV0ZRgDIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0aawoOUGVybWlzc2lvbkl0ZW0SQAoGcGVybWl0GAEgASgOMiQudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXRBY3Rpb25CCrpIB4IBBBABIAASCgoCaWQYAiABKAkSCwoDaWRzGAMgAygJGpAICgpQZXJtaXNzaW9uEjkKBmNyZWF0ZRgBIAMoCzIpLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5Qb2xpY3kSNwoEcmVhZBgCIAMoCzIpLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5Qb2xpY3kSOQoGdXBkYXRlGAMgAygLMikudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLlBvbGljeRI5CgZkZWxldGUYBCADKAsyKS50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uUG9saWN5GrsBCgZQb2xpY3kSQAoKY29uZGl0aW9ucxgBIAMoCzIsLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5Db25kaXRpb24SRQoGcGVybWl0GAIgASgOMikudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLlBlcm1pdEIKukgHggEEEAEgABIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBQg4KDF9kZXNjcmlwdGlvbhrbAQoJQ29uZGl0aW9uEkAKBGxlZnQYASABKAsyKi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uT3BlcmFuZEIGukgDyAEBEkkKCG9wZXJhdG9yGAIgASgOMisudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLk9wZXJhdG9yQgq6SAeCAQQQASAAEkEKBXJpZ2h0GAMgASgLMioudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLk9wZXJhbmRCBrpIA8gBARrLAQoHT3BlcmFuZBIdCgp1c2VyX2ZpZWxkGAEgASgJQge6SARyAhABSAASHwoMcmVjb3JkX2ZpZWxkGAIgASgJQge6SARyAhABSAASIwoQb2xkX3JlY29yZF9maWVsZBgDIAEoCUIHukgEcgIQAUgAEiMKEG5ld19yZWNvcmRfZmllbGQYBCABKAlCB7pIBHICEAFIABInCgV2YWx1ZRgFIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUgAQg0KBGtpbmQSBbpIAggBImkKCE9wZXJhdG9yEhgKFE9QRVJBVE9SX1VOU1BFQ0lGSUVEEAASDwoLT1BFUkFUT1JfRVEQARIPCgtPUEVSQVRPUl9ORRACEg8KC09QRVJBVE9SX0lOEAMSEAoMT1BFUkFUT1JfTklOEAQiQwoGUGVybWl0EhYKElBFUk1JVF9VTlNQRUNJRklFRBAAEhAKDFBFUk1JVF9BTExPVxABEg8KC1BFUk1JVF9ERU5ZEAIiegoMUGVybWl0QWN0aW9uEh0KGVBFUk1JVF9BQ1RJT05fVU5TUEVDSUZJRUQQABIXChNQRVJNSVRfQUNUSU9OX0FMTE9XEAESGgoSUEVSTUlUX0FDVElPTl9TS0lQEAIaAggBEhYKElBFUk1JVF9BQ1RJT05fREVOWRADIv8HChVUYWlsb3JEQkdRTFBlcm1pc3Npb24SDwoCaWQYASABKAlCA+BBAxI5Cghwb2xpY2llcxgCIAMoCzInLnRhaWxvci52MS5UYWlsb3JEQkdRTFBlcm1pc3Npb24uUG9saWN5GoQCCgZQb2xpY3kSPgoKY29uZGl0aW9ucxgBIAMoCzIqLnRhaWxvci52MS5UYWlsb3JEQkdRTFBlcm1pc3Npb24uQ29uZGl0aW9uEksKB2FjdGlvbnMYAiADKA4yJy50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uLkFjdGlvbkIRukgOkgELCAEiB4IBBBABIAASQwoGcGVybWl0GAMgASgOMicudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbi5QZXJtaXRCCrpIB4IBBBABIAASGAoLZGVzY3JpcHRpb24YBCABKAlIAIgBAUIOCgxfZGVzY3JpcHRpb24a1QEKCUNvbmRpdGlvbhI+CgRsZWZ0GAEgASgLMigudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbi5PcGVyYW5kQga6SAPIAQESRwoIb3BlcmF0b3IYAiABKA4yKS50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uLk9wZXJhdG9yQgq6SAeCAQQQASAAEj8KBXJpZ2h0GAMgASgLMigudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbi5PcGVyYW5kQga6SAPIAQEaYAoHT3BlcmFuZBIdCgp1c2VyX2ZpZWxkGAEgASgJQge6SARyAhABSAASJwoFdmFsdWUYBSABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVIAEINCgRraW5kEgW6SAIIASJpCghPcGVyYXRvchIYChRPUEVSQVRPUl9VTlNQRUNJRklFRBAAEg8KC09QRVJBVE9SX0VREAESDwoLT1BFUkFUT1JfTkUQAhIPCgtPUEVSQVRPUl9JThADEhAKDE9QRVJBVE9SX05JThAEIqgBCgZBY3Rpb24SFgoSQUNUSU9OX1VOU1BFQ0lGSUVEEAASDgoKQUNUSU9OX0FMTBABEhEKDUFDVElPTl9DUkVBVEUQAhIPCgtBQ1RJT05fUkVBRBADEhEKDUFDVElPTl9VUERBVEUQBBIRCg1BQ1RJT05fREVMRVRFEAUSFAoQQUNUSU9OX0FHR1JFR0FURRAGEhYKEkFDVElPTl9CVUxLX1VQU0VSVBAHIkMKBlBlcm1pdBIWChJQRVJNSVRfVU5TUEVDSUZJRUQQABIQCgxQRVJNSVRfQUxMT1cQARIPCgtQRVJNSVRfREVOWRACYgZwcm90bzM", [
658
+ const file_tailor_v1_tailordb_resource = /* @__PURE__ */ fileDesc("CiF0YWlsb3IvdjEvdGFpbG9yZGJfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJUCg9UYWlsb3JEQlNlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRIYChBkZWZhdWx0X3RpbWV6b25lGAIgASgJIucmCgxUYWlsb3JEQlR5cGUSLQoEbmFtZRgBIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JBIyCgZzY2hlbWEYAiABKAsyIi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVDb25maWca3gcKClR5cGVDb25maWcSPgoGZmllbGRzGAEgAygLMi4udGFpbG9yLnYxLlRhaWxvckRCVHlwZS5UeXBlQ29uZmlnLkZpZWxkc0VudHJ5EhMKC2Rlc2NyaXB0aW9uGAIgASgJEjUKCHNldHRpbmdzGAMgASgLMiMudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5UeXBlU2V0dGluZxI/Cg90eXBlX3Blcm1pc3Npb24YBCABKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVQZXJtaXNzaW9uEg8KB2V4dGVuZHMYBSABKAgSNQoKZGlyZWN0aXZlcxgGIAMoCzIhLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRGlyZWN0aXZlEkAKB2luZGV4ZXMYByADKAsyLy50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVDb25maWcuSW5kZXhlc0VudHJ5EkgKEXJlY29yZF9wZXJtaXNzaW9uGAggASgLMigudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5SZWNvcmRQZXJtaXNzaW9uSACIAQESTAoNcmVsYXRpb25zaGlwcxgJIAMoCzI1LnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVHlwZUNvbmZpZy5SZWxhdGlvbnNoaXBzRW50cnkSNgoKcGVybWlzc2lvbhgKIAEoCzIiLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbhI8CgVmaWxlcxgLIAMoCzItLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVHlwZUNvbmZpZy5GaWxlc0VudHJ5GlIKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIyCgV2YWx1ZRgCIAEoCzIjLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRmllbGRDb25maWc6AjgBGk0KDEluZGV4ZXNFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS50YWlsb3IudjEuVGFpbG9yREJUeXBlLkluZGV4OgI4ARpgChJSZWxhdGlvbnNoaXBzRW50cnkSCwoDa2V5GAEgASgJEjkKBXZhbHVlGAIgASgLMioudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5SZWxhdGlvbnNoaXBDb25maWc6AjgBGlAKCkZpbGVzRW50cnkSCwoDa2V5GAEgASgJEjEKBXZhbHVlGAIgASgLMiIudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5GaWxlQ29uZmlnOgI4AUIUChJfcmVjb3JkX3Blcm1pc3Npb24ahwMKC1R5cGVTZXR0aW5nEhMKC2FnZ3JlZ2F0aW9uGAIgASgIEhMKC2J1bGtfdXBzZXJ0GAMgASgIEiUKGGRlZmF1bHRfcXVlcnlfbGltaXRfc2l6ZRgEIAEoA0gAiAEBEiEKFG1heF9idWxrX3Vwc2VydF9zaXplGAUgASgDSAGIAQESPAoLcGx1cmFsX2Zvcm0YBiABKAlCIrpIH3IdMhteJHxeW2Etel1bYS16QS1aMC05XXswLDYyfSRIAogBARIdChVwdWJsaXNoX3JlY29yZF9ldmVudHMYByABKAgSDQoFZHJhZnQYCCABKAgSTAoWZGlzYWJsZV9ncWxfb3BlcmF0aW9ucxgJIAEoCzIsLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRGlzYWJsZUdxbE9wZXJhdGlvbnNCGwoZX2RlZmF1bHRfcXVlcnlfbGltaXRfc2l6ZUIXChVfbWF4X2J1bGtfdXBzZXJ0X3NpemVCDgoMX3BsdXJhbF9mb3JtSgQIARACGlQKFERpc2FibGVHcWxPcGVyYXRpb25zEg4KBmNyZWF0ZRgBIAEoCBIOCgZ1cGRhdGUYAiABKAgSDgoGZGVsZXRlGAMgASgIEgwKBHJlYWQYBCABKAgaTQoJRGlyZWN0aXZlEgwKBG5hbWUYASABKAkSMgoEYXJncxgCIAMoCzIkLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRGlyZWN0aXZlQXJnGisKDERpcmVjdGl2ZUFyZxIMCgRuYW1lGAEgASgJEg0KBXZhbHVlGAIgASgJGiwKBUluZGV4EhMKC2ZpZWxkX25hbWVzGAEgAygJEg4KBnVuaXF1ZRgCIAEoCBqiBQoLRmllbGRDb25maWcSDAoEdHlwZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRIWCglzb3VyY2VfaWQYBCABKAlIAIgBARIQCghyZXF1aXJlZBgFIAEoCBINCgVhcnJheRgGIAEoCBI4Cgh2YWxpZGF0ZRgHIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVmFsaWRhdGVDb25maWcSPwoGZmllbGRzGAggAygLMi8udGFpbG9yLnYxLlRhaWxvckRCVHlwZS5GaWVsZENvbmZpZy5GaWVsZHNFbnRyeRINCgVpbmRleBgJIAEoCBIOCgZ1bmlxdWUYCiABKAgSEwoLZm9yZWlnbl9rZXkYCyABKAgSHQoQZm9yZWlnbl9rZXlfdHlwZRgMIAEoCUgBiAEBEh4KEWZvcmVpZ25fa2V5X2ZpZWxkGA0gASgJSAKIAQESNQoFaG9va3MYDiABKAsyIS50YWlsb3IudjEuVGFpbG9yREJUeXBlLkZpZWxkSG9va0gDiAEBEjUKDmFsbG93ZWRfdmFsdWVzGA8gAygLMh0udGFpbG9yLnYxLlRhaWxvckRCVHlwZS5WYWx1ZRIOCgZ2ZWN0b3IYECABKAgSLgoGc2VyaWFsGBEgASgLMh4udGFpbG9yLnYxLlRhaWxvckRCVHlwZS5TZXJpYWwaUgoLRmllbGRzRW50cnkSCwoDa2V5GAEgASgJEjIKBXZhbHVlGAIgASgLMiMudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5GaWVsZENvbmZpZzoCOAFCDAoKX3NvdXJjZV9pZEITChFfZm9yZWlnbl9rZXlfdHlwZUIUChJfZm9yZWlnbl9rZXlfZmllbGRCCAoGX2hvb2tzSgQIAhADGnAKElJlbGF0aW9uc2hpcENvbmZpZxIQCghyZWZfdHlwZRgBIAEoCRIRCglyZWZfZmllbGQYAiABKAkSEQoJc3JjX2ZpZWxkGAMgASgJEg0KBWFycmF5GAQgASgIEhMKC2Rlc2NyaXB0aW9uGAUgASgJGiEKCkZpbGVDb25maWcSEwoLZGVzY3JpcHRpb24YASABKAkaYwoFVmFsdWUSRQoFdmFsdWUYASABKAlCNrpIM3IxMhxeW2EtekEtWl1bYS16QS1aMC05X117MCw2Mn0kWgR0cnVlWgVmYWxzZVoEbnVsbBITCgtkZXNjcmlwdGlvbhgCIAEoCRqlAQoJRmllbGRIb29rEhgKC2NyZWF0ZV9leHByGAEgASgJSACIAQESGAoLdXBkYXRlX2V4cHIYAiABKAlIAYgBARIhCgZjcmVhdGUYAyABKAsyES50YWlsb3IudjEuU2NyaXB0EiEKBnVwZGF0ZRgEIAEoCzIRLnRhaWxvci52MS5TY3JpcHRCDgoMX2NyZWF0ZV9leHByQg4KDF91cGRhdGVfZXhwchquAQoGU2VyaWFsEhYKBXN0YXJ0GAEgASgDQge6SAQiAiAAEh8KCW1heF92YWx1ZRgCIAEoA0IHukgEIgIgAEgAiAEBElIKBmZvcm1hdBgDIAEoCUI9ukg6cjgYIDI0Xig/Oig/OiUlfFteJV0pKiklKD86WzAtOV0rKT9bZG94WF0oPzooPzolJXxbXiVdKSopJEgBiAEBQgwKCl9tYXhfdmFsdWVCCQoHX2Zvcm1hdBqxAQoOVmFsaWRhdGVDb25maWcSDAoEZXhwchgBIAEoCRJACgZhY3Rpb24YAiABKA4yJC50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pdEFjdGlvbkIKukgHggEEEAEgABIaCg1lcnJvcl9tZXNzYWdlGAMgASgJSACIAQESIQoGc2NyaXB0GAQgASgLMhEudGFpbG9yLnYxLlNjcmlwdEIQCg5fZXJyb3JfbWVzc2FnZRqlAgoOVHlwZVBlcm1pc3Npb24SNgoGY3JlYXRlGAEgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRI0CgRyZWFkGAIgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRI2CgZ1cGRhdGUYAyADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb25JdGVtEjYKBmRlbGV0ZRgEIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0SNQoFYWRtaW4YBSADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb25JdGVtGrgBChBSZWNvcmRQZXJtaXNzaW9uEjQKBHJlYWQYASADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb25JdGVtEjYKBnVwZGF0ZRgCIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0SNgoGZGVsZXRlGAMgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRprCg5QZXJtaXNzaW9uSXRlbRJACgZwZXJtaXQYASABKA4yJC50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pdEFjdGlvbkIKukgHggEEEAEgABIKCgJpZBgCIAEoCRILCgNpZHMYAyADKAkakAgKClBlcm1pc3Npb24SOQoGY3JlYXRlGAEgAygLMikudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLlBvbGljeRI3CgRyZWFkGAIgAygLMikudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLlBvbGljeRI5CgZ1cGRhdGUYAyADKAsyKS50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uUG9saWN5EjkKBmRlbGV0ZRgEIAMoCzIpLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5Qb2xpY3kauwEKBlBvbGljeRJACgpjb25kaXRpb25zGAEgAygLMiwudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLkNvbmRpdGlvbhJFCgZwZXJtaXQYAiABKA4yKS50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uUGVybWl0Qgq6SAeCAQQQASAAEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQFCDgoMX2Rlc2NyaXB0aW9uGtsBCglDb25kaXRpb24SQAoEbGVmdBgBIAEoCzIqLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5PcGVyYW5kQga6SAPIAQESSQoIb3BlcmF0b3IYAiABKA4yKy50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uT3BlcmF0b3JCCrpIB4IBBBABIAASQQoFcmlnaHQYAyABKAsyKi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uT3BlcmFuZEIGukgDyAEBGssBCgdPcGVyYW5kEh0KCnVzZXJfZmllbGQYASABKAlCB7pIBHICEAFIABIfCgxyZWNvcmRfZmllbGQYAiABKAlCB7pIBHICEAFIABIjChBvbGRfcmVjb3JkX2ZpZWxkGAMgASgJQge6SARyAhABSAASIwoQbmV3X3JlY29yZF9maWVsZBgEIAEoCUIHukgEcgIQAUgAEicKBXZhbHVlGAUgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlSABCDQoEa2luZBIFukgCCAEiaQoIT3BlcmF0b3ISGAoUT1BFUkFUT1JfVU5TUEVDSUZJRUQQABIPCgtPUEVSQVRPUl9FURABEg8KC09QRVJBVE9SX05FEAISDwoLT1BFUkFUT1JfSU4QAxIQCgxPUEVSQVRPUl9OSU4QBCJDCgZQZXJtaXQSFgoSUEVSTUlUX1VOU1BFQ0lGSUVEEAASEAoMUEVSTUlUX0FMTE9XEAESDwoLUEVSTUlUX0RFTlkQAiJ6CgxQZXJtaXRBY3Rpb24SHQoZUEVSTUlUX0FDVElPTl9VTlNQRUNJRklFRBAAEhcKE1BFUk1JVF9BQ1RJT05fQUxMT1cQARIaChJQRVJNSVRfQUNUSU9OX1NLSVAQAhoCCAESFgoSUEVSTUlUX0FDVElPTl9ERU5ZEAMi/wcKFVRhaWxvckRCR1FMUGVybWlzc2lvbhIPCgJpZBgBIAEoCUID4EEDEjkKCHBvbGljaWVzGAIgAygLMicudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbi5Qb2xpY3kahAIKBlBvbGljeRI+Cgpjb25kaXRpb25zGAEgAygLMioudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbi5Db25kaXRpb24SSwoHYWN0aW9ucxgCIAMoDjInLnRhaWxvci52MS5UYWlsb3JEQkdRTFBlcm1pc3Npb24uQWN0aW9uQhG6SA6SAQsIASIHggEEEAEgABJDCgZwZXJtaXQYAyABKA4yJy50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uLlBlcm1pdEIKukgHggEEEAEgABIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBQg4KDF9kZXNjcmlwdGlvbhrVAQoJQ29uZGl0aW9uEj4KBGxlZnQYASABKAsyKC50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uLk9wZXJhbmRCBrpIA8gBARJHCghvcGVyYXRvchgCIAEoDjIpLnRhaWxvci52MS5UYWlsb3JEQkdRTFBlcm1pc3Npb24uT3BlcmF0b3JCCrpIB4IBBBABIAASPwoFcmlnaHQYAyABKAsyKC50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uLk9wZXJhbmRCBrpIA8gBARpgCgdPcGVyYW5kEh0KCnVzZXJfZmllbGQYASABKAlCB7pIBHICEAFIABInCgV2YWx1ZRgFIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUgAQg0KBGtpbmQSBbpIAggBImkKCE9wZXJhdG9yEhgKFE9QRVJBVE9SX1VOU1BFQ0lGSUVEEAASDwoLT1BFUkFUT1JfRVEQARIPCgtPUEVSQVRPUl9ORRACEg8KC09QRVJBVE9SX0lOEAMSEAoMT1BFUkFUT1JfTklOEAQiqAEKBkFjdGlvbhIWChJBQ1RJT05fVU5TUEVDSUZJRUQQABIOCgpBQ1RJT05fQUxMEAESEQoNQUNUSU9OX0NSRUFURRACEg8KC0FDVElPTl9SRUFEEAMSEQoNQUNUSU9OX1VQREFURRAEEhEKDUFDVElPTl9ERUxFVEUQBRIUChBBQ1RJT05fQUdHUkVHQVRFEAYSFgoSQUNUSU9OX0JVTEtfVVBTRVJUEAciQwoGUGVybWl0EhYKElBFUk1JVF9VTlNQRUNJRklFRBAAEhAKDFBFUk1JVF9BTExPVxABEg8KC1BFUk1JVF9ERU5ZEAJiBnByb3RvMw", [
641
659
  file_buf_validate_validate,
642
660
  file_google_api_field_behavior,
643
661
  file_google_protobuf_struct,
@@ -646,7 +664,7 @@ const file_tailor_v1_tailordb_resource = /* @__PURE__ */ fileDesc("CiF0YWlsb3Ivd
646
664
  /**
647
665
  * Describes the enum tailor.v1.TailorDBType.Permission.Operator.
648
666
  */
649
- const TailorDBType_Permission_OperatorSchema = /* @__PURE__ */ enumDesc(file_tailor_v1_tailordb_resource, 1, 15, 0);
667
+ const TailorDBType_Permission_OperatorSchema = /* @__PURE__ */ enumDesc(file_tailor_v1_tailordb_resource, 1, 16, 0);
650
668
  /**
651
669
  * @generated from enum tailor.v1.TailorDBType.Permission.Operator
652
670
  */
@@ -654,7 +672,7 @@ const TailorDBType_Permission_Operator = /* @__PURE__ */ tsEnum(TailorDBType_Per
654
672
  /**
655
673
  * Describes the enum tailor.v1.TailorDBType.Permission.Permit.
656
674
  */
657
- const TailorDBType_Permission_PermitSchema = /* @__PURE__ */ enumDesc(file_tailor_v1_tailordb_resource, 1, 15, 1);
675
+ const TailorDBType_Permission_PermitSchema = /* @__PURE__ */ enumDesc(file_tailor_v1_tailordb_resource, 1, 16, 1);
658
676
  /**
659
677
  * @generated from enum tailor.v1.TailorDBType.Permission.Permit
660
678
  */
@@ -733,7 +751,7 @@ const WorkflowExecution_Status = /* @__PURE__ */ tsEnum(WorkflowExecution_Status
733
751
  /**
734
752
  * Describes the file tailor/v1/workflow.proto.
735
753
  */
736
- const file_tailor_v1_workflow = /* @__PURE__ */ fileDesc("Chh0YWlsb3IvdjEvd29ya2Zsb3cucHJvdG8SCXRhaWxvci52MSLCAgoVQ3JlYXRlV29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNd29ya2Zsb3dfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJIChZtYWluX2pvYl9mdW5jdGlvbl9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkkKDWpvYl9mdW5jdGlvbnMYBCADKAsyMi50YWlsb3IudjEuQ3JlYXRlV29ya2Zsb3dSZXF1ZXN0LkpvYkZ1bmN0aW9uc0VudHJ5GjMKEUpvYkZ1bmN0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoAzoCOAEiPwoWQ3JlYXRlV29ya2Zsb3dSZXNwb25zZRIlCgh3b3JrZmxvdxgBIAEoCzITLnRhaWxvci52MS5Xb3JrZmxvdyLCAgoVVXBkYXRlV29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNd29ya2Zsb3dfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJIChZtYWluX2pvYl9mdW5jdGlvbl9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkkKDWpvYl9mdW5jdGlvbnMYBCADKAsyMi50YWlsb3IudjEuVXBkYXRlV29ya2Zsb3dSZXF1ZXN0LkpvYkZ1bmN0aW9uc0VudHJ5GjMKEUpvYkZ1bmN0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoAzoCOAEiPwoWVXBkYXRlV29ya2Zsb3dSZXNwb25zZRIlCgh3b3JrZmxvdxgBIAEoCzITLnRhaWxvci52MS5Xb3JrZmxvdyJWChVEZWxldGVXb3JrZmxvd1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIdCgt3b3JrZmxvd19pZBgCIAEoCUIIukgFcgOwAQEiGAoWRGVsZXRlV29ya2Zsb3dSZXNwb25zZSJTChJHZXRXb3JrZmxvd1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIdCgt3b3JrZmxvd19pZBgCIAEoCUIIukgFcgOwAQEiPAoTR2V0V29ya2Zsb3dSZXNwb25zZRIlCgh3b3JrZmxvdxgBIAEoCzITLnRhaWxvci52MS5Xb3JrZmxvdyJ7ChhHZXRXb3JrZmxvd0J5TmFtZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI/Cg13b3JrZmxvd19uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIkIKGUdldFdvcmtmbG93QnlOYW1lUmVzcG9uc2USJQoId29ya2Zsb3cYASABKAsyEy50YWlsb3IudjEuV29ya2Zsb3cijwEKFExpc3RXb3JrZmxvd3NSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJtChVMaXN0V29ya2Zsb3dzUmVzcG9uc2USJgoJd29ya2Zsb3dzGAEgAygLMhMudGFpbG9yLnYxLldvcmtmbG93EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyK/AQogQ3JlYXRlV29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJDChFqb2JfZnVuY3Rpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIOCgZzY3JpcHQYAyABKAkSFwoKc2NyaXB0X3JlZhgEIAEoCUgAiAEBQg0KC19zY3JpcHRfcmVmIlkKIUNyZWF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXNwb25zZRI0Cgxqb2JfZnVuY3Rpb24YASABKAsyHi50YWlsb3IudjEuV29ya2Zsb3dKb2JGdW5jdGlvbiK/AQogVXBkYXRlV29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJDChFqb2JfZnVuY3Rpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIOCgZzY3JpcHQYAyABKAkSFwoKc2NyaXB0X3JlZhgEIAEoCUgAiAEBQg0KC19zY3JpcHRfcmVmIlkKIVVwZGF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXNwb25zZRI0Cgxqb2JfZnVuY3Rpb24YASABKAsyHi50YWlsb3IudjEuV29ya2Zsb3dKb2JGdW5jdGlvbiJiCh1HZXRXb3JrZmxvd0pvYkZ1bmN0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEiEKD2pvYl9mdW5jdGlvbl9pZBgCIAEoCUIIukgFcgOwAQEiVgoeR2V0V29ya2Zsb3dKb2JGdW5jdGlvblJlc3BvbnNlEjQKDGpvYl9mdW5jdGlvbhgBIAEoCzIeLnRhaWxvci52MS5Xb3JrZmxvd0pvYkZ1bmN0aW9uIooBCiNHZXRXb3JrZmxvd0pvYkZ1bmN0aW9uQnlOYW1lUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkMKEWpvYl9mdW5jdGlvbl9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIlwKJEdldFdvcmtmbG93Sm9iRnVuY3Rpb25CeU5hbWVSZXNwb25zZRI0Cgxqb2JfZnVuY3Rpb24YASABKAsyHi50YWlsb3IudjEuV29ya2Zsb3dKb2JGdW5jdGlvbiKaAQofTGlzdFdvcmtmbG93Sm9iRnVuY3Rpb25zUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhIKCnBhZ2VfdG9rZW4YAiABKAkSEQoJcGFnZV9zaXplGAMgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ihwEKIExpc3RXb3JrZmxvd0pvYkZ1bmN0aW9uc1Jlc3BvbnNlEjUKDWpvYl9mdW5jdGlvbnMYASADKAsyHi50YWlsb3IudjEuV29ya2Zsb3dKb2JGdW5jdGlvbhIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMiXQobR2V0V29ya2Zsb3dFeGVjdXRpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESHgoMZXhlY3V0aW9uX2lkGAIgASgJQgi6SAVyA7ABASJPChxHZXRXb3JrZmxvd0V4ZWN1dGlvblJlc3BvbnNlEi8KCWV4ZWN1dGlvbhgBIAEoCzIcLnRhaWxvci52MS5Xb3JrZmxvd0V4ZWN1dGlvbiK7AQodTGlzdFdvcmtmbG93RXhlY3V0aW9uc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEiEKBmZpbHRlchgFIAEoCzIRLnRhaWxvci52MS5GaWx0ZXIigAEKHkxpc3RXb3JrZmxvd0V4ZWN1dGlvbnNSZXNwb25zZRIwCgpleGVjdXRpb25zGAEgAygLMhwudGFpbG9yLnYxLldvcmtmbG93RXhlY3V0aW9uEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKhAQoYVGVzdFN0YXJ0V29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESHQoLd29ya2Zsb3dfaWQYAiABKAlCCLpIBXIDsAEBEiwKDGF1dGhfaW52b2tlchgDIAEoCzIWLnRhaWxvci52MS5BdXRoSW52b2tlchIQCgNhcmcYBCABKAlIAIgBAUIGCgRfYXJnIjEKGVRlc3RTdGFydFdvcmtmbG93UmVzcG9uc2USFAoMZXhlY3V0aW9uX2lkGAEgASgJIlsKGVRlc3RSZXN1bWVXb3JrZmxvd1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIeCgxleGVjdXRpb25faWQYAiABKAlCCLpIBXIDsAEBIjIKGlRlc3RSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlEhQKDGV4ZWN1dGlvbl9pZBgBIAEoCWIGcHJvdG8z", [
754
+ const file_tailor_v1_workflow = /* @__PURE__ */ fileDesc("Chh0YWlsb3IvdjEvd29ya2Zsb3cucHJvdG8SCXRhaWxvci52MSLCAgoVQ3JlYXRlV29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNd29ya2Zsb3dfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJIChZtYWluX2pvYl9mdW5jdGlvbl9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkkKDWpvYl9mdW5jdGlvbnMYBCADKAsyMi50YWlsb3IudjEuQ3JlYXRlV29ya2Zsb3dSZXF1ZXN0LkpvYkZ1bmN0aW9uc0VudHJ5GjMKEUpvYkZ1bmN0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoAzoCOAEiPwoWQ3JlYXRlV29ya2Zsb3dSZXNwb25zZRIlCgh3b3JrZmxvdxgBIAEoCzITLnRhaWxvci52MS5Xb3JrZmxvdyLCAgoVVXBkYXRlV29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNd29ya2Zsb3dfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJIChZtYWluX2pvYl9mdW5jdGlvbl9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkkKDWpvYl9mdW5jdGlvbnMYBCADKAsyMi50YWlsb3IudjEuVXBkYXRlV29ya2Zsb3dSZXF1ZXN0LkpvYkZ1bmN0aW9uc0VudHJ5GjMKEUpvYkZ1bmN0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoAzoCOAEiPwoWVXBkYXRlV29ya2Zsb3dSZXNwb25zZRIlCgh3b3JrZmxvdxgBIAEoCzITLnRhaWxvci52MS5Xb3JrZmxvdyJWChVEZWxldGVXb3JrZmxvd1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIdCgt3b3JrZmxvd19pZBgCIAEoCUIIukgFcgOwAQEiGAoWRGVsZXRlV29ya2Zsb3dSZXNwb25zZSJTChJHZXRXb3JrZmxvd1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIdCgt3b3JrZmxvd19pZBgCIAEoCUIIukgFcgOwAQEiPAoTR2V0V29ya2Zsb3dSZXNwb25zZRIlCgh3b3JrZmxvdxgBIAEoCzITLnRhaWxvci52MS5Xb3JrZmxvdyJ7ChhHZXRXb3JrZmxvd0J5TmFtZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI/Cg13b3JrZmxvd19uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIkIKGUdldFdvcmtmbG93QnlOYW1lUmVzcG9uc2USJQoId29ya2Zsb3cYASABKAsyEy50YWlsb3IudjEuV29ya2Zsb3cijwEKFExpc3RXb3JrZmxvd3NSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJtChVMaXN0V29ya2Zsb3dzUmVzcG9uc2USJgoJd29ya2Zsb3dzGAEgAygLMhMudGFpbG9yLnYxLldvcmtmbG93EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyK/AQogQ3JlYXRlV29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJDChFqb2JfZnVuY3Rpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIOCgZzY3JpcHQYAyABKAkSFwoKc2NyaXB0X3JlZhgEIAEoCUgAiAEBQg0KC19zY3JpcHRfcmVmIlkKIUNyZWF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXNwb25zZRI0Cgxqb2JfZnVuY3Rpb24YASABKAsyHi50YWlsb3IudjEuV29ya2Zsb3dKb2JGdW5jdGlvbiK/AQogVXBkYXRlV29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJDChFqb2JfZnVuY3Rpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIOCgZzY3JpcHQYAyABKAkSFwoKc2NyaXB0X3JlZhgEIAEoCUgAiAEBQg0KC19zY3JpcHRfcmVmIlkKIVVwZGF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXNwb25zZRI0Cgxqb2JfZnVuY3Rpb24YASABKAsyHi50YWlsb3IudjEuV29ya2Zsb3dKb2JGdW5jdGlvbiJiCh1HZXRXb3JrZmxvd0pvYkZ1bmN0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEiEKD2pvYl9mdW5jdGlvbl9pZBgCIAEoCUIIukgFcgOwAQEiVgoeR2V0V29ya2Zsb3dKb2JGdW5jdGlvblJlc3BvbnNlEjQKDGpvYl9mdW5jdGlvbhgBIAEoCzIeLnRhaWxvci52MS5Xb3JrZmxvd0pvYkZ1bmN0aW9uIooBCiNHZXRXb3JrZmxvd0pvYkZ1bmN0aW9uQnlOYW1lUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkMKEWpvYl9mdW5jdGlvbl9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIlwKJEdldFdvcmtmbG93Sm9iRnVuY3Rpb25CeU5hbWVSZXNwb25zZRI0Cgxqb2JfZnVuY3Rpb24YASABKAsyHi50YWlsb3IudjEuV29ya2Zsb3dKb2JGdW5jdGlvbiKaAQofTGlzdFdvcmtmbG93Sm9iRnVuY3Rpb25zUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhIKCnBhZ2VfdG9rZW4YAiABKAkSEQoJcGFnZV9zaXplGAMgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ihwEKIExpc3RXb3JrZmxvd0pvYkZ1bmN0aW9uc1Jlc3BvbnNlEjUKDWpvYl9mdW5jdGlvbnMYASADKAsyHi50YWlsb3IudjEuV29ya2Zsb3dKb2JGdW5jdGlvbhIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMiXQobR2V0V29ya2Zsb3dFeGVjdXRpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESHgoMZXhlY3V0aW9uX2lkGAIgASgJQgi6SAVyA7ABASJPChxHZXRXb3JrZmxvd0V4ZWN1dGlvblJlc3BvbnNlEi8KCWV4ZWN1dGlvbhgBIAEoCzIcLnRhaWxvci52MS5Xb3JrZmxvd0V4ZWN1dGlvbiL8AQodTGlzdFdvcmtmbG93RXhlY3V0aW9uc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI/Cg13b3JrZmxvd19uYW1lGAYgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhIKCnBhZ2VfdG9rZW4YAiABKAkSEQoJcGFnZV9zaXplGAMgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24SIQoGZmlsdGVyGAUgASgLMhEudGFpbG9yLnYxLkZpbHRlciKAAQoeTGlzdFdvcmtmbG93RXhlY3V0aW9uc1Jlc3BvbnNlEjAKCmV4ZWN1dGlvbnMYASADKAsyHC50YWlsb3IudjEuV29ya2Zsb3dFeGVjdXRpb24SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIqEBChhUZXN0U3RhcnRXb3JrZmxvd1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIdCgt3b3JrZmxvd19pZBgCIAEoCUIIukgFcgOwAQESLAoMYXV0aF9pbnZva2VyGAMgASgLMhYudGFpbG9yLnYxLkF1dGhJbnZva2VyEhAKA2FyZxgEIAEoCUgAiAEBQgYKBF9hcmciMQoZVGVzdFN0YXJ0V29ya2Zsb3dSZXNwb25zZRIUCgxleGVjdXRpb25faWQYASABKAkiWwoZVGVzdFJlc3VtZVdvcmtmbG93UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEh4KDGV4ZWN1dGlvbl9pZBgCIAEoCUIIukgFcgOwAQEiMgoaVGVzdFJlc3VtZVdvcmtmbG93UmVzcG9uc2USFAoMZXhlY3V0aW9uX2lkGAEgASgJYgZwcm90bzM", [
737
755
  file_buf_validate_validate,
738
756
  file_tailor_v1_auth_resource,
739
757
  file_tailor_v1_resource,
@@ -746,6 +764,14 @@ const file_tailor_v1_workflow = /* @__PURE__ */ fileDesc("Chh0YWlsb3IvdjEvd29ya2
746
764
  * Describes the file tailor/v1/workspace_resource.proto.
747
765
  */
748
766
  const file_tailor_v1_workspace_resource = /* @__PURE__ */ fileDesc("CiJ0YWlsb3IvdjEvd29ya3NwYWNlX3Jlc291cmNlLnByb3RvEgl0YWlsb3IudjEilAEKDE9yZ2FuaXphdGlvbhIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEjQKC2NyZWF0ZV90aW1lGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEjQKC3VwZGF0ZV90aW1lGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDIpQDChJPcmdhbml6YXRpb25BY2Nlc3MSFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEikKBHJvbGUYAiABKA4yGy50YWlsb3IudjEuT3JnYW5pemF0aW9uUm9sZRIyCgR0ZWFtGAMgASgLMiIudGFpbG9yLnYxLk9yZ2FuaXphdGlvbkFjY2Vzcy5UZWFtSAASQwoNcGxhdGZvcm1fdXNlchgEIAEoCzIqLnRhaWxvci52MS5Pcmdhbml6YXRpb25BY2Nlc3MuUGxhdGZvcm1Vc2VySAASQQoMbWFjaGluZV91c2VyGAUgASgLMikudGFpbG9yLnYxLk9yZ2FuaXphdGlvbkFjY2Vzcy5NYWNoaW5lVXNlckgAGikKDFBsYXRmb3JtVXNlchIKCgJpZBgBIAEoCRINCgVlbWFpbBgCIAEoCRogCgRUZWFtEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkaJwoLTWFjaGluZVVzZXISCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCUIICgZtZW1iZXIi1wEKBkZvbGRlchIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgDIAEoCRIYChBwYXJlbnRfZm9sZGVyX2lkGAQgASgJEhQKDGhhc19jaGlsZHJlbhgHIAEoCBI0CgtjcmVhdGVfdGltZRgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAxI0Cgt1cGRhdGVfdGltZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAyLwAgoMRm9sZGVyQWNjZXNzEhEKCWZvbGRlcl9pZBgBIAEoCRIjCgRyb2xlGAIgASgOMhUudGFpbG9yLnYxLkZvbGRlclJvbGUSLAoEdGVhbRgDIAEoCzIcLnRhaWxvci52MS5Gb2xkZXJBY2Nlc3MuVGVhbUgAEj0KDXBsYXRmb3JtX3VzZXIYBCABKAsyJC50YWlsb3IudjEuRm9sZGVyQWNjZXNzLlBsYXRmb3JtVXNlckgAEjsKDG1hY2hpbmVfdXNlchgFIAEoCzIjLnRhaWxvci52MS5Gb2xkZXJBY2Nlc3MuTWFjaGluZVVzZXJIABopCgxQbGF0Zm9ybVVzZXISCgoCaWQYASABKAkSDQoFZW1haWwYAiABKAkaIAoEVGVhbRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJGicKC01hY2hpbmVVc2VyEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAlCCAoGbWVtYmVyIqUBCgRUZWFtEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAMgASgJEjQKC2NyZWF0ZV90aW1lGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEjQKC3VwZGF0ZV90aW1lGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDIqsBCgpUZWFtTWVtYmVyEg8KB3RlYW1faWQYASABKAkSOQoNcGxhdGZvcm1fdXNlchgCIAEoCzIiLnRhaWxvci52MS5UZWFtTWVtYmVyLlBsYXRmb3JtVXNlchIhCgRyb2xlGAMgASgOMhMudGFpbG9yLnYxLlRlYW1Sb2xlGi4KDFBsYXRmb3JtVXNlchIPCgd1c2VyX2lkGAEgASgJEg0KBWVtYWlsGAIgASgJIq0CCglXb3Jrc3BhY2USCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIbCg5jcmVhdGVfdXNlcl9pZBgDIAEoCUID4EEDEhsKDnVwZGF0ZV91c2VyX2lkGAQgASgJQgPgQQMSNAoLY3JlYXRlX3RpbWUYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSNAoLdXBkYXRlX3RpbWUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSEwoGcmVnaW9uGAggASgJQgPgQQMSGQoRZGVsZXRlX3Byb3RlY3Rpb24YCSABKAgSFwoPb3JnYW5pemF0aW9uX2lkGAogASgJEhEKCWZvbGRlcl9pZBgLIAEoCUoECAcQCCLBAQoVV29ya3NwYWNlUGxhdGZvcm1Vc2VyEjIKBHJvbGUYASABKA4yJC50YWlsb3IudjEuV29ya3NwYWNlUGxhdGZvcm1Vc2VyUm9sZRJECg1wbGF0Zm9ybV91c2VyGAIgASgLMi0udGFpbG9yLnYxLldvcmtzcGFjZVBsYXRmb3JtVXNlci5QbGF0Zm9ybVVzZXIaLgoMUGxhdGZvcm1Vc2VyEg8KB3VzZXJfaWQYASABKAkSDQoFZW1haWwYAiABKAkirgIKE1BsYXRmb3JtQWNjb3VudFBsYW4SNQoJcGxhbl90eXBlGAEgASgOMiIudGFpbG9yLnYxLlBsYXRmb3JtQWNjb3VudFBsYW5UeXBlEkgKBXRyaWFsGAIgASgLMjcudGFpbG9yLnYxLlBsYXRmb3JtQWNjb3VudFBsYW4uUGxhdGZvcm1BY2NvdW50UGxhblRyaWFsSAAaiAEKGFBsYXRmb3JtQWNjb3VudFBsYW5UcmlhbBIsCghzdGFydF9hdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKgoGZW5kX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBISCgppc19leHBpcmVkGAMgASgIQgsKCXBsYW5fbWV0YSqOAQoQT3JnYW5pemF0aW9uUm9sZRIhCh1PUkdBTklaQVRJT05fUk9MRV9VTlNQRUNJRklFRBAAEhsKF09SR0FOSVpBVElPTl9ST0xFX0FETUlOEAESHAoYT1JHQU5JWkFUSU9OX1JPTEVfRURJVE9SEAISHAoYT1JHQU5JWkFUSU9OX1JPTEVfVklFV0VSEAMqcAoKRm9sZGVyUm9sZRIbChdGT0xERVJfUk9MRV9VTlNQRUNJRklFRBAAEhUKEUZPTERFUl9ST0xFX0FETUlOEAESFgoSRk9MREVSX1JPTEVfRURJVE9SEAISFgoSRk9MREVSX1JPTEVfVklFV0VSEAMqZwoIVGVhbVJvbGUSGQoVVEVBTV9ST0xFX1VOU1BFQ0lGSUVEEAASEwoPVEVBTV9ST0xFX0FETUlOEAESFQoRVEVBTV9ST0xFX01BTkFHRVIQAhIUChBURUFNX1JPTEVfTUVNQkVSEAMqwwEKGVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGUSLAooV09SS1NQQUNFX1BMQVRGT1JNX1VTRVJfUk9MRV9VTlNQRUNJRklFRBAAEiYKIldPUktTUEFDRV9QTEFURk9STV9VU0VSX1JPTEVfQURNSU4QARInCiNXT1JLU1BBQ0VfUExBVEZPUk1fVVNFUl9ST0xFX0VESVRPUhACEicKI1dPUktTUEFDRV9QTEFURk9STV9VU0VSX1JPTEVfVklFV0VSEAMqkQEKF1BsYXRmb3JtQWNjb3VudFBsYW5UeXBlEioKJlBMQVRGT1JNX0FDQ09VTlRfUExBTl9UWVBFX1VOU1BFQ0lGSUVEEAASJAogUExBVEZPUk1fQUNDT1VOVF9QTEFOX1RZUEVfVFJJQUwQARIkCiBQTEFURk9STV9BQ0NPVU5UX1BMQU5fVFlQRV9CQVNJQxACYgZwcm90bzM", [file_google_api_field_behavior, file_google_protobuf_timestamp]);
767
+ /**
768
+ * Describes the enum tailor.v1.WorkspacePlatformUserRole.
769
+ */
770
+ const WorkspacePlatformUserRoleSchema = /* @__PURE__ */ enumDesc(file_tailor_v1_workspace_resource, 3);
771
+ /**
772
+ * @generated from enum tailor.v1.WorkspacePlatformUserRole
773
+ */
774
+ const WorkspacePlatformUserRole = /* @__PURE__ */ tsEnum(WorkspacePlatformUserRoleSchema);
749
775
 
750
776
  //#endregion
751
777
  //#region ../tailor-proto/src/tailor/v1/workspace_pb.js
@@ -6346,6 +6372,15 @@ function createSnapshotType(type) {
6346
6372
  snapshotType.settings = {};
6347
6373
  if (type.settings.aggregation !== void 0) snapshotType.settings.aggregation = type.settings.aggregation;
6348
6374
  if (type.settings.bulkUpsert !== void 0) snapshotType.settings.bulkUpsert = type.settings.bulkUpsert;
6375
+ if (type.settings.gqlOperations) {
6376
+ const ops = type.settings.gqlOperations;
6377
+ snapshotType.settings.gqlOperations = {
6378
+ ...ops.create !== void 0 && { create: ops.create },
6379
+ ...ops.update !== void 0 && { update: ops.update },
6380
+ ...ops.delete !== void 0 && { delete: ops.delete },
6381
+ ...ops.read !== void 0 && { read: ops.read }
6382
+ };
6383
+ }
6349
6384
  }
6350
6385
  if (type.indexes && Object.keys(type.indexes).length > 0) {
6351
6386
  snapshotType.indexes = {};
@@ -8017,7 +8052,7 @@ async function planTypes(client, workspaceId, tailordbs, executors, deletedServi
8017
8052
  existingTypes.forEach((type) => existingNameSet.add(type.name));
8018
8053
  const types = filteredTypesByNamespace?.get(tailordb.namespace) ?? tailordb.getTypes();
8019
8054
  for (const typeName of Object.keys(types)) {
8020
- const tailordbType = generateTailorDBTypeManifest(types[typeName], executorUsedTypes);
8055
+ const tailordbType = generateTailorDBTypeManifest(types[typeName], executorUsedTypes, tailordb.config.gqlOperations);
8021
8056
  if (existingNameSet.has(typeName)) {
8022
8057
  changeSet.updates.push({
8023
8058
  name: typeName,
@@ -8064,9 +8099,10 @@ async function planTypes(client, workspaceId, tailordbs, executors, deletedServi
8064
8099
  * Generate a TailorDB type manifest from parsed type
8065
8100
  * @param {TailorDBType} type - Parsed TailorDB type
8066
8101
  * @param {ReadonlySet<string>} executorUsedTypes - Set of types used by executors
8102
+ * @param {GqlOperations} [namespaceGqlOperations] - Default gqlOperations for the namespace (already normalized)
8067
8103
  * @returns {MessageInitShape<typeof TailorDBTypeSchema>} Type manifest
8068
8104
  */
8069
- function generateTailorDBTypeManifest(type, executorUsedTypes) {
8105
+ function generateTailorDBTypeManifest(type, executorUsedTypes, namespaceGqlOperations) {
8070
8106
  const pluralForm = inflection.camelize(type.pluralForm, true);
8071
8107
  const defaultSettings = {
8072
8108
  aggregation: type.settings?.aggregation || false,
@@ -8078,6 +8114,13 @@ function generateTailorDBTypeManifest(type, executorUsedTypes) {
8078
8114
  publishRecordEvents: false
8079
8115
  };
8080
8116
  if (executorUsedTypes.has(type.name)) defaultSettings.publishRecordEvents = true;
8117
+ const ops = type.settings?.gqlOperations ?? namespaceGqlOperations;
8118
+ if (ops) defaultSettings.disableGqlOperations = {
8119
+ create: ops.create === false,
8120
+ update: ops.update === false,
8121
+ delete: ops.delete === false,
8122
+ read: ops.read === false
8123
+ };
8081
8124
  const fields = {};
8082
8125
  Object.keys(type.fields).filter((fieldName) => fieldName !== "id").forEach((fieldName) => {
8083
8126
  const fieldConfig = type.fields[fieldName].config;
@@ -8853,6 +8896,17 @@ const applyCommand = defineCommand({
8853
8896
  //#endregion
8854
8897
  //#region src/cli/utils/format.ts
8855
8898
  /**
8899
+ * Format a protobuf Timestamp to ISO string.
8900
+ * @param timestamp - Protobuf timestamp
8901
+ * @returns Date object or null if invalid
8902
+ */
8903
+ function formatTimestamp(timestamp) {
8904
+ if (!timestamp) return null;
8905
+ const date = timestampDate(timestamp);
8906
+ if (Number.isNaN(date.getTime())) return null;
8907
+ return date;
8908
+ }
8909
+ /**
8856
8910
  * Formats a table with consistent single-line border style.
8857
8911
  * Use this instead of importing `table` directly.
8858
8912
  * @param data - Table data
@@ -8873,6 +8927,17 @@ function formatTable(data, config) {
8873
8927
  function formatKeyValueTable(data) {
8874
8928
  return formatTable(data, { singleLine: true });
8875
8929
  }
8930
+ /**
8931
+ * Format a Date or ISO timestamp string as a human-readable relative time.
8932
+ * @param value - Date object, ISO date string, or null
8933
+ * @returns Relative time (e.g., "5 minutes ago") or "N/A" for null/invalid
8934
+ */
8935
+ function humanizeRelativeTime(value) {
8936
+ if (value === null) return "N/A";
8937
+ const date = value instanceof Date ? value : new Date(value);
8938
+ if (Number.isNaN(date.getTime())) return typeof value === "string" ? value : "N/A";
8939
+ return formatDistanceToNowStrict(date, { addSuffix: true });
8940
+ }
8876
8941
 
8877
8942
  //#endregion
8878
8943
  //#region src/cli/workflow/args.ts
@@ -8885,9 +8950,9 @@ const waitArgs = {
8885
8950
  alias: "W",
8886
8951
  description: "Wait for execution to complete"
8887
8952
  }),
8888
- interval: arg(z.string().default("3s"), {
8953
+ interval: arg(durationArg.default("3s"), {
8889
8954
  alias: "i",
8890
- description: "Polling interval when using --wait"
8955
+ description: "Polling interval when using --wait (e.g., '3s', '500ms', '1m')"
8891
8956
  }),
8892
8957
  logs: arg(z.boolean().default(false), {
8893
8958
  alias: "l",
@@ -9284,7 +9349,7 @@ async function getWorkflow(options) {
9284
9349
  throw error;
9285
9350
  }
9286
9351
  }
9287
- const getCommand$1 = defineCommand({
9352
+ const getCommand$2 = defineCommand({
9288
9353
  name: "get",
9289
9354
  description: "Get workflow details.",
9290
9355
  args: z.object({
@@ -9451,7 +9516,6 @@ const startCommand = defineCommand({
9451
9516
  ...waitArgs
9452
9517
  }),
9453
9518
  run: withCommonArgs(async (args) => {
9454
- const interval = parseDuration(args.interval);
9455
9519
  const { executionId, wait } = await startWorkflow({
9456
9520
  name: args.name,
9457
9521
  machineUser: args.machineuser,
@@ -9459,7 +9523,7 @@ const startCommand = defineCommand({
9459
9523
  workspaceId: args["workspace-id"],
9460
9524
  profile: args.profile,
9461
9525
  configPath: args.config,
9462
- interval
9526
+ interval: parseDuration(args.interval)
9463
9527
  });
9464
9528
  logger.info(`Execution ID: ${executionId}`, { mode: "stream" });
9465
9529
  if (args.wait) {
@@ -9915,7 +9979,7 @@ const jobsCommand = defineCommand({
9915
9979
  alias: "W",
9916
9980
  description: "Wait for job completion and downstream execution (workflow/function) if applicable (detail mode only)"
9917
9981
  }),
9918
- interval: arg(z.string().default("3s"), {
9982
+ interval: arg(durationArg.default("3s"), {
9919
9983
  alias: "i",
9920
9984
  description: "Polling interval when using --wait (e.g., '3s', '500ms', '1m')"
9921
9985
  }),
@@ -9923,18 +9987,17 @@ const jobsCommand = defineCommand({
9923
9987
  alias: "l",
9924
9988
  description: "Display function execution logs after completion (requires --wait)"
9925
9989
  }),
9926
- limit: arg(z.string().optional(), { description: "Maximum number of jobs to list (default: 50, max: 1000) (list mode only)" })
9990
+ limit: arg(positiveIntArg.optional(), { description: "Maximum number of jobs to list (default: 50, max: 1000) (list mode only)" })
9927
9991
  }),
9928
9992
  run: withCommonArgs(async (args) => {
9929
9993
  if (args.jobId) {
9930
9994
  if (args.wait) {
9931
- const interval = parseDuration(args.interval);
9932
9995
  const result = await watchExecutorJob({
9933
9996
  executorName: args.executorName,
9934
9997
  jobId: args.jobId,
9935
9998
  workspaceId: args["workspace-id"],
9936
9999
  profile: args.profile,
9937
- interval,
10000
+ interval: parseDuration(args.interval),
9938
10001
  logs: args.logs
9939
10002
  });
9940
10003
  if (!args.json) {
@@ -9988,7 +10051,7 @@ const jobsCommand = defineCommand({
9988
10051
  const jobs = await listExecutorJobs({
9989
10052
  executorName: args.executorName,
9990
10053
  status: args.status,
9991
- limit: args.limit ? Number.parseInt(args.limit, 10) : void 0,
10054
+ limit: args.limit,
9992
10055
  workspaceId: args["workspace-id"],
9993
10056
  profile: args.profile
9994
10057
  });
@@ -10000,6 +10063,33 @@ const jobsCommand = defineCommand({
10000
10063
  //#endregion
10001
10064
  //#region src/cli/executor/trigger.ts
10002
10065
  /**
10066
+ * Schema for JSON string validation (object only)
10067
+ * Transforms the string to a parsed object
10068
+ */
10069
+ const jsonDataArg = z.string().transform((val) => {
10070
+ try {
10071
+ return JSON.parse(val);
10072
+ } catch {
10073
+ throw new Error(`Invalid JSON data: ${val}. Please provide a valid JSON string.`);
10074
+ }
10075
+ }).refine((v) => typeof v === "object" && v !== null && !Array.isArray(v), { message: "JSON data must be an object, not an array or primitive value" });
10076
+ /**
10077
+ * Schema for header string validation (format: "Key: Value")
10078
+ * Transforms the string to an object with key and value properties
10079
+ */
10080
+ const headerArg = z.string().superRefine((val, ctx) => {
10081
+ if (!val.includes(":")) ctx.addIssue({
10082
+ code: z.ZodIssueCode.custom,
10083
+ message: `Invalid header format: '${val}'. Expected format: 'Key: Value'`
10084
+ });
10085
+ }).transform((val) => {
10086
+ const colonIndex = val.indexOf(":");
10087
+ return {
10088
+ key: val.slice(0, colonIndex).trim(),
10089
+ value: val.slice(colonIndex + 1).trim()
10090
+ };
10091
+ }).refine((h) => h.key.length > 0, { message: "Header name cannot be empty" });
10092
+ /**
10003
10093
  * Trigger an executor and return the job ID.
10004
10094
  * @param options - Options for triggering executor
10005
10095
  * @returns Result containing the job ID if available
@@ -10036,11 +10126,11 @@ const triggerCommand = defineCommand({
10036
10126
  positional: true,
10037
10127
  description: "Executor name"
10038
10128
  }),
10039
- data: arg(z.string().optional(), {
10129
+ data: arg(jsonDataArg.optional(), {
10040
10130
  alias: "d",
10041
10131
  description: "Request body (JSON string)"
10042
10132
  }),
10043
- header: arg(z.string().array().optional(), {
10133
+ header: arg(headerArg.array().optional(), {
10044
10134
  alias: "H",
10045
10135
  overrideBuiltinAlias: true,
10046
10136
  description: "Request header (format: 'Key: Value', can be specified multiple times)"
@@ -10049,7 +10139,7 @@ const triggerCommand = defineCommand({
10049
10139
  alias: "W",
10050
10140
  description: "Wait for job completion and downstream execution (workflow/function) if applicable"
10051
10141
  }),
10052
- interval: arg(z.string().default("3s"), {
10142
+ interval: arg(durationArg.default("3s"), {
10053
10143
  alias: "i",
10054
10144
  description: "Polling interval when using --wait (e.g., '3s', '500ms', '1m')"
10055
10145
  }),
@@ -10075,22 +10165,9 @@ const triggerCommand = defineCommand({
10075
10165
  if (executor.triggerType === ExecutorTriggerType.EVENT) throw new Error(`Executor '${args.executorName}' has '${executorTriggerTypeToString(executor.triggerType)}' trigger type and cannot be triggered manually. Only executors with 'incomingWebhook' or 'schedule' triggers can be triggered manually.`);
10076
10166
  if (executor.triggerType === ExecutorTriggerType.SCHEDULE && (args.data || args.header)) throw new Error(`Executor '${args.executorName}' has 'schedule' trigger type. The --data and --header options are only available for 'incomingWebhook' trigger type.`);
10077
10167
  let payload;
10078
- let body;
10079
- if (args.data) try {
10080
- body = JSON.parse(args.data);
10081
- } catch {
10082
- throw new Error(`Invalid JSON data: ${args.data}. Please provide a valid JSON string.`);
10083
- }
10168
+ const body = args.data;
10084
10169
  const headers = {};
10085
- if (args.header) {
10086
- const headerValues = Array.isArray(args.header) ? args.header : [args.header];
10087
- for (const h of headerValues) {
10088
- const colonIndex = h.indexOf(":");
10089
- if (colonIndex === -1) throw new Error(`Invalid header format: '${h}'. Expected format: 'Key: Value'`);
10090
- const key = h.slice(0, colonIndex).trim();
10091
- headers[key] = h.slice(colonIndex + 1).trim();
10092
- }
10093
- }
10170
+ if (args.header) for (const h of args.header) headers[h.key] = h.value;
10094
10171
  if (body !== void 0 || Object.keys(headers).length > 0) payload = {
10095
10172
  body: body ?? {},
10096
10173
  headers
@@ -10108,13 +10185,12 @@ const triggerCommand = defineCommand({
10108
10185
  }
10109
10186
  logger.success(`Executor '${args.executorName}' triggered successfully. Job ID: ${result.jobId}`);
10110
10187
  if (args.wait) {
10111
- const interval = parseDuration(args.interval);
10112
10188
  const watchResult = await watchExecutorJob({
10113
10189
  executorName: args.executorName,
10114
10190
  jobId: result.jobId,
10115
10191
  workspaceId: args["workspace-id"],
10116
10192
  profile: args.profile,
10117
- interval,
10193
+ interval: parseDuration(args.interval),
10118
10194
  logs: args.logs
10119
10195
  });
10120
10196
  if (!args.json) {
@@ -10917,7 +10993,7 @@ async function listMachineUsers(options) {
10917
10993
  return [machineUsers, nextPageToken];
10918
10994
  })).map(machineUserInfo);
10919
10995
  }
10920
- const listCommand$3 = defineCommand({
10996
+ const listCommand$5 = defineCommand({
10921
10997
  name: "list",
10922
10998
  description: "List all machine users in the application.",
10923
10999
  args: z.object({
@@ -11078,7 +11154,7 @@ async function getOAuth2Client(options) {
11078
11154
  throw error;
11079
11155
  }
11080
11156
  }
11081
- const getCommand = defineCommand({
11157
+ const getCommand$1 = defineCommand({
11082
11158
  name: "get",
11083
11159
  description: "Get OAuth2 client credentials (including client secret).",
11084
11160
  args: z.object({
@@ -11132,7 +11208,7 @@ async function listOAuth2Clients(options) {
11132
11208
  return [oauth2Clients, nextPageToken];
11133
11209
  })).map(toOAuth2ClientInfo);
11134
11210
  }
11135
- const listCommand$2 = defineCommand({
11211
+ const listCommand$4 = defineCommand({
11136
11212
  name: "list",
11137
11213
  description: "List all OAuth2 clients in the application.",
11138
11214
  args: z.object({
@@ -11152,7 +11228,7 @@ const listCommand$2 = defineCommand({
11152
11228
 
11153
11229
  //#endregion
11154
11230
  //#region src/cli/remove.ts
11155
- async function loadOptions$1(options) {
11231
+ async function loadOptions$9(options) {
11156
11232
  const client = await initOperatorClient(await loadAccessToken({
11157
11233
  useProfile: true,
11158
11234
  profile: options?.profile
@@ -11206,10 +11282,10 @@ async function execRemove(client, workspaceId, application, config, confirm) {
11206
11282
  * @returns Promise that resolves when removal completes
11207
11283
  */
11208
11284
  async function remove(options) {
11209
- const { client, workspaceId, application, config } = await loadOptions$1(options);
11285
+ const { client, workspaceId, application, config } = await loadOptions$9(options);
11210
11286
  await execRemove(client, workspaceId, application, config);
11211
11287
  }
11212
- const removeCommand = defineCommand({
11288
+ const removeCommand$1 = defineCommand({
11213
11289
  name: "remove",
11214
11290
  description: "Remove all resources managed by the application from the workspace.",
11215
11291
  args: z.object({
@@ -11218,7 +11294,7 @@ const removeCommand = defineCommand({
11218
11294
  ...confirmationArgs
11219
11295
  }),
11220
11296
  run: withCommonArgs(async (args) => {
11221
- const { client, workspaceId, application, config } = await loadOptions$1({
11297
+ const { client, workspaceId, application, config } = await loadOptions$9({
11222
11298
  workspaceId: args["workspace-id"],
11223
11299
  profile: args.profile,
11224
11300
  configPath: args.config
@@ -11274,13 +11350,13 @@ async function show(options) {
11274
11350
  workspaceId,
11275
11351
  applicationName: config.name
11276
11352
  })]);
11277
- const { name, ...appInfo } = applicationInfo(resp.application);
11353
+ const { name, ...appInfo$1 } = applicationInfo(resp.application);
11278
11354
  return {
11279
11355
  name,
11280
11356
  workspaceId,
11281
11357
  workspaceName: workspaceResp.workspace?.name ?? "",
11282
11358
  workspaceRegion: workspaceResp.workspace?.region ?? "",
11283
- ...appInfo
11359
+ ...appInfo$1
11284
11360
  };
11285
11361
  }
11286
11362
  const showCommand = defineCommand({
@@ -11292,12 +11368,12 @@ const showCommand = defineCommand({
11292
11368
  ...deploymentArgs
11293
11369
  }),
11294
11370
  run: withCommonArgs(async (args) => {
11295
- const appInfo = await show({
11371
+ const appInfo$1 = await show({
11296
11372
  workspaceId: args["workspace-id"],
11297
11373
  profile: args.profile,
11298
11374
  configPath: args.config
11299
11375
  });
11300
- logger.out(appInfo);
11376
+ logger.out(appInfo$1);
11301
11377
  })
11302
11378
  });
11303
11379
 
@@ -11814,7 +11890,7 @@ async function generate(options) {
11814
11890
  return;
11815
11891
  }
11816
11892
  if (options.init) await handleInitOption(namespacesWithMigrations, options.yes);
11817
- const { defineApplication: defineApplication$1 } = await import("./application-ViV4dYwI.mjs");
11893
+ const { defineApplication: defineApplication$1 } = await import("./application-BdZ8qL7I.mjs");
11818
11894
  const application = defineApplication$1(config);
11819
11895
  for (const { namespace, migrationsDir } of namespacesWithMigrations) {
11820
11896
  logger.info(`Processing namespace: ${styles.bold(namespace)}`);
@@ -12155,7 +12231,7 @@ async function listWorkflows(options) {
12155
12231
  return [workflows, nextPageToken];
12156
12232
  })).map(toWorkflowListInfo);
12157
12233
  }
12158
- const listCommand$1 = defineCommand({
12234
+ const listCommand$3 = defineCommand({
12159
12235
  name: "list",
12160
12236
  description: "List all workflows in the workspace.",
12161
12237
  args: z.object({
@@ -12229,12 +12305,11 @@ const resumeCommand = defineCommand({
12229
12305
  ...waitArgs
12230
12306
  }),
12231
12307
  run: withCommonArgs(async (args) => {
12232
- const interval = parseDuration(args.interval);
12233
12308
  const { executionId, wait } = await resumeWorkflow({
12234
12309
  executionId: args.executionId,
12235
12310
  workspaceId: args["workspace-id"],
12236
12311
  profile: args.profile,
12237
- interval
12312
+ interval: parseDuration(args.interval)
12238
12313
  });
12239
12314
  if (!args.json) logger.info(`Execution ID: ${executionId}`, { mode: "stream" });
12240
12315
  if (args.wait) {
@@ -12253,13 +12328,174 @@ const resumeCommand = defineCommand({
12253
12328
  });
12254
12329
 
12255
12330
  //#endregion
12256
- //#region src/cli/workspace/transform.ts
12257
- const formatTimestamp = (timestamp) => {
12258
- if (!timestamp) return null;
12259
- const date = timestampDate(timestamp);
12260
- if (Number.isNaN(date.getTime())) return null;
12261
- return date;
12331
+ //#region src/cli/workspace/app/transform.ts
12332
+ const statusToString = (status) => {
12333
+ switch (status) {
12334
+ case GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatus.OK: return "ok";
12335
+ case GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatus.COMPOSITION_ERROR: return "composition_error";
12336
+ default: return "unknown";
12337
+ }
12338
+ };
12339
+ const attemptStatusToString = (status) => {
12340
+ switch (status) {
12341
+ case ApplicationSchemaUpdateAttemptStatus.SUCCEEDED: return "success";
12342
+ case ApplicationSchemaUpdateAttemptStatus.FAILED: return "failure";
12343
+ default: return "unknown";
12344
+ }
12345
+ };
12346
+ const appInfo = (app) => {
12347
+ return {
12348
+ name: app.name,
12349
+ domain: app.domain,
12350
+ authNamespace: app.authNamespace,
12351
+ createdAt: formatTimestamp(app.createTime),
12352
+ updatedAt: formatTimestamp(app.updateTime)
12353
+ };
12262
12354
  };
12355
+ const appHealthInfo = (name, health) => {
12356
+ const attempt = health.lastSchemaUpdateAttempt;
12357
+ return {
12358
+ name,
12359
+ status: statusToString(health.status),
12360
+ currentServingSchemaUpdatedAt: formatTimestamp(health.currentServingSchemaUpdateTime),
12361
+ lastAttemptStatus: attempt ? attemptStatusToString(attempt.status) : "N/A",
12362
+ lastAttemptAt: formatTimestamp(attempt?.attemptTime),
12363
+ lastAttemptError: attempt?.error ?? ""
12364
+ };
12365
+ };
12366
+
12367
+ //#endregion
12368
+ //#region src/cli/workspace/app/health.ts
12369
+ const healthOptionsSchema = z.object({
12370
+ workspaceId: z.uuid({ message: "workspace-id must be a valid UUID" }).optional(),
12371
+ profile: z.string().optional(),
12372
+ name: z.string().min(1, { message: "name is required" })
12373
+ });
12374
+ async function loadOptions$8(options) {
12375
+ const result = healthOptionsSchema.safeParse(options);
12376
+ if (!result.success) throw new Error(result.error.issues[0].message);
12377
+ return {
12378
+ client: await initOperatorClient(await loadAccessToken()),
12379
+ workspaceId: loadWorkspaceId({
12380
+ workspaceId: result.data.workspaceId,
12381
+ profile: result.data.profile
12382
+ }),
12383
+ name: result.data.name
12384
+ };
12385
+ }
12386
+ /**
12387
+ * Get application schema health status.
12388
+ * @param options - Health check options
12389
+ * @returns Application health information
12390
+ */
12391
+ async function getAppHealth(options) {
12392
+ const { client, workspaceId, name } = await loadOptions$8(options);
12393
+ return appHealthInfo(name, await client.getApplicationSchemaHealth({
12394
+ workspaceId,
12395
+ applicationName: name
12396
+ }));
12397
+ }
12398
+ const healthCommand = defineCommand({
12399
+ name: "health",
12400
+ description: "Check application schema health",
12401
+ args: z.object({
12402
+ ...commonArgs,
12403
+ ...jsonArgs,
12404
+ ...workspaceArgs,
12405
+ name: arg(z.string(), {
12406
+ description: "Application name",
12407
+ alias: "n"
12408
+ })
12409
+ }),
12410
+ run: withCommonArgs(async (args) => {
12411
+ const health = await getAppHealth({
12412
+ workspaceId: args["workspace-id"],
12413
+ profile: args.profile,
12414
+ name: args.name
12415
+ });
12416
+ const formattedHealth = args.json ? health : {
12417
+ ...health,
12418
+ currentServingSchemaUpdatedAt: humanizeRelativeTime(health.currentServingSchemaUpdatedAt),
12419
+ lastAttemptAt: humanizeRelativeTime(health.lastAttemptAt)
12420
+ };
12421
+ logger.out(formattedHealth);
12422
+ })
12423
+ });
12424
+
12425
+ //#endregion
12426
+ //#region src/cli/workspace/app/list.ts
12427
+ const listAppsOptionsSchema = z.object({
12428
+ workspaceId: z.uuid({ message: "workspace-id must be a valid UUID" }).optional(),
12429
+ profile: z.string().optional(),
12430
+ limit: z.coerce.number().int().positive().optional()
12431
+ });
12432
+ async function loadOptions$7(options) {
12433
+ const result = listAppsOptionsSchema.safeParse(options);
12434
+ if (!result.success) throw new Error(result.error.issues[0].message);
12435
+ return {
12436
+ client: await initOperatorClient(await loadAccessToken()),
12437
+ workspaceId: loadWorkspaceId({
12438
+ workspaceId: result.data.workspaceId,
12439
+ profile: result.data.profile
12440
+ }),
12441
+ limit: result.data.limit
12442
+ };
12443
+ }
12444
+ /**
12445
+ * List applications in a workspace with an optional limit.
12446
+ * @param options - Application listing options
12447
+ * @returns List of applications
12448
+ */
12449
+ async function listApps(options) {
12450
+ const { client, workspaceId, limit } = await loadOptions$7(options);
12451
+ const hasLimit = limit !== void 0;
12452
+ const results = [];
12453
+ let pageToken = "";
12454
+ while (true) {
12455
+ if (hasLimit && results.length >= limit) break;
12456
+ const remaining = hasLimit ? limit - results.length : void 0;
12457
+ const pageSize = remaining !== void 0 && remaining > 0 ? remaining : void 0;
12458
+ const { applications, nextPageToken } = await client.listApplications({
12459
+ workspaceId,
12460
+ pageToken,
12461
+ ...pageSize !== void 0 ? { pageSize } : {}
12462
+ });
12463
+ const mapped = applications.map(appInfo);
12464
+ if (remaining !== void 0 && mapped.length > remaining) results.push(...mapped.slice(0, remaining));
12465
+ else results.push(...mapped);
12466
+ if (!nextPageToken) break;
12467
+ pageToken = nextPageToken;
12468
+ }
12469
+ return results;
12470
+ }
12471
+ const listCommand$2 = defineCommand({
12472
+ name: "list",
12473
+ description: "List applications in a workspace",
12474
+ args: z.object({
12475
+ ...commonArgs,
12476
+ ...jsonArgs,
12477
+ ...workspaceArgs,
12478
+ limit: arg(positiveIntArg.optional(), {
12479
+ alias: "l",
12480
+ description: "Maximum number of applications to list"
12481
+ })
12482
+ }),
12483
+ run: withCommonArgs(async (args) => {
12484
+ const apps = await listApps({
12485
+ workspaceId: args["workspace-id"],
12486
+ profile: args.profile,
12487
+ limit: args.limit
12488
+ });
12489
+ const formattedApps = args.json ? apps : apps.map(({ updatedAt: _, createdAt, ...rest }) => ({
12490
+ ...rest,
12491
+ createdAt: humanizeRelativeTime(createdAt)
12492
+ }));
12493
+ logger.out(formattedApps);
12494
+ })
12495
+ });
12496
+
12497
+ //#endregion
12498
+ //#region src/cli/workspace/transform.ts
12263
12499
  const workspaceInfo = (workspace) => {
12264
12500
  return {
12265
12501
  id: workspace.id,
@@ -12269,6 +12505,14 @@ const workspaceInfo = (workspace) => {
12269
12505
  updatedAt: formatTimestamp(workspace.updateTime)
12270
12506
  };
12271
12507
  };
12508
+ const workspaceDetails = (workspace) => {
12509
+ return {
12510
+ ...workspaceInfo(workspace),
12511
+ deleteProtection: workspace.deleteProtection,
12512
+ organizationId: workspace.organizationId,
12513
+ folderId: workspace.folderId
12514
+ };
12515
+ };
12272
12516
 
12273
12517
  //#endregion
12274
12518
  //#region src/cli/workspace/create.ts
@@ -12388,7 +12632,7 @@ const createCommand = defineCommand({
12388
12632
  //#endregion
12389
12633
  //#region src/cli/workspace/delete.ts
12390
12634
  const deleteWorkspaceOptionsSchema = z.object({ workspaceId: z.uuid({ message: "workspace-id must be a valid UUID" }) });
12391
- async function loadOptions(options) {
12635
+ async function loadOptions$6(options) {
12392
12636
  const result = deleteWorkspaceOptionsSchema.safeParse(options);
12393
12637
  if (!result.success) throw new Error(result.error.issues[0].message);
12394
12638
  return {
@@ -12402,7 +12646,7 @@ async function loadOptions(options) {
12402
12646
  * @returns Promise that resolves when deletion completes
12403
12647
  */
12404
12648
  async function deleteWorkspace(options) {
12405
- const { client, workspaceId } = await loadOptions(options);
12649
+ const { client, workspaceId } = await loadOptions$6(options);
12406
12650
  await client.deleteWorkspace({ workspaceId });
12407
12651
  }
12408
12652
  const deleteCommand = defineCommand({
@@ -12417,7 +12661,7 @@ const deleteCommand = defineCommand({
12417
12661
  ...confirmationArgs
12418
12662
  }),
12419
12663
  run: withCommonArgs(async (args) => {
12420
- const { client, workspaceId } = await loadOptions({ workspaceId: args["workspace-id"] });
12664
+ const { client, workspaceId } = await loadOptions$6({ workspaceId: args["workspace-id"] });
12421
12665
  let workspace;
12422
12666
  try {
12423
12667
  workspace = await client.getWorkspace({ workspaceId });
@@ -12442,9 +12686,58 @@ const deleteCommand = defineCommand({
12442
12686
  })
12443
12687
  });
12444
12688
 
12689
+ //#endregion
12690
+ //#region src/cli/workspace/get.ts
12691
+ const getWorkspaceOptionsSchema = z.object({
12692
+ workspaceId: z.uuid({ message: "workspace-id must be a valid UUID" }).optional(),
12693
+ profile: z.string().optional()
12694
+ });
12695
+ async function loadOptions$5(options) {
12696
+ const result = getWorkspaceOptionsSchema.safeParse(options);
12697
+ if (!result.success) throw new Error(result.error.issues[0].message);
12698
+ return {
12699
+ client: await initOperatorClient(await loadAccessToken()),
12700
+ workspaceId: loadWorkspaceId({
12701
+ workspaceId: result.data.workspaceId,
12702
+ profile: result.data.profile
12703
+ })
12704
+ };
12705
+ }
12706
+ /**
12707
+ * Get detailed information about a workspace.
12708
+ * @param options - Workspace get options
12709
+ * @returns Workspace details
12710
+ */
12711
+ async function getWorkspace(options) {
12712
+ const { client, workspaceId } = await loadOptions$5(options);
12713
+ const response = await client.getWorkspace({ workspaceId });
12714
+ if (!response.workspace) throw new Error(`Workspace "${workspaceId}" not found.`);
12715
+ return workspaceDetails(response.workspace);
12716
+ }
12717
+ const getCommand = defineCommand({
12718
+ name: "get",
12719
+ description: "Show detailed information about a workspace",
12720
+ args: z.object({
12721
+ ...commonArgs,
12722
+ ...jsonArgs,
12723
+ ...workspaceArgs
12724
+ }),
12725
+ run: withCommonArgs(async (args) => {
12726
+ const workspace = await getWorkspace({
12727
+ workspaceId: args["workspace-id"],
12728
+ profile: args.profile
12729
+ });
12730
+ const formattedWorkspace = args.json ? workspace : {
12731
+ ...workspace,
12732
+ createdAt: humanizeRelativeTime(workspace.createdAt),
12733
+ updatedAt: humanizeRelativeTime(workspace.updatedAt)
12734
+ };
12735
+ logger.out(formattedWorkspace);
12736
+ })
12737
+ });
12738
+
12445
12739
  //#endregion
12446
12740
  //#region src/cli/workspace/list.ts
12447
- const limitSchema = z.coerce.number().int().positive().optional();
12448
12741
  /**
12449
12742
  * List workspaces with an optional limit.
12450
12743
  * @param options - Workspace listing options
@@ -12472,29 +12765,336 @@ async function listWorkspaces(options) {
12472
12765
  }
12473
12766
  return results;
12474
12767
  }
12475
- const listCommand = defineCommand({
12768
+ const listCommand$1 = defineCommand({
12476
12769
  name: "list",
12477
12770
  description: "List all Tailor Platform workspaces.",
12478
12771
  args: z.object({
12479
12772
  ...commonArgs,
12480
12773
  ...jsonArgs,
12481
- limit: arg(z.string().optional(), {
12774
+ limit: arg(positiveIntArg.optional(), {
12482
12775
  alias: "l",
12483
12776
  description: "Maximum number of workspaces to list"
12484
12777
  })
12485
12778
  }),
12486
12779
  run: withCommonArgs(async (args) => {
12487
- let limit;
12488
- try {
12489
- limit = limitSchema.parse(args.limit);
12490
- } catch {
12491
- throw new Error(`--limit must be a positive integer, got '${args.limit}'`);
12492
- }
12493
- const workspaces = await listWorkspaces({ limit });
12780
+ const workspaces = await listWorkspaces({ limit: args.limit });
12494
12781
  logger.out(workspaces, { display: { updatedAt: null } });
12495
12782
  })
12496
12783
  });
12497
12784
 
12498
12785
  //#endregion
12499
- export { compareSnapshots as $, triggerCommand as A, commonArgs as At, executionsCommand as B, getOAuth2Client as C, writePlatformConfig as Ct, listMachineUsers as D, initOperatorClient as Dt, listCommand$3 as E, initOAuth2Client as Et, watchExecutorJob as F, workspaceArgs as Ft, MIGRATION_LABEL_KEY as G, listWorkflowExecutions as H, startCommand as I, DIFF_FILE_NAME as J, parseMigrationLabelNumber as K, startWorkflow as L, getExecutorJob as M, deploymentArgs as Mt, jobsCommand as N, jsonArgs as Nt, generate$1 as O, readPackageJson as Ot, listExecutorJobs as P, withCommonArgs as Pt, compareLocalTypesWithSnapshot as Q, getCommand$1 as R, getCommand as S, readPlatformConfig as St, tokenCommand as T, fetchUserInfo as Tt, apply as U, getWorkflowExecution as V, applyCommand as W, MIGRATE_FILE_NAME as X, INITIAL_SCHEMA_NUMBER as Y, SCHEMA_FILE_NAME as Z, showCommand as _, apiCall as _t, createCommand as a, getMigrationFiles as at, listCommand$2 as b, loadAccessToken as bt, resumeWorkflow as c, loadDiff as ct, truncate as d, formatMigrationDiff as dt, createSnapshotFromLocalTypes as et, truncateCommand as f, hasChanges as ft, show as g, loadConfig as gt, logBetaWarning as h, generateUserTypes as ht, deleteWorkspace as i, getMigrationFilePath as it, triggerExecutor as j, confirmationArgs as jt, generateCommand$1 as k, PATScope as kt, listCommand$1 as l, reconstructSnapshotFromMigrations as lt, generateCommand as m, trnPrefix as mt, listWorkspaces as n, getLatestMigrationNumber as nt, createWorkspace as o, getNextMigrationNumber as ot, generate as p, getNamespacesWithMigrations as pt, DB_TYPES_FILE_NAME as q, deleteCommand as r, getMigrationDirPath as rt, resumeCommand as s, isValidMigrationNumber as st, listCommand as t, formatMigrationNumber as tt, listWorkflows as u, formatDiffSummary as ut, remove as v, apiCommand as vt, getMachineUserToken as w, fetchAll as wt, listOAuth2Clients as x, loadWorkspaceId as xt, removeCommand as y, fetchLatestToken as yt, getWorkflow as z };
12500
- //# sourceMappingURL=list-D1K7WwpV.mjs.map
12786
+ //#region src/cli/workspace/restore.ts
12787
+ const restoreWorkspaceOptionsSchema = z.object({ workspaceId: z.uuid({ message: "workspace-id must be a valid UUID" }) });
12788
+ async function loadOptions$4(options) {
12789
+ const result = restoreWorkspaceOptionsSchema.safeParse(options);
12790
+ if (!result.success) throw new Error(result.error.issues[0].message);
12791
+ return {
12792
+ client: await initOperatorClient(await loadAccessToken()),
12793
+ workspaceId: result.data.workspaceId
12794
+ };
12795
+ }
12796
+ /**
12797
+ * Restore a deleted workspace by ID.
12798
+ * @param options - Workspace restore options
12799
+ * @returns Promise that resolves when restoration completes
12800
+ */
12801
+ async function restoreWorkspace(options) {
12802
+ const { client, workspaceId } = await loadOptions$4(options);
12803
+ await client.restoreWorkspace({ workspaceId });
12804
+ }
12805
+ const restoreCommand = defineCommand({
12806
+ name: "restore",
12807
+ description: "Restore a deleted workspace",
12808
+ args: z.object({
12809
+ ...commonArgs,
12810
+ "workspace-id": arg(z.string(), {
12811
+ alias: "w",
12812
+ description: "Workspace ID"
12813
+ }),
12814
+ ...confirmationArgs
12815
+ }),
12816
+ run: withCommonArgs(async (args) => {
12817
+ const { client, workspaceId } = await loadOptions$4({ workspaceId: args["workspace-id"] });
12818
+ if (!args.yes) {
12819
+ if (await logger.prompt(`Are you sure you want to restore workspace "${workspaceId}"? (yes/no):`, { type: "text" }) !== "yes") {
12820
+ logger.info("Workspace restoration cancelled.");
12821
+ return;
12822
+ }
12823
+ }
12824
+ await client.restoreWorkspace({ workspaceId });
12825
+ logger.success(`Workspace "${workspaceId}" restored successfully.`);
12826
+ })
12827
+ });
12828
+
12829
+ //#endregion
12830
+ //#region src/cli/workspace/user/transform.ts
12831
+ const roleToString = (role) => {
12832
+ switch (role) {
12833
+ case WorkspacePlatformUserRole.ADMIN: return "admin";
12834
+ case WorkspacePlatformUserRole.EDITOR: return "editor";
12835
+ case WorkspacePlatformUserRole.VIEWER: return "viewer";
12836
+ default: return "unknown";
12837
+ }
12838
+ };
12839
+ const stringToRole = (role) => {
12840
+ switch (role.toLowerCase()) {
12841
+ case "admin": return WorkspacePlatformUserRole.ADMIN;
12842
+ case "editor": return WorkspacePlatformUserRole.EDITOR;
12843
+ case "viewer": return WorkspacePlatformUserRole.VIEWER;
12844
+ default: throw new Error(`Invalid role: ${role}. Valid roles: admin, editor, viewer`);
12845
+ }
12846
+ };
12847
+ const userInfo = (user) => {
12848
+ return {
12849
+ userId: user.platformUser?.userId ?? "",
12850
+ email: user.platformUser?.email ?? "",
12851
+ role: roleToString(user.role)
12852
+ };
12853
+ };
12854
+ const validRoles = [
12855
+ "admin",
12856
+ "editor",
12857
+ "viewer"
12858
+ ];
12859
+
12860
+ //#endregion
12861
+ //#region src/cli/workspace/user/invite.ts
12862
+ const inviteUserOptionsSchema = z.object({
12863
+ workspaceId: z.uuid({ message: "workspace-id must be a valid UUID" }).optional(),
12864
+ profile: z.string().optional(),
12865
+ email: z.email({ message: "email must be a valid email address" }),
12866
+ role: z.enum(validRoles, { message: `role must be one of: ${validRoles.join(", ")}` })
12867
+ });
12868
+ async function loadOptions$3(options) {
12869
+ const result = inviteUserOptionsSchema.safeParse(options);
12870
+ if (!result.success) throw new Error(result.error.issues[0].message);
12871
+ return {
12872
+ client: await initOperatorClient(await loadAccessToken()),
12873
+ workspaceId: loadWorkspaceId({
12874
+ workspaceId: result.data.workspaceId,
12875
+ profile: result.data.profile
12876
+ }),
12877
+ email: result.data.email,
12878
+ role: stringToRole(result.data.role)
12879
+ };
12880
+ }
12881
+ /**
12882
+ * Invite a user to a workspace.
12883
+ * @param options - User invite options
12884
+ * @returns Promise that resolves when invitation is sent
12885
+ */
12886
+ async function inviteUser(options) {
12887
+ const { client, workspaceId, email, role } = await loadOptions$3(options);
12888
+ await client.inviteWorkspacePlatformUser({
12889
+ workspaceId,
12890
+ email,
12891
+ role
12892
+ });
12893
+ }
12894
+ const inviteCommand = defineCommand({
12895
+ name: "invite",
12896
+ description: "Invite a user to a workspace",
12897
+ args: z.object({
12898
+ ...commonArgs,
12899
+ ...workspaceArgs,
12900
+ email: arg(z.email(), { description: "Email address of the user to invite" }),
12901
+ role: arg(z.enum(validRoles), {
12902
+ description: `Role to assign (${validRoles.join(", ")})`,
12903
+ alias: "r"
12904
+ })
12905
+ }),
12906
+ run: withCommonArgs(async (args) => {
12907
+ await inviteUser({
12908
+ workspaceId: args["workspace-id"],
12909
+ profile: args.profile,
12910
+ email: args.email,
12911
+ role: args.role
12912
+ });
12913
+ logger.success(`User "${args.email}" invited successfully with role "${args.role}".`);
12914
+ })
12915
+ });
12916
+
12917
+ //#endregion
12918
+ //#region src/cli/workspace/user/list.ts
12919
+ const listUsersOptionsSchema = z.object({
12920
+ workspaceId: z.uuid({ message: "workspace-id must be a valid UUID" }).optional(),
12921
+ profile: z.string().optional(),
12922
+ limit: z.coerce.number().int().positive().optional()
12923
+ });
12924
+ async function loadOptions$2(options) {
12925
+ const result = listUsersOptionsSchema.safeParse(options);
12926
+ if (!result.success) throw new Error(result.error.issues[0].message);
12927
+ return {
12928
+ client: await initOperatorClient(await loadAccessToken()),
12929
+ workspaceId: loadWorkspaceId({
12930
+ workspaceId: result.data.workspaceId,
12931
+ profile: result.data.profile
12932
+ }),
12933
+ limit: result.data.limit
12934
+ };
12935
+ }
12936
+ /**
12937
+ * List users in a workspace with an optional limit.
12938
+ * @param options - User listing options
12939
+ * @returns List of workspace users
12940
+ */
12941
+ async function listUsers(options) {
12942
+ const { client, workspaceId, limit } = await loadOptions$2(options);
12943
+ const hasLimit = limit !== void 0;
12944
+ const results = [];
12945
+ let pageToken = "";
12946
+ while (true) {
12947
+ if (hasLimit && results.length >= limit) break;
12948
+ const remaining = hasLimit ? limit - results.length : void 0;
12949
+ const pageSize = remaining !== void 0 && remaining > 0 ? remaining : void 0;
12950
+ const { workspacePlatformUsers, nextPageToken } = await client.listWorkspacePlatformUsers({
12951
+ workspaceId,
12952
+ pageToken,
12953
+ ...pageSize !== void 0 ? { pageSize } : {}
12954
+ });
12955
+ const mapped = workspacePlatformUsers.map(userInfo);
12956
+ if (remaining !== void 0 && mapped.length > remaining) results.push(...mapped.slice(0, remaining));
12957
+ else results.push(...mapped);
12958
+ if (!nextPageToken) break;
12959
+ pageToken = nextPageToken;
12960
+ }
12961
+ return results;
12962
+ }
12963
+ const listCommand = defineCommand({
12964
+ name: "list",
12965
+ description: "List users in a workspace",
12966
+ args: z.object({
12967
+ ...commonArgs,
12968
+ ...jsonArgs,
12969
+ ...workspaceArgs,
12970
+ limit: arg(positiveIntArg.optional(), {
12971
+ alias: "l",
12972
+ description: "Maximum number of users to list"
12973
+ })
12974
+ }),
12975
+ run: withCommonArgs(async (args) => {
12976
+ const users = await listUsers({
12977
+ workspaceId: args["workspace-id"],
12978
+ profile: args.profile,
12979
+ limit: args.limit
12980
+ });
12981
+ logger.out(users);
12982
+ })
12983
+ });
12984
+
12985
+ //#endregion
12986
+ //#region src/cli/workspace/user/remove.ts
12987
+ const removeUserOptionsSchema = z.object({
12988
+ workspaceId: z.uuid({ message: "workspace-id must be a valid UUID" }).optional(),
12989
+ profile: z.string().optional(),
12990
+ email: z.string().email({ message: "email must be a valid email address" })
12991
+ });
12992
+ async function loadOptions$1(options) {
12993
+ const result = removeUserOptionsSchema.safeParse(options);
12994
+ if (!result.success) throw new Error(result.error.issues[0].message);
12995
+ return {
12996
+ client: await initOperatorClient(await loadAccessToken()),
12997
+ workspaceId: loadWorkspaceId({
12998
+ workspaceId: result.data.workspaceId,
12999
+ profile: result.data.profile
13000
+ }),
13001
+ email: result.data.email
13002
+ };
13003
+ }
13004
+ /**
13005
+ * Remove a user from a workspace.
13006
+ * @param options - User remove options
13007
+ * @returns Promise that resolves when removal completes
13008
+ */
13009
+ async function removeUser(options) {
13010
+ const { client, workspaceId, email } = await loadOptions$1(options);
13011
+ await client.removeWorkspacePlatformUser({
13012
+ workspaceId,
13013
+ email
13014
+ });
13015
+ }
13016
+ const removeCommand = defineCommand({
13017
+ name: "remove",
13018
+ description: "Remove a user from a workspace",
13019
+ args: z.object({
13020
+ ...commonArgs,
13021
+ ...workspaceArgs,
13022
+ email: arg(z.email(), { description: "Email address of the user to remove" }),
13023
+ ...confirmationArgs
13024
+ }),
13025
+ run: withCommonArgs(async (args) => {
13026
+ if (!args.yes) {
13027
+ if (await logger.prompt(`Are you sure you want to remove user "${args.email}" from the workspace? (yes/no):`, { type: "text" }) !== "yes") {
13028
+ logger.info("User removal cancelled.");
13029
+ return;
13030
+ }
13031
+ }
13032
+ await removeUser({
13033
+ workspaceId: args["workspace-id"],
13034
+ profile: args.profile,
13035
+ email: args.email
13036
+ });
13037
+ logger.success(`User "${args.email}" removed from workspace.`);
13038
+ })
13039
+ });
13040
+
13041
+ //#endregion
13042
+ //#region src/cli/workspace/user/update.ts
13043
+ const updateUserOptionsSchema = z.object({
13044
+ workspaceId: z.uuid({ message: "workspace-id must be a valid UUID" }).optional(),
13045
+ profile: z.string().optional(),
13046
+ email: z.string().email({ message: "email must be a valid email address" }),
13047
+ role: z.enum(validRoles, { message: `role must be one of: ${validRoles.join(", ")}` })
13048
+ });
13049
+ async function loadOptions(options) {
13050
+ const result = updateUserOptionsSchema.safeParse(options);
13051
+ if (!result.success) throw new Error(result.error.issues[0].message);
13052
+ return {
13053
+ client: await initOperatorClient(await loadAccessToken()),
13054
+ workspaceId: loadWorkspaceId({
13055
+ workspaceId: result.data.workspaceId,
13056
+ profile: result.data.profile
13057
+ }),
13058
+ email: result.data.email,
13059
+ role: stringToRole(result.data.role)
13060
+ };
13061
+ }
13062
+ /**
13063
+ * Update a user's role in a workspace.
13064
+ * @param options - User update options
13065
+ * @returns Promise that resolves when update completes
13066
+ */
13067
+ async function updateUser(options) {
13068
+ const { client, workspaceId, email, role } = await loadOptions(options);
13069
+ await client.updateWorkspacePlatformUser({
13070
+ workspaceId,
13071
+ email,
13072
+ role
13073
+ });
13074
+ }
13075
+ const updateCommand = defineCommand({
13076
+ name: "update",
13077
+ description: "Update a user's role in a workspace",
13078
+ args: z.object({
13079
+ ...commonArgs,
13080
+ ...workspaceArgs,
13081
+ email: arg(z.email(), { description: "Email address of the user to update" }),
13082
+ role: arg(z.enum(validRoles), {
13083
+ description: `New role to assign (${validRoles.join(", ")})`,
13084
+ alias: "r"
13085
+ })
13086
+ }),
13087
+ run: withCommonArgs(async (args) => {
13088
+ await updateUser({
13089
+ workspaceId: args["workspace-id"],
13090
+ profile: args.profile,
13091
+ email: args.email,
13092
+ role: args.role
13093
+ });
13094
+ logger.success(`User "${args.email}" updated to role "${args.role}".`);
13095
+ })
13096
+ });
13097
+
13098
+ //#endregion
13099
+ export { startWorkflow as $, generateCommand as A, trnPrefix as At, getMachineUserToken as B, fetchAll as Bt, resumeCommand as C, isValidMigrationNumber as Ct, truncate as D, formatMigrationDiff as Dt, listWorkflows as E, formatDiffSummary as Et, removeCommand$1 as F, fetchLatestToken as Ft, generateCommand$1 as G, PATScope as Gt, listCommand$5 as H, initOAuth2Client as Ht, listCommand$4 as I, loadAccessToken as It, getExecutorJob as J, deploymentArgs as Jt, triggerCommand as K, commonArgs as Kt, listOAuth2Clients as L, loadWorkspaceId as Lt, show as M, loadConfig as Mt, showCommand as N, apiCall as Nt, truncateCommand as O, hasChanges as Ot, remove as P, apiCommand as Pt, startCommand as Q, getCommand$1 as R, readPlatformConfig as Rt, healthCommand as S, getNextMigrationNumber as St, listCommand$3 as T, reconstructSnapshotFromMigrations as Tt, listMachineUsers as U, initOperatorClient as Ut, tokenCommand as V, fetchUserInfo as Vt, generate$1 as W, readPackageJson as Wt, listExecutorJobs as X, withCommonArgs as Xt, jobsCommand as Y, jsonArgs as Yt, watchExecutorJob as Z, workspaceArgs as Zt, createCommand as _, formatMigrationNumber as _t, listCommand as a, apply as at, listCommand$2 as b, getMigrationFilePath as bt, inviteUser as c, parseMigrationLabelNumber as ct, listCommand$1 as d, INITIAL_SCHEMA_NUMBER as dt, getCommand$2 as et, listWorkspaces as f, MIGRATE_FILE_NAME as ft, deleteWorkspace as g, createSnapshotFromLocalTypes as gt, deleteCommand as h, compareSnapshots as ht, removeUser as i, listWorkflowExecutions as it, logBetaWarning as j, generateUserTypes as jt, generate as k, getNamespacesWithMigrations as kt, restoreCommand as l, DB_TYPES_FILE_NAME as lt, getWorkspace as m, compareLocalTypesWithSnapshot as mt, updateUser as n, executionsCommand as nt, listUsers as o, applyCommand as ot, getCommand as p, SCHEMA_FILE_NAME as pt, triggerExecutor as q, confirmationArgs as qt, removeCommand as r, getWorkflowExecution as rt, inviteCommand as s, MIGRATION_LABEL_KEY as st, updateCommand as t, getWorkflow as tt, restoreWorkspace as u, DIFF_FILE_NAME as ut, createWorkspace as v, getLatestMigrationNumber as vt, resumeWorkflow as w, loadDiff as wt, getAppHealth as x, getMigrationFiles as xt, listApps as y, getMigrationDirPath as yt, getOAuth2Client as z, writePlatformConfig as zt };
13100
+ //# sourceMappingURL=update-DZs1loy_.mjs.map