@tailor-platform/sdk 1.26.0 → 1.28.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 +14 -0
- package/dist/application-CBJFUKrU.mjs +4701 -0
- package/dist/application-CBJFUKrU.mjs.map +1 -0
- package/dist/application-WyZetOky.mjs +11 -0
- package/dist/cli/index.mjs +240 -33
- package/dist/cli/index.mjs.map +1 -1
- package/dist/cli/lib.d.mts +6 -6
- package/dist/cli/lib.mjs +10 -8
- package/dist/cli/lib.mjs.map +1 -1
- package/dist/client-C2_wgujH.mjs +6 -0
- package/dist/{application-D9xahQRQ.mjs → client-bTbnbQbB.mjs} +8 -4877
- package/dist/{application-D9xahQRQ.mjs.map → client-bTbnbQbB.mjs.map} +1 -1
- package/dist/configure/index.d.mts +4 -4
- package/dist/crash-report-Cot_9Esm.mjs +6 -0
- package/dist/crash-report-Ju8cQF-l.mjs +414 -0
- package/dist/crash-report-Ju8cQF-l.mjs.map +1 -0
- package/dist/{enum-constants-6uK0VI_s.mjs → enum-constants-D1nfn0qD.mjs} +1 -1
- package/dist/{enum-constants-6uK0VI_s.mjs.map → enum-constants-D1nfn0qD.mjs.map} +1 -1
- package/dist/{env-CSsVESbH.d.mts → env-BuMbIknz.d.mts} +2 -2
- package/dist/{file-utils-2T9w20FP.mjs → file-utils-Bctuzn3x.mjs} +1 -1
- package/dist/{file-utils-2T9w20FP.mjs.map → file-utils-Bctuzn3x.mjs.map} +1 -1
- package/dist/{index-DgRShBpu.d.mts → index-B0Lrzywd.d.mts} +2 -2
- package/dist/{index-BtYPY8ya.d.mts → index-CbnLNm14.d.mts} +2 -2
- package/dist/{index-DkJbItB-.d.mts → index-CyapgSFI.d.mts} +2 -2
- package/dist/{index-BKy-OC5C.d.mts → index-D1AM_02Y.d.mts} +2 -2
- package/dist/{index-BJg0DTbR.d.mts → index-cD9sQLTh.d.mts} +15 -15
- package/dist/{interceptor-BPiIBTk_.mjs → interceptor-B0d_GrI5.mjs} +1 -1
- package/dist/{interceptor-BPiIBTk_.mjs.map → interceptor-B0d_GrI5.mjs.map} +1 -1
- package/dist/{kysely-type-cMNbsQ6k.mjs → kysely-type-B_IecdK9.mjs} +1 -1
- package/dist/{kysely-type-cMNbsQ6k.mjs.map → kysely-type-B_IecdK9.mjs.map} +1 -1
- package/dist/logger-CqezTedh.mjs +181 -0
- package/dist/logger-CqezTedh.mjs.map +1 -0
- package/dist/{package-json-CVUv8Y9T.mjs → package-json-D3x2nBPB.mjs} +1 -1
- package/dist/{package-json-CVUv8Y9T.mjs.map → package-json-D3x2nBPB.mjs.map} +1 -1
- package/dist/package-json-DHfTiUCS.mjs +4 -0
- package/dist/plugin/builtin/enum-constants/index.d.mts +1 -1
- package/dist/plugin/builtin/enum-constants/index.mjs +1 -1
- package/dist/plugin/builtin/file-utils/index.d.mts +1 -1
- package/dist/plugin/builtin/file-utils/index.mjs +1 -1
- package/dist/plugin/builtin/kysely-type/index.d.mts +1 -1
- package/dist/plugin/builtin/kysely-type/index.mjs +1 -1
- package/dist/plugin/builtin/seed/index.d.mts +1 -1
- package/dist/plugin/builtin/seed/index.mjs +1 -1
- package/dist/plugin/index.d.mts +2 -2
- package/dist/{plugin-B1hNwcCC.d.mts → plugin-D3a0-qe0.d.mts} +6 -2
- package/dist/{query-B8ml6ClT.mjs → query-WYq8RvYp.mjs} +10 -7
- package/dist/query-WYq8RvYp.mjs.map +1 -0
- package/dist/{seed-CCVRLibh.mjs → seed-CWkIDWMb.mjs} +1 -1
- package/dist/{seed-CCVRLibh.mjs.map → seed-CWkIDWMb.mjs.map} +1 -1
- package/dist/{telemetry-DDQZRqHK.mjs → telemetry-BevrwWwF.mjs} +1 -1
- package/dist/{telemetry-0w8OupuQ.mjs → telemetry-VvNfsyEE.mjs} +2 -2
- package/dist/{telemetry-0w8OupuQ.mjs.map → telemetry-VvNfsyEE.mjs.map} +1 -1
- package/dist/utils/test/index.d.mts +2 -2
- package/dist/{workflow.generated-Bm4b8hEk.d.mts → workflow.generated-BsgIlrH-.d.mts} +2 -2
- package/docs/cli/crash-report.md +107 -0
- package/docs/cli/secret.md +16 -14
- package/docs/cli-reference.md +11 -0
- package/docs/configuration.md +19 -0
- package/docs/services/resolver.md +32 -0
- package/docs/services/secret.md +81 -0
- package/package.json +1 -1
- package/dist/application-CxH6Yp54.mjs +0 -9
- package/dist/package-json-Bj76LPsV.mjs +0 -4
- package/dist/query-B8ml6ClT.mjs.map +0 -1
package/dist/cli/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["listCommand","getCommand","fs","fs","listCommand","getCommand","listCommand","createCommand","deleteCommand","listCommand","updateCommand","createCommand","deleteCommand","listCommand","updateCommand","createCommand","deleteCommand","listCommand","createCommand","deleteCommand","listCommand","deployTemplate","fetchTailorTokenYaml","installNodeYaml","fs","setTimeout","mimeLookup","listCommand","listCommand","fs","fs","generateCommand","listCommand","userCommand","listCommand","listCommand","getCommand","listCommand","listCommand","updateCommand","createCommand","deleteCommand","getCommand","listCommand","removeCommand","userCommand"],"sources":["../../src/cli/commands/apply/index.ts","../../src/cli/commands/executor/index.ts","../../src/cli/commands/function/logs.ts","../../src/cli/commands/function/bundle.ts","../../src/cli/commands/function/detect.ts","../../src/cli/commands/function/test-run.ts","../../src/cli/commands/function/index.ts","../../src/cli/commands/generate/index.ts","../../src/cli/commands/init.ts","../../src/cli/commands/login.ts","../../src/cli/commands/logout.ts","../../src/cli/commands/machineuser/index.ts","../../src/cli/commands/oauth2client/index.ts","../../src/cli/commands/open.ts","../../src/cli/commands/profile/create.ts","../../src/cli/commands/profile/delete.ts","../../src/cli/commands/profile/list.ts","../../src/cli/commands/profile/update.ts","../../src/cli/commands/profile/index.ts","../../src/cli/commands/secret/args.ts","../../src/cli/commands/secret/create.ts","../../src/cli/commands/secret/delete.ts","../../src/cli/commands/secret/list.ts","../../src/cli/commands/secret/update.ts","../../src/cli/commands/secret/vault/args.ts","../../src/cli/commands/secret/vault/create.ts","../../src/cli/commands/secret/vault/delete.ts","../../src/cli/commands/secret/vault/list.ts","../../src/cli/commands/secret/vault/index.ts","../../src/cli/commands/secret/index.ts","../../src/cli/commands/setup/github/fetch-tailor-token.action.yml","../../src/cli/commands/setup/github/install-node.action.yml","../../src/cli/commands/setup/github/deploy.workflow.yml","../../src/cli/commands/setup/github/template-deploy.ts","../../src/cli/commands/setup/github/github.ts","../../src/cli/commands/setup/github/index.ts","../../src/cli/commands/setup/index.ts","../../src/cli/shared/progress.ts","../../src/cli/commands/staticwebsite/deploy.ts","../../src/cli/commands/staticwebsite/get.ts","../../src/cli/commands/staticwebsite/list.ts","../../src/cli/commands/staticwebsite/index.ts","../../src/cli/shared/resolve-cli-bin.ts","../../src/cli/commands/tailordb/erd/schema.ts","../../src/cli/commands/tailordb/erd/utils.ts","../../src/cli/commands/tailordb/erd/export.ts","../../src/cli/commands/tailordb/erd/deploy.ts","../../src/cli/commands/tailordb/erd/serve.ts","../../src/cli/commands/tailordb/erd/index.ts","../../src/cli/commands/tailordb/migrate/set.ts","../../src/cli/commands/tailordb/migrate/status.ts","../../src/cli/commands/tailordb/migrate/index.ts","../../src/cli/commands/tailordb/index.ts","../../src/cli/commands/user/current.ts","../../src/cli/commands/user/list.ts","../../src/cli/commands/user/pat/transform.ts","../../src/cli/commands/user/pat/create.ts","../../src/cli/commands/user/pat/delete.ts","../../src/cli/commands/user/pat/list.ts","../../src/cli/commands/user/pat/update.ts","../../src/cli/commands/user/pat/index.ts","../../src/cli/commands/user/switch.ts","../../src/cli/commands/user/index.ts","../../src/cli/commands/workflow/index.ts","../../src/cli/commands/workspace/app/index.ts","../../src/cli/commands/workspace/user/index.ts","../../src/cli/commands/workspace/index.ts","../../src/cli/index.ts"],"sourcesContent":["import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { apply } from \"@/cli/commands/apply/apply\";\nimport { confirmationArgs, deploymentArgs } from \"@/cli/shared/args\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\n\nexport const applyCommand = defineAppCommand({\n name: \"apply\",\n description: \"Apply Tailor configuration to deploy your application.\",\n args: z\n .object({\n ...deploymentArgs,\n ...confirmationArgs,\n \"dry-run\": arg(z.boolean().optional(), {\n alias: \"d\",\n description: \"Run the command without making any changes\",\n }),\n \"no-schema-check\": arg(z.boolean().optional(), {\n description: \"Skip schema diff check against migration snapshots\",\n }),\n \"no-cache\": arg(z.boolean().optional(), {\n description: \"Disable bundle caching for this run\",\n }),\n \"clean-cache\": arg(z.boolean().optional(), {\n description: \"Clean the bundle cache before building\",\n }),\n })\n .strict(),\n run: async (args) => {\n const { initTelemetry } = await import(\"@/cli/telemetry\");\n await initTelemetry();\n await apply({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n dryRun: args[\"dry-run\"],\n yes: args.yes,\n noSchemaCheck: args[\"no-schema-check\"],\n noCache: args[\"no-cache\"],\n cleanCache: args[\"clean-cache\"],\n });\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { getCommand } from \"./get\";\nimport { jobsCommand } from \"./jobs\";\nimport { listCommand } from \"./list\";\nimport { triggerCommand } from \"./trigger\";\nimport { webhookCommand } from \"./webhook\";\n\nexport const executorCommand = defineCommand({\n name: \"executor\",\n description: \"Manage executors\",\n subCommands: {\n list: listCommand,\n get: getCommand,\n jobs: jobsCommand,\n trigger: triggerCommand,\n webhook: webhookCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport { FunctionExecution_Type } from \"@tailor-proto/tailor/v1/function_resource_pb\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { formatKeyValueTable } from \"@/cli/shared/format\";\nimport { functionExecutionStatusToString } from \"@/cli/shared/function-execution\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport type { FunctionExecution } from \"@tailor-proto/tailor/v1/function_resource_pb\";\n\ninterface FunctionExecutionListInfo {\n id: string;\n scriptName: string;\n status: string;\n type: string;\n startedAt: Date | null;\n finishedAt: Date | null;\n}\n\ninterface FunctionExecutionDetailInfo {\n id: string;\n scriptName: string;\n status: string;\n type: string;\n startedAt: Date | null;\n finishedAt: Date | null;\n logs: string;\n result: string;\n}\n\n/**\n * Convert function execution type enum to string.\n * @param type - Function execution type enum value\n * @returns Type string representation\n */\nfunction functionExecutionTypeToString(type: FunctionExecution_Type): string {\n switch (type) {\n case FunctionExecution_Type.STANDARD:\n return \"STANDARD\";\n case FunctionExecution_Type.JOB:\n return \"JOB\";\n default:\n return \"UNSPECIFIED\";\n }\n}\n\n/**\n * Transform FunctionExecution to FunctionExecutionListInfo for list display.\n * @param execution - FunctionExecution from proto\n * @returns Function execution list info\n */\nfunction toFunctionExecutionListInfo(execution: FunctionExecution): FunctionExecutionListInfo {\n return {\n id: execution.id,\n scriptName: execution.scriptName,\n status: functionExecutionStatusToString(execution.status),\n type: functionExecutionTypeToString(execution.type),\n startedAt: execution.startedAt ? timestampDate(execution.startedAt) : null,\n finishedAt: execution.finishedAt ? timestampDate(execution.finishedAt) : null,\n };\n}\n\n/**\n * Transform FunctionExecution to FunctionExecutionDetailInfo for detail display.\n * @param execution - FunctionExecution from proto\n * @returns Function execution detail info\n */\nfunction toFunctionExecutionDetailInfo(execution: FunctionExecution): FunctionExecutionDetailInfo {\n return {\n id: execution.id,\n scriptName: execution.scriptName,\n status: functionExecutionStatusToString(execution.status),\n type: functionExecutionTypeToString(execution.type),\n startedAt: execution.startedAt ? timestampDate(execution.startedAt) : null,\n finishedAt: execution.finishedAt ? timestampDate(execution.finishedAt) : null,\n logs: execution.logs,\n result: execution.result,\n };\n}\n\n/**\n * Print function execution detail in a human-readable format.\n * @param detail - Function execution detail info\n */\nfunction printFunctionExecutionDetail(detail: FunctionExecutionDetailInfo) {\n const formatDate = (date: Date | null): string => (date ? date.toISOString() : \"N/A\");\n\n const summaryData: [string, string][] = [\n [\"id\", detail.id],\n [\"scriptName\", detail.scriptName],\n [\"status\", detail.status],\n [\"type\", detail.type],\n [\"startedAt\", formatDate(detail.startedAt)],\n [\"finishedAt\", formatDate(detail.finishedAt)],\n ];\n logger.out(formatKeyValueTable(summaryData));\n\n if (detail.logs) {\n logger.log(styles.bold(\"\\nLogs:\"));\n for (const line of detail.logs.split(\"\\n\")) {\n logger.log(` ${line}`);\n }\n }\n\n if (detail.result) {\n logger.log(styles.bold(\"\\nResult:\"));\n try {\n const parsed = JSON.parse(detail.result);\n logger.log(` ${JSON.stringify(parsed, null, 2).split(\"\\n\").join(\"\\n \")}`);\n } catch {\n logger.log(` ${detail.result}`);\n }\n }\n}\n\nexport const logsCommand = defineAppCommand({\n name: \"logs\",\n description: \"List or get function execution logs.\",\n args: z\n .object({\n ...workspaceArgs,\n executionId: arg(z.string().optional(), {\n positional: true,\n description: \"Execution ID (if provided, shows details with logs)\",\n }),\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n if (args.executionId) {\n const { execution } = await client.getFunctionExecution({\n workspaceId,\n executionId: args.executionId,\n });\n\n if (!execution) {\n throw new Error(`Function execution '${args.executionId}' not found.`);\n }\n\n const detail = toFunctionExecutionDetailInfo(execution);\n\n if (args.json) {\n logger.out(detail);\n } else {\n printFunctionExecutionDetail(detail);\n }\n } else {\n const executions = await fetchAll(async (pageToken, maxPageSize) => {\n const { executions, nextPageToken } = await client.listFunctionExecutions({\n workspaceId,\n pageToken,\n pageSize: maxPageSize,\n });\n return [executions, nextPageToken];\n });\n\n const logs = executions.map(toFunctionExecutionListInfo);\n\n if (logs.length === 0 && !args.json) {\n logger.info(\"No function execution logs found.\");\n return;\n }\n logger.out(logs);\n }\n },\n});\n","/**\n * Bundler for function test-run command\n *\n * Bundles a single function file for execution via the TestExecScript API.\n * Generates an entry file based on the detected function type and bundles\n * with rolldown, following the same patterns as the existing bundlers.\n */\n\nimport * as fs from \"node:fs\";\nimport ml from \"multiline-ts\";\nimport * as path from \"pathe\";\nimport { resolveTSConfig } from \"pkg-types\";\nimport * as rolldown from \"rolldown\";\nimport { getDistDir } from \"@/cli/shared/dist-dir\";\nimport { resolveInlineSourcemap } from \"@/cli/shared/inline-sourcemap\";\nimport type { DetectedFunction } from \"./detect\";\n\n/** Machine user info resolved from config and API for bundle-time user context. */\nexport interface ResolvedMachineUser {\n /** Machine user name */\n name: string;\n /** Machine user ID (UUID from API, or nil UUID if unavailable) */\n id: string;\n /** Attributes from config (null if not found in config, e.g. external auth) */\n attributes: Record<string, unknown> | null;\n /** Attribute list from config */\n attributeList: unknown[];\n}\n\ninterface BundleForTestRunOptions {\n /** Detected function info */\n detected: DetectedFunction;\n /** Absolute path to the source file */\n sourceFile: string;\n /** Environment variables (injected into workflow job bundles) */\n env?: Record<string, string | number | boolean>;\n /** Inline sourcemap config value from defineConfig */\n inlineSourcemap?: boolean;\n /** Machine user info for injecting user context into the bundle */\n machineUser: ResolvedMachineUser;\n /** Workspace ID for user context */\n workspaceId: string;\n}\n\ninterface BundleForTestRunResult {\n /** The bundled JavaScript code */\n bundledCode: string;\n /** Name used for the script */\n scriptName: string;\n}\n\n/**\n * Bundle a function file for test-run execution via TestExecScript API.\n * @param options - Bundle options\n * @returns Bundled code and script name\n */\nexport async function bundleForTestRun(\n options: BundleForTestRunOptions,\n): Promise<BundleForTestRunResult> {\n const { detected, sourceFile, env = {}, machineUser, workspaceId } = options;\n const inlineSourcemap = resolveInlineSourcemap(options.inlineSourcemap);\n\n const outputDir = path.resolve(getDistDir(), \"test-run\");\n fs.mkdirSync(outputDir, { recursive: true });\n\n const baseName = `test-run--${detected.name}`;\n const scriptName = `${baseName}.js`;\n const entryPath = path.join(outputDir, `${baseName}.entry.js`);\n const outputPath = path.join(outputDir, scriptName);\n\n const entryContent = generateEntry(detected, sourceFile, env, machineUser, workspaceId);\n fs.writeFileSync(entryPath, entryContent);\n\n let tsconfig: string | undefined;\n try {\n tsconfig = await resolveTSConfig();\n } catch {\n tsconfig = undefined;\n }\n\n await rolldown.build(\n rolldown.defineConfig({\n input: entryPath,\n output: {\n file: outputPath,\n format: \"esm\",\n sourcemap: inlineSourcemap ? \"inline\" : true,\n minify: inlineSourcemap\n ? {\n mangle: {\n keepNames: true,\n },\n }\n : true,\n codeSplitting: false,\n },\n tsconfig,\n treeshake: {\n moduleSideEffects: false,\n annotations: true,\n unknownGlobalSideEffects: false,\n },\n logLevel: \"silent\",\n }) as rolldown.BuildOptions,\n );\n\n const bundledCode = fs.readFileSync(outputPath, \"utf-8\");\n\n return { bundledCode, scriptName };\n}\n\n/**\n * Generate entry file content based on the detected function type.\n * @param detected - Detected function info\n * @param sourceFile - Absolute path to the source file\n * @param env - Environment variables for workflow job bundles\n * @param machineUser - Resolved machine user info\n * @param workspaceId - Workspace ID\n * @returns Entry file content string\n */\nfunction generateEntry(\n detected: DetectedFunction,\n sourceFile: string,\n env: Record<string, string | number | boolean>,\n machineUser: ResolvedMachineUser,\n workspaceId: string,\n): string {\n const absoluteSourcePath = path.resolve(sourceFile);\n\n switch (detected.type) {\n case \"plain\":\n if (detected.namedMain) {\n return ml /* js */ `\n export { main } from \"${absoluteSourcePath}\";\n `;\n }\n return ml /* js */ `\n import _fn from \"${absoluteSourcePath}\";\n export { _fn as main };\n `;\n\n case \"resolver\": {\n // Same pattern as services/resolver/bundler.ts:125-152\n // In production, the operationHook injects user/env into context.\n // For test-run, we embed machine user info since there's no operationHook.\n const userExpr = buildMachineUserExpr(machineUser, workspaceId);\n return ml /* js */ `\n import _internalResolver from \"${absoluteSourcePath}\";\n import { t } from \"@tailor-platform/sdk\";\n\n const _env = ${JSON.stringify(env)};\n const _user = ${userExpr};\n\n const $tailor_resolver_body = async (context) => {\n const enrichedContext = { ...context, env: _env, user: _user };\n\n if (_internalResolver.input) {\n const result = t.object(_internalResolver.input).parse({\n value: enrichedContext.input,\n data: enrichedContext.input,\n user: enrichedContext.user,\n });\n\n if (result.issues) {\n const errorMessages = result.issues\n .map(issue => {\n const path = issue.path ? issue.path.join('.') : '';\n return path ? \\` \\${path}: \\${issue.message}\\` : issue.message;\n })\n .join('\\\\n');\n throw new Error(\\`Failed to input validation:\\\\n\\${errorMessages}\\`);\n }\n }\n\n return _internalResolver.body(enrichedContext);\n };\n\n export { $tailor_resolver_body as main };\n `;\n }\n\n case \"executor\": {\n // Same pattern as services/executor/bundler.ts:144-150\n // In production, buildExecutorArgsExpr injects actor/env into args.\n // For test-run, we embed machine user as actor.\n const actorExpr = buildMachineActorExpr(machineUser, workspaceId);\n return ml /* js */ `\n import _internalExecutor from \"${absoluteSourcePath}\";\n\n const _env = ${JSON.stringify(env)};\n const _actor = ${actorExpr};\n\n const __executor_function = async (args) => {\n return _internalExecutor.operation.body({ ...args, env: _env, actor: _actor });\n };\n\n export { __executor_function as main };\n `;\n }\n\n case \"workflow-job\": {\n // Same pattern as services/workflow/bundler.ts:286-294\n // Note: user context is not available in TestExecScript for workflow jobs.\n // The production workflow bundler's user mapping is being fixed in fix/workflow-user.\n const exportName = detected.exportName!;\n return ml /* js */ `\n import { ${exportName} } from \"${absoluteSourcePath}\";\n\n const env = ${JSON.stringify(env)};\n\n export async function main(input) {\n return await ${exportName}.body(input, { env });\n }\n `;\n }\n }\n}\n\n/**\n * Build a JSON expression for a machine user TailorUser object.\n * @param machineUser - Resolved machine user info\n * @param workspaceId - Workspace ID\n * @returns JSON string for the user expression\n */\nfunction buildMachineUserExpr(machineUser: ResolvedMachineUser, workspaceId: string): string {\n return JSON.stringify({\n id: machineUser.id,\n type: \"machine_user\",\n workspaceId,\n attributes: machineUser.attributes,\n attributeList: machineUser.attributeList,\n });\n}\n\n/**\n * Build a JSON expression for a machine user TailorActor object.\n * @param machineUser - Resolved machine user info\n * @param workspaceId - Workspace ID\n * @returns JSON string for the actor expression\n */\nfunction buildMachineActorExpr(machineUser: ResolvedMachineUser, workspaceId: string): string {\n return JSON.stringify({\n workspaceId,\n userId: machineUser.id,\n attributes: machineUser.attributes,\n attributeList: machineUser.attributeList,\n userType: \"USER_TYPE_MACHINE_USER\",\n });\n}\n","/**\n * Function type detection for test-run command\n *\n * Detects the function type (resolver, executor, workflow job, or plain function)\n * by dynamically importing the module and checking against known schemas.\n */\n\nimport { pathToFileURL } from \"node:url\";\nimport * as path from \"pathe\";\nimport { ExecutorSchema } from \"@/parser/service/executor\";\nimport { ResolverSchema } from \"@/parser/service/resolver\";\nimport { WorkflowJobSchema } from \"@/parser/service/workflow\";\n\nexport type FunctionType = \"resolver\" | \"executor\" | \"workflow-job\" | \"plain\";\n\nexport interface DetectedFunction {\n /** Detected function type */\n type: FunctionType;\n /** Function name (resolver name, executor name, job name, or filename-derived) */\n name: string;\n /** For workflow jobs: the TypeScript export name needed for bundling */\n exportName?: string;\n /** For plain functions: whether main is a named export rather than default export */\n namedMain?: boolean;\n}\n\ninterface DetectFunctionOptions {\n /** Absolute path to the function file */\n filePath: string;\n /** Workflow job name to select (matches the `name` field of createWorkflowJob) */\n jobName?: string;\n}\n\n/**\n * Detect the function type from a file by importing it and checking against schemas.\n * @param options - Detection options\n * @returns Detected function information\n */\nexport async function detectFunctionType(\n options: DetectFunctionOptions,\n): Promise<DetectedFunction> {\n const { filePath, jobName } = options;\n\n const module = await import(pathToFileURL(filePath).href);\n\n // Priority: resolver → executor → workflow job → plain function\n\n // 1. Check resolver\n const resolverResult = ResolverSchema.safeParse(module.default);\n if (resolverResult.success) {\n return { type: \"resolver\", name: resolverResult.data.name };\n }\n\n // 2. Check executor (only function/jobFunction kinds)\n const executorResult = ExecutorSchema.safeParse(module.default);\n if (executorResult.success) {\n const { operation } = executorResult.data;\n if (operation.kind === \"function\" || operation.kind === \"jobFunction\") {\n return { type: \"executor\", name: executorResult.data.name };\n }\n }\n\n // 3. Check workflow jobs (scan all named exports)\n const workflowJobResult = detectWorkflowJob(module, jobName);\n if (workflowJobResult) {\n return workflowJobResult;\n }\n\n // 4. Check plain function (default export or named export \"main\")\n if (typeof module.default === \"function\") {\n const name = deriveNameFromPath(filePath);\n return { type: \"plain\", name };\n }\n\n if (typeof module.main === \"function\") {\n const name = deriveNameFromPath(filePath);\n return { type: \"plain\", name, namedMain: true };\n }\n\n throw new Error(\n `Could not detect function type from ${filePath}.\\n` +\n \"The file must have one of:\\n\" +\n \" - A default-exported resolver (createResolver)\\n\" +\n \" - A default-exported executor (createExecutor) with function/jobFunction operation\\n\" +\n \" - A named-exported workflow job (createWorkflowJob)\\n\" +\n \" - A default-exported function\\n\" +\n ' - A named-exported \"main\" function',\n );\n}\n\n/**\n * Scan all named exports for workflow jobs.\n * If jobName is specified, find the job whose `.name` matches.\n * If not specified and exactly one job exists, use it.\n * If multiple jobs exist, throw an error with the list.\n * @param module - The imported module\n * @param jobName - Workflow job name to select\n * @returns Detected function or null if no workflow jobs found\n */\nfunction detectWorkflowJob(\n module: Record<string, unknown>,\n jobName?: string,\n): DetectedFunction | null {\n const jobs: Array<{ name: string; exportName: string }> = [];\n\n for (const [exportName, exportValue] of Object.entries(module)) {\n if (exportName === \"default\") continue;\n const result = WorkflowJobSchema.safeParse(exportValue);\n if (result.success) {\n jobs.push({ name: result.data.name, exportName });\n }\n }\n\n if (jobs.length === 0) {\n return null;\n }\n\n if (jobName) {\n const match = jobs.find((j) => j.name === jobName);\n if (!match) {\n const available = jobs.map((j) => ` - \"${j.name}\" (export: ${j.exportName})`).join(\"\\n\");\n throw new Error(`Workflow job \"${jobName}\" not found. Available jobs:\\n${available}`);\n }\n return { type: \"workflow-job\", name: match.name, exportName: match.exportName };\n }\n\n if (jobs.length === 1) {\n return { type: \"workflow-job\", name: jobs[0].name, exportName: jobs[0].exportName };\n }\n\n const available = jobs.map((j) => ` - \"${j.name}\" (export: ${j.exportName})`).join(\"\\n\");\n throw new Error(`Multiple workflow jobs found. Specify one with --name:\\n${available}`);\n}\n\n/**\n * Derive a script name from a file path (filename without extension).\n * @param filePath - Absolute path to the function file\n * @returns Filename without extension\n */\nfunction deriveNameFromPath(filePath: string): string {\n return path.basename(filePath, path.extname(filePath));\n}\n","/**\n * `tailor-sdk function test-run` command\n *\n * Bundles and executes a function on the Tailor Platform server\n * without deploying (applying) the application.\n */\n\nimport * as fs from \"node:fs\";\nimport { create } from \"@bufbuild/protobuf\";\nimport { AuthInvokerSchema } from \"@tailor-proto/tailor/v1/auth_resource_pb\";\nimport * as path from \"pathe\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient, type OperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadConfig } from \"@/cli/shared/config-loader\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { executeScript } from \"@/cli/shared/script-executor\";\nimport { bundleForTestRun, type ResolvedMachineUser } from \"./bundle\";\nimport { detectFunctionType } from \"./detect\";\n\nexport const testRunCommand = defineAppCommand({\n name: \"test-run\",\n description: \"Run a function on the Tailor Platform server without deploying.\",\n args: z.object({\n ...workspaceArgs,\n file: arg(z.string(), {\n positional: true,\n description: \"Path to the function file\",\n }),\n name: arg(z.string().optional(), {\n alias: \"n\",\n description: \"Workflow job name to run (matches the `name` field of createWorkflowJob)\",\n }),\n arg: arg(z.string().optional(), {\n alias: \"a\",\n description: \"JSON argument to pass to the function\",\n }),\n \"machine-user\": arg(z.string().optional(), {\n alias: \"m\",\n description: \"Machine user name for authentication\",\n }),\n config: arg(z.string().default(\"tailor.config.ts\"), {\n alias: \"c\",\n description: \"Path to SDK config file\",\n }),\n }),\n notes: `You can pass either a source file (\\`.ts\\`) or a pre-bundled file (\\`.js\\`).\nWhen a \\`.js\\` file is provided, detection and bundling are skipped and the file is executed as-is.\n\n> [!WARNING]\n> Workflow job \\`.trigger()\\` calls do not work in test-run mode.\n> Triggered jobs are not executed; only the target job's \\`body\\` function runs in isolation.`,\n examples: [\n {\n cmd: 'resolvers/add.ts --arg \\'{\"input\":{\"a\":1,\"b\":2}}\\'',\n desc: \"Run a resolver with input arguments\",\n },\n {\n cmd: \"workflows/sample.ts --name validate-order\",\n desc: \"Run a specific workflow job by name\",\n },\n {\n cmd: '.tailor-sdk/resolvers/add.js --arg \\'{\"input\":{\"a\":1,\"b\":2}}\\'',\n desc: \"Run a pre-bundled .js file directly\",\n },\n ],\n run: async (args) => {\n // 1. Resolve and validate file path\n const filePath = path.resolve(args.file);\n if (!fs.existsSync(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n // 2. Load config (required)\n const { config } = await loadConfig(args.config);\n\n // 3. Resolve auth, workspace, and machine user info (needed before bundling)\n const authNamespace = resolveAuthNamespace(config.auth);\n const machineUserName = resolveMachineUserName(args[\"machine-user\"], config.auth);\n\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n const machineUser = await resolveMachineUser({\n client,\n workspaceId,\n authNamespace,\n machineUserName,\n authConfig: config.auth,\n });\n\n // 4. Resolve bundled code and script name\n const relativePath = path.relative(process.cwd(), filePath);\n const isPreBundled = filePath.endsWith(\".js\");\n let bundledCode: string;\n let scriptName: string;\n let functionType: string | undefined;\n let functionName: string | undefined;\n\n if (isPreBundled) {\n // Pre-bundled .js file (e.g., from .tailor-sdk/resolvers/add.js)\n scriptName = path.basename(filePath);\n bundledCode = fs.readFileSync(filePath, \"utf-8\");\n logger.info(`Using pre-bundled script ${styles.bold(scriptName)}`);\n } else {\n // Source file: detect type and bundle\n logger.info(`Detecting function type from ${styles.path(relativePath)}`);\n\n const detected = await detectFunctionType({\n filePath,\n jobName: args.name,\n });\n\n functionType = detected.type;\n functionName = detected.name;\n logger.info(`Detected: ${styles.bold(detected.type)} ${styles.info(`\"${detected.name}\"`)}`);\n\n logger.info(\"Bundling...\");\n ({ bundledCode, scriptName } = await bundleForTestRun({\n detected,\n sourceFile: filePath,\n env: config.env ?? {},\n inlineSourcemap: config.inlineSourcemap,\n machineUser,\n workspaceId,\n }));\n logger.info(`Bundled as ${styles.bold(scriptName)}`);\n }\n\n // 5. Execute via TestExecScript\n const authInvoker = create(AuthInvokerSchema, {\n namespace: authNamespace,\n machineUserName: machineUser.name,\n });\n\n logger.info(`Executing on workspace ${styles.dim(workspaceId)}...`);\n\n const result = await executeScript({\n client,\n workspaceId,\n name: scriptName,\n code: bundledCode,\n arg: args.arg,\n invoker: authInvoker,\n });\n\n // 7. Display result\n if (args.json) {\n logger.out({\n success: result.success,\n scriptName,\n functionType,\n functionName,\n logs: result.logs,\n result: result.result,\n error: result.error,\n });\n } else {\n if (result.success) {\n logger.success(\"Execution succeeded\");\n } else {\n logger.error(\"Execution failed\");\n }\n\n if (result.logs?.trim()) {\n logger.log(styles.bold(\"\\nLogs:\"));\n for (const line of result.logs.split(\"\\n\")) {\n logger.log(` ${line}`);\n }\n }\n\n if (result.result && result.success) {\n logger.log(styles.bold(\"\\nResult:\"));\n try {\n const parsed = JSON.parse(result.result);\n logger.log(` ${JSON.stringify(parsed, null, 2).split(\"\\n\").join(\"\\n \")}`);\n } catch {\n logger.log(` ${result.result}`);\n }\n }\n\n if (result.error && !result.success) {\n logger.log(styles.bold(\"\\nError:\"));\n logger.log(` ${styles.error(result.error)}`);\n }\n }\n\n if (!result.success) {\n process.exit(1);\n }\n },\n});\n\n/**\n * Resolve auth namespace from config.\n * @param authConfig - Auth configuration from tailor.config.ts\n * @returns Resolved auth namespace\n */\nfunction resolveAuthNamespace(\n authConfig: { name: string; external?: boolean } | undefined,\n): string {\n if (authConfig?.name) {\n return authConfig.name;\n }\n throw new Error(\"Auth namespace is required. Ensure tailor.config.ts has an auth config.\");\n}\n\n/**\n * Resolve machine user name from CLI args or config. Priority: --machine-user > first key of config.auth.machineUsers\n * @param cliMachineUser - CLI --machine-user value\n * @param authConfig - Auth configuration from tailor.config.ts\n * @returns Resolved machine user name\n */\nfunction resolveMachineUserName(\n cliMachineUser: string | undefined,\n authConfig:\n | { name: string; external?: boolean; machineUsers?: Record<string, unknown> }\n | undefined,\n): string {\n if (cliMachineUser) {\n return cliMachineUser;\n }\n if (authConfig && !(\"external\" in authConfig && authConfig.external)) {\n const machineUsers = authConfig.machineUsers;\n if (machineUsers) {\n const keys = Object.keys(machineUsers);\n if (keys.length > 0) {\n return keys[0];\n }\n }\n }\n throw new Error(\n \"Machine user is required. Provide --machine-user or ensure tailor.config.ts has machine users configured.\",\n );\n}\n\ninterface ResolveMachineUserOptions {\n client: OperatorClient;\n workspaceId: string;\n authNamespace: string;\n machineUserName: string;\n authConfig:\n | { name: string; external?: boolean; machineUsers?: Record<string, unknown> }\n | undefined;\n}\n\n/**\n * Resolve full machine user info: name, id (from API), and attributes (from config).\n * @param options - Options for resolving machine user\n * @returns Resolved machine user with id, attributes, and attributeList\n */\nasync function resolveMachineUser(\n options: ResolveMachineUserOptions,\n): Promise<ResolvedMachineUser> {\n const { client, workspaceId, authNamespace, machineUserName, authConfig } = options;\n\n // Get machine user ID from the server\n let id = \"00000000-0000-0000-0000-000000000000\";\n try {\n const { machineUser } = await client.getAuthMachineUser({\n workspaceId,\n authNamespace,\n name: machineUserName,\n });\n if (machineUser?.id) {\n id = machineUser.id;\n }\n } catch {\n logger.debug(`Could not fetch machine user \"${machineUserName}\" from server, using nil UUID`);\n }\n\n // Get attributes from config\n const machineUserConfig = authConfig?.machineUsers?.[machineUserName];\n let attributes: Record<string, unknown> | null = null;\n let attributeList: unknown[] = [];\n if (machineUserConfig && typeof machineUserConfig === \"object\") {\n const cfg = machineUserConfig as {\n attributes?: Record<string, unknown>;\n attributeList?: unknown[];\n };\n attributes = cfg.attributes ?? null;\n attributeList = cfg.attributeList ?? [];\n }\n\n return { name: machineUserName, id, attributes, attributeList };\n}\n","import { defineCommand, runCommand } from \"politty\";\nimport { logsCommand } from \"./logs\";\nimport { testRunCommand } from \"./test-run\";\n\nexport const functionCommand = defineCommand({\n name: \"function\",\n description: \"Manage functions\",\n subCommands: {\n logs: logsCommand,\n \"test-run\": testRunCommand,\n },\n async run() {\n await runCommand(logsCommand, []);\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { generate } from \"@/cli/commands/generate/service\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\n\nexport const generateCommand = defineAppCommand({\n name: \"generate\",\n description: \"Generate files using Tailor configuration.\",\n args: z\n .object({\n config: arg(z.string().default(\"tailor.config.ts\"), {\n alias: \"c\",\n description: \"Path to SDK config file\",\n }),\n watch: arg(z.boolean().default(false), {\n alias: \"W\",\n description: \"Watch for type/resolver changes and regenerate\",\n }),\n })\n .strict(),\n run: async (args) => {\n const { initTelemetry } = await import(\"@/cli/telemetry\");\n await initTelemetry();\n await generate({\n configPath: args.config,\n watch: args.watch,\n });\n },\n});\n","import { spawnSync } from \"node:child_process\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { readPackageJson } from \"@/cli/shared/package-json\";\n\nconst detectPackageManager = () => {\n const availablePMs = [\"npm\", \"yarn\", \"pnpm\"];\n const userAgent = process.env.npm_config_user_agent;\n if (!userAgent) return;\n const [name] = userAgent.split(\"/\");\n if (!availablePMs.includes(name)) return;\n return name;\n};\n\nexport const initCommand = defineAppCommand({\n name: \"init\",\n description: \"Initialize a new project using create-sdk.\",\n args: z\n .object({\n name: arg(z.string().optional(), {\n positional: true,\n description: \"Project name\",\n }),\n template: arg(z.string().optional(), {\n alias: \"t\",\n description: \"Template name\",\n }),\n })\n .strict(),\n run: async (args) => {\n const packageJson = await readPackageJson();\n const version =\n packageJson.version && packageJson.version !== \"0.0.0\" ? packageJson.version : \"latest\";\n\n let packageManager = detectPackageManager();\n if (!packageManager) {\n logger.warn(\"Could not detect package manager, defaulting to npm\");\n packageManager = \"npm\";\n }\n const initArgs = [\n \"create\",\n `@tailor-platform/sdk@${version}`,\n ...(args.name ? [args.name] : []),\n ...(packageManager === \"npm\" ? [\"--\"] : []),\n ...(args.template ? [\"--template\", args.template] : []),\n ];\n logger.log(`Running: ${packageManager} ${initArgs.join(\" \")}`);\n\n spawnSync(packageManager, initArgs, { stdio: \"inherit\" });\n },\n});\n","import * as crypto from \"node:crypto\";\nimport * as http from \"node:http\";\nimport { generateCodeVerifier } from \"@badgateway/oauth2-client\";\nimport open from \"open\";\nimport { z } from \"zod\";\nimport { fetchUserInfo, initOAuth2Client } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nconst redirectPort = 8085;\nconst redirectUri = `http://localhost:${redirectPort}/callback`;\n\nfunction randomState() {\n return crypto.randomBytes(32).toString(\"base64url\");\n}\n\nconst startAuthServer = async () => {\n const client = initOAuth2Client();\n const state = randomState();\n const codeVerifier = await generateCodeVerifier();\n\n return new Promise<void>((resolve, reject) => {\n const server = http.createServer(async (req, res) => {\n try {\n if (!req.url?.startsWith(\"/callback\")) {\n throw new Error(\"Invalid callback URL\");\n }\n const tokens = await client.authorizationCode.getTokenFromCodeRedirect(\n `http://${req.headers.host}${req.url}`,\n {\n redirectUri: redirectUri,\n state,\n codeVerifier,\n },\n );\n const userInfo = await fetchUserInfo(tokens.accessToken);\n\n const pfConfig = readPlatformConfig();\n pfConfig.users = {\n ...pfConfig.users,\n [userInfo.email]: {\n access_token: tokens.accessToken,\n refresh_token: tokens.refreshToken!,\n token_expires_at: new Date(tokens.expiresAt!).toISOString(),\n },\n };\n pfConfig.current_user = userInfo.email;\n writePlatformConfig(pfConfig);\n\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({\n status: \"ok\",\n message: \"Successfully authenticated. Please close this window.\",\n }),\n );\n resolve();\n } catch (error) {\n res.writeHead(401);\n res.end(\"Authentication failed\");\n reject(error);\n } finally {\n // Close the server after handling one request.\n server.close();\n }\n });\n\n const timeout = setTimeout(\n () => {\n server.close();\n reject(new Error(\"Login timeout exceeded\"));\n },\n 5 * 60 * 1000,\n );\n\n server.on(\"close\", () => {\n clearTimeout(timeout);\n });\n\n server.on(\"error\", (error) => {\n reject(error);\n });\n\n server.listen(redirectPort, async () => {\n const authorizeUri = await client.authorizationCode.getAuthorizeUri({\n redirectUri,\n state,\n codeVerifier,\n });\n\n logger.info(`Opening browser for login:\\n\\n${authorizeUri}\\n`);\n try {\n await open(authorizeUri);\n } catch {\n logger.warn(\"Failed to open browser automatically. Please open the URL above manually.\");\n }\n });\n });\n};\n\nexport const loginCommand = defineAppCommand({\n name: \"login\",\n description: \"Login to Tailor Platform.\",\n args: z.object({}).strict(),\n run: async () => {\n await startAuthServer();\n logger.success(\"Successfully logged in to Tailor Platform.\");\n },\n});\n","import { z } from \"zod\";\nimport { initOAuth2Client } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const logoutCommand = defineAppCommand({\n name: \"logout\",\n description: \"Logout from Tailor Platform.\",\n args: z.object({}).strict(),\n run: async () => {\n const pfConfig = readPlatformConfig();\n const tokens = pfConfig.current_user ? pfConfig.users[pfConfig.current_user] : undefined;\n if (!tokens) {\n logger.info(\"You are not logged in.\");\n return;\n }\n\n const client = initOAuth2Client();\n client.revoke(\n {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token,\n expiresAt: Date.parse(tokens.token_expires_at),\n },\n \"refresh_token\",\n );\n\n delete pfConfig.users[pfConfig.current_user!];\n pfConfig.current_user = null;\n writePlatformConfig(pfConfig);\n logger.success(\"Successfully logged out from Tailor Platform.\");\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { listCommand } from \"./list\";\nimport { tokenCommand } from \"./token\";\n\nexport const machineuserCommand = defineCommand({\n name: \"machineuser\",\n description: \"Manage machine users in your Tailor Platform application.\",\n subCommands: {\n list: listCommand,\n token: tokenCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\n\nexport const oauth2clientCommand = defineCommand({\n name: \"oauth2client\",\n description: \"Manage OAuth2 clients in your Tailor Platform application.\",\n subCommands: {\n get: getCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import open from \"open\";\nimport { z } from \"zod\";\nimport { deploymentArgs } from \"@/cli/shared/args\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadConfig } from \"@/cli/shared/config-loader\";\nimport { loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nconst consoleBaseUrl = \"https://console.tailor.tech\";\n\nexport const openCommand = defineAppCommand({\n name: \"open\",\n description: \"Open Tailor Platform Console.\",\n args: z\n .object({\n ...deploymentArgs,\n })\n .strict(),\n run: async (args) => {\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n const { config } = await loadConfig(args.config);\n const applicationName = config.name;\n const consolePath = `/workspaces/${workspaceId}/applications/${encodeURIComponent(applicationName)}/overview`;\n const consoleUrl = new URL(consolePath, consoleBaseUrl).toString();\n\n logger.info(\"Opening Tailor Platform Console...\");\n\n try {\n await open(consoleUrl);\n logger.out(`Console URL: ${consoleUrl}`);\n logger.out(`Workspace ID: ${workspaceId}`);\n logger.out(`Application Name: ${applicationName}`);\n } catch {\n logger.warn(\n `Failed to open browser automatically. Please open this URL manually:\\n${consoleUrl}`,\n );\n }\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const createCommand = defineAppCommand({\n name: \"create\",\n description: \"Create a new profile.\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Profile name\",\n }),\n user: arg(z.string(), {\n alias: \"u\",\n description: \"User email\",\n }),\n \"workspace-id\": arg(z.string(), {\n alias: \"w\",\n description: \"Workspace ID\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n // Check if profile already exists\n if (config.profiles[args.name]) {\n throw new Error(`Profile \"${args.name}\" already exists.`);\n }\n\n // Check if user exists\n const token = await fetchLatestToken(config, args.user);\n\n // Check if workspace exists\n const client = await initOperatorClient(token);\n const workspaces = await fetchAll(async (pageToken, maxPageSize) => {\n const { workspaces, nextPageToken } = await client.listWorkspaces({\n pageToken,\n pageSize: maxPageSize,\n });\n return [workspaces, nextPageToken];\n });\n\n const workspace = workspaces.find((ws) => ws.id === args[\"workspace-id\"]);\n if (!workspace) {\n throw new Error(`Workspace \"${args[\"workspace-id\"]}\" not found.`);\n }\n\n // Create new profile\n config.profiles[args.name] = {\n user: args.user,\n workspace_id: args[\"workspace-id\"],\n };\n writePlatformConfig(config);\n\n if (!args.json) {\n logger.success(`Profile \"${args.name}\" created successfully.`);\n }\n\n // Show profile info\n const profileInfo: ProfileInfo = {\n name: args.name,\n user: args.user,\n workspaceId: args[\"workspace-id\"],\n };\n logger.out(profileInfo);\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const deleteCommand = defineAppCommand({\n name: \"delete\",\n description: \"Delete a profile.\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Profile name\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n // Check if profile exists\n if (!config.profiles[args.name]) {\n throw new Error(`Profile \"${args.name}\" not found.`);\n }\n\n // Delete profile\n delete config.profiles[args.name];\n writePlatformConfig(config);\n\n logger.success(`Profile \"${args.name}\" deleted successfully.`);\n },\n});\n","import ml from \"multiline-ts\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List all profiles.\",\n args: z.object({}).strict(),\n run: async () => {\n const config = readPlatformConfig();\n\n const profiles = Object.entries(config.profiles);\n if (profiles.length === 0) {\n logger.info(ml`\n No profiles found.\n Please create a profile first using 'tailor-sdk profile create' command.\n `);\n return;\n }\n\n const profileInfos: ProfileInfo[] = profiles.map(([name, profile]) => ({\n name,\n user: profile!.user,\n workspaceId: profile!.workspace_id,\n }));\n logger.out(profileInfos);\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const updateCommand = defineAppCommand({\n name: \"update\",\n description: \"Update profile properties.\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Profile name\",\n }),\n user: arg(z.string().optional(), {\n alias: \"u\",\n description: \"New user email\",\n }),\n \"workspace-id\": arg(z.string().optional(), {\n alias: \"w\",\n description: \"New workspace ID\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n // Check if profile exists\n if (!config.profiles[args.name]) {\n throw new Error(`Profile \"${args.name}\" not found.`);\n }\n\n // Check if at least one property is provided\n if (!args.user && !args[\"workspace-id\"]) {\n throw new Error(\"Please provide at least one property to update.\");\n }\n\n const profile = config.profiles[args.name]!;\n const oldUser = profile.user;\n const newUser = args.user || oldUser;\n const oldWorkspaceId = profile.workspace_id;\n const newWorkspaceId = args[\"workspace-id\"] || oldWorkspaceId;\n\n // Check if user exists\n const token = await fetchLatestToken(config, newUser);\n\n // Check if workspace exists\n const client = await initOperatorClient(token);\n const workspaces = await fetchAll(async (pageToken, maxPageSize) => {\n const { workspaces, nextPageToken } = await client.listWorkspaces({\n pageToken,\n pageSize: maxPageSize,\n });\n return [workspaces, nextPageToken];\n });\n const workspace = workspaces.find((ws) => ws.id === newWorkspaceId);\n if (!workspace) {\n throw new Error(`Workspace \"${newWorkspaceId}\" not found.`);\n }\n\n // Update properties\n profile.user = newUser;\n profile.workspace_id = newWorkspaceId;\n writePlatformConfig(config);\n if (!args.json) {\n logger.success(`Profile \"${args.name}\" updated successfully`);\n }\n\n // Show profile info\n const profileInfo: ProfileInfo = {\n name: args.name,\n user: newUser,\n workspaceId: newWorkspaceId,\n };\n logger.out(profileInfo);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\nimport { updateCommand } from \"./update\";\n\nexport interface ProfileInfo {\n name: string;\n user: string;\n workspaceId: string;\n}\n\nexport const profileCommand = defineCommand({\n name: \"profile\",\n description: \"Manage workspace profiles (user + workspace combinations).\",\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n update: updateCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\n\n/**\n * Arguments for specify secret key\n */\nexport const vaultArgs = {\n \"vault-name\": arg(z.string(), {\n alias: \"V\",\n description: \"Vault name\",\n }),\n};\n\n/**\n * Arguments for specify secret key\n */\nexport const secretIdentifyArgs = {\n ...vaultArgs,\n name: arg(z.string(), {\n alias: \"n\",\n description: \"Secret name\",\n }),\n};\n\n/**\n * Arguments for specify secret key\n */\nexport const secretValueArgs = {\n ...secretIdentifyArgs,\n value: arg(z.string(), {\n alias: \"v\",\n description: \"Secret value\",\n }),\n};\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { secretValueArgs } from \"./args\";\n\nexport const createSecretCommand = defineAppCommand({\n name: \"create\",\n description: \"Create a secret in a vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...secretValueArgs,\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n try {\n await client.createSecretManagerSecret({\n workspaceId,\n secretmanagerVaultName: args[\"vault-name\"],\n secretmanagerSecretName: args.name,\n secretmanagerSecretValue: args.value,\n });\n } catch (error) {\n if (error instanceof ConnectError) {\n if (error.code === Code.NotFound) {\n throw new Error(`Vault \"${args[\"vault-name\"]}\" not found.`);\n }\n if (error.code === Code.AlreadyExists) {\n throw new Error(`Secret \"${args.name}\" already exists.`);\n }\n }\n throw error;\n }\n\n logger.success(`Secret: ${args.name} created in vault: ${args[\"vault-name\"]}`);\n },\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { confirmationArgs, workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { prompt } from \"@/cli/shared/prompt\";\nimport { secretIdentifyArgs } from \"./args\";\n\nexport const deleteSecretCommand = defineAppCommand({\n name: \"delete\",\n description: \"Delete a secret in a vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...secretIdentifyArgs,\n ...confirmationArgs,\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n if (!args.yes) {\n const confirmation = await prompt.text({\n message: `Enter the secret name to confirm deletion (\"${args.name}\"):`,\n });\n\n if (confirmation !== args.name) {\n logger.info(\"Secret deletion cancelled.\");\n return;\n }\n }\n\n try {\n await client.deleteSecretManagerSecret({\n workspaceId,\n secretmanagerVaultName: args[\"vault-name\"],\n secretmanagerSecretName: args.name,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(`Secret \"${args.name}\" not found in vault \"${args[\"vault-name\"]}\".`);\n }\n throw error;\n }\n\n logger.success(`Secret: ${args.name} deleted from vault: ${args[\"vault-name\"]}`);\n },\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { vaultArgs } from \"./args\";\nimport type { SecretManagerSecret } from \"@tailor-proto/tailor/v1/secret_manager_resource_pb\";\n\nexport interface SecretListOptions {\n workspaceId?: string;\n profile?: string;\n vaultName: string;\n}\n\nexport interface SecretInfo {\n name: string;\n createdAt: Date | null;\n updatedAt: Date | null;\n}\n\nfunction secretInfo(secret: SecretManagerSecret): SecretInfo {\n return {\n name: secret.name,\n createdAt: secret.createTime ? timestampDate(secret.createTime) : null,\n updatedAt: secret.updateTime ? timestampDate(secret.updateTime) : null,\n };\n}\n\n/**\n * List secrets in a Secret Manager vault.\n * @param options - Secret listing options\n * @returns List of secrets\n */\nasync function secretList(options: SecretListOptions): Promise<SecretInfo[]> {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options.workspaceId,\n profile: options.profile,\n });\n\n const secrets = await fetchAll(async (pageToken, maxPageSize) => {\n const { secrets, nextPageToken } = await client.listSecretManagerSecrets({\n workspaceId,\n secretmanagerVaultName: options.vaultName,\n pageToken,\n pageSize: maxPageSize,\n });\n return [secrets, nextPageToken];\n });\n\n return secrets.map(secretInfo);\n}\n\nexport const listSecretCommand = defineAppCommand({\n name: \"list\",\n description: \"List all secrets in a vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...vaultArgs,\n })\n .strict(),\n run: async (args) => {\n try {\n const secrets = await secretList({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n vaultName: args[\"vault-name\"],\n });\n logger.out(secrets);\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(`Vault \"${args[\"vault-name\"]}\" not found.`);\n }\n throw error;\n }\n },\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { secretValueArgs } from \"./args\";\n\nexport const updateSecretCommand = defineAppCommand({\n name: \"update\",\n description: \"Update a secret in a vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...secretValueArgs,\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n try {\n await client.updateSecretManagerSecret({\n workspaceId,\n secretmanagerVaultName: args[\"vault-name\"],\n secretmanagerSecretName: args.name,\n secretmanagerSecretValue: args.value,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(`Secret \"${args.name}\" not found in vault \"${args[\"vault-name\"]}\".`);\n }\n throw error;\n }\n\n logger.success(`Secret: ${args.name} updated in vault: ${args[\"vault-name\"]}`);\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\n\ntype ArgsShape = Record<string, z.ZodType>;\n\nexport const nameArgs = {\n name: arg(z.string(), {\n positional: true,\n description: \"Vault name\",\n }),\n} satisfies ArgsShape;\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { nameArgs } from \"./args\";\n\nexport const createCommand = defineAppCommand({\n name: \"create\",\n description: \"Create a new Secret Manager vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...nameArgs,\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n try {\n await client.createSecretManagerVault({\n workspaceId,\n secretmanagerVaultName: args.name,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.AlreadyExists) {\n throw new Error(`Vault \"${args.name}\" already exists.`);\n }\n throw error;\n }\n\n logger.success(`Vault: ${args.name} created`);\n },\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { confirmationArgs, workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { prompt } from \"@/cli/shared/prompt\";\nimport { nameArgs } from \"./args\";\n\nexport const deleteCommand = defineAppCommand({\n name: \"delete\",\n description: \"Delete a Secret Manager vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...nameArgs,\n ...confirmationArgs,\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n if (!args.yes) {\n const confirmation = await prompt.text({\n message: `Enter the vault name to confirm deletion (\"${args.name}\"):`,\n });\n if (confirmation !== args.name) {\n logger.info(\"Vault deletion cancelled.\");\n return;\n }\n }\n\n try {\n await client.deleteSecretManagerVault({\n workspaceId,\n secretmanagerVaultName: args.name,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(`Vault \"${args.name}\" not found.`);\n }\n throw error;\n }\n\n logger.success(`Vault: ${args.name} deleted`);\n },\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { SecretManagerVault } from \"@tailor-proto/tailor/v1/secret_manager_resource_pb\";\n\nexport interface VaultListOptions {\n workspaceId?: string;\n profile?: string;\n}\n\nexport interface VaultInfo {\n name: string;\n createdAt: Date | null;\n updatedAt: Date | null;\n}\n\nfunction vaultInfo(vault: SecretManagerVault): VaultInfo {\n return {\n name: vault.name,\n createdAt: vault.createTime ? timestampDate(vault.createTime) : null,\n updatedAt: vault.updateTime ? timestampDate(vault.updateTime) : null,\n };\n}\n\n/**\n * List Secret Manager vaults in the workspace.\n * @param options - Vault listing options\n * @returns List of vaults\n */\nasync function vaultList(options?: VaultListOptions): Promise<VaultInfo[]> {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options?.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options?.workspaceId,\n profile: options?.profile,\n });\n\n const vaults = await fetchAll(async (pageToken, maxPageSize) => {\n const { vaults, nextPageToken } = await client.listSecretManagerVaults({\n workspaceId,\n pageToken,\n pageSize: maxPageSize,\n });\n return [vaults, nextPageToken];\n });\n\n return vaults.map(vaultInfo);\n}\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List all Secret Manager vaults in the workspace.\",\n args: z\n .object({\n ...workspaceArgs,\n })\n .strict(),\n run: async (args) => {\n const vaults = await vaultList({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n logger.out(vaults);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\n\nexport const vaultCommand = defineCommand({\n name: \"vault\",\n description: \"Manage Secret Manager vaults.\",\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { createSecretCommand } from \"./create\";\nimport { deleteSecretCommand } from \"./delete\";\nimport { listSecretCommand } from \"./list\";\nimport { updateSecretCommand } from \"./update\";\nimport { vaultCommand } from \"./vault\";\n\nexport const secretCommand = defineCommand({\n name: \"secret\",\n description: \"Manage Secret Manager vaults and secrets.\",\n subCommands: {\n create: createSecretCommand,\n delete: deleteSecretCommand,\n list: listSecretCommand,\n update: updateSecretCommand,\n vault: vaultCommand,\n },\n async run() {\n await runCommand(vaultCommand, []);\n },\n});\n","export default \"name: Fetch Tailor Platform Token\\ndescription: Fetch an OAuth2 access token via client credentials grant and export as TAILOR_PLATFORM_TOKEN\\n\\ninputs:\\n client_id:\\n description: OAuth2 client ID\\n required: true\\n client_secret:\\n description: OAuth2 client secret\\n required: true\\n platform_oauth2_url:\\n description: OAuth2 token endpoint URL\\n required: false\\n default: https://api.tailor.tech/oauth2/platform/token\\n\\nruns:\\n using: composite\\n steps:\\n - name: Fetch access token\\n shell: bash\\n run: |\\n RESPONSE=$(curl -s -X POST \\\"${{ inputs.platform_oauth2_url }}\\\" \\\\\\n -H \\\"Content-Type: application/x-www-form-urlencoded\\\" \\\\\\n -d \\\"grant_type=client_credentials\\\" \\\\\\n --data-urlencode \\\"client_id=${{ inputs.client_id }}\\\" \\\\\\n --data-urlencode \\\"client_secret=${{ inputs.client_secret }}\\\")\\n\\n TOKEN=$(echo \\\"$RESPONSE\\\" | jq -r '.access_token')\\n\\n if [ \\\"$TOKEN\\\" = \\\"null\\\" ] || [ -z \\\"$TOKEN\\\" ]; then\\n echo \\\"::error::Failed to fetch access token\\\"\\n echo \\\"$RESPONSE\\\" | jq .\\n exit 1\\n fi\\n\\n echo \\\"::add-mask::$TOKEN\\\"\\n echo \\\"TAILOR_PLATFORM_TOKEN=$TOKEN\\\" >> \\\"$GITHUB_ENV\\\"\\n\";","export default \"name: Install Node.js\\ndescription: Install pnpm, Node.js, and project dependencies\\n\\nruns:\\n using: composite\\n steps:\\n - name: Install pnpm\\n uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0\\n with:\\n version: 10\\n\\n - name: Setup Node.js\\n uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0\\n with:\\n node-version: 22\\n cache: pnpm\\n\\n - name: Install dependencies\\n run: pnpm install --frozen-lockfile\\n shell: bash\\n\";","export default \"name: Deploy\\n\\non:\\n push:\\n branches:\\n - main\\n workflow_dispatch:\\n\\nconcurrency:\\n group: deploy-__WORKSPACE_NAME__\\n cancel-in-progress: false\\n\\nenv:\\n WORKSPACE_NAME: __WORKSPACE_NAME__\\n WORKSPACE_REGION: __WORKSPACE_REGION__\\n TAILOR_PLATFORM_ORGANIZATION_ID: __ORGANIZATION_ID__\\n TAILOR_PLATFORM_FOLDER_ID: __FOLDER_ID__\\n# __DEFAULTS_BLOCK__\\njobs:\\n deploy:\\n runs-on: ubuntu-latest\\n steps:\\n - name: Checkout\\n uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\\n with:\\n persist-credentials: false\\n\\n - name: Install Node.js\\n uses: ./.github/actions/install-node\\n\\n - name: Fetch Tailor Platform token\\n uses: ./.github/actions/fetch-tailor-token\\n with:\\n client_id: ${{ secrets.PLATFORM_MACHINE_USER_CLIENT_ID }}\\n client_secret: ${{ secrets.PLATFORM_MACHINE_USER_CLIENT_SECRET }}\\n\\n - name: Ensure workspace exists\\n run: |\\n WORKSPACE_ID=$(pnpm tailor-sdk workspace list -j | jq -r --arg name \\\"$WORKSPACE_NAME\\\" --arg region \\\"$WORKSPACE_REGION\\\" '.[] | select(.name == $name and .region == $region) | .id')\\n\\n if [ -z \\\"$WORKSPACE_ID\\\" ]; then\\n echo \\\"Workspace '$WORKSPACE_NAME' not found, creating...\\\"\\n WORKSPACE_ID=$(pnpm tailor-sdk workspace create -j --name \\\"$WORKSPACE_NAME\\\" --region \\\"$WORKSPACE_REGION\\\" --organization-id \\\"$TAILOR_PLATFORM_ORGANIZATION_ID\\\" --folder-id \\\"$TAILOR_PLATFORM_FOLDER_ID\\\" | jq -r '.id')\\n echo \\\"Created workspace: $WORKSPACE_ID\\\"\\n else\\n echo \\\"Found existing workspace: $WORKSPACE_ID\\\"\\n fi\\n\\n echo \\\"TAILOR_PLATFORM_WORKSPACE_ID=$WORKSPACE_ID\\\" >> \\\"$GITHUB_ENV\\\"\\n\\n - name: Generate types\\n run: pnpm generate\\n\\n - name: Deploy\\n # Runs the \\\"deploy\\\" script from package.json (tailor-sdk apply --yes)\\n run: pnpm run deploy -- --yes\\n\\n - name: Show application info\\n run: pnpm tailor-sdk show -j -w \\\"$TAILOR_PLATFORM_WORKSPACE_ID\\\"\\n\";","import deployTemplate from \"./deploy.workflow.yml\";\n\ntype DeployParams = {\n workspaceName: string;\n workspaceRegion: string;\n organizationId: string;\n folderId: string;\n workingDirectory?: string;\n};\n\n/**\n * Render the deploy workflow YAML.\n *\n * Targets single-application scaffolds (those with `generate` and `deploy` scripts).\n * Multi-application projects (e.g. chained `deploy:*` scripts) need manual workflow customization.\n * @param params - Workspace and deployment configuration\n * @returns Workflow YAML content\n */\nexport function renderDeploy(params: DeployParams): string {\n const { workspaceName, workspaceRegion, organizationId, folderId, workingDirectory } = params;\n\n // --dir sets working-directory for all run steps. Assumes the target directory\n // is a pnpm workspace member with its own package.json (standard monorepo layout).\n const defaultsBlock = workingDirectory\n ? `\\ndefaults:\\n run:\\n working-directory: ${workingDirectory}\\n`\n : \"\";\n\n return deployTemplate\n .replaceAll(\"__WORKSPACE_NAME__\", () => workspaceName)\n .replace(\"__WORKSPACE_REGION__\", () => workspaceRegion)\n .replace(\"__ORGANIZATION_ID__\", () => organizationId)\n .replace(\"__FOLDER_ID__\", () => folderId)\n .replace(\"# __DEFAULTS_BLOCK__\\n\", () => defaultsBlock);\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"pathe\";\nimport { logBetaWarning } from \"@/cli/shared/beta\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { fetchTailorTokenYaml, installNodeYaml, renderDeploy } from \"./templates\";\n\nexport type SetupGitHubOptions = {\n workspaceName: string;\n workspaceRegion: string;\n organizationId: string;\n folderId: string;\n dir: string;\n outputDir: string;\n};\n\ntype GeneratedFile = {\n path: string;\n content: string;\n};\n\ntype WriteResult = {\n written: string[];\n skipped: string[];\n};\n\n/**\n * Build the list of GitHub Actions files to generate.\n * @param options - Setup options including workspace config and output directory\n * @returns Array of files with paths and rendered content\n */\nexport function buildFiles(options: SetupGitHubOptions): GeneratedFile[] {\n const githubDir = path.join(options.outputDir, \".github\");\n\n return [\n {\n path: path.join(githubDir, \"actions/fetch-tailor-token/action.yml\"),\n content: fetchTailorTokenYaml,\n },\n {\n path: path.join(githubDir, \"actions/install-node/action.yml\"),\n content: installNodeYaml,\n },\n {\n path: path.join(githubDir, `workflows/deploy-${options.workspaceName}.yml`),\n content: renderDeploy({\n workspaceName: options.workspaceName,\n workspaceRegion: options.workspaceRegion,\n organizationId: options.organizationId,\n folderId: options.folderId,\n workingDirectory: options.dir !== \".\" ? options.dir : undefined,\n }),\n },\n ];\n}\n\n/**\n * Write files to disk, skipping any that already exist.\n * @param files - Files to write\n * @returns Result with lists of written and skipped file paths\n */\nexport function writeFiles(files: GeneratedFile[]): WriteResult {\n const written: string[] = [];\n const skipped: string[] = [];\n\n for (const file of files) {\n if (fs.existsSync(file.path)) {\n skipped.push(file.path);\n continue;\n }\n fs.mkdirSync(path.dirname(file.path), { recursive: true });\n fs.writeFileSync(file.path, file.content);\n written.push(file.path);\n }\n\n return { written, skipped };\n}\n\n/**\n * Generate GitHub Actions workflow files and print next steps.\n * @param options - Setup options including workspace config and output directory\n */\nexport function setupGitHub(options: SetupGitHubOptions): void {\n logBetaWarning(\"setup github\");\n\n const files = buildFiles(options);\n const result = writeFiles(files);\n\n for (const filePath of result.written) {\n const relativePath = path.relative(options.outputDir, filePath);\n logger.success(`Generated ${styles.path(relativePath)}`);\n }\n\n for (const filePath of result.skipped) {\n const relativePath = path.relative(options.outputDir, filePath);\n logger.warn(`Skipped ${styles.path(relativePath)} (already exists)`);\n }\n\n logger.newline();\n logger.info(\"Next steps - set GitHub secrets:\");\n logger.log(` gh secret set PLATFORM_MACHINE_USER_CLIENT_ID`);\n logger.log(` gh secret set PLATFORM_MACHINE_USER_CLIENT_SECRET`);\n}\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { setupGitHub } from \"./github\";\n\nexport const githubCommand = defineAppCommand({\n name: \"github\",\n description: \"Generate GitHub Actions workflow for deployment. (beta)\",\n args: z\n .object({\n \"workspace-name\": arg(z.string(), {\n alias: \"n\",\n description: \"Workspace name\",\n }),\n \"workspace-region\": arg(z.string(), {\n alias: \"r\",\n description: \"Workspace region\",\n }),\n // Required here because the generated workflow uses these for workspace creation.\n // Could be made optional in the future if we add conditional template rendering.\n \"organization-id\": arg(z.string(), {\n alias: \"o\",\n description: \"Organization ID\",\n }),\n \"folder-id\": arg(z.string(), {\n alias: \"f\",\n description: \"Folder ID\",\n }),\n dir: arg(z.string().default(\".\"), {\n alias: \"d\",\n description: \"App directory (for monorepo setups)\",\n }),\n })\n .strict(),\n run: (args) => {\n setupGitHub({\n workspaceName: args[\"workspace-name\"],\n workspaceRegion: args[\"workspace-region\"],\n organizationId: args[\"organization-id\"],\n folderId: args[\"folder-id\"],\n dir: args.dir,\n outputDir: process.cwd(),\n });\n },\n});\n","import { defineCommand } from \"politty\";\nimport { githubCommand } from \"./github\";\n\nexport const setupCommand = defineCommand({\n name: \"setup\",\n description: \"Set up project infrastructure.\",\n subCommands: {\n github: githubCommand,\n },\n});\n","import { setTimeout } from \"node:timers/promises\";\n\n/**\n * Create a simple progress reporter that writes updates to stderr.\n * @param label - Label to prefix progress output\n * @param total - Total number of steps\n * @returns Progress helpers\n */\nexport function createProgress(label: string, total: number) {\n let current = 0;\n\n const update = () => {\n current += 1;\n const percent = Math.round((current / total) * 100);\n process.stderr.write(`\\r${label} ${current}/${total} (${percent}%)`);\n };\n\n const finish = () => {\n process.stderr.write(\"\\n\");\n };\n\n return { update, finish };\n}\n\n/**\n * Wrap a promise with a timeout, rejecting if the timeout elapses first.\n * @template T\n * @param p - Promise to await\n * @param ms - Timeout in milliseconds\n * @param message - Error message on timeout\n * @returns Result of the original promise if it completes in time\n */\nexport async function withTimeout<T>(p: Promise<T>, ms: number, message: string): Promise<T> {\n return await Promise.race([\n p,\n setTimeout(ms).then(() => {\n throw new Error(message);\n }),\n ]);\n}\n","import * as fs from \"fs\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport { lookup as mimeLookup } from \"mime-types\";\nimport pLimit from \"p-limit\";\nimport * as path from \"pathe\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient, type OperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { createProgress, withTimeout } from \"@/cli/shared/progress\";\nimport type { MessageInitShape } from \"@bufbuild/protobuf\";\nimport type { UploadFileRequestSchema } from \"@tailor-proto/tailor/v1/staticwebsite_pb\";\n\nconst CHUNK_SIZE = 64 * 1024; // 64KB\nconst IGNORED_FILES = new Set([\".DS_Store\", \"thumbs.db\", \"desktop.ini\"]);\nfunction shouldIgnoreFile(filePath: string) {\n const fileName = path.basename(filePath).toLowerCase();\n return IGNORED_FILES.has(fileName);\n}\n\nexport type DeployResult = {\n url: string;\n skippedFiles: string[];\n};\n\n/**\n * Deploy a static website by creating a deployment, uploading files, and publishing it.\n * @param client - Operator client instance\n * @param workspaceId - Workspace ID\n * @param name - Static website name\n * @param distDir - Directory containing static site files\n * @param showProgress - Whether to show upload progress\n * @returns Deployment result with URL and skipped files\n */\nexport async function deployStaticWebsite(\n client: OperatorClient,\n workspaceId: string,\n name: string,\n distDir: string,\n showProgress: boolean = true,\n): Promise<DeployResult> {\n const { deploymentId } = await client.createDeployment({\n workspaceId,\n name,\n });\n\n if (!deploymentId) {\n throw new Error(\"createDeployment returned empty deploymentId\");\n }\n\n const skippedFiles = await uploadDirectory(\n client,\n workspaceId,\n deploymentId,\n distDir,\n showProgress,\n );\n\n const { url } = await client.publishDeployment({\n workspaceId,\n deploymentId,\n });\n\n if (!url) {\n throw new Error(\"publishDeployment returned empty url\");\n }\n\n return { url, skippedFiles };\n}\n\nasync function uploadDirectory(\n client: OperatorClient,\n workspaceId: string,\n deploymentId: string,\n rootDir: string,\n showProgress: boolean,\n): Promise<string[]> {\n const files = await collectFiles(rootDir);\n if (files.length === 0) {\n logger.warn(`No files found under ${rootDir}`);\n return [];\n }\n\n const concurrency = 5;\n const limit = pLimit(concurrency);\n\n const total = files.length;\n const progress = showProgress ? createProgress(\"Uploading files\", total) : undefined;\n const skippedFiles: string[] = [];\n\n await Promise.all(\n files.map((relativePath) =>\n limit(async () => {\n await uploadSingleFile(\n client,\n workspaceId,\n deploymentId,\n rootDir,\n relativePath,\n skippedFiles,\n );\n if (progress) {\n progress.update();\n }\n }),\n ),\n );\n\n if (progress) {\n progress.finish();\n }\n\n return skippedFiles;\n}\n\n/**\n * Recursively collect all deployable files under the given directory.\n * @param rootDir - Root directory to scan\n * @param currentDir - Current relative directory (for recursion)\n * @returns List of file paths relative to rootDir\n */\nasync function collectFiles(rootDir: string, currentDir = \"\"): Promise<string[]> {\n const dirPath = path.join(rootDir, currentDir);\n\n const entries = await fs.promises.readdir(dirPath, {\n withFileTypes: true,\n });\n const files: string[] = [];\n\n for (const entry of entries) {\n const rel = path.join(currentDir, entry.name);\n if (entry.isDirectory()) {\n const sub = await collectFiles(rootDir, rel);\n files.push(...sub);\n } else if (entry.isFile() && !entry.isSymbolicLink() && !shouldIgnoreFile(rel)) {\n files.push(rel);\n }\n }\n\n return files;\n}\n\nasync function uploadSingleFile(\n client: OperatorClient,\n workspaceId: string,\n deploymentId: string,\n rootDir: string,\n filePath: string,\n skippedFiles: string[],\n): Promise<void> {\n const absPath = path.join(rootDir, filePath);\n\n const mime = mimeLookup(filePath);\n\n if (!mime) {\n skippedFiles.push(`${filePath} (unsupported content type; no MIME mapping found)`);\n return;\n }\n\n const contentType = mime;\n\n const readStream = fs.createReadStream(absPath, {\n highWaterMark: CHUNK_SIZE,\n });\n\n async function* requestStream(): AsyncIterable<MessageInitShape<typeof UploadFileRequestSchema>> {\n yield {\n payload: {\n case: \"initialMetadata\",\n value: {\n workspaceId,\n deploymentId,\n filePath,\n contentType,\n },\n },\n };\n for await (const chunk of readStream) {\n yield {\n payload: {\n case: \"chunkData\",\n value: chunk as Buffer,\n },\n };\n }\n }\n\n async function uploadWithLogging() {\n try {\n await client.uploadFile(requestStream());\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.InvalidArgument) {\n skippedFiles.push(`${filePath} (server rejected file as invalid: ${error.message})`);\n return;\n }\n // For non-validation errors, fail the deployment as before.\n throw error;\n }\n }\n\n await withTimeout(\n uploadWithLogging(),\n // 2 minutes per file\n 2 * 60_000,\n `Upload timed out for \"${filePath}\"`,\n );\n}\n\n/**\n * Log skipped files after a deployment, including reasons for skipping.\n * @param skippedFiles - List of skipped file descriptions\n */\nexport function logSkippedFiles(skippedFiles: string[]) {\n if (skippedFiles.length === 0) {\n return;\n }\n logger.warn(\n \"Deployment completed, but some files failed to upload. These files may have unsupported content types or other validation issues. Please review the list below:\",\n );\n for (const file of skippedFiles) {\n logger.log(` - ${file}`);\n }\n}\n\nexport const deployCommand = defineAppCommand({\n name: \"deploy\",\n description: \"Deploy a static website from a local build directory.\",\n args: z\n .object({\n ...workspaceArgs,\n name: arg(z.string(), {\n alias: \"n\",\n description: \"Static website name\",\n }),\n dir: arg(z.string(), {\n alias: \"d\",\n description: \"Path to the static website files\",\n completion: { type: \"directory\" },\n }),\n })\n .strict(),\n run: async (args) => {\n logger.info(`Deploying static website \"${args.name}\" from directory: ${args.dir}`);\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n\n const name = args.name;\n const dir = path.resolve(process.cwd(), args.dir);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) {\n throw new Error(`Directory not found or not a directory: ${dir}`);\n }\n\n const { url, skippedFiles } = await withTimeout(\n deployStaticWebsite(client, workspaceId, name, dir, !args.json),\n // 10 minutes\n 10 * 60_000,\n \"Deployment timed out after 10 minutes.\",\n );\n\n if (args.json) {\n logger.out({ name, workspaceId, url, skippedFiles });\n } else {\n logger.success(`Static website \"${name}\" deployed successfully. URL: ${url}`);\n logSkippedFiles(skippedFiles);\n }\n },\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const getCommand = defineAppCommand({\n name: \"get\",\n description: \"Get details of a specific static website.\",\n args: z\n .object({\n ...workspaceArgs,\n name: arg(z.string(), {\n positional: true,\n description: \"Static website name\",\n }),\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n const notFoundErrorMessage = `Static website \"${args.name}\" not found.`;\n\n try {\n const { staticwebsite } = await client.getStaticWebsite({\n workspaceId,\n name: args.name,\n });\n\n if (!staticwebsite) {\n throw new Error(notFoundErrorMessage);\n }\n\n const info = {\n workspaceId,\n name: staticwebsite.name,\n description: staticwebsite.description,\n url: staticwebsite.url,\n allowedIpAddresses: args.json\n ? staticwebsite.allowedIpAddresses\n : staticwebsite.allowedIpAddresses.join(\"\\n\"),\n };\n\n logger.out(info);\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(notFoundErrorMessage);\n }\n throw error;\n }\n },\n});\n","import { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport interface StaticWebsiteInfo {\n workspaceId: string;\n name: string;\n description: string;\n url: string;\n allowedIpAddresses: string[];\n}\n\ntype StaticWebsiteListOptions = {\n workspaceId?: string;\n profile?: string;\n};\n\n/**\n * List static websites in the workspace.\n * @param options - Static website listing options\n * @returns List of static websites\n */\nasync function listStaticWebsites(\n options?: StaticWebsiteListOptions,\n): Promise<StaticWebsiteInfo[]> {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options?.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options?.workspaceId,\n profile: options?.profile,\n });\n\n const websites = await fetchAll(async (pageToken, maxPageSize) => {\n const { staticwebsites, nextPageToken } = await client.listStaticWebsites({\n workspaceId,\n pageToken,\n pageSize: maxPageSize,\n });\n return [staticwebsites, nextPageToken];\n });\n\n return websites.map((site) => ({\n workspaceId,\n name: site.name,\n description: site.description,\n url: site.url ?? \"\",\n allowedIpAddresses: site.allowedIpAddresses,\n }));\n}\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List all static websites in a workspace.\",\n args: z\n .object({\n ...workspaceArgs,\n })\n .strict(),\n run: async (args) => {\n const websites = await listStaticWebsites({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n const formatted = args.json\n ? websites\n : websites.map(({ allowedIpAddresses, ...rest }) => {\n if (allowedIpAddresses.length === 0) {\n return {\n ...rest,\n allowedIpAddresses: \"No allowed IP addresses\",\n };\n }\n\n const count = allowedIpAddresses.length;\n const label = count === 1 ? \"1 IP address\" : `${count} IP addresses`;\n\n return {\n ...rest,\n allowedIpAddresses: label,\n };\n });\n\n logger.out(formatted);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { deployCommand } from \"./deploy\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\n\nexport const staticwebsiteCommand = defineCommand({\n name: \"staticwebsite\",\n description: \"Manage static websites in your workspace.\",\n subCommands: {\n deploy: deployCommand,\n get: getCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport * as path from \"pathe\";\n\ninterface CliPackageJson {\n bin?: Record<string, string>;\n}\n\ntype ResolveCliBinOptions = {\n packageName: string;\n binName: string;\n};\n\n/**\n * Resolve a CLI binary path from the SDK's dependencies.\n * @param options - Resolution options for locating the CLI binary.\n * @returns Absolute path to the CLI binary entry.\n */\nexport function resolveCliBinPath(options: ResolveCliBinOptions): string {\n const { packageName, binName } = options;\n\n // Resolve from SDK's dependencies instead of user's project\n const requireFromSdk = createRequire(import.meta.url);\n let pkgJsonPath: string;\n try {\n pkgJsonPath = requireFromSdk.resolve(`${packageName}/package.json`);\n } catch {\n throw new Error(`Failed to resolve \\`${packageName}\\`.`);\n }\n\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf8\")) as CliPackageJson;\n const binRelativePath = pkgJson.bin?.[binName];\n if (!binRelativePath) {\n throw new Error(`\\`${packageName}\\` does not expose a \\`${binName}\\` binary entry.`);\n }\n\n return path.resolve(path.dirname(pkgJsonPath), binRelativePath);\n}\n","import * as fs from \"node:fs\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport * as path from \"pathe\";\nimport { fetchAll } from \"@/cli/shared/client\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type {\n TblsColumn,\n TblsConstraint,\n TblsEnum,\n TblsRelation,\n TblsSchema,\n TblsTable,\n} from \"./types\";\nimport type { OperatorClient } from \"@/cli/shared/client\";\nimport type {\n TailorDBType as TailorDBProtoType,\n TailorDBType_FieldConfig,\n} from \"@tailor-proto/tailor/v1/tailordb_resource_pb\";\n\nexport interface TailorDBSchemaOptions {\n workspaceId: string;\n namespace: string;\n client: OperatorClient;\n}\n\n/**\n * Convert TailorDB field config to tbls column definition.\n * @param fieldName - Field name\n * @param fieldConfig - TailorDB field configuration\n * @returns tbls column definition\n */\nexport function toTblsColumn(fieldName: string, fieldConfig: TailorDBType_FieldConfig): TblsColumn {\n const baseType = fieldConfig.type || \"string\";\n const type = fieldConfig.array ? `${baseType}[]` : baseType;\n\n return {\n name: fieldName,\n type,\n nullable: !fieldConfig.required,\n comment: fieldConfig.description ?? \"\",\n };\n}\n\n/**\n * Build tbls schema JSON from TailorDB types.\n * @param types - TailorDB types fetched from platform\n * @param namespace - TailorDB namespace\n * @returns tbls-compatible schema representation\n */\nexport function buildTblsSchema(types: TailorDBProtoType[], namespace: string): TblsSchema {\n const tables: TblsTable[] = [];\n const relations: TblsRelation[] = [];\n const referencedByTable: Record<string, Set<string>> = {};\n const constraintsByTable: Record<string, TblsConstraint[]> = {};\n const enumsMap: Map<string, Set<string>> = new Map();\n\n for (const type of types) {\n const tableName = type.name;\n const schema = type.schema;\n\n const columns: TblsColumn[] = [];\n const tableConstraints: TblsConstraint[] = [];\n\n // Implicit primary key column\n columns.push({\n name: \"id\",\n type: \"uuid\",\n nullable: false,\n comment: \"\",\n });\n\n tableConstraints.push({\n name: `pk_${tableName}`,\n type: \"PRIMARY KEY\",\n def: \"\",\n table: tableName,\n columns: [\"id\"],\n });\n\n if (schema) {\n // Fields -> columns\n for (const [fieldName, fieldConfig] of Object.entries(schema.fields ?? {})) {\n columns.push(toTblsColumn(fieldName, fieldConfig));\n\n // Collect enum values\n if (fieldConfig.type === \"enum\" && fieldConfig.allowedValues.length > 0) {\n const enumName = `${tableName}_${fieldName}`;\n let values = enumsMap.get(enumName);\n if (!values) {\n values = new Set<string>();\n enumsMap.set(enumName, values);\n }\n for (const value of fieldConfig.allowedValues) {\n values.add(value.value);\n }\n }\n\n // Foreign key -> relation + constraint\n if (fieldConfig.foreignKey && fieldConfig.foreignKeyType) {\n const foreignTable = fieldConfig.foreignKeyType;\n const foreignColumn = fieldConfig.foreignKeyField || \"id\";\n\n // Cardinality:\n // - child side: exactly_one if non-nullable, zero_or_one if nullable FK\n // - parent side: zero_or_more (a parent can have many children)\n const childCardinality = fieldConfig.required ? \"exactly_one\" : \"zero_or_one\";\n const parentCardinality = \"zero_or_more\";\n\n // tbls RelationJSON:\n // - table/columns: child side (FK owner)\n // - parent_table/parent_columns: referenced side\n relations.push({\n table: tableName,\n columns: [fieldName],\n parent_table: foreignTable,\n parent_columns: [foreignColumn],\n cardinality: childCardinality,\n parent_cardinality: parentCardinality,\n def: \"\",\n });\n\n tableConstraints.push({\n name: `fk_${tableName}_${fieldName}`,\n type: \"FOREIGN KEY\",\n def: \"\",\n table: tableName,\n columns: [fieldName],\n referenced_table: foreignTable,\n referenced_columns: [foreignColumn],\n });\n\n if (!referencedByTable[tableName]) {\n referencedByTable[tableName] = new Set<string>();\n }\n referencedByTable[tableName].add(foreignTable);\n }\n }\n }\n\n constraintsByTable[tableName] = tableConstraints;\n\n tables.push({\n name: tableName,\n type: \"table\",\n comment: schema?.description ?? \"\",\n columns,\n indexes: [],\n constraints: constraintsByTable[tableName] ?? [],\n triggers: [],\n def: \"\",\n referenced_tables: [],\n });\n }\n\n // Populate referenced_tables from collected relations\n for (const table of tables) {\n const referenced = referencedByTable[table.name];\n table.referenced_tables = referenced ? Array.from(referenced) : [];\n }\n\n const enums: TblsEnum[] = [];\n for (const [name, values] of enumsMap.entries()) {\n enums.push({\n name,\n values: Array.from(values),\n });\n }\n\n return {\n name: namespace,\n tables,\n relations,\n enums,\n };\n}\n\n/**\n * Export apply-applied TailorDB schema for a namespace as tbls-compatible JSON.\n * @param options - Export options\n * @returns tbls schema representation\n */\nasync function exportTailorDBSchema(options: TailorDBSchemaOptions): Promise<TblsSchema> {\n const { client, workspaceId, namespace } = options;\n\n const types = await fetchAll(async (pageToken, maxPageSize) => {\n try {\n const { tailordbTypes, nextPageToken } = await client.listTailorDBTypes({\n workspaceId,\n namespaceName: namespace,\n pageToken,\n pageSize: maxPageSize,\n });\n return [tailordbTypes, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n\n if (types.length === 0) {\n logger.warn(`No TailorDB types found in namespace \"${namespace}\". Returning empty schema.`);\n }\n\n return buildTblsSchema(types, namespace);\n}\n\nexport interface WriteSchemaOptions extends TailorDBSchemaOptions {\n outputPath: string;\n}\n\n/**\n * Writes the TailorDB schema to a file in tbls-compatible JSON format.\n * @param options - The options for writing the schema file.\n */\nexport async function writeTblsSchemaToFile(options: WriteSchemaOptions): Promise<void> {\n const schema = await exportTailorDBSchema(options);\n const json = JSON.stringify(schema, null, 2);\n\n fs.mkdirSync(path.dirname(options.outputPath), { recursive: true });\n fs.writeFileSync(options.outputPath, json, \"utf8\");\n\n const relativePath = path.relative(process.cwd(), options.outputPath);\n logger.success(`Wrote ERD schema to ${relativePath}`);\n}\n","import { logBetaWarning } from \"@/cli/shared/beta\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { loadConfig } from \"@/cli/shared/config-loader\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport type { OperatorClient } from \"@/cli/shared/client\";\nimport type { AppConfig } from \"@/types/app-config\";\n\nexport interface ErdCommandContext {\n client: OperatorClient;\n workspaceId: string;\n config: AppConfig;\n}\n\ntype ErdCommandOptions = {\n profile?: string;\n workspaceId?: string;\n config?: string;\n};\n\n/**\n * Initialize shared ERD command context.\n * @param args - CLI arguments.\n * @returns Initialized context.\n */\nexport async function initErdContext(args: ErdCommandOptions): Promise<ErdCommandContext> {\n logBetaWarning(\"tailordb erd\");\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args.workspaceId,\n profile: args.profile,\n });\n const { config } = await loadConfig(args.config);\n\n return { client, workspaceId, config };\n}\n","import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as path from \"pathe\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { deploymentArgs } from \"@/cli/shared/args\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { resolveCliBinPath } from \"@/cli/shared/resolve-cli-bin\";\nimport { writeTblsSchemaToFile } from \"./schema\";\nimport { initErdContext } from \"./utils\";\nimport type { TailorDBSchemaOptions } from \"./schema\";\nimport type { OperatorClient } from \"@/cli/shared/client\";\nimport type { AppConfig } from \"@/types/app-config\";\n\nconst DEFAULT_ERD_BASE_DIR = \".tailor-sdk/erd\";\n\n/**\n * Resolve TailorDB config and namespace.\n * @param config - Loaded Tailor SDK config.\n * @param explicitNamespace - Namespace override.\n * @returns Resolved namespace and erdSite.\n */\nfunction resolveDbConfig(\n config: AppConfig,\n explicitNamespace?: string,\n): { namespace: string; erdSite: string | undefined } {\n const namespace = explicitNamespace ?? Object.keys(config.db ?? {})[0];\n\n if (!namespace) {\n throw new Error(\n \"No TailorDB namespaces found in config. Please define db services in tailor.config.ts or pass --namespace.\",\n );\n }\n\n const dbConfig = config.db?.[namespace];\n\n if (!dbConfig || typeof dbConfig !== \"object\" || \"external\" in dbConfig) {\n throw new Error(`TailorDB namespace \"${namespace}\" not found in config.db.`);\n }\n\n return { namespace, erdSite: dbConfig.erdSite };\n}\n\ntype ResolveNamespacesOptions = {\n requireErdSite?: boolean;\n};\n\n/**\n * Get all namespaces from config.\n * @param config - Loaded Tailor SDK config.\n * @param options - Options for filtering namespaces.\n * @returns All namespaces with optional erdSite.\n */\nfunction resolveAllNamespaces(\n config: AppConfig,\n options?: ResolveNamespacesOptions,\n): Array<{ namespace: string; erdSite: string | undefined }> {\n const results: Array<{ namespace: string; erdSite: string | undefined }> = [];\n\n for (const [namespace, dbConfig] of Object.entries(config.db ?? {})) {\n if (dbConfig && !(\"external\" in dbConfig) && !(options?.requireErdSite && !dbConfig.erdSite)) {\n results.push({ namespace, erdSite: dbConfig.erdSite });\n }\n }\n\n return results;\n}\n\n/**\n * Run the liam CLI to build an ERD static site from a schema file.\n * @param schemaPath - Path to the ERD schema JSON file\n * @param cwd - Working directory where liam will run (dist is created here)\n * @returns Resolves when the build completes successfully\n */\nasync function runLiamBuild(schemaPath: string, cwd: string): Promise<void> {\n fs.mkdirSync(cwd, { recursive: true });\n\n return await new Promise<void>((resolve, reject) => {\n let liamBinPath: string;\n try {\n liamBinPath = resolveCliBinPath({\n packageName: \"@liam-hq/cli\",\n binName: \"liam\",\n });\n } catch (error) {\n logger.error(String(error));\n reject(error);\n return;\n }\n\n const child = spawn(\n process.execPath,\n [liamBinPath, \"erd\", \"build\", \"--format\", \"tbls\", \"--input\", schemaPath],\n {\n stdio: [\"pipe\", \"ignore\", \"pipe\"],\n cwd,\n },\n );\n\n let stderrOutput = \"\";\n child.stderr?.on(\"data\", (data: Buffer) => {\n stderrOutput += data.toString();\n });\n\n child.on(\"error\", (error) => {\n logger.error(\"Failed to run `@liam-hq/cli`.\");\n reject(error);\n });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n if (stderrOutput) {\n logger.error(stderrOutput);\n }\n logger.error(\n \"liam CLI exited with a non-zero code. Ensure `@liam-hq/cli erd build --format tbls --input schema.json` works in your project.\",\n );\n reject(new Error(`liam CLI exited with code ${code ?? 1}`));\n }\n });\n });\n}\n\ntype ErdBuildOptions = TailorDBSchemaOptions & {\n outputPath: string;\n erdDir: string;\n};\n\ntype ErdBuildsOptions = {\n client: OperatorClient;\n workspaceId: string;\n config: AppConfig;\n namespace?: string;\n outputDir?: string;\n requireErdSite?: boolean;\n};\n\n/**\n * Export TailorDB schema and build ERD artifacts via liam.\n * @param options - Build options.\n */\nasync function prepareErdBuild(options: ErdBuildOptions): Promise<void> {\n await writeTblsSchemaToFile(options);\n\n await runLiamBuild(options.outputPath, options.erdDir);\n\n const distDir = path.join(options.erdDir, \"dist\");\n const relativePath = path.relative(process.cwd(), distDir);\n logger.success(`Built ERD to ${relativePath}`);\n}\n\nexport interface ErdBuildResult {\n namespace: string;\n erdSite?: string;\n schemaOutputPath: string;\n distDir: string;\n erdDir: string;\n}\n\n/**\n * Prepare ERD builds for one or more namespaces.\n * @param options - Build options.\n * @returns Build results by namespace.\n */\nexport async function prepareErdBuilds(options: ErdBuildsOptions): Promise<ErdBuildResult[]> {\n const { client, workspaceId, config } = options;\n const baseDir = options.outputDir ?? path.resolve(process.cwd(), DEFAULT_ERD_BASE_DIR);\n let targets: ErdBuildResult[];\n\n if (options.namespace) {\n const { namespace, erdSite } = resolveDbConfig(config, options.namespace);\n if (options.requireErdSite && !erdSite) {\n throw new Error(\n `No erdSite configured for namespace \"${namespace}\". ` +\n `Add erdSite: \"<static-website-name>\" to db.${namespace} in tailor.config.ts.`,\n );\n }\n const erdDir = path.join(baseDir, namespace);\n targets = [\n {\n namespace,\n erdSite,\n schemaOutputPath: path.join(erdDir, \"schema.json\"),\n distDir: path.join(erdDir, \"dist\"),\n erdDir,\n },\n ];\n } else {\n const namespaces = resolveAllNamespaces(config, { requireErdSite: options.requireErdSite });\n if (namespaces.length === 0) {\n throw new Error(\n options.requireErdSite\n ? \"No namespaces with erdSite configured found. \" +\n 'Add erdSite: \"<static-website-name>\" to db.<namespace> in tailor.config.ts.'\n : \"No TailorDB namespaces found in config. Please define db services in tailor.config.ts.\",\n );\n }\n logger.info(\n `Found ${namespaces.length} namespace(s)${options.requireErdSite ? \" with erdSite configured\" : \"\"}.`,\n );\n targets = namespaces.map(({ namespace, erdSite }) => {\n const erdDir = path.join(baseDir, namespace);\n return {\n namespace,\n erdSite,\n schemaOutputPath: path.join(erdDir, \"schema.json\"),\n distDir: path.join(erdDir, \"dist\"),\n erdDir,\n };\n });\n }\n\n await Promise.all(\n targets.map((target) =>\n prepareErdBuild({\n namespace: target.namespace,\n client,\n workspaceId,\n outputPath: target.schemaOutputPath,\n erdDir: target.erdDir,\n }),\n ),\n );\n\n return targets;\n}\n\nexport const erdExportCommand = defineAppCommand({\n name: \"export\",\n description: \"Export Liam ERD dist from applied TailorDB schema.\",\n args: z\n .object({\n ...deploymentArgs,\n namespace: arg(z.string().optional(), {\n alias: \"n\",\n description:\n \"TailorDB namespace name (optional if only one namespace is defined in config)\",\n }),\n output: arg(z.string().default(DEFAULT_ERD_BASE_DIR), {\n alias: \"o\",\n description:\n \"Output directory path for tbls-compatible ERD JSON (writes to `<outputDir>/<namespace>/schema.json`)\",\n completion: { type: \"directory\" },\n }),\n })\n .strict(),\n run: async (args) => {\n const { client, workspaceId, config } = await initErdContext(args);\n const outputDir = path.resolve(process.cwd(), String(args.output));\n\n const results = await prepareErdBuilds({\n client,\n workspaceId,\n config,\n namespace: args.namespace,\n outputDir,\n });\n\n logger.newline();\n if (args.json) {\n logger.out(\n results.map((result) => ({\n namespace: result.namespace,\n distDir: result.distDir,\n schemaOutputPath: result.schemaOutputPath,\n })),\n );\n } else {\n for (const result of results) {\n logger.out(`Exported ERD for namespace \"${result.namespace}\"`);\n logger.out(` - Liam ERD dist: ${result.distDir}`);\n logger.out(` - tbls schema.json: ${result.schemaOutputPath}`);\n }\n }\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { deploymentArgs } from \"@/cli/shared/args\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { deployStaticWebsite, logSkippedFiles } from \"../../staticwebsite/deploy\";\nimport { prepareErdBuilds } from \"./export\";\nimport { initErdContext } from \"./utils\";\n\nexport const erdDeployCommand = defineAppCommand({\n name: \"deploy\",\n description: \"Deploy ERD static website for TailorDB namespace(s).\",\n args: z\n .object({\n ...deploymentArgs,\n namespace: arg(z.string().optional(), {\n alias: \"n\",\n description:\n \"TailorDB namespace name (optional - deploys all namespaces with erdSite if omitted)\",\n }),\n })\n .strict(),\n run: async (args) => {\n const { client, workspaceId, config } = await initErdContext(args);\n const buildResults = await prepareErdBuilds({\n client,\n workspaceId,\n config,\n namespace: args.namespace,\n requireErdSite: true,\n });\n\n const deployResults = await Promise.all(\n buildResults.map(async (result) => {\n if (!result.erdSite) {\n throw new Error(\n `No erdSite configured for namespace \"${result.namespace}\". ` +\n `Add erdSite: \"<static-website-name>\" to db.${result.namespace} in tailor.config.ts.`,\n );\n }\n\n if (!args.json) {\n logger.info(\n `Deploying ERD for namespace \"${result.namespace}\" to site \"${result.erdSite}\"...`,\n );\n }\n\n const { url, skippedFiles } = await deployStaticWebsite(\n client,\n workspaceId,\n result.erdSite,\n result.distDir,\n !args.json,\n );\n\n return {\n namespace: result.namespace,\n erdSite: result.erdSite,\n url,\n skippedFiles,\n };\n }),\n );\n logger.newline();\n\n if (args.json) {\n logger.out(deployResults);\n } else {\n for (const result of deployResults) {\n logSkippedFiles(result.skippedFiles);\n logger.newline();\n logger.success(`ERD site \"${result.erdSite}\" deployed successfully.`);\n logger.out(result.url);\n }\n }\n },\n});\n","import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { deploymentArgs } from \"@/cli/shared/args\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { resolveCliBinPath } from \"@/cli/shared/resolve-cli-bin\";\nimport { prepareErdBuilds, type ErdBuildResult } from \"./export\";\nimport { initErdContext } from \"./utils\";\n\nfunction formatServeCommand(namespace: string): string {\n return `tailor-sdk tailordb erd serve --namespace ${namespace}`;\n}\n\nasync function runServeDist(results: ErdBuildResult[]): Promise<void> {\n if (results.length === 0) {\n throw new Error(\"No ERD build results found.\");\n }\n\n const [primary, ...rest] = results;\n\n logger.info(`Serving ERD for namespace \"${primary.namespace}\".`);\n if (rest.length > 0) {\n const commands = rest.map((result) => ` - ${formatServeCommand(result.namespace)}`).join(\"\\n\");\n logger.warn(`Multiple namespaces found. To serve another namespace, run:\\n${commands}`);\n }\n\n fs.mkdirSync(primary.erdDir, { recursive: true });\n\n return await new Promise<void>((resolve, reject) => {\n let serveBinPath: string;\n try {\n serveBinPath = resolveCliBinPath({\n packageName: \"serve\",\n binName: \"serve\",\n });\n } catch (error) {\n logger.error(String(error));\n reject(error);\n return;\n }\n\n const child = spawn(process.execPath, [serveBinPath, \"dist\"], {\n stdio: \"inherit\",\n cwd: primary.erdDir,\n });\n\n child.on(\"error\", (error) => {\n logger.error(\"Failed to run `serve dist`.\");\n reject(error);\n });\n\n child.on(\"exit\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n logger.error(\n \"serve CLI exited with a non-zero code. Ensure `serve dist` works in your project.\",\n );\n reject(new Error(`serve CLI exited with code ${code ?? 1}`));\n }\n });\n });\n}\n\nexport const erdServeCommand = defineAppCommand({\n name: \"serve\",\n description: \"Generate and serve ERD locally (liam build + serve dist). (beta)\",\n args: z\n .object({\n ...deploymentArgs,\n namespace: arg(z.string().optional(), {\n alias: \"n\",\n description: \"TailorDB namespace name (uses first namespace in config if not specified)\",\n }),\n })\n .strict(),\n run: async (args) => {\n const { client, workspaceId, config } = await initErdContext(args);\n\n const results = await prepareErdBuilds({\n client,\n workspaceId,\n config,\n namespace: args.namespace,\n });\n\n await runServeDist(results);\n },\n});\n","import { defineCommand } from \"politty\";\nimport { erdDeployCommand } from \"./deploy\";\nimport { erdExportCommand } from \"./export\";\nimport { erdServeCommand } from \"./serve\";\n\nexport const erdCommand = defineCommand({\n name: \"erd\",\n description: \"Generate ERD artifacts for TailorDB namespaces using Liam ERD. (beta)\",\n subCommands: {\n export: erdExportCommand,\n serve: erdServeCommand,\n deploy: erdDeployCommand,\n },\n});\n","import * as path from \"pathe\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { trnPrefix } from \"@/cli/commands/apply/label\";\nimport { confirmationArgs, deploymentArgs } from \"@/cli/shared/args\";\nimport { logBetaWarning } from \"@/cli/shared/beta\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadConfig } from \"@/cli/shared/config-loader\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { prompt } from \"@/cli/shared/prompt\";\nimport { getNamespacesWithMigrations } from \"./config\";\nimport { formatMigrationNumber, isValidMigrationNumber } from \"./snapshot\";\nimport { parseMigrationLabelNumber } from \"./types\";\n\nexport interface SetOptions {\n configPath?: string;\n number: string;\n namespace?: string;\n yes?: boolean;\n workspaceId?: string;\n profile?: string;\n}\n\n/**\n * Set migration checkpoint for a TailorDB namespace\n * @param {SetOptions} options - Command options\n */\nasync function set(options: SetOptions): Promise<void> {\n logBetaWarning(\"tailordb migration\");\n\n // 1. Validate migration number format\n const numberStr = options.number;\n\n // Accept either 4-digit format (0001) or integer (1)\n let migrationNumber: number;\n if (isValidMigrationNumber(numberStr)) {\n // 4-digit format\n migrationNumber = parseInt(numberStr, 10);\n } else {\n // Try parsing as integer\n migrationNumber = parseInt(numberStr, 10);\n if (isNaN(migrationNumber) || migrationNumber < 0) {\n throw new Error(\n `Invalid migration number format: ${numberStr}. Expected 4-digit format (e.g., 0001) or integer (e.g., 1).`,\n );\n }\n }\n\n // 2. Load configuration\n const { config } = await loadConfig(options.configPath);\n const configDir = path.dirname(config.path);\n\n // 3. Get namespaces with migrations\n const namespacesWithMigrations = getNamespacesWithMigrations(config, configDir);\n\n if (namespacesWithMigrations.length === 0) {\n throw new Error(\"No TailorDB services with migrations configuration found\");\n }\n\n // 4. Determine target namespace\n let targetNamespace: string;\n if (options.namespace) {\n if (!namespacesWithMigrations.some((ns) => ns.namespace === options.namespace)) {\n throw new Error(\n `Namespace \"${options.namespace}\" not found or does not have migrations configured`,\n );\n }\n targetNamespace = options.namespace;\n } else if (namespacesWithMigrations.length === 1) {\n targetNamespace = namespacesWithMigrations[0].namespace;\n } else {\n throw new Error(\n `Multiple TailorDB services found. Please specify namespace with --namespace flag: ${namespacesWithMigrations.map((ns) => ns.namespace).join(\", \")}`,\n );\n }\n\n // 5. Initialize client\n const accessToken = await loadAccessToken({\n useProfile: false,\n profile: options.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options.workspaceId,\n profile: options.profile,\n });\n\n // 6. Get current migration number\n const trn = `${trnPrefix(workspaceId)}:tailordb:${targetNamespace}`;\n let currentMigration: number;\n try {\n const { metadata } = await client.getMetadata({ trn });\n const label = metadata?.labels?.[\"sdk-migration\"];\n currentMigration = label ? (parseMigrationLabelNumber(label) ?? 0) : 0;\n } catch {\n currentMigration = 0;\n }\n\n // 7. Display warning and confirmation\n logger.newline();\n logger.warn(\"This operation will change the migration checkpoint.\");\n logger.log(`Namespace: ${styles.bold(targetNamespace)}`);\n logger.log(`Current migration: ${styles.bold(formatMigrationNumber(currentMigration))}`);\n logger.log(`New migration: ${styles.bold(formatMigrationNumber(migrationNumber))}`);\n logger.newline();\n\n if (migrationNumber < currentMigration) {\n logger.warn(\n `Setting migration number backwards (${formatMigrationNumber(currentMigration)} → ${formatMigrationNumber(migrationNumber)}) will cause previous migrations to be re-executed on next apply.`,\n );\n logger.newline();\n } else if (migrationNumber > currentMigration) {\n logger.warn(\n `Setting migration number forwards (${formatMigrationNumber(currentMigration)} → ${formatMigrationNumber(migrationNumber)}) will skip migrations ${formatMigrationNumber(currentMigration + 1)} to ${formatMigrationNumber(migrationNumber)}.`,\n );\n logger.newline();\n }\n\n // 8. Confirmation prompt (unless --yes flag)\n if (!options.yes) {\n const confirmation = await prompt.confirm({\n message: \"Continue with migration checkpoint update?\",\n default: false,\n });\n\n if (!confirmation) {\n logger.info(\"Operation cancelled.\");\n return;\n }\n logger.newline();\n }\n\n // 9. Update migration label\n const { metadata } = await client.getMetadata({ trn });\n const existingLabels = metadata?.labels ?? {};\n\n await client.setMetadata({\n trn,\n labels: {\n ...existingLabels,\n \"sdk-migration\": `m${formatMigrationNumber(migrationNumber)}`,\n },\n });\n\n logger.success(\n `Migration checkpoint set to ${styles.bold(formatMigrationNumber(migrationNumber))} for namespace ${styles.bold(targetNamespace)}`,\n );\n}\n\nexport const setCommand = defineAppCommand({\n name: \"set\",\n description: \"Set migration checkpoint to a specific number.\",\n args: z\n .object({\n ...deploymentArgs,\n ...confirmationArgs,\n number: arg(z.string(), {\n positional: true,\n description: \"Migration number to set (e.g., 0001 or 1)\",\n }),\n namespace: arg(z.string().optional(), {\n alias: \"n\",\n description: \"Target TailorDB namespace (required if multiple namespaces exist)\",\n }),\n })\n .strict(),\n run: async (args) => {\n await set({\n configPath: args.config,\n number: args.number,\n namespace: args.namespace,\n yes: args.yes,\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n },\n});\n","import * as fs from \"node:fs\";\nimport * as path from \"pathe\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { trnPrefix } from \"@/cli/commands/apply/label\";\nimport { deploymentArgs } from \"@/cli/shared/args\";\nimport { logBetaWarning } from \"@/cli/shared/beta\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadConfig } from \"@/cli/shared/config-loader\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { getNamespacesWithMigrations } from \"./config\";\nimport {\n getMigrationFiles,\n loadDiff,\n getMigrationFilePath,\n formatMigrationNumber,\n} from \"./snapshot\";\nimport { parseMigrationLabelNumber } from \"./types\";\n\nexport interface StatusOptions {\n configPath?: string;\n namespace?: string;\n workspaceId?: string;\n profile?: string;\n}\n\n/**\n * Show migration status for TailorDB namespaces\n * @param {StatusOptions} options - Command options\n */\nasync function status(options: StatusOptions): Promise<void> {\n logBetaWarning(\"tailordb migration\");\n\n // 1. Load configuration\n const { config } = await loadConfig(options.configPath);\n const configDir = path.dirname(config.path);\n\n // 2. Get namespaces with migrations\n const namespacesWithMigrations = getNamespacesWithMigrations(config, configDir);\n\n if (namespacesWithMigrations.length === 0) {\n throw new Error(\"No TailorDB services with migrations configuration found\");\n }\n\n // 3. Filter by namespace if specified\n const targetNamespaces = options.namespace\n ? namespacesWithMigrations.filter((ns) => ns.namespace === options.namespace)\n : namespacesWithMigrations;\n\n if (targetNamespaces.length === 0) {\n throw new Error(\n `Namespace \"${options.namespace}\" not found or does not have migrations configured`,\n );\n }\n\n // 4. Initialize client\n const accessToken = await loadAccessToken({\n useProfile: false,\n profile: options.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options.workspaceId,\n profile: options.profile,\n });\n\n // 5. Display status for each namespace\n for (const { namespace, migrationsDir } of targetNamespaces) {\n // Get current migration number\n const trn = `${trnPrefix(workspaceId)}:tailordb:${namespace}`;\n let currentMigration: number;\n try {\n const { metadata } = await client.getMetadata({ trn });\n const label = metadata?.labels?.[\"sdk-migration\"];\n currentMigration = label ? (parseMigrationLabelNumber(label) ?? 0) : 0;\n } catch {\n currentMigration = 0;\n }\n\n // Get available migrations\n const migrationFiles = getMigrationFiles(migrationsDir);\n const availableNumbers = migrationFiles\n .map((f) => f.number)\n .filter((n, i, arr) => arr.indexOf(n) === i) // deduplicate\n .sort((a, b) => a - b);\n const pendingNumbers = availableNumbers.filter((n) => n > currentMigration);\n\n // Display\n logger.newline();\n logger.info(`Namespace: ${styles.bold(namespace)}`);\n logger.log(` Current migration: ${styles.bold(formatMigrationNumber(currentMigration))}`);\n\n if (pendingNumbers.length > 0) {\n logger.log(\" Pending migrations:\");\n for (const num of pendingNumbers) {\n const diffPath = getMigrationFilePath(migrationsDir, num, \"diff\");\n let description: string | undefined;\n\n if (fs.existsSync(diffPath)) {\n try {\n const diff = loadDiff(diffPath);\n description = diff.description;\n } catch {\n // Ignore errors loading diff\n }\n }\n\n if (description) {\n logger.log(` - ${formatMigrationNumber(num)}: ${description}`);\n } else {\n logger.log(` - ${formatMigrationNumber(num)}`);\n }\n }\n } else {\n logger.log(\" Pending migrations: (none)\");\n }\n }\n\n logger.newline();\n}\n\nexport const statusCommand = defineAppCommand({\n name: \"status\",\n description:\n \"Show the current migration status for TailorDB namespaces, including applied and pending migrations.\",\n args: z\n .object({\n ...deploymentArgs,\n namespace: arg(z.string().optional(), {\n alias: \"n\",\n description: \"Target TailorDB namespace (shows all namespaces if not specified)\",\n }),\n })\n .strict(),\n run: async (args) => {\n await status({\n configPath: args.config,\n namespace: args.namespace,\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n },\n});\n","/**\n * TailorDB migration command\n *\n * Subcommands:\n * - generate: Generate migration files from schema differences\n * - set: Set migration checkpoint to a specific number\n * - status: Show migration status for TailorDB namespaces\n */\n\nimport { defineCommand } from \"politty\";\nimport { generateCommand } from \"./generate\";\nimport { setCommand } from \"./set\";\nimport { statusCommand } from \"./status\";\n\nexport const migrationCommand = defineCommand({\n name: \"migration\",\n description: \"Manage TailorDB schema migrations.\",\n subCommands: {\n generate: generateCommand,\n set: setCommand,\n status: statusCommand,\n },\n});\n\nexport { generateCommand } from \"./generate\";\nexport type { GenerateOptions } from \"./generate\";\nexport { setCommand } from \"./set\";\nexport type { SetOptions } from \"./set\";\nexport { statusCommand } from \"./status\";\nexport type { StatusOptions } from \"./status\";\n","import { defineCommand } from \"politty\";\nimport { erdCommand } from \"./erd\";\nimport { migrationCommand } from \"./migrate\";\nimport { truncateCommand } from \"./truncate\";\n\nexport const tailordbCommand = defineCommand({\n name: \"tailordb\",\n description: \"Manage TailorDB tables and data.\",\n subCommands: {\n erd: erdCommand,\n migration: migrationCommand,\n truncate: truncateCommand,\n },\n});\n","import ml from \"multiline-ts\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const currentCommand = defineAppCommand({\n name: \"current\",\n description: \"Show current user.\",\n args: z.object({}).strict(),\n run: async () => {\n const config = readPlatformConfig();\n\n // Check if current user is set\n if (!config.current_user) {\n throw new Error(ml`\n Current user not set.\n Please login first using 'tailor-sdk login' command to register a user.\n `);\n }\n\n // Check if user exists\n if (!config.users[config.current_user]) {\n throw new Error(ml`\n Current user '${config.current_user}' not found in registered users.\n Please login again using 'tailor-sdk login' command to register the user.\n `);\n }\n\n logger.log(config.current_user);\n },\n});\n","import ml from \"multiline-ts\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List all users.\",\n args: z.object({}).strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n const users = Object.keys(config.users);\n if (users.length === 0) {\n logger.info(ml`\n No users found.\n Please login first using 'tailor-sdk login' command to register a user.\n `);\n return;\n }\n\n if (args.json) {\n logger.out(users);\n return;\n }\n\n users.forEach((user) => {\n if (user === config.current_user) {\n logger.success(`${user} (current)`, { mode: \"plain\" });\n } else {\n logger.log(user);\n }\n });\n },\n});\n","import { PATScope } from \"@tailor-proto/tailor/v1/auth_resource_pb\";\nimport ml from \"multiline-ts\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { PersonalAccessToken } from \"@tailor-proto/tailor/v1/auth_resource_pb\";\n\nexport interface PersonalAccessTokenInfo {\n name: string;\n scopes: string[];\n}\n\nfunction patScopeToString(scope: PATScope): string {\n switch (scope) {\n case PATScope.PAT_SCOPE_READ:\n return \"read\";\n case PATScope.PAT_SCOPE_WRITE:\n return \"write\";\n default:\n return \"unknown\";\n }\n}\n\n/**\n * Transform a PersonalAccessToken into CLI-friendly info.\n * @param pat - Personal access token resource\n * @returns Flattened token info\n */\nexport function transformPersonalAccessToken(pat: PersonalAccessToken): PersonalAccessTokenInfo {\n return {\n name: pat.name,\n scopes: pat.scopes.map(patScopeToString),\n };\n}\n\n/**\n * Get PAT scopes from a write flag.\n * @param write - Whether write access is required\n * @returns Scopes to apply to the token\n */\nexport function getScopesFromWriteFlag(write: boolean): PATScope[] {\n return write ? [PATScope.PAT_SCOPE_READ, PATScope.PAT_SCOPE_WRITE] : [PATScope.PAT_SCOPE_READ];\n}\n\nfunction getScopeStringsFromWriteFlag(write: boolean): string[] {\n return write ? [\"read\", \"write\"] : [\"read\"];\n}\n\n/**\n * Print the created or updated personal access token to the logger.\n * @param name - Token name\n * @param token - Token value\n * @param write - Whether the token has write scope\n * @param action - Action performed\n */\nexport function printCreatedToken(\n name: string,\n token: string,\n write: boolean,\n action: \"created\" | \"updated\",\n): void {\n const scopes = getScopeStringsFromWriteFlag(write);\n\n if (logger.jsonMode) {\n logger.out({ name, scopes, token });\n } else {\n logger.log(ml`\n Personal access token ${action} successfully.\n\n name: ${name}\n scopes: ${scopes.join(\"/\")}\n token: ${token}\n\n Please save this token in a secure location. You won't be able to see it again.\n `);\n }\n}\n","import ml from \"multiline-ts\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig } from \"@/cli/shared/context\";\nimport { getScopesFromWriteFlag, printCreatedToken } from \"./transform\";\n\nexport const createCommand = defineAppCommand({\n name: \"create\",\n description: \"Create a new personal access token.\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Token name\",\n }),\n write: arg(z.boolean().default(false), {\n alias: \"W\",\n description: \"Grant write permission (default: read-only)\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n if (!config.current_user) {\n throw new Error(ml`\n No user logged in.\n Please login first using 'tailor-sdk login' command.\n `);\n }\n\n const token = await fetchLatestToken(config, config.current_user);\n const client = await initOperatorClient(token);\n\n const scopes = getScopesFromWriteFlag(args.write);\n const result = await client.createPersonalAccessToken({\n name: args.name,\n scopes,\n });\n\n if (!result.accessToken) {\n throw new Error(\"Failed to create personal access token\");\n }\n\n printCreatedToken(args.name, result.accessToken, args.write, \"created\");\n },\n});\n","import ml from \"multiline-ts\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const deleteCommand = defineAppCommand({\n name: \"delete\",\n description: \"Delete a personal access token.\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Token name\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n if (!config.current_user) {\n throw new Error(ml`\n No user logged in.\n Please login first using 'tailor-sdk login' command.\n `);\n }\n\n const token = await fetchLatestToken(config, config.current_user);\n const client = await initOperatorClient(token);\n\n await client.deletePersonalAccessToken({\n name: args.name,\n });\n\n logger.success(`Personal access token \"${args.name}\" deleted successfully.`);\n },\n});\n","import ml from \"multiline-ts\";\nimport { z } from \"zod\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { transformPersonalAccessToken, type PersonalAccessTokenInfo } from \"./transform\";\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List all personal access tokens.\",\n args: z.object({}).strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n if (!config.current_user) {\n throw new Error(ml`\n No user logged in.\n Please login first using 'tailor-sdk login' command.\n `);\n }\n\n const token = await fetchLatestToken(config, config.current_user);\n const client = await initOperatorClient(token);\n\n const pats = await fetchAll(async (pageToken, maxPageSize) => {\n const { personalAccessTokens, nextPageToken } = await client.listPersonalAccessTokens({\n pageToken,\n pageSize: maxPageSize,\n });\n return [personalAccessTokens, nextPageToken];\n });\n\n if (pats.length === 0 && !args.json) {\n logger.info(ml`\n No personal access tokens found.\n Please create a token using 'tailor-sdk user pat create' command.\n `);\n return;\n }\n\n const patInfos: PersonalAccessTokenInfo[] = pats.map(transformPersonalAccessToken);\n if (args.json) {\n logger.out(patInfos);\n return;\n }\n\n if (pats.length === 0) {\n return;\n }\n\n // Text format: aligned list \"name: scope1/scope2\"\n const maxNameLength = Math.max(...pats.map((pat) => pat.name.length));\n\n pats.forEach((pat) => {\n const info = transformPersonalAccessToken(pat);\n const paddedName = info.name.padStart(maxNameLength);\n logger.log(`${paddedName}: ${info.scopes.join(\"/\")}`);\n });\n },\n});\n","import ml from \"multiline-ts\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig } from \"@/cli/shared/context\";\nimport { getScopesFromWriteFlag, printCreatedToken } from \"./transform\";\n\nexport const updateCommand = defineAppCommand({\n name: \"update\",\n description: \"Update a personal access token (delete and recreate).\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Token name\",\n }),\n write: arg(z.boolean().default(false), {\n alias: \"W\",\n description: \"Grant write permission (if not specified, keeps read-only)\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n if (!config.current_user) {\n throw new Error(ml`\n No user logged in.\n Please login first using 'tailor-sdk login' command.\n `);\n }\n\n const token = await fetchLatestToken(config, config.current_user);\n const client = await initOperatorClient(token);\n\n // Delete the existing token\n await client.deletePersonalAccessToken({\n name: args.name,\n });\n\n // Create a new token with the same name\n const scopes = getScopesFromWriteFlag(args.write);\n const result = await client.createPersonalAccessToken({\n name: args.name,\n scopes,\n });\n\n if (!result.accessToken) {\n throw new Error(\"Failed to create personal access token\");\n }\n\n printCreatedToken(args.name, result.accessToken, args.write, \"updated\");\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\nimport { updateCommand } from \"./update\";\n\nexport const patCommand = defineCommand({\n name: \"pat\",\n description: \"Manage personal access tokens.\",\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n update: updateCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import ml from \"multiline-ts\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const switchCommand = defineAppCommand({\n name: \"switch\",\n description: \"Set current user.\",\n args: z\n .object({\n user: arg(z.string(), {\n positional: true,\n description: \"User email\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n // Check if user exists\n if (!config.users[args.user]) {\n throw new Error(ml`\n User \"${args.user}\" not found.\n Please login first using 'tailor-sdk login' command to register this user.\n `);\n }\n\n // Set current user\n config.current_user = args.user;\n writePlatformConfig(config);\n\n logger.success(`Current user set to \"${args.user}\" successfully.`);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { currentCommand } from \"./current\";\nimport { listCommand } from \"./list\";\nimport { patCommand } from \"./pat\";\nimport { switchCommand } from \"./switch\";\n\nexport const userCommand = defineCommand({\n name: \"user\",\n description: \"Manage Tailor Platform users.\",\n subCommands: {\n current: currentCommand,\n list: listCommand,\n pat: patCommand,\n switch: switchCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { executionsCommand } from \"./executions\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\nimport { resumeCommand } from \"./resume\";\nimport { startCommand } from \"./start\";\n\nexport const workflowCommand = defineCommand({\n name: \"workflow\",\n description: \"Manage workflows and workflow executions.\",\n subCommands: {\n list: listCommand,\n get: getCommand,\n start: startCommand,\n executions: executionsCommand,\n resume: resumeCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { healthCommand } from \"./health\";\nimport { listCommand } from \"./list\";\n\nexport const appCommand = defineCommand({\n name: \"app\",\n description: \"Manage workspace applications\",\n subCommands: {\n health: healthCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { inviteCommand } from \"./invite\";\nimport { listCommand } from \"./list\";\nimport { removeCommand } from \"./remove\";\nimport { updateCommand } from \"./update\";\n\nexport const userCommand = defineCommand({\n name: \"user\",\n description: \"Manage workspace users\",\n subCommands: {\n invite: inviteCommand,\n list: listCommand,\n remove: removeCommand,\n update: updateCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { appCommand } from \"./app\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\nimport { restoreCommand } from \"./restore\";\nimport { userCommand } from \"./user\";\n\nexport const workspaceCommand = defineCommand({\n name: \"workspace\",\n description: \"Manage Tailor Platform workspaces.\",\n subCommands: {\n app: appCommand,\n create: createCommand,\n delete: deleteCommand,\n get: getCommand,\n list: listCommand,\n restore: restoreCommand,\n user: userCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","#!/usr/bin/env node\n\nimport { register } from \"node:module\";\nimport { defineCommand, runMain } from \"politty\";\nimport { withCompletionCommand } from \"politty/completion\";\nimport { z } from \"zod\";\nimport { apiCommand } from \"./commands/api\";\nimport { applyCommand } from \"./commands/apply\";\nimport { executorCommand } from \"./commands/executor\";\nimport { functionCommand } from \"./commands/function\";\nimport { generateCommand } from \"./commands/generate\";\nimport { initCommand } from \"./commands/init\";\nimport { loginCommand } from \"./commands/login\";\nimport { logoutCommand } from \"./commands/logout\";\nimport { machineuserCommand } from \"./commands/machineuser\";\nimport { oauth2clientCommand } from \"./commands/oauth2client\";\nimport { openCommand } from \"./commands/open\";\nimport { profileCommand } from \"./commands/profile\";\nimport { removeCommand } from \"./commands/remove\";\nimport { secretCommand } from \"./commands/secret\";\nimport { setupCommand } from \"./commands/setup\";\nimport { showCommand } from \"./commands/show\";\nimport { staticwebsiteCommand } from \"./commands/staticwebsite\";\nimport { tailordbCommand } from \"./commands/tailordb\";\nimport { userCommand } from \"./commands/user\";\nimport { workflowCommand } from \"./commands/workflow\";\nimport { workspaceCommand } from \"./commands/workspace\";\nimport { queryCommand } from \"./query\";\nimport { commonArgs, isVerbose } from \"./shared/args\";\nimport { isCLIError } from \"./shared/errors\";\nimport { logger } from \"./shared/logger\";\nimport { readPackageJson } from \"./shared/package-json\";\n\nregister(\"tsx\", import.meta.url, { data: {} });\n\nconst packageJson = await readPackageJson();\nconst cliName = Object.keys(packageJson.bin ?? {})[0] || \"tailor-sdk\";\n\nexport const mainCommand = withCompletionCommand(\n defineCommand({\n name: cliName,\n description:\n packageJson.description || \"Tailor CLI for managing Tailor Platform SDK applications\",\n subCommands: {\n api: apiCommand,\n apply: applyCommand,\n executor: executorCommand,\n function: functionCommand,\n generate: generateCommand,\n init: initCommand,\n login: loginCommand,\n logout: logoutCommand,\n machineuser: machineuserCommand,\n oauth2client: oauth2clientCommand,\n open: openCommand,\n profile: profileCommand,\n query: queryCommand,\n remove: removeCommand,\n secret: secretCommand,\n setup: setupCommand,\n show: showCommand,\n staticwebsite: staticwebsiteCommand,\n tailordb: tailordbCommand,\n user: userCommand,\n workflow: workflowCommand,\n workspace: workspaceCommand,\n },\n }),\n);\n\nrunMain(mainCommand, {\n version: packageJson.version,\n globalArgs: z.object(commonArgs),\n cleanup: async ({ error }) => {\n if (error) {\n if (isCLIError(error)) {\n logger.log(error.format());\n if (isVerbose() && error.stack) {\n logger.debug(`\\nStack trace:\\n${error.stack}`);\n }\n } else if (error instanceof Error) {\n logger.error(error.message);\n if (isVerbose() && error.stack) {\n logger.debug(`\\nStack trace:\\n${error.stack}`);\n }\n } else {\n logger.error(`Unknown error: ${error}`);\n }\n }\n const { shutdownTelemetry } = await import(\"@/cli/telemetry\");\n await shutdownTelemetry();\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["listCommand","fs","fs","listCommand","listCommand","getCommand","fs","fs","listCommand","getCommand","listCommand","createCommand","deleteCommand","listCommand","updateCommand","createCommand","deleteCommand","listCommand","updateCommand","createCommand","deleteCommand","listCommand","createCommand","deleteCommand","listCommand","deployTemplate","fetchTailorTokenYaml","installNodeYaml","fs","setTimeout","mimeLookup","listCommand","listCommand","fs","fs","generateCommand","listCommand","userCommand","listCommand","listCommand","getCommand","listCommand","listCommand","updateCommand","createCommand","deleteCommand","getCommand","listCommand","removeCommand","userCommand"],"sources":["../../src/cli/commands/apply/index.ts","../../src/cli/commands/crash-report/list.ts","../../src/cli/commands/crash-report/send.ts","../../src/cli/commands/crash-report/index.ts","../../src/cli/commands/executor/index.ts","../../src/cli/commands/function/logs.ts","../../src/cli/commands/function/bundle.ts","../../src/cli/commands/function/detect.ts","../../src/cli/commands/function/test-run.ts","../../src/cli/commands/function/index.ts","../../src/cli/commands/generate/index.ts","../../src/cli/commands/init.ts","../../src/cli/commands/login.ts","../../src/cli/commands/logout.ts","../../src/cli/commands/machineuser/index.ts","../../src/cli/commands/oauth2client/index.ts","../../src/cli/commands/open.ts","../../src/cli/commands/profile/create.ts","../../src/cli/commands/profile/delete.ts","../../src/cli/commands/profile/list.ts","../../src/cli/commands/profile/update.ts","../../src/cli/commands/profile/index.ts","../../src/cli/commands/secret/args.ts","../../src/cli/commands/secret/check-vault-managed.ts","../../src/cli/commands/secret/create.ts","../../src/cli/commands/secret/delete.ts","../../src/cli/commands/secret/list.ts","../../src/cli/commands/secret/update.ts","../../src/cli/commands/secret/vault/args.ts","../../src/cli/commands/secret/vault/create.ts","../../src/cli/commands/secret/vault/delete.ts","../../src/cli/commands/secret/vault/list.ts","../../src/cli/commands/secret/vault/index.ts","../../src/cli/commands/secret/index.ts","../../src/cli/commands/setup/github/fetch-tailor-token.action.yml","../../src/cli/commands/setup/github/install-node.action.yml","../../src/cli/commands/setup/github/deploy.workflow.yml","../../src/cli/commands/setup/github/template-deploy.ts","../../src/cli/commands/setup/github/github.ts","../../src/cli/commands/setup/github/index.ts","../../src/cli/commands/setup/index.ts","../../src/cli/shared/progress.ts","../../src/cli/commands/staticwebsite/deploy.ts","../../src/cli/commands/staticwebsite/get.ts","../../src/cli/commands/staticwebsite/list.ts","../../src/cli/commands/staticwebsite/index.ts","../../src/cli/shared/resolve-cli-bin.ts","../../src/cli/commands/tailordb/erd/schema.ts","../../src/cli/commands/tailordb/erd/utils.ts","../../src/cli/commands/tailordb/erd/export.ts","../../src/cli/commands/tailordb/erd/deploy.ts","../../src/cli/commands/tailordb/erd/serve.ts","../../src/cli/commands/tailordb/erd/index.ts","../../src/cli/commands/tailordb/migrate/set.ts","../../src/cli/commands/tailordb/migrate/status.ts","../../src/cli/commands/tailordb/migrate/index.ts","../../src/cli/commands/tailordb/index.ts","../../src/cli/commands/user/current.ts","../../src/cli/commands/user/list.ts","../../src/cli/commands/user/pat/transform.ts","../../src/cli/commands/user/pat/create.ts","../../src/cli/commands/user/pat/delete.ts","../../src/cli/commands/user/pat/list.ts","../../src/cli/commands/user/pat/update.ts","../../src/cli/commands/user/pat/index.ts","../../src/cli/commands/user/switch.ts","../../src/cli/commands/user/index.ts","../../src/cli/commands/workflow/index.ts","../../src/cli/commands/workspace/app/index.ts","../../src/cli/commands/workspace/user/index.ts","../../src/cli/commands/workspace/index.ts","../../src/cli/index.ts"],"sourcesContent":["import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { apply } from \"@/cli/commands/apply/apply\";\nimport { confirmationArgs, deploymentArgs } from \"@/cli/shared/args\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\n\nexport const applyCommand = defineAppCommand({\n name: \"apply\",\n description: \"Apply Tailor configuration to deploy your application.\",\n args: z\n .object({\n ...deploymentArgs,\n ...confirmationArgs,\n \"dry-run\": arg(z.boolean().optional(), {\n alias: \"d\",\n description: \"Run the command without making any changes\",\n }),\n \"no-schema-check\": arg(z.boolean().optional(), {\n description: \"Skip schema diff check against migration snapshots\",\n }),\n \"no-cache\": arg(z.boolean().optional(), {\n description: \"Disable bundle caching for this run\",\n }),\n \"clean-cache\": arg(z.boolean().optional(), {\n description: \"Clean the bundle cache before building\",\n }),\n })\n .strict(),\n run: async (args) => {\n const { initTelemetry } = await import(\"@/cli/telemetry\");\n await initTelemetry();\n await apply({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n dryRun: args[\"dry-run\"],\n yes: args.yes,\n noSchemaCheck: args[\"no-schema-check\"],\n noCache: args[\"no-cache\"],\n cleanCache: args[\"clean-cache\"],\n });\n },\n});\n","import * as fs from \"node:fs\";\nimport { z } from \"zod\";\nimport { parseCrashReportConfig } from \"@/cli/crash-report/config\";\nimport { CRASH_LOG_EXTENSION } from \"@/cli/crash-report/writer\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List local crash report files.\",\n args: z.object({}).strict(),\n run: async () => {\n const config = parseCrashReportConfig();\n if (!config.localDir) {\n logger.info(\"Crash report directory not available.\");\n return;\n }\n\n let entries: string[];\n try {\n entries = fs.readdirSync(config.localDir);\n } catch {\n logger.info(\"No crash reports found.\");\n return;\n }\n\n const files = entries\n .filter((f) => f.endsWith(CRASH_LOG_EXTENSION))\n .sort()\n .reverse();\n\n if (files.length === 0) {\n logger.info(\"No crash reports found.\");\n return;\n }\n\n logger.info(`${files.length} crash report(s) in ${config.localDir}:`);\n for (const file of files) {\n logger.log(` ${file}`);\n }\n },\n});\n","import * as fs from \"node:fs\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { sendCrashReport } from \"@/cli/crash-report/sender\";\nimport { JSON_FOOTER_MARKER } from \"@/cli/crash-report/writer\";\nimport { userAgent } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { CrashReport } from \"@/cli/crash-report/report\";\n\nexport const sendCommand = defineAppCommand({\n name: \"send\",\n description: \"Submit a crash report to help improve the SDK.\",\n args: z\n .object({\n file: arg(z.string(), {\n description: \"Path to the crash report file\",\n required: true,\n completion: { type: \"file\", extensions: [\"log\"] },\n }),\n })\n .strict(),\n run: async (args) => {\n let content: string;\n try {\n content = fs.readFileSync(args.file, \"utf-8\");\n } catch {\n logger.error(`Crash report file not found: ${args.file}`);\n process.exit(1);\n }\n\n const report = parseCrashLogFile(content);\n if (!report) {\n logger.error(\"Failed to parse crash report file. The file may be corrupted.\");\n process.exit(1);\n }\n\n const ua = await userAgent();\n logger.info(\"Sending crash report...\");\n const success = await sendCrashReport(report, ua);\n\n if (success) {\n logger.success(\"Crash report submitted successfully. Thank you!\");\n } else {\n logger.error(\"Failed to submit crash report. The server may be unavailable.\");\n process.exit(1);\n }\n },\n});\n\n/**\n * Parse a crash log file back into a CrashReport object.\n * Reads the embedded JSON footer appended by formatCrashReport.\n * @param content - File content\n * @returns Parsed report or undefined if parsing fails\n */\nexport function parseCrashLogFile(content: string): CrashReport | undefined {\n try {\n const normalized = content.replace(/\\r\\n/g, \"\\n\");\n const marker = `\\n${JSON_FOOTER_MARKER}\\n`;\n const lastIdx = normalized.lastIndexOf(marker);\n if (lastIdx === -1) return undefined;\n const jsonLine = normalized.slice(lastIdx + marker.length).split(\"\\n\")[0];\n if (!jsonLine) return undefined;\n return JSON.parse(jsonLine) as CrashReport;\n } catch {\n return undefined;\n }\n}\n","import { defineCommand, runCommand } from \"politty\";\nimport { listCommand } from \"./list\";\nimport { sendCommand } from \"./send\";\n\nexport const crashReportCommand = defineCommand({\n name: \"crash-report\",\n description: \"Manage crash reports.\",\n subCommands: {\n send: sendCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { getCommand } from \"./get\";\nimport { jobsCommand } from \"./jobs\";\nimport { listCommand } from \"./list\";\nimport { triggerCommand } from \"./trigger\";\nimport { webhookCommand } from \"./webhook\";\n\nexport const executorCommand = defineCommand({\n name: \"executor\",\n description: \"Manage executors\",\n subCommands: {\n list: listCommand,\n get: getCommand,\n jobs: jobsCommand,\n trigger: triggerCommand,\n webhook: webhookCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport { FunctionExecution_Type } from \"@tailor-proto/tailor/v1/function_resource_pb\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { formatKeyValueTable } from \"@/cli/shared/format\";\nimport { functionExecutionStatusToString } from \"@/cli/shared/function-execution\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport type { FunctionExecution } from \"@tailor-proto/tailor/v1/function_resource_pb\";\n\ninterface FunctionExecutionListInfo {\n id: string;\n scriptName: string;\n status: string;\n type: string;\n startedAt: Date | null;\n finishedAt: Date | null;\n}\n\ninterface FunctionExecutionDetailInfo {\n id: string;\n scriptName: string;\n status: string;\n type: string;\n startedAt: Date | null;\n finishedAt: Date | null;\n logs: string;\n result: string;\n}\n\n/**\n * Convert function execution type enum to string.\n * @param type - Function execution type enum value\n * @returns Type string representation\n */\nfunction functionExecutionTypeToString(type: FunctionExecution_Type): string {\n switch (type) {\n case FunctionExecution_Type.STANDARD:\n return \"STANDARD\";\n case FunctionExecution_Type.JOB:\n return \"JOB\";\n default:\n return \"UNSPECIFIED\";\n }\n}\n\n/**\n * Transform FunctionExecution to FunctionExecutionListInfo for list display.\n * @param execution - FunctionExecution from proto\n * @returns Function execution list info\n */\nfunction toFunctionExecutionListInfo(execution: FunctionExecution): FunctionExecutionListInfo {\n return {\n id: execution.id,\n scriptName: execution.scriptName,\n status: functionExecutionStatusToString(execution.status),\n type: functionExecutionTypeToString(execution.type),\n startedAt: execution.startedAt ? timestampDate(execution.startedAt) : null,\n finishedAt: execution.finishedAt ? timestampDate(execution.finishedAt) : null,\n };\n}\n\n/**\n * Transform FunctionExecution to FunctionExecutionDetailInfo for detail display.\n * @param execution - FunctionExecution from proto\n * @returns Function execution detail info\n */\nfunction toFunctionExecutionDetailInfo(execution: FunctionExecution): FunctionExecutionDetailInfo {\n return {\n id: execution.id,\n scriptName: execution.scriptName,\n status: functionExecutionStatusToString(execution.status),\n type: functionExecutionTypeToString(execution.type),\n startedAt: execution.startedAt ? timestampDate(execution.startedAt) : null,\n finishedAt: execution.finishedAt ? timestampDate(execution.finishedAt) : null,\n logs: execution.logs,\n result: execution.result,\n };\n}\n\n/**\n * Print function execution detail in a human-readable format.\n * @param detail - Function execution detail info\n */\nfunction printFunctionExecutionDetail(detail: FunctionExecutionDetailInfo) {\n const formatDate = (date: Date | null): string => (date ? date.toISOString() : \"N/A\");\n\n const summaryData: [string, string][] = [\n [\"id\", detail.id],\n [\"scriptName\", detail.scriptName],\n [\"status\", detail.status],\n [\"type\", detail.type],\n [\"startedAt\", formatDate(detail.startedAt)],\n [\"finishedAt\", formatDate(detail.finishedAt)],\n ];\n logger.out(formatKeyValueTable(summaryData));\n\n if (detail.logs) {\n logger.log(styles.bold(\"\\nLogs:\"));\n for (const line of detail.logs.split(\"\\n\")) {\n logger.log(` ${line}`);\n }\n }\n\n if (detail.result) {\n logger.log(styles.bold(\"\\nResult:\"));\n try {\n const parsed = JSON.parse(detail.result);\n logger.log(` ${JSON.stringify(parsed, null, 2).split(\"\\n\").join(\"\\n \")}`);\n } catch {\n logger.log(` ${detail.result}`);\n }\n }\n}\n\nexport const logsCommand = defineAppCommand({\n name: \"logs\",\n description: \"List or get function execution logs.\",\n args: z\n .object({\n ...workspaceArgs,\n executionId: arg(z.string().optional(), {\n positional: true,\n description: \"Execution ID (if provided, shows details with logs)\",\n }),\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n if (args.executionId) {\n const { execution } = await client.getFunctionExecution({\n workspaceId,\n executionId: args.executionId,\n });\n\n if (!execution) {\n throw new Error(`Function execution '${args.executionId}' not found.`);\n }\n\n const detail = toFunctionExecutionDetailInfo(execution);\n\n if (args.json) {\n logger.out(detail);\n } else {\n printFunctionExecutionDetail(detail);\n }\n } else {\n const executions = await fetchAll(async (pageToken, maxPageSize) => {\n const { executions, nextPageToken } = await client.listFunctionExecutions({\n workspaceId,\n pageToken,\n pageSize: maxPageSize,\n });\n return [executions, nextPageToken];\n });\n\n const logs = executions.map(toFunctionExecutionListInfo);\n\n if (logs.length === 0 && !args.json) {\n logger.info(\"No function execution logs found.\");\n return;\n }\n logger.out(logs);\n }\n },\n});\n","/**\n * Bundler for function test-run command\n *\n * Bundles a single function file for execution via the TestExecScript API.\n * Generates an entry file based on the detected function type and bundles\n * with rolldown, following the same patterns as the existing bundlers.\n */\n\nimport * as fs from \"node:fs\";\nimport ml from \"multiline-ts\";\nimport * as path from \"pathe\";\nimport { resolveTSConfig } from \"pkg-types\";\nimport * as rolldown from \"rolldown\";\nimport { getDistDir } from \"@/cli/shared/dist-dir\";\nimport { resolveInlineSourcemap } from \"@/cli/shared/inline-sourcemap\";\nimport type { DetectedFunction } from \"./detect\";\n\n/** Machine user info resolved from config and API for bundle-time user context. */\nexport interface ResolvedMachineUser {\n /** Machine user name */\n name: string;\n /** Machine user ID (UUID from API, or nil UUID if unavailable) */\n id: string;\n /** Attributes from config (null if not found in config, e.g. external auth) */\n attributes: Record<string, unknown> | null;\n /** Attribute list from config */\n attributeList: unknown[];\n}\n\ninterface BundleForTestRunOptions {\n /** Detected function info */\n detected: DetectedFunction;\n /** Absolute path to the source file */\n sourceFile: string;\n /** Environment variables (injected into workflow job bundles) */\n env?: Record<string, string | number | boolean>;\n /** Inline sourcemap config value from defineConfig */\n inlineSourcemap?: boolean;\n /** Machine user info for injecting user context into the bundle */\n machineUser: ResolvedMachineUser;\n /** Workspace ID for user context */\n workspaceId: string;\n}\n\ninterface BundleForTestRunResult {\n /** The bundled JavaScript code */\n bundledCode: string;\n /** Name used for the script */\n scriptName: string;\n}\n\n/**\n * Bundle a function file for test-run execution via TestExecScript API.\n * @param options - Bundle options\n * @returns Bundled code and script name\n */\nexport async function bundleForTestRun(\n options: BundleForTestRunOptions,\n): Promise<BundleForTestRunResult> {\n const { detected, sourceFile, env = {}, machineUser, workspaceId } = options;\n const inlineSourcemap = resolveInlineSourcemap(options.inlineSourcemap);\n\n const outputDir = path.resolve(getDistDir(), \"test-run\");\n fs.mkdirSync(outputDir, { recursive: true });\n\n const baseName = `test-run--${detected.name}`;\n const scriptName = `${baseName}.js`;\n const entryPath = path.join(outputDir, `${baseName}.entry.js`);\n const outputPath = path.join(outputDir, scriptName);\n\n const entryContent = generateEntry(detected, sourceFile, env, machineUser, workspaceId);\n fs.writeFileSync(entryPath, entryContent);\n\n let tsconfig: string | undefined;\n try {\n tsconfig = await resolveTSConfig();\n } catch {\n tsconfig = undefined;\n }\n\n await rolldown.build(\n rolldown.defineConfig({\n input: entryPath,\n output: {\n file: outputPath,\n format: \"esm\",\n sourcemap: inlineSourcemap ? \"inline\" : true,\n minify: inlineSourcemap\n ? {\n mangle: {\n keepNames: true,\n },\n }\n : true,\n codeSplitting: false,\n },\n tsconfig,\n treeshake: {\n moduleSideEffects: false,\n annotations: true,\n unknownGlobalSideEffects: false,\n },\n logLevel: \"silent\",\n }) as rolldown.BuildOptions,\n );\n\n const bundledCode = fs.readFileSync(outputPath, \"utf-8\");\n\n return { bundledCode, scriptName };\n}\n\n/**\n * Generate entry file content based on the detected function type.\n * @param detected - Detected function info\n * @param sourceFile - Absolute path to the source file\n * @param env - Environment variables for workflow job bundles\n * @param machineUser - Resolved machine user info\n * @param workspaceId - Workspace ID\n * @returns Entry file content string\n */\nfunction generateEntry(\n detected: DetectedFunction,\n sourceFile: string,\n env: Record<string, string | number | boolean>,\n machineUser: ResolvedMachineUser,\n workspaceId: string,\n): string {\n const absoluteSourcePath = path.resolve(sourceFile);\n\n switch (detected.type) {\n case \"plain\":\n if (detected.namedMain) {\n return ml /* js */ `\n export { main } from \"${absoluteSourcePath}\";\n `;\n }\n return ml /* js */ `\n import _fn from \"${absoluteSourcePath}\";\n export { _fn as main };\n `;\n\n case \"resolver\": {\n // Same pattern as services/resolver/bundler.ts:125-152\n // In production, the operationHook injects user/env into context.\n // For test-run, we embed machine user info since there's no operationHook.\n const userExpr = buildMachineUserExpr(machineUser, workspaceId);\n return ml /* js */ `\n import _internalResolver from \"${absoluteSourcePath}\";\n import { t } from \"@tailor-platform/sdk\";\n\n const _env = ${JSON.stringify(env)};\n const _user = ${userExpr};\n\n const $tailor_resolver_body = async (context) => {\n const enrichedContext = { ...context, env: _env, user: _user };\n\n if (_internalResolver.input) {\n const result = t.object(_internalResolver.input).parse({\n value: enrichedContext.input,\n data: enrichedContext.input,\n user: enrichedContext.user,\n });\n\n if (result.issues) {\n const errorMessages = result.issues\n .map(issue => {\n const path = issue.path ? issue.path.join('.') : '';\n return path ? \\` \\${path}: \\${issue.message}\\` : issue.message;\n })\n .join('\\\\n');\n throw new Error(\\`Failed to input validation:\\\\n\\${errorMessages}\\`);\n }\n }\n\n return _internalResolver.body(enrichedContext);\n };\n\n export { $tailor_resolver_body as main };\n `;\n }\n\n case \"executor\": {\n // Same pattern as services/executor/bundler.ts:144-150\n // In production, buildExecutorArgsExpr injects actor/env into args.\n // For test-run, we embed machine user as actor.\n const actorExpr = buildMachineActorExpr(machineUser, workspaceId);\n return ml /* js */ `\n import _internalExecutor from \"${absoluteSourcePath}\";\n\n const _env = ${JSON.stringify(env)};\n const _actor = ${actorExpr};\n\n const __executor_function = async (args) => {\n return _internalExecutor.operation.body({ ...args, env: _env, actor: _actor });\n };\n\n export { __executor_function as main };\n `;\n }\n\n case \"workflow-job\": {\n // Same pattern as services/workflow/bundler.ts:286-294\n // Note: user context is not available in TestExecScript for workflow jobs.\n // The production workflow bundler's user mapping is being fixed in fix/workflow-user.\n const exportName = detected.exportName!;\n return ml /* js */ `\n import { ${exportName} } from \"${absoluteSourcePath}\";\n\n const env = ${JSON.stringify(env)};\n\n export async function main(input) {\n return await ${exportName}.body(input, { env });\n }\n `;\n }\n }\n}\n\n/**\n * Build a JSON expression for a machine user TailorUser object.\n * @param machineUser - Resolved machine user info\n * @param workspaceId - Workspace ID\n * @returns JSON string for the user expression\n */\nfunction buildMachineUserExpr(machineUser: ResolvedMachineUser, workspaceId: string): string {\n return JSON.stringify({\n id: machineUser.id,\n type: \"machine_user\",\n workspaceId,\n attributes: machineUser.attributes,\n attributeList: machineUser.attributeList,\n });\n}\n\n/**\n * Build a JSON expression for a machine user TailorActor object.\n * @param machineUser - Resolved machine user info\n * @param workspaceId - Workspace ID\n * @returns JSON string for the actor expression\n */\nfunction buildMachineActorExpr(machineUser: ResolvedMachineUser, workspaceId: string): string {\n return JSON.stringify({\n workspaceId,\n userId: machineUser.id,\n attributes: machineUser.attributes,\n attributeList: machineUser.attributeList,\n userType: \"USER_TYPE_MACHINE_USER\",\n });\n}\n","/**\n * Function type detection for test-run command\n *\n * Detects the function type (resolver, executor, workflow job, or plain function)\n * by dynamically importing the module and checking against known schemas.\n */\n\nimport { pathToFileURL } from \"node:url\";\nimport * as path from \"pathe\";\nimport { ExecutorSchema } from \"@/parser/service/executor\";\nimport { ResolverSchema } from \"@/parser/service/resolver\";\nimport { WorkflowJobSchema } from \"@/parser/service/workflow\";\n\nexport type FunctionType = \"resolver\" | \"executor\" | \"workflow-job\" | \"plain\";\n\nexport interface DetectedFunction {\n /** Detected function type */\n type: FunctionType;\n /** Function name (resolver name, executor name, job name, or filename-derived) */\n name: string;\n /** For workflow jobs: the TypeScript export name needed for bundling */\n exportName?: string;\n /** For plain functions: whether main is a named export rather than default export */\n namedMain?: boolean;\n}\n\ninterface DetectFunctionOptions {\n /** Absolute path to the function file */\n filePath: string;\n /** Workflow job name to select (matches the `name` field of createWorkflowJob) */\n jobName?: string;\n}\n\n/**\n * Detect the function type from a file by importing it and checking against schemas.\n * @param options - Detection options\n * @returns Detected function information\n */\nexport async function detectFunctionType(\n options: DetectFunctionOptions,\n): Promise<DetectedFunction> {\n const { filePath, jobName } = options;\n\n const module = await import(pathToFileURL(filePath).href);\n\n // Priority: resolver → executor → workflow job → plain function\n\n // 1. Check resolver\n const resolverResult = ResolverSchema.safeParse(module.default);\n if (resolverResult.success) {\n return { type: \"resolver\", name: resolverResult.data.name };\n }\n\n // 2. Check executor (only function/jobFunction kinds)\n const executorResult = ExecutorSchema.safeParse(module.default);\n if (executorResult.success) {\n const { operation } = executorResult.data;\n if (operation.kind === \"function\" || operation.kind === \"jobFunction\") {\n return { type: \"executor\", name: executorResult.data.name };\n }\n }\n\n // 3. Check workflow jobs (scan all named exports)\n const workflowJobResult = detectWorkflowJob(module, jobName);\n if (workflowJobResult) {\n return workflowJobResult;\n }\n\n // 4. Check plain function (default export or named export \"main\")\n if (typeof module.default === \"function\") {\n const name = deriveNameFromPath(filePath);\n return { type: \"plain\", name };\n }\n\n if (typeof module.main === \"function\") {\n const name = deriveNameFromPath(filePath);\n return { type: \"plain\", name, namedMain: true };\n }\n\n throw new Error(\n `Could not detect function type from ${filePath}.\\n` +\n \"The file must have one of:\\n\" +\n \" - A default-exported resolver (createResolver)\\n\" +\n \" - A default-exported executor (createExecutor) with function/jobFunction operation\\n\" +\n \" - A named-exported workflow job (createWorkflowJob)\\n\" +\n \" - A default-exported function\\n\" +\n ' - A named-exported \"main\" function',\n );\n}\n\n/**\n * Scan all named exports for workflow jobs.\n * If jobName is specified, find the job whose `.name` matches.\n * If not specified and exactly one job exists, use it.\n * If multiple jobs exist, throw an error with the list.\n * @param module - The imported module\n * @param jobName - Workflow job name to select\n * @returns Detected function or null if no workflow jobs found\n */\nfunction detectWorkflowJob(\n module: Record<string, unknown>,\n jobName?: string,\n): DetectedFunction | null {\n const jobs: Array<{ name: string; exportName: string }> = [];\n\n for (const [exportName, exportValue] of Object.entries(module)) {\n if (exportName === \"default\") continue;\n const result = WorkflowJobSchema.safeParse(exportValue);\n if (result.success) {\n jobs.push({ name: result.data.name, exportName });\n }\n }\n\n if (jobs.length === 0) {\n return null;\n }\n\n if (jobName) {\n const match = jobs.find((j) => j.name === jobName);\n if (!match) {\n const available = jobs.map((j) => ` - \"${j.name}\" (export: ${j.exportName})`).join(\"\\n\");\n throw new Error(`Workflow job \"${jobName}\" not found. Available jobs:\\n${available}`);\n }\n return { type: \"workflow-job\", name: match.name, exportName: match.exportName };\n }\n\n if (jobs.length === 1) {\n return { type: \"workflow-job\", name: jobs[0].name, exportName: jobs[0].exportName };\n }\n\n const available = jobs.map((j) => ` - \"${j.name}\" (export: ${j.exportName})`).join(\"\\n\");\n throw new Error(`Multiple workflow jobs found. Specify one with --name:\\n${available}`);\n}\n\n/**\n * Derive a script name from a file path (filename without extension).\n * @param filePath - Absolute path to the function file\n * @returns Filename without extension\n */\nfunction deriveNameFromPath(filePath: string): string {\n return path.basename(filePath, path.extname(filePath));\n}\n","/**\n * `tailor-sdk function test-run` command\n *\n * Bundles and executes a function on the Tailor Platform server\n * without deploying (applying) the application.\n */\n\nimport * as fs from \"node:fs\";\nimport { create } from \"@bufbuild/protobuf\";\nimport { AuthInvokerSchema } from \"@tailor-proto/tailor/v1/auth_resource_pb\";\nimport * as path from \"pathe\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient, type OperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadConfig } from \"@/cli/shared/config-loader\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { executeScript } from \"@/cli/shared/script-executor\";\nimport { bundleForTestRun, type ResolvedMachineUser } from \"./bundle\";\nimport { detectFunctionType } from \"./detect\";\n\nexport const testRunCommand = defineAppCommand({\n name: \"test-run\",\n description: \"Run a function on the Tailor Platform server without deploying.\",\n args: z.object({\n ...workspaceArgs,\n file: arg(z.string(), {\n positional: true,\n description: \"Path to the function file\",\n }),\n name: arg(z.string().optional(), {\n alias: \"n\",\n description: \"Workflow job name to run (matches the `name` field of createWorkflowJob)\",\n }),\n arg: arg(z.string().optional(), {\n alias: \"a\",\n description: \"JSON argument to pass to the function\",\n }),\n \"machine-user\": arg(z.string().optional(), {\n alias: \"m\",\n description: \"Machine user name for authentication\",\n }),\n config: arg(z.string().default(\"tailor.config.ts\"), {\n alias: \"c\",\n description: \"Path to SDK config file\",\n }),\n }),\n notes: `You can pass either a source file (\\`.ts\\`) or a pre-bundled file (\\`.js\\`).\nWhen a \\`.js\\` file is provided, detection and bundling are skipped and the file is executed as-is.\n\n> [!WARNING]\n> Workflow job \\`.trigger()\\` calls do not work in test-run mode.\n> Triggered jobs are not executed; only the target job's \\`body\\` function runs in isolation.`,\n examples: [\n {\n cmd: 'resolvers/add.ts --arg \\'{\"input\":{\"a\":1,\"b\":2}}\\'',\n desc: \"Run a resolver with input arguments\",\n },\n {\n cmd: \"workflows/sample.ts --name validate-order\",\n desc: \"Run a specific workflow job by name\",\n },\n {\n cmd: '.tailor-sdk/resolvers/add.js --arg \\'{\"input\":{\"a\":1,\"b\":2}}\\'',\n desc: \"Run a pre-bundled .js file directly\",\n },\n ],\n run: async (args) => {\n // 1. Resolve and validate file path\n const filePath = path.resolve(args.file);\n if (!fs.existsSync(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n // 2. Load config (required)\n const { config } = await loadConfig(args.config);\n\n // 3. Resolve auth, workspace, and machine user info (needed before bundling)\n const authNamespace = resolveAuthNamespace(config.auth);\n const machineUserName = resolveMachineUserName(args[\"machine-user\"], config.auth);\n\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n const machineUser = await resolveMachineUser({\n client,\n workspaceId,\n authNamespace,\n machineUserName,\n authConfig: config.auth,\n });\n\n // 4. Resolve bundled code and script name\n const relativePath = path.relative(process.cwd(), filePath);\n const isPreBundled = filePath.endsWith(\".js\");\n let bundledCode: string;\n let scriptName: string;\n let functionType: string | undefined;\n let functionName: string | undefined;\n\n if (isPreBundled) {\n // Pre-bundled .js file (e.g., from .tailor-sdk/resolvers/add.js)\n scriptName = path.basename(filePath);\n bundledCode = fs.readFileSync(filePath, \"utf-8\");\n logger.info(`Using pre-bundled script ${styles.bold(scriptName)}`);\n } else {\n // Source file: detect type and bundle\n logger.info(`Detecting function type from ${styles.path(relativePath)}`);\n\n const detected = await detectFunctionType({\n filePath,\n jobName: args.name,\n });\n\n functionType = detected.type;\n functionName = detected.name;\n logger.info(`Detected: ${styles.bold(detected.type)} ${styles.info(`\"${detected.name}\"`)}`);\n\n logger.info(\"Bundling...\");\n ({ bundledCode, scriptName } = await bundleForTestRun({\n detected,\n sourceFile: filePath,\n env: config.env ?? {},\n inlineSourcemap: config.inlineSourcemap,\n machineUser,\n workspaceId,\n }));\n logger.info(`Bundled as ${styles.bold(scriptName)}`);\n }\n\n // 5. Execute via TestExecScript\n const authInvoker = create(AuthInvokerSchema, {\n namespace: authNamespace,\n machineUserName: machineUser.name,\n });\n\n logger.info(`Executing on workspace ${styles.dim(workspaceId)}...`);\n\n const result = await executeScript({\n client,\n workspaceId,\n name: scriptName,\n code: bundledCode,\n arg: args.arg,\n invoker: authInvoker,\n });\n\n // 7. Display result\n if (args.json) {\n logger.out({\n success: result.success,\n scriptName,\n functionType,\n functionName,\n logs: result.logs,\n result: result.result,\n error: result.error,\n });\n } else {\n if (result.success) {\n logger.success(\"Execution succeeded\");\n } else {\n logger.error(\"Execution failed\");\n }\n\n if (result.logs?.trim()) {\n logger.log(styles.bold(\"\\nLogs:\"));\n for (const line of result.logs.split(\"\\n\")) {\n logger.log(` ${line}`);\n }\n }\n\n if (result.result && result.success) {\n logger.log(styles.bold(\"\\nResult:\"));\n try {\n const parsed = JSON.parse(result.result);\n logger.log(` ${JSON.stringify(parsed, null, 2).split(\"\\n\").join(\"\\n \")}`);\n } catch {\n logger.log(` ${result.result}`);\n }\n }\n\n if (result.error && !result.success) {\n logger.log(styles.bold(\"\\nError:\"));\n logger.log(` ${styles.error(result.error)}`);\n }\n }\n\n if (!result.success) {\n process.exit(1);\n }\n },\n});\n\n/**\n * Resolve auth namespace from config.\n * @param authConfig - Auth configuration from tailor.config.ts\n * @returns Resolved auth namespace\n */\nfunction resolveAuthNamespace(\n authConfig: { name: string; external?: boolean } | undefined,\n): string {\n if (authConfig?.name) {\n return authConfig.name;\n }\n throw new Error(\"Auth namespace is required. Ensure tailor.config.ts has an auth config.\");\n}\n\n/**\n * Resolve machine user name from CLI args or config. Priority: --machine-user > first key of config.auth.machineUsers\n * @param cliMachineUser - CLI --machine-user value\n * @param authConfig - Auth configuration from tailor.config.ts\n * @returns Resolved machine user name\n */\nfunction resolveMachineUserName(\n cliMachineUser: string | undefined,\n authConfig:\n | { name: string; external?: boolean; machineUsers?: Record<string, unknown> }\n | undefined,\n): string {\n if (cliMachineUser) {\n return cliMachineUser;\n }\n if (authConfig && !(\"external\" in authConfig && authConfig.external)) {\n const machineUsers = authConfig.machineUsers;\n if (machineUsers) {\n const keys = Object.keys(machineUsers);\n if (keys.length > 0) {\n return keys[0];\n }\n }\n }\n throw new Error(\n \"Machine user is required. Provide --machine-user or ensure tailor.config.ts has machine users configured.\",\n );\n}\n\ninterface ResolveMachineUserOptions {\n client: OperatorClient;\n workspaceId: string;\n authNamespace: string;\n machineUserName: string;\n authConfig:\n | { name: string; external?: boolean; machineUsers?: Record<string, unknown> }\n | undefined;\n}\n\n/**\n * Resolve full machine user info: name, id (from API), and attributes (from config).\n * @param options - Options for resolving machine user\n * @returns Resolved machine user with id, attributes, and attributeList\n */\nasync function resolveMachineUser(\n options: ResolveMachineUserOptions,\n): Promise<ResolvedMachineUser> {\n const { client, workspaceId, authNamespace, machineUserName, authConfig } = options;\n\n // Get machine user ID from the server\n let id = \"00000000-0000-0000-0000-000000000000\";\n try {\n const { machineUser } = await client.getAuthMachineUser({\n workspaceId,\n authNamespace,\n name: machineUserName,\n });\n if (machineUser?.id) {\n id = machineUser.id;\n }\n } catch {\n logger.debug(`Could not fetch machine user \"${machineUserName}\" from server, using nil UUID`);\n }\n\n // Get attributes from config\n const machineUserConfig = authConfig?.machineUsers?.[machineUserName];\n let attributes: Record<string, unknown> | null = null;\n let attributeList: unknown[] = [];\n if (machineUserConfig && typeof machineUserConfig === \"object\") {\n const cfg = machineUserConfig as {\n attributes?: Record<string, unknown>;\n attributeList?: unknown[];\n };\n attributes = cfg.attributes ?? null;\n attributeList = cfg.attributeList ?? [];\n }\n\n return { name: machineUserName, id, attributes, attributeList };\n}\n","import { defineCommand, runCommand } from \"politty\";\nimport { logsCommand } from \"./logs\";\nimport { testRunCommand } from \"./test-run\";\n\nexport const functionCommand = defineCommand({\n name: \"function\",\n description: \"Manage functions\",\n subCommands: {\n logs: logsCommand,\n \"test-run\": testRunCommand,\n },\n async run() {\n await runCommand(logsCommand, []);\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { generate } from \"@/cli/commands/generate/service\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\n\nexport const generateCommand = defineAppCommand({\n name: \"generate\",\n description: \"Generate files using Tailor configuration.\",\n args: z\n .object({\n config: arg(z.string().default(\"tailor.config.ts\"), {\n alias: \"c\",\n description: \"Path to SDK config file\",\n }),\n watch: arg(z.boolean().default(false), {\n alias: \"W\",\n description: \"Watch for type/resolver changes and regenerate\",\n }),\n })\n .strict(),\n run: async (args) => {\n const { initTelemetry } = await import(\"@/cli/telemetry\");\n await initTelemetry();\n await generate({\n configPath: args.config,\n watch: args.watch,\n });\n },\n});\n","import { spawnSync } from \"node:child_process\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { readPackageJson } from \"@/cli/shared/package-json\";\n\nconst detectPackageManager = () => {\n const availablePMs = [\"npm\", \"yarn\", \"pnpm\"];\n const userAgent = process.env.npm_config_user_agent;\n if (!userAgent) return;\n const [name] = userAgent.split(\"/\");\n if (!availablePMs.includes(name)) return;\n return name;\n};\n\nexport const initCommand = defineAppCommand({\n name: \"init\",\n description: \"Initialize a new project using create-sdk.\",\n args: z\n .object({\n name: arg(z.string().optional(), {\n positional: true,\n description: \"Project name\",\n }),\n template: arg(z.string().optional(), {\n alias: \"t\",\n description: \"Template name\",\n }),\n })\n .strict(),\n run: async (args) => {\n const packageJson = await readPackageJson();\n const version =\n packageJson.version && packageJson.version !== \"0.0.0\" ? packageJson.version : \"latest\";\n\n let packageManager = detectPackageManager();\n if (!packageManager) {\n logger.warn(\"Could not detect package manager, defaulting to npm\");\n packageManager = \"npm\";\n }\n const initArgs = [\n \"create\",\n `@tailor-platform/sdk@${version}`,\n ...(args.name ? [args.name] : []),\n ...(packageManager === \"npm\" ? [\"--\"] : []),\n ...(args.template ? [\"--template\", args.template] : []),\n ];\n logger.log(`Running: ${packageManager} ${initArgs.join(\" \")}`);\n\n spawnSync(packageManager, initArgs, { stdio: \"inherit\" });\n },\n});\n","import * as crypto from \"node:crypto\";\nimport * as http from \"node:http\";\nimport { generateCodeVerifier } from \"@badgateway/oauth2-client\";\nimport open from \"open\";\nimport { z } from \"zod\";\nimport { fetchUserInfo, initOAuth2Client } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nconst redirectPort = 8085;\nconst redirectUri = `http://localhost:${redirectPort}/callback`;\n\nfunction randomState() {\n return crypto.randomBytes(32).toString(\"base64url\");\n}\n\nconst startAuthServer = async () => {\n const client = initOAuth2Client();\n const state = randomState();\n const codeVerifier = await generateCodeVerifier();\n\n return new Promise<void>((resolve, reject) => {\n const server = http.createServer(async (req, res) => {\n try {\n if (!req.url?.startsWith(\"/callback\")) {\n throw new Error(\"Invalid callback URL\");\n }\n const tokens = await client.authorizationCode.getTokenFromCodeRedirect(\n `http://${req.headers.host}${req.url}`,\n {\n redirectUri: redirectUri,\n state,\n codeVerifier,\n },\n );\n const userInfo = await fetchUserInfo(tokens.accessToken);\n\n const pfConfig = readPlatformConfig();\n pfConfig.users = {\n ...pfConfig.users,\n [userInfo.email]: {\n access_token: tokens.accessToken,\n refresh_token: tokens.refreshToken!,\n token_expires_at: new Date(tokens.expiresAt!).toISOString(),\n },\n };\n pfConfig.current_user = userInfo.email;\n writePlatformConfig(pfConfig);\n\n res.writeHead(200, { \"Content-Type\": \"application/json\" });\n res.end(\n JSON.stringify({\n status: \"ok\",\n message: \"Successfully authenticated. Please close this window.\",\n }),\n );\n resolve();\n } catch (error) {\n res.writeHead(401);\n res.end(\"Authentication failed\");\n reject(error);\n } finally {\n // Close the server after handling one request.\n server.close();\n }\n });\n\n const timeout = setTimeout(\n () => {\n server.close();\n reject(new Error(\"Login timeout exceeded\"));\n },\n 5 * 60 * 1000,\n );\n\n server.on(\"close\", () => {\n clearTimeout(timeout);\n });\n\n server.on(\"error\", (error) => {\n reject(error);\n });\n\n server.listen(redirectPort, async () => {\n const authorizeUri = await client.authorizationCode.getAuthorizeUri({\n redirectUri,\n state,\n codeVerifier,\n });\n\n logger.info(`Opening browser for login:\\n\\n${authorizeUri}\\n`);\n try {\n await open(authorizeUri);\n } catch {\n logger.warn(\"Failed to open browser automatically. Please open the URL above manually.\");\n }\n });\n });\n};\n\nexport const loginCommand = defineAppCommand({\n name: \"login\",\n description: \"Login to Tailor Platform.\",\n args: z.object({}).strict(),\n run: async () => {\n await startAuthServer();\n logger.success(\"Successfully logged in to Tailor Platform.\");\n },\n});\n","import { z } from \"zod\";\nimport { initOAuth2Client } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const logoutCommand = defineAppCommand({\n name: \"logout\",\n description: \"Logout from Tailor Platform.\",\n args: z.object({}).strict(),\n run: async () => {\n const pfConfig = readPlatformConfig();\n const tokens = pfConfig.current_user ? pfConfig.users[pfConfig.current_user] : undefined;\n if (!tokens) {\n logger.info(\"You are not logged in.\");\n return;\n }\n\n const client = initOAuth2Client();\n client.revoke(\n {\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token,\n expiresAt: Date.parse(tokens.token_expires_at),\n },\n \"refresh_token\",\n );\n\n delete pfConfig.users[pfConfig.current_user!];\n pfConfig.current_user = null;\n writePlatformConfig(pfConfig);\n logger.success(\"Successfully logged out from Tailor Platform.\");\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { listCommand } from \"./list\";\nimport { tokenCommand } from \"./token\";\n\nexport const machineuserCommand = defineCommand({\n name: \"machineuser\",\n description: \"Manage machine users in your Tailor Platform application.\",\n subCommands: {\n list: listCommand,\n token: tokenCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\n\nexport const oauth2clientCommand = defineCommand({\n name: \"oauth2client\",\n description: \"Manage OAuth2 clients in your Tailor Platform application.\",\n subCommands: {\n get: getCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import open from \"open\";\nimport { z } from \"zod\";\nimport { deploymentArgs } from \"@/cli/shared/args\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadConfig } from \"@/cli/shared/config-loader\";\nimport { loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nconst consoleBaseUrl = \"https://console.tailor.tech\";\n\nexport const openCommand = defineAppCommand({\n name: \"open\",\n description: \"Open Tailor Platform Console.\",\n args: z\n .object({\n ...deploymentArgs,\n })\n .strict(),\n run: async (args) => {\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n const { config } = await loadConfig(args.config);\n const applicationName = config.name;\n const consolePath = `/workspaces/${workspaceId}/applications/${encodeURIComponent(applicationName)}/overview`;\n const consoleUrl = new URL(consolePath, consoleBaseUrl).toString();\n\n logger.info(\"Opening Tailor Platform Console...\");\n\n try {\n await open(consoleUrl);\n logger.out(`Console URL: ${consoleUrl}`);\n logger.out(`Workspace ID: ${workspaceId}`);\n logger.out(`Application Name: ${applicationName}`);\n } catch {\n logger.warn(\n `Failed to open browser automatically. Please open this URL manually:\\n${consoleUrl}`,\n );\n }\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const createCommand = defineAppCommand({\n name: \"create\",\n description: \"Create a new profile.\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Profile name\",\n }),\n user: arg(z.string(), {\n alias: \"u\",\n description: \"User email\",\n }),\n \"workspace-id\": arg(z.string(), {\n alias: \"w\",\n description: \"Workspace ID\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n // Check if profile already exists\n if (config.profiles[args.name]) {\n throw new Error(`Profile \"${args.name}\" already exists.`);\n }\n\n // Check if user exists\n const token = await fetchLatestToken(config, args.user);\n\n // Check if workspace exists\n const client = await initOperatorClient(token);\n const workspaces = await fetchAll(async (pageToken, maxPageSize) => {\n const { workspaces, nextPageToken } = await client.listWorkspaces({\n pageToken,\n pageSize: maxPageSize,\n });\n return [workspaces, nextPageToken];\n });\n\n const workspace = workspaces.find((ws) => ws.id === args[\"workspace-id\"]);\n if (!workspace) {\n throw new Error(`Workspace \"${args[\"workspace-id\"]}\" not found.`);\n }\n\n // Create new profile\n config.profiles[args.name] = {\n user: args.user,\n workspace_id: args[\"workspace-id\"],\n };\n writePlatformConfig(config);\n\n if (!args.json) {\n logger.success(`Profile \"${args.name}\" created successfully.`);\n }\n\n // Show profile info\n const profileInfo: ProfileInfo = {\n name: args.name,\n user: args.user,\n workspaceId: args[\"workspace-id\"],\n };\n logger.out(profileInfo);\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const deleteCommand = defineAppCommand({\n name: \"delete\",\n description: \"Delete a profile.\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Profile name\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n // Check if profile exists\n if (!config.profiles[args.name]) {\n throw new Error(`Profile \"${args.name}\" not found.`);\n }\n\n // Delete profile\n delete config.profiles[args.name];\n writePlatformConfig(config);\n\n logger.success(`Profile \"${args.name}\" deleted successfully.`);\n },\n});\n","import ml from \"multiline-ts\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List all profiles.\",\n args: z.object({}).strict(),\n run: async () => {\n const config = readPlatformConfig();\n\n const profiles = Object.entries(config.profiles);\n if (profiles.length === 0) {\n logger.info(ml`\n No profiles found.\n Please create a profile first using 'tailor-sdk profile create' command.\n `);\n return;\n }\n\n const profileInfos: ProfileInfo[] = profiles.map(([name, profile]) => ({\n name,\n user: profile!.user,\n workspaceId: profile!.workspace_id,\n }));\n logger.out(profileInfos);\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const updateCommand = defineAppCommand({\n name: \"update\",\n description: \"Update profile properties.\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Profile name\",\n }),\n user: arg(z.string().optional(), {\n alias: \"u\",\n description: \"New user email\",\n }),\n \"workspace-id\": arg(z.string().optional(), {\n alias: \"w\",\n description: \"New workspace ID\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n // Check if profile exists\n if (!config.profiles[args.name]) {\n throw new Error(`Profile \"${args.name}\" not found.`);\n }\n\n // Check if at least one property is provided\n if (!args.user && !args[\"workspace-id\"]) {\n throw new Error(\"Please provide at least one property to update.\");\n }\n\n const profile = config.profiles[args.name]!;\n const oldUser = profile.user;\n const newUser = args.user || oldUser;\n const oldWorkspaceId = profile.workspace_id;\n const newWorkspaceId = args[\"workspace-id\"] || oldWorkspaceId;\n\n // Check if user exists\n const token = await fetchLatestToken(config, newUser);\n\n // Check if workspace exists\n const client = await initOperatorClient(token);\n const workspaces = await fetchAll(async (pageToken, maxPageSize) => {\n const { workspaces, nextPageToken } = await client.listWorkspaces({\n pageToken,\n pageSize: maxPageSize,\n });\n return [workspaces, nextPageToken];\n });\n const workspace = workspaces.find((ws) => ws.id === newWorkspaceId);\n if (!workspace) {\n throw new Error(`Workspace \"${newWorkspaceId}\" not found.`);\n }\n\n // Update properties\n profile.user = newUser;\n profile.workspace_id = newWorkspaceId;\n writePlatformConfig(config);\n if (!args.json) {\n logger.success(`Profile \"${args.name}\" updated successfully`);\n }\n\n // Show profile info\n const profileInfo: ProfileInfo = {\n name: args.name,\n user: newUser,\n workspaceId: newWorkspaceId,\n };\n logger.out(profileInfo);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\nimport { updateCommand } from \"./update\";\n\nexport interface ProfileInfo {\n name: string;\n user: string;\n workspaceId: string;\n}\n\nexport const profileCommand = defineCommand({\n name: \"profile\",\n description: \"Manage workspace profiles (user + workspace combinations).\",\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n update: updateCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\n\n/**\n * Arguments for specify secret key\n */\nexport const vaultArgs = {\n \"vault-name\": arg(z.string(), {\n alias: \"V\",\n description: \"Vault name\",\n }),\n};\n\n/**\n * Arguments for specify secret key\n */\nexport const secretIdentifyArgs = {\n ...vaultArgs,\n name: arg(z.string(), {\n alias: \"n\",\n description: \"Secret name\",\n }),\n};\n\n/**\n * Arguments for specify secret key\n */\nexport const secretValueArgs = {\n ...secretIdentifyArgs,\n value: arg(z.string(), {\n alias: \"v\",\n description: \"Secret value\",\n }),\n};\n","import { sdkNameLabelKey, trnPrefix } from \"@/cli/commands/apply/label\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { OperatorClient } from \"@/cli/shared/client\";\n\ntype CheckVaultManagedParams = {\n client: OperatorClient;\n workspaceId: string;\n vaultName: string;\n};\n\ntype CheckVaultManagedResult = {\n isManaged: boolean;\n trn: string;\n existingLabels: Record<string, string>;\n};\n\n/**\n * Check if a vault is managed by defineSecretManager() and warn the user.\n * Returns management status and metadata needed for releasing ownership.\n * @param params - Check parameters\n * @returns Management status, TRN, and existing labels\n */\nexport async function checkVaultManaged(\n params: CheckVaultManagedParams,\n): Promise<CheckVaultManagedResult> {\n const { client, workspaceId, vaultName } = params;\n const trn = `${trnPrefix(workspaceId)}:vault:${vaultName}`;\n const notManaged = { isManaged: false, trn, existingLabels: {} };\n\n let owner: string | undefined;\n let allLabels: Record<string, string> = {};\n try {\n const { metadata } = await client.getMetadata({ trn });\n allLabels = metadata?.labels ?? {};\n owner = allLabels[sdkNameLabelKey];\n } catch {\n // If metadata fetch fails (e.g., vault doesn't exist yet), proceed silently.\n // The actual operation will surface the appropriate error.\n return notManaged;\n }\n\n if (!owner) return notManaged;\n\n logger.warn(\n `Vault \"${vaultName}\" is managed by defineSecretManager() in tailor.config.ts (owner: \"${owner}\"). ` +\n `Changes made via CLI may conflict with the config on the next apply.`,\n );\n\n return { isManaged: true, trn, existingLabels: allLabels };\n}\n\n/**\n * Release ownership of a managed vault by removing SDK labels from metadata.\n * Call this after the user has confirmed they want to proceed with a CLI operation on a managed vault.\n * @param params - Client, TRN, and existing labels from checkVaultManaged result\n * @param params.client\n * @param params.trn\n * @param params.existingLabels\n */\nexport async function releaseVaultOwnership(params: {\n client: OperatorClient;\n trn: string;\n existingLabels: Record<string, string>;\n}): Promise<void> {\n const { client, trn, existingLabels } = params;\n const { [sdkNameLabelKey]: _, \"sdk-version\": __, ...remainingLabels } = existingLabels;\n await client.setMetadata({ trn, labels: remainingLabels });\n logger.info(\n \"Config ownership has been removed from this vault. \" +\n \"Remove it from defineSecretManager() in your config to prevent the next apply from re-claiming it.\",\n );\n}\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { confirmationArgs, workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { prompt } from \"@/cli/shared/prompt\";\nimport { secretValueArgs } from \"./args\";\nimport { checkVaultManaged, releaseVaultOwnership } from \"./check-vault-managed\";\n\nexport const createSecretCommand = defineAppCommand({\n name: \"create\",\n description: \"Create a secret in a vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...secretValueArgs,\n ...confirmationArgs,\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n const managed = await checkVaultManaged({\n client,\n workspaceId,\n vaultName: args[\"vault-name\"],\n });\n if (managed.isManaged && !args.yes) {\n const confirmed = await prompt.confirm({\n message: \"Do you want to proceed?\",\n default: false,\n });\n if (!confirmed) return;\n }\n try {\n await client.createSecretManagerSecret({\n workspaceId,\n secretmanagerVaultName: args[\"vault-name\"],\n secretmanagerSecretName: args.name,\n secretmanagerSecretValue: args.value,\n });\n } catch (error) {\n if (error instanceof ConnectError) {\n if (error.code === Code.NotFound) {\n throw new Error(`Vault \"${args[\"vault-name\"]}\" not found.`);\n }\n if (error.code === Code.AlreadyExists) {\n throw new Error(`Secret \"${args.name}\" already exists.`);\n }\n }\n throw error;\n }\n\n if (managed.isManaged) {\n await releaseVaultOwnership({ client, ...managed });\n }\n\n logger.success(`Secret: ${args.name} created in vault: ${args[\"vault-name\"]}`);\n },\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { confirmationArgs, workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { prompt } from \"@/cli/shared/prompt\";\nimport { secretIdentifyArgs } from \"./args\";\nimport { checkVaultManaged, releaseVaultOwnership } from \"./check-vault-managed\";\n\nexport const deleteSecretCommand = defineAppCommand({\n name: \"delete\",\n description: \"Delete a secret in a vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...secretIdentifyArgs,\n ...confirmationArgs,\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n // No additional confirmation for managed vaults — the name-typing confirmation below is a stronger guard.\n const managed = await checkVaultManaged({ client, workspaceId, vaultName: args[\"vault-name\"] });\n\n if (!args.yes) {\n const confirmation = await prompt.text({\n message: `Enter the secret name to confirm deletion (\"${args.name}\"):`,\n });\n\n if (confirmation !== args.name) {\n logger.info(\"Secret deletion cancelled.\");\n return;\n }\n }\n\n try {\n await client.deleteSecretManagerSecret({\n workspaceId,\n secretmanagerVaultName: args[\"vault-name\"],\n secretmanagerSecretName: args.name,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(`Secret \"${args.name}\" not found in vault \"${args[\"vault-name\"]}\".`);\n }\n throw error;\n }\n\n if (managed.isManaged) {\n await releaseVaultOwnership({ client, ...managed });\n }\n\n logger.success(`Secret: ${args.name} deleted from vault: ${args[\"vault-name\"]}`);\n },\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { vaultArgs } from \"./args\";\nimport type { SecretManagerSecret } from \"@tailor-proto/tailor/v1/secret_manager_resource_pb\";\n\nexport interface SecretListOptions {\n workspaceId?: string;\n profile?: string;\n vaultName: string;\n}\n\nexport interface SecretInfo {\n name: string;\n createdAt: Date | null;\n updatedAt: Date | null;\n}\n\nfunction secretInfo(secret: SecretManagerSecret): SecretInfo {\n return {\n name: secret.name,\n createdAt: secret.createTime ? timestampDate(secret.createTime) : null,\n updatedAt: secret.updateTime ? timestampDate(secret.updateTime) : null,\n };\n}\n\n/**\n * List secrets in a Secret Manager vault.\n * @param options - Secret listing options\n * @returns List of secrets\n */\nasync function secretList(options: SecretListOptions): Promise<SecretInfo[]> {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options.workspaceId,\n profile: options.profile,\n });\n\n const secrets = await fetchAll(async (pageToken, maxPageSize) => {\n const { secrets, nextPageToken } = await client.listSecretManagerSecrets({\n workspaceId,\n secretmanagerVaultName: options.vaultName,\n pageToken,\n pageSize: maxPageSize,\n });\n return [secrets, nextPageToken];\n });\n\n return secrets.map(secretInfo);\n}\n\nexport const listSecretCommand = defineAppCommand({\n name: \"list\",\n description: \"List all secrets in a vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...vaultArgs,\n })\n .strict(),\n run: async (args) => {\n try {\n const secrets = await secretList({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n vaultName: args[\"vault-name\"],\n });\n logger.out(secrets);\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(`Vault \"${args[\"vault-name\"]}\" not found.`);\n }\n throw error;\n }\n },\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { confirmationArgs, workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { prompt } from \"@/cli/shared/prompt\";\nimport { secretValueArgs } from \"./args\";\nimport { checkVaultManaged, releaseVaultOwnership } from \"./check-vault-managed\";\n\nexport const updateSecretCommand = defineAppCommand({\n name: \"update\",\n description: \"Update a secret in a vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...secretValueArgs,\n ...confirmationArgs,\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n const managed = await checkVaultManaged({\n client,\n workspaceId,\n vaultName: args[\"vault-name\"],\n });\n if (managed.isManaged && !args.yes) {\n const confirmed = await prompt.confirm({\n message: \"Do you want to proceed?\",\n default: false,\n });\n if (!confirmed) return;\n }\n try {\n await client.updateSecretManagerSecret({\n workspaceId,\n secretmanagerVaultName: args[\"vault-name\"],\n secretmanagerSecretName: args.name,\n secretmanagerSecretValue: args.value,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(`Secret \"${args.name}\" not found in vault \"${args[\"vault-name\"]}\".`);\n }\n throw error;\n }\n\n if (managed.isManaged) {\n await releaseVaultOwnership({ client, ...managed });\n }\n\n logger.success(`Secret: ${args.name} updated in vault: ${args[\"vault-name\"]}`);\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\n\ntype ArgsShape = Record<string, z.ZodType>;\n\nexport const nameArgs = {\n name: arg(z.string(), {\n positional: true,\n description: \"Vault name\",\n }),\n} satisfies ArgsShape;\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { nameArgs } from \"./args\";\n\nexport const createCommand = defineAppCommand({\n name: \"create\",\n description: \"Create a new Secret Manager vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...nameArgs,\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n try {\n await client.createSecretManagerVault({\n workspaceId,\n secretmanagerVaultName: args.name,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.AlreadyExists) {\n throw new Error(`Vault \"${args.name}\" already exists.`);\n }\n throw error;\n }\n\n logger.success(`Vault: ${args.name} created`);\n },\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { z } from \"zod\";\nimport { confirmationArgs, workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { prompt } from \"@/cli/shared/prompt\";\nimport { checkVaultManaged } from \"../check-vault-managed\";\nimport { nameArgs } from \"./args\";\n\nexport const deleteCommand = defineAppCommand({\n name: \"delete\",\n description: \"Delete a Secret Manager vault.\",\n args: z\n .object({\n ...workspaceArgs,\n ...nameArgs,\n ...confirmationArgs,\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n // No additional confirmation for managed vaults — the name-typing confirmation below is a stronger guard.\n const managed = await checkVaultManaged({ client, workspaceId, vaultName: args.name });\n\n if (!args.yes) {\n const confirmation = await prompt.text({\n message: `Enter the vault name to confirm deletion (\"${args.name}\"):`,\n });\n if (confirmation !== args.name) {\n logger.info(\"Vault deletion cancelled.\");\n return;\n }\n }\n\n try {\n await client.deleteSecretManagerVault({\n workspaceId,\n secretmanagerVaultName: args.name,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(`Vault \"${args.name}\" not found.`);\n }\n throw error;\n }\n\n if (managed.isManaged) {\n logger.info(\n \"Remove this vault from defineSecretManager() in your config to prevent the next apply from re-creating it.\",\n );\n }\n\n logger.success(`Vault: ${args.name} deleted`);\n },\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { SecretManagerVault } from \"@tailor-proto/tailor/v1/secret_manager_resource_pb\";\n\nexport interface VaultListOptions {\n workspaceId?: string;\n profile?: string;\n}\n\nexport interface VaultInfo {\n name: string;\n createdAt: Date | null;\n updatedAt: Date | null;\n}\n\nfunction vaultInfo(vault: SecretManagerVault): VaultInfo {\n return {\n name: vault.name,\n createdAt: vault.createTime ? timestampDate(vault.createTime) : null,\n updatedAt: vault.updateTime ? timestampDate(vault.updateTime) : null,\n };\n}\n\n/**\n * List Secret Manager vaults in the workspace.\n * @param options - Vault listing options\n * @returns List of vaults\n */\nasync function vaultList(options?: VaultListOptions): Promise<VaultInfo[]> {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options?.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options?.workspaceId,\n profile: options?.profile,\n });\n\n const vaults = await fetchAll(async (pageToken, maxPageSize) => {\n const { vaults, nextPageToken } = await client.listSecretManagerVaults({\n workspaceId,\n pageToken,\n pageSize: maxPageSize,\n });\n return [vaults, nextPageToken];\n });\n\n return vaults.map(vaultInfo);\n}\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List all Secret Manager vaults in the workspace.\",\n args: z\n .object({\n ...workspaceArgs,\n })\n .strict(),\n run: async (args) => {\n const vaults = await vaultList({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n logger.out(vaults);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\n\nexport const vaultCommand = defineCommand({\n name: \"vault\",\n description: \"Manage Secret Manager vaults.\",\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { createSecretCommand } from \"./create\";\nimport { deleteSecretCommand } from \"./delete\";\nimport { listSecretCommand } from \"./list\";\nimport { updateSecretCommand } from \"./update\";\nimport { vaultCommand } from \"./vault\";\n\nexport const secretCommand = defineCommand({\n name: \"secret\",\n description: \"Manage Secret Manager vaults and secrets.\",\n subCommands: {\n create: createSecretCommand,\n delete: deleteSecretCommand,\n list: listSecretCommand,\n update: updateSecretCommand,\n vault: vaultCommand,\n },\n async run() {\n await runCommand(vaultCommand, []);\n },\n});\n","export default \"name: Fetch Tailor Platform Token\\ndescription: Fetch an OAuth2 access token via client credentials grant and export as TAILOR_PLATFORM_TOKEN\\n\\ninputs:\\n client_id:\\n description: OAuth2 client ID\\n required: true\\n client_secret:\\n description: OAuth2 client secret\\n required: true\\n platform_oauth2_url:\\n description: OAuth2 token endpoint URL\\n required: false\\n default: https://api.tailor.tech/oauth2/platform/token\\n\\nruns:\\n using: composite\\n steps:\\n - name: Fetch access token\\n shell: bash\\n run: |\\n RESPONSE=$(curl -s -X POST \\\"${{ inputs.platform_oauth2_url }}\\\" \\\\\\n -H \\\"Content-Type: application/x-www-form-urlencoded\\\" \\\\\\n -d \\\"grant_type=client_credentials\\\" \\\\\\n --data-urlencode \\\"client_id=${{ inputs.client_id }}\\\" \\\\\\n --data-urlencode \\\"client_secret=${{ inputs.client_secret }}\\\")\\n\\n TOKEN=$(echo \\\"$RESPONSE\\\" | jq -r '.access_token')\\n\\n if [ \\\"$TOKEN\\\" = \\\"null\\\" ] || [ -z \\\"$TOKEN\\\" ]; then\\n echo \\\"::error::Failed to fetch access token\\\"\\n echo \\\"$RESPONSE\\\" | jq .\\n exit 1\\n fi\\n\\n echo \\\"::add-mask::$TOKEN\\\"\\n echo \\\"TAILOR_PLATFORM_TOKEN=$TOKEN\\\" >> \\\"$GITHUB_ENV\\\"\\n\";","export default \"name: Install Node.js\\ndescription: Install pnpm, Node.js, and project dependencies\\n\\nruns:\\n using: composite\\n steps:\\n - name: Install pnpm\\n uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0\\n with:\\n version: 10\\n\\n - name: Setup Node.js\\n uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0\\n with:\\n node-version: 22\\n cache: pnpm\\n\\n - name: Install dependencies\\n run: pnpm install --frozen-lockfile\\n shell: bash\\n\";","export default \"name: Deploy\\n\\non:\\n push:\\n branches:\\n - main\\n workflow_dispatch:\\n\\nconcurrency:\\n group: deploy-__WORKSPACE_NAME__\\n cancel-in-progress: false\\n\\nenv:\\n WORKSPACE_NAME: __WORKSPACE_NAME__\\n WORKSPACE_REGION: __WORKSPACE_REGION__\\n TAILOR_PLATFORM_ORGANIZATION_ID: __ORGANIZATION_ID__\\n TAILOR_PLATFORM_FOLDER_ID: __FOLDER_ID__\\n# __DEFAULTS_BLOCK__\\njobs:\\n deploy:\\n runs-on: ubuntu-latest\\n steps:\\n - name: Checkout\\n uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\\n with:\\n persist-credentials: false\\n\\n - name: Install Node.js\\n uses: ./.github/actions/install-node\\n\\n - name: Fetch Tailor Platform token\\n uses: ./.github/actions/fetch-tailor-token\\n with:\\n client_id: ${{ secrets.PLATFORM_MACHINE_USER_CLIENT_ID }}\\n client_secret: ${{ secrets.PLATFORM_MACHINE_USER_CLIENT_SECRET }}\\n\\n - name: Ensure workspace exists\\n run: |\\n WORKSPACE_ID=$(pnpm tailor-sdk workspace list -j | jq -r --arg name \\\"$WORKSPACE_NAME\\\" --arg region \\\"$WORKSPACE_REGION\\\" '.[] | select(.name == $name and .region == $region) | .id')\\n\\n if [ -z \\\"$WORKSPACE_ID\\\" ]; then\\n echo \\\"Workspace '$WORKSPACE_NAME' not found, creating...\\\"\\n WORKSPACE_ID=$(pnpm tailor-sdk workspace create -j --name \\\"$WORKSPACE_NAME\\\" --region \\\"$WORKSPACE_REGION\\\" --organization-id \\\"$TAILOR_PLATFORM_ORGANIZATION_ID\\\" --folder-id \\\"$TAILOR_PLATFORM_FOLDER_ID\\\" | jq -r '.id')\\n echo \\\"Created workspace: $WORKSPACE_ID\\\"\\n else\\n echo \\\"Found existing workspace: $WORKSPACE_ID\\\"\\n fi\\n\\n echo \\\"TAILOR_PLATFORM_WORKSPACE_ID=$WORKSPACE_ID\\\" >> \\\"$GITHUB_ENV\\\"\\n\\n - name: Generate types\\n run: pnpm generate\\n\\n - name: Deploy\\n # Runs the \\\"deploy\\\" script from package.json (tailor-sdk apply --yes)\\n run: pnpm run deploy -- --yes\\n\\n - name: Show application info\\n run: pnpm tailor-sdk show -j -w \\\"$TAILOR_PLATFORM_WORKSPACE_ID\\\"\\n\";","import deployTemplate from \"./deploy.workflow.yml\";\n\ntype DeployParams = {\n workspaceName: string;\n workspaceRegion: string;\n organizationId: string;\n folderId: string;\n workingDirectory?: string;\n};\n\n/**\n * Render the deploy workflow YAML.\n *\n * Targets single-application scaffolds (those with `generate` and `deploy` scripts).\n * Multi-application projects (e.g. chained `deploy:*` scripts) need manual workflow customization.\n * @param params - Workspace and deployment configuration\n * @returns Workflow YAML content\n */\nexport function renderDeploy(params: DeployParams): string {\n const { workspaceName, workspaceRegion, organizationId, folderId, workingDirectory } = params;\n\n // --dir sets working-directory for all run steps. Assumes the target directory\n // is a pnpm workspace member with its own package.json (standard monorepo layout).\n const defaultsBlock = workingDirectory\n ? `\\ndefaults:\\n run:\\n working-directory: ${workingDirectory}\\n`\n : \"\";\n\n return deployTemplate\n .replaceAll(\"__WORKSPACE_NAME__\", () => workspaceName)\n .replace(\"__WORKSPACE_REGION__\", () => workspaceRegion)\n .replace(\"__ORGANIZATION_ID__\", () => organizationId)\n .replace(\"__FOLDER_ID__\", () => folderId)\n .replace(\"# __DEFAULTS_BLOCK__\\n\", () => defaultsBlock);\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"pathe\";\nimport { logBetaWarning } from \"@/cli/shared/beta\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { fetchTailorTokenYaml, installNodeYaml, renderDeploy } from \"./templates\";\n\nexport type SetupGitHubOptions = {\n workspaceName: string;\n workspaceRegion: string;\n organizationId: string;\n folderId: string;\n dir: string;\n outputDir: string;\n};\n\ntype GeneratedFile = {\n path: string;\n content: string;\n};\n\ntype WriteResult = {\n written: string[];\n skipped: string[];\n};\n\n/**\n * Build the list of GitHub Actions files to generate.\n * @param options - Setup options including workspace config and output directory\n * @returns Array of files with paths and rendered content\n */\nexport function buildFiles(options: SetupGitHubOptions): GeneratedFile[] {\n const githubDir = path.join(options.outputDir, \".github\");\n\n return [\n {\n path: path.join(githubDir, \"actions/fetch-tailor-token/action.yml\"),\n content: fetchTailorTokenYaml,\n },\n {\n path: path.join(githubDir, \"actions/install-node/action.yml\"),\n content: installNodeYaml,\n },\n {\n path: path.join(githubDir, `workflows/deploy-${options.workspaceName}.yml`),\n content: renderDeploy({\n workspaceName: options.workspaceName,\n workspaceRegion: options.workspaceRegion,\n organizationId: options.organizationId,\n folderId: options.folderId,\n workingDirectory: options.dir !== \".\" ? options.dir : undefined,\n }),\n },\n ];\n}\n\n/**\n * Write files to disk, skipping any that already exist.\n * @param files - Files to write\n * @returns Result with lists of written and skipped file paths\n */\nexport function writeFiles(files: GeneratedFile[]): WriteResult {\n const written: string[] = [];\n const skipped: string[] = [];\n\n for (const file of files) {\n if (fs.existsSync(file.path)) {\n skipped.push(file.path);\n continue;\n }\n fs.mkdirSync(path.dirname(file.path), { recursive: true });\n fs.writeFileSync(file.path, file.content);\n written.push(file.path);\n }\n\n return { written, skipped };\n}\n\n/**\n * Generate GitHub Actions workflow files and print next steps.\n * @param options - Setup options including workspace config and output directory\n */\nexport function setupGitHub(options: SetupGitHubOptions): void {\n logBetaWarning(\"setup github\");\n\n const files = buildFiles(options);\n const result = writeFiles(files);\n\n for (const filePath of result.written) {\n const relativePath = path.relative(options.outputDir, filePath);\n logger.success(`Generated ${styles.path(relativePath)}`);\n }\n\n for (const filePath of result.skipped) {\n const relativePath = path.relative(options.outputDir, filePath);\n logger.warn(`Skipped ${styles.path(relativePath)} (already exists)`);\n }\n\n logger.newline();\n logger.info(\"Next steps - set GitHub secrets:\");\n logger.log(` gh secret set PLATFORM_MACHINE_USER_CLIENT_ID`);\n logger.log(` gh secret set PLATFORM_MACHINE_USER_CLIENT_SECRET`);\n}\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { setupGitHub } from \"./github\";\n\nexport const githubCommand = defineAppCommand({\n name: \"github\",\n description: \"Generate GitHub Actions workflow for deployment. (beta)\",\n args: z\n .object({\n \"workspace-name\": arg(z.string(), {\n alias: \"n\",\n description: \"Workspace name\",\n }),\n \"workspace-region\": arg(z.string(), {\n alias: \"r\",\n description: \"Workspace region\",\n }),\n // Required here because the generated workflow uses these for workspace creation.\n // Could be made optional in the future if we add conditional template rendering.\n \"organization-id\": arg(z.string(), {\n alias: \"o\",\n description: \"Organization ID\",\n }),\n \"folder-id\": arg(z.string(), {\n alias: \"f\",\n description: \"Folder ID\",\n }),\n dir: arg(z.string().default(\".\"), {\n alias: \"d\",\n description: \"App directory (for monorepo setups)\",\n }),\n })\n .strict(),\n run: (args) => {\n setupGitHub({\n workspaceName: args[\"workspace-name\"],\n workspaceRegion: args[\"workspace-region\"],\n organizationId: args[\"organization-id\"],\n folderId: args[\"folder-id\"],\n dir: args.dir,\n outputDir: process.cwd(),\n });\n },\n});\n","import { defineCommand } from \"politty\";\nimport { githubCommand } from \"./github\";\n\nexport const setupCommand = defineCommand({\n name: \"setup\",\n description: \"Set up project infrastructure.\",\n subCommands: {\n github: githubCommand,\n },\n});\n","import { setTimeout } from \"node:timers/promises\";\n\n/**\n * Create a simple progress reporter that writes updates to stderr.\n * @param label - Label to prefix progress output\n * @param total - Total number of steps\n * @returns Progress helpers\n */\nexport function createProgress(label: string, total: number) {\n let current = 0;\n\n const update = () => {\n current += 1;\n const percent = Math.round((current / total) * 100);\n process.stderr.write(`\\r${label} ${current}/${total} (${percent}%)`);\n };\n\n const finish = () => {\n process.stderr.write(\"\\n\");\n };\n\n return { update, finish };\n}\n\n/**\n * Wrap a promise with a timeout, rejecting if the timeout elapses first.\n * @template T\n * @param p - Promise to await\n * @param ms - Timeout in milliseconds\n * @param message - Error message on timeout\n * @returns Result of the original promise if it completes in time\n */\nexport async function withTimeout<T>(p: Promise<T>, ms: number, message: string): Promise<T> {\n return await Promise.race([\n p,\n setTimeout(ms).then(() => {\n throw new Error(message);\n }),\n ]);\n}\n","import * as fs from \"fs\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport { lookup as mimeLookup } from \"mime-types\";\nimport pLimit from \"p-limit\";\nimport * as path from \"pathe\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient, type OperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { createProgress, withTimeout } from \"@/cli/shared/progress\";\nimport type { MessageInitShape } from \"@bufbuild/protobuf\";\nimport type { UploadFileRequestSchema } from \"@tailor-proto/tailor/v1/staticwebsite_pb\";\n\nconst CHUNK_SIZE = 64 * 1024; // 64KB\nconst IGNORED_FILES = new Set([\".DS_Store\", \"thumbs.db\", \"desktop.ini\"]);\nfunction shouldIgnoreFile(filePath: string) {\n const fileName = path.basename(filePath).toLowerCase();\n return IGNORED_FILES.has(fileName);\n}\n\nexport type DeployResult = {\n url: string;\n skippedFiles: string[];\n};\n\n/**\n * Deploy a static website by creating a deployment, uploading files, and publishing it.\n * @param client - Operator client instance\n * @param workspaceId - Workspace ID\n * @param name - Static website name\n * @param distDir - Directory containing static site files\n * @param showProgress - Whether to show upload progress\n * @returns Deployment result with URL and skipped files\n */\nexport async function deployStaticWebsite(\n client: OperatorClient,\n workspaceId: string,\n name: string,\n distDir: string,\n showProgress: boolean = true,\n): Promise<DeployResult> {\n const { deploymentId } = await client.createDeployment({\n workspaceId,\n name,\n });\n\n if (!deploymentId) {\n throw new Error(\"createDeployment returned empty deploymentId\");\n }\n\n const skippedFiles = await uploadDirectory(\n client,\n workspaceId,\n deploymentId,\n distDir,\n showProgress,\n );\n\n const { url } = await client.publishDeployment({\n workspaceId,\n deploymentId,\n });\n\n if (!url) {\n throw new Error(\"publishDeployment returned empty url\");\n }\n\n return { url, skippedFiles };\n}\n\nasync function uploadDirectory(\n client: OperatorClient,\n workspaceId: string,\n deploymentId: string,\n rootDir: string,\n showProgress: boolean,\n): Promise<string[]> {\n const files = await collectFiles(rootDir);\n if (files.length === 0) {\n logger.warn(`No files found under ${rootDir}`);\n return [];\n }\n\n const concurrency = 5;\n const limit = pLimit(concurrency);\n\n const total = files.length;\n const progress = showProgress ? createProgress(\"Uploading files\", total) : undefined;\n const skippedFiles: string[] = [];\n\n await Promise.all(\n files.map((relativePath) =>\n limit(async () => {\n await uploadSingleFile(\n client,\n workspaceId,\n deploymentId,\n rootDir,\n relativePath,\n skippedFiles,\n );\n if (progress) {\n progress.update();\n }\n }),\n ),\n );\n\n if (progress) {\n progress.finish();\n }\n\n return skippedFiles;\n}\n\n/**\n * Recursively collect all deployable files under the given directory.\n * @param rootDir - Root directory to scan\n * @param currentDir - Current relative directory (for recursion)\n * @returns List of file paths relative to rootDir\n */\nasync function collectFiles(rootDir: string, currentDir = \"\"): Promise<string[]> {\n const dirPath = path.join(rootDir, currentDir);\n\n const entries = await fs.promises.readdir(dirPath, {\n withFileTypes: true,\n });\n const files: string[] = [];\n\n for (const entry of entries) {\n const rel = path.join(currentDir, entry.name);\n if (entry.isDirectory()) {\n const sub = await collectFiles(rootDir, rel);\n files.push(...sub);\n } else if (entry.isFile() && !entry.isSymbolicLink() && !shouldIgnoreFile(rel)) {\n files.push(rel);\n }\n }\n\n return files;\n}\n\nasync function uploadSingleFile(\n client: OperatorClient,\n workspaceId: string,\n deploymentId: string,\n rootDir: string,\n filePath: string,\n skippedFiles: string[],\n): Promise<void> {\n const absPath = path.join(rootDir, filePath);\n\n const mime = mimeLookup(filePath);\n\n if (!mime) {\n skippedFiles.push(`${filePath} (unsupported content type; no MIME mapping found)`);\n return;\n }\n\n const contentType = mime;\n\n const readStream = fs.createReadStream(absPath, {\n highWaterMark: CHUNK_SIZE,\n });\n\n async function* requestStream(): AsyncIterable<MessageInitShape<typeof UploadFileRequestSchema>> {\n yield {\n payload: {\n case: \"initialMetadata\",\n value: {\n workspaceId,\n deploymentId,\n filePath,\n contentType,\n },\n },\n };\n for await (const chunk of readStream) {\n yield {\n payload: {\n case: \"chunkData\",\n value: chunk as Buffer,\n },\n };\n }\n }\n\n async function uploadWithLogging() {\n try {\n await client.uploadFile(requestStream());\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.InvalidArgument) {\n skippedFiles.push(`${filePath} (server rejected file as invalid: ${error.message})`);\n return;\n }\n // For non-validation errors, fail the deployment as before.\n throw error;\n }\n }\n\n await withTimeout(\n uploadWithLogging(),\n // 2 minutes per file\n 2 * 60_000,\n `Upload timed out for \"${filePath}\"`,\n );\n}\n\n/**\n * Log skipped files after a deployment, including reasons for skipping.\n * @param skippedFiles - List of skipped file descriptions\n */\nexport function logSkippedFiles(skippedFiles: string[]) {\n if (skippedFiles.length === 0) {\n return;\n }\n logger.warn(\n \"Deployment completed, but some files failed to upload. These files may have unsupported content types or other validation issues. Please review the list below:\",\n );\n for (const file of skippedFiles) {\n logger.log(` - ${file}`);\n }\n}\n\nexport const deployCommand = defineAppCommand({\n name: \"deploy\",\n description: \"Deploy a static website from a local build directory.\",\n args: z\n .object({\n ...workspaceArgs,\n name: arg(z.string(), {\n alias: \"n\",\n description: \"Static website name\",\n }),\n dir: arg(z.string(), {\n alias: \"d\",\n description: \"Path to the static website files\",\n completion: { type: \"directory\" },\n }),\n })\n .strict(),\n run: async (args) => {\n logger.info(`Deploying static website \"${args.name}\" from directory: ${args.dir}`);\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n\n const name = args.name;\n const dir = path.resolve(process.cwd(), args.dir);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) {\n throw new Error(`Directory not found or not a directory: ${dir}`);\n }\n\n const { url, skippedFiles } = await withTimeout(\n deployStaticWebsite(client, workspaceId, name, dir, !args.json),\n // 10 minutes\n 10 * 60_000,\n \"Deployment timed out after 10 minutes.\",\n );\n\n if (args.json) {\n logger.out({ name, workspaceId, url, skippedFiles });\n } else {\n logger.success(`Static website \"${name}\" deployed successfully. URL: ${url}`);\n logSkippedFiles(skippedFiles);\n }\n },\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const getCommand = defineAppCommand({\n name: \"get\",\n description: \"Get details of a specific static website.\",\n args: z\n .object({\n ...workspaceArgs,\n name: arg(z.string(), {\n positional: true,\n description: \"Static website name\",\n }),\n })\n .strict(),\n run: async (args) => {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n const notFoundErrorMessage = `Static website \"${args.name}\" not found.`;\n\n try {\n const { staticwebsite } = await client.getStaticWebsite({\n workspaceId,\n name: args.name,\n });\n\n if (!staticwebsite) {\n throw new Error(notFoundErrorMessage);\n }\n\n const info = {\n workspaceId,\n name: staticwebsite.name,\n description: staticwebsite.description,\n url: staticwebsite.url,\n allowedIpAddresses: args.json\n ? staticwebsite.allowedIpAddresses\n : staticwebsite.allowedIpAddresses.join(\"\\n\"),\n };\n\n logger.out(info);\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(notFoundErrorMessage);\n }\n throw error;\n }\n },\n});\n","import { z } from \"zod\";\nimport { workspaceArgs } from \"@/cli/shared/args\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport interface StaticWebsiteInfo {\n workspaceId: string;\n name: string;\n description: string;\n url: string;\n allowedIpAddresses: string[];\n}\n\ntype StaticWebsiteListOptions = {\n workspaceId?: string;\n profile?: string;\n};\n\n/**\n * List static websites in the workspace.\n * @param options - Static website listing options\n * @returns List of static websites\n */\nasync function listStaticWebsites(\n options?: StaticWebsiteListOptions,\n): Promise<StaticWebsiteInfo[]> {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options?.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options?.workspaceId,\n profile: options?.profile,\n });\n\n const websites = await fetchAll(async (pageToken, maxPageSize) => {\n const { staticwebsites, nextPageToken } = await client.listStaticWebsites({\n workspaceId,\n pageToken,\n pageSize: maxPageSize,\n });\n return [staticwebsites, nextPageToken];\n });\n\n return websites.map((site) => ({\n workspaceId,\n name: site.name,\n description: site.description,\n url: site.url ?? \"\",\n allowedIpAddresses: site.allowedIpAddresses,\n }));\n}\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List all static websites in a workspace.\",\n args: z\n .object({\n ...workspaceArgs,\n })\n .strict(),\n run: async (args) => {\n const websites = await listStaticWebsites({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n const formatted = args.json\n ? websites\n : websites.map(({ allowedIpAddresses, ...rest }) => {\n if (allowedIpAddresses.length === 0) {\n return {\n ...rest,\n allowedIpAddresses: \"No allowed IP addresses\",\n };\n }\n\n const count = allowedIpAddresses.length;\n const label = count === 1 ? \"1 IP address\" : `${count} IP addresses`;\n\n return {\n ...rest,\n allowedIpAddresses: label,\n };\n });\n\n logger.out(formatted);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { deployCommand } from \"./deploy\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\n\nexport const staticwebsiteCommand = defineCommand({\n name: \"staticwebsite\",\n description: \"Manage static websites in your workspace.\",\n subCommands: {\n deploy: deployCommand,\n get: getCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport * as path from \"pathe\";\n\ninterface CliPackageJson {\n bin?: Record<string, string>;\n}\n\ntype ResolveCliBinOptions = {\n packageName: string;\n binName: string;\n};\n\n/**\n * Resolve a CLI binary path from the SDK's dependencies.\n * @param options - Resolution options for locating the CLI binary.\n * @returns Absolute path to the CLI binary entry.\n */\nexport function resolveCliBinPath(options: ResolveCliBinOptions): string {\n const { packageName, binName } = options;\n\n // Resolve from SDK's dependencies instead of user's project\n const requireFromSdk = createRequire(import.meta.url);\n let pkgJsonPath: string;\n try {\n pkgJsonPath = requireFromSdk.resolve(`${packageName}/package.json`);\n } catch {\n throw new Error(`Failed to resolve \\`${packageName}\\`.`);\n }\n\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, \"utf8\")) as CliPackageJson;\n const binRelativePath = pkgJson.bin?.[binName];\n if (!binRelativePath) {\n throw new Error(`\\`${packageName}\\` does not expose a \\`${binName}\\` binary entry.`);\n }\n\n return path.resolve(path.dirname(pkgJsonPath), binRelativePath);\n}\n","import * as fs from \"node:fs\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport * as path from \"pathe\";\nimport { fetchAll } from \"@/cli/shared/client\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type {\n TblsColumn,\n TblsConstraint,\n TblsEnum,\n TblsRelation,\n TblsSchema,\n TblsTable,\n} from \"./types\";\nimport type { OperatorClient } from \"@/cli/shared/client\";\nimport type {\n TailorDBType as TailorDBProtoType,\n TailorDBType_FieldConfig,\n} from \"@tailor-proto/tailor/v1/tailordb_resource_pb\";\n\nexport interface TailorDBSchemaOptions {\n workspaceId: string;\n namespace: string;\n client: OperatorClient;\n}\n\n/**\n * Convert TailorDB field config to tbls column definition.\n * @param fieldName - Field name\n * @param fieldConfig - TailorDB field configuration\n * @returns tbls column definition\n */\nexport function toTblsColumn(fieldName: string, fieldConfig: TailorDBType_FieldConfig): TblsColumn {\n const baseType = fieldConfig.type || \"string\";\n const type = fieldConfig.array ? `${baseType}[]` : baseType;\n\n return {\n name: fieldName,\n type,\n nullable: !fieldConfig.required,\n comment: fieldConfig.description ?? \"\",\n };\n}\n\n/**\n * Build tbls schema JSON from TailorDB types.\n * @param types - TailorDB types fetched from platform\n * @param namespace - TailorDB namespace\n * @returns tbls-compatible schema representation\n */\nexport function buildTblsSchema(types: TailorDBProtoType[], namespace: string): TblsSchema {\n const tables: TblsTable[] = [];\n const relations: TblsRelation[] = [];\n const referencedByTable: Record<string, Set<string>> = {};\n const constraintsByTable: Record<string, TblsConstraint[]> = {};\n const enumsMap: Map<string, Set<string>> = new Map();\n\n for (const type of types) {\n const tableName = type.name;\n const schema = type.schema;\n\n const columns: TblsColumn[] = [];\n const tableConstraints: TblsConstraint[] = [];\n\n // Implicit primary key column\n columns.push({\n name: \"id\",\n type: \"uuid\",\n nullable: false,\n comment: \"\",\n });\n\n tableConstraints.push({\n name: `pk_${tableName}`,\n type: \"PRIMARY KEY\",\n def: \"\",\n table: tableName,\n columns: [\"id\"],\n });\n\n if (schema) {\n // Fields -> columns\n for (const [fieldName, fieldConfig] of Object.entries(schema.fields ?? {})) {\n columns.push(toTblsColumn(fieldName, fieldConfig));\n\n // Collect enum values\n if (fieldConfig.type === \"enum\" && fieldConfig.allowedValues.length > 0) {\n const enumName = `${tableName}_${fieldName}`;\n let values = enumsMap.get(enumName);\n if (!values) {\n values = new Set<string>();\n enumsMap.set(enumName, values);\n }\n for (const value of fieldConfig.allowedValues) {\n values.add(value.value);\n }\n }\n\n // Foreign key -> relation + constraint\n if (fieldConfig.foreignKey && fieldConfig.foreignKeyType) {\n const foreignTable = fieldConfig.foreignKeyType;\n const foreignColumn = fieldConfig.foreignKeyField || \"id\";\n\n // Cardinality:\n // - child side: exactly_one if non-nullable, zero_or_one if nullable FK\n // - parent side: zero_or_more (a parent can have many children)\n const childCardinality = fieldConfig.required ? \"exactly_one\" : \"zero_or_one\";\n const parentCardinality = \"zero_or_more\";\n\n // tbls RelationJSON:\n // - table/columns: child side (FK owner)\n // - parent_table/parent_columns: referenced side\n relations.push({\n table: tableName,\n columns: [fieldName],\n parent_table: foreignTable,\n parent_columns: [foreignColumn],\n cardinality: childCardinality,\n parent_cardinality: parentCardinality,\n def: \"\",\n });\n\n tableConstraints.push({\n name: `fk_${tableName}_${fieldName}`,\n type: \"FOREIGN KEY\",\n def: \"\",\n table: tableName,\n columns: [fieldName],\n referenced_table: foreignTable,\n referenced_columns: [foreignColumn],\n });\n\n if (!referencedByTable[tableName]) {\n referencedByTable[tableName] = new Set<string>();\n }\n referencedByTable[tableName].add(foreignTable);\n }\n }\n }\n\n constraintsByTable[tableName] = tableConstraints;\n\n tables.push({\n name: tableName,\n type: \"table\",\n comment: schema?.description ?? \"\",\n columns,\n indexes: [],\n constraints: constraintsByTable[tableName] ?? [],\n triggers: [],\n def: \"\",\n referenced_tables: [],\n });\n }\n\n // Populate referenced_tables from collected relations\n for (const table of tables) {\n const referenced = referencedByTable[table.name];\n table.referenced_tables = referenced ? Array.from(referenced) : [];\n }\n\n const enums: TblsEnum[] = [];\n for (const [name, values] of enumsMap.entries()) {\n enums.push({\n name,\n values: Array.from(values),\n });\n }\n\n return {\n name: namespace,\n tables,\n relations,\n enums,\n };\n}\n\n/**\n * Export apply-applied TailorDB schema for a namespace as tbls-compatible JSON.\n * @param options - Export options\n * @returns tbls schema representation\n */\nasync function exportTailorDBSchema(options: TailorDBSchemaOptions): Promise<TblsSchema> {\n const { client, workspaceId, namespace } = options;\n\n const types = await fetchAll(async (pageToken, maxPageSize) => {\n try {\n const { tailordbTypes, nextPageToken } = await client.listTailorDBTypes({\n workspaceId,\n namespaceName: namespace,\n pageToken,\n pageSize: maxPageSize,\n });\n return [tailordbTypes, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n\n if (types.length === 0) {\n logger.warn(`No TailorDB types found in namespace \"${namespace}\". Returning empty schema.`);\n }\n\n return buildTblsSchema(types, namespace);\n}\n\nexport interface WriteSchemaOptions extends TailorDBSchemaOptions {\n outputPath: string;\n}\n\n/**\n * Writes the TailorDB schema to a file in tbls-compatible JSON format.\n * @param options - The options for writing the schema file.\n */\nexport async function writeTblsSchemaToFile(options: WriteSchemaOptions): Promise<void> {\n const schema = await exportTailorDBSchema(options);\n const json = JSON.stringify(schema, null, 2);\n\n fs.mkdirSync(path.dirname(options.outputPath), { recursive: true });\n fs.writeFileSync(options.outputPath, json, \"utf8\");\n\n const relativePath = path.relative(process.cwd(), options.outputPath);\n logger.success(`Wrote ERD schema to ${relativePath}`);\n}\n","import { logBetaWarning } from \"@/cli/shared/beta\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { loadConfig } from \"@/cli/shared/config-loader\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport type { OperatorClient } from \"@/cli/shared/client\";\nimport type { AppConfig } from \"@/types/app-config\";\n\nexport interface ErdCommandContext {\n client: OperatorClient;\n workspaceId: string;\n config: AppConfig;\n}\n\ntype ErdCommandOptions = {\n profile?: string;\n workspaceId?: string;\n config?: string;\n};\n\n/**\n * Initialize shared ERD command context.\n * @param args - CLI arguments.\n * @returns Initialized context.\n */\nexport async function initErdContext(args: ErdCommandOptions): Promise<ErdCommandContext> {\n logBetaWarning(\"tailordb erd\");\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: args.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: args.workspaceId,\n profile: args.profile,\n });\n const { config } = await loadConfig(args.config);\n\n return { client, workspaceId, config };\n}\n","import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as path from \"pathe\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { deploymentArgs } from \"@/cli/shared/args\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { resolveCliBinPath } from \"@/cli/shared/resolve-cli-bin\";\nimport { writeTblsSchemaToFile } from \"./schema\";\nimport { initErdContext } from \"./utils\";\nimport type { TailorDBSchemaOptions } from \"./schema\";\nimport type { OperatorClient } from \"@/cli/shared/client\";\nimport type { AppConfig } from \"@/types/app-config\";\n\nconst DEFAULT_ERD_BASE_DIR = \".tailor-sdk/erd\";\n\n/**\n * Resolve TailorDB config and namespace.\n * @param config - Loaded Tailor SDK config.\n * @param explicitNamespace - Namespace override.\n * @returns Resolved namespace and erdSite.\n */\nfunction resolveDbConfig(\n config: AppConfig,\n explicitNamespace?: string,\n): { namespace: string; erdSite: string | undefined } {\n const namespace = explicitNamespace ?? Object.keys(config.db ?? {})[0];\n\n if (!namespace) {\n throw new Error(\n \"No TailorDB namespaces found in config. Please define db services in tailor.config.ts or pass --namespace.\",\n );\n }\n\n const dbConfig = config.db?.[namespace];\n\n if (!dbConfig || typeof dbConfig !== \"object\" || \"external\" in dbConfig) {\n throw new Error(`TailorDB namespace \"${namespace}\" not found in config.db.`);\n }\n\n return { namespace, erdSite: dbConfig.erdSite };\n}\n\ntype ResolveNamespacesOptions = {\n requireErdSite?: boolean;\n};\n\n/**\n * Get all namespaces from config.\n * @param config - Loaded Tailor SDK config.\n * @param options - Options for filtering namespaces.\n * @returns All namespaces with optional erdSite.\n */\nfunction resolveAllNamespaces(\n config: AppConfig,\n options?: ResolveNamespacesOptions,\n): Array<{ namespace: string; erdSite: string | undefined }> {\n const results: Array<{ namespace: string; erdSite: string | undefined }> = [];\n\n for (const [namespace, dbConfig] of Object.entries(config.db ?? {})) {\n if (dbConfig && !(\"external\" in dbConfig) && !(options?.requireErdSite && !dbConfig.erdSite)) {\n results.push({ namespace, erdSite: dbConfig.erdSite });\n }\n }\n\n return results;\n}\n\n/**\n * Run the liam CLI to build an ERD static site from a schema file.\n * @param schemaPath - Path to the ERD schema JSON file\n * @param cwd - Working directory where liam will run (dist is created here)\n * @returns Resolves when the build completes successfully\n */\nasync function runLiamBuild(schemaPath: string, cwd: string): Promise<void> {\n fs.mkdirSync(cwd, { recursive: true });\n\n return await new Promise<void>((resolve, reject) => {\n let liamBinPath: string;\n try {\n liamBinPath = resolveCliBinPath({\n packageName: \"@liam-hq/cli\",\n binName: \"liam\",\n });\n } catch (error) {\n logger.error(String(error));\n reject(error);\n return;\n }\n\n const child = spawn(\n process.execPath,\n [liamBinPath, \"erd\", \"build\", \"--format\", \"tbls\", \"--input\", schemaPath],\n {\n stdio: [\"pipe\", \"ignore\", \"pipe\"],\n cwd,\n },\n );\n\n let stderrOutput = \"\";\n child.stderr?.on(\"data\", (data: Buffer) => {\n stderrOutput += data.toString();\n });\n\n child.on(\"error\", (error) => {\n logger.error(\"Failed to run `@liam-hq/cli`.\");\n reject(error);\n });\n\n child.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n if (stderrOutput) {\n logger.error(stderrOutput);\n }\n logger.error(\n \"liam CLI exited with a non-zero code. Ensure `@liam-hq/cli erd build --format tbls --input schema.json` works in your project.\",\n );\n reject(new Error(`liam CLI exited with code ${code ?? 1}`));\n }\n });\n });\n}\n\ntype ErdBuildOptions = TailorDBSchemaOptions & {\n outputPath: string;\n erdDir: string;\n};\n\ntype ErdBuildsOptions = {\n client: OperatorClient;\n workspaceId: string;\n config: AppConfig;\n namespace?: string;\n outputDir?: string;\n requireErdSite?: boolean;\n};\n\n/**\n * Export TailorDB schema and build ERD artifacts via liam.\n * @param options - Build options.\n */\nasync function prepareErdBuild(options: ErdBuildOptions): Promise<void> {\n await writeTblsSchemaToFile(options);\n\n await runLiamBuild(options.outputPath, options.erdDir);\n\n const distDir = path.join(options.erdDir, \"dist\");\n const relativePath = path.relative(process.cwd(), distDir);\n logger.success(`Built ERD to ${relativePath}`);\n}\n\nexport interface ErdBuildResult {\n namespace: string;\n erdSite?: string;\n schemaOutputPath: string;\n distDir: string;\n erdDir: string;\n}\n\n/**\n * Prepare ERD builds for one or more namespaces.\n * @param options - Build options.\n * @returns Build results by namespace.\n */\nexport async function prepareErdBuilds(options: ErdBuildsOptions): Promise<ErdBuildResult[]> {\n const { client, workspaceId, config } = options;\n const baseDir = options.outputDir ?? path.resolve(process.cwd(), DEFAULT_ERD_BASE_DIR);\n let targets: ErdBuildResult[];\n\n if (options.namespace) {\n const { namespace, erdSite } = resolveDbConfig(config, options.namespace);\n if (options.requireErdSite && !erdSite) {\n throw new Error(\n `No erdSite configured for namespace \"${namespace}\". ` +\n `Add erdSite: \"<static-website-name>\" to db.${namespace} in tailor.config.ts.`,\n );\n }\n const erdDir = path.join(baseDir, namespace);\n targets = [\n {\n namespace,\n erdSite,\n schemaOutputPath: path.join(erdDir, \"schema.json\"),\n distDir: path.join(erdDir, \"dist\"),\n erdDir,\n },\n ];\n } else {\n const namespaces = resolveAllNamespaces(config, { requireErdSite: options.requireErdSite });\n if (namespaces.length === 0) {\n throw new Error(\n options.requireErdSite\n ? \"No namespaces with erdSite configured found. \" +\n 'Add erdSite: \"<static-website-name>\" to db.<namespace> in tailor.config.ts.'\n : \"No TailorDB namespaces found in config. Please define db services in tailor.config.ts.\",\n );\n }\n logger.info(\n `Found ${namespaces.length} namespace(s)${options.requireErdSite ? \" with erdSite configured\" : \"\"}.`,\n );\n targets = namespaces.map(({ namespace, erdSite }) => {\n const erdDir = path.join(baseDir, namespace);\n return {\n namespace,\n erdSite,\n schemaOutputPath: path.join(erdDir, \"schema.json\"),\n distDir: path.join(erdDir, \"dist\"),\n erdDir,\n };\n });\n }\n\n await Promise.all(\n targets.map((target) =>\n prepareErdBuild({\n namespace: target.namespace,\n client,\n workspaceId,\n outputPath: target.schemaOutputPath,\n erdDir: target.erdDir,\n }),\n ),\n );\n\n return targets;\n}\n\nexport const erdExportCommand = defineAppCommand({\n name: \"export\",\n description: \"Export Liam ERD dist from applied TailorDB schema.\",\n args: z\n .object({\n ...deploymentArgs,\n namespace: arg(z.string().optional(), {\n alias: \"n\",\n description:\n \"TailorDB namespace name (optional if only one namespace is defined in config)\",\n }),\n output: arg(z.string().default(DEFAULT_ERD_BASE_DIR), {\n alias: \"o\",\n description:\n \"Output directory path for tbls-compatible ERD JSON (writes to `<outputDir>/<namespace>/schema.json`)\",\n completion: { type: \"directory\" },\n }),\n })\n .strict(),\n run: async (args) => {\n const { client, workspaceId, config } = await initErdContext(args);\n const outputDir = path.resolve(process.cwd(), String(args.output));\n\n const results = await prepareErdBuilds({\n client,\n workspaceId,\n config,\n namespace: args.namespace,\n outputDir,\n });\n\n logger.newline();\n if (args.json) {\n logger.out(\n results.map((result) => ({\n namespace: result.namespace,\n distDir: result.distDir,\n schemaOutputPath: result.schemaOutputPath,\n })),\n );\n } else {\n for (const result of results) {\n logger.out(`Exported ERD for namespace \"${result.namespace}\"`);\n logger.out(` - Liam ERD dist: ${result.distDir}`);\n logger.out(` - tbls schema.json: ${result.schemaOutputPath}`);\n }\n }\n },\n});\n","import { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { deploymentArgs } from \"@/cli/shared/args\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { deployStaticWebsite, logSkippedFiles } from \"../../staticwebsite/deploy\";\nimport { prepareErdBuilds } from \"./export\";\nimport { initErdContext } from \"./utils\";\n\nexport const erdDeployCommand = defineAppCommand({\n name: \"deploy\",\n description: \"Deploy ERD static website for TailorDB namespace(s).\",\n args: z\n .object({\n ...deploymentArgs,\n namespace: arg(z.string().optional(), {\n alias: \"n\",\n description:\n \"TailorDB namespace name (optional - deploys all namespaces with erdSite if omitted)\",\n }),\n })\n .strict(),\n run: async (args) => {\n const { client, workspaceId, config } = await initErdContext(args);\n const buildResults = await prepareErdBuilds({\n client,\n workspaceId,\n config,\n namespace: args.namespace,\n requireErdSite: true,\n });\n\n const deployResults = await Promise.all(\n buildResults.map(async (result) => {\n if (!result.erdSite) {\n throw new Error(\n `No erdSite configured for namespace \"${result.namespace}\". ` +\n `Add erdSite: \"<static-website-name>\" to db.${result.namespace} in tailor.config.ts.`,\n );\n }\n\n if (!args.json) {\n logger.info(\n `Deploying ERD for namespace \"${result.namespace}\" to site \"${result.erdSite}\"...`,\n );\n }\n\n const { url, skippedFiles } = await deployStaticWebsite(\n client,\n workspaceId,\n result.erdSite,\n result.distDir,\n !args.json,\n );\n\n return {\n namespace: result.namespace,\n erdSite: result.erdSite,\n url,\n skippedFiles,\n };\n }),\n );\n logger.newline();\n\n if (args.json) {\n logger.out(deployResults);\n } else {\n for (const result of deployResults) {\n logSkippedFiles(result.skippedFiles);\n logger.newline();\n logger.success(`ERD site \"${result.erdSite}\" deployed successfully.`);\n logger.out(result.url);\n }\n }\n },\n});\n","import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { deploymentArgs } from \"@/cli/shared/args\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { resolveCliBinPath } from \"@/cli/shared/resolve-cli-bin\";\nimport { prepareErdBuilds, type ErdBuildResult } from \"./export\";\nimport { initErdContext } from \"./utils\";\n\nfunction formatServeCommand(namespace: string): string {\n return `tailor-sdk tailordb erd serve --namespace ${namespace}`;\n}\n\nasync function runServeDist(results: ErdBuildResult[]): Promise<void> {\n if (results.length === 0) {\n throw new Error(\"No ERD build results found.\");\n }\n\n const [primary, ...rest] = results;\n\n logger.info(`Serving ERD for namespace \"${primary.namespace}\".`);\n if (rest.length > 0) {\n const commands = rest.map((result) => ` - ${formatServeCommand(result.namespace)}`).join(\"\\n\");\n logger.warn(`Multiple namespaces found. To serve another namespace, run:\\n${commands}`);\n }\n\n fs.mkdirSync(primary.erdDir, { recursive: true });\n\n return await new Promise<void>((resolve, reject) => {\n let serveBinPath: string;\n try {\n serveBinPath = resolveCliBinPath({\n packageName: \"serve\",\n binName: \"serve\",\n });\n } catch (error) {\n logger.error(String(error));\n reject(error);\n return;\n }\n\n const child = spawn(process.execPath, [serveBinPath, \"dist\"], {\n stdio: \"inherit\",\n cwd: primary.erdDir,\n });\n\n child.on(\"error\", (error) => {\n logger.error(\"Failed to run `serve dist`.\");\n reject(error);\n });\n\n child.on(\"exit\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n logger.error(\n \"serve CLI exited with a non-zero code. Ensure `serve dist` works in your project.\",\n );\n reject(new Error(`serve CLI exited with code ${code ?? 1}`));\n }\n });\n });\n}\n\nexport const erdServeCommand = defineAppCommand({\n name: \"serve\",\n description: \"Generate and serve ERD locally (liam build + serve dist). (beta)\",\n args: z\n .object({\n ...deploymentArgs,\n namespace: arg(z.string().optional(), {\n alias: \"n\",\n description: \"TailorDB namespace name (uses first namespace in config if not specified)\",\n }),\n })\n .strict(),\n run: async (args) => {\n const { client, workspaceId, config } = await initErdContext(args);\n\n const results = await prepareErdBuilds({\n client,\n workspaceId,\n config,\n namespace: args.namespace,\n });\n\n await runServeDist(results);\n },\n});\n","import { defineCommand } from \"politty\";\nimport { erdDeployCommand } from \"./deploy\";\nimport { erdExportCommand } from \"./export\";\nimport { erdServeCommand } from \"./serve\";\n\nexport const erdCommand = defineCommand({\n name: \"erd\",\n description: \"Generate ERD artifacts for TailorDB namespaces using Liam ERD. (beta)\",\n subCommands: {\n export: erdExportCommand,\n serve: erdServeCommand,\n deploy: erdDeployCommand,\n },\n});\n","import * as path from \"pathe\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { trnPrefix } from \"@/cli/commands/apply/label\";\nimport { confirmationArgs, deploymentArgs } from \"@/cli/shared/args\";\nimport { logBetaWarning } from \"@/cli/shared/beta\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadConfig } from \"@/cli/shared/config-loader\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { prompt } from \"@/cli/shared/prompt\";\nimport { getNamespacesWithMigrations } from \"./config\";\nimport { formatMigrationNumber, isValidMigrationNumber } from \"./snapshot\";\nimport { parseMigrationLabelNumber } from \"./types\";\n\nexport interface SetOptions {\n configPath?: string;\n number: string;\n namespace?: string;\n yes?: boolean;\n workspaceId?: string;\n profile?: string;\n}\n\n/**\n * Set migration checkpoint for a TailorDB namespace\n * @param {SetOptions} options - Command options\n */\nasync function set(options: SetOptions): Promise<void> {\n logBetaWarning(\"tailordb migration\");\n\n // 1. Validate migration number format\n const numberStr = options.number;\n\n // Accept either 4-digit format (0001) or integer (1)\n let migrationNumber: number;\n if (isValidMigrationNumber(numberStr)) {\n // 4-digit format\n migrationNumber = parseInt(numberStr, 10);\n } else {\n // Try parsing as integer\n migrationNumber = parseInt(numberStr, 10);\n if (isNaN(migrationNumber) || migrationNumber < 0) {\n throw new Error(\n `Invalid migration number format: ${numberStr}. Expected 4-digit format (e.g., 0001) or integer (e.g., 1).`,\n );\n }\n }\n\n // 2. Load configuration\n const { config } = await loadConfig(options.configPath);\n const configDir = path.dirname(config.path);\n\n // 3. Get namespaces with migrations\n const namespacesWithMigrations = getNamespacesWithMigrations(config, configDir);\n\n if (namespacesWithMigrations.length === 0) {\n throw new Error(\"No TailorDB services with migrations configuration found\");\n }\n\n // 4. Determine target namespace\n let targetNamespace: string;\n if (options.namespace) {\n if (!namespacesWithMigrations.some((ns) => ns.namespace === options.namespace)) {\n throw new Error(\n `Namespace \"${options.namespace}\" not found or does not have migrations configured`,\n );\n }\n targetNamespace = options.namespace;\n } else if (namespacesWithMigrations.length === 1) {\n targetNamespace = namespacesWithMigrations[0].namespace;\n } else {\n throw new Error(\n `Multiple TailorDB services found. Please specify namespace with --namespace flag: ${namespacesWithMigrations.map((ns) => ns.namespace).join(\", \")}`,\n );\n }\n\n // 5. Initialize client\n const accessToken = await loadAccessToken({\n useProfile: false,\n profile: options.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options.workspaceId,\n profile: options.profile,\n });\n\n // 6. Get current migration number\n const trn = `${trnPrefix(workspaceId)}:tailordb:${targetNamespace}`;\n let currentMigration: number;\n try {\n const { metadata } = await client.getMetadata({ trn });\n const label = metadata?.labels?.[\"sdk-migration\"];\n currentMigration = label ? (parseMigrationLabelNumber(label) ?? 0) : 0;\n } catch {\n currentMigration = 0;\n }\n\n // 7. Display warning and confirmation\n logger.newline();\n logger.warn(\"This operation will change the migration checkpoint.\");\n logger.log(`Namespace: ${styles.bold(targetNamespace)}`);\n logger.log(`Current migration: ${styles.bold(formatMigrationNumber(currentMigration))}`);\n logger.log(`New migration: ${styles.bold(formatMigrationNumber(migrationNumber))}`);\n logger.newline();\n\n if (migrationNumber < currentMigration) {\n logger.warn(\n `Setting migration number backwards (${formatMigrationNumber(currentMigration)} → ${formatMigrationNumber(migrationNumber)}) will cause previous migrations to be re-executed on next apply.`,\n );\n logger.newline();\n } else if (migrationNumber > currentMigration) {\n logger.warn(\n `Setting migration number forwards (${formatMigrationNumber(currentMigration)} → ${formatMigrationNumber(migrationNumber)}) will skip migrations ${formatMigrationNumber(currentMigration + 1)} to ${formatMigrationNumber(migrationNumber)}.`,\n );\n logger.newline();\n }\n\n // 8. Confirmation prompt (unless --yes flag)\n if (!options.yes) {\n const confirmation = await prompt.confirm({\n message: \"Continue with migration checkpoint update?\",\n default: false,\n });\n\n if (!confirmation) {\n logger.info(\"Operation cancelled.\");\n return;\n }\n logger.newline();\n }\n\n // 9. Update migration label\n const { metadata } = await client.getMetadata({ trn });\n const existingLabels = metadata?.labels ?? {};\n\n await client.setMetadata({\n trn,\n labels: {\n ...existingLabels,\n \"sdk-migration\": `m${formatMigrationNumber(migrationNumber)}`,\n },\n });\n\n logger.success(\n `Migration checkpoint set to ${styles.bold(formatMigrationNumber(migrationNumber))} for namespace ${styles.bold(targetNamespace)}`,\n );\n}\n\nexport const setCommand = defineAppCommand({\n name: \"set\",\n description: \"Set migration checkpoint to a specific number.\",\n args: z\n .object({\n ...deploymentArgs,\n ...confirmationArgs,\n number: arg(z.string(), {\n positional: true,\n description: \"Migration number to set (e.g., 0001 or 1)\",\n }),\n namespace: arg(z.string().optional(), {\n alias: \"n\",\n description: \"Target TailorDB namespace (required if multiple namespaces exist)\",\n }),\n })\n .strict(),\n run: async (args) => {\n await set({\n configPath: args.config,\n number: args.number,\n namespace: args.namespace,\n yes: args.yes,\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n },\n});\n","import * as fs from \"node:fs\";\nimport * as path from \"pathe\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { trnPrefix } from \"@/cli/commands/apply/label\";\nimport { deploymentArgs } from \"@/cli/shared/args\";\nimport { logBetaWarning } from \"@/cli/shared/beta\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { loadConfig } from \"@/cli/shared/config-loader\";\nimport { loadAccessToken, loadWorkspaceId } from \"@/cli/shared/context\";\nimport { logger, styles } from \"@/cli/shared/logger\";\nimport { getNamespacesWithMigrations } from \"./config\";\nimport {\n getMigrationFiles,\n loadDiff,\n getMigrationFilePath,\n formatMigrationNumber,\n} from \"./snapshot\";\nimport { parseMigrationLabelNumber } from \"./types\";\n\nexport interface StatusOptions {\n configPath?: string;\n namespace?: string;\n workspaceId?: string;\n profile?: string;\n}\n\n/**\n * Show migration status for TailorDB namespaces\n * @param {StatusOptions} options - Command options\n */\nasync function status(options: StatusOptions): Promise<void> {\n logBetaWarning(\"tailordb migration\");\n\n // 1. Load configuration\n const { config } = await loadConfig(options.configPath);\n const configDir = path.dirname(config.path);\n\n // 2. Get namespaces with migrations\n const namespacesWithMigrations = getNamespacesWithMigrations(config, configDir);\n\n if (namespacesWithMigrations.length === 0) {\n throw new Error(\"No TailorDB services with migrations configuration found\");\n }\n\n // 3. Filter by namespace if specified\n const targetNamespaces = options.namespace\n ? namespacesWithMigrations.filter((ns) => ns.namespace === options.namespace)\n : namespacesWithMigrations;\n\n if (targetNamespaces.length === 0) {\n throw new Error(\n `Namespace \"${options.namespace}\" not found or does not have migrations configured`,\n );\n }\n\n // 4. Initialize client\n const accessToken = await loadAccessToken({\n useProfile: false,\n profile: options.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options.workspaceId,\n profile: options.profile,\n });\n\n // 5. Display status for each namespace\n for (const { namespace, migrationsDir } of targetNamespaces) {\n // Get current migration number\n const trn = `${trnPrefix(workspaceId)}:tailordb:${namespace}`;\n let currentMigration: number;\n try {\n const { metadata } = await client.getMetadata({ trn });\n const label = metadata?.labels?.[\"sdk-migration\"];\n currentMigration = label ? (parseMigrationLabelNumber(label) ?? 0) : 0;\n } catch {\n currentMigration = 0;\n }\n\n // Get available migrations\n const migrationFiles = getMigrationFiles(migrationsDir);\n const availableNumbers = migrationFiles\n .map((f) => f.number)\n .filter((n, i, arr) => arr.indexOf(n) === i) // deduplicate\n .sort((a, b) => a - b);\n const pendingNumbers = availableNumbers.filter((n) => n > currentMigration);\n\n // Display\n logger.newline();\n logger.info(`Namespace: ${styles.bold(namespace)}`);\n logger.log(` Current migration: ${styles.bold(formatMigrationNumber(currentMigration))}`);\n\n if (pendingNumbers.length > 0) {\n logger.log(\" Pending migrations:\");\n for (const num of pendingNumbers) {\n const diffPath = getMigrationFilePath(migrationsDir, num, \"diff\");\n let description: string | undefined;\n\n if (fs.existsSync(diffPath)) {\n try {\n const diff = loadDiff(diffPath);\n description = diff.description;\n } catch {\n // Ignore errors loading diff\n }\n }\n\n if (description) {\n logger.log(` - ${formatMigrationNumber(num)}: ${description}`);\n } else {\n logger.log(` - ${formatMigrationNumber(num)}`);\n }\n }\n } else {\n logger.log(\" Pending migrations: (none)\");\n }\n }\n\n logger.newline();\n}\n\nexport const statusCommand = defineAppCommand({\n name: \"status\",\n description:\n \"Show the current migration status for TailorDB namespaces, including applied and pending migrations.\",\n args: z\n .object({\n ...deploymentArgs,\n namespace: arg(z.string().optional(), {\n alias: \"n\",\n description: \"Target TailorDB namespace (shows all namespaces if not specified)\",\n }),\n })\n .strict(),\n run: async (args) => {\n await status({\n configPath: args.config,\n namespace: args.namespace,\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n },\n});\n","/**\n * TailorDB migration command\n *\n * Subcommands:\n * - generate: Generate migration files from schema differences\n * - set: Set migration checkpoint to a specific number\n * - status: Show migration status for TailorDB namespaces\n */\n\nimport { defineCommand } from \"politty\";\nimport { generateCommand } from \"./generate\";\nimport { setCommand } from \"./set\";\nimport { statusCommand } from \"./status\";\n\nexport const migrationCommand = defineCommand({\n name: \"migration\",\n description: \"Manage TailorDB schema migrations.\",\n subCommands: {\n generate: generateCommand,\n set: setCommand,\n status: statusCommand,\n },\n});\n\nexport { generateCommand } from \"./generate\";\nexport type { GenerateOptions } from \"./generate\";\nexport { setCommand } from \"./set\";\nexport type { SetOptions } from \"./set\";\nexport { statusCommand } from \"./status\";\nexport type { StatusOptions } from \"./status\";\n","import { defineCommand } from \"politty\";\nimport { erdCommand } from \"./erd\";\nimport { migrationCommand } from \"./migrate\";\nimport { truncateCommand } from \"./truncate\";\n\nexport const tailordbCommand = defineCommand({\n name: \"tailordb\",\n description: \"Manage TailorDB tables and data.\",\n subCommands: {\n erd: erdCommand,\n migration: migrationCommand,\n truncate: truncateCommand,\n },\n});\n","import ml from \"multiline-ts\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const currentCommand = defineAppCommand({\n name: \"current\",\n description: \"Show current user.\",\n args: z.object({}).strict(),\n run: async () => {\n const config = readPlatformConfig();\n\n // Check if current user is set\n if (!config.current_user) {\n throw new Error(ml`\n Current user not set.\n Please login first using 'tailor-sdk login' command to register a user.\n `);\n }\n\n // Check if user exists\n if (!config.users[config.current_user]) {\n throw new Error(ml`\n Current user '${config.current_user}' not found in registered users.\n Please login again using 'tailor-sdk login' command to register the user.\n `);\n }\n\n logger.log(config.current_user);\n },\n});\n","import ml from \"multiline-ts\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List all users.\",\n args: z.object({}).strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n const users = Object.keys(config.users);\n if (users.length === 0) {\n logger.info(ml`\n No users found.\n Please login first using 'tailor-sdk login' command to register a user.\n `);\n return;\n }\n\n if (args.json) {\n logger.out(users);\n return;\n }\n\n users.forEach((user) => {\n if (user === config.current_user) {\n logger.success(`${user} (current)`, { mode: \"plain\" });\n } else {\n logger.log(user);\n }\n });\n },\n});\n","import { PATScope } from \"@tailor-proto/tailor/v1/auth_resource_pb\";\nimport ml from \"multiline-ts\";\nimport { logger } from \"@/cli/shared/logger\";\nimport type { PersonalAccessToken } from \"@tailor-proto/tailor/v1/auth_resource_pb\";\n\nexport interface PersonalAccessTokenInfo {\n name: string;\n scopes: string[];\n}\n\nfunction patScopeToString(scope: PATScope): string {\n switch (scope) {\n case PATScope.PAT_SCOPE_READ:\n return \"read\";\n case PATScope.PAT_SCOPE_WRITE:\n return \"write\";\n default:\n return \"unknown\";\n }\n}\n\n/**\n * Transform a PersonalAccessToken into CLI-friendly info.\n * @param pat - Personal access token resource\n * @returns Flattened token info\n */\nexport function transformPersonalAccessToken(pat: PersonalAccessToken): PersonalAccessTokenInfo {\n return {\n name: pat.name,\n scopes: pat.scopes.map(patScopeToString),\n };\n}\n\n/**\n * Get PAT scopes from a write flag.\n * @param write - Whether write access is required\n * @returns Scopes to apply to the token\n */\nexport function getScopesFromWriteFlag(write: boolean): PATScope[] {\n return write ? [PATScope.PAT_SCOPE_READ, PATScope.PAT_SCOPE_WRITE] : [PATScope.PAT_SCOPE_READ];\n}\n\nfunction getScopeStringsFromWriteFlag(write: boolean): string[] {\n return write ? [\"read\", \"write\"] : [\"read\"];\n}\n\n/**\n * Print the created or updated personal access token to the logger.\n * @param name - Token name\n * @param token - Token value\n * @param write - Whether the token has write scope\n * @param action - Action performed\n */\nexport function printCreatedToken(\n name: string,\n token: string,\n write: boolean,\n action: \"created\" | \"updated\",\n): void {\n const scopes = getScopeStringsFromWriteFlag(write);\n\n if (logger.jsonMode) {\n logger.out({ name, scopes, token });\n } else {\n logger.log(ml`\n Personal access token ${action} successfully.\n\n name: ${name}\n scopes: ${scopes.join(\"/\")}\n token: ${token}\n\n Please save this token in a secure location. You won't be able to see it again.\n `);\n }\n}\n","import ml from \"multiline-ts\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig } from \"@/cli/shared/context\";\nimport { getScopesFromWriteFlag, printCreatedToken } from \"./transform\";\n\nexport const createCommand = defineAppCommand({\n name: \"create\",\n description: \"Create a new personal access token.\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Token name\",\n }),\n write: arg(z.boolean().default(false), {\n alias: \"W\",\n description: \"Grant write permission (default: read-only)\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n if (!config.current_user) {\n throw new Error(ml`\n No user logged in.\n Please login first using 'tailor-sdk login' command.\n `);\n }\n\n const token = await fetchLatestToken(config, config.current_user);\n const client = await initOperatorClient(token);\n\n const scopes = getScopesFromWriteFlag(args.write);\n const result = await client.createPersonalAccessToken({\n name: args.name,\n scopes,\n });\n\n if (!result.accessToken) {\n throw new Error(\"Failed to create personal access token\");\n }\n\n printCreatedToken(args.name, result.accessToken, args.write, \"created\");\n },\n});\n","import ml from \"multiline-ts\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const deleteCommand = defineAppCommand({\n name: \"delete\",\n description: \"Delete a personal access token.\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Token name\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n if (!config.current_user) {\n throw new Error(ml`\n No user logged in.\n Please login first using 'tailor-sdk login' command.\n `);\n }\n\n const token = await fetchLatestToken(config, config.current_user);\n const client = await initOperatorClient(token);\n\n await client.deletePersonalAccessToken({\n name: args.name,\n });\n\n logger.success(`Personal access token \"${args.name}\" deleted successfully.`);\n },\n});\n","import ml from \"multiline-ts\";\nimport { z } from \"zod\";\nimport { fetchAll, initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\nimport { transformPersonalAccessToken, type PersonalAccessTokenInfo } from \"./transform\";\n\nexport const listCommand = defineAppCommand({\n name: \"list\",\n description: \"List all personal access tokens.\",\n args: z.object({}).strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n if (!config.current_user) {\n throw new Error(ml`\n No user logged in.\n Please login first using 'tailor-sdk login' command.\n `);\n }\n\n const token = await fetchLatestToken(config, config.current_user);\n const client = await initOperatorClient(token);\n\n const pats = await fetchAll(async (pageToken, maxPageSize) => {\n const { personalAccessTokens, nextPageToken } = await client.listPersonalAccessTokens({\n pageToken,\n pageSize: maxPageSize,\n });\n return [personalAccessTokens, nextPageToken];\n });\n\n if (pats.length === 0 && !args.json) {\n logger.info(ml`\n No personal access tokens found.\n Please create a token using 'tailor-sdk user pat create' command.\n `);\n return;\n }\n\n const patInfos: PersonalAccessTokenInfo[] = pats.map(transformPersonalAccessToken);\n if (args.json) {\n logger.out(patInfos);\n return;\n }\n\n if (pats.length === 0) {\n return;\n }\n\n // Text format: aligned list \"name: scope1/scope2\"\n const maxNameLength = Math.max(...pats.map((pat) => pat.name.length));\n\n pats.forEach((pat) => {\n const info = transformPersonalAccessToken(pat);\n const paddedName = info.name.padStart(maxNameLength);\n logger.log(`${paddedName}: ${info.scopes.join(\"/\")}`);\n });\n },\n});\n","import ml from \"multiline-ts\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { initOperatorClient } from \"@/cli/shared/client\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { fetchLatestToken, readPlatformConfig } from \"@/cli/shared/context\";\nimport { getScopesFromWriteFlag, printCreatedToken } from \"./transform\";\n\nexport const updateCommand = defineAppCommand({\n name: \"update\",\n description: \"Update a personal access token (delete and recreate).\",\n args: z\n .object({\n name: arg(z.string(), {\n positional: true,\n description: \"Token name\",\n }),\n write: arg(z.boolean().default(false), {\n alias: \"W\",\n description: \"Grant write permission (if not specified, keeps read-only)\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n if (!config.current_user) {\n throw new Error(ml`\n No user logged in.\n Please login first using 'tailor-sdk login' command.\n `);\n }\n\n const token = await fetchLatestToken(config, config.current_user);\n const client = await initOperatorClient(token);\n\n // Delete the existing token\n await client.deletePersonalAccessToken({\n name: args.name,\n });\n\n // Create a new token with the same name\n const scopes = getScopesFromWriteFlag(args.write);\n const result = await client.createPersonalAccessToken({\n name: args.name,\n scopes,\n });\n\n if (!result.accessToken) {\n throw new Error(\"Failed to create personal access token\");\n }\n\n printCreatedToken(args.name, result.accessToken, args.write, \"updated\");\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\nimport { updateCommand } from \"./update\";\n\nexport const patCommand = defineCommand({\n name: \"pat\",\n description: \"Manage personal access tokens.\",\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n update: updateCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import ml from \"multiline-ts\";\nimport { arg } from \"politty\";\nimport { z } from \"zod\";\nimport { defineAppCommand } from \"@/cli/shared/command\";\nimport { readPlatformConfig, writePlatformConfig } from \"@/cli/shared/context\";\nimport { logger } from \"@/cli/shared/logger\";\n\nexport const switchCommand = defineAppCommand({\n name: \"switch\",\n description: \"Set current user.\",\n args: z\n .object({\n user: arg(z.string(), {\n positional: true,\n description: \"User email\",\n }),\n })\n .strict(),\n run: async (args) => {\n const config = readPlatformConfig();\n\n // Check if user exists\n if (!config.users[args.user]) {\n throw new Error(ml`\n User \"${args.user}\" not found.\n Please login first using 'tailor-sdk login' command to register this user.\n `);\n }\n\n // Set current user\n config.current_user = args.user;\n writePlatformConfig(config);\n\n logger.success(`Current user set to \"${args.user}\" successfully.`);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { currentCommand } from \"./current\";\nimport { listCommand } from \"./list\";\nimport { patCommand } from \"./pat\";\nimport { switchCommand } from \"./switch\";\n\nexport const userCommand = defineCommand({\n name: \"user\",\n description: \"Manage Tailor Platform users.\",\n subCommands: {\n current: currentCommand,\n list: listCommand,\n pat: patCommand,\n switch: switchCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { executionsCommand } from \"./executions\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\nimport { resumeCommand } from \"./resume\";\nimport { startCommand } from \"./start\";\n\nexport const workflowCommand = defineCommand({\n name: \"workflow\",\n description: \"Manage workflows and workflow executions.\",\n subCommands: {\n list: listCommand,\n get: getCommand,\n start: startCommand,\n executions: executionsCommand,\n resume: resumeCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { healthCommand } from \"./health\";\nimport { listCommand } from \"./list\";\n\nexport const appCommand = defineCommand({\n name: \"app\",\n description: \"Manage workspace applications\",\n subCommands: {\n health: healthCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { inviteCommand } from \"./invite\";\nimport { listCommand } from \"./list\";\nimport { removeCommand } from \"./remove\";\nimport { updateCommand } from \"./update\";\n\nexport const userCommand = defineCommand({\n name: \"user\",\n description: \"Manage workspace users\",\n subCommands: {\n invite: inviteCommand,\n list: listCommand,\n remove: removeCommand,\n update: updateCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","import { defineCommand, runCommand } from \"politty\";\nimport { appCommand } from \"./app\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\nimport { restoreCommand } from \"./restore\";\nimport { userCommand } from \"./user\";\n\nexport const workspaceCommand = defineCommand({\n name: \"workspace\",\n description: \"Manage Tailor Platform workspaces.\",\n subCommands: {\n app: appCommand,\n create: createCommand,\n delete: deleteCommand,\n get: getCommand,\n list: listCommand,\n restore: restoreCommand,\n user: userCommand,\n },\n async run() {\n await runCommand(listCommand, []);\n },\n});\n","#!/usr/bin/env node\n\nimport { register } from \"node:module\";\nimport { defineCommand, runMain } from \"politty\";\nimport { withCompletionCommand } from \"politty/completion\";\nimport { z } from \"zod\";\nimport { apiCommand } from \"./commands/api\";\nimport { applyCommand } from \"./commands/apply\";\nimport { crashReportCommand } from \"./commands/crash-report\";\nimport { executorCommand } from \"./commands/executor\";\nimport { functionCommand } from \"./commands/function\";\nimport { generateCommand } from \"./commands/generate\";\nimport { initCommand } from \"./commands/init\";\nimport { loginCommand } from \"./commands/login\";\nimport { logoutCommand } from \"./commands/logout\";\nimport { machineuserCommand } from \"./commands/machineuser\";\nimport { oauth2clientCommand } from \"./commands/oauth2client\";\nimport { openCommand } from \"./commands/open\";\nimport { profileCommand } from \"./commands/profile\";\nimport { removeCommand } from \"./commands/remove\";\nimport { secretCommand } from \"./commands/secret\";\nimport { setupCommand } from \"./commands/setup\";\nimport { showCommand } from \"./commands/show\";\nimport { staticwebsiteCommand } from \"./commands/staticwebsite\";\nimport { tailordbCommand } from \"./commands/tailordb\";\nimport { userCommand } from \"./commands/user\";\nimport { workflowCommand } from \"./commands/workflow\";\nimport { workspaceCommand } from \"./commands/workspace\";\nimport { initCrashReporting } from \"./crash-report\";\nimport { queryCommand } from \"./query\";\nimport { commonArgs, isVerbose } from \"./shared/args\";\nimport { isCLIError } from \"./shared/errors\";\nimport { logger } from \"./shared/logger\";\nimport { readPackageJson } from \"./shared/package-json\";\n\nregister(\"tsx\", import.meta.url, { data: {} });\n\n// Runs before globalArgs effects load --env-file, so env file overrides for\n// TAILOR_CRASH_REPORTS_* are not available for early startup failures.\n// This is intentional: we want crash reporting active before argument parsing,\n// and env files require parsing to be complete. Shell-level env vars still work.\ninitCrashReporting();\n\nconst packageJson = await readPackageJson();\nconst cliName = Object.keys(packageJson.bin ?? {})[0] || \"tailor-sdk\";\n\nexport const mainCommand = withCompletionCommand(\n defineCommand({\n name: cliName,\n description:\n packageJson.description || \"Tailor CLI for managing Tailor Platform SDK applications\",\n subCommands: {\n api: apiCommand,\n apply: applyCommand,\n \"crash-report\": crashReportCommand,\n executor: executorCommand,\n function: functionCommand,\n generate: generateCommand,\n init: initCommand,\n login: loginCommand,\n logout: logoutCommand,\n machineuser: machineuserCommand,\n oauth2client: oauth2clientCommand,\n open: openCommand,\n profile: profileCommand,\n query: queryCommand,\n remove: removeCommand,\n secret: secretCommand,\n setup: setupCommand,\n show: showCommand,\n staticwebsite: staticwebsiteCommand,\n tailordb: tailordbCommand,\n user: userCommand,\n workflow: workflowCommand,\n workspace: workspaceCommand,\n },\n }),\n);\n\nrunMain(mainCommand, {\n version: packageJson.version,\n globalArgs: z.object(commonArgs),\n cleanup: async ({ error }) => {\n if (error) {\n if (isCLIError(error)) {\n logger.log(error.format());\n if (isVerbose() && error.stack) {\n logger.debug(`\\nStack trace:\\n${error.stack}`);\n }\n } else if (error instanceof Error) {\n logger.error(error.message);\n if (isVerbose() && error.stack) {\n logger.debug(`\\nStack trace:\\n${error.stack}`);\n }\n } else {\n logger.error(`Unknown error: ${error}`);\n }\n\n // Report programming bugs (native error types that indicate code defects).\n // Skip domain errors like ConnectError, CIPromptError, and plain Error\n // used for user-facing validation/not-found messages.\n // Exclude SyntaxError/ReferenceError: at runtime these typically come from\n // dynamically imported user config files, not from SDK code.\n const shouldReport =\n !isCLIError(error) &&\n (!(error instanceof Error) || error instanceof TypeError || error instanceof RangeError);\n if (shouldReport) {\n // Lazy import to match shutdownTelemetry pattern and keep cleanup handler lightweight.\n const { reportCrash } = await import(\"@/cli/crash-report\");\n await reportCrash(error, \"handledError\");\n }\n }\n const { shutdownTelemetry } = await import(\"@/cli/telemetry\");\n await shutdownTelemetry();\n },\n});\n"],"mappings":"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"}
|