@tailor-platform/sdk 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/dist/cli/index.mjs +59 -241
- package/dist/cli/index.mjs.map +1 -1
- package/dist/cli/lib.d.mts +78 -60
- package/dist/cli/lib.mjs +3 -3
- package/dist/cli/lib.mjs.map +1 -1
- package/dist/{config-BmQRlW1j.mjs → config-CBpYlVa-.mjs} +23 -34
- package/dist/config-CBpYlVa-.mjs.map +1 -0
- package/dist/configure/index.d.mts +2 -2
- package/dist/configure/index.mjs +34 -31
- package/dist/configure/index.mjs.map +1 -1
- package/dist/{index-ByDQH56l.d.mts → index-CTExbeYE.d.mts} +42 -66
- package/dist/{list-BCl3ViG0.mjs → list-1cs_CGF8.mjs} +878 -487
- package/dist/list-1cs_CGF8.mjs.map +1 -0
- package/dist/{types-22f0o6xW.d.mts → types-Yxg4lgU0.d.mts} +60 -63
- package/dist/utils/test/index.d.mts +7 -7
- package/dist/utils/test/index.mjs +5 -5
- package/dist/utils/test/index.mjs.map +1 -1
- package/package.json +3 -3
- package/dist/config-BmQRlW1j.mjs.map +0 -1
- package/dist/list-BCl3ViG0.mjs.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM, r as __exportAll, t as __commonJSMin } from "./chunk-CIV_ash9.mjs";
|
|
2
|
-
import { i as WORKFLOW_JOB_BRAND, r as getDistDir } from "./config-
|
|
2
|
+
import { i as WORKFLOW_JOB_BRAND, r as getDistDir } from "./config-CBpYlVa-.mjs";
|
|
3
3
|
import Module, { createRequire } from "node:module";
|
|
4
4
|
import { defineCommand } from "citty";
|
|
5
5
|
import * as fs$15 from "node:fs";
|
|
@@ -40,8 +40,8 @@ import ora from "ora";
|
|
|
40
40
|
//#region src/cli/utils/errors.ts
|
|
41
41
|
/**
|
|
42
42
|
* Type guard to check if an error is a CLIError
|
|
43
|
-
* @param
|
|
44
|
-
* @returns
|
|
43
|
+
* @param error - Error to check
|
|
44
|
+
* @returns True if the error is a CLIError
|
|
45
45
|
*/
|
|
46
46
|
function isCLIError(error) {
|
|
47
47
|
return error instanceof Error && error.name === "CLIError";
|
|
@@ -243,8 +243,8 @@ const durationSchema = z.templateLiteral([z.number().int().positive(), z.enum(du
|
|
|
243
243
|
});
|
|
244
244
|
/**
|
|
245
245
|
* Parse a duration string (e.g., "3s", "500ms", "1m") to milliseconds
|
|
246
|
-
* @param
|
|
247
|
-
* @returns
|
|
246
|
+
* @param duration - Duration string with unit suffix (ms, s, m)
|
|
247
|
+
* @returns Duration in milliseconds
|
|
248
248
|
*/
|
|
249
249
|
function parseDuration(duration) {
|
|
250
250
|
return durationSchema.parse(duration);
|
|
@@ -256,8 +256,8 @@ function parseDuration(duration) {
|
|
|
256
256
|
* Follows Node.js --env-file behavior:
|
|
257
257
|
* - Variables already set in the environment are NOT overwritten
|
|
258
258
|
* - Variables from later files override those from earlier files
|
|
259
|
-
* @param
|
|
260
|
-
* @param
|
|
259
|
+
* @param envFiles - Required env file path(s) that must exist
|
|
260
|
+
* @param envFilesIfExists - Optional env file path(s) that are loaded if they exist
|
|
261
261
|
*/
|
|
262
262
|
function loadEnvFiles(envFiles, envFilesIfExists) {
|
|
263
263
|
const originalEnvKeys = new Set(Object.keys(process.env));
|
|
@@ -352,10 +352,11 @@ const jsonArgs = { json: {
|
|
|
352
352
|
* - Error handling with formatted output
|
|
353
353
|
* - Exit code management
|
|
354
354
|
* @template T
|
|
355
|
-
* @param
|
|
356
|
-
* @returns
|
|
355
|
+
* @param handler - Command handler function
|
|
356
|
+
* @returns Wrapped handler
|
|
357
357
|
*/
|
|
358
|
-
const withCommonArgs = (handler) => async (
|
|
358
|
+
const withCommonArgs = (handler) => async (context) => {
|
|
359
|
+
const { args } = context;
|
|
359
360
|
try {
|
|
360
361
|
if ("json" in args && typeof args.json === "boolean") logger.jsonMode = args.json;
|
|
361
362
|
loadEnvFiles(args["env-file"], args["env-file-if-exists"]);
|
|
@@ -476,7 +477,7 @@ const file_tailor_v1_secret_manager_resource = /* @__PURE__ */ fileDesc("Cid0YWl
|
|
|
476
477
|
/**
|
|
477
478
|
* Describes the file tailor/v1/auth_resource.proto.
|
|
478
479
|
*/
|
|
479
|
-
const file_tailor_v1_auth_resource = /* @__PURE__ */ fileDesc("
|
|
480
|
+
const file_tailor_v1_auth_resource = /* @__PURE__ */ fileDesc("Ch10YWlsb3IvdjEvYXV0aF9yZXNvdXJjZS5wcm90bxIJdGFpbG9yLnYxIlYKC0F1dGhTZXJ2aWNlEicKCW5hbWVzcGFjZRgBIAEoCzIULnRhaWxvci52MS5OYW1lc3BhY2USHgoWcHVibGlzaF9zZXNzaW9uX2V2ZW50cxgCIAEoCCK0BgoNQXV0aElEUENvbmZpZxI2CgRuYW1lGAEgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjQKCWF1dGhfdHlwZRgCIAEoDjIhLnRhaWxvci52MS5BdXRoSURQQ29uZmlnLkF1dGhUeXBlEi8KBmNvbmZpZxgDIAEoCzIfLnRhaWxvci52MS5BdXRoSURQQ29uZmlnLkNvbmZpZxq4AQoGQ29uZmlnEjMKBG9pZGMYASABKAsyIy50YWlsb3IudjEuQXV0aElEUENvbmZpZy5PSURDQ29uZmlnSAASMwoEc2FtbBgCIAEoCzIjLnRhaWxvci52MS5BdXRoSURQQ29uZmlnLlNBTUxDb25maWdIABI6CghpZF90b2tlbhgDIAEoCzImLnRhaWxvci52MS5BdXRoSURQQ29uZmlnLklEVG9rZW5Db25maWdIAEIICgZjb25maWcamAEKCk9JRENDb25maWcSFQoNY2xpZW50X2lkX2tleRgBIAEoCRIxChFjbGllbnRfc2VjcmV0X2tleRgCIAEoCzIWLnRhaWxvci52MS5TZWNyZXRWYWx1ZRIUCgxwcm92aWRlcl91cmwYAyABKAkSEgoKaXNzdWVyX3VybBgEIAEoCRIWCg51c2VybmFtZV9jbGFpbRgFIAEoCRphCgpTQU1MQ29uZmlnEhQKDG1ldGFkYXRhX3VybBgBIAEoCRIUCgxyYXdfbWV0YWRhdGEYBCABKAkSGwoTZW5hYmxlX3NpZ25fcmVxdWVzdBgFIAEoCEoECAIQA0oECAMQBBpkCg1JRFRva2VuQ29uZmlnEhQKDHByb3ZpZGVyX3VybBgBIAEoCRIRCgljbGllbnRfaWQYAiABKAkSEgoKaXNzdWVyX3VybBgDIAEoCRIWCg51c2VybmFtZV9jbGFpbRgEIAEoCSJlCghBdXRoVHlwZRIZChVBVVRIX1RZUEVfVU5TUEVDSUZJRUQQABISCg5BVVRIX1RZUEVfT0lEQxABEhIKDkFVVEhfVFlQRV9TQU1MEAISFgoSQVVUSF9UWVBFX0lEX1RPS0VOEAMirQYKGVVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcSFAoIcHJvdmlkZXIYASABKAlCAhgBElMKDXByb3ZpZGVyX3R5cGUYAiABKA4yPC50YWlsb3IudjEuVXNlclByb2ZpbGVQcm92aWRlckNvbmZpZy5Vc2VyUHJvZmlsZVByb3ZpZGVyVHlwZRI7CgZjb25maWcYAyABKAsyKy50YWlsb3IudjEuVXNlclByb2ZpbGVQcm92aWRlckNvbmZpZy5Db25maWcaYwoGQ29uZmlnEk8KCHRhaWxvcmRiGAEgASgLMjsudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcuVGFpbG9yREJQcm92aWRlckNvbmZpZ0gAQggKBmNvbmZpZxqSAwoWVGFpbG9yREJQcm92aWRlckNvbmZpZxI7CgluYW1lc3BhY2UYASABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLQoEdHlwZRgCIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JBIWCg51c2VybmFtZV9maWVsZBgDIAEoCRIZChFhdHRyaWJ1dGVzX2ZpZWxkcxgEIAMoCRIXCg90ZW5hbnRfaWRfZmllbGQYBSABKAkSigEKDWF0dHJpYnV0ZV9tYXAYBiADKAsyTS50YWlsb3IudjEuVXNlclByb2ZpbGVQcm92aWRlckNvbmZpZy5UYWlsb3JEQlByb3ZpZGVyQ29uZmlnLkF0dHJpYnV0ZU1hcEVudHJ5QiS6SCGaAR4iHHIaMhheW2Etel1bMC05YS16QS1aXXswLDYyfSQaMwoRQXR0cmlidXRlTWFwRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJuChdVc2VyUHJvZmlsZVByb3ZpZGVyVHlwZRIqCiZVU0VSX1BST0ZJTEVfUFJPVklERVJfVFlQRV9VTlNQRUNJRklFRBAAEicKI1VTRVJfUFJPRklMRV9QUk9WSURFUl9UWVBFX1RBSUxPUkRCEAEivgMKFFRlbmFudFByb3ZpZGVyQ29uZmlnEhAKCHByb3ZpZGVyGAEgASgJEkkKDXByb3ZpZGVyX3R5cGUYAiABKA4yMi50YWlsb3IudjEuVGVuYW50UHJvdmlkZXJDb25maWcuVGVuYW50UHJvdmlkZXJUeXBlEjYKBmNvbmZpZxgDIAEoCzImLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZy5Db25maWcaXgoGQ29uZmlnEkoKCHRhaWxvcmRiGAEgASgLMjYudGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnLlRhaWxvckRCUHJvdmlkZXJDb25maWdIAEIICgZjb25maWcaUgoWVGFpbG9yREJQcm92aWRlckNvbmZpZxIRCgluYW1lc3BhY2UYASABKAkSDAoEdHlwZRgCIAEoCRIXCg9zaWduYXR1cmVfZmllbGQYAyABKAkiXQoSVGVuYW50UHJvdmlkZXJUeXBlEiQKIFRFTkFOVF9QUk9WSURFUl9UWVBFX1VOU1BFQ0lGSUVEEAASIQodVEVOQU5UX1BST1ZJREVSX1RZUEVfVEFJTE9SREIQASI7CgtBdXRoSW52b2tlchIRCgluYW1lc3BhY2UYASABKAkSGQoRbWFjaGluZV91c2VyX25hbWUYAiABKAkiSAoTUGVyc29uYWxBY2Nlc3NUb2tlbhIMCgRuYW1lGAEgASgJEiMKBnNjb3BlcxgCIAMoDjITLnRhaWxvci52MS5QQVRTY29wZSLGAwoLTWFjaGluZVVzZXISCgoCaWQYASABKAkSNgoEbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIWCgljbGllbnRfaWQYAyABKAlCA+BBAxIaCg1jbGllbnRfc2VjcmV0GAQgASgJQgPgQQMSIQoKYXR0cmlidXRlcxgFIAMoCUINukgKkgEHIgVyA7ABARIzCgpjcmVhdGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEjMKCnVwZGF0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSZQoNYXR0cmlidXRlX21hcBgIIAMoCzIoLnRhaWxvci52MS5NYWNoaW5lVXNlci5BdHRyaWJ1dGVNYXBFbnRyeUIkukghmgEeIhxyGjIYXlthLXpdWzAtOWEtekEtWl17MCw2Mn0kGksKEUF0dHJpYnV0ZU1hcEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEi3gIKDkF1dGhTQ0lNQ29uZmlnEkMKEW1hY2hpbmVfdXNlcl9uYW1lGAEgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkcKEmF1dGhvcml6YXRpb25fdHlwZRgCIAEoDjIrLnRhaWxvci52MS5BdXRoU0NJTUNvbmZpZy5BdXRob3JpemF0aW9uVHlwZRIvCg1iZWFyZXJfc2VjcmV0GAogASgLMhYudGFpbG9yLnYxLlNlY3JldFZhbHVlSAAidQoRQXV0aG9yaXphdGlvblR5cGUSIgoeQVVUSE9SSVpBVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASHQoZQVVUSE9SSVpBVElPTl9UWVBFX0JFQVJFUhABEh0KGUFVVEhPUklaQVRJT05fVFlQRV9PQVVUSDIQAkIWChRhdXRob3JpemF0aW9uX2NvbmZpZyLDAgoQQXV0aFNDSU1SZXNvdXJjZRI/CgRuYW1lGAEgASgJQjG6SC5yLDIqXltBLVphLXowLTldW0EtWmEtejAtOS1dezEsNjF9W0EtWmEtejAtOV0kEkUKE3RhaWxvcl9kYl9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNwoOdGFpbG9yX2RiX3R5cGUYAyABKAlCH7pIHHIaMhheW0EtWl1bYS16QS1aMC05XXswLDYyfSQSPgoRYXR0cmlidXRlX21hcHBpbmcYBCADKAsyIy50YWlsb3IudjEuQXV0aFNDSU1BdHRyaWJ1dGVNYXBwaW5nEi4KC2NvcmVfc2NoZW1hGAUgASgLMhkudGFpbG9yLnYxLkF1dGhTQ0lNU2NoZW1hIkYKGEF1dGhTQ0lNQXR0cmlidXRlTWFwcGluZxIXCg90YWlsb3JfZGJfZmllbGQYASABKAkSEQoJc2NpbV9wYXRoGAIgASgJIlAKDkF1dGhTQ0lNU2NoZW1hEgwKBG5hbWUYASABKAkSMAoKYXR0cmlidXRlcxgCIAMoCzIcLnRhaWxvci52MS5BdXRoU0NJTUF0dHJpYnV0ZSLZBQoRQXV0aFNDSU1BdHRyaWJ1dGUSLwoEdHlwZRgBIAEoDjIhLnRhaWxvci52MS5BdXRoU0NJTUF0dHJpYnV0ZS5UeXBlEi4KBG5hbWUYAiABKAlCILpIHXIbMhleW0EtWmEtel1bYS16QS1aMC05XyQtXSokEhMKC2Rlc2NyaXB0aW9uGAMgASgJEjsKCm11dGFiaWxpdHkYBCABKA4yJy50YWlsb3IudjEuQXV0aFNDSU1BdHRyaWJ1dGUuTXV0YWJpbGl0eRIQCghyZXF1aXJlZBgFIAEoCBIUCgxtdWx0aV92YWx1ZWQYBiABKAgSOwoKdW5pcXVlbmVzcxgHIAEoDjInLnRhaWxvci52MS5BdXRoU0NJTUF0dHJpYnV0ZS5VbmlxdWVuZXNzEhgKEGNhbm9uaWNhbF92YWx1ZXMYCCADKAkSNAoOc3ViX2F0dHJpYnV0ZXMYCSADKAsyHC50YWlsb3IudjEuQXV0aFNDSU1BdHRyaWJ1dGUidQoEVHlwZRIUChBUWVBFX1VOU1BFQ0lGSUVEEAASEAoMVFlQRV9DT01QTEVYEAESDwoLVFlQRV9TVFJJTkcQAhIPCgtUWVBFX05VTUJFUhADEhAKDFRZUEVfQk9PTEVBThAEEhEKDVRZUEVfREFURVRJTUUQBSJ4CgpNdXRhYmlsaXR5EhoKFk1VVEFCSUxJVFlfVU5TUEVDSUZJRUQQABIYChRNVVRBQklMSVRZX1JFQURfT05MWRABEhkKFU1VVEFCSUxJVFlfUkVBRF9XUklURRACEhkKFU1VVEFCSUxJVFlfV1JJVEVfT05MWRADImsKClVuaXF1ZW5lc3MSGgoWVU5JUVVFTkVTU19VTlNQRUNJRklFRBAAEhMKD1VOSVFVRU5FU1NfTk9ORRABEhUKEVVOSVFVRU5FU1NfU0VSVkVSEAISFQoRVU5JUVVFTkVTU19HTE9CQUwQAyK+BAoOQXV0aENvbm5lY3Rpb24SNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIsCgR0eXBlGAIgASgOMh4udGFpbG9yLnYxLkF1dGhDb25uZWN0aW9uLlR5cGUSRgoGb2F1dGgyGAMgASgLMjQudGFpbG9yLnYxLkF1dGhDb25uZWN0aW9uLkF1dGhDb25uZWN0aW9uT0F1dGgyQ29uZmlnSAASMwoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAxqIAgoaQXV0aENvbm5lY3Rpb25PQXV0aDJDb25maWcSFAoMcHJvdmlkZXJfdXJsGAEgASgJEhIKCmlzc3Vlcl91cmwYAiABKAkSEQoJY2xpZW50X2lkGAMgASgJEhoKDWNsaWVudF9zZWNyZXQYBCABKAlCA+BBBBJHCghhdXRoX3VybBgFIAEoCUI1ukgy2AEBci0yKF5odHRwczovL1tBLVphLXowLTkuLV0rKDpbMC05XSspPygvLiopPySIAQESSAoJdG9rZW5fdXJsGAYgASgJQjW6SDLYAQFyLTIoXmh0dHBzOi8vW0EtWmEtejAtOS4tXSsoOlswLTldKyk/KC8uKik/JIgBASItCgRUeXBlEhQKEFRZUEVfVU5TUEVDSUZJRUQQABIPCgtUWVBFX09BVVRIMhABQg8KBmNvbmZpZxIFukgCCAEi0AUKEEF1dGhPQXV0aDJDbGllbnQSDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRI6CgtncmFudF90eXBlcxgDIAMoDjIlLnRhaWxvci52MS5BdXRoT0F1dGgyQ2xpZW50LkdyYW50VHlwZRIVCg1yZWRpcmVjdF91cmlzGAQgAygJEhYKCWNsaWVudF9pZBgFIAEoCUID4EEDEhoKDWNsaWVudF9zZWNyZXQYBiABKAlCA+BBAxIzCgpjcmVhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEkoKC2NsaWVudF90eXBlGAggASgOMiYudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQuQ2xpZW50VHlwZUINukgK2AEBggEEEAEgABJKChVhY2Nlc3NfdG9rZW5fbGlmZXRpbWUYCSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CELpIDaoBCiIECICjBTICCDwSSwoWcmVmcmVzaF90b2tlbl9saWZldGltZRgKIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkIQukgNqgEKIgQIgPUkMgIIPBIUCgxyZXF1aXJlX2Rwb3AYCyABKAgiaAoJR3JhbnRUeXBlEhoKFkdSQU5UX1RZUEVfVU5TUEVDSUZJRUQQABIhCh1HUkFOVF9UWVBFX0FVVEhPUklaQVRJT05fQ09ERRABEhwKGEdSQU5UX1RZUEVfUkVGUkVTSF9UT0tFThACIngKCkNsaWVudFR5cGUSGwoXQ0xJRU5UX1RZUEVfVU5TUEVDSUZJRUQQABIcChhDTElFTlRfVFlQRV9DT05GSURFTlRJQUwQARIWChJDTElFTlRfVFlQRV9QVUJMSUMQAhIXChNDTElFTlRfVFlQRV9CUk9XU0VSEAMitwEKF0NvbnRyb2xwbGFuZU1hY2hpbmVVc2VyEg8KAmlkGAEgASgJQgPgQQMSDAoEbmFtZRgCIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRIcCg9vcmdhbml6YXRpb25faWQYBCABKAlCA+BBAxIWCglmb2xkZXJfaWQYBSABKAlCA+BBAxIWCgljbGllbnRfaWQYBiABKAlCA+BBAxIaCg1jbGllbnRfc2VjcmV0GAcgASgJQgPgQQMqTgoIUEFUU2NvcGUSGQoVUEFUX1NDT1BFX1VOU1BFQ0lGSUVEEAASEgoOUEFUX1NDT1BFX1JFQUQQARITCg9QQVRfU0NPUEVfV1JJVEUQAmIGcHJvdG8z", [
|
|
480
481
|
file_buf_validate_validate,
|
|
481
482
|
file_google_api_field_behavior,
|
|
482
483
|
file_google_protobuf_duration,
|
|
@@ -576,7 +577,7 @@ const PATScope = /* @__PURE__ */ tsEnum(PATScopeSchema);
|
|
|
576
577
|
/**
|
|
577
578
|
* Describes the file tailor/v1/auth.proto.
|
|
578
579
|
*/
|
|
579
|
-
const file_tailor_v1_auth = /* @__PURE__ */ fileDesc("ChR0YWlsb3IvdjEvYXV0aC5wcm90bxIJdGFpbG9yLnYxInwKGENyZWF0ZUF1dGhTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIkkKGUNyZWF0ZUF1dGhTZXJ2aWNlUmVzcG9uc2USLAoMYXV0aF9zZXJ2aWNlGAEgASgLMhYudGFpbG9yLnYxLkF1dGhTZXJ2aWNlInwKGERlbGV0ZUF1dGhTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIhsKGURlbGV0ZUF1dGhTZXJ2aWNlUmVzcG9uc2UieQoVR2V0QXV0aFNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiRgoWR2V0QXV0aFNlcnZpY2VSZXNwb25zZRIsCgxhdXRoX3NlcnZpY2UYASABKAsyFi50YWlsb3IudjEuQXV0aFNlcnZpY2UikgEKF0xpc3RBdXRoU2VydmljZXNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ3ChhMaXN0QXV0aFNlcnZpY2VzUmVzcG9uc2USLQoNYXV0aF9zZXJ2aWNlcxgBIAMoCzIWLnRhaWxvci52MS5BdXRoU2VydmljZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMirAEKGkNyZWF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLAoKaWRwX2NvbmZpZxgDIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnIksKG0NyZWF0ZUF1dGhJRFBDb25maWdSZXNwb25zZRIsCgppZHBfY29uZmlnGAEgASgLMhgudGFpbG9yLnYxLkF1dGhJRFBDb25maWcirAEKGlVwZGF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLAoKaWRwX2NvbmZpZxgDIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnIksKG1VwZGF0ZUF1dGhJRFBDb25maWdSZXNwb25zZRIsCgppZHBfY29uZmlnGAEgASgLMhgudGFpbG9yLnYxLkF1dGhJRFBDb25maWcitgEKGkRlbGV0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIdChtEZWxldGVBdXRoSURQQ29uZmlnUmVzcG9uc2UiswEKF0dldEF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJIChhHZXRBdXRoSURQQ29uZmlnUmVzcG9uc2USLAoKaWRwX2NvbmZpZxgBIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnItYBChlMaXN0QXV0aElEUENvbmZpZ3NSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSEgoKcGFnZV90b2tlbhgDIAEoCRIRCglwYWdlX3NpemUYBCABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBSABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ5ChpMaXN0QXV0aElEUENvbmZpZ3NSZXNwb25zZRItCgtpZHBfY29uZmlncxgBIAMoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyLOAQoeQ3JlYXRlVXNlclByb2ZpbGVDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSSgocdXNlcl9wcm9maWxlX3Byb3ZpZGVyX2NvbmZpZxgDIAEoCzIkLnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnIm0KH0NyZWF0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2USSgocdXNlcl9wcm9maWxlX3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIkLnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnIs4BCh5VcGRhdGVVc2VyUHJvZmlsZUNvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAMgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcibQofVXBkYXRlVXNlclByb2ZpbGVDb25maWdSZXNwb25zZRJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAEgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWciggEKHkRlbGV0ZVVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIiEKH0RlbGV0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2UifwobR2V0VXNlclByb2ZpbGVDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiagocR2V0VXNlclByb2ZpbGVDb25maWdSZXNwb25zZRJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAEgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcixgEKGUNyZWF0ZVRlbmFudENvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJHChZ0ZW5hbnRfcHJvdmlkZXJfY29uZmlnGAMgASgLMh8udGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnQga6SAPIAQEiXQoaQ3JlYXRlVGVuYW50Q29uZmlnUmVzcG9uc2USPwoWdGVuYW50X3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIfLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZyLGAQoZVXBkYXRlVGVuYW50Q29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkcKFnRlbmFudF9wcm92aWRlcl9jb25maWcYAyABKAsyHy50YWlsb3IudjEuVGVuYW50UHJvdmlkZXJDb25maWdCBrpIA8gBASJdChpVcGRhdGVUZW5hbnRDb25maWdSZXNwb25zZRI/ChZ0ZW5hbnRfcHJvdmlkZXJfY29uZmlnGAEgASgLMh8udGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnIn0KGURlbGV0ZVRlbmFudENvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIcChpEZWxldGVUZW5hbnRDb25maWdSZXNwb25zZSJ6ChZHZXRUZW5hbnRDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiWgoXR2V0VGVuYW50Q29uZmlnUmVzcG9uc2USPwoWdGVuYW50X3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIfLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZyKSAQogQ3JlYXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QSNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI2CgZzY29wZXMYAiADKA4yEy50YWlsb3IudjEuUEFUU2NvcGVCEbpIDpIBCwgBIgeCAQQQASAAIjkKIUNyZWF0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXNwb25zZRIUCgxhY2Nlc3NfdG9rZW4YASABKAkiWgogRGVsZXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QSNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIjCiFEZWxldGVQZXJzb25hbEFjY2Vzc1Rva2VuUmVzcG9uc2UiegofTGlzdFBlcnNvbmFsQWNjZXNzVG9rZW5zUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIpABCiBMaXN0UGVyc29uYWxBY2Nlc3NUb2tlbnNSZXNwb25zZRI+ChZwZXJzb25hbF9hY2Nlc3NfdG9rZW5zGAEgAygLMh4udGFpbG9yLnYxLlBlcnNvbmFsQWNjZXNzVG9rZW4SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIqMDChxDcmVhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQwoOYXV0aF9uYW1lc3BhY2UYAiABKAlCK7pIKHImMiReKFthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0pPyQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIhCgphdHRyaWJ1dGVzGAQgAygJQg26SAqSAQciBXIDsAEBEnYKDWF0dHJpYnV0ZV9tYXAYBSADKAsyOS50YWlsb3IudjEuQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdC5BdHRyaWJ1dGVNYXBFbnRyeUIkukghmgEeIhxyGjIYXlthLXpdWzAtOWEtekEtWl17MCw2Mn0kGksKEUF0dHJpYnV0ZU1hcEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEiTQodQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyIqADChxVcGRhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoOYXV0aF9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIhCgphdHRyaWJ1dGVzGAQgAygJQg26SAqSAQciBXIDsAEBEnYKDWF0dHJpYnV0ZV9tYXAYBSADKAsyOS50YWlsb3IudjEuVXBkYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdC5BdHRyaWJ1dGVNYXBFbnRyeUIkukghmgEeIhxyGjIYXlthLXpdWzAtOWEtekEtWl17MCw2Mn0kGksKEUF0dHJpYnV0ZU1hcEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEiTQodVXBkYXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyIrgBChxEZWxldGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoOYXV0aF9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIfCh1EZWxldGVBdXRoTWFjaGluZVVzZXJSZXNwb25zZSK1AQoZR2V0QXV0aE1hY2hpbmVVc2VyUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDmF1dGhfbmFtZXNwYWNlGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiSgoaR2V0QXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyItgBChtMaXN0QXV0aE1hY2hpbmVVc2Vyc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5hdXRoX25hbWVzcGFjZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBISCgpwYWdlX3Rva2VuGAMgASgJEhEKCXBhZ2Vfc2l6ZRgEIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgFIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uInsKHExpc3RBdXRoTWFjaGluZVVzZXJzUmVzcG9uc2USLQoNbWFjaGluZV91c2VycxgBIAMoCzIWLnRhaWxvci52MS5NYWNoaW5lVXNlchIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMirwEKG0NyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEi4KC3NjaW1fY29uZmlnGAMgASgLMhkudGFpbG9yLnYxLkF1dGhTQ0lNQ29uZmlnIk4KHENyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2USLgoLc2NpbV9jb25maWcYASABKAsyGS50YWlsb3IudjEuQXV0aFNDSU1Db25maWcirwEKG1VwZGF0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEi4KC3NjaW1fY29uZmlnGAMgASgLMhkudGFpbG9yLnYxLkF1dGhTQ0lNQ29uZmlnIk4KHFVwZGF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2USLgoLc2NpbV9jb25maWcYASABKAsyGS50YWlsb3IudjEuQXV0aFNDSU1Db25maWcifAoYR2V0QXV0aFNDSU1Db25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiSwoZR2V0QXV0aFNDSU1Db25maWdSZXNwb25zZRIuCgtzY2ltX2NvbmZpZxgBIAEoCzIZLnRhaWxvci52MS5BdXRoU0NJTUNvbmZpZyJ/ChtEZWxldGVBdXRoU0NJTUNvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIeChxEZWxldGVBdXRoU0NJTUNvbmZpZ1Jlc3BvbnNlIrUBCh1DcmVhdGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKDXNjaW1fcmVzb3VyY2UYAyABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJUCh5DcmVhdGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2USMgoNc2NpbV9yZXNvdXJjZRgBIAEoCzIbLnRhaWxvci52MS5BdXRoU0NJTVJlc291cmNlIrUBCh1VcGRhdGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKDXNjaW1fcmVzb3VyY2UYAyABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJUCh5VcGRhdGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2USMgoNc2NpbV9yZXNvdXJjZRgBIAEoCzIbLnRhaWxvci52MS5BdXRoU0NJTVJlc291cmNlIo8BCh1EZWxldGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEgwKBG5hbWUYAyABKAkiIAoeRGVsZXRlQXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlIrYBChpHZXRBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiUQobR2V0QXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlEjIKDXNjaW1fcmVzb3VyY2UYASABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJ/ChtHZXRBdXRoU0NJTVJlc291cmNlc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJTChxHZXRBdXRoU0NJTVJlc291cmNlc1Jlc3BvbnNlEjMKDnNjaW1fcmVzb3VyY2VzGAEgAygLMhsudGFpbG9yLnYxLkF1dGhTQ0lNUmVzb3VyY2UidAobQ3JlYXRlQXV0aENvbm5lY3Rpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESNQoKY29ubmVjdGlvbhgCIAEoCzIZLnRhaWxvci52MS5BdXRoQ29ubmVjdGlvbkIGukgDyAEBIh4KHENyZWF0ZUF1dGhDb25uZWN0aW9uUmVzcG9uc2UilQEKGkxpc3RBdXRoQ29ubmVjdGlvbnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ7ChtMaXN0QXV0aENvbm5lY3Rpb25zUmVzcG9uc2USLgoLY29ubmVjdGlvbnMYASADKAsyGS50YWlsb3IudjEuQXV0aENvbm5lY3Rpb24SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIoABChtSZXZva2VBdXRoQ29ubmVjdGlvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJBCg9jb25uZWN0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiHgocUmV2b2tlQXV0aENvbm5lY3Rpb25SZXNwb25zZSLmAQokUmVnaXN0ZXJBdXRoQ29ubmVjdGlvblNlc3Npb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQQoPY29ubmVjdGlvbl9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhQKDGFjY2Vzc190b2tlbhgDIAEoCRIVCg1yZWZyZXNoX3Rva2VuGAQgASgJEi4KCmV4cGlyZXNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIicKJVJlZ2lzdGVyQXV0aENvbm5lY3Rpb25TZXNzaW9uUmVzcG9uc2Ui1wEKLkV4Y2hhbmdlQXV0aENvbm5lY3Rpb25BdXRob3JpemF0aW9uQ29kZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJBCg9jb25uZWN0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSIwoSYXV0aG9yaXphdGlvbl9jb2RlGAMgASgJQge6SARyAhABEh0KDHJlZGlyZWN0X3VyaRgEIAEoCUIHukgEcgIQASIxCi9FeGNoYW5nZUF1dGhDb25uZWN0aW9uQXV0aG9yaXphdGlvbkNvZGVSZXNwb25zZSKLAQodQ3JlYXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIWCg5uYW1lc3BhY2VfbmFtZRgCIAEoCRIyCg1vYXV0aDJfY2xpZW50GAMgASgLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQiVAoeQ3JlYXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlEjIKDW9hdXRoMl9jbGllbnQYASABKAsyGy50YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudCKLAQodVXBkYXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIWCg5uYW1lc3BhY2VfbmFtZRgCIAEoCRIyCg1vYXV0aDJfY2xpZW50GAMgASgLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQiVAoeVXBkYXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlEjIKDW9hdXRoMl9jbGllbnQYASABKAsyGy50YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudCJlCh1EZWxldGVBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhYKDm5hbWVzcGFjZV9uYW1lGAIgASgJEgwKBG5hbWUYAyABKAkiIAoeRGVsZXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlIrYBChpHZXRBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiUQobR2V0QXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlEjIKDW9hdXRoMl9jbGllbnQYASABKAsyGy50YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudCKvAQocTGlzdEF1dGhPQXV0aDJDbGllbnRzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhYKDm5hbWVzcGFjZV9uYW1lGAIgASgJEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24iggEKHUxpc3RBdXRoT0F1dGgyQ2xpZW50c1Jlc3BvbnNlEjMKDm9hdXRoMl9jbGllbnRzGAEgAygLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIrYBCiRDcmVhdGVDb250cm9scGxhbmVNYWNoaW5lVXNlclJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIeCglmb2xkZXJfaWQYAiABKAlCC7pICNgBAXIDsAEBEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSEwoLZGVzY3JpcHRpb24YBCABKAkiYQolQ3JlYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXNwb25zZRI4CgxtYWNoaW5lX3VzZXIYASABKAsyIi50YWlsb3IudjEuQ29udHJvbHBsYW5lTWFjaGluZVVzZXIi/AEKJFVwZGF0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEh4KCWZvbGRlcl9pZBgCIAEoCUILukgI2AEBcgOwAQESIQoPbWFjaGluZV91c2VyX2lkGAMgASgJQgi6SAVyA7ABARI7CgRuYW1lGAQgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kSACIAQESGAoLZGVzY3JpcHRpb24YBSABKAlIAYgBAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb24iYQolVXBkYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXNwb25zZRI4CgxtYWNoaW5lX3VzZXIYASABKAsyIi50YWlsb3IudjEuQ29udHJvbHBsYW5lTWFjaGluZVVzZXIiiQEKIUdldENvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEh4KCWZvbGRlcl9pZBgCIAEoCUILukgI2AEBcgOwAQESIQoPbWFjaGluZV91c2VyX2lkGAMgASgJQgi6SAVyA7ABASJeCiJHZXRDb250cm9scGxhbmVNYWNoaW5lVXNlclJlc3BvbnNlEjgKDG1hY2hpbmVfdXNlchgBIAEoCzIiLnRhaWxvci52MS5Db250cm9scGxhbmVNYWNoaW5lVXNlciLBAQojTGlzdENvbnRyb2xwbGFuZU1hY2hpbmVVc2Vyc1JlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIeCglmb2xkZXJfaWQYAiABKAlCC7pICNgBAXIDsAEBEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ijwEKJExpc3RDb250cm9scGxhbmVNYWNoaW5lVXNlcnNSZXNwb25zZRI5Cg1tYWNoaW5lX3VzZXJzGAEgAygLMiIudGFpbG9yLnYxLkNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKMAQokRGVsZXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESHgoJZm9sZGVyX2lkGAIgASgJQgu6SAjYAQFyA7ABARIhCg9tYWNoaW5lX3VzZXJfaWQYAyABKAlCCLpIBXIDsAEBIicKJURlbGV0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVzcG9uc2ViBnByb3RvMw", [
|
|
580
|
+
const file_tailor_v1_auth = /* @__PURE__ */ fileDesc("ChR0YWlsb3IvdjEvYXV0aC5wcm90bxIJdGFpbG9yLnYxIpwBChhDcmVhdGVBdXRoU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIeChZwdWJsaXNoX3Nlc3Npb25fZXZlbnRzGAMgASgIIkkKGUNyZWF0ZUF1dGhTZXJ2aWNlUmVzcG9uc2USLAoMYXV0aF9zZXJ2aWNlGAEgASgLMhYudGFpbG9yLnYxLkF1dGhTZXJ2aWNlIpwBChhVcGRhdGVBdXRoU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIeChZwdWJsaXNoX3Nlc3Npb25fZXZlbnRzGAMgASgIIkkKGVVwZGF0ZUF1dGhTZXJ2aWNlUmVzcG9uc2USLAoMYXV0aF9zZXJ2aWNlGAEgASgLMhYudGFpbG9yLnYxLkF1dGhTZXJ2aWNlInwKGERlbGV0ZUF1dGhTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIhsKGURlbGV0ZUF1dGhTZXJ2aWNlUmVzcG9uc2UieQoVR2V0QXV0aFNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiRgoWR2V0QXV0aFNlcnZpY2VSZXNwb25zZRIsCgxhdXRoX3NlcnZpY2UYASABKAsyFi50YWlsb3IudjEuQXV0aFNlcnZpY2UikgEKF0xpc3RBdXRoU2VydmljZXNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ3ChhMaXN0QXV0aFNlcnZpY2VzUmVzcG9uc2USLQoNYXV0aF9zZXJ2aWNlcxgBIAMoCzIWLnRhaWxvci52MS5BdXRoU2VydmljZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMirAEKGkNyZWF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLAoKaWRwX2NvbmZpZxgDIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnIksKG0NyZWF0ZUF1dGhJRFBDb25maWdSZXNwb25zZRIsCgppZHBfY29uZmlnGAEgASgLMhgudGFpbG9yLnYxLkF1dGhJRFBDb25maWcirAEKGlVwZGF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLAoKaWRwX2NvbmZpZxgDIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnIksKG1VwZGF0ZUF1dGhJRFBDb25maWdSZXNwb25zZRIsCgppZHBfY29uZmlnGAEgASgLMhgudGFpbG9yLnYxLkF1dGhJRFBDb25maWcitgEKGkRlbGV0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIdChtEZWxldGVBdXRoSURQQ29uZmlnUmVzcG9uc2UiswEKF0dldEF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJIChhHZXRBdXRoSURQQ29uZmlnUmVzcG9uc2USLAoKaWRwX2NvbmZpZxgBIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnItYBChlMaXN0QXV0aElEUENvbmZpZ3NSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSEgoKcGFnZV90b2tlbhgDIAEoCRIRCglwYWdlX3NpemUYBCABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBSABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ5ChpMaXN0QXV0aElEUENvbmZpZ3NSZXNwb25zZRItCgtpZHBfY29uZmlncxgBIAMoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyLOAQoeQ3JlYXRlVXNlclByb2ZpbGVDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSSgocdXNlcl9wcm9maWxlX3Byb3ZpZGVyX2NvbmZpZxgDIAEoCzIkLnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnIm0KH0NyZWF0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2USSgocdXNlcl9wcm9maWxlX3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIkLnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnIs4BCh5VcGRhdGVVc2VyUHJvZmlsZUNvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAMgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcibQofVXBkYXRlVXNlclByb2ZpbGVDb25maWdSZXNwb25zZRJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAEgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWciggEKHkRlbGV0ZVVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIiEKH0RlbGV0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2UifwobR2V0VXNlclByb2ZpbGVDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiagocR2V0VXNlclByb2ZpbGVDb25maWdSZXNwb25zZRJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAEgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcixgEKGUNyZWF0ZVRlbmFudENvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJHChZ0ZW5hbnRfcHJvdmlkZXJfY29uZmlnGAMgASgLMh8udGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnQga6SAPIAQEiXQoaQ3JlYXRlVGVuYW50Q29uZmlnUmVzcG9uc2USPwoWdGVuYW50X3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIfLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZyLGAQoZVXBkYXRlVGVuYW50Q29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkcKFnRlbmFudF9wcm92aWRlcl9jb25maWcYAyABKAsyHy50YWlsb3IudjEuVGVuYW50UHJvdmlkZXJDb25maWdCBrpIA8gBASJdChpVcGRhdGVUZW5hbnRDb25maWdSZXNwb25zZRI/ChZ0ZW5hbnRfcHJvdmlkZXJfY29uZmlnGAEgASgLMh8udGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnIn0KGURlbGV0ZVRlbmFudENvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIcChpEZWxldGVUZW5hbnRDb25maWdSZXNwb25zZSJ6ChZHZXRUZW5hbnRDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiWgoXR2V0VGVuYW50Q29uZmlnUmVzcG9uc2USPwoWdGVuYW50X3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIfLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZyKSAQogQ3JlYXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QSNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI2CgZzY29wZXMYAiADKA4yEy50YWlsb3IudjEuUEFUU2NvcGVCEbpIDpIBCwgBIgeCAQQQASAAIjkKIUNyZWF0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXNwb25zZRIUCgxhY2Nlc3NfdG9rZW4YASABKAkiWgogRGVsZXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QSNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIjCiFEZWxldGVQZXJzb25hbEFjY2Vzc1Rva2VuUmVzcG9uc2UiegofTGlzdFBlcnNvbmFsQWNjZXNzVG9rZW5zUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIpABCiBMaXN0UGVyc29uYWxBY2Nlc3NUb2tlbnNSZXNwb25zZRI+ChZwZXJzb25hbF9hY2Nlc3NfdG9rZW5zGAEgAygLMh4udGFpbG9yLnYxLlBlcnNvbmFsQWNjZXNzVG9rZW4SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIqMDChxDcmVhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQwoOYXV0aF9uYW1lc3BhY2UYAiABKAlCK7pIKHImMiReKFthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0pPyQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIhCgphdHRyaWJ1dGVzGAQgAygJQg26SAqSAQciBXIDsAEBEnYKDWF0dHJpYnV0ZV9tYXAYBSADKAsyOS50YWlsb3IudjEuQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdC5BdHRyaWJ1dGVNYXBFbnRyeUIkukghmgEeIhxyGjIYXlthLXpdWzAtOWEtekEtWl17MCw2Mn0kGksKEUF0dHJpYnV0ZU1hcEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEiTQodQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyIqADChxVcGRhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoOYXV0aF9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIhCgphdHRyaWJ1dGVzGAQgAygJQg26SAqSAQciBXIDsAEBEnYKDWF0dHJpYnV0ZV9tYXAYBSADKAsyOS50YWlsb3IudjEuVXBkYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdC5BdHRyaWJ1dGVNYXBFbnRyeUIkukghmgEeIhxyGjIYXlthLXpdWzAtOWEtekEtWl17MCw2Mn0kGksKEUF0dHJpYnV0ZU1hcEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEiTQodVXBkYXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyIrgBChxEZWxldGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoOYXV0aF9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIfCh1EZWxldGVBdXRoTWFjaGluZVVzZXJSZXNwb25zZSK1AQoZR2V0QXV0aE1hY2hpbmVVc2VyUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDmF1dGhfbmFtZXNwYWNlGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiSgoaR2V0QXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyItgBChtMaXN0QXV0aE1hY2hpbmVVc2Vyc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5hdXRoX25hbWVzcGFjZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBISCgpwYWdlX3Rva2VuGAMgASgJEhEKCXBhZ2Vfc2l6ZRgEIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgFIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uInsKHExpc3RBdXRoTWFjaGluZVVzZXJzUmVzcG9uc2USLQoNbWFjaGluZV91c2VycxgBIAMoCzIWLnRhaWxvci52MS5NYWNoaW5lVXNlchIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMirwEKG0NyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEi4KC3NjaW1fY29uZmlnGAMgASgLMhkudGFpbG9yLnYxLkF1dGhTQ0lNQ29uZmlnIk4KHENyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2USLgoLc2NpbV9jb25maWcYASABKAsyGS50YWlsb3IudjEuQXV0aFNDSU1Db25maWcirwEKG1VwZGF0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEi4KC3NjaW1fY29uZmlnGAMgASgLMhkudGFpbG9yLnYxLkF1dGhTQ0lNQ29uZmlnIk4KHFVwZGF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2USLgoLc2NpbV9jb25maWcYASABKAsyGS50YWlsb3IudjEuQXV0aFNDSU1Db25maWcifAoYR2V0QXV0aFNDSU1Db25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiSwoZR2V0QXV0aFNDSU1Db25maWdSZXNwb25zZRIuCgtzY2ltX2NvbmZpZxgBIAEoCzIZLnRhaWxvci52MS5BdXRoU0NJTUNvbmZpZyJ/ChtEZWxldGVBdXRoU0NJTUNvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIeChxEZWxldGVBdXRoU0NJTUNvbmZpZ1Jlc3BvbnNlIrUBCh1DcmVhdGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKDXNjaW1fcmVzb3VyY2UYAyABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJUCh5DcmVhdGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2USMgoNc2NpbV9yZXNvdXJjZRgBIAEoCzIbLnRhaWxvci52MS5BdXRoU0NJTVJlc291cmNlIrUBCh1VcGRhdGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKDXNjaW1fcmVzb3VyY2UYAyABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJUCh5VcGRhdGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2USMgoNc2NpbV9yZXNvdXJjZRgBIAEoCzIbLnRhaWxvci52MS5BdXRoU0NJTVJlc291cmNlIo8BCh1EZWxldGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEgwKBG5hbWUYAyABKAkiIAoeRGVsZXRlQXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlIrYBChpHZXRBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiUQobR2V0QXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlEjIKDXNjaW1fcmVzb3VyY2UYASABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJ/ChtHZXRBdXRoU0NJTVJlc291cmNlc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJTChxHZXRBdXRoU0NJTVJlc291cmNlc1Jlc3BvbnNlEjMKDnNjaW1fcmVzb3VyY2VzGAEgAygLMhsudGFpbG9yLnYxLkF1dGhTQ0lNUmVzb3VyY2UidAobQ3JlYXRlQXV0aENvbm5lY3Rpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESNQoKY29ubmVjdGlvbhgCIAEoCzIZLnRhaWxvci52MS5BdXRoQ29ubmVjdGlvbkIGukgDyAEBIh4KHENyZWF0ZUF1dGhDb25uZWN0aW9uUmVzcG9uc2UilQEKGkxpc3RBdXRoQ29ubmVjdGlvbnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ7ChtMaXN0QXV0aENvbm5lY3Rpb25zUmVzcG9uc2USLgoLY29ubmVjdGlvbnMYASADKAsyGS50YWlsb3IudjEuQXV0aENvbm5lY3Rpb24SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIoABChtSZXZva2VBdXRoQ29ubmVjdGlvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJBCg9jb25uZWN0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiHgocUmV2b2tlQXV0aENvbm5lY3Rpb25SZXNwb25zZSLmAQokUmVnaXN0ZXJBdXRoQ29ubmVjdGlvblNlc3Npb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQQoPY29ubmVjdGlvbl9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhQKDGFjY2Vzc190b2tlbhgDIAEoCRIVCg1yZWZyZXNoX3Rva2VuGAQgASgJEi4KCmV4cGlyZXNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIicKJVJlZ2lzdGVyQXV0aENvbm5lY3Rpb25TZXNzaW9uUmVzcG9uc2Ui1wEKLkV4Y2hhbmdlQXV0aENvbm5lY3Rpb25BdXRob3JpemF0aW9uQ29kZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJBCg9jb25uZWN0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSIwoSYXV0aG9yaXphdGlvbl9jb2RlGAMgASgJQge6SARyAhABEh0KDHJlZGlyZWN0X3VyaRgEIAEoCUIHukgEcgIQASIxCi9FeGNoYW5nZUF1dGhDb25uZWN0aW9uQXV0aG9yaXphdGlvbkNvZGVSZXNwb25zZSKLAQodQ3JlYXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIWCg5uYW1lc3BhY2VfbmFtZRgCIAEoCRIyCg1vYXV0aDJfY2xpZW50GAMgASgLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQiVAoeQ3JlYXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlEjIKDW9hdXRoMl9jbGllbnQYASABKAsyGy50YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudCKLAQodVXBkYXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIWCg5uYW1lc3BhY2VfbmFtZRgCIAEoCRIyCg1vYXV0aDJfY2xpZW50GAMgASgLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQiVAoeVXBkYXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlEjIKDW9hdXRoMl9jbGllbnQYASABKAsyGy50YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudCJlCh1EZWxldGVBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhYKDm5hbWVzcGFjZV9uYW1lGAIgASgJEgwKBG5hbWUYAyABKAkiIAoeRGVsZXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlIrYBChpHZXRBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiUQobR2V0QXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlEjIKDW9hdXRoMl9jbGllbnQYASABKAsyGy50YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudCKvAQocTGlzdEF1dGhPQXV0aDJDbGllbnRzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhYKDm5hbWVzcGFjZV9uYW1lGAIgASgJEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24iggEKHUxpc3RBdXRoT0F1dGgyQ2xpZW50c1Jlc3BvbnNlEjMKDm9hdXRoMl9jbGllbnRzGAEgAygLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIrYBCiRDcmVhdGVDb250cm9scGxhbmVNYWNoaW5lVXNlclJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIeCglmb2xkZXJfaWQYAiABKAlCC7pICNgBAXIDsAEBEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSEwoLZGVzY3JpcHRpb24YBCABKAkiYQolQ3JlYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXNwb25zZRI4CgxtYWNoaW5lX3VzZXIYASABKAsyIi50YWlsb3IudjEuQ29udHJvbHBsYW5lTWFjaGluZVVzZXIi/AEKJFVwZGF0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEh4KCWZvbGRlcl9pZBgCIAEoCUILukgI2AEBcgOwAQESIQoPbWFjaGluZV91c2VyX2lkGAMgASgJQgi6SAVyA7ABARI7CgRuYW1lGAQgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kSACIAQESGAoLZGVzY3JpcHRpb24YBSABKAlIAYgBAUIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb24iYQolVXBkYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXNwb25zZRI4CgxtYWNoaW5lX3VzZXIYASABKAsyIi50YWlsb3IudjEuQ29udHJvbHBsYW5lTWFjaGluZVVzZXIiiQEKIUdldENvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEh4KCWZvbGRlcl9pZBgCIAEoCUILukgI2AEBcgOwAQESIQoPbWFjaGluZV91c2VyX2lkGAMgASgJQgi6SAVyA7ABASJeCiJHZXRDb250cm9scGxhbmVNYWNoaW5lVXNlclJlc3BvbnNlEjgKDG1hY2hpbmVfdXNlchgBIAEoCzIiLnRhaWxvci52MS5Db250cm9scGxhbmVNYWNoaW5lVXNlciLBAQojTGlzdENvbnRyb2xwbGFuZU1hY2hpbmVVc2Vyc1JlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIeCglmb2xkZXJfaWQYAiABKAlCC7pICNgBAXIDsAEBEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ijwEKJExpc3RDb250cm9scGxhbmVNYWNoaW5lVXNlcnNSZXNwb25zZRI5Cg1tYWNoaW5lX3VzZXJzGAEgAygLMiIudGFpbG9yLnYxLkNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKMAQokRGVsZXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESHgoJZm9sZGVyX2lkGAIgASgJQgu6SAjYAQFyA7ABARIhCg9tYWNoaW5lX3VzZXJfaWQYAyABKAlCCLpIBXIDsAEBIicKJURlbGV0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVzcG9uc2ViBnByb3RvMw", [
|
|
580
581
|
file_buf_validate_validate,
|
|
581
582
|
file_google_protobuf_struct,
|
|
582
583
|
file_google_protobuf_timestamp,
|
|
@@ -944,7 +945,7 @@ const file_tailor_v1_workspace = /* @__PURE__ */ fileDesc("Chl0YWlsb3IvdjEvd29ya
|
|
|
944
945
|
/**
|
|
945
946
|
* Describes the file tailor/v1/service.proto.
|
|
946
947
|
*/
|
|
947
|
-
const file_tailor_v1_service = /* @__PURE__ */ fileDesc("Chd0YWlsb3IvdjEvc2VydmljZS5wcm90bxIJdGFpbG9yLnYxIg0KC1BpbmdSZXF1ZXN0Ig4KDFBpbmdSZXNwb25zZTKgswEKD09wZXJhdG9yU2VydmljZRI5CgRQaW5nEhYudGFpbG9yLnYxLlBpbmdSZXF1ZXN0GhcudGFpbG9yLnYxLlBpbmdSZXNwb25zZSIAEocBCh1MaXN0QXZhaWxhYmxlV29ya3NwYWNlUmVnaW9ucxIvLnRhaWxvci52MS5MaXN0QXZhaWxhYmxlV29ya3NwYWNlUmVnaW9uc1JlcXVlc3QaMC50YWlsb3IudjEuTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVJlZ2lvbnNSZXNwb25zZSIDkAIBEloKD0NyZWF0ZVdvcmtzcGFjZRIhLnRhaWxvci52MS5DcmVhdGVXb3Jrc3BhY2VSZXF1ZXN0GiIudGFpbG9yLnYxLkNyZWF0ZVdvcmtzcGFjZVJlc3BvbnNlIgASWgoPVXBkYXRlV29ya3NwYWNlEiEudGFpbG9yLnYxLlVwZGF0ZVdvcmtzcGFjZVJlcXVlc3QaIi50YWlsb3IudjEuVXBkYXRlV29ya3NwYWNlUmVzcG9uc2UiABJaCg9EZWxldGVXb3Jrc3BhY2USIS50YWlsb3IudjEuRGVsZXRlV29ya3NwYWNlUmVxdWVzdBoiLnRhaWxvci52MS5EZWxldGVXb3Jrc3BhY2VSZXNwb25zZSIAEloKDkxpc3RXb3Jrc3BhY2VzEiAudGFpbG9yLnYxLkxpc3RXb3Jrc3BhY2VzUmVxdWVzdBohLnRhaWxvci52MS5MaXN0V29ya3NwYWNlc1Jlc3BvbnNlIgOQAgESfgoaTGlzdE9yZ2FuaXphdGlvbldvcmtzcGFjZXMSLC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbldvcmtzcGFjZXNSZXF1ZXN0Gi0udGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25Xb3Jrc3BhY2VzUmVzcG9uc2UiA5ACARJdChBSZXN0b3JlV29ya3NwYWNlEiIudGFpbG9yLnYxLlJlc3RvcmVXb3Jrc3BhY2VSZXF1ZXN0GiMudGFpbG9yLnYxLlJlc3RvcmVXb3Jrc3BhY2VSZXNwb25zZSIAElQKDEdldFdvcmtzcGFjZRIeLnRhaWxvci52MS5HZXRXb3Jrc3BhY2VSZXF1ZXN0Gh8udGFpbG9yLnYxLkdldFdvcmtzcGFjZVJlc3BvbnNlIgOQAgESfgoaTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnMSLC50YWlsb3IudjEuTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnNSZXF1ZXN0Gi0udGFpbG9yLnYxLkxpc3RXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJzUmVzcG9uc2UiA5ACARKlAQonTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGVzEjkudGFpbG9yLnYxLkxpc3RBdmFpbGFibGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSb2xlc1JlcXVlc3QaOi50YWlsb3IudjEuTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGVzUmVzcG9uc2UiA5ACARJ+ChtJbnZpdGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXISLS50YWlsb3IudjEuSW52aXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVxdWVzdBouLnRhaWxvci52MS5JbnZpdGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXNwb25zZSIAEn4KG1JlbW92ZVdvcmtzcGFjZVBsYXRmb3JtVXNlchItLnRhaWxvci52MS5SZW1vdmVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXF1ZXN0Gi4udGFpbG9yLnYxLlJlbW92ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlc3BvbnNlIgASfgobVXBkYXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyEi0udGFpbG9yLnYxLlVwZGF0ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlcXVlc3QaLi50YWlsb3IudjEuVXBkYXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVzcG9uc2UiABJ4ChhHZXRXb3Jrc3BhY2VQbGF0Zm9ybVVzZXISKi50YWlsb3IudjEuR2V0V29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVxdWVzdBorLnRhaWxvci52MS5HZXRXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXNwb25zZSIDkAIBEmAKEEdldFdvcmtzcGFjZVJvbGUSIi50YWlsb3IudjEuR2V0V29ya3NwYWNlUm9sZVJlcXVlc3QaIy50YWlsb3IudjEuR2V0V29ya3NwYWNlUm9sZVJlc3BvbnNlIgOQAgESYwoSVXBkYXRlT3JnYW5pemF0aW9uEiQudGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblJlcXVlc3QaJS50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uUmVzcG9uc2UiABJdCg9HZXRPcmdhbml6YXRpb24SIS50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uUmVxdWVzdBoiLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25SZXNwb25zZSIDkAIBEmMKEUxpc3RPcmdhbml6YXRpb25zEiMudGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25zUmVxdWVzdBokLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uc1Jlc3BvbnNlIgOQAgESbwoVTGlzdFVzZXJPcmdhbml6YXRpb25zEicudGFpbG9yLnYxLkxpc3RVc2VyT3JnYW5pemF0aW9uc1JlcXVlc3QaKC50YWlsb3IudjEuTGlzdFVzZXJPcmdhbml6YXRpb25zUmVzcG9uc2UiA5ACARJyChdHcmFudE9yZ2FuaXphdGlvbkFjY2VzcxIpLnRhaWxvci52MS5HcmFudE9yZ2FuaXphdGlvbkFjY2Vzc1JlcXVlc3QaKi50YWlsb3IudjEuR3JhbnRPcmdhbml6YXRpb25BY2Nlc3NSZXNwb25zZSIAEnUKGFVwZGF0ZU9yZ2FuaXphdGlvbkFjY2VzcxIqLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0GisudGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIgASdQoYUmV2b2tlT3JnYW5pemF0aW9uQWNjZXNzEioudGFpbG9yLnYxLlJldm9rZU9yZ2FuaXphdGlvbkFjY2Vzc1JlcXVlc3QaKy50YWlsb3IudjEuUmV2b2tlT3JnYW5pemF0aW9uQWNjZXNzUmVzcG9uc2UiABJ4ChhMaXN0T3JnYW5pemF0aW9uQWNjZXNzZXMSKi50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkFjY2Vzc2VzUmVxdWVzdBorLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uQWNjZXNzZXNSZXNwb25zZSIDkAIBEm8KFUdldE9yZ2FuaXphdGlvbkFjY2VzcxInLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0GigudGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIgOQAgESdQoYQ3JlYXRlT3JnYW5pemF0aW9uRm9sZGVyEioudGFpbG9yLnYxLkNyZWF0ZU9yZ2FuaXphdGlvbkZvbGRlclJlcXVlc3QaKy50YWlsb3IudjEuQ3JlYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2UiABJ1ChhVcGRhdGVPcmdhbml6YXRpb25Gb2xkZXISKi50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVxdWVzdBorLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJSZXNwb25zZSIAEnUKGERlbGV0ZU9yZ2FuaXphdGlvbkZvbGRlchIqLnRhaWxvci52MS5EZWxldGVPcmdhbml6YXRpb25Gb2xkZXJSZXF1ZXN0GisudGFpbG9yLnYxLkRlbGV0ZU9yZ2FuaXphdGlvbkZvbGRlclJlc3BvbnNlIgASbwoVR2V0T3JnYW5pemF0aW9uRm9sZGVyEicudGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvbkZvbGRlclJlcXVlc3QaKC50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2UiA5ACARJ1ChdMaXN0T3JnYW5pemF0aW9uRm9sZGVycxIpLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uRm9sZGVyc1JlcXVlc3QaKi50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkZvbGRlcnNSZXNwb25zZSIDkAIBEoQBCh1HcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2VzcxIvLnRhaWxvci52MS5HcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1JlcXVlc3QaMC50YWlsb3IudjEuR3JhbnRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEocBCh5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSMC50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBoxLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEocBCh5SZXZva2VPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSMC50YWlsb3IudjEuUmV2b2tlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBoxLnRhaWxvci52MS5SZXZva2VPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEooBCh5MaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXMSMC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc2VzUmVxdWVzdBoxLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXNSZXNwb25zZSIDkAIBEoEBChtHZXRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSLS50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBouLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIDkAIBEm8KFkNyZWF0ZU9yZ2FuaXphdGlvblRlYW0SKC50YWlsb3IudjEuQ3JlYXRlT3JnYW5pemF0aW9uVGVhbVJlcXVlc3QaKS50YWlsb3IudjEuQ3JlYXRlT3JnYW5pemF0aW9uVGVhbVJlc3BvbnNlIgASbwoWVXBkYXRlT3JnYW5pemF0aW9uVGVhbRIoLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25UZWFtUmVxdWVzdBopLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25UZWFtUmVzcG9uc2UiABJvChZEZWxldGVPcmdhbml6YXRpb25UZWFtEigudGFpbG9yLnYxLkRlbGV0ZU9yZ2FuaXphdGlvblRlYW1SZXF1ZXN0GikudGFpbG9yLnYxLkRlbGV0ZU9yZ2FuaXphdGlvblRlYW1SZXNwb25zZSIAEmkKE0dldE9yZ2FuaXphdGlvblRlYW0SJS50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbVJlcXVlc3QaJi50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbVJlc3BvbnNlIgOQAgESbwoVTGlzdE9yZ2FuaXphdGlvblRlYW1zEicudGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25UZWFtc1JlcXVlc3QaKC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvblRlYW1zUmVzcG9uc2UiA5ACARJ4ChlBZGRPcmdhbml6YXRpb25UZWFtTWVtYmVyEisudGFpbG9yLnYxLkFkZE9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0GiwudGFpbG9yLnYxLkFkZE9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXNwb25zZSIAEoEBChxVcGRhdGVPcmdhbml6YXRpb25UZWFtTWVtYmVyEi4udGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0Gi8udGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXNwb25zZSIAEoEBChxSZW1vdmVPcmdhbml6YXRpb25UZWFtTWVtYmVyEi4udGFpbG9yLnYxLlJlbW92ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0Gi8udGFpbG9yLnYxLlJlbW92ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXNwb25zZSIAEoEBChtMaXN0T3JnYW5pemF0aW9uVGVhbU1lbWJlcnMSLS50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvblRlYW1NZW1iZXJzUmVxdWVzdBouLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uVGVhbU1lbWJlcnNSZXNwb25zZSIDkAIBEnsKGUdldE9yZ2FuaXphdGlvblRlYW1NZW1iZXISKy50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbU1lbWJlclJlcXVlc3QaLC50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbU1lbWJlclJlc3BvbnNlIgOQAgEScgoWR2V0UGxhdGZvcm1BY2NvdW50UGxhbhIoLnRhaWxvci52MS5HZXRQbGF0Zm9ybUFjY291bnRQbGFuUmVxdWVzdBopLnRhaWxvci52MS5HZXRQbGF0Zm9ybUFjY291bnRQbGFuUmVzcG9uc2UiA5ACARJgChFDcmVhdGVBcHBsaWNhdGlvbhIjLnRhaWxvci52MS5DcmVhdGVBcHBsaWNhdGlvblJlcXVlc3QaJC50YWlsb3IudjEuQ3JlYXRlQXBwbGljYXRpb25SZXNwb25zZSIAEmAKEVVwZGF0ZUFwcGxpY2F0aW9uEiMudGFpbG9yLnYxLlVwZGF0ZUFwcGxpY2F0aW9uUmVxdWVzdBokLnRhaWxvci52MS5VcGRhdGVBcHBsaWNhdGlvblJlc3BvbnNlIgASYAoRRGVsZXRlQXBwbGljYXRpb24SIy50YWlsb3IudjEuRGVsZXRlQXBwbGljYXRpb25SZXF1ZXN0GiQudGFpbG9yLnYxLkRlbGV0ZUFwcGxpY2F0aW9uUmVzcG9uc2UiABJgChBMaXN0QXBwbGljYXRpb25zEiIudGFpbG9yLnYxLkxpc3RBcHBsaWNhdGlvbnNSZXF1ZXN0GiMudGFpbG9yLnYxLkxpc3RBcHBsaWNhdGlvbnNSZXNwb25zZSIDkAIBEloKDkdldEFwcGxpY2F0aW9uEiAudGFpbG9yLnYxLkdldEFwcGxpY2F0aW9uUmVxdWVzdBohLnRhaWxvci52MS5HZXRBcHBsaWNhdGlvblJlc3BvbnNlIgOQAgESfgoaR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGgSLC50YWlsb3IudjEuR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGhSZXF1ZXN0Gi0udGFpbG9yLnYxLkdldEFwcGxpY2F0aW9uU2NoZW1hSGVhbHRoUmVzcG9uc2UiA5ACARJjChJDb21wb3NlVGFpbG9yREJTREwSJC50YWlsb3IudjEuQ29tcG9zZVRhaWxvckRCU0RMUmVxdWVzdBolLnRhaWxvci52MS5Db21wb3NlVGFpbG9yREJTRExSZXNwb25zZSIAEmwKFUNyZWF0ZVRhaWxvckRCU2VydmljZRInLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQlNlcnZpY2VSZXF1ZXN0GigudGFpbG9yLnYxLkNyZWF0ZVRhaWxvckRCU2VydmljZVJlc3BvbnNlIgASbAoVVXBkYXRlVGFpbG9yREJTZXJ2aWNlEicudGFpbG9yLnYxLlVwZGF0ZVRhaWxvckRCU2VydmljZVJlcXVlc3QaKC50YWlsb3IudjEuVXBkYXRlVGFpbG9yREJTZXJ2aWNlUmVzcG9uc2UiABJsChVEZWxldGVUYWlsb3JEQlNlcnZpY2USJy50YWlsb3IudjEuRGVsZXRlVGFpbG9yREJTZXJ2aWNlUmVxdWVzdBooLnRhaWxvci52MS5EZWxldGVUYWlsb3JEQlNlcnZpY2VSZXNwb25zZSIAEmYKEkdldFRhaWxvckRCU2VydmljZRIkLnRhaWxvci52MS5HZXRUYWlsb3JEQlNlcnZpY2VSZXF1ZXN0GiUudGFpbG9yLnYxLkdldFRhaWxvckRCU2VydmljZVJlc3BvbnNlIgOQAgESbAoUTGlzdFRhaWxvckRCU2VydmljZXMSJi50YWlsb3IudjEuTGlzdFRhaWxvckRCU2VydmljZXNSZXF1ZXN0GicudGFpbG9yLnYxLkxpc3RUYWlsb3JEQlNlcnZpY2VzUmVzcG9uc2UiA5ACARJjChJDcmVhdGVUYWlsb3JEQlR5cGUSJC50YWlsb3IudjEuQ3JlYXRlVGFpbG9yREJUeXBlUmVxdWVzdBolLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQlR5cGVSZXNwb25zZSIAEmMKElVwZGF0ZVRhaWxvckRCVHlwZRIkLnRhaWxvci52MS5VcGRhdGVUYWlsb3JEQlR5cGVSZXF1ZXN0GiUudGFpbG9yLnYxLlVwZGF0ZVRhaWxvckRCVHlwZVJlc3BvbnNlIgASYwoSRGVsZXRlVGFpbG9yREJUeXBlEiQudGFpbG9yLnYxLkRlbGV0ZVRhaWxvckRCVHlwZVJlcXVlc3QaJS50YWlsb3IudjEuRGVsZXRlVGFpbG9yREJUeXBlUmVzcG9uc2UiABJsChVUcnVuY2F0ZVRhaWxvckRCVHlwZXMSJy50YWlsb3IudjEuVHJ1bmNhdGVUYWlsb3JEQlR5cGVzUmVxdWVzdBooLnRhaWxvci52MS5UcnVuY2F0ZVRhaWxvckRCVHlwZXNSZXNwb25zZSIAEmkKFFRydW5jYXRlVGFpbG9yREJUeXBlEiYudGFpbG9yLnYxLlRydW5jYXRlVGFpbG9yREJUeXBlUmVxdWVzdBonLnRhaWxvci52MS5UcnVuY2F0ZVRhaWxvckRCVHlwZVJlc3BvbnNlIgASYwoRTGlzdFRhaWxvckRCVHlwZXMSIy50YWlsb3IudjEuTGlzdFRhaWxvckRCVHlwZXNSZXF1ZXN0GiQudGFpbG9yLnYxLkxpc3RUYWlsb3JEQlR5cGVzUmVzcG9uc2UiA5ACARJdCg9HZXRUYWlsb3JEQlR5cGUSIS50YWlsb3IudjEuR2V0VGFpbG9yREJUeXBlUmVxdWVzdBoiLnRhaWxvci52MS5HZXRUYWlsb3JEQlR5cGVSZXNwb25zZSIDkAIBEn4KG0NyZWF0ZVRhaWxvckRCR1FMUGVybWlzc2lvbhItLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXF1ZXN0Gi4udGFpbG9yLnYxLkNyZWF0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlIgASeAoYR2V0VGFpbG9yREJHUUxQZXJtaXNzaW9uEioudGFpbG9yLnYxLkdldFRhaWxvckRCR1FMUGVybWlzc2lvblJlcXVlc3QaKy50YWlsb3IudjEuR2V0VGFpbG9yREJHUUxQZXJtaXNzaW9uUmVzcG9uc2UiA5ACARJ+ChpMaXN0VGFpbG9yREJHUUxQZXJtaXNzaW9ucxIsLnRhaWxvci52MS5MaXN0VGFpbG9yREJHUUxQZXJtaXNzaW9uc1JlcXVlc3QaLS50YWlsb3IudjEuTGlzdFRhaWxvckRCR1FMUGVybWlzc2lvbnNSZXNwb25zZSIDkAIBEn4KG1VwZGF0ZVRhaWxvckRCR1FMUGVybWlzc2lvbhItLnRhaWxvci52MS5VcGRhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXF1ZXN0Gi4udGFpbG9yLnYxLlVwZGF0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlIgASfgobRGVsZXRlVGFpbG9yREJHUUxQZXJtaXNzaW9uEi0udGFpbG9yLnYxLkRlbGV0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlcXVlc3QaLi50YWlsb3IudjEuRGVsZXRlVGFpbG9yREJHUUxQZXJtaXNzaW9uUmVzcG9uc2UiABJsChVDcmVhdGVQaXBlbGluZVNlcnZpY2USJy50YWlsb3IudjEuQ3JlYXRlUGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBooLnRhaWxvci52MS5DcmVhdGVQaXBlbGluZVNlcnZpY2VSZXNwb25zZSIAEmwKFVVwZGF0ZVBpcGVsaW5lU2VydmljZRInLnRhaWxvci52MS5VcGRhdGVQaXBlbGluZVNlcnZpY2VSZXF1ZXN0GigudGFpbG9yLnYxLlVwZGF0ZVBpcGVsaW5lU2VydmljZVJlc3BvbnNlIgASbAoVRGVsZXRlUGlwZWxpbmVTZXJ2aWNlEicudGFpbG9yLnYxLkRlbGV0ZVBpcGVsaW5lU2VydmljZVJlcXVlc3QaKC50YWlsb3IudjEuRGVsZXRlUGlwZWxpbmVTZXJ2aWNlUmVzcG9uc2UiABJmChJHZXRQaXBlbGluZVNlcnZpY2USJC50YWlsb3IudjEuR2V0UGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBolLnRhaWxvci52MS5HZXRQaXBlbGluZVNlcnZpY2VSZXNwb25zZSIDkAIBEmwKFExpc3RQaXBlbGluZVNlcnZpY2VzEiYudGFpbG9yLnYxLkxpc3RQaXBlbGluZVNlcnZpY2VzUmVxdWVzdBonLnRhaWxvci52MS5MaXN0UGlwZWxpbmVTZXJ2aWNlc1Jlc3BvbnNlIgOQAgESaQoTR2V0UGlwZWxpbmVSZXNvbHZlchIlLnRhaWxvci52MS5HZXRQaXBlbGluZVJlc29sdmVyUmVxdWVzdBomLnRhaWxvci52MS5HZXRQaXBlbGluZVJlc29sdmVyUmVzcG9uc2UiA5ACARJvChVMaXN0UGlwZWxpbmVSZXNvbHZlcnMSJy50YWlsb3IudjEuTGlzdFBpcGVsaW5lUmVzb2x2ZXJzUmVxdWVzdBooLnRhaWxvci52MS5MaXN0UGlwZWxpbmVSZXNvbHZlcnNSZXNwb25zZSIDkAIBEm8KFkNyZWF0ZVBpcGVsaW5lUmVzb2x2ZXISKC50YWlsb3IudjEuQ3JlYXRlUGlwZWxpbmVSZXNvbHZlclJlcXVlc3QaKS50YWlsb3IudjEuQ3JlYXRlUGlwZWxpbmVSZXNvbHZlclJlc3BvbnNlIgASbwoWVXBkYXRlUGlwZWxpbmVSZXNvbHZlchIoLnRhaWxvci52MS5VcGRhdGVQaXBlbGluZVJlc29sdmVyUmVxdWVzdBopLnRhaWxvci52MS5VcGRhdGVQaXBlbGluZVJlc29sdmVyUmVzcG9uc2UiABJvChZEZWxldGVQaXBlbGluZVJlc29sdmVyEigudGFpbG9yLnYxLkRlbGV0ZVBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0GikudGFpbG9yLnYxLkRlbGV0ZVBpcGVsaW5lUmVzb2x2ZXJSZXNwb25zZSIAEmMKEkNvbXBvc2VQaXBlbGluZVNETBIkLnRhaWxvci52MS5Db21wb3NlUGlwZWxpbmVTRExSZXF1ZXN0GiUudGFpbG9yLnYxLkNvbXBvc2VQaXBlbGluZVNETFJlc3BvbnNlIgASnAEKJExpc3RQaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0cxI2LnRhaWxvci52MS5MaXN0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdHNSZXF1ZXN0GjcudGFpbG9yLnYxLkxpc3RQaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0c1Jlc3BvbnNlIgOQAgESlgEKIkdldFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHQSNC50YWlsb3IudjEuR2V0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdFJlcXVlc3QaNS50YWlsb3IudjEuR2V0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdFJlc3BvbnNlIgOQAgEScgoXUmVzdGFydFBpcGVsaW5lUmVzb2x2ZXISKS50YWlsb3IudjEuUmVzdGFydFBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0GioudGFpbG9yLnYxLlJlc3RhcnRQaXBlbGluZVJlc29sdmVyUmVzcG9uc2UiABJvChZDcmVhdGVTdGF0ZWZsb3dTZXJ2aWNlEigudGFpbG9yLnYxLkNyZWF0ZVN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0GikudGFpbG9yLnYxLkNyZWF0ZVN0YXRlZmxvd1NlcnZpY2VSZXNwb25zZSIAEm8KFlVwZGF0ZVN0YXRlZmxvd1NlcnZpY2USKC50YWlsb3IudjEuVXBkYXRlU3RhdGVmbG93U2VydmljZVJlcXVlc3QaKS50YWlsb3IudjEuVXBkYXRlU3RhdGVmbG93U2VydmljZVJlc3BvbnNlIgASbwoWRGVsZXRlU3RhdGVmbG93U2VydmljZRIoLnRhaWxvci52MS5EZWxldGVTdGF0ZWZsb3dTZXJ2aWNlUmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVTdGF0ZWZsb3dTZXJ2aWNlUmVzcG9uc2UiABJpChNHZXRTdGF0ZWZsb3dTZXJ2aWNlEiUudGFpbG9yLnYxLkdldFN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0GiYudGFpbG9yLnYxLkdldFN0YXRlZmxvd1NlcnZpY2VSZXNwb25zZSIDkAIBEm8KFUxpc3RTdGF0ZWZsb3dTZXJ2aWNlcxInLnRhaWxvci52MS5MaXN0U3RhdGVmbG93U2VydmljZXNSZXF1ZXN0GigudGFpbG9yLnYxLkxpc3RTdGF0ZWZsb3dTZXJ2aWNlc1Jlc3BvbnNlIgOQAgESbwoWQ3JlYXRlRXhlY3V0b3JFeGVjdXRvchIoLnRhaWxvci52MS5DcmVhdGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBopLnRhaWxvci52MS5DcmVhdGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2UiABJvChZVcGRhdGVFeGVjdXRvckV4ZWN1dG9yEigudGFpbG9yLnYxLlVwZGF0ZUV4ZWN1dG9yRXhlY3V0b3JSZXF1ZXN0GikudGFpbG9yLnYxLlVwZGF0ZUV4ZWN1dG9yRXhlY3V0b3JSZXNwb25zZSIAEmkKE0dldEV4ZWN1dG9yRXhlY3V0b3ISJS50YWlsb3IudjEuR2V0RXhlY3V0b3JFeGVjdXRvclJlcXVlc3QaJi50YWlsb3IudjEuR2V0RXhlY3V0b3JFeGVjdXRvclJlc3BvbnNlIgOQAgESbwoWRGVsZXRlRXhlY3V0b3JFeGVjdXRvchIoLnRhaWxvci52MS5EZWxldGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2UiABJvChVMaXN0RXhlY3V0b3JFeGVjdXRvcnMSJy50YWlsb3IudjEuTGlzdEV4ZWN1dG9yRXhlY3V0b3JzUmVxdWVzdBooLnRhaWxvci52MS5MaXN0RXhlY3V0b3JFeGVjdXRvcnNSZXNwb25zZSIDkAIBEloKDkdldEV4ZWN1dG9ySm9iEiAudGFpbG9yLnYxLkdldEV4ZWN1dG9ySm9iUmVxdWVzdBohLnRhaWxvci52MS5HZXRFeGVjdXRvckpvYlJlc3BvbnNlIgOQAgESYAoQTGlzdEV4ZWN1dG9ySm9icxIiLnRhaWxvci52MS5MaXN0RXhlY3V0b3JKb2JzUmVxdWVzdBojLnRhaWxvci52MS5MaXN0RXhlY3V0b3JKb2JzUmVzcG9uc2UiA5ACARJ1ChdMaXN0RXhlY3V0b3JKb2JBdHRlbXB0cxIpLnRhaWxvci52MS5MaXN0RXhlY3V0b3JKb2JBdHRlbXB0c1JlcXVlc3QaKi50YWlsb3IudjEuTGlzdEV4ZWN1dG9ySm9iQXR0ZW1wdHNSZXNwb25zZSIDkAIBEoQBChxMaXN0RXhlY3V0b3JJbmNvbWluZ1dlYmhvb2tzEi4udGFpbG9yLnYxLkxpc3RFeGVjdXRvckluY29taW5nV2ViaG9va3NSZXF1ZXN0Gi8udGFpbG9yLnYxLkxpc3RFeGVjdXRvckluY29taW5nV2ViaG9va3NSZXNwb25zZSIDkAIBEn4KGkdldEV4ZWN1dG9ySW5jb21pbmdXZWJob29rEiwudGFpbG9yLnYxLkdldEV4ZWN1dG9ySW5jb21pbmdXZWJob29rUmVxdWVzdBotLnRhaWxvci52MS5HZXRFeGVjdXRvckluY29taW5nV2ViaG9va1Jlc3BvbnNlIgOQAgESWgoPVHJpZ2dlckV4ZWN1dG9yEiEudGFpbG9yLnYxLlRyaWdnZXJFeGVjdXRvclJlcXVlc3QaIi50YWlsb3IudjEuVHJpZ2dlckV4ZWN1dG9yUmVzcG9uc2UiABJ1ChhDcmVhdGVTZWNyZXRNYW5hZ2VyVmF1bHQSKi50YWlsb3IudjEuQ3JlYXRlU2VjcmV0TWFuYWdlclZhdWx0UmVxdWVzdBorLnRhaWxvci52MS5DcmVhdGVTZWNyZXRNYW5hZ2VyVmF1bHRSZXNwb25zZSIAEm8KFUdldFNlY3JldE1hbmFnZXJWYXVsdBInLnRhaWxvci52MS5HZXRTZWNyZXRNYW5hZ2VyVmF1bHRSZXF1ZXN0GigudGFpbG9yLnYxLkdldFNlY3JldE1hbmFnZXJWYXVsdFJlc3BvbnNlIgOQAgESdQoYRGVsZXRlU2VjcmV0TWFuYWdlclZhdWx0EioudGFpbG9yLnYxLkRlbGV0ZVNlY3JldE1hbmFnZXJWYXVsdFJlcXVlc3QaKy50YWlsb3IudjEuRGVsZXRlU2VjcmV0TWFuYWdlclZhdWx0UmVzcG9uc2UiABJ1ChdMaXN0U2VjcmV0TWFuYWdlclZhdWx0cxIpLnRhaWxvci52MS5MaXN0U2VjcmV0TWFuYWdlclZhdWx0c1JlcXVlc3QaKi50YWlsb3IudjEuTGlzdFNlY3JldE1hbmFnZXJWYXVsdHNSZXNwb25zZSIDkAIBEngKGUNyZWF0ZVNlY3JldE1hbmFnZXJTZWNyZXQSKy50YWlsb3IudjEuQ3JlYXRlU2VjcmV0TWFuYWdlclNlY3JldFJlcXVlc3QaLC50YWlsb3IudjEuQ3JlYXRlU2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlIgASeAoZVXBkYXRlU2VjcmV0TWFuYWdlclNlY3JldBIrLnRhaWxvci52MS5VcGRhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVxdWVzdBosLnRhaWxvci52MS5VcGRhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVzcG9uc2UiABJyChZHZXRTZWNyZXRNYW5hZ2VyU2VjcmV0EigudGFpbG9yLnYxLkdldFNlY3JldE1hbmFnZXJTZWNyZXRSZXF1ZXN0GikudGFpbG9yLnYxLkdldFNlY3JldE1hbmFnZXJTZWNyZXRSZXNwb25zZSIDkAIBEngKGURlbGV0ZVNlY3JldE1hbmFnZXJTZWNyZXQSKy50YWlsb3IudjEuRGVsZXRlU2VjcmV0TWFuYWdlclNlY3JldFJlcXVlc3QaLC50YWlsb3IudjEuRGVsZXRlU2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlIgASeAoYTGlzdFNlY3JldE1hbmFnZXJTZWNyZXRzEioudGFpbG9yLnYxLkxpc3RTZWNyZXRNYW5hZ2VyU2VjcmV0c1JlcXVlc3QaKy50YWlsb3IudjEuTGlzdFNlY3JldE1hbmFnZXJTZWNyZXRzUmVzcG9uc2UiA5ACARJgChFDcmVhdGVBdXRoU2VydmljZRIjLnRhaWxvci52MS5DcmVhdGVBdXRoU2VydmljZVJlcXVlc3QaJC50YWlsb3IudjEuQ3JlYXRlQXV0aFNlcnZpY2VSZXNwb25zZSIAEmAKEURlbGV0ZUF1dGhTZXJ2aWNlEiMudGFpbG9yLnYxLkRlbGV0ZUF1dGhTZXJ2aWNlUmVxdWVzdBokLnRhaWxvci52MS5EZWxldGVBdXRoU2VydmljZVJlc3BvbnNlIgASWgoOR2V0QXV0aFNlcnZpY2USIC50YWlsb3IudjEuR2V0QXV0aFNlcnZpY2VSZXF1ZXN0GiEudGFpbG9yLnYxLkdldEF1dGhTZXJ2aWNlUmVzcG9uc2UiA5ACARJgChBMaXN0QXV0aFNlcnZpY2VzEiIudGFpbG9yLnYxLkxpc3RBdXRoU2VydmljZXNSZXF1ZXN0GiMudGFpbG9yLnYxLkxpc3RBdXRoU2VydmljZXNSZXNwb25zZSIDkAIBEmYKE0NyZWF0ZUF1dGhJRFBDb25maWcSJS50YWlsb3IudjEuQ3JlYXRlQXV0aElEUENvbmZpZ1JlcXVlc3QaJi50YWlsb3IudjEuQ3JlYXRlQXV0aElEUENvbmZpZ1Jlc3BvbnNlIgASZgoTVXBkYXRlQXV0aElEUENvbmZpZxIlLnRhaWxvci52MS5VcGRhdGVBdXRoSURQQ29uZmlnUmVxdWVzdBomLnRhaWxvci52MS5VcGRhdGVBdXRoSURQQ29uZmlnUmVzcG9uc2UiABJmChNEZWxldGVBdXRoSURQQ29uZmlnEiUudGFpbG9yLnYxLkRlbGV0ZUF1dGhJRFBDb25maWdSZXF1ZXN0GiYudGFpbG9yLnYxLkRlbGV0ZUF1dGhJRFBDb25maWdSZXNwb25zZSIAEmAKEEdldEF1dGhJRFBDb25maWcSIi50YWlsb3IudjEuR2V0QXV0aElEUENvbmZpZ1JlcXVlc3QaIy50YWlsb3IudjEuR2V0QXV0aElEUENvbmZpZ1Jlc3BvbnNlIgOQAgESZgoSTGlzdEF1dGhJRFBDb25maWdzEiQudGFpbG9yLnYxLkxpc3RBdXRoSURQQ29uZmlnc1JlcXVlc3QaJS50YWlsb3IudjEuTGlzdEF1dGhJRFBDb25maWdzUmVzcG9uc2UiA5ACARJyChdDcmVhdGVVc2VyUHJvZmlsZUNvbmZpZxIpLnRhaWxvci52MS5DcmVhdGVVc2VyUHJvZmlsZUNvbmZpZ1JlcXVlc3QaKi50YWlsb3IudjEuQ3JlYXRlVXNlclByb2ZpbGVDb25maWdSZXNwb25zZSIAEnIKF1VwZGF0ZVVzZXJQcm9maWxlQ29uZmlnEikudGFpbG9yLnYxLlVwZGF0ZVVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBoqLnRhaWxvci52MS5VcGRhdGVVc2VyUHJvZmlsZUNvbmZpZ1Jlc3BvbnNlIgAScgoXRGVsZXRlVXNlclByb2ZpbGVDb25maWcSKS50YWlsb3IudjEuRGVsZXRlVXNlclByb2ZpbGVDb25maWdSZXF1ZXN0GioudGFpbG9yLnYxLkRlbGV0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2UiABJsChRHZXRVc2VyUHJvZmlsZUNvbmZpZxImLnRhaWxvci52MS5HZXRVc2VyUHJvZmlsZUNvbmZpZ1JlcXVlc3QaJy50YWlsb3IudjEuR2V0VXNlclByb2ZpbGVDb25maWdSZXNwb25zZSIDkAIBEmMKEkNyZWF0ZVRlbmFudENvbmZpZxIkLnRhaWxvci52MS5DcmVhdGVUZW5hbnRDb25maWdSZXF1ZXN0GiUudGFpbG9yLnYxLkNyZWF0ZVRlbmFudENvbmZpZ1Jlc3BvbnNlIgASYwoSVXBkYXRlVGVuYW50Q29uZmlnEiQudGFpbG9yLnYxLlVwZGF0ZVRlbmFudENvbmZpZ1JlcXVlc3QaJS50YWlsb3IudjEuVXBkYXRlVGVuYW50Q29uZmlnUmVzcG9uc2UiABJjChJEZWxldGVUZW5hbnRDb25maWcSJC50YWlsb3IudjEuRGVsZXRlVGVuYW50Q29uZmlnUmVxdWVzdBolLnRhaWxvci52MS5EZWxldGVUZW5hbnRDb25maWdSZXNwb25zZSIAEl0KD0dldFRlbmFudENvbmZpZxIhLnRhaWxvci52MS5HZXRUZW5hbnRDb25maWdSZXF1ZXN0GiIudGFpbG9yLnYxLkdldFRlbmFudENvbmZpZ1Jlc3BvbnNlIgOQAgESeAoZQ3JlYXRlUGVyc29uYWxBY2Nlc3NUb2tlbhIrLnRhaWxvci52MS5DcmVhdGVQZXJzb25hbEFjY2Vzc1Rva2VuUmVxdWVzdBosLnRhaWxvci52MS5DcmVhdGVQZXJzb25hbEFjY2Vzc1Rva2VuUmVzcG9uc2UiABJ4ChlEZWxldGVQZXJzb25hbEFjY2Vzc1Rva2VuEisudGFpbG9yLnYxLkRlbGV0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXF1ZXN0GiwudGFpbG9yLnYxLkRlbGV0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXNwb25zZSIAEngKGExpc3RQZXJzb25hbEFjY2Vzc1Rva2VucxIqLnRhaWxvci52MS5MaXN0UGVyc29uYWxBY2Nlc3NUb2tlbnNSZXF1ZXN0GisudGFpbG9yLnYxLkxpc3RQZXJzb25hbEFjY2Vzc1Rva2Vuc1Jlc3BvbnNlIgOQAgESbAoVQ3JlYXRlQXV0aE1hY2hpbmVVc2VyEicudGFpbG9yLnYxLkNyZWF0ZUF1dGhNYWNoaW5lVXNlclJlcXVlc3QaKC50YWlsb3IudjEuQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2UiABJsChVVcGRhdGVBdXRoTWFjaGluZVVzZXISJy50YWlsb3IudjEuVXBkYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdBooLnRhaWxvci52MS5VcGRhdGVBdXRoTWFjaGluZVVzZXJSZXNwb25zZSIAEmwKFURlbGV0ZUF1dGhNYWNoaW5lVXNlchInLnRhaWxvci52MS5EZWxldGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0GigudGFpbG9yLnYxLkRlbGV0ZUF1dGhNYWNoaW5lVXNlclJlc3BvbnNlIgASZgoSR2V0QXV0aE1hY2hpbmVVc2VyEiQudGFpbG9yLnYxLkdldEF1dGhNYWNoaW5lVXNlclJlcXVlc3QaJS50YWlsb3IudjEuR2V0QXV0aE1hY2hpbmVVc2VyUmVzcG9uc2UiA5ACARJsChRMaXN0QXV0aE1hY2hpbmVVc2VycxImLnRhaWxvci52MS5MaXN0QXV0aE1hY2hpbmVVc2Vyc1JlcXVlc3QaJy50YWlsb3IudjEuTGlzdEF1dGhNYWNoaW5lVXNlcnNSZXNwb25zZSIDkAIBEmkKFENyZWF0ZUF1dGhTQ0lNQ29uZmlnEiYudGFpbG9yLnYxLkNyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBonLnRhaWxvci52MS5DcmVhdGVBdXRoU0NJTUNvbmZpZ1Jlc3BvbnNlIgASaQoUVXBkYXRlQXV0aFNDSU1Db25maWcSJi50YWlsb3IudjEuVXBkYXRlQXV0aFNDSU1Db25maWdSZXF1ZXN0GicudGFpbG9yLnYxLlVwZGF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2UiABJpChREZWxldGVBdXRoU0NJTUNvbmZpZxImLnRhaWxvci52MS5EZWxldGVBdXRoU0NJTUNvbmZpZ1JlcXVlc3QaJy50YWlsb3IudjEuRGVsZXRlQXV0aFNDSU1Db25maWdSZXNwb25zZSIAEmMKEUdldEF1dGhTQ0lNQ29uZmlnEiMudGFpbG9yLnYxLkdldEF1dGhTQ0lNQ29uZmlnUmVxdWVzdBokLnRhaWxvci52MS5HZXRBdXRoU0NJTUNvbmZpZ1Jlc3BvbnNlIgOQAgESbwoWQ3JlYXRlQXV0aFNDSU1SZXNvdXJjZRIoLnRhaWxvci52MS5DcmVhdGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBopLnRhaWxvci52MS5DcmVhdGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2UiABJvChZVcGRhdGVBdXRoU0NJTVJlc291cmNlEigudGFpbG9yLnYxLlVwZGF0ZUF1dGhTQ0lNUmVzb3VyY2VSZXF1ZXN0GikudGFpbG9yLnYxLlVwZGF0ZUF1dGhTQ0lNUmVzb3VyY2VSZXNwb25zZSIAEm8KFkRlbGV0ZUF1dGhTQ0lNUmVzb3VyY2USKC50YWlsb3IudjEuRGVsZXRlQXV0aFNDSU1SZXNvdXJjZVJlcXVlc3QaKS50YWlsb3IudjEuRGVsZXRlQXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlIgASaQoTR2V0QXV0aFNDSU1SZXNvdXJjZRIlLnRhaWxvci52MS5HZXRBdXRoU0NJTVJlc291cmNlUmVxdWVzdBomLnRhaWxvci52MS5HZXRBdXRoU0NJTVJlc291cmNlUmVzcG9uc2UiA5ACARJsChRHZXRBdXRoU0NJTVJlc291cmNlcxImLnRhaWxvci52MS5HZXRBdXRoU0NJTVJlc291cmNlc1JlcXVlc3QaJy50YWlsb3IudjEuR2V0QXV0aFNDSU1SZXNvdXJjZXNSZXNwb25zZSIDkAIBEmkKFENyZWF0ZUF1dGhDb25uZWN0aW9uEiYudGFpbG9yLnYxLkNyZWF0ZUF1dGhDb25uZWN0aW9uUmVxdWVzdBonLnRhaWxvci52MS5DcmVhdGVBdXRoQ29ubmVjdGlvblJlc3BvbnNlIgASaQoTTGlzdEF1dGhDb25uZWN0aW9ucxIlLnRhaWxvci52MS5MaXN0QXV0aENvbm5lY3Rpb25zUmVxdWVzdBomLnRhaWxvci52MS5MaXN0QXV0aENvbm5lY3Rpb25zUmVzcG9uc2UiA5ACARJpChRSZXZva2VBdXRoQ29ubmVjdGlvbhImLnRhaWxvci52MS5SZXZva2VBdXRoQ29ubmVjdGlvblJlcXVlc3QaJy50YWlsb3IudjEuUmV2b2tlQXV0aENvbm5lY3Rpb25SZXNwb25zZSIAEoQBCh1SZWdpc3RlckF1dGhDb25uZWN0aW9uU2Vzc2lvbhIvLnRhaWxvci52MS5SZWdpc3RlckF1dGhDb25uZWN0aW9uU2Vzc2lvblJlcXVlc3QaMC50YWlsb3IudjEuUmVnaXN0ZXJBdXRoQ29ubmVjdGlvblNlc3Npb25SZXNwb25zZSIAEqIBCidFeGNoYW5nZUF1dGhDb25uZWN0aW9uQXV0aG9yaXphdGlvbkNvZGUSOS50YWlsb3IudjEuRXhjaGFuZ2VBdXRoQ29ubmVjdGlvbkF1dGhvcml6YXRpb25Db2RlUmVxdWVzdBo6LnRhaWxvci52MS5FeGNoYW5nZUF1dGhDb25uZWN0aW9uQXV0aG9yaXphdGlvbkNvZGVSZXNwb25zZSIAEm8KFkNyZWF0ZUF1dGhPQXV0aDJDbGllbnQSKC50YWlsb3IudjEuQ3JlYXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QaKS50YWlsb3IudjEuQ3JlYXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlIgASbwoWVXBkYXRlQXV0aE9BdXRoMkNsaWVudBIoLnRhaWxvci52MS5VcGRhdGVBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBopLnRhaWxvci52MS5VcGRhdGVBdXRoT0F1dGgyQ2xpZW50UmVzcG9uc2UiABJvChZEZWxldGVBdXRoT0F1dGgyQ2xpZW50EigudGFpbG9yLnYxLkRlbGV0ZUF1dGhPQXV0aDJDbGllbnRSZXF1ZXN0GikudGFpbG9yLnYxLkRlbGV0ZUF1dGhPQXV0aDJDbGllbnRSZXNwb25zZSIAEmkKE0dldEF1dGhPQXV0aDJDbGllbnQSJS50YWlsb3IudjEuR2V0QXV0aE9BdXRoMkNsaWVudFJlcXVlc3QaJi50YWlsb3IudjEuR2V0QXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlIgOQAgESbwoVTGlzdEF1dGhPQXV0aDJDbGllbnRzEicudGFpbG9yLnYxLkxpc3RBdXRoT0F1dGgyQ2xpZW50c1JlcXVlc3QaKC50YWlsb3IudjEuTGlzdEF1dGhPQXV0aDJDbGllbnRzUmVzcG9uc2UiA5ACARJpChNMaXN0RGF0YXBsYW5lRXZlbnRzEiUudGFpbG9yLnYxLkxpc3REYXRhcGxhbmVFdmVudHNSZXF1ZXN0GiYudGFpbG9yLnYxLkxpc3REYXRhcGxhbmVFdmVudHNSZXNwb25zZSIDkAIBEoQBChxMaXN0Q29udHJvbHBsYW5lQWN0aXZpdHlMb2dzEi4udGFpbG9yLnYxLkxpc3RDb250cm9scGxhbmVBY3Rpdml0eUxvZ3NSZXF1ZXN0Gi8udGFpbG9yLnYxLkxpc3RDb250cm9scGxhbmVBY3Rpdml0eUxvZ3NSZXNwb25zZSIDkAIBElcKDlRlc3RFeGVjU2NyaXB0EiAudGFpbG9yLnYxLlRlc3RFeGVjU2NyaXB0UmVxdWVzdBohLnRhaWxvci52MS5UZXN0RXhlY1NjcmlwdFJlc3BvbnNlIgASbAoUR2V0RnVuY3Rpb25FeGVjdXRpb24SJi50YWlsb3IudjEuR2V0RnVuY3Rpb25FeGVjdXRpb25SZXF1ZXN0GicudGFpbG9yLnYxLkdldEZ1bmN0aW9uRXhlY3V0aW9uUmVzcG9uc2UiA5ACARJyChZMaXN0RnVuY3Rpb25FeGVjdXRpb25zEigudGFpbG9yLnYxLkxpc3RGdW5jdGlvbkV4ZWN1dGlvbnNSZXF1ZXN0GikudGFpbG9yLnYxLkxpc3RGdW5jdGlvbkV4ZWN1dGlvbnNSZXNwb25zZSIDkAIBEnEKFkNyZWF0ZUZ1bmN0aW9uUmVnaXN0cnkSKC50YWlsb3IudjEuQ3JlYXRlRnVuY3Rpb25SZWdpc3RyeVJlcXVlc3QaKS50YWlsb3IudjEuQ3JlYXRlRnVuY3Rpb25SZWdpc3RyeVJlc3BvbnNlIgAoARJxChZVcGRhdGVGdW5jdGlvblJlZ2lzdHJ5EigudGFpbG9yLnYxLlVwZGF0ZUZ1bmN0aW9uUmVnaXN0cnlSZXF1ZXN0GikudGFpbG9yLnYxLlVwZGF0ZUZ1bmN0aW9uUmVnaXN0cnlSZXNwb25zZSIAKAESaQoTR2V0RnVuY3Rpb25SZWdpc3RyeRIlLnRhaWxvci52MS5HZXRGdW5jdGlvblJlZ2lzdHJ5UmVxdWVzdBomLnRhaWxvci52MS5HZXRGdW5jdGlvblJlZ2lzdHJ5UmVzcG9uc2UiA5ACARJyChZMaXN0RnVuY3Rpb25SZWdpc3RyaWVzEigudGFpbG9yLnYxLkxpc3RGdW5jdGlvblJlZ2lzdHJpZXNSZXF1ZXN0GikudGFpbG9yLnYxLkxpc3RGdW5jdGlvblJlZ2lzdHJpZXNSZXNwb25zZSIDkAIBEm8KFkRlbGV0ZUZ1bmN0aW9uUmVnaXN0cnkSKC50YWlsb3IudjEuRGVsZXRlRnVuY3Rpb25SZWdpc3RyeVJlcXVlc3QaKS50YWlsb3IudjEuRGVsZXRlRnVuY3Rpb25SZWdpc3RyeVJlc3BvbnNlIgASjAEKHkRvd25sb2FkRnVuY3Rpb25SZWdpc3RyeVNjcmlwdBIwLnRhaWxvci52MS5Eb3dubG9hZEZ1bmN0aW9uUmVnaXN0cnlTY3JpcHRSZXF1ZXN0GjEudGFpbG9yLnYxLkRvd25sb2FkRnVuY3Rpb25SZWdpc3RyeVNjcmlwdFJlc3BvbnNlIgOQAgEwARJyChZMaXN0TWV0ZXJSZXF1ZXN0Q291bnRzEigudGFpbG9yLnYxLkxpc3RNZXRlclJlcXVlc3RDb3VudHNSZXF1ZXN0GikudGFpbG9yLnYxLkxpc3RNZXRlclJlcXVlc3RDb3VudHNSZXNwb25zZSIDkAIBEngKGExpc3RNZXRlckV4ZWN1dGlvbkNvdW50cxIqLnRhaWxvci52MS5MaXN0TWV0ZXJFeGVjdXRpb25Db3VudHNSZXF1ZXN0GisudGFpbG9yLnYxLkxpc3RNZXRlckV4ZWN1dGlvbkNvdW50c1Jlc3BvbnNlIgOQAgESbAoUTGlzdE1ldGVyRXZlbnRDb3VudHMSJi50YWlsb3IudjEuTGlzdE1ldGVyRXZlbnRDb3VudHNSZXF1ZXN0GicudGFpbG9yLnYxLkxpc3RNZXRlckV2ZW50Q291bnRzUmVzcG9uc2UiA5ACARJdCg9MaXN0SWRQU2VydmljZXMSIS50YWlsb3IudjEuTGlzdElkUFNlcnZpY2VzUmVxdWVzdBoiLnRhaWxvci52MS5MaXN0SWRQU2VydmljZXNSZXNwb25zZSIDkAIBEl0KEENyZWF0ZUlkUFNlcnZpY2USIi50YWlsb3IudjEuQ3JlYXRlSWRQU2VydmljZVJlcXVlc3QaIy50YWlsb3IudjEuQ3JlYXRlSWRQU2VydmljZVJlc3BvbnNlIgASXQoQVXBkYXRlSWRQU2VydmljZRIiLnRhaWxvci52MS5VcGRhdGVJZFBTZXJ2aWNlUmVxdWVzdBojLnRhaWxvci52MS5VcGRhdGVJZFBTZXJ2aWNlUmVzcG9uc2UiABJdChBEZWxldGVJZFBTZXJ2aWNlEiIudGFpbG9yLnYxLkRlbGV0ZUlkUFNlcnZpY2VSZXF1ZXN0GiMudGFpbG9yLnYxLkRlbGV0ZUlkUFNlcnZpY2VSZXNwb25zZSIAElcKDUdldElkUFNlcnZpY2USHy50YWlsb3IudjEuR2V0SWRQU2VydmljZVJlcXVlc3QaIC50YWlsb3IudjEuR2V0SWRQU2VydmljZVJlc3BvbnNlIgOQAgESWgoOTGlzdElkUENsaWVudHMSIC50YWlsb3IudjEuTGlzdElkUENsaWVudHNSZXF1ZXN0GiEudGFpbG9yLnYxLkxpc3RJZFBDbGllbnRzUmVzcG9uc2UiA5ACARJaCg9DcmVhdGVJZFBDbGllbnQSIS50YWlsb3IudjEuQ3JlYXRlSWRQQ2xpZW50UmVxdWVzdBoiLnRhaWxvci52MS5DcmVhdGVJZFBDbGllbnRSZXNwb25zZSIAEloKD0RlbGV0ZUlkUENsaWVudBIhLnRhaWxvci52MS5EZWxldGVJZFBDbGllbnRSZXF1ZXN0GiIudGFpbG9yLnYxLkRlbGV0ZUlkUENsaWVudFJlc3BvbnNlIgASVAoMR2V0SWRQQ2xpZW50Eh4udGFpbG9yLnYxLkdldElkUENsaWVudFJlcXVlc3QaHy50YWlsb3IudjEuR2V0SWRQQ2xpZW50UmVzcG9uc2UiA5ACARJmChNDcmVhdGVTdGF0aWNXZWJzaXRlEiUudGFpbG9yLnYxLkNyZWF0ZVN0YXRpY1dlYnNpdGVSZXF1ZXN0GiYudGFpbG9yLnYxLkNyZWF0ZVN0YXRpY1dlYnNpdGVSZXNwb25zZSIAEmYKE1VwZGF0ZVN0YXRpY1dlYnNpdGUSJS50YWlsb3IudjEuVXBkYXRlU3RhdGljV2Vic2l0ZVJlcXVlc3QaJi50YWlsb3IudjEuVXBkYXRlU3RhdGljV2Vic2l0ZVJlc3BvbnNlIgASZgoTRGVsZXRlU3RhdGljV2Vic2l0ZRIlLnRhaWxvci52MS5EZWxldGVTdGF0aWNXZWJzaXRlUmVxdWVzdBomLnRhaWxvci52MS5EZWxldGVTdGF0aWNXZWJzaXRlUmVzcG9uc2UiABJgChBHZXRTdGF0aWNXZWJzaXRlEiIudGFpbG9yLnYxLkdldFN0YXRpY1dlYnNpdGVSZXF1ZXN0GiMudGFpbG9yLnYxLkdldFN0YXRpY1dlYnNpdGVSZXNwb25zZSIDkAIBEmYKEkxpc3RTdGF0aWNXZWJzaXRlcxIkLnRhaWxvci52MS5MaXN0U3RhdGljV2Vic2l0ZXNSZXF1ZXN0GiUudGFpbG9yLnYxLkxpc3RTdGF0aWNXZWJzaXRlc1Jlc3BvbnNlIgOQAgESXQoQQ3JlYXRlRGVwbG95bWVudBIiLnRhaWxvci52MS5DcmVhdGVEZXBsb3ltZW50UmVxdWVzdBojLnRhaWxvci52MS5DcmVhdGVEZXBsb3ltZW50UmVzcG9uc2UiABJNCgpVcGxvYWRGaWxlEhwudGFpbG9yLnYxLlVwbG9hZEZpbGVSZXF1ZXN0Gh0udGFpbG9yLnYxLlVwbG9hZEZpbGVSZXNwb25zZSIAKAESYAoRUHVibGlzaERlcGxveW1lbnQSIy50YWlsb3IudjEuUHVibGlzaERlcGxveW1lbnRSZXF1ZXN0GiQudGFpbG9yLnYxLlB1Ymxpc2hEZXBsb3ltZW50UmVzcG9uc2UiABJXCg5DcmVhdGVXb3JrZmxvdxIgLnRhaWxvci52MS5DcmVhdGVXb3JrZmxvd1JlcXVlc3QaIS50YWlsb3IudjEuQ3JlYXRlV29ya2Zsb3dSZXNwb25zZSIAElcKDlVwZGF0ZVdvcmtmbG93EiAudGFpbG9yLnYxLlVwZGF0ZVdvcmtmbG93UmVxdWVzdBohLnRhaWxvci52MS5VcGRhdGVXb3JrZmxvd1Jlc3BvbnNlIgASVwoORGVsZXRlV29ya2Zsb3cSIC50YWlsb3IudjEuRGVsZXRlV29ya2Zsb3dSZXF1ZXN0GiEudGFpbG9yLnYxLkRlbGV0ZVdvcmtmbG93UmVzcG9uc2UiABJRCgtHZXRXb3JrZmxvdxIdLnRhaWxvci52MS5HZXRXb3JrZmxvd1JlcXVlc3QaHi50YWlsb3IudjEuR2V0V29ya2Zsb3dSZXNwb25zZSIDkAIBEmMKEUdldFdvcmtmbG93QnlOYW1lEiMudGFpbG9yLnYxLkdldFdvcmtmbG93QnlOYW1lUmVxdWVzdBokLnRhaWxvci52MS5HZXRXb3JrZmxvd0J5TmFtZVJlc3BvbnNlIgOQAgESVwoNTGlzdFdvcmtmbG93cxIfLnRhaWxvci52MS5MaXN0V29ya2Zsb3dzUmVxdWVzdBogLnRhaWxvci52MS5MaXN0V29ya2Zsb3dzUmVzcG9uc2UiA5ACARJ4ChlDcmVhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uEisudGFpbG9yLnYxLkNyZWF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXF1ZXN0GiwudGFpbG9yLnYxLkNyZWF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXNwb25zZSIAEngKGVVwZGF0ZVdvcmtmbG93Sm9iRnVuY3Rpb24SKy50YWlsb3IudjEuVXBkYXRlV29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QaLC50YWlsb3IudjEuVXBkYXRlV29ya2Zsb3dKb2JGdW5jdGlvblJlc3BvbnNlIgAScgoWR2V0V29ya2Zsb3dKb2JGdW5jdGlvbhIoLnRhaWxvci52MS5HZXRXb3JrZmxvd0pvYkZ1bmN0aW9uUmVxdWVzdBopLnRhaWxvci52MS5HZXRXb3JrZmxvd0pvYkZ1bmN0aW9uUmVzcG9uc2UiA5ACARKEAQocR2V0V29ya2Zsb3dKb2JGdW5jdGlvbkJ5TmFtZRIuLnRhaWxvci52MS5HZXRXb3JrZmxvd0pvYkZ1bmN0aW9uQnlOYW1lUmVxdWVzdBovLnRhaWxvci52MS5HZXRXb3JrZmxvd0pvYkZ1bmN0aW9uQnlOYW1lUmVzcG9uc2UiA5ACARJ4ChhMaXN0V29ya2Zsb3dKb2JGdW5jdGlvbnMSKi50YWlsb3IudjEuTGlzdFdvcmtmbG93Sm9iRnVuY3Rpb25zUmVxdWVzdBorLnRhaWxvci52MS5MaXN0V29ya2Zsb3dKb2JGdW5jdGlvbnNSZXNwb25zZSIDkAIBEmwKFEdldFdvcmtmbG93RXhlY3V0aW9uEiYudGFpbG9yLnYxLkdldFdvcmtmbG93RXhlY3V0aW9uUmVxdWVzdBonLnRhaWxvci52MS5HZXRXb3JrZmxvd0V4ZWN1dGlvblJlc3BvbnNlIgOQAgEScgoWTGlzdFdvcmtmbG93RXhlY3V0aW9ucxIoLnRhaWxvci52MS5MaXN0V29ya2Zsb3dFeGVjdXRpb25zUmVxdWVzdBopLnRhaWxvci52MS5MaXN0V29ya2Zsb3dFeGVjdXRpb25zUmVzcG9uc2UiA5ACARJgChFUZXN0U3RhcnRXb3JrZmxvdxIjLnRhaWxvci52MS5UZXN0U3RhcnRXb3JrZmxvd1JlcXVlc3QaJC50YWlsb3IudjEuVGVzdFN0YXJ0V29ya2Zsb3dSZXNwb25zZSIAEmMKElRlc3RSZXN1bWVXb3JrZmxvdxIkLnRhaWxvci52MS5UZXN0UmVzdW1lV29ya2Zsb3dSZXF1ZXN0GiUudGFpbG9yLnYxLlRlc3RSZXN1bWVXb3JrZmxvd1Jlc3BvbnNlIgASTgoLU2V0TWV0YWRhdGESHS50YWlsb3IudjEuU2V0TWV0YWRhdGFSZXF1ZXN0Gh4udGFpbG9yLnYxLlNldE1ldGFkYXRhUmVzcG9uc2UiABJRCgtHZXRNZXRhZGF0YRIdLnRhaWxvci52MS5HZXRNZXRhZGF0YVJlcXVlc3QaHi50YWlsb3IudjEuR2V0TWV0YWRhdGFSZXNwb25zZSIDkAIBEoQBCh1DcmVhdGVDb250cm9scGxhbmVNYWNoaW5lVXNlchIvLnRhaWxvci52MS5DcmVhdGVDb250cm9scGxhbmVNYWNoaW5lVXNlclJlcXVlc3QaMC50YWlsb3IudjEuQ3JlYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXNwb25zZSIAEoQBCh1VcGRhdGVDb250cm9scGxhbmVNYWNoaW5lVXNlchIvLnRhaWxvci52MS5VcGRhdGVDb250cm9scGxhbmVNYWNoaW5lVXNlclJlcXVlc3QaMC50YWlsb3IudjEuVXBkYXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXNwb25zZSIAEn4KGkdldENvbnRyb2xwbGFuZU1hY2hpbmVVc2VyEiwudGFpbG9yLnYxLkdldENvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVxdWVzdBotLnRhaWxvci52MS5HZXRDb250cm9scGxhbmVNYWNoaW5lVXNlclJlc3BvbnNlIgOQAgEShAEKHExpc3RDb250cm9scGxhbmVNYWNoaW5lVXNlcnMSLi50YWlsb3IudjEuTGlzdENvbnRyb2xwbGFuZU1hY2hpbmVVc2Vyc1JlcXVlc3QaLy50YWlsb3IudjEuTGlzdENvbnRyb2xwbGFuZU1hY2hpbmVVc2Vyc1Jlc3BvbnNlIgOQAgEShAEKHURlbGV0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyEi8udGFpbG9yLnYxLkRlbGV0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVxdWVzdBowLnRhaWxvci52MS5EZWxldGVDb250cm9scGxhbmVNYWNoaW5lVXNlclJlc3BvbnNlIgBiBnByb3RvMw", [
|
|
948
|
+
const file_tailor_v1_service = /* @__PURE__ */ fileDesc("Chd0YWlsb3IvdjEvc2VydmljZS5wcm90bxIJdGFpbG9yLnYxIg0KC1BpbmdSZXF1ZXN0Ig4KDFBpbmdSZXNwb25zZTKCtAEKD09wZXJhdG9yU2VydmljZRI5CgRQaW5nEhYudGFpbG9yLnYxLlBpbmdSZXF1ZXN0GhcudGFpbG9yLnYxLlBpbmdSZXNwb25zZSIAEocBCh1MaXN0QXZhaWxhYmxlV29ya3NwYWNlUmVnaW9ucxIvLnRhaWxvci52MS5MaXN0QXZhaWxhYmxlV29ya3NwYWNlUmVnaW9uc1JlcXVlc3QaMC50YWlsb3IudjEuTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVJlZ2lvbnNSZXNwb25zZSIDkAIBEloKD0NyZWF0ZVdvcmtzcGFjZRIhLnRhaWxvci52MS5DcmVhdGVXb3Jrc3BhY2VSZXF1ZXN0GiIudGFpbG9yLnYxLkNyZWF0ZVdvcmtzcGFjZVJlc3BvbnNlIgASWgoPVXBkYXRlV29ya3NwYWNlEiEudGFpbG9yLnYxLlVwZGF0ZVdvcmtzcGFjZVJlcXVlc3QaIi50YWlsb3IudjEuVXBkYXRlV29ya3NwYWNlUmVzcG9uc2UiABJaCg9EZWxldGVXb3Jrc3BhY2USIS50YWlsb3IudjEuRGVsZXRlV29ya3NwYWNlUmVxdWVzdBoiLnRhaWxvci52MS5EZWxldGVXb3Jrc3BhY2VSZXNwb25zZSIAEloKDkxpc3RXb3Jrc3BhY2VzEiAudGFpbG9yLnYxLkxpc3RXb3Jrc3BhY2VzUmVxdWVzdBohLnRhaWxvci52MS5MaXN0V29ya3NwYWNlc1Jlc3BvbnNlIgOQAgESfgoaTGlzdE9yZ2FuaXphdGlvbldvcmtzcGFjZXMSLC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbldvcmtzcGFjZXNSZXF1ZXN0Gi0udGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25Xb3Jrc3BhY2VzUmVzcG9uc2UiA5ACARJdChBSZXN0b3JlV29ya3NwYWNlEiIudGFpbG9yLnYxLlJlc3RvcmVXb3Jrc3BhY2VSZXF1ZXN0GiMudGFpbG9yLnYxLlJlc3RvcmVXb3Jrc3BhY2VSZXNwb25zZSIAElQKDEdldFdvcmtzcGFjZRIeLnRhaWxvci52MS5HZXRXb3Jrc3BhY2VSZXF1ZXN0Gh8udGFpbG9yLnYxLkdldFdvcmtzcGFjZVJlc3BvbnNlIgOQAgESfgoaTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnMSLC50YWlsb3IudjEuTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnNSZXF1ZXN0Gi0udGFpbG9yLnYxLkxpc3RXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJzUmVzcG9uc2UiA5ACARKlAQonTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGVzEjkudGFpbG9yLnYxLkxpc3RBdmFpbGFibGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSb2xlc1JlcXVlc3QaOi50YWlsb3IudjEuTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGVzUmVzcG9uc2UiA5ACARJ+ChtJbnZpdGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXISLS50YWlsb3IudjEuSW52aXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVxdWVzdBouLnRhaWxvci52MS5JbnZpdGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXNwb25zZSIAEn4KG1JlbW92ZVdvcmtzcGFjZVBsYXRmb3JtVXNlchItLnRhaWxvci52MS5SZW1vdmVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXF1ZXN0Gi4udGFpbG9yLnYxLlJlbW92ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlc3BvbnNlIgASfgobVXBkYXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyEi0udGFpbG9yLnYxLlVwZGF0ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlcXVlc3QaLi50YWlsb3IudjEuVXBkYXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVzcG9uc2UiABJ4ChhHZXRXb3Jrc3BhY2VQbGF0Zm9ybVVzZXISKi50YWlsb3IudjEuR2V0V29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVxdWVzdBorLnRhaWxvci52MS5HZXRXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXNwb25zZSIDkAIBEmAKEEdldFdvcmtzcGFjZVJvbGUSIi50YWlsb3IudjEuR2V0V29ya3NwYWNlUm9sZVJlcXVlc3QaIy50YWlsb3IudjEuR2V0V29ya3NwYWNlUm9sZVJlc3BvbnNlIgOQAgESYwoSVXBkYXRlT3JnYW5pemF0aW9uEiQudGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblJlcXVlc3QaJS50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uUmVzcG9uc2UiABJdCg9HZXRPcmdhbml6YXRpb24SIS50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uUmVxdWVzdBoiLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25SZXNwb25zZSIDkAIBEmMKEUxpc3RPcmdhbml6YXRpb25zEiMudGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25zUmVxdWVzdBokLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uc1Jlc3BvbnNlIgOQAgESbwoVTGlzdFVzZXJPcmdhbml6YXRpb25zEicudGFpbG9yLnYxLkxpc3RVc2VyT3JnYW5pemF0aW9uc1JlcXVlc3QaKC50YWlsb3IudjEuTGlzdFVzZXJPcmdhbml6YXRpb25zUmVzcG9uc2UiA5ACARJyChdHcmFudE9yZ2FuaXphdGlvbkFjY2VzcxIpLnRhaWxvci52MS5HcmFudE9yZ2FuaXphdGlvbkFjY2Vzc1JlcXVlc3QaKi50YWlsb3IudjEuR3JhbnRPcmdhbml6YXRpb25BY2Nlc3NSZXNwb25zZSIAEnUKGFVwZGF0ZU9yZ2FuaXphdGlvbkFjY2VzcxIqLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0GisudGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIgASdQoYUmV2b2tlT3JnYW5pemF0aW9uQWNjZXNzEioudGFpbG9yLnYxLlJldm9rZU9yZ2FuaXphdGlvbkFjY2Vzc1JlcXVlc3QaKy50YWlsb3IudjEuUmV2b2tlT3JnYW5pemF0aW9uQWNjZXNzUmVzcG9uc2UiABJ4ChhMaXN0T3JnYW5pemF0aW9uQWNjZXNzZXMSKi50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkFjY2Vzc2VzUmVxdWVzdBorLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uQWNjZXNzZXNSZXNwb25zZSIDkAIBEm8KFUdldE9yZ2FuaXphdGlvbkFjY2VzcxInLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0GigudGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIgOQAgESdQoYQ3JlYXRlT3JnYW5pemF0aW9uRm9sZGVyEioudGFpbG9yLnYxLkNyZWF0ZU9yZ2FuaXphdGlvbkZvbGRlclJlcXVlc3QaKy50YWlsb3IudjEuQ3JlYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2UiABJ1ChhVcGRhdGVPcmdhbml6YXRpb25Gb2xkZXISKi50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVxdWVzdBorLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJSZXNwb25zZSIAEnUKGERlbGV0ZU9yZ2FuaXphdGlvbkZvbGRlchIqLnRhaWxvci52MS5EZWxldGVPcmdhbml6YXRpb25Gb2xkZXJSZXF1ZXN0GisudGFpbG9yLnYxLkRlbGV0ZU9yZ2FuaXphdGlvbkZvbGRlclJlc3BvbnNlIgASbwoVR2V0T3JnYW5pemF0aW9uRm9sZGVyEicudGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvbkZvbGRlclJlcXVlc3QaKC50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2UiA5ACARJ1ChdMaXN0T3JnYW5pemF0aW9uRm9sZGVycxIpLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uRm9sZGVyc1JlcXVlc3QaKi50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkZvbGRlcnNSZXNwb25zZSIDkAIBEoQBCh1HcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2VzcxIvLnRhaWxvci52MS5HcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1JlcXVlc3QaMC50YWlsb3IudjEuR3JhbnRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEocBCh5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSMC50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBoxLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEocBCh5SZXZva2VPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSMC50YWlsb3IudjEuUmV2b2tlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBoxLnRhaWxvci52MS5SZXZva2VPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEooBCh5MaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXMSMC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc2VzUmVxdWVzdBoxLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXNSZXNwb25zZSIDkAIBEoEBChtHZXRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSLS50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBouLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIDkAIBEm8KFkNyZWF0ZU9yZ2FuaXphdGlvblRlYW0SKC50YWlsb3IudjEuQ3JlYXRlT3JnYW5pemF0aW9uVGVhbVJlcXVlc3QaKS50YWlsb3IudjEuQ3JlYXRlT3JnYW5pemF0aW9uVGVhbVJlc3BvbnNlIgASbwoWVXBkYXRlT3JnYW5pemF0aW9uVGVhbRIoLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25UZWFtUmVxdWVzdBopLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25UZWFtUmVzcG9uc2UiABJvChZEZWxldGVPcmdhbml6YXRpb25UZWFtEigudGFpbG9yLnYxLkRlbGV0ZU9yZ2FuaXphdGlvblRlYW1SZXF1ZXN0GikudGFpbG9yLnYxLkRlbGV0ZU9yZ2FuaXphdGlvblRlYW1SZXNwb25zZSIAEmkKE0dldE9yZ2FuaXphdGlvblRlYW0SJS50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbVJlcXVlc3QaJi50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbVJlc3BvbnNlIgOQAgESbwoVTGlzdE9yZ2FuaXphdGlvblRlYW1zEicudGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25UZWFtc1JlcXVlc3QaKC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvblRlYW1zUmVzcG9uc2UiA5ACARJ4ChlBZGRPcmdhbml6YXRpb25UZWFtTWVtYmVyEisudGFpbG9yLnYxLkFkZE9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0GiwudGFpbG9yLnYxLkFkZE9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXNwb25zZSIAEoEBChxVcGRhdGVPcmdhbml6YXRpb25UZWFtTWVtYmVyEi4udGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0Gi8udGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXNwb25zZSIAEoEBChxSZW1vdmVPcmdhbml6YXRpb25UZWFtTWVtYmVyEi4udGFpbG9yLnYxLlJlbW92ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0Gi8udGFpbG9yLnYxLlJlbW92ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXNwb25zZSIAEoEBChtMaXN0T3JnYW5pemF0aW9uVGVhbU1lbWJlcnMSLS50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvblRlYW1NZW1iZXJzUmVxdWVzdBouLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uVGVhbU1lbWJlcnNSZXNwb25zZSIDkAIBEnsKGUdldE9yZ2FuaXphdGlvblRlYW1NZW1iZXISKy50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbU1lbWJlclJlcXVlc3QaLC50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uVGVhbU1lbWJlclJlc3BvbnNlIgOQAgEScgoWR2V0UGxhdGZvcm1BY2NvdW50UGxhbhIoLnRhaWxvci52MS5HZXRQbGF0Zm9ybUFjY291bnRQbGFuUmVxdWVzdBopLnRhaWxvci52MS5HZXRQbGF0Zm9ybUFjY291bnRQbGFuUmVzcG9uc2UiA5ACARJgChFDcmVhdGVBcHBsaWNhdGlvbhIjLnRhaWxvci52MS5DcmVhdGVBcHBsaWNhdGlvblJlcXVlc3QaJC50YWlsb3IudjEuQ3JlYXRlQXBwbGljYXRpb25SZXNwb25zZSIAEmAKEVVwZGF0ZUFwcGxpY2F0aW9uEiMudGFpbG9yLnYxLlVwZGF0ZUFwcGxpY2F0aW9uUmVxdWVzdBokLnRhaWxvci52MS5VcGRhdGVBcHBsaWNhdGlvblJlc3BvbnNlIgASYAoRRGVsZXRlQXBwbGljYXRpb24SIy50YWlsb3IudjEuRGVsZXRlQXBwbGljYXRpb25SZXF1ZXN0GiQudGFpbG9yLnYxLkRlbGV0ZUFwcGxpY2F0aW9uUmVzcG9uc2UiABJgChBMaXN0QXBwbGljYXRpb25zEiIudGFpbG9yLnYxLkxpc3RBcHBsaWNhdGlvbnNSZXF1ZXN0GiMudGFpbG9yLnYxLkxpc3RBcHBsaWNhdGlvbnNSZXNwb25zZSIDkAIBEloKDkdldEFwcGxpY2F0aW9uEiAudGFpbG9yLnYxLkdldEFwcGxpY2F0aW9uUmVxdWVzdBohLnRhaWxvci52MS5HZXRBcHBsaWNhdGlvblJlc3BvbnNlIgOQAgESfgoaR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGgSLC50YWlsb3IudjEuR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGhSZXF1ZXN0Gi0udGFpbG9yLnYxLkdldEFwcGxpY2F0aW9uU2NoZW1hSGVhbHRoUmVzcG9uc2UiA5ACARJjChJDb21wb3NlVGFpbG9yREJTREwSJC50YWlsb3IudjEuQ29tcG9zZVRhaWxvckRCU0RMUmVxdWVzdBolLnRhaWxvci52MS5Db21wb3NlVGFpbG9yREJTRExSZXNwb25zZSIAEmwKFUNyZWF0ZVRhaWxvckRCU2VydmljZRInLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQlNlcnZpY2VSZXF1ZXN0GigudGFpbG9yLnYxLkNyZWF0ZVRhaWxvckRCU2VydmljZVJlc3BvbnNlIgASbAoVVXBkYXRlVGFpbG9yREJTZXJ2aWNlEicudGFpbG9yLnYxLlVwZGF0ZVRhaWxvckRCU2VydmljZVJlcXVlc3QaKC50YWlsb3IudjEuVXBkYXRlVGFpbG9yREJTZXJ2aWNlUmVzcG9uc2UiABJsChVEZWxldGVUYWlsb3JEQlNlcnZpY2USJy50YWlsb3IudjEuRGVsZXRlVGFpbG9yREJTZXJ2aWNlUmVxdWVzdBooLnRhaWxvci52MS5EZWxldGVUYWlsb3JEQlNlcnZpY2VSZXNwb25zZSIAEmYKEkdldFRhaWxvckRCU2VydmljZRIkLnRhaWxvci52MS5HZXRUYWlsb3JEQlNlcnZpY2VSZXF1ZXN0GiUudGFpbG9yLnYxLkdldFRhaWxvckRCU2VydmljZVJlc3BvbnNlIgOQAgESbAoUTGlzdFRhaWxvckRCU2VydmljZXMSJi50YWlsb3IudjEuTGlzdFRhaWxvckRCU2VydmljZXNSZXF1ZXN0GicudGFpbG9yLnYxLkxpc3RUYWlsb3JEQlNlcnZpY2VzUmVzcG9uc2UiA5ACARJjChJDcmVhdGVUYWlsb3JEQlR5cGUSJC50YWlsb3IudjEuQ3JlYXRlVGFpbG9yREJUeXBlUmVxdWVzdBolLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQlR5cGVSZXNwb25zZSIAEmMKElVwZGF0ZVRhaWxvckRCVHlwZRIkLnRhaWxvci52MS5VcGRhdGVUYWlsb3JEQlR5cGVSZXF1ZXN0GiUudGFpbG9yLnYxLlVwZGF0ZVRhaWxvckRCVHlwZVJlc3BvbnNlIgASYwoSRGVsZXRlVGFpbG9yREJUeXBlEiQudGFpbG9yLnYxLkRlbGV0ZVRhaWxvckRCVHlwZVJlcXVlc3QaJS50YWlsb3IudjEuRGVsZXRlVGFpbG9yREJUeXBlUmVzcG9uc2UiABJsChVUcnVuY2F0ZVRhaWxvckRCVHlwZXMSJy50YWlsb3IudjEuVHJ1bmNhdGVUYWlsb3JEQlR5cGVzUmVxdWVzdBooLnRhaWxvci52MS5UcnVuY2F0ZVRhaWxvckRCVHlwZXNSZXNwb25zZSIAEmkKFFRydW5jYXRlVGFpbG9yREJUeXBlEiYudGFpbG9yLnYxLlRydW5jYXRlVGFpbG9yREJUeXBlUmVxdWVzdBonLnRhaWxvci52MS5UcnVuY2F0ZVRhaWxvckRCVHlwZVJlc3BvbnNlIgASYwoRTGlzdFRhaWxvckRCVHlwZXMSIy50YWlsb3IudjEuTGlzdFRhaWxvckRCVHlwZXNSZXF1ZXN0GiQudGFpbG9yLnYxLkxpc3RUYWlsb3JEQlR5cGVzUmVzcG9uc2UiA5ACARJdCg9HZXRUYWlsb3JEQlR5cGUSIS50YWlsb3IudjEuR2V0VGFpbG9yREJUeXBlUmVxdWVzdBoiLnRhaWxvci52MS5HZXRUYWlsb3JEQlR5cGVSZXNwb25zZSIDkAIBEn4KG0NyZWF0ZVRhaWxvckRCR1FMUGVybWlzc2lvbhItLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXF1ZXN0Gi4udGFpbG9yLnYxLkNyZWF0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlIgASeAoYR2V0VGFpbG9yREJHUUxQZXJtaXNzaW9uEioudGFpbG9yLnYxLkdldFRhaWxvckRCR1FMUGVybWlzc2lvblJlcXVlc3QaKy50YWlsb3IudjEuR2V0VGFpbG9yREJHUUxQZXJtaXNzaW9uUmVzcG9uc2UiA5ACARJ+ChpMaXN0VGFpbG9yREJHUUxQZXJtaXNzaW9ucxIsLnRhaWxvci52MS5MaXN0VGFpbG9yREJHUUxQZXJtaXNzaW9uc1JlcXVlc3QaLS50YWlsb3IudjEuTGlzdFRhaWxvckRCR1FMUGVybWlzc2lvbnNSZXNwb25zZSIDkAIBEn4KG1VwZGF0ZVRhaWxvckRCR1FMUGVybWlzc2lvbhItLnRhaWxvci52MS5VcGRhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXF1ZXN0Gi4udGFpbG9yLnYxLlVwZGF0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlIgASfgobRGVsZXRlVGFpbG9yREJHUUxQZXJtaXNzaW9uEi0udGFpbG9yLnYxLkRlbGV0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlcXVlc3QaLi50YWlsb3IudjEuRGVsZXRlVGFpbG9yREJHUUxQZXJtaXNzaW9uUmVzcG9uc2UiABJsChVDcmVhdGVQaXBlbGluZVNlcnZpY2USJy50YWlsb3IudjEuQ3JlYXRlUGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBooLnRhaWxvci52MS5DcmVhdGVQaXBlbGluZVNlcnZpY2VSZXNwb25zZSIAEmwKFVVwZGF0ZVBpcGVsaW5lU2VydmljZRInLnRhaWxvci52MS5VcGRhdGVQaXBlbGluZVNlcnZpY2VSZXF1ZXN0GigudGFpbG9yLnYxLlVwZGF0ZVBpcGVsaW5lU2VydmljZVJlc3BvbnNlIgASbAoVRGVsZXRlUGlwZWxpbmVTZXJ2aWNlEicudGFpbG9yLnYxLkRlbGV0ZVBpcGVsaW5lU2VydmljZVJlcXVlc3QaKC50YWlsb3IudjEuRGVsZXRlUGlwZWxpbmVTZXJ2aWNlUmVzcG9uc2UiABJmChJHZXRQaXBlbGluZVNlcnZpY2USJC50YWlsb3IudjEuR2V0UGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBolLnRhaWxvci52MS5HZXRQaXBlbGluZVNlcnZpY2VSZXNwb25zZSIDkAIBEmwKFExpc3RQaXBlbGluZVNlcnZpY2VzEiYudGFpbG9yLnYxLkxpc3RQaXBlbGluZVNlcnZpY2VzUmVxdWVzdBonLnRhaWxvci52MS5MaXN0UGlwZWxpbmVTZXJ2aWNlc1Jlc3BvbnNlIgOQAgESaQoTR2V0UGlwZWxpbmVSZXNvbHZlchIlLnRhaWxvci52MS5HZXRQaXBlbGluZVJlc29sdmVyUmVxdWVzdBomLnRhaWxvci52MS5HZXRQaXBlbGluZVJlc29sdmVyUmVzcG9uc2UiA5ACARJvChVMaXN0UGlwZWxpbmVSZXNvbHZlcnMSJy50YWlsb3IudjEuTGlzdFBpcGVsaW5lUmVzb2x2ZXJzUmVxdWVzdBooLnRhaWxvci52MS5MaXN0UGlwZWxpbmVSZXNvbHZlcnNSZXNwb25zZSIDkAIBEm8KFkNyZWF0ZVBpcGVsaW5lUmVzb2x2ZXISKC50YWlsb3IudjEuQ3JlYXRlUGlwZWxpbmVSZXNvbHZlclJlcXVlc3QaKS50YWlsb3IudjEuQ3JlYXRlUGlwZWxpbmVSZXNvbHZlclJlc3BvbnNlIgASbwoWVXBkYXRlUGlwZWxpbmVSZXNvbHZlchIoLnRhaWxvci52MS5VcGRhdGVQaXBlbGluZVJlc29sdmVyUmVxdWVzdBopLnRhaWxvci52MS5VcGRhdGVQaXBlbGluZVJlc29sdmVyUmVzcG9uc2UiABJvChZEZWxldGVQaXBlbGluZVJlc29sdmVyEigudGFpbG9yLnYxLkRlbGV0ZVBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0GikudGFpbG9yLnYxLkRlbGV0ZVBpcGVsaW5lUmVzb2x2ZXJSZXNwb25zZSIAEmMKEkNvbXBvc2VQaXBlbGluZVNETBIkLnRhaWxvci52MS5Db21wb3NlUGlwZWxpbmVTRExSZXF1ZXN0GiUudGFpbG9yLnYxLkNvbXBvc2VQaXBlbGluZVNETFJlc3BvbnNlIgASnAEKJExpc3RQaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0cxI2LnRhaWxvci52MS5MaXN0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdHNSZXF1ZXN0GjcudGFpbG9yLnYxLkxpc3RQaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0c1Jlc3BvbnNlIgOQAgESlgEKIkdldFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHQSNC50YWlsb3IudjEuR2V0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdFJlcXVlc3QaNS50YWlsb3IudjEuR2V0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdFJlc3BvbnNlIgOQAgEScgoXUmVzdGFydFBpcGVsaW5lUmVzb2x2ZXISKS50YWlsb3IudjEuUmVzdGFydFBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0GioudGFpbG9yLnYxLlJlc3RhcnRQaXBlbGluZVJlc29sdmVyUmVzcG9uc2UiABJvChZDcmVhdGVTdGF0ZWZsb3dTZXJ2aWNlEigudGFpbG9yLnYxLkNyZWF0ZVN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0GikudGFpbG9yLnYxLkNyZWF0ZVN0YXRlZmxvd1NlcnZpY2VSZXNwb25zZSIAEm8KFlVwZGF0ZVN0YXRlZmxvd1NlcnZpY2USKC50YWlsb3IudjEuVXBkYXRlU3RhdGVmbG93U2VydmljZVJlcXVlc3QaKS50YWlsb3IudjEuVXBkYXRlU3RhdGVmbG93U2VydmljZVJlc3BvbnNlIgASbwoWRGVsZXRlU3RhdGVmbG93U2VydmljZRIoLnRhaWxvci52MS5EZWxldGVTdGF0ZWZsb3dTZXJ2aWNlUmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVTdGF0ZWZsb3dTZXJ2aWNlUmVzcG9uc2UiABJpChNHZXRTdGF0ZWZsb3dTZXJ2aWNlEiUudGFpbG9yLnYxLkdldFN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0GiYudGFpbG9yLnYxLkdldFN0YXRlZmxvd1NlcnZpY2VSZXNwb25zZSIDkAIBEm8KFUxpc3RTdGF0ZWZsb3dTZXJ2aWNlcxInLnRhaWxvci52MS5MaXN0U3RhdGVmbG93U2VydmljZXNSZXF1ZXN0GigudGFpbG9yLnYxLkxpc3RTdGF0ZWZsb3dTZXJ2aWNlc1Jlc3BvbnNlIgOQAgESbwoWQ3JlYXRlRXhlY3V0b3JFeGVjdXRvchIoLnRhaWxvci52MS5DcmVhdGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBopLnRhaWxvci52MS5DcmVhdGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2UiABJvChZVcGRhdGVFeGVjdXRvckV4ZWN1dG9yEigudGFpbG9yLnYxLlVwZGF0ZUV4ZWN1dG9yRXhlY3V0b3JSZXF1ZXN0GikudGFpbG9yLnYxLlVwZGF0ZUV4ZWN1dG9yRXhlY3V0b3JSZXNwb25zZSIAEmkKE0dldEV4ZWN1dG9yRXhlY3V0b3ISJS50YWlsb3IudjEuR2V0RXhlY3V0b3JFeGVjdXRvclJlcXVlc3QaJi50YWlsb3IudjEuR2V0RXhlY3V0b3JFeGVjdXRvclJlc3BvbnNlIgOQAgESbwoWRGVsZXRlRXhlY3V0b3JFeGVjdXRvchIoLnRhaWxvci52MS5EZWxldGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2UiABJvChVMaXN0RXhlY3V0b3JFeGVjdXRvcnMSJy50YWlsb3IudjEuTGlzdEV4ZWN1dG9yRXhlY3V0b3JzUmVxdWVzdBooLnRhaWxvci52MS5MaXN0RXhlY3V0b3JFeGVjdXRvcnNSZXNwb25zZSIDkAIBEloKDkdldEV4ZWN1dG9ySm9iEiAudGFpbG9yLnYxLkdldEV4ZWN1dG9ySm9iUmVxdWVzdBohLnRhaWxvci52MS5HZXRFeGVjdXRvckpvYlJlc3BvbnNlIgOQAgESYAoQTGlzdEV4ZWN1dG9ySm9icxIiLnRhaWxvci52MS5MaXN0RXhlY3V0b3JKb2JzUmVxdWVzdBojLnRhaWxvci52MS5MaXN0RXhlY3V0b3JKb2JzUmVzcG9uc2UiA5ACARJ1ChdMaXN0RXhlY3V0b3JKb2JBdHRlbXB0cxIpLnRhaWxvci52MS5MaXN0RXhlY3V0b3JKb2JBdHRlbXB0c1JlcXVlc3QaKi50YWlsb3IudjEuTGlzdEV4ZWN1dG9ySm9iQXR0ZW1wdHNSZXNwb25zZSIDkAIBEoQBChxMaXN0RXhlY3V0b3JJbmNvbWluZ1dlYmhvb2tzEi4udGFpbG9yLnYxLkxpc3RFeGVjdXRvckluY29taW5nV2ViaG9va3NSZXF1ZXN0Gi8udGFpbG9yLnYxLkxpc3RFeGVjdXRvckluY29taW5nV2ViaG9va3NSZXNwb25zZSIDkAIBEn4KGkdldEV4ZWN1dG9ySW5jb21pbmdXZWJob29rEiwudGFpbG9yLnYxLkdldEV4ZWN1dG9ySW5jb21pbmdXZWJob29rUmVxdWVzdBotLnRhaWxvci52MS5HZXRFeGVjdXRvckluY29taW5nV2ViaG9va1Jlc3BvbnNlIgOQAgESWgoPVHJpZ2dlckV4ZWN1dG9yEiEudGFpbG9yLnYxLlRyaWdnZXJFeGVjdXRvclJlcXVlc3QaIi50YWlsb3IudjEuVHJpZ2dlckV4ZWN1dG9yUmVzcG9uc2UiABJ1ChhDcmVhdGVTZWNyZXRNYW5hZ2VyVmF1bHQSKi50YWlsb3IudjEuQ3JlYXRlU2VjcmV0TWFuYWdlclZhdWx0UmVxdWVzdBorLnRhaWxvci52MS5DcmVhdGVTZWNyZXRNYW5hZ2VyVmF1bHRSZXNwb25zZSIAEm8KFUdldFNlY3JldE1hbmFnZXJWYXVsdBInLnRhaWxvci52MS5HZXRTZWNyZXRNYW5hZ2VyVmF1bHRSZXF1ZXN0GigudGFpbG9yLnYxLkdldFNlY3JldE1hbmFnZXJWYXVsdFJlc3BvbnNlIgOQAgESdQoYRGVsZXRlU2VjcmV0TWFuYWdlclZhdWx0EioudGFpbG9yLnYxLkRlbGV0ZVNlY3JldE1hbmFnZXJWYXVsdFJlcXVlc3QaKy50YWlsb3IudjEuRGVsZXRlU2VjcmV0TWFuYWdlclZhdWx0UmVzcG9uc2UiABJ1ChdMaXN0U2VjcmV0TWFuYWdlclZhdWx0cxIpLnRhaWxvci52MS5MaXN0U2VjcmV0TWFuYWdlclZhdWx0c1JlcXVlc3QaKi50YWlsb3IudjEuTGlzdFNlY3JldE1hbmFnZXJWYXVsdHNSZXNwb25zZSIDkAIBEngKGUNyZWF0ZVNlY3JldE1hbmFnZXJTZWNyZXQSKy50YWlsb3IudjEuQ3JlYXRlU2VjcmV0TWFuYWdlclNlY3JldFJlcXVlc3QaLC50YWlsb3IudjEuQ3JlYXRlU2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlIgASeAoZVXBkYXRlU2VjcmV0TWFuYWdlclNlY3JldBIrLnRhaWxvci52MS5VcGRhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVxdWVzdBosLnRhaWxvci52MS5VcGRhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVzcG9uc2UiABJyChZHZXRTZWNyZXRNYW5hZ2VyU2VjcmV0EigudGFpbG9yLnYxLkdldFNlY3JldE1hbmFnZXJTZWNyZXRSZXF1ZXN0GikudGFpbG9yLnYxLkdldFNlY3JldE1hbmFnZXJTZWNyZXRSZXNwb25zZSIDkAIBEngKGURlbGV0ZVNlY3JldE1hbmFnZXJTZWNyZXQSKy50YWlsb3IudjEuRGVsZXRlU2VjcmV0TWFuYWdlclNlY3JldFJlcXVlc3QaLC50YWlsb3IudjEuRGVsZXRlU2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlIgASeAoYTGlzdFNlY3JldE1hbmFnZXJTZWNyZXRzEioudGFpbG9yLnYxLkxpc3RTZWNyZXRNYW5hZ2VyU2VjcmV0c1JlcXVlc3QaKy50YWlsb3IudjEuTGlzdFNlY3JldE1hbmFnZXJTZWNyZXRzUmVzcG9uc2UiA5ACARJgChFDcmVhdGVBdXRoU2VydmljZRIjLnRhaWxvci52MS5DcmVhdGVBdXRoU2VydmljZVJlcXVlc3QaJC50YWlsb3IudjEuQ3JlYXRlQXV0aFNlcnZpY2VSZXNwb25zZSIAEmAKEVVwZGF0ZUF1dGhTZXJ2aWNlEiMudGFpbG9yLnYxLlVwZGF0ZUF1dGhTZXJ2aWNlUmVxdWVzdBokLnRhaWxvci52MS5VcGRhdGVBdXRoU2VydmljZVJlc3BvbnNlIgASYAoRRGVsZXRlQXV0aFNlcnZpY2USIy50YWlsb3IudjEuRGVsZXRlQXV0aFNlcnZpY2VSZXF1ZXN0GiQudGFpbG9yLnYxLkRlbGV0ZUF1dGhTZXJ2aWNlUmVzcG9uc2UiABJaCg5HZXRBdXRoU2VydmljZRIgLnRhaWxvci52MS5HZXRBdXRoU2VydmljZVJlcXVlc3QaIS50YWlsb3IudjEuR2V0QXV0aFNlcnZpY2VSZXNwb25zZSIDkAIBEmAKEExpc3RBdXRoU2VydmljZXMSIi50YWlsb3IudjEuTGlzdEF1dGhTZXJ2aWNlc1JlcXVlc3QaIy50YWlsb3IudjEuTGlzdEF1dGhTZXJ2aWNlc1Jlc3BvbnNlIgOQAgESZgoTQ3JlYXRlQXV0aElEUENvbmZpZxIlLnRhaWxvci52MS5DcmVhdGVBdXRoSURQQ29uZmlnUmVxdWVzdBomLnRhaWxvci52MS5DcmVhdGVBdXRoSURQQ29uZmlnUmVzcG9uc2UiABJmChNVcGRhdGVBdXRoSURQQ29uZmlnEiUudGFpbG9yLnYxLlVwZGF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0GiYudGFpbG9yLnYxLlVwZGF0ZUF1dGhJRFBDb25maWdSZXNwb25zZSIAEmYKE0RlbGV0ZUF1dGhJRFBDb25maWcSJS50YWlsb3IudjEuRGVsZXRlQXV0aElEUENvbmZpZ1JlcXVlc3QaJi50YWlsb3IudjEuRGVsZXRlQXV0aElEUENvbmZpZ1Jlc3BvbnNlIgASYAoQR2V0QXV0aElEUENvbmZpZxIiLnRhaWxvci52MS5HZXRBdXRoSURQQ29uZmlnUmVxdWVzdBojLnRhaWxvci52MS5HZXRBdXRoSURQQ29uZmlnUmVzcG9uc2UiA5ACARJmChJMaXN0QXV0aElEUENvbmZpZ3MSJC50YWlsb3IudjEuTGlzdEF1dGhJRFBDb25maWdzUmVxdWVzdBolLnRhaWxvci52MS5MaXN0QXV0aElEUENvbmZpZ3NSZXNwb25zZSIDkAIBEnIKF0NyZWF0ZVVzZXJQcm9maWxlQ29uZmlnEikudGFpbG9yLnYxLkNyZWF0ZVVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBoqLnRhaWxvci52MS5DcmVhdGVVc2VyUHJvZmlsZUNvbmZpZ1Jlc3BvbnNlIgAScgoXVXBkYXRlVXNlclByb2ZpbGVDb25maWcSKS50YWlsb3IudjEuVXBkYXRlVXNlclByb2ZpbGVDb25maWdSZXF1ZXN0GioudGFpbG9yLnYxLlVwZGF0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2UiABJyChdEZWxldGVVc2VyUHJvZmlsZUNvbmZpZxIpLnRhaWxvci52MS5EZWxldGVVc2VyUHJvZmlsZUNvbmZpZ1JlcXVlc3QaKi50YWlsb3IudjEuRGVsZXRlVXNlclByb2ZpbGVDb25maWdSZXNwb25zZSIAEmwKFEdldFVzZXJQcm9maWxlQ29uZmlnEiYudGFpbG9yLnYxLkdldFVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBonLnRhaWxvci52MS5HZXRVc2VyUHJvZmlsZUNvbmZpZ1Jlc3BvbnNlIgOQAgESYwoSQ3JlYXRlVGVuYW50Q29uZmlnEiQudGFpbG9yLnYxLkNyZWF0ZVRlbmFudENvbmZpZ1JlcXVlc3QaJS50YWlsb3IudjEuQ3JlYXRlVGVuYW50Q29uZmlnUmVzcG9uc2UiABJjChJVcGRhdGVUZW5hbnRDb25maWcSJC50YWlsb3IudjEuVXBkYXRlVGVuYW50Q29uZmlnUmVxdWVzdBolLnRhaWxvci52MS5VcGRhdGVUZW5hbnRDb25maWdSZXNwb25zZSIAEmMKEkRlbGV0ZVRlbmFudENvbmZpZxIkLnRhaWxvci52MS5EZWxldGVUZW5hbnRDb25maWdSZXF1ZXN0GiUudGFpbG9yLnYxLkRlbGV0ZVRlbmFudENvbmZpZ1Jlc3BvbnNlIgASXQoPR2V0VGVuYW50Q29uZmlnEiEudGFpbG9yLnYxLkdldFRlbmFudENvbmZpZ1JlcXVlc3QaIi50YWlsb3IudjEuR2V0VGVuYW50Q29uZmlnUmVzcG9uc2UiA5ACARJ4ChlDcmVhdGVQZXJzb25hbEFjY2Vzc1Rva2VuEisudGFpbG9yLnYxLkNyZWF0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXF1ZXN0GiwudGFpbG9yLnYxLkNyZWF0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXNwb25zZSIAEngKGURlbGV0ZVBlcnNvbmFsQWNjZXNzVG9rZW4SKy50YWlsb3IudjEuRGVsZXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QaLC50YWlsb3IudjEuRGVsZXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlc3BvbnNlIgASeAoYTGlzdFBlcnNvbmFsQWNjZXNzVG9rZW5zEioudGFpbG9yLnYxLkxpc3RQZXJzb25hbEFjY2Vzc1Rva2Vuc1JlcXVlc3QaKy50YWlsb3IudjEuTGlzdFBlcnNvbmFsQWNjZXNzVG9rZW5zUmVzcG9uc2UiA5ACARJsChVDcmVhdGVBdXRoTWFjaGluZVVzZXISJy50YWlsb3IudjEuQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdBooLnRhaWxvci52MS5DcmVhdGVBdXRoTWFjaGluZVVzZXJSZXNwb25zZSIAEmwKFVVwZGF0ZUF1dGhNYWNoaW5lVXNlchInLnRhaWxvci52MS5VcGRhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0GigudGFpbG9yLnYxLlVwZGF0ZUF1dGhNYWNoaW5lVXNlclJlc3BvbnNlIgASbAoVRGVsZXRlQXV0aE1hY2hpbmVVc2VyEicudGFpbG9yLnYxLkRlbGV0ZUF1dGhNYWNoaW5lVXNlclJlcXVlc3QaKC50YWlsb3IudjEuRGVsZXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2UiABJmChJHZXRBdXRoTWFjaGluZVVzZXISJC50YWlsb3IudjEuR2V0QXV0aE1hY2hpbmVVc2VyUmVxdWVzdBolLnRhaWxvci52MS5HZXRBdXRoTWFjaGluZVVzZXJSZXNwb25zZSIDkAIBEmwKFExpc3RBdXRoTWFjaGluZVVzZXJzEiYudGFpbG9yLnYxLkxpc3RBdXRoTWFjaGluZVVzZXJzUmVxdWVzdBonLnRhaWxvci52MS5MaXN0QXV0aE1hY2hpbmVVc2Vyc1Jlc3BvbnNlIgOQAgESaQoUQ3JlYXRlQXV0aFNDSU1Db25maWcSJi50YWlsb3IudjEuQ3JlYXRlQXV0aFNDSU1Db25maWdSZXF1ZXN0GicudGFpbG9yLnYxLkNyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2UiABJpChRVcGRhdGVBdXRoU0NJTUNvbmZpZxImLnRhaWxvci52MS5VcGRhdGVBdXRoU0NJTUNvbmZpZ1JlcXVlc3QaJy50YWlsb3IudjEuVXBkYXRlQXV0aFNDSU1Db25maWdSZXNwb25zZSIAEmkKFERlbGV0ZUF1dGhTQ0lNQ29uZmlnEiYudGFpbG9yLnYxLkRlbGV0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBonLnRhaWxvci52MS5EZWxldGVBdXRoU0NJTUNvbmZpZ1Jlc3BvbnNlIgASYwoRR2V0QXV0aFNDSU1Db25maWcSIy50YWlsb3IudjEuR2V0QXV0aFNDSU1Db25maWdSZXF1ZXN0GiQudGFpbG9yLnYxLkdldEF1dGhTQ0lNQ29uZmlnUmVzcG9uc2UiA5ACARJvChZDcmVhdGVBdXRoU0NJTVJlc291cmNlEigudGFpbG9yLnYxLkNyZWF0ZUF1dGhTQ0lNUmVzb3VyY2VSZXF1ZXN0GikudGFpbG9yLnYxLkNyZWF0ZUF1dGhTQ0lNUmVzb3VyY2VSZXNwb25zZSIAEm8KFlVwZGF0ZUF1dGhTQ0lNUmVzb3VyY2USKC50YWlsb3IudjEuVXBkYXRlQXV0aFNDSU1SZXNvdXJjZVJlcXVlc3QaKS50YWlsb3IudjEuVXBkYXRlQXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlIgASbwoWRGVsZXRlQXV0aFNDSU1SZXNvdXJjZRIoLnRhaWxvci52MS5EZWxldGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2UiABJpChNHZXRBdXRoU0NJTVJlc291cmNlEiUudGFpbG9yLnYxLkdldEF1dGhTQ0lNUmVzb3VyY2VSZXF1ZXN0GiYudGFpbG9yLnYxLkdldEF1dGhTQ0lNUmVzb3VyY2VSZXNwb25zZSIDkAIBEmwKFEdldEF1dGhTQ0lNUmVzb3VyY2VzEiYudGFpbG9yLnYxLkdldEF1dGhTQ0lNUmVzb3VyY2VzUmVxdWVzdBonLnRhaWxvci52MS5HZXRBdXRoU0NJTVJlc291cmNlc1Jlc3BvbnNlIgOQAgESaQoUQ3JlYXRlQXV0aENvbm5lY3Rpb24SJi50YWlsb3IudjEuQ3JlYXRlQXV0aENvbm5lY3Rpb25SZXF1ZXN0GicudGFpbG9yLnYxLkNyZWF0ZUF1dGhDb25uZWN0aW9uUmVzcG9uc2UiABJpChNMaXN0QXV0aENvbm5lY3Rpb25zEiUudGFpbG9yLnYxLkxpc3RBdXRoQ29ubmVjdGlvbnNSZXF1ZXN0GiYudGFpbG9yLnYxLkxpc3RBdXRoQ29ubmVjdGlvbnNSZXNwb25zZSIDkAIBEmkKFFJldm9rZUF1dGhDb25uZWN0aW9uEiYudGFpbG9yLnYxLlJldm9rZUF1dGhDb25uZWN0aW9uUmVxdWVzdBonLnRhaWxvci52MS5SZXZva2VBdXRoQ29ubmVjdGlvblJlc3BvbnNlIgAShAEKHVJlZ2lzdGVyQXV0aENvbm5lY3Rpb25TZXNzaW9uEi8udGFpbG9yLnYxLlJlZ2lzdGVyQXV0aENvbm5lY3Rpb25TZXNzaW9uUmVxdWVzdBowLnRhaWxvci52MS5SZWdpc3RlckF1dGhDb25uZWN0aW9uU2Vzc2lvblJlc3BvbnNlIgASogEKJ0V4Y2hhbmdlQXV0aENvbm5lY3Rpb25BdXRob3JpemF0aW9uQ29kZRI5LnRhaWxvci52MS5FeGNoYW5nZUF1dGhDb25uZWN0aW9uQXV0aG9yaXphdGlvbkNvZGVSZXF1ZXN0GjoudGFpbG9yLnYxLkV4Y2hhbmdlQXV0aENvbm5lY3Rpb25BdXRob3JpemF0aW9uQ29kZVJlc3BvbnNlIgASbwoWQ3JlYXRlQXV0aE9BdXRoMkNsaWVudBIoLnRhaWxvci52MS5DcmVhdGVBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBopLnRhaWxvci52MS5DcmVhdGVBdXRoT0F1dGgyQ2xpZW50UmVzcG9uc2UiABJvChZVcGRhdGVBdXRoT0F1dGgyQ2xpZW50EigudGFpbG9yLnYxLlVwZGF0ZUF1dGhPQXV0aDJDbGllbnRSZXF1ZXN0GikudGFpbG9yLnYxLlVwZGF0ZUF1dGhPQXV0aDJDbGllbnRSZXNwb25zZSIAEm8KFkRlbGV0ZUF1dGhPQXV0aDJDbGllbnQSKC50YWlsb3IudjEuRGVsZXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QaKS50YWlsb3IudjEuRGVsZXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlIgASaQoTR2V0QXV0aE9BdXRoMkNsaWVudBIlLnRhaWxvci52MS5HZXRBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBomLnRhaWxvci52MS5HZXRBdXRoT0F1dGgyQ2xpZW50UmVzcG9uc2UiA5ACARJvChVMaXN0QXV0aE9BdXRoMkNsaWVudHMSJy50YWlsb3IudjEuTGlzdEF1dGhPQXV0aDJDbGllbnRzUmVxdWVzdBooLnRhaWxvci52MS5MaXN0QXV0aE9BdXRoMkNsaWVudHNSZXNwb25zZSIDkAIBEmkKE0xpc3REYXRhcGxhbmVFdmVudHMSJS50YWlsb3IudjEuTGlzdERhdGFwbGFuZUV2ZW50c1JlcXVlc3QaJi50YWlsb3IudjEuTGlzdERhdGFwbGFuZUV2ZW50c1Jlc3BvbnNlIgOQAgEShAEKHExpc3RDb250cm9scGxhbmVBY3Rpdml0eUxvZ3MSLi50YWlsb3IudjEuTGlzdENvbnRyb2xwbGFuZUFjdGl2aXR5TG9nc1JlcXVlc3QaLy50YWlsb3IudjEuTGlzdENvbnRyb2xwbGFuZUFjdGl2aXR5TG9nc1Jlc3BvbnNlIgOQAgESVwoOVGVzdEV4ZWNTY3JpcHQSIC50YWlsb3IudjEuVGVzdEV4ZWNTY3JpcHRSZXF1ZXN0GiEudGFpbG9yLnYxLlRlc3RFeGVjU2NyaXB0UmVzcG9uc2UiABJsChRHZXRGdW5jdGlvbkV4ZWN1dGlvbhImLnRhaWxvci52MS5HZXRGdW5jdGlvbkV4ZWN1dGlvblJlcXVlc3QaJy50YWlsb3IudjEuR2V0RnVuY3Rpb25FeGVjdXRpb25SZXNwb25zZSIDkAIBEnIKFkxpc3RGdW5jdGlvbkV4ZWN1dGlvbnMSKC50YWlsb3IudjEuTGlzdEZ1bmN0aW9uRXhlY3V0aW9uc1JlcXVlc3QaKS50YWlsb3IudjEuTGlzdEZ1bmN0aW9uRXhlY3V0aW9uc1Jlc3BvbnNlIgOQAgEScQoWQ3JlYXRlRnVuY3Rpb25SZWdpc3RyeRIoLnRhaWxvci52MS5DcmVhdGVGdW5jdGlvblJlZ2lzdHJ5UmVxdWVzdBopLnRhaWxvci52MS5DcmVhdGVGdW5jdGlvblJlZ2lzdHJ5UmVzcG9uc2UiACgBEnEKFlVwZGF0ZUZ1bmN0aW9uUmVnaXN0cnkSKC50YWlsb3IudjEuVXBkYXRlRnVuY3Rpb25SZWdpc3RyeVJlcXVlc3QaKS50YWlsb3IudjEuVXBkYXRlRnVuY3Rpb25SZWdpc3RyeVJlc3BvbnNlIgAoARJpChNHZXRGdW5jdGlvblJlZ2lzdHJ5EiUudGFpbG9yLnYxLkdldEZ1bmN0aW9uUmVnaXN0cnlSZXF1ZXN0GiYudGFpbG9yLnYxLkdldEZ1bmN0aW9uUmVnaXN0cnlSZXNwb25zZSIDkAIBEnIKFkxpc3RGdW5jdGlvblJlZ2lzdHJpZXMSKC50YWlsb3IudjEuTGlzdEZ1bmN0aW9uUmVnaXN0cmllc1JlcXVlc3QaKS50YWlsb3IudjEuTGlzdEZ1bmN0aW9uUmVnaXN0cmllc1Jlc3BvbnNlIgOQAgESbwoWRGVsZXRlRnVuY3Rpb25SZWdpc3RyeRIoLnRhaWxvci52MS5EZWxldGVGdW5jdGlvblJlZ2lzdHJ5UmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVGdW5jdGlvblJlZ2lzdHJ5UmVzcG9uc2UiABKMAQoeRG93bmxvYWRGdW5jdGlvblJlZ2lzdHJ5U2NyaXB0EjAudGFpbG9yLnYxLkRvd25sb2FkRnVuY3Rpb25SZWdpc3RyeVNjcmlwdFJlcXVlc3QaMS50YWlsb3IudjEuRG93bmxvYWRGdW5jdGlvblJlZ2lzdHJ5U2NyaXB0UmVzcG9uc2UiA5ACATABEnIKFkxpc3RNZXRlclJlcXVlc3RDb3VudHMSKC50YWlsb3IudjEuTGlzdE1ldGVyUmVxdWVzdENvdW50c1JlcXVlc3QaKS50YWlsb3IudjEuTGlzdE1ldGVyUmVxdWVzdENvdW50c1Jlc3BvbnNlIgOQAgESeAoYTGlzdE1ldGVyRXhlY3V0aW9uQ291bnRzEioudGFpbG9yLnYxLkxpc3RNZXRlckV4ZWN1dGlvbkNvdW50c1JlcXVlc3QaKy50YWlsb3IudjEuTGlzdE1ldGVyRXhlY3V0aW9uQ291bnRzUmVzcG9uc2UiA5ACARJsChRMaXN0TWV0ZXJFdmVudENvdW50cxImLnRhaWxvci52MS5MaXN0TWV0ZXJFdmVudENvdW50c1JlcXVlc3QaJy50YWlsb3IudjEuTGlzdE1ldGVyRXZlbnRDb3VudHNSZXNwb25zZSIDkAIBEl0KD0xpc3RJZFBTZXJ2aWNlcxIhLnRhaWxvci52MS5MaXN0SWRQU2VydmljZXNSZXF1ZXN0GiIudGFpbG9yLnYxLkxpc3RJZFBTZXJ2aWNlc1Jlc3BvbnNlIgOQAgESXQoQQ3JlYXRlSWRQU2VydmljZRIiLnRhaWxvci52MS5DcmVhdGVJZFBTZXJ2aWNlUmVxdWVzdBojLnRhaWxvci52MS5DcmVhdGVJZFBTZXJ2aWNlUmVzcG9uc2UiABJdChBVcGRhdGVJZFBTZXJ2aWNlEiIudGFpbG9yLnYxLlVwZGF0ZUlkUFNlcnZpY2VSZXF1ZXN0GiMudGFpbG9yLnYxLlVwZGF0ZUlkUFNlcnZpY2VSZXNwb25zZSIAEl0KEERlbGV0ZUlkUFNlcnZpY2USIi50YWlsb3IudjEuRGVsZXRlSWRQU2VydmljZVJlcXVlc3QaIy50YWlsb3IudjEuRGVsZXRlSWRQU2VydmljZVJlc3BvbnNlIgASVwoNR2V0SWRQU2VydmljZRIfLnRhaWxvci52MS5HZXRJZFBTZXJ2aWNlUmVxdWVzdBogLnRhaWxvci52MS5HZXRJZFBTZXJ2aWNlUmVzcG9uc2UiA5ACARJaCg5MaXN0SWRQQ2xpZW50cxIgLnRhaWxvci52MS5MaXN0SWRQQ2xpZW50c1JlcXVlc3QaIS50YWlsb3IudjEuTGlzdElkUENsaWVudHNSZXNwb25zZSIDkAIBEloKD0NyZWF0ZUlkUENsaWVudBIhLnRhaWxvci52MS5DcmVhdGVJZFBDbGllbnRSZXF1ZXN0GiIudGFpbG9yLnYxLkNyZWF0ZUlkUENsaWVudFJlc3BvbnNlIgASWgoPRGVsZXRlSWRQQ2xpZW50EiEudGFpbG9yLnYxLkRlbGV0ZUlkUENsaWVudFJlcXVlc3QaIi50YWlsb3IudjEuRGVsZXRlSWRQQ2xpZW50UmVzcG9uc2UiABJUCgxHZXRJZFBDbGllbnQSHi50YWlsb3IudjEuR2V0SWRQQ2xpZW50UmVxdWVzdBofLnRhaWxvci52MS5HZXRJZFBDbGllbnRSZXNwb25zZSIDkAIBEmYKE0NyZWF0ZVN0YXRpY1dlYnNpdGUSJS50YWlsb3IudjEuQ3JlYXRlU3RhdGljV2Vic2l0ZVJlcXVlc3QaJi50YWlsb3IudjEuQ3JlYXRlU3RhdGljV2Vic2l0ZVJlc3BvbnNlIgASZgoTVXBkYXRlU3RhdGljV2Vic2l0ZRIlLnRhaWxvci52MS5VcGRhdGVTdGF0aWNXZWJzaXRlUmVxdWVzdBomLnRhaWxvci52MS5VcGRhdGVTdGF0aWNXZWJzaXRlUmVzcG9uc2UiABJmChNEZWxldGVTdGF0aWNXZWJzaXRlEiUudGFpbG9yLnYxLkRlbGV0ZVN0YXRpY1dlYnNpdGVSZXF1ZXN0GiYudGFpbG9yLnYxLkRlbGV0ZVN0YXRpY1dlYnNpdGVSZXNwb25zZSIAEmAKEEdldFN0YXRpY1dlYnNpdGUSIi50YWlsb3IudjEuR2V0U3RhdGljV2Vic2l0ZVJlcXVlc3QaIy50YWlsb3IudjEuR2V0U3RhdGljV2Vic2l0ZVJlc3BvbnNlIgOQAgESZgoSTGlzdFN0YXRpY1dlYnNpdGVzEiQudGFpbG9yLnYxLkxpc3RTdGF0aWNXZWJzaXRlc1JlcXVlc3QaJS50YWlsb3IudjEuTGlzdFN0YXRpY1dlYnNpdGVzUmVzcG9uc2UiA5ACARJdChBDcmVhdGVEZXBsb3ltZW50EiIudGFpbG9yLnYxLkNyZWF0ZURlcGxveW1lbnRSZXF1ZXN0GiMudGFpbG9yLnYxLkNyZWF0ZURlcGxveW1lbnRSZXNwb25zZSIAEk0KClVwbG9hZEZpbGUSHC50YWlsb3IudjEuVXBsb2FkRmlsZVJlcXVlc3QaHS50YWlsb3IudjEuVXBsb2FkRmlsZVJlc3BvbnNlIgAoARJgChFQdWJsaXNoRGVwbG95bWVudBIjLnRhaWxvci52MS5QdWJsaXNoRGVwbG95bWVudFJlcXVlc3QaJC50YWlsb3IudjEuUHVibGlzaERlcGxveW1lbnRSZXNwb25zZSIAElcKDkNyZWF0ZVdvcmtmbG93EiAudGFpbG9yLnYxLkNyZWF0ZVdvcmtmbG93UmVxdWVzdBohLnRhaWxvci52MS5DcmVhdGVXb3JrZmxvd1Jlc3BvbnNlIgASVwoOVXBkYXRlV29ya2Zsb3cSIC50YWlsb3IudjEuVXBkYXRlV29ya2Zsb3dSZXF1ZXN0GiEudGFpbG9yLnYxLlVwZGF0ZVdvcmtmbG93UmVzcG9uc2UiABJXCg5EZWxldGVXb3JrZmxvdxIgLnRhaWxvci52MS5EZWxldGVXb3JrZmxvd1JlcXVlc3QaIS50YWlsb3IudjEuRGVsZXRlV29ya2Zsb3dSZXNwb25zZSIAElEKC0dldFdvcmtmbG93Eh0udGFpbG9yLnYxLkdldFdvcmtmbG93UmVxdWVzdBoeLnRhaWxvci52MS5HZXRXb3JrZmxvd1Jlc3BvbnNlIgOQAgESYwoRR2V0V29ya2Zsb3dCeU5hbWUSIy50YWlsb3IudjEuR2V0V29ya2Zsb3dCeU5hbWVSZXF1ZXN0GiQudGFpbG9yLnYxLkdldFdvcmtmbG93QnlOYW1lUmVzcG9uc2UiA5ACARJXCg1MaXN0V29ya2Zsb3dzEh8udGFpbG9yLnYxLkxpc3RXb3JrZmxvd3NSZXF1ZXN0GiAudGFpbG9yLnYxLkxpc3RXb3JrZmxvd3NSZXNwb25zZSIDkAIBEngKGUNyZWF0ZVdvcmtmbG93Sm9iRnVuY3Rpb24SKy50YWlsb3IudjEuQ3JlYXRlV29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QaLC50YWlsb3IudjEuQ3JlYXRlV29ya2Zsb3dKb2JGdW5jdGlvblJlc3BvbnNlIgASeAoZVXBkYXRlV29ya2Zsb3dKb2JGdW5jdGlvbhIrLnRhaWxvci52MS5VcGRhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uUmVxdWVzdBosLnRhaWxvci52MS5VcGRhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uUmVzcG9uc2UiABJyChZHZXRXb3JrZmxvd0pvYkZ1bmN0aW9uEigudGFpbG9yLnYxLkdldFdvcmtmbG93Sm9iRnVuY3Rpb25SZXF1ZXN0GikudGFpbG9yLnYxLkdldFdvcmtmbG93Sm9iRnVuY3Rpb25SZXNwb25zZSIDkAIBEoQBChxHZXRXb3JrZmxvd0pvYkZ1bmN0aW9uQnlOYW1lEi4udGFpbG9yLnYxLkdldFdvcmtmbG93Sm9iRnVuY3Rpb25CeU5hbWVSZXF1ZXN0Gi8udGFpbG9yLnYxLkdldFdvcmtmbG93Sm9iRnVuY3Rpb25CeU5hbWVSZXNwb25zZSIDkAIBEngKGExpc3RXb3JrZmxvd0pvYkZ1bmN0aW9ucxIqLnRhaWxvci52MS5MaXN0V29ya2Zsb3dKb2JGdW5jdGlvbnNSZXF1ZXN0GisudGFpbG9yLnYxLkxpc3RXb3JrZmxvd0pvYkZ1bmN0aW9uc1Jlc3BvbnNlIgOQAgESbAoUR2V0V29ya2Zsb3dFeGVjdXRpb24SJi50YWlsb3IudjEuR2V0V29ya2Zsb3dFeGVjdXRpb25SZXF1ZXN0GicudGFpbG9yLnYxLkdldFdvcmtmbG93RXhlY3V0aW9uUmVzcG9uc2UiA5ACARJyChZMaXN0V29ya2Zsb3dFeGVjdXRpb25zEigudGFpbG9yLnYxLkxpc3RXb3JrZmxvd0V4ZWN1dGlvbnNSZXF1ZXN0GikudGFpbG9yLnYxLkxpc3RXb3JrZmxvd0V4ZWN1dGlvbnNSZXNwb25zZSIDkAIBEmAKEVRlc3RTdGFydFdvcmtmbG93EiMudGFpbG9yLnYxLlRlc3RTdGFydFdvcmtmbG93UmVxdWVzdBokLnRhaWxvci52MS5UZXN0U3RhcnRXb3JrZmxvd1Jlc3BvbnNlIgASYwoSVGVzdFJlc3VtZVdvcmtmbG93EiQudGFpbG9yLnYxLlRlc3RSZXN1bWVXb3JrZmxvd1JlcXVlc3QaJS50YWlsb3IudjEuVGVzdFJlc3VtZVdvcmtmbG93UmVzcG9uc2UiABJOCgtTZXRNZXRhZGF0YRIdLnRhaWxvci52MS5TZXRNZXRhZGF0YVJlcXVlc3QaHi50YWlsb3IudjEuU2V0TWV0YWRhdGFSZXNwb25zZSIAElEKC0dldE1ldGFkYXRhEh0udGFpbG9yLnYxLkdldE1ldGFkYXRhUmVxdWVzdBoeLnRhaWxvci52MS5HZXRNZXRhZGF0YVJlc3BvbnNlIgOQAgEShAEKHUNyZWF0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyEi8udGFpbG9yLnYxLkNyZWF0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVxdWVzdBowLnRhaWxvci52MS5DcmVhdGVDb250cm9scGxhbmVNYWNoaW5lVXNlclJlc3BvbnNlIgAShAEKHVVwZGF0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyEi8udGFpbG9yLnYxLlVwZGF0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVxdWVzdBowLnRhaWxvci52MS5VcGRhdGVDb250cm9scGxhbmVNYWNoaW5lVXNlclJlc3BvbnNlIgASfgoaR2V0Q29udHJvbHBsYW5lTWFjaGluZVVzZXISLC50YWlsb3IudjEuR2V0Q29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXF1ZXN0Gi0udGFpbG9yLnYxLkdldENvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVzcG9uc2UiA5ACARKEAQocTGlzdENvbnRyb2xwbGFuZU1hY2hpbmVVc2VycxIuLnRhaWxvci52MS5MaXN0Q29udHJvbHBsYW5lTWFjaGluZVVzZXJzUmVxdWVzdBovLnRhaWxvci52MS5MaXN0Q29udHJvbHBsYW5lTWFjaGluZVVzZXJzUmVzcG9uc2UiA5ACARKEAQodRGVsZXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXISLy50YWlsb3IudjEuRGVsZXRlQ29udHJvbHBsYW5lTWFjaGluZVVzZXJSZXF1ZXN0GjAudGFpbG9yLnYxLkRlbGV0ZUNvbnRyb2xwbGFuZU1hY2hpbmVVc2VyUmVzcG9uc2UiAGIGcHJvdG8z", [
|
|
948
949
|
file_tailor_v1_application,
|
|
949
950
|
file_tailor_v1_auth,
|
|
950
951
|
file_tailor_v1_events,
|
|
@@ -972,7 +973,7 @@ const OperatorService = /* @__PURE__ */ serviceDesc(file_tailor_v1_service, 0);
|
|
|
972
973
|
let packageJson = null;
|
|
973
974
|
/**
|
|
974
975
|
* Read and cache the package.json of the SDK package.
|
|
975
|
-
* @returns
|
|
976
|
+
* @returns Parsed package.json contents
|
|
976
977
|
*/
|
|
977
978
|
async function readPackageJson() {
|
|
978
979
|
if (packageJson) return packageJson;
|
|
@@ -987,7 +988,7 @@ const oauth2ClientId = process.env.PLATFORM_OAUTH2_CLIENT_ID ?? "cpoc_0Iudir72fq
|
|
|
987
988
|
const oauth2DiscoveryEndpoint = "/.well-known/oauth-authorization-server/oauth2/platform";
|
|
988
989
|
/**
|
|
989
990
|
* Initialize an OAuth2 client for Tailor Platform.
|
|
990
|
-
* @returns
|
|
991
|
+
* @returns Configured OAuth2 client
|
|
991
992
|
*/
|
|
992
993
|
function initOAuth2Client() {
|
|
993
994
|
return new OAuth2Client({
|
|
@@ -998,8 +999,8 @@ function initOAuth2Client() {
|
|
|
998
999
|
}
|
|
999
1000
|
/**
|
|
1000
1001
|
* Initialize an Operator client with the given access token.
|
|
1001
|
-
* @param
|
|
1002
|
-
* @returns
|
|
1002
|
+
* @param accessToken - Access token for authentication
|
|
1003
|
+
* @returns Configured Operator client
|
|
1003
1004
|
*/
|
|
1004
1005
|
async function initOperatorClient(accessToken) {
|
|
1005
1006
|
return createClient(OperatorService, createConnectTransport({
|
|
@@ -1015,7 +1016,7 @@ async function initOperatorClient(accessToken) {
|
|
|
1015
1016
|
}
|
|
1016
1017
|
/**
|
|
1017
1018
|
* Create an interceptor that sets a User-Agent header.
|
|
1018
|
-
* @returns
|
|
1019
|
+
* @returns User-Agent interceptor
|
|
1019
1020
|
*/
|
|
1020
1021
|
async function userAgentInterceptor() {
|
|
1021
1022
|
const ua = await userAgent();
|
|
@@ -1026,15 +1027,15 @@ async function userAgentInterceptor() {
|
|
|
1026
1027
|
}
|
|
1027
1028
|
/**
|
|
1028
1029
|
* Build the User-Agent string for CLI requests.
|
|
1029
|
-
* @returns
|
|
1030
|
+
* @returns User-Agent header value
|
|
1030
1031
|
*/
|
|
1031
1032
|
async function userAgent() {
|
|
1032
1033
|
return `tailor-sdk/${(await readPackageJson()).version ?? "unknown"}`;
|
|
1033
1034
|
}
|
|
1034
1035
|
/**
|
|
1035
1036
|
* Create an interceptor that sets the Authorization bearer token.
|
|
1036
|
-
* @param
|
|
1037
|
-
* @returns
|
|
1037
|
+
* @param accessToken - Access token to use
|
|
1038
|
+
* @returns Bearer token interceptor
|
|
1038
1039
|
*/
|
|
1039
1040
|
async function bearerTokenInterceptor(accessToken) {
|
|
1040
1041
|
return (next) => async (req) => {
|
|
@@ -1044,7 +1045,7 @@ async function bearerTokenInterceptor(accessToken) {
|
|
|
1044
1045
|
}
|
|
1045
1046
|
/**
|
|
1046
1047
|
* Create an interceptor that retries idempotent requests with backoff.
|
|
1047
|
-
* @returns
|
|
1048
|
+
* @returns Retry interceptor
|
|
1048
1049
|
*/
|
|
1049
1050
|
function retryInterceptor() {
|
|
1050
1051
|
return (next) => async (req) => {
|
|
@@ -1067,8 +1068,8 @@ function retryInterceptor() {
|
|
|
1067
1068
|
}
|
|
1068
1069
|
/**
|
|
1069
1070
|
* Wait for an exponential backoff delay with jitter.
|
|
1070
|
-
* @param
|
|
1071
|
-
* @returns
|
|
1071
|
+
* @param attempt - Current retry attempt number (1-based)
|
|
1072
|
+
* @returns Promise that resolves after the delay
|
|
1072
1073
|
*/
|
|
1073
1074
|
function waitRetryBackoff(attempt) {
|
|
1074
1075
|
const backoff = 50 * 2 ** (attempt - 1) * (1 + .1 * (Math.random() * 2 - 1));
|
|
@@ -1076,9 +1077,9 @@ function waitRetryBackoff(attempt) {
|
|
|
1076
1077
|
}
|
|
1077
1078
|
/**
|
|
1078
1079
|
* Determine whether the given error is retriable for the method idempotency.
|
|
1079
|
-
* @param
|
|
1080
|
-
* @param
|
|
1081
|
-
* @returns
|
|
1080
|
+
* @param error - Error thrown by the request
|
|
1081
|
+
* @param idempotency - Method idempotency level
|
|
1082
|
+
* @returns True if the error should be retried
|
|
1082
1083
|
*/
|
|
1083
1084
|
function isRetirable(error, idempotency) {
|
|
1084
1085
|
if (!(error instanceof ConnectError)) return false;
|
|
@@ -1090,7 +1091,7 @@ function isRetirable(error, idempotency) {
|
|
|
1090
1091
|
}
|
|
1091
1092
|
/**
|
|
1092
1093
|
* Create an interceptor that enhances error messages from the Operator API.
|
|
1093
|
-
* @returns
|
|
1094
|
+
* @returns Error handling interceptor
|
|
1094
1095
|
*/
|
|
1095
1096
|
function errorHandlingInterceptor() {
|
|
1096
1097
|
return (next) => async (req) => {
|
|
@@ -1108,8 +1109,8 @@ function errorHandlingInterceptor() {
|
|
|
1108
1109
|
}
|
|
1109
1110
|
/**
|
|
1110
1111
|
* @internal
|
|
1111
|
-
* @param
|
|
1112
|
-
* @returns
|
|
1112
|
+
* @param methodName - RPC method name (e.g., "CreateWorkspace")
|
|
1113
|
+
* @returns Parsed operation and resource type
|
|
1113
1114
|
*/
|
|
1114
1115
|
function parseMethodName(methodName) {
|
|
1115
1116
|
const match = methodName.match(/^(Create|Update|Delete|Set|List|Get)(.+)$/);
|
|
@@ -1125,8 +1126,8 @@ function parseMethodName(methodName) {
|
|
|
1125
1126
|
}
|
|
1126
1127
|
/**
|
|
1127
1128
|
* @internal
|
|
1128
|
-
* @param
|
|
1129
|
-
* @returns
|
|
1129
|
+
* @param message - Request message to format
|
|
1130
|
+
* @returns Pretty-printed JSON or error placeholder
|
|
1130
1131
|
*/
|
|
1131
1132
|
function formatRequestParams(message) {
|
|
1132
1133
|
try {
|
|
@@ -1139,8 +1140,8 @@ function formatRequestParams(message) {
|
|
|
1139
1140
|
/**
|
|
1140
1141
|
* Fetch all paginated resources by repeatedly calling the given function.
|
|
1141
1142
|
* @template T
|
|
1142
|
-
* @param
|
|
1143
|
-
* @returns
|
|
1143
|
+
* @param fn - Page fetcher returning items and next page token
|
|
1144
|
+
* @returns All fetched items
|
|
1144
1145
|
*/
|
|
1145
1146
|
async function fetchAll(fn) {
|
|
1146
1147
|
const items = [];
|
|
@@ -1155,8 +1156,8 @@ async function fetchAll(fn) {
|
|
|
1155
1156
|
}
|
|
1156
1157
|
/**
|
|
1157
1158
|
* Fetch user info from the Tailor Platform userinfo endpoint.
|
|
1158
|
-
* @param
|
|
1159
|
-
* @returns
|
|
1159
|
+
* @param accessToken - Access token for the current user
|
|
1160
|
+
* @returns Parsed user info
|
|
1160
1161
|
*/
|
|
1161
1162
|
async function fetchUserInfo(accessToken) {
|
|
1162
1163
|
const userInfoUrl = new URL("/auth/platform/userinfo", platformBaseUrl).href;
|
|
@@ -1170,11 +1171,11 @@ async function fetchUserInfo(accessToken) {
|
|
|
1170
1171
|
}
|
|
1171
1172
|
/**
|
|
1172
1173
|
* Resolve "name:url" patterns to actual Static Website URLs.
|
|
1173
|
-
* @param
|
|
1174
|
-
* @param
|
|
1175
|
-
* @param
|
|
1176
|
-
* @param
|
|
1177
|
-
* @returns
|
|
1174
|
+
* @param client - Operator client instance
|
|
1175
|
+
* @param workspaceId - Workspace ID
|
|
1176
|
+
* @param urls - URLs or name:url patterns
|
|
1177
|
+
* @param context - Logging context (e.g., "CORS", "OAuth2 redirect URIs")
|
|
1178
|
+
* @returns Resolved URLs
|
|
1178
1179
|
*/
|
|
1179
1180
|
async function resolveStaticWebsiteUrls(client, workspaceId, urls, context) {
|
|
1180
1181
|
if (!urls) return [];
|
|
@@ -1203,10 +1204,10 @@ async function resolveStaticWebsiteUrls(client, workspaceId, urls, context) {
|
|
|
1203
1204
|
}
|
|
1204
1205
|
/**
|
|
1205
1206
|
* Fetch an OAuth2 access token for a machine user.
|
|
1206
|
-
* @param
|
|
1207
|
-
* @param
|
|
1208
|
-
* @param
|
|
1209
|
-
* @returns
|
|
1207
|
+
* @param url - OAuth2 server base URL
|
|
1208
|
+
* @param clientId - Client ID for the machine user
|
|
1209
|
+
* @param clientSecret - Client secret for the machine user
|
|
1210
|
+
* @returns Access token
|
|
1210
1211
|
*/
|
|
1211
1212
|
async function fetchMachineUserToken(url, clientId, clientSecret) {
|
|
1212
1213
|
const tokenEndpoint = new URL("/oauth2/token", url).href;
|
|
@@ -1252,7 +1253,7 @@ function platformConfigPath() {
|
|
|
1252
1253
|
}
|
|
1253
1254
|
/**
|
|
1254
1255
|
* Read Tailor Platform CLI configuration, migrating from tailorctl if necessary.
|
|
1255
|
-
* @returns
|
|
1256
|
+
* @returns Parsed platform configuration
|
|
1256
1257
|
*/
|
|
1257
1258
|
function readPlatformConfig() {
|
|
1258
1259
|
const configPath = platformConfigPath();
|
|
@@ -1273,8 +1274,7 @@ function readPlatformConfig() {
|
|
|
1273
1274
|
}
|
|
1274
1275
|
/**
|
|
1275
1276
|
* Write Tailor Platform CLI configuration to disk.
|
|
1276
|
-
* @param
|
|
1277
|
-
* @returns {void}
|
|
1277
|
+
* @param config - Platform configuration to write
|
|
1278
1278
|
*/
|
|
1279
1279
|
function writePlatformConfig(config) {
|
|
1280
1280
|
const configPath = platformConfigPath();
|
|
@@ -1331,10 +1331,8 @@ function validateUUID(value, source) {
|
|
|
1331
1331
|
/**
|
|
1332
1332
|
* Load workspace ID from command options, environment variables, or platform config.
|
|
1333
1333
|
* Priority: opts/workspaceId > env/workspaceId > opts/profile > env/profile > error
|
|
1334
|
-
* @param
|
|
1335
|
-
* @
|
|
1336
|
-
* @param {string} [opts.profile] - Workspace profile name
|
|
1337
|
-
* @returns {string} Resolved workspace ID
|
|
1334
|
+
* @param opts - Workspace and profile options
|
|
1335
|
+
* @returns Resolved workspace ID
|
|
1338
1336
|
*/
|
|
1339
1337
|
function loadWorkspaceId(opts) {
|
|
1340
1338
|
if (opts?.workspaceId) return validateUUID(opts.workspaceId, "--workspace-id option");
|
|
@@ -1353,10 +1351,8 @@ function loadWorkspaceId(opts) {
|
|
|
1353
1351
|
/**
|
|
1354
1352
|
* Load access token from command options, environment variables, or platform config.
|
|
1355
1353
|
* Priority: env/TAILOR_PLATFORM_TOKEN > env/TAILOR_TOKEN (deprecated) > opts/profile > env/profile > config/currentUser > error
|
|
1356
|
-
* @param
|
|
1357
|
-
* @
|
|
1358
|
-
* @param {string} [opts.profile] - Profile name
|
|
1359
|
-
* @returns {Promise<string>} Resolved access token
|
|
1354
|
+
* @param opts - Profile options
|
|
1355
|
+
* @returns Resolved access token
|
|
1360
1356
|
*/
|
|
1361
1357
|
async function loadAccessToken(opts) {
|
|
1362
1358
|
if (process.env.TAILOR_PLATFORM_TOKEN) return process.env.TAILOR_PLATFORM_TOKEN;
|
|
@@ -1383,9 +1379,9 @@ async function loadAccessToken(opts) {
|
|
|
1383
1379
|
}
|
|
1384
1380
|
/**
|
|
1385
1381
|
* Fetch the latest access token, refreshing if necessary.
|
|
1386
|
-
* @param
|
|
1387
|
-
* @param
|
|
1388
|
-
* @returns
|
|
1382
|
+
* @param config - Platform config
|
|
1383
|
+
* @param user - User name
|
|
1384
|
+
* @returns Latest access token
|
|
1389
1385
|
*/
|
|
1390
1386
|
async function fetchLatestToken(config, user) {
|
|
1391
1387
|
const tokens = config.users[user];
|
|
@@ -1420,8 +1416,8 @@ const DEFAULT_CONFIG_FILENAME = "tailor.config.ts";
|
|
|
1420
1416
|
/**
|
|
1421
1417
|
* Load config path from command options or environment variables.
|
|
1422
1418
|
* Priority: opts/config > env/config > search parent directories
|
|
1423
|
-
* @param
|
|
1424
|
-
* @returns
|
|
1419
|
+
* @param configPath - Optional explicit config path
|
|
1420
|
+
* @returns Resolved config path or undefined
|
|
1425
1421
|
*/
|
|
1426
1422
|
function loadConfigPath(configPath) {
|
|
1427
1423
|
if (configPath) return configPath;
|
|
@@ -1431,8 +1427,8 @@ function loadConfigPath(configPath) {
|
|
|
1431
1427
|
/**
|
|
1432
1428
|
* Load organization ID from command options or environment variables.
|
|
1433
1429
|
* Priority: opts/organizationId > env/organizationId > undefined (optional)
|
|
1434
|
-
* @param
|
|
1435
|
-
* @returns
|
|
1430
|
+
* @param organizationId - Organization ID override
|
|
1431
|
+
* @returns Resolved organization ID or undefined
|
|
1436
1432
|
*/
|
|
1437
1433
|
function loadOrganizationId(organizationId) {
|
|
1438
1434
|
if (organizationId) return validateUUID(organizationId, "--organization-id option");
|
|
@@ -1441,8 +1437,8 @@ function loadOrganizationId(organizationId) {
|
|
|
1441
1437
|
/**
|
|
1442
1438
|
* Load folder ID from command options or environment variables.
|
|
1443
1439
|
* Priority: opts/folderId > env/folderId > undefined (optional)
|
|
1444
|
-
* @param
|
|
1445
|
-
* @returns
|
|
1440
|
+
* @param folderId - Folder ID override
|
|
1441
|
+
* @returns Resolved folder ID or undefined
|
|
1446
1442
|
*/
|
|
1447
1443
|
function loadFolderId(folderId) {
|
|
1448
1444
|
if (folderId) return validateUUID(folderId, "--folder-id option");
|
|
@@ -1454,8 +1450,8 @@ function loadFolderId(folderId) {
|
|
|
1454
1450
|
/**
|
|
1455
1451
|
* Call Tailor Platform API endpoints directly.
|
|
1456
1452
|
* If the endpoint doesn't contain "/", it defaults to `tailor.v1.OperatorService/{endpoint}`.
|
|
1457
|
-
* @param
|
|
1458
|
-
* @returns
|
|
1453
|
+
* @param options - API call options (profile, endpoint, body)
|
|
1454
|
+
* @returns Response status and data
|
|
1459
1455
|
*/
|
|
1460
1456
|
async function apiCall(options) {
|
|
1461
1457
|
const accessToken = await loadAccessToken({
|
|
@@ -1683,7 +1679,8 @@ const AuthConfigSchema = z.object({
|
|
|
1683
1679
|
oauth2Clients: z.record(z.string(), OAuth2ClientSchema).optional(),
|
|
1684
1680
|
idProvider: IdProviderSchema.optional(),
|
|
1685
1681
|
scim: SCIMSchema.optional(),
|
|
1686
|
-
tenantProvider: TenantProviderSchema.optional()
|
|
1682
|
+
tenantProvider: TenantProviderSchema.optional(),
|
|
1683
|
+
publishSessionEvents: z.boolean().optional()
|
|
1687
1684
|
}).brand("AuthConfig");
|
|
1688
1685
|
|
|
1689
1686
|
//#endregion
|
|
@@ -1751,8 +1748,8 @@ const DEFAULT_IGNORE_PATTERNS = ["**/*.test.ts", "**/*.spec.ts"];
|
|
|
1751
1748
|
/**
|
|
1752
1749
|
* Load files matching the given patterns, excluding files that match ignore patterns.
|
|
1753
1750
|
* By default, test files (*.test.ts, *.spec.ts) are excluded unless ignores is explicitly specified.
|
|
1754
|
-
* @param
|
|
1755
|
-
* @returns
|
|
1751
|
+
* @param config - Configuration with files patterns and optional ignores patterns
|
|
1752
|
+
* @returns Array of absolute file paths
|
|
1756
1753
|
*/
|
|
1757
1754
|
function loadFilesWithIgnores(config) {
|
|
1758
1755
|
const ignorePatterns = config.ignores ?? DEFAULT_IGNORE_PATTERNS;
|
|
@@ -1986,8 +1983,8 @@ const tailorUserMap = `{ id: user.id, type: user.type, workspaceId: user.workspa
|
|
|
1986
1983
|
* Convert a function to a string representation.
|
|
1987
1984
|
* Handles method shorthand syntax (e.g., `create() { ... }`) by converting it to
|
|
1988
1985
|
* a function expression (e.g., `function create() { ... }`).
|
|
1989
|
-
* @param
|
|
1990
|
-
* @returns
|
|
1986
|
+
* @param fn - Function to stringify
|
|
1987
|
+
* @returns Stringified function source
|
|
1991
1988
|
*/
|
|
1992
1989
|
const stringifyFunction = (fn) => {
|
|
1993
1990
|
const src = fn.toString().trim();
|
|
@@ -1996,8 +1993,8 @@ const stringifyFunction = (fn) => {
|
|
|
1996
1993
|
};
|
|
1997
1994
|
/**
|
|
1998
1995
|
* Convert a hook function to a script expression.
|
|
1999
|
-
* @param
|
|
2000
|
-
* @returns
|
|
1996
|
+
* @param fn - Hook function
|
|
1997
|
+
* @returns JavaScript expression calling the hook
|
|
2001
1998
|
*/
|
|
2002
1999
|
const convertHookToExpr = (fn) => {
|
|
2003
2000
|
return `(${stringifyFunction(fn)})({ value: _value, data: _data, user: ${tailorUserMap} })`;
|
|
@@ -2005,8 +2002,8 @@ const convertHookToExpr = (fn) => {
|
|
|
2005
2002
|
/**
|
|
2006
2003
|
* Parse TailorDBField into OperatorFieldConfig.
|
|
2007
2004
|
* This transforms user-defined functions into script expressions.
|
|
2008
|
-
* @param
|
|
2009
|
-
* @returns
|
|
2005
|
+
* @param field - TailorDB field definition
|
|
2006
|
+
* @returns Parsed operator field configuration
|
|
2010
2007
|
*/
|
|
2011
2008
|
function parseFieldConfig(field) {
|
|
2012
2009
|
const metadata = field.metadata;
|
|
@@ -2078,8 +2075,8 @@ function isSingleArrayConditionFormat(cond) {
|
|
|
2078
2075
|
* Normalize record-level permissions into a standard structure.
|
|
2079
2076
|
* @template User
|
|
2080
2077
|
* @template Type
|
|
2081
|
-
* @param
|
|
2082
|
-
* @returns
|
|
2078
|
+
* @param permission - Tailor type permission
|
|
2079
|
+
* @returns Normalized record permissions
|
|
2083
2080
|
*/
|
|
2084
2081
|
function normalizePermission(permission) {
|
|
2085
2082
|
return Object.keys(permission).reduce((acc, action) => {
|
|
@@ -2089,8 +2086,8 @@ function normalizePermission(permission) {
|
|
|
2089
2086
|
}
|
|
2090
2087
|
/**
|
|
2091
2088
|
* Normalize GraphQL permissions into a standard structure.
|
|
2092
|
-
* @param
|
|
2093
|
-
* @returns
|
|
2089
|
+
* @param permission - Tailor GQL permission
|
|
2090
|
+
* @returns Normalized GQL permissions
|
|
2094
2091
|
*/
|
|
2095
2092
|
function normalizeGqlPermission(permission) {
|
|
2096
2093
|
return permission.map((policy) => normalizeGqlPolicy(policy));
|
|
@@ -2106,8 +2103,8 @@ function normalizeGqlPolicy(policy) {
|
|
|
2106
2103
|
/**
|
|
2107
2104
|
* Parse raw permissions into normalized permissions.
|
|
2108
2105
|
* This is the main entry point for permission parsing in the parser layer.
|
|
2109
|
-
* @param
|
|
2110
|
-
* @returns
|
|
2106
|
+
* @param rawPermissions - Raw permissions definition
|
|
2107
|
+
* @returns Normalized permissions
|
|
2111
2108
|
*/
|
|
2112
2109
|
function parsePermissions(rawPermissions) {
|
|
2113
2110
|
return {
|
|
@@ -2117,8 +2114,8 @@ function parsePermissions(rawPermissions) {
|
|
|
2117
2114
|
}
|
|
2118
2115
|
/**
|
|
2119
2116
|
* Normalize a single action permission into the standard format.
|
|
2120
|
-
* @param
|
|
2121
|
-
* @returns
|
|
2117
|
+
* @param permission - Raw permission definition
|
|
2118
|
+
* @returns Normalized action permission
|
|
2122
2119
|
*/
|
|
2123
2120
|
function normalizeActionPermission(permission) {
|
|
2124
2121
|
if (isObjectFormat(permission)) {
|
|
@@ -2172,8 +2169,8 @@ function fieldRef(context) {
|
|
|
2172
2169
|
}
|
|
2173
2170
|
/**
|
|
2174
2171
|
* Validate relation configuration.
|
|
2175
|
-
* @param
|
|
2176
|
-
* @param
|
|
2172
|
+
* @param rawRelation - Raw relation configuration from TailorDB type definition
|
|
2173
|
+
* @param context - Context information for the relation (type name, field name, all type names)
|
|
2177
2174
|
*/
|
|
2178
2175
|
function validateRelationConfig(rawRelation, context) {
|
|
2179
2176
|
if (!rawRelation.type) throw new Error(`${fieldRef(context)} has a relation but is missing the required 'type' property. Valid values: ${Object.keys(relationTypes).join(", ")}.`);
|
|
@@ -2182,10 +2179,10 @@ function validateRelationConfig(rawRelation, context) {
|
|
|
2182
2179
|
}
|
|
2183
2180
|
/**
|
|
2184
2181
|
* Process raw relation config and compute derived metadata values.
|
|
2185
|
-
* @param
|
|
2186
|
-
* @param
|
|
2187
|
-
* @param
|
|
2188
|
-
* @returns
|
|
2182
|
+
* @param rawRelation - Raw relation configuration
|
|
2183
|
+
* @param context - Context information for the relation
|
|
2184
|
+
* @param isArrayField - Whether the target field is an array field
|
|
2185
|
+
* @returns Computed relation metadata to apply to field config
|
|
2189
2186
|
*/
|
|
2190
2187
|
function processRelationMetadata(rawRelation, context, isArrayField = false) {
|
|
2191
2188
|
const isUnique = relationTypes[rawRelation.type] === "1-1";
|
|
@@ -2205,9 +2202,9 @@ function processRelationMetadata(rawRelation, context, isArrayField = false) {
|
|
|
2205
2202
|
/**
|
|
2206
2203
|
* Build relation info for creating forward/backward relationships.
|
|
2207
2204
|
* Returns undefined for keyOnly relations.
|
|
2208
|
-
* @param
|
|
2209
|
-
* @param
|
|
2210
|
-
* @returns
|
|
2205
|
+
* @param rawRelation - Raw relation configuration
|
|
2206
|
+
* @param context - Context information for the relation
|
|
2207
|
+
* @returns Relation information or undefined for keyOnly relations
|
|
2211
2208
|
*/
|
|
2212
2209
|
function buildRelationInfo(rawRelation, context) {
|
|
2213
2210
|
if (rawRelation.type === "keyOnly") return;
|
|
@@ -2227,9 +2224,9 @@ function buildRelationInfo(rawRelation, context) {
|
|
|
2227
2224
|
}
|
|
2228
2225
|
/**
|
|
2229
2226
|
* Apply processed relation metadata to field config.
|
|
2230
|
-
* @param
|
|
2231
|
-
* @param
|
|
2232
|
-
* @returns
|
|
2227
|
+
* @param fieldConfig - Original operator field configuration
|
|
2228
|
+
* @param metadata - Processed relation metadata to apply
|
|
2229
|
+
* @returns Field config with relation metadata applied
|
|
2233
2230
|
*/
|
|
2234
2231
|
function applyRelationMetadataToFieldConfig(fieldConfig, metadata) {
|
|
2235
2232
|
return {
|
|
@@ -99013,9 +99010,8 @@ const eslintConfig = {
|
|
|
99013
99010
|
};
|
|
99014
99011
|
/**
|
|
99015
99012
|
* Ensure that a TailorDB script expression does not reference external variables.
|
|
99016
|
-
* @param
|
|
99017
|
-
* @param
|
|
99018
|
-
* @returns {void}
|
|
99013
|
+
* @param expr - JavaScript expression to validate
|
|
99014
|
+
* @param ctx - Script context (type, field, kind)
|
|
99019
99015
|
*/
|
|
99020
99016
|
function ensureNoExternalVariablesInScript(expr, ctx) {
|
|
99021
99017
|
if (!expr.trim()) return;
|
|
@@ -99037,10 +99033,9 @@ function ensureNoExternalVariablesInScript(expr, ctx) {
|
|
|
99037
99033
|
}
|
|
99038
99034
|
/**
|
|
99039
99035
|
* Ensure that TailorDB field scripts do not capture external variables.
|
|
99040
|
-
* @param
|
|
99041
|
-
* @param
|
|
99042
|
-
* @param
|
|
99043
|
-
* @returns {void}
|
|
99036
|
+
* @param typeName - TailorDB type name
|
|
99037
|
+
* @param fieldName - Field name
|
|
99038
|
+
* @param fieldConfig - Parsed field configuration
|
|
99044
99039
|
*/
|
|
99045
99040
|
function ensureNoExternalVariablesInFieldScripts(typeName, fieldName, fieldConfig) {
|
|
99046
99041
|
for (const validateConfig of fieldConfig.validate ?? []) {
|
|
@@ -99068,10 +99063,10 @@ function ensureNoExternalVariablesInFieldScripts(typeName, fieldName, fieldConfi
|
|
|
99068
99063
|
/**
|
|
99069
99064
|
* Parse multiple TailorDB types, build relationships, and validate uniqueness.
|
|
99070
99065
|
* This is the main entry point for parsing TailorDB types.
|
|
99071
|
-
* @param
|
|
99072
|
-
* @param
|
|
99073
|
-
* @param
|
|
99074
|
-
* @returns
|
|
99066
|
+
* @param rawTypes - Raw TailorDB types keyed by name
|
|
99067
|
+
* @param namespace - TailorDB namespace name
|
|
99068
|
+
* @param typeSourceInfo - Optional type source information
|
|
99069
|
+
* @returns Parsed types
|
|
99075
99070
|
*/
|
|
99076
99071
|
function parseTypes(rawTypes, namespace, typeSourceInfo) {
|
|
99077
99072
|
const types$2 = {};
|
|
@@ -99083,10 +99078,10 @@ function parseTypes(rawTypes, namespace, typeSourceInfo) {
|
|
|
99083
99078
|
}
|
|
99084
99079
|
/**
|
|
99085
99080
|
* Parse a TailorDBType into a ParsedTailorDBType.
|
|
99086
|
-
* @param
|
|
99087
|
-
* @param
|
|
99088
|
-
* @param
|
|
99089
|
-
* @returns
|
|
99081
|
+
* @param type - TailorDB type to parse
|
|
99082
|
+
* @param allTypeNames - Set of all TailorDB type names
|
|
99083
|
+
* @param rawTypes - All raw TailorDB types keyed by name
|
|
99084
|
+
* @returns Parsed TailorDB type
|
|
99090
99085
|
*/
|
|
99091
99086
|
function parseTailorDBType(type, allTypeNames, rawTypes) {
|
|
99092
99087
|
const metadata = type.metadata;
|
|
@@ -99144,10 +99139,9 @@ function parseTailorDBType(type, allTypeNames, rawTypes) {
|
|
|
99144
99139
|
/**
|
|
99145
99140
|
* Build backward relationships between parsed types.
|
|
99146
99141
|
* Also validates that backward relation names are unique within each type.
|
|
99147
|
-
* @param
|
|
99148
|
-
* @param
|
|
99149
|
-
* @param
|
|
99150
|
-
* @returns {void}
|
|
99142
|
+
* @param types - Parsed types
|
|
99143
|
+
* @param namespace - TailorDB namespace name
|
|
99144
|
+
* @param typeSourceInfo - Optional type source information
|
|
99151
99145
|
*/
|
|
99152
99146
|
function buildBackwardRelationships(types$2, namespace, typeSourceInfo) {
|
|
99153
99147
|
const backwardNameSources = {};
|
|
@@ -99207,10 +99201,9 @@ function buildBackwardRelationships(types$2, namespace, typeSourceInfo) {
|
|
|
99207
99201
|
* Checks for:
|
|
99208
99202
|
* 1. Each type's singular query name != plural query name
|
|
99209
99203
|
* 2. No duplicate query names across all types
|
|
99210
|
-
* @param
|
|
99211
|
-
* @param
|
|
99212
|
-
* @param
|
|
99213
|
-
* @returns {void}
|
|
99204
|
+
* @param types - Parsed types
|
|
99205
|
+
* @param namespace - TailorDB namespace name
|
|
99206
|
+
* @param typeSourceInfo - Optional type source information
|
|
99214
99207
|
*/
|
|
99215
99208
|
function validatePluralFormUniqueness(types$2, namespace, typeSourceInfo) {
|
|
99216
99209
|
const errors = [];
|
|
@@ -99468,8 +99461,8 @@ var Application = class {
|
|
|
99468
99461
|
};
|
|
99469
99462
|
/**
|
|
99470
99463
|
* Define a Tailor application from the given configuration.
|
|
99471
|
-
* @param
|
|
99472
|
-
* @returns
|
|
99464
|
+
* @param config - Application configuration object
|
|
99465
|
+
* @returns Configured application instance
|
|
99473
99466
|
*/
|
|
99474
99467
|
function defineApplication(config) {
|
|
99475
99468
|
const app = new Application(config.name, config);
|
|
@@ -99500,8 +99493,8 @@ const WorkflowSchema = z.object({
|
|
|
99500
99493
|
/**
|
|
99501
99494
|
* Load workflow files and collect all jobs in a single pass.
|
|
99502
99495
|
* Dependencies are detected at bundle time via AST analysis.
|
|
99503
|
-
* @param
|
|
99504
|
-
* @returns
|
|
99496
|
+
* @param config - Workflow service configuration
|
|
99497
|
+
* @returns Loaded workflows and collected jobs
|
|
99505
99498
|
*/
|
|
99506
99499
|
async function loadAndCollectJobs(config) {
|
|
99507
99500
|
const workflows = {};
|
|
@@ -99548,7 +99541,7 @@ async function loadAndCollectJobs(config) {
|
|
|
99548
99541
|
}
|
|
99549
99542
|
/**
|
|
99550
99543
|
* Print workflow loading logs.
|
|
99551
|
-
* @param
|
|
99544
|
+
* @param result - Workflow load result to print
|
|
99552
99545
|
*/
|
|
99553
99546
|
function printLoadedWorkflows(result) {
|
|
99554
99547
|
if (result.fileCount === 0) return;
|
|
@@ -99561,8 +99554,8 @@ function printLoadedWorkflows(result) {
|
|
|
99561
99554
|
}
|
|
99562
99555
|
/**
|
|
99563
99556
|
* Load a single file and extract jobs and workflow
|
|
99564
|
-
* @param
|
|
99565
|
-
* @returns
|
|
99557
|
+
* @param filePath - Path to the workflow file
|
|
99558
|
+
* @returns Extracted jobs and workflow
|
|
99566
99559
|
*/
|
|
99567
99560
|
async function loadFileContent(filePath) {
|
|
99568
99561
|
const jobs = [];
|
|
@@ -99597,8 +99590,8 @@ async function loadFileContent(filePath) {
|
|
|
99597
99590
|
}
|
|
99598
99591
|
/**
|
|
99599
99592
|
* Check if a value is a WorkflowJob by looking for the brand symbol
|
|
99600
|
-
* @param
|
|
99601
|
-
* @returns
|
|
99593
|
+
* @param value - Value to check
|
|
99594
|
+
* @returns True if the value is a branded WorkflowJob
|
|
99602
99595
|
*/
|
|
99603
99596
|
function isWorkflowJob(value) {
|
|
99604
99597
|
return value != null && typeof value === "object" && WORKFLOW_JOB_BRAND in value && value[WORKFLOW_JOB_BRAND] === true;
|
|
@@ -99612,16 +99605,16 @@ const enableInlineSourcemap = process.env.TAILOR_ENABLE_INLINE_SOURCEMAP === "tr
|
|
|
99612
99605
|
//#region src/cli/bundler/workflow/ast-utils.ts
|
|
99613
99606
|
/**
|
|
99614
99607
|
* Check if a module source is from the Tailor SDK package (including subpaths)
|
|
99615
|
-
* @param
|
|
99616
|
-
* @returns
|
|
99608
|
+
* @param source - Module source string
|
|
99609
|
+
* @returns True if the source is from the Tailor SDK package
|
|
99617
99610
|
*/
|
|
99618
99611
|
function isTailorSdkSource(source) {
|
|
99619
99612
|
return /^@tailor-platform\/sdk(\/|$)/.test(source);
|
|
99620
99613
|
}
|
|
99621
99614
|
/**
|
|
99622
99615
|
* Get the source string from a dynamic import or require call
|
|
99623
|
-
* @param
|
|
99624
|
-
* @returns
|
|
99616
|
+
* @param node - AST node to inspect
|
|
99617
|
+
* @returns Resolved import/require source string or null
|
|
99625
99618
|
*/
|
|
99626
99619
|
function getImportSource(node) {
|
|
99627
99620
|
if (!node) return null;
|
|
@@ -99640,8 +99633,8 @@ function getImportSource(node) {
|
|
|
99640
99633
|
}
|
|
99641
99634
|
/**
|
|
99642
99635
|
* Unwrap AwaitExpression to get the inner expression
|
|
99643
|
-
* @param
|
|
99644
|
-
* @returns
|
|
99636
|
+
* @param node - AST expression node
|
|
99637
|
+
* @returns Inner expression if node is an AwaitExpression
|
|
99645
99638
|
*/
|
|
99646
99639
|
function unwrapAwait(node) {
|
|
99647
99640
|
if (node?.type === "AwaitExpression") return node.argument;
|
|
@@ -99649,25 +99642,25 @@ function unwrapAwait(node) {
|
|
|
99649
99642
|
}
|
|
99650
99643
|
/**
|
|
99651
99644
|
* Check if a node is a string literal
|
|
99652
|
-
* @param
|
|
99653
|
-
* @returns
|
|
99645
|
+
* @param node - AST expression node
|
|
99646
|
+
* @returns True if node is a string literal
|
|
99654
99647
|
*/
|
|
99655
99648
|
function isStringLiteral(node) {
|
|
99656
99649
|
return node?.type === "Literal" && typeof node.value === "string";
|
|
99657
99650
|
}
|
|
99658
99651
|
/**
|
|
99659
99652
|
* Check if a node is a function expression (arrow or regular)
|
|
99660
|
-
* @param
|
|
99661
|
-
* @returns
|
|
99653
|
+
* @param node - AST expression node
|
|
99654
|
+
* @returns True if node is a function expression
|
|
99662
99655
|
*/
|
|
99663
99656
|
function isFunctionExpression(node) {
|
|
99664
99657
|
return node?.type === "ArrowFunctionExpression" || node?.type === "FunctionExpression";
|
|
99665
99658
|
}
|
|
99666
99659
|
/**
|
|
99667
99660
|
* Find a property in an object expression
|
|
99668
|
-
* @param
|
|
99669
|
-
* @param
|
|
99670
|
-
* @returns
|
|
99661
|
+
* @param properties - Object properties to search
|
|
99662
|
+
* @param name - Property name to find
|
|
99663
|
+
* @returns Found property info or null
|
|
99671
99664
|
*/
|
|
99672
99665
|
function findProperty(properties, name$1) {
|
|
99673
99666
|
for (const prop of properties) if (prop.type === "Property") {
|
|
@@ -99684,9 +99677,9 @@ function findProperty(properties, name$1) {
|
|
|
99684
99677
|
/**
|
|
99685
99678
|
* Apply string replacements to source code
|
|
99686
99679
|
* Replacements are applied from end to start to maintain positions
|
|
99687
|
-
* @param
|
|
99688
|
-
* @param
|
|
99689
|
-
* @returns
|
|
99680
|
+
* @param source - Original source code
|
|
99681
|
+
* @param replacements - Replacements to apply
|
|
99682
|
+
* @returns Transformed source code
|
|
99690
99683
|
*/
|
|
99691
99684
|
function applyReplacements(source, replacements) {
|
|
99692
99685
|
const sorted = [...replacements].sort((a, b) => b.start - a.start);
|
|
@@ -99696,9 +99689,9 @@ function applyReplacements(source, replacements) {
|
|
|
99696
99689
|
}
|
|
99697
99690
|
/**
|
|
99698
99691
|
* Find the end of a statement including any trailing newline
|
|
99699
|
-
* @param
|
|
99700
|
-
* @param
|
|
99701
|
-
* @returns
|
|
99692
|
+
* @param source - Source code
|
|
99693
|
+
* @param position - Start position of the statement
|
|
99694
|
+
* @returns Index of the end of the statement including trailing newline
|
|
99702
99695
|
*/
|
|
99703
99696
|
function findStatementEnd(source, position) {
|
|
99704
99697
|
let i$1 = position;
|
|
@@ -99709,9 +99702,9 @@ function findStatementEnd(source, position) {
|
|
|
99709
99702
|
/**
|
|
99710
99703
|
* Resolve a relative path from a base directory
|
|
99711
99704
|
* Simple implementation that handles ./ and ../ prefixes
|
|
99712
|
-
* @param
|
|
99713
|
-
* @param
|
|
99714
|
-
* @returns
|
|
99705
|
+
* @param baseDir - Base directory
|
|
99706
|
+
* @param relativePath - Relative path to resolve
|
|
99707
|
+
* @returns Resolved absolute path
|
|
99715
99708
|
*/
|
|
99716
99709
|
function resolvePath(baseDir, relativePath) {
|
|
99717
99710
|
const parts = relativePath.replace(/\\/g, "/").split("/");
|
|
@@ -99726,9 +99719,9 @@ function resolvePath(baseDir, relativePath) {
|
|
|
99726
99719
|
/**
|
|
99727
99720
|
* Collect all import bindings for a specific function from the Tailor SDK package
|
|
99728
99721
|
* Returns a Set of local names that refer to the function
|
|
99729
|
-
* @param
|
|
99730
|
-
* @param
|
|
99731
|
-
* @returns
|
|
99722
|
+
* @param program - Parsed TypeScript program
|
|
99723
|
+
* @param functionName - Function name to collect bindings for
|
|
99724
|
+
* @returns Set of local names bound to the SDK function
|
|
99732
99725
|
*/
|
|
99733
99726
|
function collectSdkBindings(program, functionName) {
|
|
99734
99727
|
const bindings = /* @__PURE__ */ new Set();
|
|
@@ -99781,10 +99774,10 @@ function collectSdkBindings(program, functionName) {
|
|
|
99781
99774
|
}
|
|
99782
99775
|
/**
|
|
99783
99776
|
* Check if a CallExpression is a call to a specific SDK function
|
|
99784
|
-
* @param
|
|
99785
|
-
* @param
|
|
99786
|
-
* @param
|
|
99787
|
-
* @returns
|
|
99777
|
+
* @param node - AST node to inspect
|
|
99778
|
+
* @param bindings - Collected SDK bindings
|
|
99779
|
+
* @param functionName - SDK function name
|
|
99780
|
+
* @returns True if node is a call to the SDK function
|
|
99788
99781
|
*/
|
|
99789
99782
|
function isSdkFunctionCall(node, bindings, functionName) {
|
|
99790
99783
|
if (node.type !== "CallExpression") return false;
|
|
@@ -99807,10 +99800,10 @@ function isSdkFunctionCall(node, bindings, functionName) {
|
|
|
99807
99800
|
//#endregion
|
|
99808
99801
|
//#region src/cli/bundler/workflow/job-detector.ts
|
|
99809
99802
|
/**
|
|
99810
|
-
* Find all workflow jobs by detecting createWorkflowJob calls from
|
|
99811
|
-
* @param
|
|
99812
|
-
* @param
|
|
99813
|
-
* @returns
|
|
99803
|
+
* Find all workflow jobs by detecting createWorkflowJob calls from @tailor-platform/sdk
|
|
99804
|
+
* @param program - Parsed TypeScript program
|
|
99805
|
+
* @param _sourceText - Source code text (currently unused)
|
|
99806
|
+
* @returns Detected job locations
|
|
99814
99807
|
*/
|
|
99815
99808
|
function findAllJobs(program, _sourceText) {
|
|
99816
99809
|
const jobs = [];
|
|
@@ -99865,8 +99858,8 @@ function findAllJobs(program, _sourceText) {
|
|
|
99865
99858
|
}
|
|
99866
99859
|
/**
|
|
99867
99860
|
* Build a map from export name to job name from detected jobs
|
|
99868
|
-
* @param
|
|
99869
|
-
* @returns
|
|
99861
|
+
* @param jobs - Detected job locations
|
|
99862
|
+
* @returns Map from export name to job name
|
|
99870
99863
|
*/
|
|
99871
99864
|
function buildJobNameMap(jobs) {
|
|
99872
99865
|
const map = /* @__PURE__ */ new Map();
|
|
@@ -99876,9 +99869,9 @@ function buildJobNameMap(jobs) {
|
|
|
99876
99869
|
/**
|
|
99877
99870
|
* Detect all .trigger() calls in the source code
|
|
99878
99871
|
* Returns information about each trigger call for transformation
|
|
99879
|
-
* @param
|
|
99880
|
-
* @param
|
|
99881
|
-
* @returns
|
|
99872
|
+
* @param program - Parsed TypeScript program
|
|
99873
|
+
* @param sourceText - Source code text
|
|
99874
|
+
* @returns Detected trigger calls
|
|
99882
99875
|
*/
|
|
99883
99876
|
function detectTriggerCalls(program, sourceText) {
|
|
99884
99877
|
const calls = [];
|
|
@@ -99930,10 +99923,10 @@ function detectTriggerCalls(program, sourceText) {
|
|
|
99930
99923
|
//#endregion
|
|
99931
99924
|
//#region src/cli/bundler/workflow/workflow-detector.ts
|
|
99932
99925
|
/**
|
|
99933
|
-
* Find all workflows by detecting createWorkflow calls from
|
|
99934
|
-
* @param
|
|
99935
|
-
* @param
|
|
99936
|
-
* @returns
|
|
99926
|
+
* Find all workflows by detecting createWorkflow calls from @tailor-platform/sdk
|
|
99927
|
+
* @param program - Parsed TypeScript program
|
|
99928
|
+
* @param _sourceText - Source code text (currently unused)
|
|
99929
|
+
* @returns Detected workflows
|
|
99937
99930
|
*/
|
|
99938
99931
|
function findAllWorkflows(program, _sourceText) {
|
|
99939
99932
|
const workflows = [];
|
|
@@ -99979,8 +99972,8 @@ function findAllWorkflows(program, _sourceText) {
|
|
|
99979
99972
|
}
|
|
99980
99973
|
/**
|
|
99981
99974
|
* Build a map from export name to workflow name from detected workflows
|
|
99982
|
-
* @param
|
|
99983
|
-
* @returns
|
|
99975
|
+
* @param workflows - Detected workflows
|
|
99976
|
+
* @returns Map from export name to workflow name
|
|
99984
99977
|
*/
|
|
99985
99978
|
function buildWorkflowNameMap(workflows) {
|
|
99986
99979
|
const map = /* @__PURE__ */ new Map();
|
|
@@ -99989,8 +99982,8 @@ function buildWorkflowNameMap(workflows) {
|
|
|
99989
99982
|
}
|
|
99990
99983
|
/**
|
|
99991
99984
|
* Detect default imports in a source file and return a map from local name to import source
|
|
99992
|
-
* @param
|
|
99993
|
-
* @returns
|
|
99985
|
+
* @param program - Parsed TypeScript program
|
|
99986
|
+
* @returns Map from local name to import source
|
|
99994
99987
|
*/
|
|
99995
99988
|
function detectDefaultImports(program) {
|
|
99996
99989
|
const imports = /* @__PURE__ */ new Map();
|
|
@@ -100021,9 +100014,9 @@ function detectDefaultImports(program) {
|
|
|
100021
100014
|
/**
|
|
100022
100015
|
* Extract authInvoker info from a config object expression
|
|
100023
100016
|
* Returns the authInvoker value text and whether it's a shorthand property
|
|
100024
|
-
* @param
|
|
100025
|
-
* @param
|
|
100026
|
-
* @returns
|
|
100017
|
+
* @param configArg - Config argument node
|
|
100018
|
+
* @param sourceText - Source code text
|
|
100019
|
+
* @returns Extracted authInvoker info, if any
|
|
100027
100020
|
*/
|
|
100028
100021
|
function extractAuthInvokerInfo(configArg, sourceText) {
|
|
100029
100022
|
if (!configArg || typeof configArg !== "object") return void 0;
|
|
@@ -100047,11 +100040,11 @@ function extractAuthInvokerInfo(configArg, sourceText) {
|
|
|
100047
100040
|
/**
|
|
100048
100041
|
* Detect .trigger() calls for known workflows and jobs
|
|
100049
100042
|
* Only detects calls where the identifier is in workflowNames or jobNames
|
|
100050
|
-
* @param
|
|
100051
|
-
* @param
|
|
100052
|
-
* @param
|
|
100053
|
-
* @param
|
|
100054
|
-
* @returns
|
|
100043
|
+
* @param program - The parsed AST program
|
|
100044
|
+
* @param sourceText - The source code text
|
|
100045
|
+
* @param workflowNames - Set of known workflow identifier names
|
|
100046
|
+
* @param jobNames - Set of known job identifier names
|
|
100047
|
+
* @returns Detected trigger call metadata
|
|
100055
100048
|
*/
|
|
100056
100049
|
function detectExtendedTriggerCalls(program, sourceText, workflowNames, jobNames) {
|
|
100057
100050
|
const calls = [];
|
|
@@ -100118,12 +100111,12 @@ function detectExtendedTriggerCalls(program, sourceText, workflowNames, jobNames
|
|
|
100118
100111
|
/**
|
|
100119
100112
|
* Transform trigger calls for resolver/executor/workflow functions
|
|
100120
100113
|
* Handles both job.trigger() and workflow.trigger() calls
|
|
100121
|
-
* @param
|
|
100122
|
-
* @param
|
|
100123
|
-
* @param
|
|
100124
|
-
* @param
|
|
100125
|
-
* @param
|
|
100126
|
-
* @returns
|
|
100114
|
+
* @param source - The source code to transform
|
|
100115
|
+
* @param workflowNameMap - Map from variable name to workflow name
|
|
100116
|
+
* @param jobNameMap - Map from variable name to job name
|
|
100117
|
+
* @param workflowFileMap - Map from file path (without extension) to workflow name for default exports
|
|
100118
|
+
* @param currentFilePath - Path of the current file being transformed (for resolving relative imports)
|
|
100119
|
+
* @returns Transformed source code with trigger calls rewritten
|
|
100127
100120
|
*/
|
|
100128
100121
|
function transformFunctionTriggers(source, workflowNameMap, jobNameMap, workflowFileMap, currentFilePath) {
|
|
100129
100122
|
const { program } = parseSync("input.ts", source);
|
|
@@ -100170,8 +100163,8 @@ function transformFunctionTriggers(source, workflowNameMap, jobNameMap, workflow
|
|
|
100170
100163
|
//#region src/cli/bundler/trigger-context.ts
|
|
100171
100164
|
/**
|
|
100172
100165
|
* Normalize a file path by removing extension and resolving to absolute path
|
|
100173
|
-
* @param
|
|
100174
|
-
* @returns
|
|
100166
|
+
* @param filePath - File path to normalize
|
|
100167
|
+
* @returns Normalized absolute path without extension
|
|
100175
100168
|
*/
|
|
100176
100169
|
function normalizeFilePath(filePath) {
|
|
100177
100170
|
const absolutePath = path$20.resolve(filePath);
|
|
@@ -100181,8 +100174,8 @@ function normalizeFilePath(filePath) {
|
|
|
100181
100174
|
/**
|
|
100182
100175
|
* Build trigger context from workflow configuration
|
|
100183
100176
|
* Scans workflow files to collect workflow and job mappings
|
|
100184
|
-
* @param
|
|
100185
|
-
* @returns
|
|
100177
|
+
* @param workflowConfig - Workflow file loading configuration
|
|
100178
|
+
* @returns Trigger context built from workflow sources
|
|
100186
100179
|
*/
|
|
100187
100180
|
async function buildTriggerContext(workflowConfig) {
|
|
100188
100181
|
const workflowNameMap = /* @__PURE__ */ new Map();
|
|
@@ -100220,8 +100213,8 @@ async function buildTriggerContext(workflowConfig) {
|
|
|
100220
100213
|
/**
|
|
100221
100214
|
* Create a rolldown plugin for transforming trigger calls
|
|
100222
100215
|
* Returns undefined if no trigger context is provided
|
|
100223
|
-
* @param
|
|
100224
|
-
* @returns
|
|
100216
|
+
* @param triggerContext - Trigger context to use for transformations
|
|
100217
|
+
* @returns Rolldown plugin or undefined when no context
|
|
100225
100218
|
*/
|
|
100226
100219
|
function createTriggerTransformPlugin(triggerContext) {
|
|
100227
100220
|
if (!triggerContext) return;
|
|
@@ -100241,8 +100234,8 @@ function createTriggerTransformPlugin(triggerContext) {
|
|
|
100241
100234
|
//#region src/cli/bundler/executor/loader.ts
|
|
100242
100235
|
/**
|
|
100243
100236
|
* Load and validate an executor definition from a file.
|
|
100244
|
-
* @param
|
|
100245
|
-
* @returns
|
|
100237
|
+
* @param executorFilePath - Path to the executor file
|
|
100238
|
+
* @returns Parsed executor or null if invalid
|
|
100246
100239
|
*/
|
|
100247
100240
|
async function loadExecutor(executorFilePath) {
|
|
100248
100241
|
const executor = (await import(pathToFileURL(executorFilePath).href)).default;
|
|
@@ -100259,9 +100252,9 @@ async function loadExecutor(executorFilePath) {
|
|
|
100259
100252
|
* This function:
|
|
100260
100253
|
* 1. Creates entry file that extracts operation.body
|
|
100261
100254
|
* 2. Bundles in a single step with tree-shaking
|
|
100262
|
-
* @param
|
|
100263
|
-
* @param
|
|
100264
|
-
* @returns
|
|
100255
|
+
* @param config - Executor file loading configuration
|
|
100256
|
+
* @param triggerContext - Trigger context for workflow/job transformations
|
|
100257
|
+
* @returns Promise that resolves when bundling completes
|
|
100265
100258
|
*/
|
|
100266
100259
|
async function bundleExecutors(config, triggerContext) {
|
|
100267
100260
|
const files = loadFilesWithIgnores(config);
|
|
@@ -100339,8 +100332,8 @@ async function bundleSingleExecutor(executor, outputDir, tsconfig, triggerContex
|
|
|
100339
100332
|
//#region src/cli/bundler/resolver/loader.ts
|
|
100340
100333
|
/**
|
|
100341
100334
|
* Load and validate a resolver definition from a file.
|
|
100342
|
-
* @param
|
|
100343
|
-
* @returns
|
|
100335
|
+
* @param resolverFilePath - Path to the resolver file
|
|
100336
|
+
* @returns Parsed resolver or null if invalid
|
|
100344
100337
|
*/
|
|
100345
100338
|
async function loadResolver(resolverFilePath) {
|
|
100346
100339
|
const resolver = (await import(pathToFileURL(resolverFilePath).href)).default;
|
|
@@ -100358,10 +100351,10 @@ async function loadResolver(resolverFilePath) {
|
|
|
100358
100351
|
* 1. Uses a transform plugin to add validation wrapper during bundling
|
|
100359
100352
|
* 2. Creates entry file
|
|
100360
100353
|
* 3. Bundles in a single step with tree-shaking
|
|
100361
|
-
* @param
|
|
100362
|
-
* @param
|
|
100363
|
-
* @param
|
|
100364
|
-
* @returns
|
|
100354
|
+
* @param namespace - Resolver namespace name
|
|
100355
|
+
* @param config - Resolver file loading configuration
|
|
100356
|
+
* @param triggerContext - Trigger context for workflow/job transformations
|
|
100357
|
+
* @returns Promise that resolves when bundling completes
|
|
100365
100358
|
*/
|
|
100366
100359
|
async function bundleResolvers(namespace, config, triggerContext) {
|
|
100367
100360
|
const files = loadFilesWithIgnores(config);
|
|
@@ -100453,8 +100446,8 @@ async function bundleSingleResolver(resolver, outputDir, tsconfig, triggerContex
|
|
|
100453
100446
|
/**
|
|
100454
100447
|
* Find variable declarations by export names
|
|
100455
100448
|
* Returns a map of export name to statement range
|
|
100456
|
-
* @param
|
|
100457
|
-
* @returns
|
|
100449
|
+
* @param program - Parsed TypeScript program
|
|
100450
|
+
* @returns Map of export name to statement range
|
|
100458
100451
|
*/
|
|
100459
100452
|
function findVariableDeclarationsByName(program) {
|
|
100460
100453
|
const declarations = /* @__PURE__ */ new Map();
|
|
@@ -100493,8 +100486,8 @@ function findVariableDeclarationsByName(program) {
|
|
|
100493
100486
|
/**
|
|
100494
100487
|
* Find createWorkflow default export declarations
|
|
100495
100488
|
* Returns the range of the export statement to remove
|
|
100496
|
-
* @param
|
|
100497
|
-
* @returns
|
|
100489
|
+
* @param program - Parsed TypeScript program
|
|
100490
|
+
* @returns Range of the default export statement or null
|
|
100498
100491
|
*/
|
|
100499
100492
|
function findWorkflowDefaultExport(program) {
|
|
100500
100493
|
const bindings = collectSdkBindings(program, "createWorkflow");
|
|
@@ -100516,12 +100509,12 @@ function findWorkflowDefaultExport(program) {
|
|
|
100516
100509
|
* Transform workflow source code
|
|
100517
100510
|
* - Transform .trigger() calls to tailor.workflow.triggerJobFunction()
|
|
100518
100511
|
* - Other jobs: remove entire variable declaration
|
|
100519
|
-
* @param
|
|
100520
|
-
* @param
|
|
100521
|
-
* @param
|
|
100522
|
-
* @param
|
|
100523
|
-
* @param
|
|
100524
|
-
* @returns
|
|
100512
|
+
* @param source - The source code to transform
|
|
100513
|
+
* @param targetJobName - The name of the target job (from job config)
|
|
100514
|
+
* @param targetJobExportName - The export name of the target job (optional, for enhanced detection)
|
|
100515
|
+
* @param otherJobExportNames - Export names of other jobs to remove (optional, for enhanced detection)
|
|
100516
|
+
* @param allJobsMap - Map from export name to job name for trigger transformation (optional)
|
|
100517
|
+
* @returns Transformed workflow source code
|
|
100525
100518
|
*/
|
|
100526
100519
|
function transformWorkflowSource(source, targetJobName, targetJobExportName, otherJobExportNames, allJobsMap) {
|
|
100527
100520
|
const { program } = parseSync("input.ts", source);
|
|
@@ -100611,11 +100604,11 @@ function transformWorkflowSource(source, targetJobName, targetJobExportName, oth
|
|
|
100611
100604
|
* 3. Creates entry file and bundles with tree-shaking
|
|
100612
100605
|
*
|
|
100613
100606
|
* Returns metadata about which jobs each workflow uses.
|
|
100614
|
-
* @param
|
|
100615
|
-
* @param
|
|
100616
|
-
* @param
|
|
100617
|
-
* @param
|
|
100618
|
-
* @returns
|
|
100607
|
+
* @param allJobs - All available job infos
|
|
100608
|
+
* @param mainJobNames - Names of main jobs
|
|
100609
|
+
* @param env - Environment variables to inject
|
|
100610
|
+
* @param triggerContext - Trigger context for transformations
|
|
100611
|
+
* @returns Workflow job bundling result
|
|
100619
100612
|
*/
|
|
100620
100613
|
async function bundleWorkflowJobs(allJobs, mainJobNames, env = {}, triggerContext) {
|
|
100621
100614
|
if (allJobs.length === 0) {
|
|
@@ -100645,9 +100638,9 @@ async function bundleWorkflowJobs(allJobs, mainJobNames, env = {}, triggerContex
|
|
|
100645
100638
|
* - It's called via .trigger() from another used job (transitively)
|
|
100646
100639
|
*
|
|
100647
100640
|
* Also returns a map of mainJob -> all jobs it depends on (for metadata).
|
|
100648
|
-
* @param
|
|
100649
|
-
* @param
|
|
100650
|
-
* @returns
|
|
100641
|
+
* @param allJobs - All available job infos
|
|
100642
|
+
* @param mainJobNames - Names of main jobs
|
|
100643
|
+
* @returns Used jobs and main job dependency map
|
|
100651
100644
|
*/
|
|
100652
100645
|
async function filterUsedJobs(allJobs, mainJobNames) {
|
|
100653
100646
|
if (allJobs.length === 0 || mainJobNames.length === 0) return {
|
|
@@ -100792,8 +100785,8 @@ const BaseGeneratorConfigSchema = z.union([
|
|
|
100792
100785
|
]);
|
|
100793
100786
|
/**
|
|
100794
100787
|
* Creates a GeneratorConfigSchema with built-in generator support
|
|
100795
|
-
* @param
|
|
100796
|
-
* @returns
|
|
100788
|
+
* @param builtinGenerators - Map of generator IDs to their constructor functions
|
|
100789
|
+
* @returns Generator config schema
|
|
100797
100790
|
*/
|
|
100798
100791
|
function createGeneratorConfigSchema(builtinGenerators$1) {
|
|
100799
100792
|
return z.union([
|
|
@@ -100818,10 +100811,9 @@ function createGeneratorConfigSchema(builtinGenerators$1) {
|
|
|
100818
100811
|
/**
|
|
100819
100812
|
* Type guard to check if a generator has a specific dependency.
|
|
100820
100813
|
* @template D
|
|
100821
|
-
* @param
|
|
100822
|
-
* @param
|
|
100823
|
-
* @
|
|
100824
|
-
* @returns {boolean} True if the generator has the dependency
|
|
100814
|
+
* @param generator - Code generator instance
|
|
100815
|
+
* @param dependency - Dependency kind to check
|
|
100816
|
+
* @returns True if the generator has the dependency
|
|
100825
100817
|
*/
|
|
100826
100818
|
function hasDependency(generator, dependency) {
|
|
100827
100819
|
return generator.dependencies.includes(dependency);
|
|
@@ -100867,8 +100859,8 @@ var EnumProcessor = class {
|
|
|
100867
100859
|
}
|
|
100868
100860
|
/**
|
|
100869
100861
|
* Generate enum constant definitions from collected metadata.
|
|
100870
|
-
* @param
|
|
100871
|
-
* @returns
|
|
100862
|
+
* @param allEnums - All collected enum definitions
|
|
100863
|
+
* @returns Generated enum constant definitions
|
|
100872
100864
|
*/
|
|
100873
100865
|
static generateUnifiedEnumConstants(allEnums) {
|
|
100874
100866
|
if (allEnums.length === 0) return "";
|
|
@@ -101080,8 +101072,8 @@ var FileUtilsGenerator = class {
|
|
|
101080
101072
|
var TypeProcessor = class {
|
|
101081
101073
|
/**
|
|
101082
101074
|
* Convert a ParsedTailorDBType into KyselyTypeMetadata.
|
|
101083
|
-
* @param
|
|
101084
|
-
* @returns
|
|
101075
|
+
* @param type - Parsed TailorDB type
|
|
101076
|
+
* @returns Generated Kysely type metadata
|
|
101085
101077
|
*/
|
|
101086
101078
|
static async processType(type) {
|
|
101087
101079
|
const result = this.generateTableInterface(type);
|
|
@@ -101093,8 +101085,8 @@ var TypeProcessor = class {
|
|
|
101093
101085
|
}
|
|
101094
101086
|
/**
|
|
101095
101087
|
* Generate the table interface.
|
|
101096
|
-
* @param
|
|
101097
|
-
* @returns
|
|
101088
|
+
* @param type - Parsed TailorDB type
|
|
101089
|
+
* @returns Table interface code and used utility types
|
|
101098
101090
|
*/
|
|
101099
101091
|
static generateTableInterface(type) {
|
|
101100
101092
|
const fieldResults = Object.entries(type.fields).filter(([fieldName]) => fieldName !== "id").map(([fieldName, parsedField]) => ({
|
|
@@ -101120,8 +101112,8 @@ var TypeProcessor = class {
|
|
|
101120
101112
|
}
|
|
101121
101113
|
/**
|
|
101122
101114
|
* Generate the complete field type including array and null modifiers.
|
|
101123
|
-
* @param
|
|
101124
|
-
* @returns
|
|
101115
|
+
* @param fieldConfig - Parsed field configuration
|
|
101116
|
+
* @returns Field type and used utility types
|
|
101125
101117
|
*/
|
|
101126
101118
|
static generateFieldType(fieldConfig) {
|
|
101127
101119
|
const baseTypeResult = this.getBaseType(fieldConfig);
|
|
@@ -101143,8 +101135,8 @@ var TypeProcessor = class {
|
|
|
101143
101135
|
}
|
|
101144
101136
|
/**
|
|
101145
101137
|
* Get the base Kysely type for a field (without array/null modifiers).
|
|
101146
|
-
* @param
|
|
101147
|
-
* @returns
|
|
101138
|
+
* @param fieldConfig - Parsed field configuration
|
|
101139
|
+
* @returns Base field type and used utility types
|
|
101148
101140
|
*/
|
|
101149
101141
|
static getBaseType(fieldConfig) {
|
|
101150
101142
|
const fieldType = fieldConfig.type;
|
|
@@ -101186,8 +101178,8 @@ var TypeProcessor = class {
|
|
|
101186
101178
|
}
|
|
101187
101179
|
/**
|
|
101188
101180
|
* Get the enum type definition.
|
|
101189
|
-
* @param
|
|
101190
|
-
* @returns
|
|
101181
|
+
* @param fieldConfig - Parsed field configuration
|
|
101182
|
+
* @returns Enum type definition
|
|
101191
101183
|
*/
|
|
101192
101184
|
static getEnumType(fieldConfig) {
|
|
101193
101185
|
const allowedValues = fieldConfig.allowedValues;
|
|
@@ -101198,8 +101190,8 @@ var TypeProcessor = class {
|
|
|
101198
101190
|
}
|
|
101199
101191
|
/**
|
|
101200
101192
|
* Get the nested object type definition.
|
|
101201
|
-
* @param
|
|
101202
|
-
* @returns
|
|
101193
|
+
* @param fieldConfig - Parsed field configuration
|
|
101194
|
+
* @returns Nested object type and used utility types
|
|
101203
101195
|
*/
|
|
101204
101196
|
static getNestedType(fieldConfig) {
|
|
101205
101197
|
const fields = fieldConfig.fields;
|
|
@@ -101229,8 +101221,8 @@ var TypeProcessor = class {
|
|
|
101229
101221
|
}
|
|
101230
101222
|
/**
|
|
101231
101223
|
* Generate unified types file from multiple namespaces.
|
|
101232
|
-
* @param
|
|
101233
|
-
* @returns
|
|
101224
|
+
* @param namespaceData - Namespace metadata
|
|
101225
|
+
* @returns Generated types file contents
|
|
101234
101226
|
*/
|
|
101235
101227
|
static generateUnifiedTypes(namespaceData) {
|
|
101236
101228
|
if (namespaceData.length === 0) return "";
|
|
@@ -101329,10 +101321,11 @@ var KyselyGenerator = class {
|
|
|
101329
101321
|
//#region src/cli/generator/builtin/seed/gql-ingest-processor.ts
|
|
101330
101322
|
/**
|
|
101331
101323
|
* Processes TailorDB types to generate GraphQL Ingest metadata
|
|
101332
|
-
* @param
|
|
101333
|
-
* @
|
|
101324
|
+
* @param type - Parsed TailorDB type
|
|
101325
|
+
* @param namespace - Namespace of the type
|
|
101326
|
+
* @returns Generated GraphQL Ingest metadata
|
|
101334
101327
|
*/
|
|
101335
|
-
function processGqlIngest(type) {
|
|
101328
|
+
function processGqlIngest(type, namespace) {
|
|
101336
101329
|
const dependencies = Array.from(Object.values(type.fields).reduce((set$1, field) => {
|
|
101337
101330
|
if (field.relation?.targetType && field.relation.targetType !== type.name) set$1.add(field.relation.targetType);
|
|
101338
101331
|
return set$1;
|
|
@@ -101345,6 +101338,7 @@ function processGqlIngest(type) {
|
|
|
101345
101338
|
`;
|
|
101346
101339
|
return {
|
|
101347
101340
|
name: type.name,
|
|
101341
|
+
namespace,
|
|
101348
101342
|
dependencies,
|
|
101349
101343
|
mapping: {
|
|
101350
101344
|
dataFile: `data/${type.name}.jsonl`,
|
|
@@ -101360,8 +101354,8 @@ function processGqlIngest(type) {
|
|
|
101360
101354
|
//#region src/cli/generator/builtin/seed/idp-user-processor.ts
|
|
101361
101355
|
/**
|
|
101362
101356
|
* Processes auth configuration to generate IdP user seed metadata
|
|
101363
|
-
* @param
|
|
101364
|
-
* @returns
|
|
101357
|
+
* @param auth - Auth configuration from generator
|
|
101358
|
+
* @returns IdP user metadata or undefined if not applicable
|
|
101365
101359
|
*/
|
|
101366
101360
|
function processIdpUser(auth) {
|
|
101367
101361
|
if (auth.idProvider?.kind !== "BuiltInIdP" || !auth.userProfile) return;
|
|
@@ -101389,9 +101383,9 @@ function processIdpUser(auth) {
|
|
|
101389
101383
|
}
|
|
101390
101384
|
/**
|
|
101391
101385
|
* Generates the schema file content for IdP users with foreign key
|
|
101392
|
-
* @param
|
|
101393
|
-
* @param
|
|
101394
|
-
* @returns
|
|
101386
|
+
* @param usernameField - Username field name
|
|
101387
|
+
* @param userTypeName - TailorDB user type name
|
|
101388
|
+
* @returns Schema file contents
|
|
101395
101389
|
*/
|
|
101396
101390
|
function generateIdpUserSchemaFile(usernameField, userTypeName) {
|
|
101397
101391
|
return ml`
|
|
@@ -101433,11 +101427,9 @@ function generateIdpUserSchemaFile(usernameField, userTypeName) {
|
|
|
101433
101427
|
//#region src/cli/generator/builtin/seed/lines-db-processor.ts
|
|
101434
101428
|
/**
|
|
101435
101429
|
* Processes TailorDB types to generate lines-db metadata
|
|
101436
|
-
* @param
|
|
101437
|
-
* @param
|
|
101438
|
-
* @
|
|
101439
|
-
* @param {string} source.exportName - Source export name
|
|
101440
|
-
* @returns {LinesDbMetadata} Generated lines-db metadata
|
|
101430
|
+
* @param type - Parsed TailorDB type
|
|
101431
|
+
* @param source - Source file info
|
|
101432
|
+
* @returns Generated lines-db metadata
|
|
101441
101433
|
*/
|
|
101442
101434
|
function processLinesDb(type, source) {
|
|
101443
101435
|
if (!source.filePath || !source.exportName) throw new Error(`Missing source info for type ${type.name}`);
|
|
@@ -101478,9 +101470,9 @@ function processLinesDb(type, source) {
|
|
|
101478
101470
|
}
|
|
101479
101471
|
/**
|
|
101480
101472
|
* Generates the schema file content for lines-db
|
|
101481
|
-
* @param
|
|
101482
|
-
* @param
|
|
101483
|
-
* @returns
|
|
101473
|
+
* @param metadata - lines-db metadata
|
|
101474
|
+
* @param importPath - Import path for the TailorDB type
|
|
101475
|
+
* @returns Schema file contents
|
|
101484
101476
|
*/
|
|
101485
101477
|
function generateLinesDbSchemaFile(metadata, importPath) {
|
|
101486
101478
|
const { exportName, optionalFields, omitFields, foreignKeys, indexes } = metadata;
|
|
@@ -101530,40 +101522,249 @@ function generateLinesDbSchemaFile(metadata, importPath) {
|
|
|
101530
101522
|
//#region src/cli/generator/builtin/seed/index.ts
|
|
101531
101523
|
const SeedGeneratorID = "@tailor-platform/seed";
|
|
101532
101524
|
/**
|
|
101533
|
-
* Generates the exec.mjs script content (Node.js executable)
|
|
101534
|
-
* @param
|
|
101535
|
-
* @param
|
|
101536
|
-
* @
|
|
101525
|
+
* Generates the exec.mjs script content (Node.js executable) using gql-ingest Programmatic API
|
|
101526
|
+
* @param machineUserName - Machine user name for token retrieval
|
|
101527
|
+
* @param relativeConfigPath - Config path relative to exec script
|
|
101528
|
+
* @param entityDependencies - Entity dependencies mapping
|
|
101529
|
+
* @returns exec.mjs file contents
|
|
101537
101530
|
*/
|
|
101538
|
-
function generateExecScript(machineUserName, relativeConfigPath) {
|
|
101531
|
+
function generateExecScript(machineUserName, relativeConfigPath, entityDependencies) {
|
|
101532
|
+
const namespaceMap = /* @__PURE__ */ new Map();
|
|
101533
|
+
for (const [type, meta] of Object.entries(entityDependencies)) if (meta.namespace) {
|
|
101534
|
+
if (!namespaceMap.has(meta.namespace)) namespaceMap.set(meta.namespace, []);
|
|
101535
|
+
namespaceMap.get(meta.namespace).push(type);
|
|
101536
|
+
}
|
|
101539
101537
|
return ml`
|
|
101540
|
-
import {
|
|
101538
|
+
import { GQLIngest } from "@jackchuka/gql-ingest";
|
|
101541
101539
|
import { join } from "node:path";
|
|
101542
|
-
import {
|
|
101540
|
+
import { parseArgs, styleText } from "node:util";
|
|
101541
|
+
import { createInterface } from "node:readline";
|
|
101542
|
+
import { show, getMachineUserToken, truncate } from "@tailor-platform/sdk/cli";
|
|
101543
|
+
|
|
101544
|
+
// Parse command-line arguments
|
|
101545
|
+
const { values, positionals } = parseArgs({
|
|
101546
|
+
options: {
|
|
101547
|
+
namespace: { type: "string", short: "n" },
|
|
101548
|
+
"skip-idp": { type: "boolean", default: false },
|
|
101549
|
+
truncate: { type: "boolean", default: false },
|
|
101550
|
+
yes: { type: "boolean", default: false },
|
|
101551
|
+
help: { type: "boolean", short: "h", default: false },
|
|
101552
|
+
},
|
|
101553
|
+
allowPositionals: true,
|
|
101554
|
+
});
|
|
101555
|
+
|
|
101556
|
+
if (values.help) {
|
|
101557
|
+
console.log(\`
|
|
101558
|
+
Usage: node exec.mjs [options] [types...]
|
|
101559
|
+
|
|
101560
|
+
Options:
|
|
101561
|
+
-n, --namespace <ns> Process all types in specified namespace (excludes _User)
|
|
101562
|
+
--skip-idp Skip IdP user (_User) entity
|
|
101563
|
+
--truncate Truncate tables before seeding
|
|
101564
|
+
--yes Skip confirmation prompts (for truncate)
|
|
101565
|
+
-h, --help Show help
|
|
101566
|
+
|
|
101567
|
+
Examples:
|
|
101568
|
+
node exec.mjs # Process all types (default)
|
|
101569
|
+
node exec.mjs --namespace <namespace> # Process tailordb namespace only (no _User)
|
|
101570
|
+
node exec.mjs User Order # Process specific types only
|
|
101571
|
+
node exec.mjs --skip-idp # Process all except _User
|
|
101572
|
+
node exec.mjs --truncate # Truncate all tables, then seed all
|
|
101573
|
+
node exec.mjs --truncate --yes # Truncate all tables without confirmation, then seed all
|
|
101574
|
+
node exec.mjs --truncate --namespace <namespace> # Truncate tailordb, then seed tailordb
|
|
101575
|
+
node exec.mjs --truncate User Order # Truncate User and Order, then seed them
|
|
101576
|
+
\`);
|
|
101577
|
+
process.exit(0);
|
|
101578
|
+
}
|
|
101579
|
+
|
|
101580
|
+
// Helper function to prompt for y/n confirmation
|
|
101581
|
+
const promptConfirmation = (question) => {
|
|
101582
|
+
const rl = createInterface({
|
|
101583
|
+
input: process.stdin,
|
|
101584
|
+
output: process.stdout,
|
|
101585
|
+
});
|
|
101586
|
+
|
|
101587
|
+
return new Promise((resolve) => {
|
|
101588
|
+
rl.question(styleText("yellow", question), (answer) => {
|
|
101589
|
+
rl.close();
|
|
101590
|
+
resolve(answer.toLowerCase().trim());
|
|
101591
|
+
});
|
|
101592
|
+
});
|
|
101593
|
+
};
|
|
101543
101594
|
|
|
101544
101595
|
const configDir = import.meta.dirname;
|
|
101545
101596
|
const configPath = join(configDir, "${relativeConfigPath}");
|
|
101546
101597
|
|
|
101547
|
-
console.log("Starting seed data generation...");
|
|
101598
|
+
console.log(styleText("cyan", "Starting seed data generation..."));
|
|
101599
|
+
|
|
101600
|
+
// Entity configuration
|
|
101601
|
+
const namespaceEntities = {
|
|
101602
|
+
${Array.from(namespaceMap.entries()).map(([namespace, entities]) => {
|
|
101603
|
+
return ` ${namespace}: [\n${entities.map((e) => ` "${e}",`).join("\n")}\n ]`;
|
|
101604
|
+
}).join(",\n")}
|
|
101605
|
+
};
|
|
101606
|
+
const entities = Object.values(namespaceEntities).flat();
|
|
101607
|
+
|
|
101608
|
+
// Determine which entities to process
|
|
101609
|
+
let entitiesToProcess = null;
|
|
101610
|
+
|
|
101611
|
+
const hasNamespace = !!values.namespace;
|
|
101612
|
+
const hasTypes = positionals.length > 0;
|
|
101613
|
+
const skipIdp = values["skip-idp"];
|
|
101614
|
+
|
|
101615
|
+
// Validate mutually exclusive options
|
|
101616
|
+
const optionCount = [hasNamespace, hasTypes].filter(Boolean).length;
|
|
101617
|
+
if (optionCount > 1) {
|
|
101618
|
+
console.error(styleText("red", "Error: Options --namespace and type names are mutually exclusive."));
|
|
101619
|
+
process.exit(1);
|
|
101620
|
+
}
|
|
101621
|
+
|
|
101622
|
+
// --skip-idp and --namespace are redundant (namespace already excludes _User)
|
|
101623
|
+
if (skipIdp && hasNamespace) {
|
|
101624
|
+
console.warn(styleText("yellow", "Warning: --skip-idp is redundant with --namespace (namespace filtering already excludes _User)."));
|
|
101625
|
+
}
|
|
101626
|
+
|
|
101627
|
+
// Filter by namespace (automatically excludes _User as it has no namespace)
|
|
101628
|
+
if (hasNamespace) {
|
|
101629
|
+
const namespace = values.namespace;
|
|
101630
|
+
entitiesToProcess = namespaceEntities[namespace];
|
|
101631
|
+
|
|
101632
|
+
if (!entitiesToProcess || entitiesToProcess.length === 0) {
|
|
101633
|
+
console.error(styleText("red", \`Error: No entities found in namespace "\${namespace}"\`));
|
|
101634
|
+
console.error(styleText("yellow", \`Available namespaces: \${Object.keys(namespaceEntities).join(", ")}\`));
|
|
101635
|
+
process.exit(1);
|
|
101636
|
+
}
|
|
101637
|
+
|
|
101638
|
+
console.log(styleText("cyan", \`Filtering by namespace: \${namespace}\`));
|
|
101639
|
+
console.log(styleText("dim", \`Entities: \${entitiesToProcess.join(", ")}\`));
|
|
101640
|
+
}
|
|
101641
|
+
|
|
101642
|
+
// Filter by specific types
|
|
101643
|
+
if (hasTypes) {
|
|
101644
|
+
const requestedTypes = positionals;
|
|
101645
|
+
const notFoundTypes = [];
|
|
101646
|
+
|
|
101647
|
+
entitiesToProcess = requestedTypes.filter((type) => {
|
|
101648
|
+
if (!entities.includes(type)) {
|
|
101649
|
+
notFoundTypes.push(type);
|
|
101650
|
+
return false;
|
|
101651
|
+
}
|
|
101652
|
+
return true;
|
|
101653
|
+
});
|
|
101654
|
+
|
|
101655
|
+
if (notFoundTypes.length > 0) {
|
|
101656
|
+
console.error(styleText("red", \`Error: The following types were not found: \${notFoundTypes.join(", ")}\`));
|
|
101657
|
+
console.error(styleText("yellow", \`Available types: \${entities.join(", ")}\`));
|
|
101658
|
+
process.exit(1);
|
|
101659
|
+
}
|
|
101660
|
+
|
|
101661
|
+
console.log(styleText("cyan", \`Filtering by types: \${entitiesToProcess.join(", ")}\`));
|
|
101662
|
+
}
|
|
101663
|
+
|
|
101664
|
+
// Apply --skip-idp filter
|
|
101665
|
+
if (skipIdp) {
|
|
101666
|
+
if (entitiesToProcess) {
|
|
101667
|
+
// Filter out _User from already filtered list
|
|
101668
|
+
entitiesToProcess = entitiesToProcess.filter((entity) => entity !== "_User");
|
|
101669
|
+
} else {
|
|
101670
|
+
// Get all entities except _User
|
|
101671
|
+
entitiesToProcess = entities.filter((entity) => entity !== "_User");
|
|
101672
|
+
}
|
|
101673
|
+
console.log(styleText("dim", \`Skipping IdP user (_User)\`));
|
|
101674
|
+
}
|
|
101675
|
+
|
|
101676
|
+
// Truncate tables if requested
|
|
101677
|
+
// Note: --skip-idp only affects seeding, not truncation
|
|
101678
|
+
if (values.truncate) {
|
|
101679
|
+
// Prompt user for confirmation
|
|
101680
|
+
const answer = values.yes ? "y" : await promptConfirmation("Are you sure you want to truncate? (y/n): ");
|
|
101681
|
+
if (answer !== "y") {
|
|
101682
|
+
console.log(styleText("yellow", "Truncate cancelled."));
|
|
101683
|
+
process.exit(0);
|
|
101684
|
+
}
|
|
101548
101685
|
|
|
101686
|
+
console.log(styleText("cyan", "\\nTruncating tables..."));
|
|
101687
|
+
|
|
101688
|
+
try {
|
|
101689
|
+
if (hasNamespace) {
|
|
101690
|
+
// Truncate specific namespace
|
|
101691
|
+
await truncate({
|
|
101692
|
+
configPath,
|
|
101693
|
+
namespace: values.namespace,
|
|
101694
|
+
});
|
|
101695
|
+
} else if (hasTypes) {
|
|
101696
|
+
// Truncate specific types
|
|
101697
|
+
await truncate({
|
|
101698
|
+
configPath,
|
|
101699
|
+
types: entitiesToProcess,
|
|
101700
|
+
});
|
|
101701
|
+
} else {
|
|
101702
|
+
// Truncate all (--skip-idp does not affect truncation)
|
|
101703
|
+
await truncate({
|
|
101704
|
+
configPath,
|
|
101705
|
+
all: true,
|
|
101706
|
+
});
|
|
101707
|
+
}
|
|
101708
|
+
console.log(styleText("green", "Truncate completed.\\n"));
|
|
101709
|
+
} catch (error) {
|
|
101710
|
+
console.error(styleText("red", \`Truncate failed: \${error.message}\`));
|
|
101711
|
+
process.exit(1);
|
|
101712
|
+
}
|
|
101713
|
+
}
|
|
101714
|
+
|
|
101715
|
+
// Get application info and endpoint
|
|
101549
101716
|
const appInfo = await show({ configPath });
|
|
101550
101717
|
const endpoint = \`\${appInfo.url}/query\`;
|
|
101551
101718
|
|
|
101719
|
+
// Get machine user token
|
|
101552
101720
|
const tokenInfo = await getMachineUserToken({ name: "${machineUserName}", configPath });
|
|
101553
|
-
const headers = JSON.stringify({ Authorization: \`Bearer \${tokenInfo.accessToken}\` });
|
|
101554
101721
|
|
|
101555
|
-
|
|
101556
|
-
|
|
101557
|
-
|
|
101722
|
+
// Initialize GQLIngest client
|
|
101723
|
+
const client = new GQLIngest({
|
|
101724
|
+
endpoint,
|
|
101725
|
+
headers: {
|
|
101726
|
+
Authorization: \`Bearer \${tokenInfo.accessToken}\`,
|
|
101727
|
+
},
|
|
101728
|
+
});
|
|
101729
|
+
|
|
101730
|
+
// Progress monitoring event handlers
|
|
101731
|
+
client.on("started", (payload) => {
|
|
101732
|
+
console.log(styleText("cyan", \`Processing \${payload.totalEntities} entities...\`));
|
|
101733
|
+
});
|
|
101734
|
+
|
|
101735
|
+
client.on("entityStart", (payload) => {
|
|
101736
|
+
console.log(styleText("dim", \` Processing \${payload.entityName}...\`));
|
|
101737
|
+
});
|
|
101738
|
+
|
|
101739
|
+
client.on("entityComplete", (payload) => {
|
|
101740
|
+
const { entityName, metrics: { rowsProcessed } } = payload;
|
|
101741
|
+
console.log(styleText("green", \` ✓ \${entityName}: \${rowsProcessed} rows processed\`));
|
|
101742
|
+
});
|
|
101558
101743
|
|
|
101559
|
-
|
|
101560
|
-
|
|
101744
|
+
client.on("rowFailure", (payload) => {
|
|
101745
|
+
console.error(styleText("red", \` ✗ Row \${payload.rowIndex} in \${payload.entityName} failed: \${payload.error.message}\`));
|
|
101746
|
+
});
|
|
101561
101747
|
|
|
101748
|
+
// Run ingestion
|
|
101562
101749
|
try {
|
|
101563
|
-
|
|
101750
|
+
let result;
|
|
101751
|
+
if (entitiesToProcess && entitiesToProcess.length > 0) {
|
|
101752
|
+
result = await client.ingestEntities(configDir, entitiesToProcess);
|
|
101753
|
+
} else {
|
|
101754
|
+
result = await client.ingest(configDir);
|
|
101755
|
+
}
|
|
101756
|
+
|
|
101757
|
+
if (result.success) {
|
|
101758
|
+
console.log(styleText("green", "\\n✓ Seed data generation completed successfully"));
|
|
101759
|
+
console.log(client.getMetricsSummary());
|
|
101760
|
+
} else {
|
|
101761
|
+
console.error(styleText("red", "\\n✗ Seed data generation failed"));
|
|
101762
|
+
console.error(client.getMetricsSummary());
|
|
101763
|
+
process.exit(1);
|
|
101764
|
+
}
|
|
101564
101765
|
} catch (error) {
|
|
101565
|
-
console.error("Seed failed with
|
|
101566
|
-
process.exit(
|
|
101766
|
+
console.error(styleText("red", \`\\n✗ Seed data generation failed with error: \${error.message}\`));
|
|
101767
|
+
process.exit(1);
|
|
101567
101768
|
}
|
|
101568
101769
|
|
|
101569
101770
|
`;
|
|
@@ -101571,19 +101772,17 @@ function generateExecScript(machineUserName, relativeConfigPath) {
|
|
|
101571
101772
|
/**
|
|
101572
101773
|
* Factory function to create a Seed generator.
|
|
101573
101774
|
* Combines GraphQL Ingest and lines-db schema generation.
|
|
101574
|
-
* @param
|
|
101575
|
-
* @
|
|
101576
|
-
* @param {string} [options.machineUserName] - Machine user name for seeding
|
|
101577
|
-
* @returns {TailorDBGenerator<SeedTypeMetadata, Record<string, SeedTypeMetadata>>} Seed generator
|
|
101775
|
+
* @param options - Seed generator options
|
|
101776
|
+
* @returns Seed generator
|
|
101578
101777
|
*/
|
|
101579
101778
|
function createSeedGenerator(options) {
|
|
101580
101779
|
return {
|
|
101581
101780
|
id: SeedGeneratorID,
|
|
101582
101781
|
description: "Generates seed data files (GraphQL Ingest + lines-db schema)",
|
|
101583
101782
|
dependencies: ["tailordb"],
|
|
101584
|
-
processType: ({ type, source }) => {
|
|
101783
|
+
processType: ({ type, source, namespace }) => {
|
|
101585
101784
|
return {
|
|
101586
|
-
gqlIngest: processGqlIngest(type),
|
|
101785
|
+
gqlIngest: processGqlIngest(type, namespace),
|
|
101587
101786
|
linesDb: processLinesDb(type, source)
|
|
101588
101787
|
};
|
|
101589
101788
|
},
|
|
@@ -101597,7 +101796,10 @@ function createSeedGenerator(options) {
|
|
|
101597
101796
|
if (!(outputBaseDir in entityDependencies)) entityDependencies[outputBaseDir] = {};
|
|
101598
101797
|
for (const [_typeName, metadata] of Object.entries(nsResult.types)) {
|
|
101599
101798
|
const { gqlIngest, linesDb } = metadata;
|
|
101600
|
-
entityDependencies[outputBaseDir][gqlIngest.name] =
|
|
101799
|
+
entityDependencies[outputBaseDir][gqlIngest.name] = {
|
|
101800
|
+
namespace: gqlIngest.namespace,
|
|
101801
|
+
dependencies: gqlIngest.dependencies
|
|
101802
|
+
};
|
|
101601
101803
|
files.push({
|
|
101602
101804
|
path: path$20.join(outputBaseDir, "mappings", `${gqlIngest.name}.json`),
|
|
101603
101805
|
content: JSON.stringify(gqlIngest.mapping, null, 2) + "\n"
|
|
@@ -101623,7 +101825,7 @@ function createSeedGenerator(options) {
|
|
|
101623
101825
|
if (idpUser) {
|
|
101624
101826
|
const outputBaseDir = options.distPath;
|
|
101625
101827
|
if (!(outputBaseDir in entityDependencies)) entityDependencies[outputBaseDir] = {};
|
|
101626
|
-
entityDependencies[outputBaseDir][idpUser.name] = idpUser.dependencies;
|
|
101828
|
+
entityDependencies[outputBaseDir][idpUser.name] = { dependencies: idpUser.dependencies };
|
|
101627
101829
|
files.push({
|
|
101628
101830
|
path: path$20.join(outputBaseDir, idpUser.mapping.graphqlFile),
|
|
101629
101831
|
content: idpUser.graphql
|
|
@@ -101647,14 +101849,14 @@ function createSeedGenerator(options) {
|
|
|
101647
101849
|
files.push({
|
|
101648
101850
|
path: path$20.join(outputDir, "config.yaml"),
|
|
101649
101851
|
content: `entityDependencies:
|
|
101650
|
-
${Object.entries(dependencies).map(([type, deps]) => `${type}: [${deps.join(", ")}]`).join("\n ")}
|
|
101852
|
+
${Object.entries(dependencies).map(([type, deps]) => `${type}: [${deps.dependencies.join(", ")}]`).join("\n ")}
|
|
101651
101853
|
`
|
|
101652
101854
|
});
|
|
101653
101855
|
if (options.machineUserName) {
|
|
101654
101856
|
const relativeConfigPath = path$20.relative(outputDir, configPath);
|
|
101655
101857
|
files.push({
|
|
101656
101858
|
path: path$20.join(outputDir, "exec.mjs"),
|
|
101657
|
-
content: generateExecScript(options.machineUserName, relativeConfigPath)
|
|
101859
|
+
content: generateExecScript(options.machineUserName, relativeConfigPath, dependencies)
|
|
101658
101860
|
});
|
|
101659
101861
|
}
|
|
101660
101862
|
}
|
|
@@ -101685,8 +101887,8 @@ const builtinGenerators = new Map([
|
|
|
101685
101887
|
const GeneratorConfigSchema = createGeneratorConfigSchema(builtinGenerators);
|
|
101686
101888
|
/**
|
|
101687
101889
|
* Load Tailor configuration file and associated generators.
|
|
101688
|
-
* @param
|
|
101689
|
-
* @returns
|
|
101890
|
+
* @param configPath - Optional explicit config path
|
|
101891
|
+
* @returns Loaded config and generators
|
|
101690
101892
|
*/
|
|
101691
101893
|
async function loadConfig(configPath) {
|
|
101692
101894
|
const foundPath = loadConfigPath(configPath);
|
|
@@ -101723,10 +101925,10 @@ function extractAttributesFromConfig(config) {
|
|
|
101723
101925
|
}
|
|
101724
101926
|
/**
|
|
101725
101927
|
* Generate the contents of the user-defined type definition file.
|
|
101726
|
-
* @param
|
|
101727
|
-
* @param
|
|
101728
|
-
* @param
|
|
101729
|
-
* @returns
|
|
101928
|
+
* @param attributeMap - Attribute map configuration
|
|
101929
|
+
* @param attributeList - Attribute list configuration
|
|
101930
|
+
* @param env - Environment configuration
|
|
101931
|
+
* @returns Generated type definition source
|
|
101730
101932
|
*/
|
|
101731
101933
|
function generateTypeDefinition(attributeMap, attributeList, env) {
|
|
101732
101934
|
const mapFields = attributeMap ? Object.entries(attributeMap).map(([key, value]) => ` ${key}: ${value};`).join("\n") : "";
|
|
@@ -101787,8 +101989,8 @@ function collectAttributesFromConfig(config) {
|
|
|
101787
101989
|
}
|
|
101788
101990
|
/**
|
|
101789
101991
|
* Resolve the output path for the generated type definition file.
|
|
101790
|
-
* @param
|
|
101791
|
-
* @returns
|
|
101992
|
+
* @param configPath - Path to Tailor config file
|
|
101993
|
+
* @returns Absolute path to the type definition file
|
|
101792
101994
|
*/
|
|
101793
101995
|
function resolveTypeDefinitionPath(configPath) {
|
|
101794
101996
|
const typePath = process.env.TAILOR_PLATFORM_SDK_TYPE_PATH;
|
|
@@ -101800,9 +102002,9 @@ function resolveTypeDefinitionPath(configPath) {
|
|
|
101800
102002
|
}
|
|
101801
102003
|
/**
|
|
101802
102004
|
* Generate user type definitions from the app config and write them to disk.
|
|
101803
|
-
* @param
|
|
101804
|
-
* @param
|
|
101805
|
-
* @returns
|
|
102005
|
+
* @param config - Application config
|
|
102006
|
+
* @param configPath - Path to Tailor config file
|
|
102007
|
+
* @returns Promise that resolves when types are generated
|
|
101806
102008
|
*/
|
|
101807
102009
|
async function generateUserTypes(config, configPath) {
|
|
101808
102010
|
try {
|
|
@@ -101846,8 +102048,8 @@ function resolvePackageDirectory(startDir) {
|
|
|
101846
102048
|
//#region src/cli/apply/services/label.ts
|
|
101847
102049
|
/**
|
|
101848
102050
|
* Build TRN prefix for a workspace.
|
|
101849
|
-
* @param
|
|
101850
|
-
* @returns
|
|
102051
|
+
* @param workspaceId - Workspace ID
|
|
102052
|
+
* @returns TRN prefix string
|
|
101851
102053
|
*/
|
|
101852
102054
|
function trnPrefix(workspaceId) {
|
|
101853
102055
|
return `trn:v1:workspace:${workspaceId}`;
|
|
@@ -101855,9 +102057,9 @@ function trnPrefix(workspaceId) {
|
|
|
101855
102057
|
const sdkNameLabelKey = "sdk-name";
|
|
101856
102058
|
/**
|
|
101857
102059
|
* Build metadata request with SDK labels.
|
|
101858
|
-
* @param
|
|
101859
|
-
* @param
|
|
101860
|
-
* @returns
|
|
102060
|
+
* @param trn - Target TRN
|
|
102061
|
+
* @param appName - Application name label
|
|
102062
|
+
* @returns Metadata request
|
|
101861
102063
|
*/
|
|
101862
102064
|
async function buildMetaRequest(trn$7, appName) {
|
|
101863
102065
|
const packageJson$1 = await readPackageJson();
|
|
@@ -101902,10 +102104,10 @@ var ChangeSet = class {
|
|
|
101902
102104
|
//#region src/cli/apply/services/application.ts
|
|
101903
102105
|
/**
|
|
101904
102106
|
* Apply application changes for the given phase.
|
|
101905
|
-
* @param
|
|
101906
|
-
* @param
|
|
101907
|
-
* @param
|
|
101908
|
-
* @returns
|
|
102107
|
+
* @param client - Operator client instance
|
|
102108
|
+
* @param changeSet - Planned application changes
|
|
102109
|
+
* @param phase - Apply phase
|
|
102110
|
+
* @returns Promise that resolves when applications are applied
|
|
101909
102111
|
*/
|
|
101910
102112
|
async function applyApplication(client, changeSet, phase = "create-update") {
|
|
101911
102113
|
if (phase === "create-update") await Promise.all([...changeSet.creates.map(async (create$1) => {
|
|
@@ -101926,10 +102128,11 @@ function trn$6(workspaceId, name$1) {
|
|
|
101926
102128
|
}
|
|
101927
102129
|
/**
|
|
101928
102130
|
* Plan application changes based on current and desired state.
|
|
101929
|
-
* @param
|
|
101930
|
-
* @returns
|
|
102131
|
+
* @param context - Planning context
|
|
102132
|
+
* @returns Planned changes
|
|
101931
102133
|
*/
|
|
101932
|
-
async function planApplication(
|
|
102134
|
+
async function planApplication(context) {
|
|
102135
|
+
const { client, workspaceId, application, forRemoval } = context;
|
|
101933
102136
|
const changeSet = new ChangeSet("Applications");
|
|
101934
102137
|
const existingApplications = await fetchAll(async (pageToken) => {
|
|
101935
102138
|
try {
|
|
@@ -102036,28 +102239,28 @@ function protoSubgraph(subgraph) {
|
|
|
102036
102239
|
//#region src/cli/apply/services/idp.ts
|
|
102037
102240
|
/**
|
|
102038
102241
|
* Build the vault name for an IdP client.
|
|
102039
|
-
* @param
|
|
102040
|
-
* @param
|
|
102041
|
-
* @returns
|
|
102242
|
+
* @param namespaceName - IdP namespace name
|
|
102243
|
+
* @param clientName - IdP client name
|
|
102244
|
+
* @returns Vault name
|
|
102042
102245
|
*/
|
|
102043
102246
|
function idpClientVaultName(namespaceName, clientName) {
|
|
102044
102247
|
return `idp-${namespaceName}-${clientName}`;
|
|
102045
102248
|
}
|
|
102046
102249
|
/**
|
|
102047
102250
|
* Build the secret name for an IdP client.
|
|
102048
|
-
* @param
|
|
102049
|
-
* @param
|
|
102050
|
-
* @returns
|
|
102251
|
+
* @param namespaceName - IdP namespace name
|
|
102252
|
+
* @param clientName - IdP client name
|
|
102253
|
+
* @returns Secret name
|
|
102051
102254
|
*/
|
|
102052
102255
|
function idpClientSecretName(namespaceName, clientName) {
|
|
102053
102256
|
return `client-secret-${namespaceName}-${clientName}`;
|
|
102054
102257
|
}
|
|
102055
102258
|
/**
|
|
102056
102259
|
* Apply IdP-related changes for the given phase.
|
|
102057
|
-
* @param
|
|
102058
|
-
* @param
|
|
102059
|
-
* @param
|
|
102060
|
-
* @returns
|
|
102260
|
+
* @param client - Operator client instance
|
|
102261
|
+
* @param result - Planned IdP changes
|
|
102262
|
+
* @param phase - Apply phase
|
|
102263
|
+
* @returns Promise that resolves when IdP changes are applied
|
|
102061
102264
|
*/
|
|
102062
102265
|
async function applyIdP(client, result, phase = "create-update") {
|
|
102063
102266
|
const { changeSet } = result;
|
|
@@ -102118,10 +102321,11 @@ async function applyIdP(client, result, phase = "create-update") {
|
|
|
102118
102321
|
}
|
|
102119
102322
|
/**
|
|
102120
102323
|
* Plan IdP-related changes based on current and desired state.
|
|
102121
|
-
* @param
|
|
102122
|
-
* @returns
|
|
102324
|
+
* @param context - Planning context
|
|
102325
|
+
* @returns Planned changes and metadata
|
|
102123
102326
|
*/
|
|
102124
|
-
async function planIdP(
|
|
102327
|
+
async function planIdP(context) {
|
|
102328
|
+
const { client, workspaceId, application, forRemoval } = context;
|
|
102125
102329
|
const idps = forRemoval ? [] : application.idpServices;
|
|
102126
102330
|
const { changeSet: serviceChangeSet, conflicts, unmanaged, resourceOwners } = await planServices$3(client, workspaceId, application.name, idps);
|
|
102127
102331
|
const clientChangeSet = await planClients(client, workspaceId, idps, serviceChangeSet.deletes.map((del) => del.name));
|
|
@@ -102311,10 +102515,10 @@ function convertLang(lang) {
|
|
|
102311
102515
|
//#region src/cli/apply/services/auth.ts
|
|
102312
102516
|
/**
|
|
102313
102517
|
* Apply auth-related changes for the given phase.
|
|
102314
|
-
* @param
|
|
102315
|
-
* @param
|
|
102316
|
-
* @param
|
|
102317
|
-
* @returns
|
|
102518
|
+
* @param client - Operator client instance
|
|
102519
|
+
* @param result - Planned auth changes
|
|
102520
|
+
* @param phase - Apply phase (defaults to "create-update")
|
|
102521
|
+
* @returns Promise that resolves when auth changes are applied
|
|
102318
102522
|
*/
|
|
102319
102523
|
async function applyAuth(client, result, phase = "create-update") {
|
|
102320
102524
|
const { changeSet } = result;
|
|
@@ -102322,7 +102526,10 @@ async function applyAuth(client, result, phase = "create-update") {
|
|
|
102322
102526
|
await Promise.all([...changeSet.service.creates.map(async (create$1) => {
|
|
102323
102527
|
await client.createAuthService(create$1.request);
|
|
102324
102528
|
await client.setMetadata(create$1.metaRequest);
|
|
102325
|
-
}), ...changeSet.service.updates.map((update) =>
|
|
102529
|
+
}), ...changeSet.service.updates.map(async (update) => {
|
|
102530
|
+
await client.updateAuthService(update.request);
|
|
102531
|
+
await client.setMetadata(update.metaRequest);
|
|
102532
|
+
})]);
|
|
102326
102533
|
await Promise.all([...changeSet.idpConfig.creates.map(async (create$1) => {
|
|
102327
102534
|
if (create$1.idpConfig.kind === "BuiltInIdP") create$1.request.idpConfig.config = await protoBuiltinIdPConfig(client, create$1.request.workspaceId, create$1.idpConfig);
|
|
102328
102535
|
return client.createAuthIDPConfig(create$1.request);
|
|
@@ -102354,10 +102561,11 @@ async function applyAuth(client, result, phase = "create-update") {
|
|
|
102354
102561
|
}
|
|
102355
102562
|
/**
|
|
102356
102563
|
* Plan auth-related changes based on current and desired state.
|
|
102357
|
-
* @param
|
|
102358
|
-
* @returns
|
|
102564
|
+
* @param context - Planning context
|
|
102565
|
+
* @returns Planned auth changes and metadata
|
|
102359
102566
|
*/
|
|
102360
|
-
async function planAuth(
|
|
102567
|
+
async function planAuth(context) {
|
|
102568
|
+
const { client, workspaceId, application, forRemoval } = context;
|
|
102361
102569
|
const auths = [];
|
|
102362
102570
|
if (!forRemoval && application.authService) {
|
|
102363
102571
|
await application.authService.resolveNamespaces();
|
|
@@ -102441,6 +102649,11 @@ async function planServices$2(client, workspaceId, appName, auths) {
|
|
|
102441
102649
|
});
|
|
102442
102650
|
changeSet.updates.push({
|
|
102443
102651
|
name: config.name,
|
|
102652
|
+
request: {
|
|
102653
|
+
workspaceId,
|
|
102654
|
+
namespaceName: config.name,
|
|
102655
|
+
publishSessionEvents: config.publishSessionEvents
|
|
102656
|
+
},
|
|
102444
102657
|
metaRequest
|
|
102445
102658
|
});
|
|
102446
102659
|
delete existingServices[config.name];
|
|
@@ -102448,7 +102661,8 @@ async function planServices$2(client, workspaceId, appName, auths) {
|
|
|
102448
102661
|
name: config.name,
|
|
102449
102662
|
request: {
|
|
102450
102663
|
workspaceId,
|
|
102451
|
-
namespaceName: config.name
|
|
102664
|
+
namespaceName: config.name,
|
|
102665
|
+
publishSessionEvents: config.publishSessionEvents
|
|
102452
102666
|
},
|
|
102453
102667
|
metaRequest
|
|
102454
102668
|
});
|
|
@@ -103165,10 +103379,10 @@ function protoSCIMAttribute(attr) {
|
|
|
103165
103379
|
//#region src/cli/apply/services/confirm.ts
|
|
103166
103380
|
/**
|
|
103167
103381
|
* Confirm reassignment of resources when owner conflicts are detected.
|
|
103168
|
-
* @param
|
|
103169
|
-
* @param
|
|
103170
|
-
* @param
|
|
103171
|
-
* @returns
|
|
103382
|
+
* @param conflicts - Detected owner conflicts
|
|
103383
|
+
* @param appName - Target application name
|
|
103384
|
+
* @param yes - Whether to auto-confirm without prompting
|
|
103385
|
+
* @returns Promise that resolves when confirmation completes
|
|
103172
103386
|
*/
|
|
103173
103387
|
async function confirmOwnerConflict(conflicts, appName, yes) {
|
|
103174
103388
|
if (conflicts.length === 0) return;
|
|
@@ -103194,10 +103408,10 @@ async function confirmOwnerConflict(conflicts, appName, yes) {
|
|
|
103194
103408
|
}
|
|
103195
103409
|
/**
|
|
103196
103410
|
* Confirm allowing tailor-sdk to manage previously unmanaged resources.
|
|
103197
|
-
* @param
|
|
103198
|
-
* @param
|
|
103199
|
-
* @param
|
|
103200
|
-
* @returns
|
|
103411
|
+
* @param resources - Unmanaged resources
|
|
103412
|
+
* @param appName - Target application name
|
|
103413
|
+
* @param yes - Whether to auto-confirm without prompting
|
|
103414
|
+
* @returns Promise that resolves when confirmation completes
|
|
103201
103415
|
*/
|
|
103202
103416
|
async function confirmUnmanagedResources(resources, appName, yes) {
|
|
103203
103417
|
if (resources.length === 0) return;
|
|
@@ -103222,9 +103436,9 @@ async function confirmUnmanagedResources(resources, appName, yes) {
|
|
|
103222
103436
|
}
|
|
103223
103437
|
/**
|
|
103224
103438
|
* Confirm deletion of important resources.
|
|
103225
|
-
* @param
|
|
103226
|
-
* @param
|
|
103227
|
-
* @returns
|
|
103439
|
+
* @param resources - Resources scheduled for deletion
|
|
103440
|
+
* @param yes - Whether to auto-confirm without prompting
|
|
103441
|
+
* @returns Promise that resolves when confirmation completes
|
|
103228
103442
|
*/
|
|
103229
103443
|
async function confirmImportantResourceDeletion(resources, yes) {
|
|
103230
103444
|
if (resources.length === 0) return;
|
|
@@ -103250,10 +103464,10 @@ async function confirmImportantResourceDeletion(resources, yes) {
|
|
|
103250
103464
|
//#region src/cli/apply/services/executor.ts
|
|
103251
103465
|
/**
|
|
103252
103466
|
* Apply executor-related changes for the given phase.
|
|
103253
|
-
* @param
|
|
103254
|
-
* @param
|
|
103255
|
-
* @param
|
|
103256
|
-
* @returns
|
|
103467
|
+
* @param client - Operator client instance
|
|
103468
|
+
* @param result - Planned executor changes
|
|
103469
|
+
* @param phase - Apply phase (defaults to "create-update")
|
|
103470
|
+
* @returns Promise that resolves when executors are applied
|
|
103257
103471
|
*/
|
|
103258
103472
|
async function applyExecutor(client, result, phase = "create-update") {
|
|
103259
103473
|
const { changeSet } = result;
|
|
@@ -103271,10 +103485,11 @@ function trn$3(workspaceId, name$1) {
|
|
|
103271
103485
|
}
|
|
103272
103486
|
/**
|
|
103273
103487
|
* Plan executor-related changes based on current and desired state.
|
|
103274
|
-
* @param
|
|
103275
|
-
* @returns
|
|
103488
|
+
* @param context - Planning context
|
|
103489
|
+
* @returns Planned changes
|
|
103276
103490
|
*/
|
|
103277
|
-
async function planExecutor(
|
|
103491
|
+
async function planExecutor(context) {
|
|
103492
|
+
const { client, workspaceId, application, forRemoval } = context;
|
|
103278
103493
|
const changeSet = new ChangeSet("Executors");
|
|
103279
103494
|
const conflicts = [];
|
|
103280
103495
|
const unmanaged = [];
|
|
@@ -103353,8 +103568,8 @@ async function planExecutor({ client, workspaceId, application, forRemoval }) {
|
|
|
103353
103568
|
/**
|
|
103354
103569
|
* Build args expression for resolverExecuted trigger.
|
|
103355
103570
|
* Transforms server's succeeded/failed fields to success/result/error fields.
|
|
103356
|
-
* @param
|
|
103357
|
-
* @returns
|
|
103571
|
+
* @param additionalFields - Additional fields to include in the args expression
|
|
103572
|
+
* @returns JavaScript expression for resolverExecuted trigger args
|
|
103358
103573
|
*/
|
|
103359
103574
|
function buildResolverExecutedArgsExpr(additionalFields) {
|
|
103360
103575
|
const baseFields = `...args, appNamespace: args.namespaceName, success: !!args.succeeded, result: args.succeeded?.result.resolver, error: args.failed?.error`;
|
|
@@ -103538,10 +103753,10 @@ const SCALAR_TYPE_MAP = {
|
|
|
103538
103753
|
};
|
|
103539
103754
|
/**
|
|
103540
103755
|
* Apply resolver pipeline changes for the given phase.
|
|
103541
|
-
* @param
|
|
103542
|
-
* @param
|
|
103543
|
-
* @param
|
|
103544
|
-
* @returns
|
|
103756
|
+
* @param client - Operator client instance
|
|
103757
|
+
* @param result - Planned pipeline changes
|
|
103758
|
+
* @param phase - Apply phase
|
|
103759
|
+
* @returns Promise that resolves when pipeline changes are applied
|
|
103545
103760
|
*/
|
|
103546
103761
|
async function applyPipeline(client, result, phase = "create-update") {
|
|
103547
103762
|
const { changeSet } = result;
|
|
@@ -103559,10 +103774,11 @@ async function applyPipeline(client, result, phase = "create-update") {
|
|
|
103559
103774
|
}
|
|
103560
103775
|
/**
|
|
103561
103776
|
* Plan resolver pipeline changes based on current and desired state.
|
|
103562
|
-
* @param
|
|
103563
|
-
* @returns
|
|
103777
|
+
* @param context - Planning context
|
|
103778
|
+
* @returns Planned changes
|
|
103564
103779
|
*/
|
|
103565
|
-
async function planPipeline(
|
|
103780
|
+
async function planPipeline(context) {
|
|
103781
|
+
const { client, workspaceId, application, forRemoval } = context;
|
|
103566
103782
|
const pipelines = [];
|
|
103567
103783
|
if (!forRemoval) for (const pipeline of application.resolverServices) {
|
|
103568
103784
|
await pipeline.loadResolvers();
|
|
@@ -103798,10 +104014,10 @@ function protoFields(fields, baseName, isInput) {
|
|
|
103798
104014
|
//#region src/cli/apply/services/staticwebsite.ts
|
|
103799
104015
|
/**
|
|
103800
104016
|
* Apply static website changes for the given phase.
|
|
103801
|
-
* @param
|
|
103802
|
-
* @param
|
|
103803
|
-
* @param
|
|
103804
|
-
* @returns
|
|
104017
|
+
* @param client - Operator client instance
|
|
104018
|
+
* @param result - Planned static website changes
|
|
104019
|
+
* @param phase - Apply phase
|
|
104020
|
+
* @returns Promise that resolves when static websites are applied
|
|
103805
104021
|
*/
|
|
103806
104022
|
async function applyStaticWebsite(client, result, phase = "create-update") {
|
|
103807
104023
|
const { changeSet } = result;
|
|
@@ -103819,10 +104035,11 @@ function trn$1(workspaceId, name$1) {
|
|
|
103819
104035
|
}
|
|
103820
104036
|
/**
|
|
103821
104037
|
* Plan static website changes based on current and desired state.
|
|
103822
|
-
* @param
|
|
103823
|
-
* @returns
|
|
104038
|
+
* @param context - Planning context
|
|
104039
|
+
* @returns Planned changes
|
|
103824
104040
|
*/
|
|
103825
|
-
async function planStaticWebsite(
|
|
104041
|
+
async function planStaticWebsite(context) {
|
|
104042
|
+
const { client, workspaceId, application, forRemoval } = context;
|
|
103826
104043
|
const changeSet = new ChangeSet("StaticWebsites");
|
|
103827
104044
|
const conflicts = [];
|
|
103828
104045
|
const unmanaged = [];
|
|
@@ -103913,10 +104130,10 @@ async function planStaticWebsite({ client, workspaceId, application, forRemoval
|
|
|
103913
104130
|
//#region src/cli/apply/services/tailordb.ts
|
|
103914
104131
|
/**
|
|
103915
104132
|
* Apply TailorDB-related changes for the given phase.
|
|
103916
|
-
* @param
|
|
103917
|
-
* @param
|
|
103918
|
-
* @param
|
|
103919
|
-
* @returns
|
|
104133
|
+
* @param client - Operator client instance
|
|
104134
|
+
* @param result - Planned TailorDB changes
|
|
104135
|
+
* @param phase - Apply phase (defaults to "create-update")
|
|
104136
|
+
* @returns Promise that resolves when TailorDB changes are applied
|
|
103920
104137
|
*/
|
|
103921
104138
|
async function applyTailorDB(client, result, phase = "create-update") {
|
|
103922
104139
|
const { changeSet } = result;
|
|
@@ -103934,10 +104151,11 @@ async function applyTailorDB(client, result, phase = "create-update") {
|
|
|
103934
104151
|
}
|
|
103935
104152
|
/**
|
|
103936
104153
|
* Plan TailorDB-related changes based on current and desired state.
|
|
103937
|
-
* @param
|
|
103938
|
-
* @returns
|
|
104154
|
+
* @param context - Planning context
|
|
104155
|
+
* @returns Planned changes
|
|
103939
104156
|
*/
|
|
103940
|
-
async function planTailorDB(
|
|
104157
|
+
async function planTailorDB(context) {
|
|
104158
|
+
const { client, workspaceId, application, forRemoval } = context;
|
|
103941
104159
|
const tailordbs = [];
|
|
103942
104160
|
if (!forRemoval) for (const tailordb of application.tailorDBServices) {
|
|
103943
104161
|
await tailordb.loadTypes();
|
|
@@ -104467,10 +104685,10 @@ function protoGqlOperand(operand) {
|
|
|
104467
104685
|
//#region src/cli/apply/services/workflow.ts
|
|
104468
104686
|
/**
|
|
104469
104687
|
* Apply workflow changes for the given phase.
|
|
104470
|
-
* @param
|
|
104471
|
-
* @param
|
|
104472
|
-
* @param
|
|
104473
|
-
* @returns
|
|
104688
|
+
* @param client - Operator client instance
|
|
104689
|
+
* @param result - Planned workflow changes
|
|
104690
|
+
* @param phase - Apply phase
|
|
104691
|
+
* @returns Promise that resolves when workflows are applied
|
|
104474
104692
|
*/
|
|
104475
104693
|
async function applyWorkflow(client, result, phase = "create-update") {
|
|
104476
104694
|
const { changeSet, appName } = result;
|
|
@@ -104502,9 +104720,9 @@ async function applyWorkflow(client, result, phase = "create-update") {
|
|
|
104502
104720
|
}
|
|
104503
104721
|
/**
|
|
104504
104722
|
* Filter job function versions to only include those used by a workflow
|
|
104505
|
-
* @param
|
|
104506
|
-
* @param
|
|
104507
|
-
* @returns
|
|
104723
|
+
* @param allVersions - Map of job function names to versions
|
|
104724
|
+
* @param usedJobNames - Job names used by the workflow
|
|
104725
|
+
* @returns Filtered job function versions
|
|
104508
104726
|
*/
|
|
104509
104727
|
function filterJobFunctionVersions(allVersions, usedJobNames) {
|
|
104510
104728
|
const filtered = {};
|
|
@@ -104516,10 +104734,10 @@ function filterJobFunctionVersions(allVersions, usedJobNames) {
|
|
|
104516
104734
|
* Only registers jobs that are actually used (based on usedJobNames in changeSet).
|
|
104517
104735
|
* Uses create for new jobs and update for existing jobs.
|
|
104518
104736
|
* Sets metadata on used JobFunctions and removes metadata from unused ones.
|
|
104519
|
-
* @param
|
|
104520
|
-
* @param
|
|
104521
|
-
* @param
|
|
104522
|
-
* @returns
|
|
104737
|
+
* @param client - Operator client instance
|
|
104738
|
+
* @param changeSet - Workflow change set
|
|
104739
|
+
* @param appName - Application name
|
|
104740
|
+
* @returns Map of job function names to versions
|
|
104523
104741
|
*/
|
|
104524
104742
|
async function registerJobFunctions(client, changeSet, appName) {
|
|
104525
104743
|
const jobFunctionVersions = {};
|
|
@@ -104573,12 +104791,12 @@ function jobFunctionTrn(workspaceId, name$1) {
|
|
|
104573
104791
|
}
|
|
104574
104792
|
/**
|
|
104575
104793
|
* Plan workflow changes and job functions based on current and desired state.
|
|
104576
|
-
* @param
|
|
104577
|
-
* @param
|
|
104578
|
-
* @param
|
|
104579
|
-
* @param
|
|
104580
|
-
* @param
|
|
104581
|
-
* @returns
|
|
104794
|
+
* @param client - Operator client instance
|
|
104795
|
+
* @param workspaceId - Workspace ID
|
|
104796
|
+
* @param appName - Application name
|
|
104797
|
+
* @param workflows - Parsed workflows
|
|
104798
|
+
* @param mainJobDeps - Main job dependencies by workflow
|
|
104799
|
+
* @returns Planned workflow changes
|
|
104582
104800
|
*/
|
|
104583
104801
|
async function planWorkflow(client, workspaceId, appName, workflows, mainJobDeps) {
|
|
104584
104802
|
const changeSet = new ChangeSet("Workflows");
|
|
@@ -104673,8 +104891,8 @@ async function loadWorkflowScripts() {
|
|
|
104673
104891
|
//#region src/cli/apply/index.ts
|
|
104674
104892
|
/**
|
|
104675
104893
|
* Apply the configured application to the Tailor platform.
|
|
104676
|
-
* @param
|
|
104677
|
-
* @returns
|
|
104894
|
+
* @param options - Options for apply execution
|
|
104895
|
+
* @returns Promise that resolves when apply completes
|
|
104678
104896
|
*/
|
|
104679
104897
|
async function apply(options) {
|
|
104680
104898
|
const { config, configPath } = await loadConfig(options?.configPath);
|
|
@@ -104883,8 +105101,8 @@ var DependencyGraphManager = class {
|
|
|
104883
105101
|
}
|
|
104884
105102
|
/**
|
|
104885
105103
|
* Build the dependency graph from the given files.
|
|
104886
|
-
* @param
|
|
104887
|
-
* @returns
|
|
105104
|
+
* @param filePaths - File paths to analyze
|
|
105105
|
+
* @returns Promise that resolves when the graph is built
|
|
104888
105106
|
*/
|
|
104889
105107
|
async buildGraph(filePaths) {
|
|
104890
105108
|
try {
|
|
@@ -104929,8 +105147,8 @@ var DependencyGraphManager = class {
|
|
|
104929
105147
|
}
|
|
104930
105148
|
/**
|
|
104931
105149
|
* Get every file that depends on the specified file (all levels).
|
|
104932
|
-
* @param
|
|
104933
|
-
* @returns
|
|
105150
|
+
* @param filePath - File path to inspect
|
|
105151
|
+
* @returns List of dependent files
|
|
104934
105152
|
*/
|
|
104935
105153
|
getDependents(filePath) {
|
|
104936
105154
|
const visited = /* @__PURE__ */ new Set();
|
|
@@ -104938,8 +105156,8 @@ var DependencyGraphManager = class {
|
|
|
104938
105156
|
}
|
|
104939
105157
|
/**
|
|
104940
105158
|
* Get every file the specified file depends on (all levels).
|
|
104941
|
-
* @param
|
|
104942
|
-
* @returns
|
|
105159
|
+
* @param filePath - File path to inspect
|
|
105160
|
+
* @returns List of dependency files
|
|
104943
105161
|
*/
|
|
104944
105162
|
getDependencies(filePath) {
|
|
104945
105163
|
const visited = /* @__PURE__ */ new Set();
|
|
@@ -104947,7 +105165,7 @@ var DependencyGraphManager = class {
|
|
|
104947
105165
|
}
|
|
104948
105166
|
/**
|
|
104949
105167
|
* Detect circular dependencies.
|
|
104950
|
-
* @returns
|
|
105168
|
+
* @returns List of circular dependency cycles
|
|
104951
105169
|
*/
|
|
104952
105170
|
findCircularDependencies() {
|
|
104953
105171
|
if (!this.madgeInstance) return [];
|
|
@@ -104960,7 +105178,7 @@ var DependencyGraphManager = class {
|
|
|
104960
105178
|
}
|
|
104961
105179
|
/**
|
|
104962
105180
|
* Add a node to the graph.
|
|
104963
|
-
* @param
|
|
105181
|
+
* @param filePath - File path to add as a node
|
|
104964
105182
|
*/
|
|
104965
105183
|
addNode(filePath) {
|
|
104966
105184
|
const absolutePath = path$20.resolve(filePath);
|
|
@@ -104972,7 +105190,7 @@ var DependencyGraphManager = class {
|
|
|
104972
105190
|
}
|
|
104973
105191
|
/**
|
|
104974
105192
|
* Remove a node from the graph.
|
|
104975
|
-
* @param
|
|
105193
|
+
* @param filePath - File path to remove from the graph
|
|
104976
105194
|
*/
|
|
104977
105195
|
removeNode(filePath) {
|
|
104978
105196
|
const absolutePath = path$20.resolve(filePath);
|
|
@@ -104990,7 +105208,7 @@ var DependencyGraphManager = class {
|
|
|
104990
105208
|
}
|
|
104991
105209
|
/**
|
|
104992
105210
|
* Get graph statistics.
|
|
104993
|
-
* @returns
|
|
105211
|
+
* @returns Current dependency graph statistics
|
|
104994
105212
|
*/
|
|
104995
105213
|
getGraphStats() {
|
|
104996
105214
|
let edgeCount = 0;
|
|
@@ -105084,9 +105302,9 @@ var DependencyWatcher = class {
|
|
|
105084
105302
|
}
|
|
105085
105303
|
/**
|
|
105086
105304
|
* Add a watch group.
|
|
105087
|
-
* @param
|
|
105088
|
-
* @param
|
|
105089
|
-
* @returns
|
|
105305
|
+
* @param groupId - Group identifier
|
|
105306
|
+
* @param patterns - Glob patterns to watch
|
|
105307
|
+
* @returns Promise that resolves when the group is added
|
|
105090
105308
|
*/
|
|
105091
105309
|
async addWatchGroup(groupId, patterns) {
|
|
105092
105310
|
this.validateWatchGroup(groupId, patterns);
|
|
@@ -105110,8 +105328,8 @@ var DependencyWatcher = class {
|
|
|
105110
105328
|
}
|
|
105111
105329
|
/**
|
|
105112
105330
|
* Remove a watch group.
|
|
105113
|
-
* @param
|
|
105114
|
-
* @returns
|
|
105331
|
+
* @param groupId - Group identifier
|
|
105332
|
+
* @returns Promise that resolves when the group is removed
|
|
105115
105333
|
*/
|
|
105116
105334
|
async removeWatchGroup(groupId) {
|
|
105117
105335
|
const watchGroup = this.watchGroups.get(groupId);
|
|
@@ -105143,8 +105361,7 @@ var DependencyWatcher = class {
|
|
|
105143
105361
|
}
|
|
105144
105362
|
/**
|
|
105145
105363
|
* Set the error handling callback.
|
|
105146
|
-
* @param
|
|
105147
|
-
* @returns {void}
|
|
105364
|
+
* @param callback - Error callback
|
|
105148
105365
|
*/
|
|
105149
105366
|
onError(callback) {
|
|
105150
105367
|
this.errorCallback = callback;
|
|
@@ -105164,8 +105381,8 @@ var DependencyWatcher = class {
|
|
|
105164
105381
|
}
|
|
105165
105382
|
/**
|
|
105166
105383
|
* Compute the impact scope of a specific file.
|
|
105167
|
-
* @param
|
|
105168
|
-
* @returns
|
|
105384
|
+
* @param filePath - File path to analyze
|
|
105385
|
+
* @returns Impact analysis result for the file
|
|
105169
105386
|
*/
|
|
105170
105387
|
calculateImpact(filePath) {
|
|
105171
105388
|
const cacheKey = `impact:${filePath}`;
|
|
@@ -105183,14 +105400,14 @@ var DependencyWatcher = class {
|
|
|
105183
105400
|
}
|
|
105184
105401
|
/**
|
|
105185
105402
|
* Detect circular dependencies.
|
|
105186
|
-
* @returns
|
|
105403
|
+
* @returns List of circular dependency cycles
|
|
105187
105404
|
*/
|
|
105188
105405
|
detectCircularDependencies() {
|
|
105189
105406
|
return this.dependencyGraphManager.findCircularDependencies();
|
|
105190
105407
|
}
|
|
105191
105408
|
/**
|
|
105192
105409
|
* Retrieve the current watcher status.
|
|
105193
|
-
* @returns
|
|
105410
|
+
* @returns Snapshot of the current watcher status
|
|
105194
105411
|
*/
|
|
105195
105412
|
getWatchStatus() {
|
|
105196
105413
|
let fileCount = 0;
|
|
@@ -105215,7 +105432,7 @@ var DependencyWatcher = class {
|
|
|
105215
105432
|
restartCallback = null;
|
|
105216
105433
|
/**
|
|
105217
105434
|
* Set the restart callback to be called when a file change is detected.
|
|
105218
|
-
* @param
|
|
105435
|
+
* @param callback - Restart callback
|
|
105219
105436
|
*/
|
|
105220
105437
|
setRestartCallback(callback) {
|
|
105221
105438
|
this.restartCallback = callback;
|
|
@@ -105271,7 +105488,6 @@ var DependencyWatcher = class {
|
|
|
105271
105488
|
}
|
|
105272
105489
|
/**
|
|
105273
105490
|
* Register signal handlers.
|
|
105274
|
-
* @returns {void}
|
|
105275
105491
|
*/
|
|
105276
105492
|
setupSignalHandlers() {
|
|
105277
105493
|
if (this.signalHandlersRegistered) return;
|
|
@@ -105291,7 +105507,6 @@ var DependencyWatcher = class {
|
|
|
105291
105507
|
}
|
|
105292
105508
|
/**
|
|
105293
105509
|
* Remove signal handlers.
|
|
105294
|
-
* @returns {void}
|
|
105295
105510
|
*/
|
|
105296
105511
|
removeSignalHandlers() {
|
|
105297
105512
|
if (!this.signalHandlersRegistered) return;
|
|
@@ -105591,8 +105806,8 @@ var GenerationManager = class {
|
|
|
105591
105806
|
};
|
|
105592
105807
|
/**
|
|
105593
105808
|
* Run code generation using the Tailor configuration and generators.
|
|
105594
|
-
* @param
|
|
105595
|
-
* @returns
|
|
105809
|
+
* @param options - Generation options
|
|
105810
|
+
* @returns Promise that resolves when generation (and watch, if enabled) completes
|
|
105596
105811
|
*/
|
|
105597
105812
|
async function generate(options) {
|
|
105598
105813
|
const { config, generators, configPath } = await loadConfig(options?.configPath);
|
|
@@ -105634,8 +105849,8 @@ const generateCommand = defineCommand({
|
|
|
105634
105849
|
//#region src/cli/machineuser/list.ts
|
|
105635
105850
|
/**
|
|
105636
105851
|
* Map a MachineUser protobuf message to CLI-friendly info.
|
|
105637
|
-
* @param
|
|
105638
|
-
* @returns
|
|
105852
|
+
* @param user - Machine user resource
|
|
105853
|
+
* @returns Flattened machine user info
|
|
105639
105854
|
*/
|
|
105640
105855
|
function machineUserInfo(user) {
|
|
105641
105856
|
return {
|
|
@@ -105648,8 +105863,8 @@ function machineUserInfo(user) {
|
|
|
105648
105863
|
}
|
|
105649
105864
|
/**
|
|
105650
105865
|
* List machine users for the current application.
|
|
105651
|
-
* @param
|
|
105652
|
-
* @returns
|
|
105866
|
+
* @param options - Machine user listing options
|
|
105867
|
+
* @returns List of machine users
|
|
105653
105868
|
*/
|
|
105654
105869
|
async function listMachineUsers(options) {
|
|
105655
105870
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -105699,8 +105914,8 @@ const listCommand$3 = defineCommand({
|
|
|
105699
105914
|
//#region src/cli/machineuser/token.ts
|
|
105700
105915
|
/**
|
|
105701
105916
|
* Get a machine user access token for the current application.
|
|
105702
|
-
* @param
|
|
105703
|
-
* @returns
|
|
105917
|
+
* @param options - Token retrieval options
|
|
105918
|
+
* @returns Machine user token info
|
|
105704
105919
|
*/
|
|
105705
105920
|
async function getMachineUserToken(options) {
|
|
105706
105921
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -105774,8 +105989,8 @@ const grantTypeToString = (grantType) => {
|
|
|
105774
105989
|
};
|
|
105775
105990
|
/**
|
|
105776
105991
|
* Transform an AuthOAuth2Client into CLI-friendly OAuth2 client info.
|
|
105777
|
-
* @param
|
|
105778
|
-
* @returns
|
|
105992
|
+
* @param client - OAuth2 client resource
|
|
105993
|
+
* @returns Flattened OAuth2 client info
|
|
105779
105994
|
*/
|
|
105780
105995
|
function toOAuth2ClientInfo(client) {
|
|
105781
105996
|
return {
|
|
@@ -105789,8 +106004,8 @@ function toOAuth2ClientInfo(client) {
|
|
|
105789
106004
|
}
|
|
105790
106005
|
/**
|
|
105791
106006
|
* Transform an AuthOAuth2Client into OAuth2 client credentials info.
|
|
105792
|
-
* @param
|
|
105793
|
-
* @returns
|
|
106007
|
+
* @param client - OAuth2 client resource
|
|
106008
|
+
* @returns OAuth2 client credentials
|
|
105794
106009
|
*/
|
|
105795
106010
|
function toOAuth2ClientCredentials(client) {
|
|
105796
106011
|
return {
|
|
@@ -105808,8 +106023,8 @@ function toOAuth2ClientCredentials(client) {
|
|
|
105808
106023
|
//#region src/cli/oauth2client/get.ts
|
|
105809
106024
|
/**
|
|
105810
106025
|
* Get OAuth2 client credentials for the current application.
|
|
105811
|
-
* @param
|
|
105812
|
-
* @returns
|
|
106026
|
+
* @param options - OAuth2 client lookup options
|
|
106027
|
+
* @returns OAuth2 client credentials
|
|
105813
106028
|
*/
|
|
105814
106029
|
async function getOAuth2Client(options) {
|
|
105815
106030
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -105868,8 +106083,8 @@ const getCommand$1 = defineCommand({
|
|
|
105868
106083
|
//#region src/cli/oauth2client/list.ts
|
|
105869
106084
|
/**
|
|
105870
106085
|
* List OAuth2 clients for the current application.
|
|
105871
|
-
* @param
|
|
105872
|
-
* @returns
|
|
106086
|
+
* @param options - OAuth2 client listing options
|
|
106087
|
+
* @returns List of OAuth2 clients
|
|
105873
106088
|
*/
|
|
105874
106089
|
async function listOAuth2Clients(options) {
|
|
105875
106090
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -105965,8 +106180,8 @@ async function execRemove(client, workspaceId, application, confirm) {
|
|
|
105965
106180
|
}
|
|
105966
106181
|
/**
|
|
105967
106182
|
* Remove all resources managed by the current application.
|
|
105968
|
-
* @param
|
|
105969
|
-
* @returns
|
|
106183
|
+
* @param options - Remove options
|
|
106184
|
+
* @returns Promise that resolves when removal completes
|
|
105970
106185
|
*/
|
|
105971
106186
|
async function remove(options) {
|
|
105972
106187
|
const { client, workspaceId, application } = await loadOptions$1(options);
|
|
@@ -106042,8 +106257,8 @@ function applicationInfo(app) {
|
|
|
106042
106257
|
}
|
|
106043
106258
|
/**
|
|
106044
106259
|
* Show applied application information for the current workspace.
|
|
106045
|
-
* @param
|
|
106046
|
-
* @returns
|
|
106260
|
+
* @param options - Show options
|
|
106261
|
+
* @returns Application information
|
|
106047
106262
|
*/
|
|
106048
106263
|
async function show(options) {
|
|
106049
106264
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -106095,14 +106310,191 @@ const showCommand = defineCommand({
|
|
|
106095
106310
|
})
|
|
106096
106311
|
});
|
|
106097
106312
|
|
|
106313
|
+
//#endregion
|
|
106314
|
+
//#region src/cli/tailordb/truncate.ts
|
|
106315
|
+
async function truncateSingleType(options, client) {
|
|
106316
|
+
await client.truncateTailorDBType({
|
|
106317
|
+
workspaceId: options.workspaceId,
|
|
106318
|
+
namespaceName: options.namespaceName,
|
|
106319
|
+
tailordbTypeName: options.typeName
|
|
106320
|
+
});
|
|
106321
|
+
logger.success(`Truncated type "${options.typeName}" in namespace "${options.namespaceName}"`);
|
|
106322
|
+
}
|
|
106323
|
+
async function truncateNamespace(workspaceId, namespaceName, client) {
|
|
106324
|
+
await client.truncateTailorDBTypes({
|
|
106325
|
+
workspaceId,
|
|
106326
|
+
namespaceName
|
|
106327
|
+
});
|
|
106328
|
+
logger.success(`Truncated all types in namespace "${namespaceName}"`);
|
|
106329
|
+
}
|
|
106330
|
+
async function getAllNamespaces(configPath) {
|
|
106331
|
+
const { config } = await loadConfig(configPath);
|
|
106332
|
+
const namespaces = /* @__PURE__ */ new Set();
|
|
106333
|
+
if (config.db) for (const [namespaceName] of Object.entries(config.db)) namespaces.add(namespaceName);
|
|
106334
|
+
return Array.from(namespaces);
|
|
106335
|
+
}
|
|
106336
|
+
async function getTypeNamespace(workspaceId, typeName, client, configPath) {
|
|
106337
|
+
const namespaces = await getAllNamespaces(configPath);
|
|
106338
|
+
for (const namespace of namespaces) try {
|
|
106339
|
+
const { tailordbTypes } = await client.listTailorDBTypes({
|
|
106340
|
+
workspaceId,
|
|
106341
|
+
namespaceName: namespace
|
|
106342
|
+
});
|
|
106343
|
+
if (tailordbTypes.some((type) => type.name === typeName)) return namespace;
|
|
106344
|
+
} catch {
|
|
106345
|
+
continue;
|
|
106346
|
+
}
|
|
106347
|
+
return null;
|
|
106348
|
+
}
|
|
106349
|
+
/**
|
|
106350
|
+
* Truncate TailorDB data based on the given options.
|
|
106351
|
+
* @param options - Truncate options (all, namespace, or types)
|
|
106352
|
+
* @returns Promise that resolves when truncation completes
|
|
106353
|
+
*/
|
|
106354
|
+
async function truncate(options) {
|
|
106355
|
+
return await $truncate({
|
|
106356
|
+
...options,
|
|
106357
|
+
yes: true
|
|
106358
|
+
});
|
|
106359
|
+
}
|
|
106360
|
+
async function $truncate(options) {
|
|
106361
|
+
const client = await initOperatorClient(await loadAccessToken({
|
|
106362
|
+
useProfile: true,
|
|
106363
|
+
profile: options?.profile
|
|
106364
|
+
}));
|
|
106365
|
+
const workspaceId = loadWorkspaceId({
|
|
106366
|
+
workspaceId: options?.workspaceId,
|
|
106367
|
+
profile: options?.profile
|
|
106368
|
+
});
|
|
106369
|
+
const hasTypes = options?.types && options.types.length > 0;
|
|
106370
|
+
const hasNamespace = !!options?.namespace;
|
|
106371
|
+
const hasAll = !!options?.all;
|
|
106372
|
+
const optionCount = [
|
|
106373
|
+
hasAll,
|
|
106374
|
+
hasNamespace,
|
|
106375
|
+
hasTypes
|
|
106376
|
+
].filter(Boolean).length;
|
|
106377
|
+
if (optionCount === 0) throw new Error("Please specify one of: --all, --namespace <name>, or type names");
|
|
106378
|
+
if (optionCount > 1) throw new Error("Options --all, --namespace, and type names are mutually exclusive. Please specify only one.");
|
|
106379
|
+
const namespaces = await getAllNamespaces(options?.configPath);
|
|
106380
|
+
if (hasAll) {
|
|
106381
|
+
if (namespaces.length === 0) {
|
|
106382
|
+
logger.warn("No namespaces found in config file.");
|
|
106383
|
+
return;
|
|
106384
|
+
}
|
|
106385
|
+
if (!options?.yes) {
|
|
106386
|
+
const namespaceList = namespaces.join(", ");
|
|
106387
|
+
if (!await logger.prompt(`This will truncate ALL tables in the following namespaces: ${namespaceList}. Continue? (yes/no)`, {
|
|
106388
|
+
type: "confirm",
|
|
106389
|
+
initial: false
|
|
106390
|
+
})) {
|
|
106391
|
+
logger.info("Truncate cancelled.");
|
|
106392
|
+
return;
|
|
106393
|
+
}
|
|
106394
|
+
}
|
|
106395
|
+
for (const namespace of namespaces) await truncateNamespace(workspaceId, namespace, client);
|
|
106396
|
+
logger.success("Truncated all tables in all namespaces");
|
|
106397
|
+
return;
|
|
106398
|
+
}
|
|
106399
|
+
if (hasNamespace && options?.namespace) {
|
|
106400
|
+
const namespace = options.namespace;
|
|
106401
|
+
if (!namespaces.includes(namespace)) throw new Error(`Namespace "${namespace}" not found in config. Available namespaces: ${namespaces.join(", ")}`);
|
|
106402
|
+
if (!options.yes) {
|
|
106403
|
+
if (!await logger.prompt(`This will truncate ALL tables in namespace "${namespace}". Continue? (yes/no)`, {
|
|
106404
|
+
type: "confirm",
|
|
106405
|
+
initial: false
|
|
106406
|
+
})) {
|
|
106407
|
+
logger.info("Truncate cancelled.");
|
|
106408
|
+
return;
|
|
106409
|
+
}
|
|
106410
|
+
}
|
|
106411
|
+
await truncateNamespace(workspaceId, namespace, client);
|
|
106412
|
+
return;
|
|
106413
|
+
}
|
|
106414
|
+
if (hasTypes && options?.types) {
|
|
106415
|
+
const typeNames = options.types;
|
|
106416
|
+
const typeNamespaceMap = /* @__PURE__ */ new Map();
|
|
106417
|
+
const notFoundTypes = [];
|
|
106418
|
+
for (const typeName of typeNames) {
|
|
106419
|
+
const namespace = await getTypeNamespace(workspaceId, typeName, client, options.configPath);
|
|
106420
|
+
if (namespace) typeNamespaceMap.set(typeName, namespace);
|
|
106421
|
+
else notFoundTypes.push(typeName);
|
|
106422
|
+
}
|
|
106423
|
+
if (notFoundTypes.length > 0) throw new Error(`The following types were not found in any namespace: ${notFoundTypes.join(", ")}`);
|
|
106424
|
+
if (!options.yes) {
|
|
106425
|
+
const typeList = typeNames.join(", ");
|
|
106426
|
+
if (!await logger.prompt(`This will truncate the following types: ${typeList}. Continue? (yes/no)`, {
|
|
106427
|
+
type: "confirm",
|
|
106428
|
+
initial: false
|
|
106429
|
+
})) {
|
|
106430
|
+
logger.info("Truncate cancelled.");
|
|
106431
|
+
return;
|
|
106432
|
+
}
|
|
106433
|
+
}
|
|
106434
|
+
for (const typeName of typeNames) {
|
|
106435
|
+
const namespace = typeNamespaceMap.get(typeName);
|
|
106436
|
+
if (!namespace) continue;
|
|
106437
|
+
await truncateSingleType({
|
|
106438
|
+
workspaceId,
|
|
106439
|
+
namespaceName: namespace,
|
|
106440
|
+
typeName
|
|
106441
|
+
}, client);
|
|
106442
|
+
}
|
|
106443
|
+
}
|
|
106444
|
+
}
|
|
106445
|
+
const truncateCommand = defineCommand({
|
|
106446
|
+
meta: {
|
|
106447
|
+
name: "truncate",
|
|
106448
|
+
description: "Truncate TailorDB tables"
|
|
106449
|
+
},
|
|
106450
|
+
args: {
|
|
106451
|
+
...commonArgs,
|
|
106452
|
+
types: {
|
|
106453
|
+
type: "positional",
|
|
106454
|
+
description: "Type names to truncate",
|
|
106455
|
+
required: false
|
|
106456
|
+
},
|
|
106457
|
+
all: {
|
|
106458
|
+
type: "boolean",
|
|
106459
|
+
description: "Truncate all tables in all namespaces",
|
|
106460
|
+
default: false,
|
|
106461
|
+
alias: "a"
|
|
106462
|
+
},
|
|
106463
|
+
namespace: {
|
|
106464
|
+
type: "string",
|
|
106465
|
+
description: "Truncate all tables in specified namespace",
|
|
106466
|
+
alias: "n"
|
|
106467
|
+
},
|
|
106468
|
+
yes: {
|
|
106469
|
+
type: "boolean",
|
|
106470
|
+
description: "Skip confirmation prompt",
|
|
106471
|
+
alias: "y",
|
|
106472
|
+
default: false
|
|
106473
|
+
},
|
|
106474
|
+
...deploymentArgs
|
|
106475
|
+
},
|
|
106476
|
+
run: withCommonArgs(async (args) => {
|
|
106477
|
+
const types$2 = args._.length > 0 ? args._.map((arg) => String(arg)).filter(Boolean) : void 0;
|
|
106478
|
+
await $truncate({
|
|
106479
|
+
workspaceId: args["workspace-id"],
|
|
106480
|
+
profile: args.profile,
|
|
106481
|
+
configPath: args.config,
|
|
106482
|
+
all: args.all,
|
|
106483
|
+
namespace: args.namespace,
|
|
106484
|
+
types: types$2,
|
|
106485
|
+
yes: args.yes
|
|
106486
|
+
});
|
|
106487
|
+
})
|
|
106488
|
+
});
|
|
106489
|
+
|
|
106098
106490
|
//#endregion
|
|
106099
106491
|
//#region src/cli/utils/format.ts
|
|
106100
106492
|
/**
|
|
106101
106493
|
* Formats a table with consistent single-line border style.
|
|
106102
106494
|
* Use this instead of importing `table` directly.
|
|
106103
|
-
* @param
|
|
106104
|
-
* @param
|
|
106105
|
-
* @returns
|
|
106495
|
+
* @param data - Table data
|
|
106496
|
+
* @param config - Table configuration
|
|
106497
|
+
* @returns Formatted table string
|
|
106106
106498
|
*/
|
|
106107
106499
|
function formatTable(data$1, config) {
|
|
106108
106500
|
return table(data$1, {
|
|
@@ -106112,8 +106504,8 @@ function formatTable(data$1, config) {
|
|
|
106112
106504
|
}
|
|
106113
106505
|
/**
|
|
106114
106506
|
* Formats a key-value table with single-line border style.
|
|
106115
|
-
* @param
|
|
106116
|
-
* @returns
|
|
106507
|
+
* @param data - Key-value pairs
|
|
106508
|
+
* @returns Formatted key-value table string
|
|
106117
106509
|
*/
|
|
106118
106510
|
function formatKeyValueTable(data$1) {
|
|
106119
106511
|
return formatTable(data$1, { singleLine: true });
|
|
@@ -106121,9 +106513,9 @@ function formatKeyValueTable(data$1) {
|
|
|
106121
106513
|
/**
|
|
106122
106514
|
* Formats a table with headers, using single-line border style.
|
|
106123
106515
|
* Draws horizontal lines only at top, after header, and bottom.
|
|
106124
|
-
* @param
|
|
106125
|
-
* @param
|
|
106126
|
-
* @returns
|
|
106516
|
+
* @param headers - Table header labels
|
|
106517
|
+
* @param rows - Table rows
|
|
106518
|
+
* @returns Formatted table string with headers
|
|
106127
106519
|
*/
|
|
106128
106520
|
function formatTableWithHeaders(headers, rows) {
|
|
106129
106521
|
return formatTable([headers, ...rows], { drawHorizontalLine: (lineIndex, rowCount) => {
|
|
@@ -106132,8 +106524,8 @@ function formatTableWithHeaders(headers, rows) {
|
|
|
106132
106524
|
}
|
|
106133
106525
|
/**
|
|
106134
106526
|
* Format an ISO timestamp string as a human-readable relative time.
|
|
106135
|
-
* @param
|
|
106136
|
-
* @returns
|
|
106527
|
+
* @param isoString - ISO date string
|
|
106528
|
+
* @returns Relative time (e.g., "5 minutes ago")
|
|
106137
106529
|
*/
|
|
106138
106530
|
function humanizeRelativeTime(isoString) {
|
|
106139
106531
|
const date = new Date(isoString);
|
|
@@ -106173,8 +106565,8 @@ const waitArgs = {
|
|
|
106173
106565
|
//#region src/cli/workflow/transform.ts
|
|
106174
106566
|
/**
|
|
106175
106567
|
* Convert a workflow execution status enum to a string.
|
|
106176
|
-
* @param
|
|
106177
|
-
* @returns
|
|
106568
|
+
* @param status - Workflow execution status
|
|
106569
|
+
* @returns String representation of the status
|
|
106178
106570
|
*/
|
|
106179
106571
|
function workflowExecutionStatusToString(status) {
|
|
106180
106572
|
switch (status) {
|
|
@@ -106188,8 +106580,8 @@ function workflowExecutionStatusToString(status) {
|
|
|
106188
106580
|
}
|
|
106189
106581
|
/**
|
|
106190
106582
|
* Convert a workflow job execution status enum to a string.
|
|
106191
|
-
* @param
|
|
106192
|
-
* @returns
|
|
106583
|
+
* @param status - Workflow job execution status
|
|
106584
|
+
* @returns String representation of the status
|
|
106193
106585
|
*/
|
|
106194
106586
|
function workflowJobExecutionStatusToString(status) {
|
|
106195
106587
|
switch (status) {
|
|
@@ -106202,8 +106594,8 @@ function workflowJobExecutionStatusToString(status) {
|
|
|
106202
106594
|
}
|
|
106203
106595
|
/**
|
|
106204
106596
|
* Convert a Workflow proto to CLI-friendly list info.
|
|
106205
|
-
* @param
|
|
106206
|
-
* @returns
|
|
106597
|
+
* @param workflow - Workflow resource
|
|
106598
|
+
* @returns Flattened workflow list info
|
|
106207
106599
|
*/
|
|
106208
106600
|
function toWorkflowListInfo(workflow) {
|
|
106209
106601
|
return {
|
|
@@ -106215,8 +106607,8 @@ function toWorkflowListInfo(workflow) {
|
|
|
106215
106607
|
}
|
|
106216
106608
|
/**
|
|
106217
106609
|
* Convert a Workflow proto to detailed workflow info for CLI output.
|
|
106218
|
-
* @param
|
|
106219
|
-
* @returns
|
|
106610
|
+
* @param workflow - Workflow resource
|
|
106611
|
+
* @returns Detailed workflow info
|
|
106220
106612
|
*/
|
|
106221
106613
|
function toWorkflowInfo(workflow) {
|
|
106222
106614
|
const jobFunctions = {};
|
|
@@ -106232,8 +106624,8 @@ function toWorkflowInfo(workflow) {
|
|
|
106232
106624
|
}
|
|
106233
106625
|
/**
|
|
106234
106626
|
* Convert a WorkflowJobExecution proto to CLI-friendly job execution info.
|
|
106235
|
-
* @param
|
|
106236
|
-
* @returns
|
|
106627
|
+
* @param jobExecution - Workflow job execution resource
|
|
106628
|
+
* @returns Flattened job execution info
|
|
106237
106629
|
*/
|
|
106238
106630
|
function toWorkflowJobExecutionInfo(jobExecution) {
|
|
106239
106631
|
return {
|
|
@@ -106247,8 +106639,8 @@ function toWorkflowJobExecutionInfo(jobExecution) {
|
|
|
106247
106639
|
}
|
|
106248
106640
|
/**
|
|
106249
106641
|
* Convert a WorkflowExecution proto to CLI-friendly execution info.
|
|
106250
|
-
* @param
|
|
106251
|
-
* @returns
|
|
106642
|
+
* @param execution - Workflow execution resource
|
|
106643
|
+
* @returns Flattened execution info
|
|
106252
106644
|
*/
|
|
106253
106645
|
function toWorkflowExecutionInfo(execution) {
|
|
106254
106646
|
return {
|
|
@@ -106292,8 +106684,8 @@ function parseStatus(status) {
|
|
|
106292
106684
|
}
|
|
106293
106685
|
/**
|
|
106294
106686
|
* List workflow executions with optional filters.
|
|
106295
|
-
* @param
|
|
106296
|
-
* @returns
|
|
106687
|
+
* @param options - Workflow execution listing options
|
|
106688
|
+
* @returns List of workflow executions
|
|
106297
106689
|
*/
|
|
106298
106690
|
async function listWorkflowExecutions(options) {
|
|
106299
106691
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -106337,8 +106729,8 @@ async function listWorkflowExecutions(options) {
|
|
|
106337
106729
|
}
|
|
106338
106730
|
/**
|
|
106339
106731
|
* Get a single workflow execution with optional logs.
|
|
106340
|
-
* @param
|
|
106341
|
-
* @returns
|
|
106732
|
+
* @param options - Workflow execution lookup options
|
|
106733
|
+
* @returns Workflow execution with optional logs
|
|
106342
106734
|
*/
|
|
106343
106735
|
async function getWorkflowExecution(options) {
|
|
106344
106736
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -106424,8 +106816,7 @@ async function waitWithSpinner(waitFn, interval, json) {
|
|
|
106424
106816
|
}
|
|
106425
106817
|
/**
|
|
106426
106818
|
* Print a workflow execution and its logs in a human-readable format.
|
|
106427
|
-
* @param
|
|
106428
|
-
* @returns {void}
|
|
106819
|
+
* @param execution - Workflow execution detail info
|
|
106429
106820
|
*/
|
|
106430
106821
|
function printExecutionWithLogs(execution) {
|
|
106431
106822
|
const summaryData = [
|
|
@@ -106522,10 +106913,10 @@ const executionsCommand = defineCommand({
|
|
|
106522
106913
|
//#region src/cli/workflow/get.ts
|
|
106523
106914
|
/**
|
|
106524
106915
|
* Resolve a workflow definition by name.
|
|
106525
|
-
* @param
|
|
106526
|
-
* @param
|
|
106527
|
-
* @param
|
|
106528
|
-
* @returns
|
|
106916
|
+
* @param client - Operator client
|
|
106917
|
+
* @param workspaceId - Workspace ID
|
|
106918
|
+
* @param name - Workflow name
|
|
106919
|
+
* @returns Resolved workflow
|
|
106529
106920
|
*/
|
|
106530
106921
|
async function resolveWorkflow(client, workspaceId, name$1) {
|
|
106531
106922
|
const { workflow } = await client.getWorkflowByName({
|
|
@@ -106537,8 +106928,8 @@ async function resolveWorkflow(client, workspaceId, name$1) {
|
|
|
106537
106928
|
}
|
|
106538
106929
|
/**
|
|
106539
106930
|
* Get a workflow by name and return CLI-friendly info.
|
|
106540
|
-
* @param
|
|
106541
|
-
* @returns
|
|
106931
|
+
* @param options - Workflow lookup options
|
|
106932
|
+
* @returns Workflow information
|
|
106542
106933
|
*/
|
|
106543
106934
|
async function getWorkflow(options) {
|
|
106544
106935
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -106581,8 +106972,8 @@ const getCommand = defineCommand({
|
|
|
106581
106972
|
//#region src/cli/workflow/list.ts
|
|
106582
106973
|
/**
|
|
106583
106974
|
* List workflows in the workspace and return CLI-friendly info.
|
|
106584
|
-
* @param
|
|
106585
|
-
* @returns
|
|
106975
|
+
* @param options - Workflow listing options
|
|
106976
|
+
* @returns List of workflows
|
|
106586
106977
|
*/
|
|
106587
106978
|
async function listWorkflows(options) {
|
|
106588
106979
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -106660,8 +107051,8 @@ function colorizeStatus(status) {
|
|
|
106660
107051
|
}
|
|
106661
107052
|
/**
|
|
106662
107053
|
* Wait for a workflow execution to reach a terminal state, optionally showing progress.
|
|
106663
|
-
* @param
|
|
106664
|
-
* @returns
|
|
107054
|
+
* @param options - Wait options
|
|
107055
|
+
* @returns Final workflow execution info
|
|
106665
107056
|
*/
|
|
106666
107057
|
async function waitForExecution(options) {
|
|
106667
107058
|
const { client, workspaceId, executionId, interval, showProgress, trackJobs } = options;
|
|
@@ -106721,8 +107112,8 @@ function isTerminalStatus(status) {
|
|
|
106721
107112
|
}
|
|
106722
107113
|
/**
|
|
106723
107114
|
* Start a workflow and return a handle to wait for completion.
|
|
106724
|
-
* @param
|
|
106725
|
-
* @returns
|
|
107115
|
+
* @param options - Start options
|
|
107116
|
+
* @returns Start result with wait helper
|
|
106726
107117
|
*/
|
|
106727
107118
|
async function startWorkflow(options) {
|
|
106728
107119
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -106822,8 +107213,8 @@ const startCommand = defineCommand({
|
|
|
106822
107213
|
//#region src/cli/workflow/resume.ts
|
|
106823
107214
|
/**
|
|
106824
107215
|
* Resume a suspended workflow execution and return a handle to wait for completion.
|
|
106825
|
-
* @param
|
|
106826
|
-
* @returns
|
|
107216
|
+
* @param options - Resume options
|
|
107217
|
+
* @returns Resume result with wait helper
|
|
106827
107218
|
*/
|
|
106828
107219
|
async function resumeWorkflow(options) {
|
|
106829
107220
|
const client = await initOperatorClient(await loadAccessToken({
|
|
@@ -106935,8 +107326,8 @@ const validateRegion = async (region, client) => {
|
|
|
106935
107326
|
};
|
|
106936
107327
|
/**
|
|
106937
107328
|
* Create a new workspace with the given options.
|
|
106938
|
-
* @param
|
|
106939
|
-
* @returns
|
|
107329
|
+
* @param options - Workspace creation options
|
|
107330
|
+
* @returns Created workspace info
|
|
106940
107331
|
*/
|
|
106941
107332
|
async function createWorkspace(options) {
|
|
106942
107333
|
const result = createWorkspaceOptionsSchema.safeParse(options);
|
|
@@ -107017,8 +107408,8 @@ async function loadOptions(options) {
|
|
|
107017
107408
|
}
|
|
107018
107409
|
/**
|
|
107019
107410
|
* Delete a workspace by ID.
|
|
107020
|
-
* @param
|
|
107021
|
-
* @returns
|
|
107411
|
+
* @param options - Workspace deletion options
|
|
107412
|
+
* @returns Promise that resolves when deletion completes
|
|
107022
107413
|
*/
|
|
107023
107414
|
async function deleteWorkspace(options) {
|
|
107024
107415
|
const { client, workspaceId } = await loadOptions(options);
|
|
@@ -107068,8 +107459,8 @@ const deleteCommand = defineCommand({
|
|
|
107068
107459
|
const limitSchema = z.coerce.number().int().positive().optional();
|
|
107069
107460
|
/**
|
|
107070
107461
|
* List workspaces with an optional limit.
|
|
107071
|
-
* @param
|
|
107072
|
-
* @returns
|
|
107462
|
+
* @param options - Workspace listing options
|
|
107463
|
+
* @returns List of workspaces
|
|
107073
107464
|
*/
|
|
107074
107465
|
async function listWorkspaces(options) {
|
|
107075
107466
|
const limit = options?.limit;
|
|
@@ -107124,5 +107515,5 @@ const listCommand = defineCommand({
|
|
|
107124
107515
|
});
|
|
107125
107516
|
|
|
107126
107517
|
//#endregion
|
|
107127
|
-
export {
|
|
107128
|
-
//# sourceMappingURL=list-
|
|
107518
|
+
export { deploymentArgs as $, listCommand$3 as A, fetchLatestToken as B, removeCommand as C, getOAuth2Client as D, getCommand$1 as E, applyCommand as F, fetchAll as G, loadWorkspaceId as H, generateUserTypes as I, initOperatorClient as J, fetchUserInfo as K, loadConfig as L, generate as M, generateCommand as N, getMachineUserToken as O, apply as P, confirmationArgs as Q, apiCall as R, remove as S, listOAuth2Clients as T, readPlatformConfig as U, loadAccessToken as V, writePlatformConfig as W, PATScope as X, readPackageJson as Y, commonArgs as Z, listWorkflowExecutions as _, createCommand as a, show as b, resumeWorkflow as c, listCommand$1 as d, jsonArgs as et, listWorkflows as f, getWorkflowExecution as g, executionsCommand as h, deleteWorkspace as i, listMachineUsers as j, tokenCommand as k, startCommand as l, getWorkflow as m, listWorkspaces as n, workspaceArgs as nt, createWorkspace as o, getCommand as p, initOAuth2Client as q, deleteCommand as r, logger as rt, resumeCommand as s, listCommand as t, withCommonArgs as tt, startWorkflow as u, truncate as v, listCommand$2 as w, showCommand as x, truncateCommand as y, apiCommand as z };
|
|
107519
|
+
//# sourceMappingURL=list-1cs_CGF8.mjs.map
|