@tailor-platform/sdk 0.20.0 → 0.21.2
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 +20 -0
- package/dist/cli/api.d.mts +5 -3
- package/dist/cli/api.mjs +2 -2
- package/dist/cli/index.mjs +97 -137
- package/dist/cli/index.mjs.map +1 -1
- package/dist/{job-CL8myeqs.mjs → config-BGY8v5d7.mjs} +18 -18
- package/dist/config-BGY8v5d7.mjs.map +1 -0
- package/dist/configure/index.d.mts +2 -2
- package/dist/configure/index.mjs +1 -1
- package/dist/{index-Zqsfkae6.d.mts → index-CEJUQFNe.d.mts} +8 -13
- package/dist/{resume-DSfYKl2w.mjs → list-D_TfcRMd.mjs} +12647 -10934
- package/dist/{resume-DSfYKl2w.mjs.map → list-D_TfcRMd.mjs.map} +1 -1
- package/dist/{types-BLZiwB6E.d.mts → types-oYFwjNuW.d.mts} +74 -69
- package/dist/utils/test/index.d.mts +2 -2
- package/docs/cli/secret.md +19 -13
- package/docs/cli/workflow.md +10 -8
- package/docs/cli-reference.md +1 -1
- package/package.json +5 -5
- package/dist/job-CL8myeqs.mjs.map +0 -1
package/dist/cli/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["packageJson","listCommand","getCommand","listCommand","createCommand","profileInfo: ProfileInfo","deleteCommand","listCommand","profileInfos: ProfileInfo[]","updateCommand","profileInfo: ProfileInfo","createCommand","deleteCommand","listCommand","updateCommand","createCommand","deleteCommand","listCommand","createCommand","deleteCommand","listCommand","setTimeout","skippedFiles: string[]","files: string[]","mimeLookup","getCommand","listCommand","getCommand","listCommand","notFoundTypes: string[]","listCommand","createCommand","deleteCommand","listCommand","patInfos: PersonalAccessTokenInfo[]","createCommand","deleteCommand","listCommand","listCommand","listCommand"],"sources":["../../src/cli/init.ts","../../src/cli/login.ts","../../src/cli/logout.ts","../../src/cli/machineuser/index.ts","../../src/cli/oauth2client/index.ts","../../src/cli/profile/create.ts","../../src/cli/profile/delete.ts","../../src/cli/profile/list.ts","../../src/cli/profile/update.ts","../../src/cli/profile/index.ts","../../src/cli/secret/create.ts","../../src/cli/secret/delete.ts","../../src/cli/secret/list.ts","../../src/cli/secret/update.ts","../../src/cli/secret/vault/create.ts","../../src/cli/secret/vault/delete.ts","../../src/cli/secret/vault/list.ts","../../src/cli/secret/vault/index.ts","../../src/cli/secret/index.ts","../../src/cli/utils/progress.ts","../../src/cli/staticwebsite/deploy.ts","../../src/cli/staticwebsite/get.ts","../../src/cli/staticwebsite/list.ts","../../src/cli/staticwebsite/index.ts","../../src/cli/tailordb/truncate.ts","../../src/cli/tailordb/index.ts","../../src/cli/user/current.ts","../../src/cli/user/list.ts","../../src/cli/user/pat/transform.ts","../../src/cli/user/pat/create.ts","../../src/cli/user/pat/delete.ts","../../src/cli/user/pat/list.ts","../../src/cli/user/pat/update.ts","../../src/cli/user/pat/index.ts","../../src/cli/user/switch.ts","../../src/cli/user/index.ts","../../src/cli/workflow/index.ts","../../src/cli/workspace/index.ts","../../src/cli/index.ts"],"sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs } from \"./args\";\nimport { logger } from \"./utils/logger\";\nimport { readPackageJson } from \"./utils/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 = defineCommand({\n meta: {\n name: \"init\",\n description: \"Initialize a new project using create-sdk\",\n },\n args: {\n ...commonArgs,\n name: {\n type: \"positional\",\n description: \"Project name\",\n required: false,\n },\n template: {\n type: \"string\",\n description: \"Template name\",\n required: false,\n alias: \"t\",\n },\n },\n run: withCommonArgs(async (args) => {\n const packageJson = await readPackageJson();\n const version =\n packageJson.version && packageJson.version !== \"0.0.0\"\n ? packageJson.version\n : \"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 { defineCommand } from \"citty\";\nimport open from \"open\";\nimport { commonArgs, withCommonArgs } from \"./args\";\nimport { fetchUserInfo, initOAuth2Client } from \"./client\";\nimport { readPlatformConfig, writePlatformConfig } from \"./context\";\nimport { logger } from \"./utils/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(\n \"Failed to open browser automatically. Please open the URL above manually.\",\n );\n }\n });\n });\n};\n\nexport const loginCommand = defineCommand({\n meta: {\n name: \"login\",\n description: \"Login to Tailor Platform\",\n },\n args: commonArgs,\n run: withCommonArgs(async () => {\n await startAuthServer();\n logger.success(\"Successfully logged in to Tailor Platform.\");\n }),\n});\n","import { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs } from \"./args\";\nimport { initOAuth2Client } from \"./client\";\nimport { readPlatformConfig, writePlatformConfig } from \"./context\";\nimport { logger } from \"./utils/logger\";\n\nexport const logoutCommand = defineCommand({\n meta: {\n name: \"logout\",\n description: \"Logout from Tailor Platform\",\n },\n args: commonArgs,\n run: withCommonArgs(async () => {\n const pfConfig = readPlatformConfig();\n const tokens = pfConfig.current_user\n ? pfConfig.users[pfConfig.current_user]\n : undefined;\n if (!tokens) {\n logger.warn(\"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 \"citty\";\nimport { listCommand } from \"./list\";\nimport { tokenCommand } from \"./token\";\n\nexport const machineuserCommand = defineCommand({\n meta: {\n name: \"machineuser\",\n description: \"Manage machine users\",\n },\n subCommands: {\n list: listCommand,\n token: tokenCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { defineCommand, runCommand } from \"citty\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\n\nexport const oauth2clientCommand = defineCommand({\n meta: {\n name: \"oauth2client\",\n description: \"Manage OAuth2 clients\",\n },\n subCommands: {\n get: getCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { defineCommand } from \"citty\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport {\n fetchLatestToken,\n readPlatformConfig,\n writePlatformConfig,\n} from \"../context\";\nimport { printData } from \"../utils/format\";\nimport { logger } from \"../utils/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const createCommand = defineCommand({\n meta: {\n name: \"create\",\n description: \"Create new profile\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n name: {\n type: \"positional\",\n description: \"Profile name\",\n required: true,\n },\n user: {\n type: \"string\",\n description: \"User email\",\n required: true,\n alias: \"u\",\n },\n \"workspace-id\": {\n type: \"string\",\n description: \"Workspace ID\",\n required: true,\n alias: \"w\",\n },\n },\n run: withCommonArgs(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) => {\n const { workspaces, nextPageToken } = await client.listWorkspaces({\n pageToken,\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 printData(profileInfo, args.json);\n }),\n});\n","import { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs } from \"../args\";\nimport { readPlatformConfig, writePlatformConfig } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport const deleteCommand = defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete profile\",\n },\n args: {\n ...commonArgs,\n name: {\n type: \"positional\",\n description: \"Profile name\",\n required: true,\n },\n },\n run: withCommonArgs(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 { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../args\";\nimport { readPlatformConfig } from \"../context\";\nimport { printData } from \"../utils/format\";\nimport { logger } from \"../utils/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all profiles\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n },\n run: withCommonArgs(async (args) => {\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 printData(profileInfos, args.json);\n }),\n});\n","import { defineCommand } from \"citty\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport {\n fetchLatestToken,\n readPlatformConfig,\n writePlatformConfig,\n} from \"../context\";\nimport { printData } from \"../utils/format\";\nimport { logger } from \"../utils/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const updateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: \"Update profile properties\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n name: {\n type: \"positional\",\n description: \"Profile name\",\n required: true,\n },\n user: {\n type: \"string\",\n description: \"New user email\",\n alias: \"u\",\n },\n \"workspace-id\": {\n type: \"string\",\n description: \"New workspace ID\",\n alias: \"w\",\n },\n },\n run: withCommonArgs(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) => {\n const { workspaces, nextPageToken } = await client.listWorkspaces({\n pageToken,\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 printData(profileInfo, args.json);\n }),\n});\n","import { defineCommand, runCommand } from \"citty\";\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 meta: {\n name: \"profile\",\n description: \"Manage workspace profiles (user + workspace combinations)\",\n },\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n update: updateCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport const createSecretCommand = defineCommand({\n meta: {\n name: \"create\",\n description: \"Create a secret in a vault\",\n },\n args: {\n ...commonArgs,\n ...workspaceArgs,\n \"vault-name\": {\n type: \"string\",\n description: \"Vault name\",\n required: true,\n },\n name: {\n type: \"string\",\n description: \"Secret name\",\n required: true,\n },\n value: {\n type: \"string\",\n description: \"Secret value\",\n required: true,\n },\n },\n run: withCommonArgs(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(\n `Secret: ${args.name} created in vault: ${args[\"vault-name\"]}`,\n );\n }),\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport const deleteSecretCommand = defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete a secret in a vault\",\n },\n args: {\n ...commonArgs,\n ...workspaceArgs,\n \"vault-name\": {\n type: \"string\",\n description: \"Vault name\",\n required: true,\n },\n name: {\n type: \"string\",\n description: \"Secret name\",\n required: true,\n },\n yes: {\n type: \"boolean\",\n description: \"Skip confirmation prompt\",\n alias: \"y\",\n default: false,\n },\n },\n run: withCommonArgs(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 logger.prompt(\n `Enter the secret name to confirm deletion (\"${args.name}\"): `,\n { type: \"text\" },\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(\n `Secret \"${args.name}\" not found in vault \"${args[\"vault-name\"]}\".`,\n );\n }\n throw error;\n }\n\n logger.success(\n `Secret: ${args.name} deleted from vault: ${args[\"vault-name\"]}`,\n );\n }),\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, jsonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { printData } from \"../utils/format\";\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: string;\n updatedAt: string;\n}\n\nfunction secretInfo(secret: SecretManagerSecret): SecretInfo {\n return {\n name: secret.name,\n createdAt: secret.createTime\n ? timestampDate(secret.createTime).toISOString()\n : \"N/A\",\n updatedAt: secret.updateTime\n ? timestampDate(secret.updateTime).toISOString()\n : \"N/A\",\n };\n}\n\nexport async function secretList(\n options: SecretListOptions,\n): 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) => {\n const { secrets, nextPageToken } = await client.listSecretManagerSecrets({\n workspaceId,\n secretmanagerVaultName: options.vaultName,\n pageToken,\n });\n return [secrets, nextPageToken];\n });\n\n return secrets.map(secretInfo);\n}\n\nexport const listSecretCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List secrets in a vault\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n ...workspaceArgs,\n \"vault-name\": {\n type: \"string\",\n description: \"Vault name\",\n required: true,\n },\n },\n run: withCommonArgs(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 printData(secrets, args.json);\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 { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport const updateSecretCommand = defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a secret in a vault\",\n },\n args: {\n ...commonArgs,\n ...workspaceArgs,\n \"vault-name\": {\n type: \"string\",\n description: \"Vault name\",\n required: true,\n },\n name: {\n type: \"string\",\n description: \"Secret name\",\n required: true,\n },\n value: {\n type: \"string\",\n description: \"Secret value\",\n required: true,\n },\n },\n run: withCommonArgs(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(\n `Secret \"${args.name}\" not found in vault \"${args[\"vault-name\"]}\".`,\n );\n }\n throw error;\n }\n\n logger.success(\n `Secret: ${args.name} updated in vault: ${args[\"vault-name\"]}`,\n );\n }),\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs, workspaceArgs } from \"../../args\";\nimport { initOperatorClient } from \"../../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../../context\";\nimport { logger } from \"../../utils/logger\";\n\nexport const createCommand = defineCommand({\n meta: {\n name: \"create\",\n description: \"Create a Secret Manager vault\",\n },\n args: {\n ...commonArgs,\n ...workspaceArgs,\n name: {\n type: \"string\",\n description: \"Vault name\",\n required: true,\n },\n },\n run: withCommonArgs(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 { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs, workspaceArgs } from \"../../args\";\nimport { initOperatorClient } from \"../../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../../context\";\nimport { logger } from \"../../utils/logger\";\n\nexport const deleteCommand = defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete a Secret Manager vault\",\n },\n args: {\n ...commonArgs,\n ...workspaceArgs,\n name: {\n type: \"string\",\n description: \"Vault name\",\n required: true,\n },\n yes: {\n type: \"boolean\",\n description: \"Skip confirmation prompt\",\n alias: \"y\",\n default: false,\n },\n },\n run: withCommonArgs(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 logger.prompt(\n `Enter the vault name to confirm deletion (\"${args.name}\"): `,\n { type: \"text\" },\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 { defineCommand } from \"citty\";\nimport {\n commonArgs,\n jsonArgs,\n withCommonArgs,\n workspaceArgs,\n} from \"../../args\";\nimport { fetchAll, initOperatorClient } from \"../../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../../context\";\nimport { printData } from \"../../utils/format\";\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: string;\n updatedAt: string;\n}\n\nfunction vaultInfo(vault: SecretManagerVault): VaultInfo {\n return {\n name: vault.name,\n createdAt: vault.createTime\n ? timestampDate(vault.createTime).toISOString()\n : \"N/A\",\n updatedAt: vault.updateTime\n ? timestampDate(vault.updateTime).toISOString()\n : \"N/A\",\n };\n}\n\nexport async function vaultList(\n options?: VaultListOptions,\n): 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) => {\n const { vaults, nextPageToken } = await client.listSecretManagerVaults({\n workspaceId,\n pageToken,\n });\n return [vaults, nextPageToken];\n });\n\n return vaults.map(vaultInfo);\n}\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List Secret Manager vaults\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n ...workspaceArgs,\n },\n run: withCommonArgs(async (args) => {\n const vaults = await vaultList({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n printData(vaults, args.json);\n }),\n});\n","import { defineCommand, runCommand } from \"citty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\n\nexport const vaultCommand = defineCommand({\n meta: {\n name: \"vault\",\n description: \"Manage Secret Manager vaults\",\n },\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { defineCommand, runCommand } from \"citty\";\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 meta: {\n name: \"secret\",\n description: \"Manage secrets and vaults\",\n },\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, { rawArgs: [] });\n },\n});\n","import { setTimeout } from \"node:timers/promises\";\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.stdout.write(`\\r${label} ${current}/${total} (${percent}%)`);\n };\n\n const finish = () => {\n process.stdout.write(\"\\n\");\n };\n\n return { update, finish };\n}\n\nexport async function withTimeout<T>(\n p: Promise<T>,\n ms: number,\n message: string,\n): 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 * as path from \"path\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { lookup as mimeLookup } from \"mime-types\";\nimport pLimit from \"p-limit\";\nimport { withCommonArgs, commonArgs, jsonArgs, workspaceArgs } from \"../args\";\nimport { initOperatorClient, type OperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { printData } from \"../utils/format\";\nimport { logger } from \"../utils/logger\";\nimport { createProgress, withTimeout } from \"../utils/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\ntype DeployResult = {\n url: string;\n skippedFiles: string[];\n};\n\nasync 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\n ? createProgress(\"Uploading files\", total)\n : 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\nasync function collectFiles(\n rootDir: string,\n currentDir = \"\",\n): 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 (\n entry.isFile() &&\n !entry.isSymbolicLink() &&\n !shouldIgnoreFile(rel)\n ) {\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 relativePath: string,\n skippedFiles: string[],\n): Promise<void> {\n const absPath = path.join(rootDir, relativePath);\n\n const filePath = relativePath.split(path.sep).join(\"/\");\n\n const mime = mimeLookup(filePath);\n\n if (!mime) {\n skippedFiles.push(\n `${filePath} (unsupported content type; no MIME mapping found)`,\n );\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<\n MessageInitShape<typeof UploadFileRequestSchema>\n > {\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 (\n error instanceof ConnectError &&\n error.code === Code.InvalidArgument\n ) {\n skippedFiles.push(\n `${filePath} (server rejected file as invalid: ${error.message})`,\n );\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\nfunction 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 = defineCommand({\n meta: {\n name: \"deploy\",\n description: \"Deploy a static website\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n ...workspaceArgs,\n name: {\n type: \"string\",\n description: \"Static website name\",\n alias: \"n\",\n required: true,\n },\n dir: {\n type: \"string\",\n description: \"Path to the static website files\",\n alias: \"d\",\n required: true,\n },\n },\n run: withCommonArgs(async (args) => {\n logger.info(\n `Deploying static website \"${args.name}\" from directory: ${args.dir}`,\n );\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 printData({ name, workspaceId, url, skippedFiles }, true);\n } else {\n logger.success(\n `Static website \"${name}\" deployed successfully. URL: ${url}`,\n );\n logSkippedFiles(skippedFiles);\n }\n }),\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, jsonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { printData } from \"../utils/format\";\n\nexport const getCommand = defineCommand({\n meta: {\n name: \"get\",\n description: \"Get static website details\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n ...workspaceArgs,\n name: {\n type: \"positional\",\n description: \"Static website name\",\n required: true,\n },\n },\n run: withCommonArgs(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 printData(info, args.json);\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 { defineCommand } from \"citty\";\nimport { commonArgs, jsonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { printData } from \"../utils/format\";\n\nexport interface StaticWebsiteInfo {\n workspaceId: string;\n name: string;\n description: string;\n url: string;\n allowedIpAddresses: string[];\n}\n\nexport async function listStaticWebsites(options?: {\n workspaceId?: string;\n profile?: string;\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) => {\n const { staticwebsites, nextPageToken } = await client.listStaticWebsites({\n workspaceId,\n pageToken,\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 = defineCommand({\n meta: {\n name: \"list\",\n description: \"List static websites\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n ...workspaceArgs,\n },\n run: withCommonArgs(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 printData(formatted, args.json);\n }),\n});\n","import { defineCommand, runCommand } from \"citty\";\nimport { deployCommand } from \"./deploy\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\n\nexport const staticwebsiteCommand = defineCommand({\n meta: {\n name: \"staticwebsite\",\n description: \"Manage static websites\",\n },\n subCommands: {\n deploy: deployCommand,\n get: getCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { defineCommand } from \"citty\";\nimport { commonArgs, deploymentArgs, withCommonArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadConfig } from \"../config-loader\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport interface TruncateOptions {\n workspaceId?: string;\n profile?: string;\n configPath?: string;\n all?: boolean;\n namespace?: string;\n types?: string[];\n yes?: boolean;\n}\n\ninterface TruncateSingleTypeOptions {\n workspaceId: string;\n namespaceName: string;\n typeName: string;\n}\n\nasync function truncateSingleType(\n options: TruncateSingleTypeOptions,\n client: Awaited<ReturnType<typeof initOperatorClient>>,\n): Promise<void> {\n await client.truncateTailorDBType({\n workspaceId: options.workspaceId,\n namespaceName: options.namespaceName,\n tailordbTypeName: options.typeName,\n });\n\n logger.success(\n `Truncated type \"${options.typeName}\" in namespace \"${options.namespaceName}\"`,\n );\n}\n\nasync function truncateNamespace(\n workspaceId: string,\n namespaceName: string,\n client: Awaited<ReturnType<typeof initOperatorClient>>,\n): Promise<void> {\n await client.truncateTailorDBTypes({\n workspaceId,\n namespaceName,\n });\n\n logger.success(`Truncated all types in namespace \"${namespaceName}\"`);\n}\n\nasync function getAllNamespaces(configPath?: string): Promise<string[]> {\n const { config } = await loadConfig(configPath);\n const namespaces = new Set<string>();\n\n // Collect namespace names from db configuration\n if (config.db) {\n for (const [namespaceName] of Object.entries(config.db)) {\n namespaces.add(namespaceName);\n }\n }\n\n return Array.from(namespaces);\n}\n\nasync function getTypeNamespace(\n workspaceId: string,\n typeName: string,\n client: Awaited<ReturnType<typeof initOperatorClient>>,\n configPath?: string,\n): Promise<string | null> {\n const namespaces = await getAllNamespaces(configPath);\n\n // Try to find the type in each namespace\n for (const namespace of namespaces) {\n try {\n const { tailordbTypes } = await client.listTailorDBTypes({\n workspaceId,\n namespaceName: namespace,\n });\n\n if (tailordbTypes.some((type) => type.name === typeName)) {\n return namespace;\n }\n } catch {\n // Continue to next namespace if error occurs\n continue;\n }\n }\n\n return null;\n}\n\nexport async function truncate(options?: TruncateOptions): Promise<void> {\n // Load and validate options\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 // Validate arguments\n const hasTypes = options?.types && options.types.length > 0;\n const hasNamespace = !!options?.namespace;\n const hasAll = !!options?.all;\n\n // All options are mutually exclusive\n const optionCount = [hasAll, hasNamespace, hasTypes].filter(Boolean).length;\n if (optionCount === 0) {\n throw new Error(\n \"Please specify one of: --all, --namespace <name>, or type names\",\n );\n }\n if (optionCount > 1) {\n throw new Error(\n \"Options --all, --namespace, and type names are mutually exclusive. Please specify only one.\",\n );\n }\n\n // Validate config and get namespaces before confirmation\n const namespaces = await getAllNamespaces(options?.configPath);\n\n // Handle --all flag\n if (hasAll) {\n if (namespaces.length === 0) {\n logger.warn(\"No namespaces found in config file.\");\n return;\n }\n\n if (!options?.yes) {\n const namespaceList = namespaces.join(\", \");\n const confirmation = await logger.prompt(\n `This will truncate ALL tables in the following namespaces: ${namespaceList}. Continue? (yes/no)`,\n {\n type: \"confirm\",\n initial: false,\n },\n );\n if (!confirmation) {\n logger.info(\"Truncate cancelled.\");\n return;\n }\n }\n\n for (const namespace of namespaces) {\n await truncateNamespace(workspaceId, namespace, client);\n }\n logger.success(\"Truncated all tables in all namespaces\");\n return;\n }\n\n // Handle --namespace flag\n if (hasNamespace && options?.namespace) {\n const namespace = options.namespace;\n\n // Validate namespace exists in config\n if (!namespaces.includes(namespace)) {\n throw new Error(\n `Namespace \"${namespace}\" not found in config. Available namespaces: ${namespaces.join(\", \")}`,\n );\n }\n\n if (!options.yes) {\n const confirmation = await logger.prompt(\n `This will truncate ALL tables in namespace \"${namespace}\". Continue? (yes/no)`,\n {\n type: \"confirm\",\n initial: false,\n },\n );\n if (!confirmation) {\n logger.info(\"Truncate cancelled.\");\n return;\n }\n }\n\n await truncateNamespace(workspaceId, namespace, client);\n return;\n }\n\n // Handle specific types\n if (hasTypes && options?.types) {\n const typeNames = options.types;\n\n // Validate all types exist and get their namespaces before confirmation\n const typeNamespaceMap = new Map<string, string>();\n const notFoundTypes: string[] = [];\n\n for (const typeName of typeNames) {\n const namespace = await getTypeNamespace(\n workspaceId,\n typeName,\n client,\n options.configPath,\n );\n\n if (namespace) {\n typeNamespaceMap.set(typeName, namespace);\n } else {\n notFoundTypes.push(typeName);\n }\n }\n\n if (notFoundTypes.length > 0) {\n throw new Error(\n `The following types were not found in any namespace: ${notFoundTypes.join(\", \")}`,\n );\n }\n\n if (!options.yes) {\n const typeList = typeNames.join(\", \");\n const confirmation = await logger.prompt(\n `This will truncate the following types: ${typeList}. Continue? (yes/no)`,\n {\n type: \"confirm\",\n initial: false,\n },\n );\n if (!confirmation) {\n logger.info(\"Truncate cancelled.\");\n return;\n }\n }\n\n for (const typeName of typeNames) {\n const namespace = typeNamespaceMap.get(typeName);\n if (!namespace) {\n continue;\n }\n\n await truncateSingleType(\n {\n workspaceId,\n namespaceName: namespace,\n typeName,\n },\n client,\n );\n }\n }\n}\n\nexport const truncateCommand = defineCommand({\n meta: {\n name: \"truncate\",\n description: \"Truncate TailorDB tables\",\n },\n args: {\n ...commonArgs,\n types: {\n type: \"positional\",\n description: \"Type names to truncate\",\n required: false,\n },\n all: {\n type: \"boolean\",\n description: \"Truncate all tables in all namespaces\",\n default: false,\n alias: \"a\",\n },\n namespace: {\n type: \"string\",\n description: \"Truncate all tables in specified namespace\",\n alias: \"n\",\n },\n yes: {\n type: \"boolean\",\n description: \"Skip confirmation prompt\",\n alias: \"y\",\n default: false,\n },\n ...deploymentArgs,\n },\n run: withCommonArgs(async (args) => {\n // Get type names from rest arguments (_)\n const types =\n args._.length > 0\n ? args._.map((arg) => String(arg)).filter(Boolean)\n : undefined;\n await truncate({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n all: args.all,\n namespace: args.namespace,\n types,\n yes: args.yes,\n });\n }),\n});\n","import { defineCommand } from \"citty\";\nimport { truncateCommand } from \"./truncate\";\n\nexport const tailordbCommand = defineCommand({\n meta: {\n name: \"tailordb\",\n description: \"Manage TailorDB tables and data\",\n },\n subCommands: {\n truncate: truncateCommand,\n },\n});\n","import { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, withCommonArgs } from \"../args\";\nimport { readPlatformConfig } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport const currentCommand = defineCommand({\n meta: {\n name: \"current\",\n description: \"Show current user\",\n },\n args: commonArgs,\n run: withCommonArgs(async () => {\n const config = readPlatformConfig();\n\n // Check if current user is set\n if (!config.current_user) {\n logger.warn(ml`\n Current user not set.\n Please login first using 'tailor-sdk login' command to register a user.\n `);\n return;\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 { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../args\";\nimport { readPlatformConfig } from \"../context\";\nimport { printData } from \"../utils/format\";\nimport { logger } from \"../utils/logger\";\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all users\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n },\n run: withCommonArgs(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 printData(users, args.json);\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 { printData } from \"../../utils/format\";\nimport { logger } from \"../../utils/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\nexport function transformPersonalAccessToken(\n pat: PersonalAccessToken,\n): PersonalAccessTokenInfo {\n return {\n name: pat.name,\n scopes: pat.scopes.map(patScopeToString),\n };\n}\n\nexport function getScopesFromWriteFlag(write: boolean): PATScope[] {\n return write\n ? [PATScope.PAT_SCOPE_READ, PATScope.PAT_SCOPE_WRITE]\n : [PATScope.PAT_SCOPE_READ];\n}\n\nfunction getScopeStringsFromWriteFlag(write: boolean): string[] {\n return write ? [\"read\", \"write\"] : [\"read\"];\n}\n\nexport function printCreatedToken(\n name: string,\n token: string,\n write: boolean,\n action: \"created\" | \"updated\",\n json?: boolean,\n): void {\n const scopes = getScopeStringsFromWriteFlag(write);\n\n if (json) {\n printData({ name, scopes, token }, json);\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 { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../../args\";\nimport { initOperatorClient } from \"../../client\";\nimport { fetchLatestToken, readPlatformConfig } from \"../../context\";\nimport { getScopesFromWriteFlag, printCreatedToken } from \"./transform\";\n\nexport const createCommand = defineCommand({\n meta: {\n name: \"create\",\n description: \"Create new personal access token\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n name: {\n type: \"positional\",\n description: \"Token name\",\n required: true,\n },\n write: {\n type: \"boolean\",\n description: \"Grant write permission (default: read-only)\",\n alias: \"W\",\n default: false,\n },\n },\n run: withCommonArgs(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(\n args.name,\n result.accessToken,\n args.write,\n \"created\",\n args.json,\n );\n }),\n});\n","import { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, withCommonArgs } from \"../../args\";\nimport { initOperatorClient } from \"../../client\";\nimport { fetchLatestToken, readPlatformConfig } from \"../../context\";\nimport { logger } from \"../../utils/logger\";\n\nexport const deleteCommand = defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete personal access token\",\n },\n args: {\n ...commonArgs,\n name: {\n type: \"positional\",\n description: \"Token name\",\n required: true,\n },\n },\n run: withCommonArgs(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(\n `Personal access token \"${args.name}\" deleted successfully.`,\n );\n }),\n});\n","import { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../../args\";\nimport { fetchAll, initOperatorClient } from \"../../client\";\nimport { fetchLatestToken, readPlatformConfig } from \"../../context\";\nimport { printData } from \"../../utils/format\";\nimport { logger } from \"../../utils/logger\";\nimport {\n transformPersonalAccessToken,\n type PersonalAccessTokenInfo,\n} from \"./transform\";\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all personal access tokens\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n },\n run: withCommonArgs(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) => {\n const { personalAccessTokens, nextPageToken } =\n await client.listPersonalAccessTokens({\n pageToken,\n });\n return [personalAccessTokens, nextPageToken];\n });\n\n if (pats.length === 0) {\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 if (args.json) {\n // JSON format with scopes as array\n const patInfos: PersonalAccessTokenInfo[] = pats.map(\n transformPersonalAccessToken,\n );\n printData(patInfos, args.json);\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 { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../../args\";\nimport { initOperatorClient } from \"../../client\";\nimport { fetchLatestToken, readPlatformConfig } from \"../../context\";\nimport { getScopesFromWriteFlag, printCreatedToken } from \"./transform\";\n\nexport const updateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: \"Update personal access token (delete and recreate)\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n name: {\n type: \"positional\",\n description: \"Token name\",\n required: true,\n },\n write: {\n type: \"boolean\",\n description: \"Grant write permission (if not specified, keeps read-only)\",\n alias: \"W\",\n default: false,\n },\n },\n run: withCommonArgs(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(\n args.name,\n result.accessToken,\n args.write,\n \"updated\",\n args.json,\n );\n }),\n});\n","import { defineCommand, runCommand } from \"citty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\nimport { updateCommand } from \"./update\";\n\nexport const patCommand = defineCommand({\n meta: {\n name: \"pat\",\n description: \"Manage personal access tokens\",\n },\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n update: updateCommand,\n },\n async run(context) {\n // Default to list when no subcommand is provided\n await runCommand(listCommand, {\n rawArgs: context.rawArgs || [],\n });\n },\n});\n","import { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, withCommonArgs } from \"../args\";\nimport { readPlatformConfig, writePlatformConfig } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport const switchCommand = defineCommand({\n meta: {\n name: \"switch\",\n description: \"Set current user\",\n },\n args: {\n ...commonArgs,\n user: {\n type: \"positional\",\n description: \"User email\",\n required: true,\n },\n },\n run: withCommonArgs(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 \"citty\";\nimport { currentCommand } from \"./current\";\nimport { listCommand } from \"./list\";\nimport { patCommand } from \"./pat\";\nimport { switchCommand } from \"./switch\";\n\nexport const userCommand = defineCommand({\n meta: {\n name: \"user\",\n description: \"Manage Tailor Platform users\",\n },\n subCommands: {\n current: currentCommand,\n list: listCommand,\n pat: patCommand,\n switch: switchCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { defineCommand, runCommand } from \"citty\";\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 meta: {\n name: \"workflow\",\n description: \"Manage workflows\",\n },\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, { rawArgs: [] });\n },\n});\n","import { defineCommand, runCommand } from \"citty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\n\nexport const workspaceCommand = defineCommand({\n meta: {\n name: \"workspace\",\n description: \"Manage Tailor Platform workspaces\",\n },\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","#!/usr/bin/env node\n\nimport { register } from \"node:module\";\nimport { defineCommand, runMain } from \"citty\";\nimport { applyCommand } from \"./apply\";\nimport { generateCommand } from \"./generator\";\nimport { initCommand } from \"./init\";\nimport { loginCommand } from \"./login\";\nimport { logoutCommand } from \"./logout\";\nimport { machineuserCommand } from \"./machineuser\";\nimport { oauth2clientCommand } from \"./oauth2client\";\nimport { profileCommand } from \"./profile\";\nimport { removeCommand } from \"./remove\";\nimport { secretCommand } from \"./secret\";\nimport { showCommand } from \"./show\";\nimport { staticwebsiteCommand } from \"./staticwebsite\";\nimport { tailordbCommand } from \"./tailordb\";\nimport { userCommand } from \"./user\";\nimport { readPackageJson } from \"./utils/package-json\";\nimport { workflowCommand } from \"./workflow\";\nimport { workspaceCommand } from \"./workspace\";\n\nregister(\"tsx\", import.meta.url, { data: {} });\n\nconst packageJson = await readPackageJson();\n\nexport const mainCommand = defineCommand({\n meta: {\n name: packageJson.name,\n version: packageJson.version,\n description:\n packageJson.description ||\n \"Tailor CLI for managing Tailor Platform SDK applications\",\n },\n subCommands: {\n apply: applyCommand,\n generate: generateCommand,\n init: initCommand,\n login: loginCommand,\n logout: logoutCommand,\n machineuser: machineuserCommand,\n oauth2client: oauth2clientCommand,\n profile: profileCommand,\n remove: removeCommand,\n secret: secretCommand,\n show: showCommand,\n staticwebsite: staticwebsiteCommand,\n tailordb: tailordbCommand,\n user: userCommand,\n workflow: workflowCommand,\n workspace: workspaceCommand,\n },\n});\n\nrunMain(mainCommand);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["packageJson","listCommand","getCommand","listCommand","createCommand","deleteCommand","listCommand","updateCommand","createCommand","deleteCommand","listCommand","updateCommand","createCommand","deleteCommand","listCommand","createCommand","deleteCommand","listCommand","setTimeout","skippedFiles: string[]","files: string[]","mimeLookup","getCommand","listCommand","getCommand","listCommand","notFoundTypes: string[]","listCommand","createCommand","deleteCommand","listCommand","createCommand","deleteCommand","listCommand","listCommand","listCommand"],"sources":["../../src/cli/init.ts","../../src/cli/login.ts","../../src/cli/logout.ts","../../src/cli/machineuser/index.ts","../../src/cli/oauth2client/index.ts","../../src/cli/profile/create.ts","../../src/cli/profile/delete.ts","../../src/cli/profile/list.ts","../../src/cli/profile/update.ts","../../src/cli/profile/index.ts","../../src/cli/secret/args.ts","../../src/cli/secret/create.ts","../../src/cli/secret/delete.ts","../../src/cli/secret/list.ts","../../src/cli/secret/update.ts","../../src/cli/secret/vault/args.ts","../../src/cli/secret/vault/create.ts","../../src/cli/secret/vault/delete.ts","../../src/cli/secret/vault/list.ts","../../src/cli/secret/vault/index.ts","../../src/cli/secret/index.ts","../../src/cli/utils/progress.ts","../../src/cli/staticwebsite/deploy.ts","../../src/cli/staticwebsite/get.ts","../../src/cli/staticwebsite/list.ts","../../src/cli/staticwebsite/index.ts","../../src/cli/tailordb/truncate.ts","../../src/cli/tailordb/index.ts","../../src/cli/user/current.ts","../../src/cli/user/list.ts","../../src/cli/user/pat/transform.ts","../../src/cli/user/pat/create.ts","../../src/cli/user/pat/delete.ts","../../src/cli/user/pat/list.ts","../../src/cli/user/pat/update.ts","../../src/cli/user/pat/index.ts","../../src/cli/user/switch.ts","../../src/cli/user/index.ts","../../src/cli/workflow/index.ts","../../src/cli/workspace/index.ts","../../src/cli/index.ts"],"sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs } from \"./args\";\nimport { logger } from \"./utils/logger\";\nimport { readPackageJson } from \"./utils/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 = defineCommand({\n meta: {\n name: \"init\",\n description: \"Initialize a new project using create-sdk\",\n },\n args: {\n ...commonArgs,\n name: {\n type: \"positional\",\n description: \"Project name\",\n required: false,\n },\n template: {\n type: \"string\",\n description: \"Template name\",\n required: false,\n alias: \"t\",\n },\n },\n run: withCommonArgs(async (args) => {\n const packageJson = await readPackageJson();\n const version =\n packageJson.version && packageJson.version !== \"0.0.0\"\n ? packageJson.version\n : \"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 { defineCommand } from \"citty\";\nimport open from \"open\";\nimport { commonArgs, withCommonArgs } from \"./args\";\nimport { fetchUserInfo, initOAuth2Client } from \"./client\";\nimport { readPlatformConfig, writePlatformConfig } from \"./context\";\nimport { logger } from \"./utils/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(\n \"Failed to open browser automatically. Please open the URL above manually.\",\n );\n }\n });\n });\n};\n\nexport const loginCommand = defineCommand({\n meta: {\n name: \"login\",\n description: \"Login to Tailor Platform\",\n },\n args: commonArgs,\n run: withCommonArgs(async () => {\n await startAuthServer();\n logger.success(\"Successfully logged in to Tailor Platform.\");\n }),\n});\n","import { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs } from \"./args\";\nimport { initOAuth2Client } from \"./client\";\nimport { readPlatformConfig, writePlatformConfig } from \"./context\";\nimport { logger } from \"./utils/logger\";\n\nexport const logoutCommand = defineCommand({\n meta: {\n name: \"logout\",\n description: \"Logout from Tailor Platform\",\n },\n args: commonArgs,\n run: withCommonArgs(async () => {\n const pfConfig = readPlatformConfig();\n const tokens = pfConfig.current_user\n ? pfConfig.users[pfConfig.current_user]\n : undefined;\n if (!tokens) {\n logger.warn(\"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 \"citty\";\nimport { listCommand } from \"./list\";\nimport { tokenCommand } from \"./token\";\n\nexport const machineuserCommand = defineCommand({\n meta: {\n name: \"machineuser\",\n description: \"Manage machine users\",\n },\n subCommands: {\n list: listCommand,\n token: tokenCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { defineCommand, runCommand } from \"citty\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\n\nexport const oauth2clientCommand = defineCommand({\n meta: {\n name: \"oauth2client\",\n description: \"Manage OAuth2 clients\",\n },\n subCommands: {\n get: getCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { defineCommand } from \"citty\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport {\n fetchLatestToken,\n readPlatformConfig,\n writePlatformConfig,\n} from \"../context\";\nimport { printData } from \"../utils/format\";\nimport { logger } from \"../utils/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const createCommand = defineCommand({\n meta: {\n name: \"create\",\n description: \"Create new profile\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n name: {\n type: \"positional\",\n description: \"Profile name\",\n required: true,\n },\n user: {\n type: \"string\",\n description: \"User email\",\n required: true,\n alias: \"u\",\n },\n \"workspace-id\": {\n type: \"string\",\n description: \"Workspace ID\",\n required: true,\n alias: \"w\",\n },\n },\n run: withCommonArgs(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) => {\n const { workspaces, nextPageToken } = await client.listWorkspaces({\n pageToken,\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 printData(profileInfo, args.json);\n }),\n});\n","import { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs } from \"../args\";\nimport { readPlatformConfig, writePlatformConfig } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport const deleteCommand = defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete profile\",\n },\n args: {\n ...commonArgs,\n name: {\n type: \"positional\",\n description: \"Profile name\",\n required: true,\n },\n },\n run: withCommonArgs(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 { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../args\";\nimport { readPlatformConfig } from \"../context\";\nimport { printData } from \"../utils/format\";\nimport { logger } from \"../utils/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all profiles\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n },\n run: withCommonArgs(async (args) => {\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 printData(profileInfos, args.json);\n }),\n});\n","import { defineCommand } from \"citty\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport {\n fetchLatestToken,\n readPlatformConfig,\n writePlatformConfig,\n} from \"../context\";\nimport { printData } from \"../utils/format\";\nimport { logger } from \"../utils/logger\";\nimport type { ProfileInfo } from \".\";\n\nexport const updateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: \"Update profile properties\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n name: {\n type: \"positional\",\n description: \"Profile name\",\n required: true,\n },\n user: {\n type: \"string\",\n description: \"New user email\",\n alias: \"u\",\n },\n \"workspace-id\": {\n type: \"string\",\n description: \"New workspace ID\",\n alias: \"w\",\n },\n },\n run: withCommonArgs(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) => {\n const { workspaces, nextPageToken } = await client.listWorkspaces({\n pageToken,\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 printData(profileInfo, args.json);\n }),\n});\n","import { defineCommand, runCommand } from \"citty\";\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 meta: {\n name: \"profile\",\n description: \"Manage workspace profiles (user + workspace combinations)\",\n },\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n update: updateCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","/**\n * Arguments for specify secret key\n */\nexport const vaultArgs = {\n \"vault-name\": {\n type: \"string\",\n description: \"Vault name\",\n alias: \"V\",\n required: true,\n },\n} as const;\n\n/**\n * Arguments for specify secret key\n */\nexport const secretIdentifyArgs = {\n ...vaultArgs,\n name: {\n type: \"string\",\n description: \"Secret name\",\n alias: \"N\",\n required: true,\n },\n} as const;\n\n/**\n * Arguments for specify secret key\n */\nexport const secretValueArgs = {\n ...secretIdentifyArgs,\n value: {\n type: \"string\",\n description: \"Secret value\",\n alias: \"v\",\n required: true,\n },\n} as const;\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { logger } from \"../utils/logger\";\nimport { secretValueArgs } from \"./args\";\n\nexport const createSecretCommand = defineCommand({\n meta: {\n name: \"create\",\n description: \"Create a secret in a vault\",\n },\n args: {\n ...commonArgs,\n ...workspaceArgs,\n ...secretValueArgs,\n },\n run: withCommonArgs(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(\n `Secret: ${args.name} created in vault: ${args[\"vault-name\"]}`,\n );\n }),\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport {\n commonArgs,\n confirmationArgs,\n withCommonArgs,\n workspaceArgs,\n} from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { logger } from \"../utils/logger\";\nimport { secretIdentifyArgs } from \"./args\";\n\nexport const deleteSecretCommand = defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete a secret in a vault\",\n },\n args: {\n ...commonArgs,\n ...workspaceArgs,\n ...secretIdentifyArgs,\n ...confirmationArgs,\n },\n run: withCommonArgs(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 logger.prompt(\n `Enter the secret name to confirm deletion (\"${args.name}\"): `,\n { type: \"text\" },\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(\n `Secret \"${args.name}\" not found in vault \"${args[\"vault-name\"]}\".`,\n );\n }\n throw error;\n }\n\n logger.success(\n `Secret: ${args.name} deleted from vault: ${args[\"vault-name\"]}`,\n );\n }),\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, jsonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { printData } from \"../utils/format\";\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: string;\n updatedAt: string;\n}\n\nfunction secretInfo(secret: SecretManagerSecret): SecretInfo {\n return {\n name: secret.name,\n createdAt: secret.createTime\n ? timestampDate(secret.createTime).toISOString()\n : \"N/A\",\n updatedAt: secret.updateTime\n ? timestampDate(secret.updateTime).toISOString()\n : \"N/A\",\n };\n}\n\nexport async function secretList(\n options: SecretListOptions,\n): 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) => {\n const { secrets, nextPageToken } = await client.listSecretManagerSecrets({\n workspaceId,\n secretmanagerVaultName: options.vaultName,\n pageToken,\n });\n return [secrets, nextPageToken];\n });\n\n return secrets.map(secretInfo);\n}\n\nexport const listSecretCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List secrets in a vault\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n ...workspaceArgs,\n ...vaultArgs,\n },\n run: withCommonArgs(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 printData(secrets, args.json);\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 { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { logger } from \"../utils/logger\";\nimport { secretValueArgs } from \"./args\";\n\nexport const updateSecretCommand = defineCommand({\n meta: {\n name: \"update\",\n description: \"Update a secret in a vault\",\n },\n args: {\n ...commonArgs,\n ...workspaceArgs,\n ...secretValueArgs,\n },\n run: withCommonArgs(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(\n `Secret \"${args.name}\" not found in vault \"${args[\"vault-name\"]}\".`,\n );\n }\n throw error;\n }\n\n logger.success(\n `Secret: ${args.name} updated in vault: ${args[\"vault-name\"]}`,\n );\n }),\n});\n","export const nameArgs = {\n name: {\n type: \"positional\",\n description: \"Vault name\",\n required: true,\n },\n} as const;\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, withCommonArgs, workspaceArgs } from \"../../args\";\nimport { initOperatorClient } from \"../../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../../context\";\nimport { logger } from \"../../utils/logger\";\nimport { nameArgs } from \"./args\";\n\nexport const createCommand = defineCommand({\n meta: {\n name: \"create\",\n description: \"Create a Secret Manager vault\",\n },\n args: {\n ...commonArgs,\n ...workspaceArgs,\n ...nameArgs,\n },\n run: withCommonArgs(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 { defineCommand } from \"citty\";\nimport {\n commonArgs,\n confirmationArgs,\n withCommonArgs,\n workspaceArgs,\n} from \"../../args\";\nimport { initOperatorClient } from \"../../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../../context\";\nimport { logger } from \"../../utils/logger\";\nimport { nameArgs } from \"./args\";\n\nexport const deleteCommand = defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete a Secret Manager vault\",\n },\n args: {\n ...commonArgs,\n ...workspaceArgs,\n ...nameArgs,\n ...confirmationArgs,\n },\n run: withCommonArgs(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 logger.prompt(\n `Enter the vault name to confirm deletion (\"${args.name}\"): `,\n { type: \"text\" },\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 { defineCommand } from \"citty\";\nimport {\n commonArgs,\n jsonArgs,\n withCommonArgs,\n workspaceArgs,\n} from \"../../args\";\nimport { fetchAll, initOperatorClient } from \"../../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../../context\";\nimport { printData } from \"../../utils/format\";\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: string;\n updatedAt: string;\n}\n\nfunction vaultInfo(vault: SecretManagerVault): VaultInfo {\n return {\n name: vault.name,\n createdAt: vault.createTime\n ? timestampDate(vault.createTime).toISOString()\n : \"N/A\",\n updatedAt: vault.updateTime\n ? timestampDate(vault.updateTime).toISOString()\n : \"N/A\",\n };\n}\n\nexport async function vaultList(\n options?: VaultListOptions,\n): 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) => {\n const { vaults, nextPageToken } = await client.listSecretManagerVaults({\n workspaceId,\n pageToken,\n });\n return [vaults, nextPageToken];\n });\n\n return vaults.map(vaultInfo);\n}\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List Secret Manager vaults\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n ...workspaceArgs,\n },\n run: withCommonArgs(async (args) => {\n const vaults = await vaultList({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n });\n\n printData(vaults, args.json);\n }),\n});\n","import { defineCommand, runCommand } from \"citty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\n\nexport const vaultCommand = defineCommand({\n meta: {\n name: \"vault\",\n description: \"Manage Secret Manager vaults\",\n },\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { defineCommand, runCommand } from \"citty\";\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 meta: {\n name: \"secret\",\n description: \"Manage secrets and vaults\",\n },\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, { rawArgs: [] });\n },\n});\n","import { setTimeout } from \"node:timers/promises\";\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.stdout.write(`\\r${label} ${current}/${total} (${percent}%)`);\n };\n\n const finish = () => {\n process.stdout.write(\"\\n\");\n };\n\n return { update, finish };\n}\n\nexport async function withTimeout<T>(\n p: Promise<T>,\n ms: number,\n message: string,\n): 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 * as path from \"path\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { lookup as mimeLookup } from \"mime-types\";\nimport pLimit from \"p-limit\";\nimport { withCommonArgs, commonArgs, jsonArgs, workspaceArgs } from \"../args\";\nimport { initOperatorClient, type OperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { printData } from \"../utils/format\";\nimport { logger } from \"../utils/logger\";\nimport { createProgress, withTimeout } from \"../utils/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\ntype DeployResult = {\n url: string;\n skippedFiles: string[];\n};\n\nasync 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\n ? createProgress(\"Uploading files\", total)\n : 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\nasync function collectFiles(\n rootDir: string,\n currentDir = \"\",\n): 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 (\n entry.isFile() &&\n !entry.isSymbolicLink() &&\n !shouldIgnoreFile(rel)\n ) {\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 relativePath: string,\n skippedFiles: string[],\n): Promise<void> {\n const absPath = path.join(rootDir, relativePath);\n\n const filePath = relativePath.split(path.sep).join(\"/\");\n\n const mime = mimeLookup(filePath);\n\n if (!mime) {\n skippedFiles.push(\n `${filePath} (unsupported content type; no MIME mapping found)`,\n );\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<\n MessageInitShape<typeof UploadFileRequestSchema>\n > {\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 (\n error instanceof ConnectError &&\n error.code === Code.InvalidArgument\n ) {\n skippedFiles.push(\n `${filePath} (server rejected file as invalid: ${error.message})`,\n );\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\nfunction 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 = defineCommand({\n meta: {\n name: \"deploy\",\n description: \"Deploy a static website\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n ...workspaceArgs,\n name: {\n type: \"string\",\n description: \"Static website name\",\n alias: \"n\",\n required: true,\n },\n dir: {\n type: \"string\",\n description: \"Path to the static website files\",\n alias: \"d\",\n required: true,\n },\n },\n run: withCommonArgs(async (args) => {\n logger.info(\n `Deploying static website \"${args.name}\" from directory: ${args.dir}`,\n );\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 printData({ name, workspaceId, url, skippedFiles }, true);\n } else {\n logger.success(\n `Static website \"${name}\" deployed successfully. URL: ${url}`,\n );\n logSkippedFiles(skippedFiles);\n }\n }),\n});\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport { commonArgs, jsonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { printData } from \"../utils/format\";\n\nexport const getCommand = defineCommand({\n meta: {\n name: \"get\",\n description: \"Get static website details\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n ...workspaceArgs,\n name: {\n type: \"positional\",\n description: \"Static website name\",\n required: true,\n },\n },\n run: withCommonArgs(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 printData(info, args.json);\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 { defineCommand } from \"citty\";\nimport { commonArgs, jsonArgs, withCommonArgs, workspaceArgs } from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { printData } from \"../utils/format\";\n\nexport interface StaticWebsiteInfo {\n workspaceId: string;\n name: string;\n description: string;\n url: string;\n allowedIpAddresses: string[];\n}\n\nexport async function listStaticWebsites(options?: {\n workspaceId?: string;\n profile?: string;\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) => {\n const { staticwebsites, nextPageToken } = await client.listStaticWebsites({\n workspaceId,\n pageToken,\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 = defineCommand({\n meta: {\n name: \"list\",\n description: \"List static websites\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n ...workspaceArgs,\n },\n run: withCommonArgs(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 printData(formatted, args.json);\n }),\n});\n","import { defineCommand, runCommand } from \"citty\";\nimport { deployCommand } from \"./deploy\";\nimport { getCommand } from \"./get\";\nimport { listCommand } from \"./list\";\n\nexport const staticwebsiteCommand = defineCommand({\n meta: {\n name: \"staticwebsite\",\n description: \"Manage static websites\",\n },\n subCommands: {\n deploy: deployCommand,\n get: getCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { defineCommand } from \"citty\";\nimport { commonArgs, deploymentArgs, withCommonArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadConfig } from \"../config-loader\";\nimport { loadAccessToken, loadWorkspaceId } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport interface TruncateOptions {\n workspaceId?: string;\n profile?: string;\n configPath?: string;\n all?: boolean;\n namespace?: string;\n types?: string[];\n yes?: boolean;\n}\n\ninterface TruncateSingleTypeOptions {\n workspaceId: string;\n namespaceName: string;\n typeName: string;\n}\n\nasync function truncateSingleType(\n options: TruncateSingleTypeOptions,\n client: Awaited<ReturnType<typeof initOperatorClient>>,\n): Promise<void> {\n await client.truncateTailorDBType({\n workspaceId: options.workspaceId,\n namespaceName: options.namespaceName,\n tailordbTypeName: options.typeName,\n });\n\n logger.success(\n `Truncated type \"${options.typeName}\" in namespace \"${options.namespaceName}\"`,\n );\n}\n\nasync function truncateNamespace(\n workspaceId: string,\n namespaceName: string,\n client: Awaited<ReturnType<typeof initOperatorClient>>,\n): Promise<void> {\n await client.truncateTailorDBTypes({\n workspaceId,\n namespaceName,\n });\n\n logger.success(`Truncated all types in namespace \"${namespaceName}\"`);\n}\n\nasync function getAllNamespaces(configPath?: string): Promise<string[]> {\n const { config } = await loadConfig(configPath);\n const namespaces = new Set<string>();\n\n // Collect namespace names from db configuration\n if (config.db) {\n for (const [namespaceName] of Object.entries(config.db)) {\n namespaces.add(namespaceName);\n }\n }\n\n return Array.from(namespaces);\n}\n\nasync function getTypeNamespace(\n workspaceId: string,\n typeName: string,\n client: Awaited<ReturnType<typeof initOperatorClient>>,\n configPath?: string,\n): Promise<string | null> {\n const namespaces = await getAllNamespaces(configPath);\n\n // Try to find the type in each namespace\n for (const namespace of namespaces) {\n try {\n const { tailordbTypes } = await client.listTailorDBTypes({\n workspaceId,\n namespaceName: namespace,\n });\n\n if (tailordbTypes.some((type) => type.name === typeName)) {\n return namespace;\n }\n } catch {\n // Continue to next namespace if error occurs\n continue;\n }\n }\n\n return null;\n}\n\nexport async function truncate(options?: TruncateOptions): Promise<void> {\n // Load and validate options\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 // Validate arguments\n const hasTypes = options?.types && options.types.length > 0;\n const hasNamespace = !!options?.namespace;\n const hasAll = !!options?.all;\n\n // All options are mutually exclusive\n const optionCount = [hasAll, hasNamespace, hasTypes].filter(Boolean).length;\n if (optionCount === 0) {\n throw new Error(\n \"Please specify one of: --all, --namespace <name>, or type names\",\n );\n }\n if (optionCount > 1) {\n throw new Error(\n \"Options --all, --namespace, and type names are mutually exclusive. Please specify only one.\",\n );\n }\n\n // Validate config and get namespaces before confirmation\n const namespaces = await getAllNamespaces(options?.configPath);\n\n // Handle --all flag\n if (hasAll) {\n if (namespaces.length === 0) {\n logger.warn(\"No namespaces found in config file.\");\n return;\n }\n\n if (!options?.yes) {\n const namespaceList = namespaces.join(\", \");\n const confirmation = await logger.prompt(\n `This will truncate ALL tables in the following namespaces: ${namespaceList}. Continue? (yes/no)`,\n {\n type: \"confirm\",\n initial: false,\n },\n );\n if (!confirmation) {\n logger.info(\"Truncate cancelled.\");\n return;\n }\n }\n\n for (const namespace of namespaces) {\n await truncateNamespace(workspaceId, namespace, client);\n }\n logger.success(\"Truncated all tables in all namespaces\");\n return;\n }\n\n // Handle --namespace flag\n if (hasNamespace && options?.namespace) {\n const namespace = options.namespace;\n\n // Validate namespace exists in config\n if (!namespaces.includes(namespace)) {\n throw new Error(\n `Namespace \"${namespace}\" not found in config. Available namespaces: ${namespaces.join(\", \")}`,\n );\n }\n\n if (!options.yes) {\n const confirmation = await logger.prompt(\n `This will truncate ALL tables in namespace \"${namespace}\". Continue? (yes/no)`,\n {\n type: \"confirm\",\n initial: false,\n },\n );\n if (!confirmation) {\n logger.info(\"Truncate cancelled.\");\n return;\n }\n }\n\n await truncateNamespace(workspaceId, namespace, client);\n return;\n }\n\n // Handle specific types\n if (hasTypes && options?.types) {\n const typeNames = options.types;\n\n // Validate all types exist and get their namespaces before confirmation\n const typeNamespaceMap = new Map<string, string>();\n const notFoundTypes: string[] = [];\n\n for (const typeName of typeNames) {\n const namespace = await getTypeNamespace(\n workspaceId,\n typeName,\n client,\n options.configPath,\n );\n\n if (namespace) {\n typeNamespaceMap.set(typeName, namespace);\n } else {\n notFoundTypes.push(typeName);\n }\n }\n\n if (notFoundTypes.length > 0) {\n throw new Error(\n `The following types were not found in any namespace: ${notFoundTypes.join(\", \")}`,\n );\n }\n\n if (!options.yes) {\n const typeList = typeNames.join(\", \");\n const confirmation = await logger.prompt(\n `This will truncate the following types: ${typeList}. Continue? (yes/no)`,\n {\n type: \"confirm\",\n initial: false,\n },\n );\n if (!confirmation) {\n logger.info(\"Truncate cancelled.\");\n return;\n }\n }\n\n for (const typeName of typeNames) {\n const namespace = typeNamespaceMap.get(typeName);\n if (!namespace) {\n continue;\n }\n\n await truncateSingleType(\n {\n workspaceId,\n namespaceName: namespace,\n typeName,\n },\n client,\n );\n }\n }\n}\n\nexport const truncateCommand = defineCommand({\n meta: {\n name: \"truncate\",\n description: \"Truncate TailorDB tables\",\n },\n args: {\n ...commonArgs,\n types: {\n type: \"positional\",\n description: \"Type names to truncate\",\n required: false,\n },\n all: {\n type: \"boolean\",\n description: \"Truncate all tables in all namespaces\",\n default: false,\n alias: \"a\",\n },\n namespace: {\n type: \"string\",\n description: \"Truncate all tables in specified namespace\",\n alias: \"n\",\n },\n yes: {\n type: \"boolean\",\n description: \"Skip confirmation prompt\",\n alias: \"y\",\n default: false,\n },\n ...deploymentArgs,\n },\n run: withCommonArgs(async (args) => {\n // Get type names from rest arguments (_)\n const types =\n args._.length > 0\n ? args._.map((arg) => String(arg)).filter(Boolean)\n : undefined;\n await truncate({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n all: args.all,\n namespace: args.namespace,\n types,\n yes: args.yes,\n });\n }),\n});\n","import { defineCommand } from \"citty\";\nimport { truncateCommand } from \"./truncate\";\n\nexport const tailordbCommand = defineCommand({\n meta: {\n name: \"tailordb\",\n description: \"Manage TailorDB tables and data\",\n },\n subCommands: {\n truncate: truncateCommand,\n },\n});\n","import { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, withCommonArgs } from \"../args\";\nimport { readPlatformConfig } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport const currentCommand = defineCommand({\n meta: {\n name: \"current\",\n description: \"Show current user\",\n },\n args: commonArgs,\n run: withCommonArgs(async () => {\n const config = readPlatformConfig();\n\n // Check if current user is set\n if (!config.current_user) {\n logger.warn(ml`\n Current user not set.\n Please login first using 'tailor-sdk login' command to register a user.\n `);\n return;\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 { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../args\";\nimport { readPlatformConfig } from \"../context\";\nimport { printData } from \"../utils/format\";\nimport { logger } from \"../utils/logger\";\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all users\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n },\n run: withCommonArgs(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 printData(users, args.json);\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 { printData } from \"../../utils/format\";\nimport { logger } from \"../../utils/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\nexport function transformPersonalAccessToken(\n pat: PersonalAccessToken,\n): PersonalAccessTokenInfo {\n return {\n name: pat.name,\n scopes: pat.scopes.map(patScopeToString),\n };\n}\n\nexport function getScopesFromWriteFlag(write: boolean): PATScope[] {\n return write\n ? [PATScope.PAT_SCOPE_READ, PATScope.PAT_SCOPE_WRITE]\n : [PATScope.PAT_SCOPE_READ];\n}\n\nfunction getScopeStringsFromWriteFlag(write: boolean): string[] {\n return write ? [\"read\", \"write\"] : [\"read\"];\n}\n\nexport function printCreatedToken(\n name: string,\n token: string,\n write: boolean,\n action: \"created\" | \"updated\",\n json?: boolean,\n): void {\n const scopes = getScopeStringsFromWriteFlag(write);\n\n if (json) {\n printData({ name, scopes, token }, json);\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 { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../../args\";\nimport { initOperatorClient } from \"../../client\";\nimport { fetchLatestToken, readPlatformConfig } from \"../../context\";\nimport { getScopesFromWriteFlag, printCreatedToken } from \"./transform\";\n\nexport const createCommand = defineCommand({\n meta: {\n name: \"create\",\n description: \"Create new personal access token\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n name: {\n type: \"positional\",\n description: \"Token name\",\n required: true,\n },\n write: {\n type: \"boolean\",\n description: \"Grant write permission (default: read-only)\",\n alias: \"W\",\n default: false,\n },\n },\n run: withCommonArgs(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(\n args.name,\n result.accessToken,\n args.write,\n \"created\",\n args.json,\n );\n }),\n});\n","import { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, withCommonArgs } from \"../../args\";\nimport { initOperatorClient } from \"../../client\";\nimport { fetchLatestToken, readPlatformConfig } from \"../../context\";\nimport { logger } from \"../../utils/logger\";\n\nexport const deleteCommand = defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete personal access token\",\n },\n args: {\n ...commonArgs,\n name: {\n type: \"positional\",\n description: \"Token name\",\n required: true,\n },\n },\n run: withCommonArgs(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(\n `Personal access token \"${args.name}\" deleted successfully.`,\n );\n }),\n});\n","import { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../../args\";\nimport { fetchAll, initOperatorClient } from \"../../client\";\nimport { fetchLatestToken, readPlatformConfig } from \"../../context\";\nimport { printData } from \"../../utils/format\";\nimport { logger } from \"../../utils/logger\";\nimport {\n transformPersonalAccessToken,\n type PersonalAccessTokenInfo,\n} from \"./transform\";\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all personal access tokens\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n },\n run: withCommonArgs(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) => {\n const { personalAccessTokens, nextPageToken } =\n await client.listPersonalAccessTokens({\n pageToken,\n });\n return [personalAccessTokens, nextPageToken];\n });\n\n if (pats.length === 0) {\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 if (args.json) {\n // JSON format with scopes as array\n const patInfos: PersonalAccessTokenInfo[] = pats.map(\n transformPersonalAccessToken,\n );\n printData(patInfos, args.json);\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 { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, jsonArgs, withCommonArgs } from \"../../args\";\nimport { initOperatorClient } from \"../../client\";\nimport { fetchLatestToken, readPlatformConfig } from \"../../context\";\nimport { getScopesFromWriteFlag, printCreatedToken } from \"./transform\";\n\nexport const updateCommand = defineCommand({\n meta: {\n name: \"update\",\n description: \"Update personal access token (delete and recreate)\",\n },\n args: {\n ...commonArgs,\n ...jsonArgs,\n name: {\n type: \"positional\",\n description: \"Token name\",\n required: true,\n },\n write: {\n type: \"boolean\",\n description: \"Grant write permission (if not specified, keeps read-only)\",\n alias: \"W\",\n default: false,\n },\n },\n run: withCommonArgs(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(\n args.name,\n result.accessToken,\n args.write,\n \"updated\",\n args.json,\n );\n }),\n});\n","import { defineCommand, runCommand } from \"citty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\nimport { updateCommand } from \"./update\";\n\nexport const patCommand = defineCommand({\n meta: {\n name: \"pat\",\n description: \"Manage personal access tokens\",\n },\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n update: updateCommand,\n },\n async run(context) {\n // Default to list when no subcommand is provided\n await runCommand(listCommand, {\n rawArgs: context.rawArgs || [],\n });\n },\n});\n","import { defineCommand } from \"citty\";\nimport ml from \"multiline-ts\";\nimport { commonArgs, withCommonArgs } from \"../args\";\nimport { readPlatformConfig, writePlatformConfig } from \"../context\";\nimport { logger } from \"../utils/logger\";\n\nexport const switchCommand = defineCommand({\n meta: {\n name: \"switch\",\n description: \"Set current user\",\n },\n args: {\n ...commonArgs,\n user: {\n type: \"positional\",\n description: \"User email\",\n required: true,\n },\n },\n run: withCommonArgs(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 \"citty\";\nimport { currentCommand } from \"./current\";\nimport { listCommand } from \"./list\";\nimport { patCommand } from \"./pat\";\nimport { switchCommand } from \"./switch\";\n\nexport const userCommand = defineCommand({\n meta: {\n name: \"user\",\n description: \"Manage Tailor Platform users\",\n },\n subCommands: {\n current: currentCommand,\n list: listCommand,\n pat: patCommand,\n switch: switchCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","import { defineCommand, runCommand } from \"citty\";\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 meta: {\n name: \"workflow\",\n description: \"Manage workflows\",\n },\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, { rawArgs: [] });\n },\n});\n","import { defineCommand, runCommand } from \"citty\";\nimport { createCommand } from \"./create\";\nimport { deleteCommand } from \"./delete\";\nimport { listCommand } from \"./list\";\n\nexport const workspaceCommand = defineCommand({\n meta: {\n name: \"workspace\",\n description: \"Manage Tailor Platform workspaces\",\n },\n subCommands: {\n create: createCommand,\n delete: deleteCommand,\n list: listCommand,\n },\n async run() {\n await runCommand(listCommand, { rawArgs: [] });\n },\n});\n","#!/usr/bin/env node\n\nimport { register } from \"node:module\";\nimport { defineCommand, runMain } from \"citty\";\nimport { applyCommand } from \"./apply\";\nimport { generateCommand } from \"./generator\";\nimport { initCommand } from \"./init\";\nimport { loginCommand } from \"./login\";\nimport { logoutCommand } from \"./logout\";\nimport { machineuserCommand } from \"./machineuser\";\nimport { oauth2clientCommand } from \"./oauth2client\";\nimport { profileCommand } from \"./profile\";\nimport { removeCommand } from \"./remove\";\nimport { secretCommand } from \"./secret\";\nimport { showCommand } from \"./show\";\nimport { staticwebsiteCommand } from \"./staticwebsite\";\nimport { tailordbCommand } from \"./tailordb\";\nimport { userCommand } from \"./user\";\nimport { readPackageJson } from \"./utils/package-json\";\nimport { workflowCommand } from \"./workflow\";\nimport { workspaceCommand } from \"./workspace\";\n\nregister(\"tsx\", import.meta.url, { data: {} });\n\nconst packageJson = await readPackageJson();\n\nexport const mainCommand = defineCommand({\n meta: {\n name: packageJson.name,\n version: packageJson.version,\n description:\n packageJson.description ||\n \"Tailor CLI for managing Tailor Platform SDK applications\",\n },\n subCommands: {\n apply: applyCommand,\n generate: generateCommand,\n init: initCommand,\n login: loginCommand,\n logout: logoutCommand,\n machineuser: machineuserCommand,\n oauth2client: oauth2clientCommand,\n profile: profileCommand,\n remove: removeCommand,\n secret: secretCommand,\n show: showCommand,\n staticwebsite: staticwebsiteCommand,\n tailordb: tailordbCommand,\n user: userCommand,\n workflow: workflowCommand,\n workspace: workspaceCommand,\n },\n});\n\nrunMain(mainCommand);\n"],"mappings":"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"}
|
|
@@ -733,22 +733,6 @@ const db = {
|
|
|
733
733
|
}) }
|
|
734
734
|
};
|
|
735
735
|
|
|
736
|
-
//#endregion
|
|
737
|
-
//#region src/configure/config.ts
|
|
738
|
-
let distPath = null;
|
|
739
|
-
const getDistDir = () => {
|
|
740
|
-
const configured = process.env.TAILOR_SDK_OUTPUT_DIR;
|
|
741
|
-
if (configured && configured !== distPath) distPath = configured;
|
|
742
|
-
else if (distPath === null) distPath = configured || ".tailor-sdk";
|
|
743
|
-
return distPath;
|
|
744
|
-
};
|
|
745
|
-
function defineConfig(config) {
|
|
746
|
-
return config;
|
|
747
|
-
}
|
|
748
|
-
function defineGenerators(...configs) {
|
|
749
|
-
return configs;
|
|
750
|
-
}
|
|
751
|
-
|
|
752
736
|
//#endregion
|
|
753
737
|
//#region src/configure/services/auth/index.ts
|
|
754
738
|
function defineAuth(name, config) {
|
|
@@ -785,5 +769,21 @@ const createWorkflowJob = (config) => {
|
|
|
785
769
|
};
|
|
786
770
|
|
|
787
771
|
//#endregion
|
|
788
|
-
|
|
789
|
-
|
|
772
|
+
//#region src/configure/config.ts
|
|
773
|
+
let distPath = null;
|
|
774
|
+
const getDistDir = () => {
|
|
775
|
+
const configured = process.env.TAILOR_SDK_OUTPUT_DIR;
|
|
776
|
+
if (configured && configured !== distPath) distPath = configured;
|
|
777
|
+
else if (distPath === null) distPath = configured || ".tailor-sdk";
|
|
778
|
+
return distPath;
|
|
779
|
+
};
|
|
780
|
+
function defineConfig(config) {
|
|
781
|
+
return config;
|
|
782
|
+
}
|
|
783
|
+
function defineGenerators(...configs) {
|
|
784
|
+
return configs;
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
//#endregion
|
|
788
|
+
export { createWorkflowJob as a, unsafeAllowAllGqlPermission as c, unauthenticatedTailorUser as d, TailorField as f, WORKFLOW_JOB_BRAND as i, unsafeAllowAllTypePermission as l, defineGenerators as n, defineAuth as o, t as p, getDistDir as r, db as s, defineConfig as t, tailorUserMap as u };
|
|
789
|
+
//# sourceMappingURL=config-BGY8v5d7.mjs.map
|