@insforge/cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/index.ts
4
- import { existsSync as existsSync4, mkdirSync as mkdirSync2 } from "fs";
5
- import { join as join5 } from "path";
4
+ import { existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync5 } from "fs";
5
+ import { join as join5, dirname } from "path";
6
+ import { fileURLToPath } from "url";
6
7
  import { Command } from "commander";
7
8
 
8
9
  // src/commands/login.ts
@@ -2187,6 +2188,73 @@ function registerDeploymentsCancelCommand(deploymentsCmd2) {
2187
2188
  });
2188
2189
  }
2189
2190
 
2191
+ // src/commands/docs.ts
2192
+ var FEATURES = ["db", "storage", "functions", "auth", "ai", "realtime"];
2193
+ var LANGUAGES = ["typescript", "swift", "kotlin", "rest-api"];
2194
+ function registerDocsCommand(program2) {
2195
+ program2.command("docs [feature] [language]").description("Browse InsForge SDK documentation").addHelpText("after", `
2196
+ Features: ${FEATURES.join(", ")}
2197
+ Languages: ${LANGUAGES.join(", ")}
2198
+
2199
+ Examples:
2200
+ insforge docs List all available docs
2201
+ insforge docs instructions Show setup instructions
2202
+ insforge docs db typescript Show TypeScript database SDK docs
2203
+ insforge docs auth swift Show Swift auth SDK docs
2204
+ insforge docs storage rest-api Show REST API storage docs`).action(async (feature, language, _opts, cmd) => {
2205
+ const { json } = getRootOpts(cmd);
2206
+ try {
2207
+ requireAuth();
2208
+ if (!feature) {
2209
+ await listDocs(json);
2210
+ return;
2211
+ }
2212
+ if (!language) {
2213
+ await fetchDoc(`/api/docs/${encodeURIComponent(feature)}`, feature, json);
2214
+ return;
2215
+ }
2216
+ await fetchDoc(
2217
+ `/api/docs/${encodeURIComponent(feature)}/${encodeURIComponent(language)}`,
2218
+ `${feature}/${language}`,
2219
+ json
2220
+ );
2221
+ } catch (err) {
2222
+ handleError(err, json);
2223
+ }
2224
+ });
2225
+ }
2226
+ async function listDocs(json) {
2227
+ const res = await ossFetch("/api/docs");
2228
+ const data = await res.json();
2229
+ const docs = Array.isArray(data) ? data : data.data ?? [];
2230
+ if (json) {
2231
+ outputJson(docs);
2232
+ } else {
2233
+ if (!docs.length) {
2234
+ console.log("No documentation available.");
2235
+ return;
2236
+ }
2237
+ outputTable(
2238
+ ["Type", "Endpoint"],
2239
+ docs.map((d) => [String(d.type ?? "-"), String(d.endpoint ?? "-")])
2240
+ );
2241
+ }
2242
+ }
2243
+ async function fetchDoc(path3, label, json) {
2244
+ const res = await ossFetch(path3);
2245
+ const data = await res.json();
2246
+ const doc = data.data ?? data;
2247
+ if (json) {
2248
+ outputJson(doc);
2249
+ } else {
2250
+ if (doc.content) {
2251
+ console.log(doc.content);
2252
+ } else {
2253
+ console.log(`No content returned for "${label}".`);
2254
+ }
2255
+ }
2256
+ }
2257
+
2190
2258
  // src/commands/secrets/list.ts
2191
2259
  function registerSecretsListCommand(secretsCmd2) {
2192
2260
  secretsCmd2.command("list").description("List secrets (metadata only, values are hidden)").option("--all", "Include inactive (deleted) secrets").action(async (opts, cmd) => {
@@ -2332,6 +2400,8 @@ function registerSecretsDeleteCommand(secretsCmd2) {
2332
2400
  }
2333
2401
 
2334
2402
  // src/index.ts
2403
+ var __dirname = dirname(fileURLToPath(import.meta.url));
2404
+ var pkg = JSON.parse(readFileSync5(join5(__dirname, "../package.json"), "utf-8"));
2335
2405
  var INSFORGE_LOGO = `
2336
2406
  \u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557
2337
2407
  \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D
@@ -2350,7 +2420,7 @@ function showLogoOnFirstRun() {
2350
2420
  }
2351
2421
  showLogoOnFirstRun();
2352
2422
  var program = new Command();
2353
- program.name("insforge").description("InsForge CLI - Command line tool for InsForge platform").version("0.1.0");
2423
+ program.name("insforge").description("InsForge CLI - Command line tool for InsForge platform").version(pkg.version);
2354
2424
  program.option("--json", "Output in JSON format").option("--project-id <id>", "Override linked project ID").option("--api-url <url>", "Override Platform API URL").option("-y, --yes", "Skip confirmation prompts");
2355
2425
  registerLoginCommand(program);
2356
2426
  registerLogoutCommand(program);
@@ -2358,6 +2428,7 @@ registerWhoamiCommand(program);
2358
2428
  registerCreateCommand(program);
2359
2429
  registerContextCommand(program);
2360
2430
  registerListCommand(program);
2431
+ registerDocsCommand(program);
2361
2432
  registerProjectLinkCommand(program);
2362
2433
  var orgsCmd = program.command("orgs", { hidden: true }).description("Manage organizations");
2363
2434
  registerOrgsCommands(orgsCmd);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands/login.ts","../src/lib/config.ts","../src/lib/errors.ts","../src/lib/auth.ts","../src/lib/credentials.ts","../src/lib/api/platform.ts","../src/lib/output.ts","../src/commands/logout.ts","../src/commands/whoami.ts","../src/commands/orgs/list.ts","../src/commands/projects/list.ts","../src/commands/projects/link.ts","../src/lib/skills.ts","../src/lib/api/oss.ts","../src/commands/db/query.ts","../src/commands/db/tables.ts","../src/commands/db/functions.ts","../src/commands/db/indexes.ts","../src/commands/db/policies.ts","../src/commands/db/triggers.ts","../src/commands/db/rpc.ts","../src/commands/db/export.ts","../src/commands/db/import.ts","../src/commands/records/list.ts","../src/commands/records/create.ts","../src/commands/records/update.ts","../src/commands/records/delete.ts","../src/commands/functions/list.ts","../src/commands/functions/deploy.ts","../src/commands/functions/invoke.ts","../src/commands/functions/code.ts","../src/commands/storage/buckets.ts","../src/commands/storage/upload.ts","../src/commands/storage/download.ts","../src/commands/storage/create-bucket.ts","../src/commands/storage/delete-bucket.ts","../src/commands/storage/list-objects.ts","../src/commands/create.ts","../src/commands/info.ts","../src/commands/list.ts","../src/commands/deployments/deploy.ts","../src/commands/deployments/list.ts","../src/commands/deployments/status.ts","../src/commands/deployments/cancel.ts","../src/commands/secrets/list.ts","../src/commands/secrets/get.ts","../src/commands/secrets/add.ts","../src/commands/secrets/update.ts","../src/commands/secrets/delete.ts"],"sourcesContent":["import { existsSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { Command } from 'commander';\nimport { registerLoginCommand } from './commands/login.js';\nimport { registerLogoutCommand } from './commands/logout.js';\nimport { registerWhoamiCommand } from './commands/whoami.js';\nimport { registerOrgsCommands } from './commands/orgs/list.js';\nimport { registerProjectsCommands } from './commands/projects/list.js';\nimport { registerProjectLinkCommand } from './commands/projects/link.js';\nimport { registerDbCommands } from './commands/db/query.js';\nimport { registerDbTablesCommand } from './commands/db/tables.js';\nimport { registerDbFunctionsCommand } from './commands/db/functions.js';\nimport { registerDbIndexesCommand } from './commands/db/indexes.js';\nimport { registerDbPoliciesCommand } from './commands/db/policies.js';\nimport { registerDbTriggersCommand } from './commands/db/triggers.js';\nimport { registerDbRpcCommand } from './commands/db/rpc.js';\nimport { registerDbExportCommand } from './commands/db/export.js';\nimport { registerDbImportCommand } from './commands/db/import.js';\nimport { registerRecordsCommands } from './commands/records/list.js';\nimport { registerRecordsCreateCommand } from './commands/records/create.js';\nimport { registerRecordsUpdateCommand } from './commands/records/update.js';\nimport { registerRecordsDeleteCommand } from './commands/records/delete.js';\nimport { registerFunctionsCommands } from './commands/functions/list.js';\nimport { registerFunctionsDeployCommand } from './commands/functions/deploy.js';\nimport { registerFunctionsInvokeCommand } from './commands/functions/invoke.js';\nimport { registerFunctionsCodeCommand } from './commands/functions/code.js';\nimport { registerStorageBucketsCommand } from './commands/storage/buckets.js';\nimport { registerStorageUploadCommand } from './commands/storage/upload.js';\nimport { registerStorageDownloadCommand } from './commands/storage/download.js';\nimport { registerStorageCreateBucketCommand } from './commands/storage/create-bucket.js';\nimport { registerStorageDeleteBucketCommand } from './commands/storage/delete-bucket.js';\nimport { registerStorageListObjectsCommand } from './commands/storage/list-objects.js';\nimport { registerCreateCommand } from './commands/create.js';\nimport { registerContextCommand } from './commands/info.js';\nimport { registerListCommand } from './commands/list.js';\nimport { registerDeploymentsDeployCommand } from './commands/deployments/deploy.js';\nimport { registerDeploymentsListCommand } from './commands/deployments/list.js';\nimport { registerDeploymentsStatusCommand } from './commands/deployments/status.js';\nimport { registerDeploymentsCancelCommand } from './commands/deployments/cancel.js';\n\nimport { registerSecretsListCommand } from './commands/secrets/list.js';\nimport { registerSecretsGetCommand } from './commands/secrets/get.js';\nimport { registerSecretsAddCommand } from './commands/secrets/add.js';\nimport { registerSecretsUpdateCommand } from './commands/secrets/update.js';\nimport { registerSecretsDeleteCommand } from './commands/secrets/delete.js';\n\nconst INSFORGE_LOGO = `\n██╗███╗ ██╗███████╗███████╗ ██████╗ ██████╗ ██████╗ ███████╗\n██║████╗ ██║██╔════╝██╔════╝██╔═══██╗██╔══██╗██╔════╝ ██╔════╝\n██║██╔██╗ ██║███████╗█████╗ ██║ ██║██████╔╝██║ ███╗█████╗\n██║██║╚██╗██║╚════██║██╔══╝ ██║ ██║██╔══██╗██║ ██║██╔══╝\n██║██║ ╚████║███████║██║ ╚██████╔╝██║ ██║╚██████╔╝███████╗\n╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝\n`;\n\nfunction showLogoOnFirstRun(): void {\n if (process.argv.includes('--json')) return;\n\n const localDir = join(process.cwd(), '.insforge');\n if (existsSync(localDir)) return;\n\n console.log(INSFORGE_LOGO);\n console.log(' Welcome to InsForge CLI! Run `insforge login` to get started.\\n');\n\n mkdirSync(localDir, { recursive: true });\n}\n\nshowLogoOnFirstRun();\n\nconst program = new Command();\n\nprogram\n .name('insforge')\n .description('InsForge CLI - Command line tool for InsForge platform')\n .version('0.1.0');\n\n// Global options\nprogram\n .option('--json', 'Output in JSON format')\n .option('--project-id <id>', 'Override linked project ID')\n .option('--api-url <url>', 'Override Platform API URL')\n .option('-y, --yes', 'Skip confirmation prompts');\n\n// Top-level commands\nregisterLoginCommand(program);\nregisterLogoutCommand(program);\nregisterWhoamiCommand(program);\nregisterCreateCommand(program);\nregisterContextCommand(program);\nregisterListCommand(program);\nregisterProjectLinkCommand(program);\n\n// Orgs commands (hidden — use `insforge list` instead)\nconst orgsCmd = program.command('orgs', { hidden: true }).description('Manage organizations');\nregisterOrgsCommands(orgsCmd);\n\n// Projects commands (hidden — use `insforge list` instead)\nconst projectsCmd = program.command('projects', { hidden: true }).description('Manage projects');\nregisterProjectsCommands(projectsCmd);\n\n// Database commands\nconst dbCmd = program.command('db').description('Database operations');\nregisterDbCommands(dbCmd);\nregisterDbTablesCommand(dbCmd);\nregisterDbFunctionsCommand(dbCmd);\nregisterDbIndexesCommand(dbCmd);\nregisterDbPoliciesCommand(dbCmd);\nregisterDbTriggersCommand(dbCmd);\nregisterDbRpcCommand(dbCmd);\nregisterDbExportCommand(dbCmd);\nregisterDbImportCommand(dbCmd);\n\n// Records commands (hidden — do not use for now)\nconst recordsCmd = program.command('records', { hidden: true }).description('CRUD operations on table records');\nregisterRecordsCommands(recordsCmd);\nregisterRecordsCreateCommand(recordsCmd);\nregisterRecordsUpdateCommand(recordsCmd);\nregisterRecordsDeleteCommand(recordsCmd);\n\n// Functions commands\nconst functionsCmd = program.command('functions').description('Manage edge functions');\nregisterFunctionsCommands(functionsCmd);\nregisterFunctionsCodeCommand(functionsCmd);\nregisterFunctionsDeployCommand(functionsCmd);\nregisterFunctionsInvokeCommand(functionsCmd);\n\n// Storage commands\nconst storageCmd = program.command('storage').description('Manage storage');\nregisterStorageBucketsCommand(storageCmd);\nregisterStorageCreateBucketCommand(storageCmd);\nregisterStorageDeleteBucketCommand(storageCmd);\nregisterStorageListObjectsCommand(storageCmd);\nregisterStorageUploadCommand(storageCmd);\nregisterStorageDownloadCommand(storageCmd);\n\n// Deployments commands\nconst deploymentsCmd = program.command('deployments').description('Deploy and manage frontend sites');\nregisterDeploymentsDeployCommand(deploymentsCmd);\nregisterDeploymentsListCommand(deploymentsCmd);\nregisterDeploymentsStatusCommand(deploymentsCmd);\nregisterDeploymentsCancelCommand(deploymentsCmd);\n// registerDeploymentsMetadataCommand(deploymentsCmd);\n// slug command doesn't work yet.\n// registerDeploymentsSlugCommand(deploymentsCmd);\n\n// Secrets commands\nconst secretsCmd = program.command('secrets').description('Manage secrets');\nregisterSecretsListCommand(secretsCmd);\nregisterSecretsGetCommand(secretsCmd);\nregisterSecretsAddCommand(secretsCmd);\nregisterSecretsUpdateCommand(secretsCmd);\nregisterSecretsDeleteCommand(secretsCmd);\n\nprogram.parse();\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { saveCredentials, getGlobalConfig, getPlatformApiUrl } from '../lib/config.js';\nimport { login as platformLogin, getProfile } from '../lib/api/platform.js';\nimport {\n generatePKCE,\n generateState,\n buildAuthorizeUrl,\n exchangeCodeForTokens,\n startCallbackServer,\n DEFAULT_CLIENT_ID,\n OAUTH_SCOPES,\n} from '../lib/auth.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport type { StoredCredentials } from '../types.js';\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Authenticate with InsForge platform')\n .option('--email', 'Login with email and password instead of browser')\n .option('--client-id <id>', 'OAuth client ID (defaults to insforge-cli)')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n\n try {\n if (opts.email) {\n await loginWithEmail(json, apiUrl);\n } else {\n await loginWithOAuth(json, apiUrl, opts.clientId);\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('cancelled')) {\n process.exit(0);\n }\n handleError(err, json);\n }\n });\n}\n\nasync function loginWithEmail(json: boolean, apiUrl?: string): Promise<void> {\n if (!json) {\n clack.intro('InsForge CLI');\n }\n\n const email = json\n ? process.env.INSFORGE_EMAIL\n : await clack.text({\n message: 'Email:',\n validate: (v) => (v.includes('@') ? undefined : 'Please enter a valid email'),\n });\n\n if (clack.isCancel(email)) {\n clack.cancel('Login cancelled.');\n throw new Error('cancelled');\n }\n\n const password = json\n ? process.env.INSFORGE_PASSWORD\n : await clack.password({\n message: 'Password:',\n });\n\n if (clack.isCancel(password)) {\n clack.cancel('Login cancelled.');\n throw new Error('cancelled');\n }\n\n if (!email || !password) {\n throw new Error('Email and password are required. Set INSFORGE_EMAIL and INSFORGE_PASSWORD environment variables for non-interactive mode.');\n }\n\n if (!json) {\n const s = clack.spinner();\n s.start('Authenticating...');\n\n const result = await platformLogin(email as string, password as string, apiUrl);\n const creds: StoredCredentials = {\n access_token: result.token,\n refresh_token: result._refreshToken ?? '',\n user: result.user,\n };\n saveCredentials(creds);\n\n s.stop(`Authenticated as ${result.user.email}`);\n clack.outro('Done');\n } else {\n const result = await platformLogin(email as string, password as string, apiUrl);\n const creds: StoredCredentials = {\n access_token: result.token,\n refresh_token: result._refreshToken ?? '',\n user: result.user,\n };\n saveCredentials(creds);\n console.log(JSON.stringify({ success: true, user: result.user }));\n }\n}\n\nasync function loginWithOAuth(json: boolean, apiUrl?: string, clientIdOverride?: string): Promise<void> {\n const platformUrl = getPlatformApiUrl(apiUrl);\n const config = getGlobalConfig();\n const clientId = clientIdOverride ?? config.oauth_client_id ?? DEFAULT_CLIENT_ID;\n\n // 1. Generate PKCE and state\n const pkce = generatePKCE();\n const state = generateState();\n\n // 2. Start local callback server\n const { port, result, close } = await startCallbackServer();\n const redirectUri = `http://127.0.0.1:${port}/callback`;\n\n // 3. Build authorization URL\n const authUrl = buildAuthorizeUrl({\n platformUrl,\n clientId,\n redirectUri,\n codeChallenge: pkce.code_challenge,\n state,\n scopes: OAUTH_SCOPES,\n });\n\n if (!json) {\n clack.intro('InsForge CLI');\n clack.log.info('Opening browser for authentication...');\n clack.log.info(`If browser doesn't open, visit:\\n${authUrl}`);\n }\n\n // 4. Open browser\n try {\n const open = (await import('open')).default;\n await open(authUrl);\n } catch {\n if (!json) {\n clack.log.warn(`Could not open browser. Please visit the URL above.`);\n }\n }\n\n // 5. Wait for callback\n if (!json) {\n const s = clack.spinner();\n s.start('Waiting for authentication...');\n\n try {\n const callbackResult = await result;\n close();\n\n // Verify state\n if (callbackResult.state !== state) {\n s.stop('Authentication failed');\n throw new Error('State mismatch. Possible CSRF attack.');\n }\n\n // 6. Exchange code for tokens\n s.message('Exchanging authorization code...');\n const tokens = await exchangeCodeForTokens({\n platformUrl,\n code: callbackResult.code,\n redirectUri,\n clientId,\n codeVerifier: pkce.code_verifier,\n });\n\n // 7. Fetch user profile with the new token\n const creds: StoredCredentials = {\n access_token: tokens.access_token,\n refresh_token: tokens.refresh_token,\n user: { id: '', name: '', email: '', avatar_url: null, email_verified: true },\n };\n saveCredentials(creds);\n\n // Try to get user profile\n try {\n const profile = await getProfile(apiUrl);\n creds.user = profile;\n saveCredentials(creds);\n s.stop(`Authenticated as ${profile.email}`);\n } catch {\n s.stop('Authenticated successfully');\n }\n\n clack.outro('Done');\n } catch (err) {\n close();\n s.stop('Authentication failed');\n throw err;\n }\n } else {\n // JSON mode\n try {\n const callbackResult = await result;\n close();\n\n if (callbackResult.state !== state) {\n throw new Error('State mismatch.');\n }\n\n const tokens = await exchangeCodeForTokens({\n platformUrl,\n code: callbackResult.code,\n redirectUri,\n clientId,\n codeVerifier: pkce.code_verifier,\n });\n\n const creds: StoredCredentials = {\n access_token: tokens.access_token,\n refresh_token: tokens.refresh_token,\n user: { id: '', name: '', email: '', avatar_url: null, email_verified: true },\n };\n saveCredentials(creds);\n\n try {\n const profile = await getProfile(apiUrl);\n creds.user = profile;\n saveCredentials(creds);\n } catch {}\n\n console.log(JSON.stringify({ success: true, user: creds.user }));\n } catch (err) {\n close();\n throw err;\n }\n }\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport type { GlobalConfig, ProjectConfig, StoredCredentials } from '../types.js';\n\nconst GLOBAL_DIR = join(homedir(), '.insforge');\nconst CREDENTIALS_FILE = join(GLOBAL_DIR, 'credentials.json');\nconst CONFIG_FILE = join(GLOBAL_DIR, 'config.json');\n\nconst DEFAULT_PLATFORM_URL = 'https://api.insforge.dev';\nconst DEFAULT_FRONTEND_URL = 'https://app.insforge.dev';\n\nfunction ensureGlobalDir(): void {\n if (!existsSync(GLOBAL_DIR)) {\n mkdirSync(GLOBAL_DIR, { recursive: true });\n }\n}\n\n// --- Global Config ---\n\nexport function getGlobalConfig(): GlobalConfig {\n if (!existsSync(CONFIG_FILE)) {\n return { platform_api_url: DEFAULT_PLATFORM_URL };\n }\n const raw = readFileSync(CONFIG_FILE, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveGlobalConfig(config: GlobalConfig): void {\n ensureGlobalDir();\n writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));\n}\n\n// --- Credentials ---\n\nexport function getCredentials(): StoredCredentials | null {\n if (!existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n const raw = readFileSync(CREDENTIALS_FILE, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveCredentials(creds: StoredCredentials): void {\n ensureGlobalDir();\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(creds, null, 2), { mode: 0o600 });\n}\n\nexport function clearCredentials(): void {\n if (existsSync(CREDENTIALS_FILE)) {\n unlinkSync(CREDENTIALS_FILE);\n }\n}\n\n// --- Project Config (local) ---\n\nfunction getLocalConfigDir(): string {\n return join(process.cwd(), '.insforge');\n}\n\nfunction getLocalConfigFile(): string {\n return join(getLocalConfigDir(), 'project.json');\n}\n\nexport function getProjectConfig(): ProjectConfig | null {\n const file = getLocalConfigFile();\n if (!existsSync(file)) {\n return null;\n }\n const raw = readFileSync(file, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveProjectConfig(config: ProjectConfig): void {\n const dir = getLocalConfigDir();\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(getLocalConfigFile(), JSON.stringify(config, null, 2), { mode: 0o600 });\n}\n\n// --- Resolved values (env vars > flags > config) ---\n\nexport function getPlatformApiUrl(override?: string): string {\n return process.env.INSFORGE_API_URL ?? override ?? getGlobalConfig().platform_api_url ?? DEFAULT_PLATFORM_URL;\n}\n\nexport function getFrontendUrl(): string {\n return process.env.INSFORGE_FRONTEND_URL ?? DEFAULT_FRONTEND_URL;\n}\n\nexport function getAccessToken(): string | null {\n return process.env.INSFORGE_ACCESS_TOKEN ?? getCredentials()?.access_token ?? null;\n}\n\nexport function getProjectId(override?: string): string | null {\n return process.env.INSFORGE_PROJECT_ID ?? override ?? getProjectConfig()?.project_id ?? null;\n}\n","import type { Command } from 'commander';\n\nexport class CLIError extends Error {\n constructor(\n message: string,\n public exitCode: number = 1,\n public code?: string,\n ) {\n super(message);\n this.name = 'CLIError';\n }\n}\n\nexport class AuthError extends CLIError {\n constructor(message: string = 'Not authenticated. Run `insforge login` first.') {\n super(message, 2, 'AUTH_ERROR');\n }\n}\n\nexport class ProjectNotLinkedError extends CLIError {\n constructor() {\n super('No project linked. Run `insforge projects link` first.', 3, 'PROJECT_NOT_LINKED');\n }\n}\n\nexport class NotFoundError extends CLIError {\n constructor(resource: string) {\n super(`${resource} not found.`, 4, 'NOT_FOUND');\n }\n}\n\nexport class PermissionError extends CLIError {\n constructor(message: string = 'Permission denied.') {\n super(message, 5, 'PERMISSION_DENIED');\n }\n}\n\nexport function handleError(err: unknown, json: boolean): never {\n if (err instanceof CLIError) {\n if (json) {\n console.error(JSON.stringify({ error: err.message, code: err.code }));\n } else {\n console.error(`Error: ${err.message}`);\n }\n process.exit(err.exitCode);\n }\n\n const message = err instanceof Error ? err.message : String(err);\n if (json) {\n console.error(JSON.stringify({ error: message, code: 'UNKNOWN_ERROR' }));\n } else {\n console.error(`Error: ${message}`);\n }\n process.exit(1);\n}\n\nexport function getJsonFlag(cmd: Command): boolean {\n let root: Command = cmd;\n while (root.parent) {\n root = root.parent;\n }\n return root.opts().json ?? false;\n}\n\nexport function getRootOpts(cmd: Command): { json: boolean; projectId?: string; apiUrl?: string; yes: boolean } {\n let root: Command = cmd;\n while (root.parent) {\n root = root.parent;\n }\n const opts = root.opts();\n return {\n json: opts.json ?? false,\n projectId: opts.projectId,\n apiUrl: opts.apiUrl,\n yes: opts.yes ?? false,\n };\n}\n","import { createServer } from 'node:http';\nimport { randomBytes, createHash } from 'node:crypto';\nimport { URL } from 'node:url';\n\n// Default OAuth client for InsForge CLI (pre-registered on the platform)\nexport const DEFAULT_CLIENT_ID = 'clf_NK8cMUs41gm8ZcfdtSguVw';\nexport const OAUTH_SCOPES = 'user:read organizations:read projects:read projects:write';\n\nexport interface PKCEChallenge {\n code_verifier: string;\n code_challenge: string;\n}\n\nexport interface OAuthCallbackResult {\n code: string;\n state: string;\n}\n\n/**\n * Generate PKCE code_verifier and code_challenge (S256).\n */\nexport function generatePKCE(): PKCEChallenge {\n const code_verifier = randomBytes(32).toString('base64url');\n const code_challenge = createHash('sha256').update(code_verifier).digest('base64url');\n return { code_verifier, code_challenge };\n}\n\n/**\n * Generate a random state parameter for CSRF protection.\n */\nexport function generateState(): string {\n return randomBytes(16).toString('base64url');\n}\n\n/**\n * Build the OAuth authorization URL.\n */\nexport function buildAuthorizeUrl(params: {\n platformUrl: string;\n clientId: string;\n redirectUri: string;\n codeChallenge: string;\n state: string;\n scopes: string;\n}): string {\n const url = new URL(`${params.platformUrl}/api/oauth/v1/authorize`);\n url.searchParams.set('client_id', params.clientId);\n url.searchParams.set('redirect_uri', params.redirectUri);\n url.searchParams.set('response_type', 'code');\n url.searchParams.set('scope', params.scopes);\n url.searchParams.set('code_challenge', params.codeChallenge);\n url.searchParams.set('code_challenge_method', 'S256');\n url.searchParams.set('state', params.state);\n return url.toString();\n}\n\n/**\n * Exchange authorization code for tokens via the token endpoint.\n */\nexport async function exchangeCodeForTokens(params: {\n platformUrl: string;\n code: string;\n redirectUri: string;\n clientId: string;\n codeVerifier: string;\n}): Promise<{ access_token: string; refresh_token: string; expires_in: number; scope: string }> {\n const res = await fetch(`${params.platformUrl}/api/oauth/v1/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'authorization_code',\n code: params.code,\n redirect_uri: params.redirectUri,\n client_id: params.clientId,\n code_verifier: params.codeVerifier,\n }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error_description?: string; error?: string };\n throw new Error(err.error_description ?? err.error ?? 'Token exchange failed');\n }\n\n return await res.json() as { access_token: string; refresh_token: string; expires_in: number; scope: string };\n}\n\n/**\n * Refresh an OAuth access token using a refresh token.\n */\nexport async function refreshOAuthToken(params: {\n platformUrl: string;\n refreshToken: string;\n clientId: string;\n}): Promise<{ access_token: string; refresh_token?: string; expires_in: number }> {\n const res = await fetch(`${params.platformUrl}/api/oauth/v1/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'refresh_token',\n refresh_token: params.refreshToken,\n client_id: params.clientId,\n }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error_description?: string; error?: string };\n throw new Error(err.error_description ?? err.error ?? 'Token refresh failed');\n }\n\n return await res.json() as { access_token: string; refresh_token?: string; expires_in: number };\n}\n\n/**\n * Start a local HTTP server to receive the OAuth authorization code callback.\n */\nexport function startCallbackServer(): Promise<{\n port: number;\n result: Promise<OAuthCallbackResult>;\n close: () => void;\n}> {\n return new Promise((resolveServer) => {\n let resolveResult: (value: OAuthCallbackResult) => void;\n let rejectResult: (reason: Error) => void;\n\n const resultPromise = new Promise<OAuthCallbackResult>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n const server = createServer((req, res) => {\n const url = new URL(req.url ?? '/', 'http://localhost');\n\n if (url.pathname === '/callback') {\n const code = url.searchParams.get('code');\n const state = url.searchParams.get('state');\n const error = url.searchParams.get('error');\n\n if (error) {\n const desc = url.searchParams.get('error_description') ?? error;\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(`<html><body><h2>Authentication failed</h2><p>${desc}</p><p>You can close this window.</p></body></html>`);\n rejectResult!(new Error(desc));\n return;\n }\n\n if (!code || !state) {\n res.writeHead(400, { 'Content-Type': 'text/html' });\n res.end('<html><body><h2>Invalid callback</h2><p>Missing authorization code.</p></body></html>');\n return;\n }\n\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end('<html><body><h2>Authentication successful!</h2><p>You can close this window and return to the terminal.</p></body></html>');\n resolveResult!({ code, state });\n } else {\n res.writeHead(404);\n res.end('Not found');\n }\n });\n\n server.listen(0, '127.0.0.1', () => {\n const addr = server.address();\n const port = typeof addr === 'object' ? addr!.port : 0;\n resolveServer({\n port,\n result: resultPromise,\n close: () => { server.close(); server.closeAllConnections(); },\n });\n });\n\n // Timeout after 5 minutes (unref so it doesn't keep the process alive)\n setTimeout(() => {\n rejectResult!(new Error('Authentication timed out. Please try again.'));\n server.close();\n }, 5 * 60 * 1000).unref();\n });\n}\n","import { getCredentials, getGlobalConfig, getPlatformApiUrl, saveCredentials } from './config.js';\nimport { AuthError } from './errors.js';\nimport { refreshOAuthToken, DEFAULT_CLIENT_ID } from './auth.js';\nimport type { StoredCredentials } from '../types.js';\n\nexport function requireAuth(): StoredCredentials {\n const creds = getCredentials();\n if (!creds || !creds.access_token) {\n throw new AuthError();\n }\n return creds;\n}\n\nexport async function refreshAccessToken(apiUrl?: string): Promise<string> {\n const creds = getCredentials();\n if (!creds?.refresh_token) {\n throw new AuthError('Refresh token not found. Run `insforge login` again.');\n }\n\n const platformUrl = getPlatformApiUrl(apiUrl);\n const config = getGlobalConfig();\n const clientId = config.oauth_client_id ?? DEFAULT_CLIENT_ID;\n\n try {\n const data = await refreshOAuthToken({\n platformUrl,\n refreshToken: creds.refresh_token,\n clientId,\n });\n\n const updated: StoredCredentials = {\n ...creds,\n access_token: data.access_token,\n // Update refresh token if rotated\n refresh_token: data.refresh_token ?? creds.refresh_token,\n };\n saveCredentials(updated);\n return data.access_token;\n } catch {\n throw new AuthError('Failed to refresh token. Run `insforge login` again.');\n }\n}\n","import { getAccessToken, getPlatformApiUrl } from '../config.js';\nimport { AuthError, CLIError } from '../errors.js';\nimport { refreshAccessToken } from '../credentials.js';\nimport type {\n ApiKeyResponse,\n LoginResponse,\n Organization,\n Project,\n User,\n} from '../../types.js';\n\nasync function platformFetch(\n path: string,\n options: RequestInit = {},\n apiUrl?: string,\n): Promise<Response> {\n const baseUrl = getPlatformApiUrl(apiUrl);\n const token = getAccessToken();\n if (!token) {\n throw new AuthError();\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n ...(options.headers as Record<string, string> ?? {}),\n };\n\n const res = await fetch(`${baseUrl}${path}`, { ...options, headers });\n\n // Auto-refresh on 401\n if (res.status === 401) {\n const newToken = await refreshAccessToken(apiUrl);\n headers.Authorization = `Bearer ${newToken}`;\n const retryRes = await fetch(`${baseUrl}${path}`, { ...options, headers });\n if (!retryRes.ok) {\n const err = await retryRes.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Request failed: ${retryRes.status}`, retryRes.status === 403 ? 5 : 1);\n }\n return retryRes;\n }\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Request failed: ${res.status}`, res.status === 403 ? 5 : 1);\n }\n\n return res;\n}\n\n// --- Auth ---\n\nexport async function login(email: string, password: string, apiUrl?: string): Promise<LoginResponse & { _refreshToken?: string }> {\n const baseUrl = getPlatformApiUrl(apiUrl);\n const res = await fetch(`${baseUrl}/auth/v1/login`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ email, password }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new AuthError(err.error ?? 'Login failed. Check your email and password.');\n }\n\n // Extract refresh token from Set-Cookie header\n const setCookie = res.headers.get('set-cookie') ?? '';\n const refreshTokenMatch = setCookie.match(/refreshToken=([^;]+)/);\n const data = (await res.json()) as LoginResponse;\n\n return {\n ...data,\n // Attach refresh token to the response for storage\n _refreshToken: refreshTokenMatch?.[1],\n } as LoginResponse & { _refreshToken?: string };\n}\n\nexport async function getProfile(apiUrl?: string): Promise<User> {\n const res = await platformFetch('/auth/v1/profile', {}, apiUrl);\n const data = await res.json() as { user?: User };\n return data.user ?? (data as unknown as User);\n}\n\n// --- Organizations ---\n\nexport async function listOrganizations(apiUrl?: string): Promise<Organization[]> {\n const res = await platformFetch('/organizations/v1', {}, apiUrl);\n const data = await res.json() as { organizations?: Organization[] };\n return data.organizations ?? (data as unknown as Organization[]);\n}\n\n// --- Projects ---\n\nexport async function listProjects(orgId: string, apiUrl?: string): Promise<Project[]> {\n const res = await platformFetch(`/organizations/v1/${orgId}/projects`, {}, apiUrl);\n const data = await res.json() as { projects?: Project[] };\n return data.projects ?? (data as unknown as Project[]);\n}\n\nexport async function getProject(projectId: string, apiUrl?: string): Promise<Project> {\n const res = await platformFetch(`/projects/v1/${projectId}`, {}, apiUrl);\n const data = await res.json() as { project?: Project };\n return data.project ?? (data as unknown as Project);\n}\n\nexport async function getProjectApiKey(projectId: string, apiUrl?: string): Promise<string> {\n const res = await platformFetch(`/projects/v1/${projectId}/access-api-key`, {}, apiUrl);\n const data = (await res.json()) as ApiKeyResponse;\n return data.access_api_key;\n}\n\nexport async function createProject(\n orgId: string,\n name: string,\n region?: string,\n apiUrl?: string,\n): Promise<Project> {\n const body: Record<string, string> = { name };\n if (region) body.region = region;\n\n const res = await platformFetch(`/organizations/v1/${orgId}/projects`, {\n method: 'POST',\n body: JSON.stringify(body),\n }, apiUrl);\n const data = await res.json() as { project?: Project };\n return data.project ?? (data as unknown as Project);\n}\n\n","import Table from 'cli-table3';\n\nexport function outputJson(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n}\n\nexport function outputTable(headers: string[], rows: string[][]): void {\n const table = new Table({\n head: headers,\n style: { head: ['cyan'] },\n });\n for (const row of rows) {\n table.push(row);\n }\n console.log(table.toString());\n}\n\nexport function outputSuccess(message: string): void {\n console.log(`✓ ${message}`);\n}\n\nexport function outputInfo(message: string): void {\n console.log(message);\n}\n","import type { Command } from 'commander';\nimport { clearCredentials } from '../lib/config.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputSuccess, outputJson } from '../lib/output.js';\n\nexport function registerLogoutCommand(program: Command): void {\n program\n .command('logout')\n .description('Log out from InsForge platform')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n clearCredentials();\n if (json) {\n outputJson({ success: true, message: 'Logged out successfully' });\n } else {\n outputSuccess('Logged out successfully.');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { getProfile } from '../lib/api/platform.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputInfo } from '../lib/output.js';\nimport { requireAuth } from '../lib/credentials.js';\n\nexport function registerWhoamiCommand(program: Command): void {\n program\n .command('whoami')\n .description('Show current authenticated user')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n const profile = await getProfile(apiUrl);\n\n if (json) {\n outputJson(profile);\n } else {\n outputInfo(`Logged in as: ${profile.email ?? profile.name}`);\n if (profile.name) outputInfo(`Name: ${profile.name}`);\n if (profile.id) outputInfo(`ID: ${profile.id}`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { listOrganizations } from '../../lib/api/platform.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerOrgsCommands(orgsCmd: Command): void {\n orgsCmd\n .command('list')\n .description('List all organizations')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n const orgs = await listOrganizations(apiUrl);\n\n if (json) {\n outputJson(orgs);\n } else {\n if (!orgs.length) {\n console.log('No organizations found.');\n return;\n }\n outputTable(\n ['ID', 'Name', 'Type'],\n orgs.map((o) => [\n o.id,\n o.name,\n o.type ?? '-',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { listOrganizations, listProjects } from '../../lib/api/platform.js';\nimport { getGlobalConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerProjectsCommands(projectsCmd: Command): void {\n projectsCmd\n .command('list')\n .description('List all projects in an organization')\n .option('--org-id <id>', 'Organization ID (uses default if not specified)')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n\n let orgId = opts.orgId ?? getGlobalConfig().default_org_id;\n\n if (!orgId) {\n // Try to auto-select if user has only one org\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found. Create one on the InsForge dashboard.');\n }\n if (orgs.length === 1) {\n orgId = orgs[0].id;\n } else if (!json) {\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) {\n process.exit(0);\n }\n orgId = selected as string;\n } else {\n throw new CLIError('Multiple organizations found. Specify --org-id.');\n }\n }\n\n const projects = await listProjects(orgId, apiUrl);\n\n if (json) {\n outputJson(projects);\n } else {\n if (!projects.length) {\n console.log('No projects found.');\n return;\n }\n outputTable(\n ['ID', 'Name', 'Region', 'Status', 'AppKey'],\n projects.map((p) => [p.id, p.name, p.region, p.status, p.appkey]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport {\n listOrganizations,\n listProjects,\n getProject,\n getProjectApiKey,\n} from '../../lib/api/platform.js';\nimport { getGlobalConfig, saveGlobalConfig, saveProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport { installSkills } from '../../lib/skills.js';\nimport type { ProjectConfig } from '../../types.js';\n\nfunction buildOssHost(appkey: string, region: string): string {\n return `https://${appkey}.${region}.insforge.app`;\n}\n\nexport function registerProjectLinkCommand(program: Command): void {\n program\n .command('link')\n .description('Link current directory to an InsForge project')\n .option('--project-id <id>', 'Project ID to link')\n .option('--org-id <id>', 'Organization ID')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n\n let orgId = opts.orgId;\n let projectId = opts.projectId;\n\n // Always show organization selection\n if (!orgId) {\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found.');\n }\n if (json) {\n throw new CLIError('Specify --org-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n orgId = selected as string;\n }\n\n // Save default org\n const config = getGlobalConfig();\n config.default_org_id = orgId;\n saveGlobalConfig(config);\n\n // Select project if not specified\n if (!projectId) {\n const projects = await listProjects(orgId, apiUrl);\n if (projects.length === 0) {\n throw new CLIError('No projects found in this organization.');\n }\n if (json) {\n throw new CLIError('Specify --project-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select a project to link:',\n options: projects.map((p) => ({\n value: p.id,\n label: `${p.name} (${p.region}, ${p.status})`,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n projectId = selected as string;\n }\n\n // Fetch project details and API key\n const [project, apiKey] = await Promise.all([\n getProject(projectId, apiUrl),\n getProjectApiKey(projectId, apiUrl),\n ]);\n\n const projectConfig: ProjectConfig = {\n project_id: project.id,\n project_name: project.name,\n org_id: project.organization_id,\n appkey: project.appkey,\n region: project.region,\n api_key: apiKey,\n oss_host: buildOssHost(project.appkey, project.region),\n };\n\n saveProjectConfig(projectConfig);\n\n if (json) {\n outputJson({ success: true, project: { id: project.id, name: project.name, region: project.region } });\n } else {\n outputSuccess(`Linked to project \"${project.name}\" (${project.appkey}.${project.region})`);\n }\n\n // Install InsForge agent skills\n await installSkills(json);\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n\n\n","import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport * as clack from '@clack/prompts';\n\nconst execAsync = promisify(exec);\n\nexport async function installSkills(json: boolean): Promise<void> {\n try {\n if (!json) clack.log.info('Installing InsForge agent skills...');\n await execAsync('npx skills add insforge/agent-skills -y -a antigravity -a augment -a claude-code -a cline -a codex -a cursor -a gemini-cli -a github-copilot -a kilo -a qoder -a qwen-code -a roo -a trae -a windsurf', {\n cwd: process.cwd(),\n timeout: 60_000,\n });\n if (!json) clack.log.success('InsForge agent skills installed.');\n } catch {\n if (!json) clack.log.warn('Failed to install agent skills. You can run manually: npx skills add insforge/agent-skills');\n }\n}\n","import { getProjectConfig } from '../config.js';\nimport { CLIError, ProjectNotLinkedError } from '../errors.js';\nimport type { ProjectConfig } from '../../types.js';\n\nfunction requireProjectConfig(): ProjectConfig {\n const config = getProjectConfig();\n if (!config) {\n throw new ProjectNotLinkedError();\n }\n return config;\n}\n\n/**\n * Unified OSS API fetch. Uses API key as Bearer token for all requests,\n * which grants superadmin access (SQL execution, bucket management, etc.).\n */\nexport async function getAnonKey(): Promise<string> {\n const res = await ossFetch('/api/auth/tokens/anon', { method: 'POST' });\n const data = await res.json() as { accessToken: string };\n return data.accessToken;\n}\n\nexport async function ossFetch(\n path: string,\n options: RequestInit = {},\n): Promise<Response> {\n const config = requireProjectConfig();\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.api_key}`,\n ...(options.headers as Record<string, string> ?? {}),\n };\n\n const res = await fetch(`${config.oss_host}${path}`, { ...options, headers });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `OSS request failed: ${res.status}`);\n }\n\n return res;\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerDbCommands(dbCmd: Command): void {\n dbCmd\n .command('query <sql>')\n .description('Execute a SQL query against the database')\n .option('--unrestricted', 'Use unrestricted mode (allows system table access)')\n .action(async (sql: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const endpoint = opts.unrestricted\n ? '/api/database/advance/rawsql/unrestricted'\n : '/api/database/advance/rawsql';\n\n const res = await ossFetch(endpoint, {\n method: 'POST',\n body: JSON.stringify({ query: sql }),\n });\n\n const data = await res.json() as { rows?: Record<string, unknown>[]; data?: Record<string, unknown>[] };\n\n if (json) {\n outputJson(data);\n } else {\n // Try to render as table if results are array of objects\n const rows = data.rows ?? data.data ?? null;\n if (rows && rows.length > 0) {\n const headers = Object.keys(rows[0]);\n outputTable(\n headers,\n rows.map((row) => headers.map((h) => String(row[h] ?? ''))),\n );\n console.log(`${rows.length} row(s) returned.`);\n } else {\n console.log('Query executed successfully.');\n if (rows && rows.length === 0) {\n console.log('No rows returned.');\n }\n }\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerDbTablesCommand(dbCmd: Command): void {\n dbCmd\n .command('tables')\n .description('List all database tables')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/database/tables');\n const tables = await res.json() as string[];\n\n if (json) {\n outputJson(tables);\n } else {\n if (tables.length === 0) {\n console.log('No tables found.');\n return;\n }\n outputTable(\n ['Table Name'],\n tables.map((t) => [t]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nfunction str(val: unknown): string {\n if (val === null || val === undefined) return '-';\n if (Array.isArray(val)) return val.join(', ');\n return String(val);\n}\n\nfunction extractArray(raw: unknown): Record<string, unknown>[] {\n if (Array.isArray(raw)) return raw as Record<string, unknown>[];\n if (raw && typeof raw === 'object') {\n const arr = Object.values(raw).find(Array.isArray);\n if (arr) return arr as Record<string, unknown>[];\n }\n return [];\n}\n\nexport function registerDbFunctionsCommand(dbCmd: Command): void {\n dbCmd\n .command('functions')\n .description('List all database functions')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/database/functions');\n const raw = await res.json() as unknown;\n const functions = extractArray(raw);\n\n if (json) {\n outputJson(raw);\n } else {\n if (functions.length === 0) {\n console.log('No database functions found.');\n return;\n }\n outputTable(\n ['Name', 'Schema', 'Language', 'Return Type', 'Arguments'],\n functions.map((f) => [str(f.name), str(f.schema), str(f.language), str(f.returnType), str(f.arguments)]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nfunction str(val: unknown): string {\n if (val === null || val === undefined) return '-';\n if (Array.isArray(val)) return val.join(', ');\n return String(val);\n}\n\nfunction extractArray(raw: unknown): Record<string, unknown>[] {\n if (Array.isArray(raw)) return raw as Record<string, unknown>[];\n if (raw && typeof raw === 'object') {\n const arr = Object.values(raw).find(Array.isArray);\n if (arr) return arr as Record<string, unknown>[];\n }\n return [];\n}\n\nexport function registerDbIndexesCommand(dbCmd: Command): void {\n dbCmd\n .command('indexes')\n .description('List all database indexes')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/database/indexes');\n const raw = await res.json() as unknown;\n const indexes = extractArray(raw);\n\n if (json) {\n outputJson(raw);\n } else {\n if (indexes.length === 0) {\n console.log('No database indexes found.');\n return;\n }\n outputTable(\n ['Table', 'Index Name', 'Definition', 'Unique', 'Primary'],\n indexes.map((i) => [\n str(i.tableName),\n str(i.indexName),\n str(i.indexDef),\n i.isUnique ? 'Yes' : 'No',\n i.isPrimary ? 'Yes' : 'No',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nfunction str(val: unknown): string {\n if (val === null || val === undefined) return '-';\n if (Array.isArray(val)) return val.join(', ');\n return String(val);\n}\n\nfunction extractArray(raw: unknown): Record<string, unknown>[] {\n if (Array.isArray(raw)) return raw as Record<string, unknown>[];\n if (raw && typeof raw === 'object') {\n const arr = Object.values(raw).find(Array.isArray);\n if (arr) return arr as Record<string, unknown>[];\n }\n return [];\n}\n\nexport function registerDbPoliciesCommand(dbCmd: Command): void {\n dbCmd\n .command('policies')\n .description('List all RLS policies')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/database/policies');\n const raw = await res.json() as unknown;\n const policies = extractArray(raw);\n\n if (json) {\n outputJson(raw);\n } else {\n if (policies.length === 0) {\n console.log('No RLS policies found.');\n return;\n }\n outputTable(\n ['Table', 'Policy Name', 'Command', 'Roles', 'Qual', 'With Check'],\n policies.map((p) => [\n str(p.tableName),\n str(p.policyName),\n str(p.cmd),\n str(p.roles),\n str(p.qual),\n str(p.withCheck),\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nfunction str(val: unknown): string {\n if (val === null || val === undefined) return '-';\n if (Array.isArray(val)) return val.join(', ');\n return String(val);\n}\n\nfunction extractArray(raw: unknown): Record<string, unknown>[] {\n if (Array.isArray(raw)) return raw as Record<string, unknown>[];\n if (raw && typeof raw === 'object') {\n const arr = Object.values(raw).find(Array.isArray);\n if (arr) return arr as Record<string, unknown>[];\n }\n return [];\n}\n\nexport function registerDbTriggersCommand(dbCmd: Command): void {\n dbCmd\n .command('triggers')\n .description('List all database triggers')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/database/triggers');\n const raw = await res.json() as unknown;\n const triggers = extractArray(raw);\n\n if (json) {\n outputJson(raw);\n } else {\n if (triggers.length === 0) {\n console.log('No database triggers found.');\n return;\n }\n outputTable(\n ['Name', 'Table', 'Timing', 'Events', 'Function', 'Enabled'],\n triggers.map((t) => [\n str(t.name),\n str(t.tableName),\n str(t.timing),\n str(t.events),\n str(t.functionName),\n t.enabled ? 'Yes' : 'No',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\nexport function registerDbRpcCommand(dbCmd: Command): void {\n dbCmd\n .command('rpc <functionName>')\n .description('Call a database function via RPC')\n .option('--data <json>', 'JSON body to pass as function parameters')\n .action(async (functionName: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const body = opts.data ? JSON.stringify(JSON.parse(opts.data) as unknown) : undefined;\n\n const res = await ossFetch(`/api/database/rpc/${encodeURIComponent(functionName)}`, {\n method: body ? 'POST' : 'GET',\n ...(body ? { body } : {}),\n });\n\n const result = await res.json() as unknown;\n\n if (json) {\n outputJson(result);\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { writeFileSync } from 'node:fs';\nimport type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDbExportCommand(dbCmd: Command): void {\n dbCmd\n .command('export')\n .description('Export database schema and/or data')\n .option('--format <format>', 'Export format: sql or json', 'sql')\n .option('--tables <tables>', 'Comma-separated list of tables to export (default: all)')\n .option('--no-data', 'Exclude table data (schema only)')\n .option('--include-functions', 'Include database functions')\n .option('--include-sequences', 'Include sequences')\n .option('--include-views', 'Include views')\n .option('--row-limit <n>', 'Maximum rows per table')\n .option('-o, --output <file>', 'Output file path (default: stdout)')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const body: Record<string, unknown> = {\n format: opts.format,\n includeData: opts.data !== false,\n };\n\n if (opts.tables) {\n body.tables = (opts.tables as string).split(',').map((t: string) => t.trim());\n }\n if (opts.includeFunctions) body.includeFunctions = true;\n if (opts.includeSequences) body.includeSequences = true;\n if (opts.includeViews) body.includeViews = true;\n if (opts.rowLimit) body.rowLimit = parseInt(opts.rowLimit as string, 10);\n\n const res = await ossFetch('/api/database/advance/export', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n\n const raw = await res.text();\n\n // API may return JSON wrapper { format, content, tables } or raw SQL/JSON text\n let content: string;\n let meta: { format?: string; tables?: string[] } | null = null;\n try {\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n if (typeof parsed.content === 'string') {\n content = parsed.content;\n meta = { format: parsed.format as string, tables: parsed.tables as string[] };\n } else {\n content = raw;\n }\n } catch {\n content = raw;\n }\n\n if (json) {\n outputJson(meta ?? { content });\n return;\n }\n\n if (opts.output) {\n writeFileSync(opts.output as string, content);\n const tableCount = meta?.tables?.length;\n const suffix = tableCount ? ` (${tableCount} tables, format: ${meta?.format ?? opts.format})` : '';\n outputSuccess(`Exported to ${opts.output}${suffix}`);\n } else {\n console.log(content);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { readFileSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDbImportCommand(dbCmd: Command): void {\n dbCmd\n .command('import <file>')\n .description('Import database from a local SQL file')\n .option('--truncate', 'Truncate existing tables before import')\n .action(async (file: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const fileContent = readFileSync(file);\n const fileName = basename(file);\n\n const formData = new FormData();\n formData.append('file', new Blob([fileContent]), fileName);\n if (opts.truncate) {\n formData.append('truncate', 'true');\n }\n\n const res = await fetch(`${config.oss_host}/api/database/advance/import`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n body: formData,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Import failed: ${res.status}`);\n }\n\n const data = await res.json() as { filename: string; fileSize: number; tables: string[]; rowsImported: number };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Imported ${data.filename} (${data.tables.length} tables, ${data.rowsImported} rows)`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerRecordsCommands(recordsCmd: Command): void {\n recordsCmd\n .command('list <table>')\n .description('List records from a table')\n .option('--select <columns>', 'Columns to select (comma-separated)')\n .option('--filter <filter>', 'Filter expression (e.g. \"name=eq.John\")')\n .option('--order <order>', 'Order by (e.g. \"created_at.desc\")')\n .option('--limit <n>', 'Limit number of records', parseInt)\n .option('--offset <n>', 'Offset for pagination', parseInt)\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const params = new URLSearchParams();\n if (opts.select) params.set('select', opts.select);\n if (opts.filter) params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n if (opts.order) params.set('order', opts.order);\n if (opts.limit) params.set('limit', String(opts.limit));\n if (opts.offset) params.set('offset', String(opts.offset));\n\n const query = params.toString();\n const path = `/api/database/records/${encodeURIComponent(table)}${query ? `?${query}` : ''}`;\n const res = await ossFetch(path);\n const data = await res.json() as { data?: Record<string, unknown>[] };\n const records = data.data ?? [];\n\n if (json) {\n outputJson(data);\n } else {\n if (records.length === 0) {\n console.log('No records found.');\n return;\n }\n const headers = Object.keys(records[0]);\n outputTable(\n headers,\n records.map((r) => headers.map((h) => {\n const val = r[h];\n if (val === null || val === undefined) return '';\n if (typeof val === 'object') return JSON.stringify(val);\n return String(val);\n })),\n );\n console.log(`${records.length} record(s).`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsCreateCommand(recordsCmd: Command): void {\n recordsCmd\n .command('create <table>')\n .description('Create record(s) in a table')\n .option('--data <json>', 'JSON data to insert (object or array of objects)')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!opts.data) {\n throw new CLIError('--data is required. Example: --data \\'{\"name\":\"John\"}\\'');\n }\n\n let records: unknown[];\n try {\n const parsed = JSON.parse(opts.data) as unknown;\n records = Array.isArray(parsed) ? parsed : [parsed];\n } catch {\n throw new CLIError('Invalid JSON in --data. Provide a JSON object or array.');\n }\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?return=representation`,\n {\n method: 'POST',\n body: JSON.stringify(records),\n },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const created = data.data ?? [];\n outputSuccess(`Created ${created.length || records.length} record(s) in \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsUpdateCommand(recordsCmd: Command): void {\n recordsCmd\n .command('update <table>')\n .description('Update records in a table matching a filter')\n .option('--filter <filter>', 'Filter expression (e.g. \"id=eq.123\")')\n .option('--data <json>', 'JSON data to update')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!opts.filter) {\n throw new CLIError('--filter is required to prevent accidental updates to all rows.');\n }\n if (!opts.data) {\n throw new CLIError('--data is required. Example: --data \\'{\"name\":\"Jane\"}\\'');\n }\n\n let body: unknown;\n try {\n body = JSON.parse(opts.data) as unknown;\n } catch {\n throw new CLIError('Invalid JSON in --data.');\n }\n\n const params = new URLSearchParams();\n params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n params.set('return', 'representation');\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?${params}`,\n {\n method: 'PATCH',\n body: JSON.stringify(body),\n },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const updated = data.data ?? [];\n outputSuccess(`Updated ${updated.length} record(s) in \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsDeleteCommand(recordsCmd: Command): void {\n recordsCmd\n .command('delete <table>')\n .description('Delete records from a table matching a filter')\n .option('--filter <filter>', 'Filter expression (e.g. \"id=eq.123\")')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!opts.filter) {\n throw new CLIError('--filter is required to prevent accidental deletion of all rows.');\n }\n\n const params = new URLSearchParams();\n params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n params.set('return', 'representation');\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?${params}`,\n { method: 'DELETE' },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const deleted = data.data ?? [];\n outputSuccess(`Deleted ${deleted.length} record(s) from \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { OssFunction } from '../../types.js';\n\nexport function registerFunctionsCommands(functionsCmd: Command): void {\n functionsCmd\n .command('list')\n .description('List all edge functions')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/functions');\n const data = await res.json() as { functions?: OssFunction[] };\n const functions = data.functions ?? [];\n\n if (json) {\n outputJson(functions);\n } else {\n if (functions.length === 0) {\n console.log('No functions found.');\n return;\n }\n outputTable(\n ['Slug', 'Name', 'Status', 'Created At'],\n functions.map((f) => [\n f.slug,\n f.name ?? '-',\n f.status ?? '-',\n f.created_at ? new Date(f.created_at).toLocaleString() : '-',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerFunctionsDeployCommand(functionsCmd: Command): void {\n functionsCmd\n .command('deploy <slug>')\n .description('Deploy an edge function (create or update)')\n .option('--file <path>', 'Path to the function source file')\n .option('--name <name>', 'Function display name')\n .option('--description <desc>', 'Function description')\n .action(async (slug: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n // Resolve source file\n const filePath = opts.file ?? join(process.cwd(), 'insforge', 'functions', slug, 'index.ts');\n if (!existsSync(filePath)) {\n throw new CLIError(\n `Source file not found: ${filePath}\\n` +\n `Specify --file <path> or create ${join('insforge', 'functions', slug, 'index.ts')}`,\n );\n }\n\n const code = readFileSync(filePath, 'utf-8');\n const name = opts.name ?? slug;\n const description = opts.description ?? '';\n\n // Check if function exists\n let exists = false;\n try {\n await ossFetch(`/api/functions/${encodeURIComponent(slug)}`);\n exists = true;\n } catch {\n exists = false;\n }\n\n if (exists) {\n await ossFetch(`/api/functions/${encodeURIComponent(slug)}`, {\n method: 'PUT',\n body: JSON.stringify({ name, description, code }),\n });\n } else {\n await ossFetch('/api/functions', {\n method: 'POST',\n body: JSON.stringify({ slug, name, description, code }),\n });\n }\n\n if (json) {\n outputJson({ success: true, slug, action: exists ? 'updated' : 'created' });\n } else {\n outputSuccess(`Function \"${slug}\" ${exists ? 'updated' : 'created'} successfully.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\nexport function registerFunctionsInvokeCommand(functionsCmd: Command): void {\n functionsCmd\n .command('invoke <slug>')\n .description('Invoke an edge function')\n .option('--data <json>', 'JSON body to send to the function')\n .option('--method <method>', 'HTTP method (GET, POST, PUT, PATCH, DELETE)', 'POST')\n .action(async (slug: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const method = opts.method.toUpperCase();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.api_key}`,\n };\n\n const fetchOpts: RequestInit = { method, headers };\n\n if (opts.data && ['POST', 'PUT', 'PATCH'].includes(method)) {\n fetchOpts.body = opts.data;\n }\n\n // Functions client endpoint is at /functions/{slug} (not /api/functions/{slug})\n // Use direct fetch so we always show the function's full response,\n // even on non-200 status codes (function errors are part of the output).\n const res = await fetch(\n `${config.oss_host}/functions/${encodeURIComponent(slug)}`,\n fetchOpts,\n );\n\n const contentType = res.headers.get('content-type') ?? '';\n const status = res.status;\n\n if (contentType.includes('application/json')) {\n const data = await res.json();\n if (json) {\n outputJson({ status, body: data });\n } else {\n if (status >= 400) {\n console.error(`HTTP ${status}`);\n }\n console.log(JSON.stringify(data, null, 2));\n }\n } else {\n const text = await res.text();\n if (!json && status >= 400) {\n console.error(`HTTP ${status}`);\n }\n console.log(text);\n }\n\n // Exit with non-zero code on function errors\n if (status >= 400) {\n process.exit(1);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\ninterface FunctionDetails {\n id: string;\n slug: string;\n name: string;\n description: string | null;\n code: string;\n status: string;\n created_at: string;\n updated_at: string;\n deployed_at: string | null;\n}\n\nexport function registerFunctionsCodeCommand(functionsCmd: Command): void {\n functionsCmd\n .command('code <slug>')\n .description('Fetch and display the source code of an edge function')\n .action(async (slug: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch(`/api/functions/${encodeURIComponent(slug)}`);\n const fn = await res.json() as FunctionDetails;\n\n if (json) {\n outputJson(fn);\n } else {\n console.log(`Function: ${fn.name} (${fn.slug})`);\n console.log(`Status: ${fn.status}`);\n if (fn.description) console.log(`Desc: ${fn.description}`);\n if (fn.deployed_at) console.log(`Deployed: ${fn.deployed_at}`);\n console.log('---');\n console.log(fn.code);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerStorageBucketsCommand(storageCmd: Command): void {\n storageCmd\n .command('buckets')\n .description('List all storage buckets')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/storage/buckets');\n const raw = await res.json() as unknown;\n\n // API may return { buckets: string[] } or string[] directly\n let buckets: string[];\n if (Array.isArray(raw)) {\n buckets = raw as string[];\n } else if (raw && typeof raw === 'object' && 'buckets' in raw && Array.isArray((raw as Record<string, unknown>).buckets)) {\n buckets = (raw as Record<string, unknown>).buckets as string[];\n } else {\n // Fallback: find first array in response\n const arr = raw && typeof raw === 'object' ? Object.values(raw).find(Array.isArray) : null;\n buckets = (arr as string[] | null) ?? [];\n }\n\n if (json) {\n outputJson(raw);\n } else {\n if (buckets.length === 0) {\n console.log('No buckets found.');\n return;\n }\n outputTable(\n ['Bucket Name'],\n buckets.map((b) => [typeof b === 'string' ? b : JSON.stringify(b)]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageUploadCommand(storageCmd: Command): void {\n storageCmd\n .command('upload <file>')\n .description('Upload a file to a storage bucket')\n .requiredOption('--bucket <name>', 'Target bucket name')\n .option('--key <objectKey>', 'Object key (defaults to filename)')\n .action(async (file: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n if (!existsSync(file)) {\n throw new CLIError(`File not found: ${file}`);\n }\n\n const fileContent = readFileSync(file);\n const objectKey = opts.key ?? basename(file);\n const bucketName = opts.bucket;\n\n // Build multipart form data\n const formData = new FormData();\n const blob = new Blob([fileContent]);\n formData.append('file', blob, objectKey);\n\n // PUT /api/storage/buckets/{bucket}/objects/{key} for named upload\n const url = `${config.oss_host}/api/storage/buckets/${encodeURIComponent(bucketName)}/objects/${encodeURIComponent(objectKey)}`;\n\n const res = await fetch(url, {\n method: 'PUT',\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n body: formData,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Upload failed: ${res.status}`);\n }\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Uploaded \"${basename(file)}\" to bucket \"${bucketName}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { writeFileSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageDownloadCommand(storageCmd: Command): void {\n storageCmd\n .command('download <objectKey>')\n .description('Download a file from a storage bucket')\n .requiredOption('--bucket <name>', 'Source bucket name')\n .option('--output <path>', 'Output file path (defaults to current directory)')\n .action(async (objectKey: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const bucketName = opts.bucket;\n const url = `${config.oss_host}/api/storage/buckets/${encodeURIComponent(bucketName)}/objects/${encodeURIComponent(objectKey)}`;\n\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Download failed: ${res.status}`);\n }\n\n const buffer = Buffer.from(await res.arrayBuffer());\n const outputPath = opts.output ?? join(process.cwd(), basename(objectKey));\n writeFileSync(outputPath, buffer);\n\n if (json) {\n outputJson({ success: true, path: outputPath, size: buffer.length });\n } else {\n outputSuccess(`Downloaded \"${objectKey}\" to ${outputPath} (${buffer.length} bytes).`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageCreateBucketCommand(storageCmd: Command): void {\n storageCmd\n .command('create-bucket <name>')\n .description('Create a new storage bucket')\n .option('--public', 'Make the bucket publicly accessible (default)')\n .option('--private', 'Make the bucket private')\n .action(async (name: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const isPublic = !opts.private;\n\n const res = await ossFetch('/api/storage/buckets', {\n method: 'POST',\n body: JSON.stringify({ bucketName: name, isPublic }),\n });\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Bucket \"${name}\" created (${isPublic ? 'public' : 'private'}).`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageDeleteBucketCommand(storageCmd: Command): void {\n storageCmd\n .command('delete-bucket <name>')\n .description('Delete a storage bucket and all its objects')\n .action(async (name: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!yes && !json) {\n const confirm = await clack.confirm({\n message: `Delete bucket \"${name}\" and all its objects? This cannot be undone.`,\n });\n if (!confirm || clack.isCancel(confirm)) {\n process.exit(0);\n }\n }\n\n const res = await ossFetch(`/api/storage/buckets/${encodeURIComponent(name)}`, {\n method: 'DELETE',\n });\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Bucket \"${name}\" deleted.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\ninterface StoredFile {\n key: string;\n size: number;\n mimeType?: string;\n uploadedAt: string;\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function registerStorageListObjectsCommand(storageCmd: Command): void {\n storageCmd\n .command('list-objects <bucket>')\n .description('List objects in a storage bucket')\n .option('--limit <n>', 'Maximum number of objects to return', '100')\n .option('--offset <n>', 'Number of objects to skip', '0')\n .option('--prefix <prefix>', 'Filter objects by key prefix')\n .option('--search <term>', 'Search objects by key (partial match)')\n .option('--sort <field>', 'Sort by field: key, size, uploadedAt (default: key)')\n .action(async (bucket: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const params = new URLSearchParams();\n params.set('limit', opts.limit);\n params.set('offset', opts.offset);\n if (opts.prefix) params.set('prefix', opts.prefix);\n if (opts.search) params.set('search', opts.search);\n\n const res = await ossFetch(\n `/api/storage/buckets/${encodeURIComponent(bucket)}/objects?${params.toString()}`,\n );\n const raw = await res.json() as { data?: StoredFile[]; pagination?: { total?: number } };\n\n const objects: StoredFile[] = Array.isArray(raw)\n ? raw as StoredFile[]\n : (raw.data ?? []);\n\n // Client-side sort\n const sortField = opts.sort ?? 'key';\n objects.sort((a, b) => {\n if (sortField === 'size') return a.size - b.size;\n if (sortField === 'uploadedAt') return a.uploadedAt.localeCompare(b.uploadedAt);\n return a.key.localeCompare(b.key);\n });\n\n if (json) {\n outputJson(raw);\n } else {\n if (objects.length === 0) {\n console.log(`No objects found in bucket \"${bucket}\".`);\n return;\n }\n const total = raw.pagination?.total;\n if (total !== undefined) {\n console.log(`Showing ${objects.length} of ${total} objects:\\n`);\n }\n outputTable(\n ['Key', 'Size', 'Type', 'Uploaded At'],\n objects.map((o) => [\n o.key,\n formatSize(o.size),\n o.mimeType ?? '-',\n o.uploadedAt,\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { exec } from 'node:child_process';\nimport { tmpdir } from 'node:os';\nimport { promisify } from 'node:util';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport * as clack from '@clack/prompts';\nimport {\n listOrganizations,\n createProject,\n getProject,\n getProjectApiKey,\n} from '../lib/api/platform.js';\nimport { getAnonKey } from '../lib/api/oss.js';\nimport { getGlobalConfig, saveGlobalConfig, saveProjectConfig } from '../lib/config.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../lib/errors.js';\nimport { outputJson } from '../lib/output.js';\nimport { installSkills } from '../lib/skills.js';\nimport type { ProjectConfig } from '../types.js';\n\nconst execAsync = promisify(exec);\n\ntype Framework = 'react' | 'nextjs';\n\nfunction buildOssHost(appkey: string, region: string): string {\n return `https://${appkey}.${region}.insforge.app`;\n}\n\nasync function waitForProjectActive(projectId: string, apiUrl?: string, timeoutMs = 120_000): Promise<void> {\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n const project = await getProject(projectId, apiUrl);\n if (project.status === 'active') return;\n await new Promise((r) => setTimeout(r, 3000));\n }\n throw new CLIError('Project creation timed out. Check the dashboard for status.');\n}\n\nasync function copyDir(src: string, dest: string): Promise<void> {\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) {\n await fs.mkdir(destPath, { recursive: true });\n await copyDir(srcPath, destPath);\n } else {\n await fs.copyFile(srcPath, destPath);\n }\n }\n}\n\nexport function registerCreateCommand(program: Command): void {\n program\n .command('create')\n .description('Create a new InsForge project')\n .option('--name <name>', 'Project name')\n .option('--org-id <id>', 'Organization ID')\n .option('--region <region>', 'Deployment region (us-east, us-west, eu-central, ap-southeast)')\n .option('--template <template>', 'Template to use: react, nextjs, or empty')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!json) {\n clack.intro('Create a new InsForge project');\n }\n\n // 1. Select organization\n let orgId = opts.orgId;\n if (!orgId) {\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found.');\n }\n if (json) {\n throw new CLIError('Specify --org-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n orgId = selected as string;\n }\n\n // Save default org\n const globalConfig = getGlobalConfig();\n globalConfig.default_org_id = orgId;\n saveGlobalConfig(globalConfig);\n\n // 2. Project name\n let projectName = opts.name;\n if (!projectName) {\n if (json) throw new CLIError('--name is required in JSON mode.');\n const name = await clack.text({\n message: 'Project name:',\n validate: (v) => (v.length >= 2 ? undefined : 'Name must be at least 2 characters'),\n });\n if (clack.isCancel(name)) process.exit(0);\n projectName = name as string;\n }\n\n // 3. Select template\n let template = opts.template as string | undefined;\n if (!template) {\n if (json) {\n template = 'empty';\n } else {\n const selected = await clack.select({\n message: 'Choose a starter template:',\n options: [\n { value: 'react', label: 'Web app template with React' },\n { value: 'nextjs', label: 'Web app template with Next.js' },\n { value: 'empty', label: 'Empty project' },\n ],\n });\n if (clack.isCancel(selected)) process.exit(0);\n template = selected as string;\n }\n }\n\n // 4. Create project via Platform API\n const s = !json ? clack.spinner() : null;\n s?.start('Creating project...');\n\n const project = await createProject(orgId, projectName, opts.region, apiUrl);\n\n s?.message('Waiting for project to become active...');\n await waitForProjectActive(project.id, apiUrl);\n\n // 5. Fetch API key and link project\n const apiKey = await getProjectApiKey(project.id, apiUrl);\n const projectConfig: ProjectConfig = {\n project_id: project.id,\n project_name: project.name,\n org_id: project.organization_id,\n appkey: project.appkey,\n region: project.region,\n api_key: apiKey,\n oss_host: buildOssHost(project.appkey, project.region),\n };\n saveProjectConfig(projectConfig);\n\n s?.stop(`Project \"${project.name}\" created and linked`);\n\n // 6. Download template if selected\n if (template !== 'empty') {\n await downloadTemplate(template as Framework, projectConfig, projectName, json, apiUrl);\n }\n\n // Install InsForge agent skills\n await installSkills(json);\n\n if (json) {\n outputJson({\n success: true,\n project: { id: project.id, name: project.name, appkey: project.appkey, region: project.region },\n template,\n });\n } else {\n clack.outro('Done! Run `npm install` to get started.');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n\nasync function downloadTemplate(\n framework: Framework,\n projectConfig: ProjectConfig,\n projectName: string,\n json: boolean,\n _apiUrl?: string,\n): Promise<void> {\n const s = !json ? clack.spinner() : null;\n s?.start('Downloading template...');\n\n try {\n // Get the anon key from the OSS backend\n const anonKey = await getAnonKey();\n if (!anonKey) {\n throw new Error('Failed to retrieve anon key from backend');\n }\n\n // Create temp directory for download\n const tempDir = tmpdir();\n const targetDir = projectName;\n const templatePath = path.join(tempDir, targetDir);\n\n // Remove existing temp directory if it exists\n try {\n await fs.rm(templatePath, { recursive: true, force: true });\n } catch {\n // Directory doesn't exist, which is fine\n }\n\n const frame = framework === 'nextjs' ? 'nextjs' : 'react';\n const command = `npx create-insforge-app ${targetDir} --frame ${frame} --base-url ${projectConfig.oss_host} --anon-key ${anonKey} --skip-install`;\n\n s?.message(`Running create-insforge-app (${frame})...`);\n\n await execAsync(command, {\n maxBuffer: 10 * 1024 * 1024,\n cwd: tempDir,\n });\n\n // Copy template files to current directory\n s?.message('Copying template files...');\n const cwd = process.cwd();\n await copyDir(templatePath, cwd);\n\n // Cleanup temp directory\n await fs.rm(templatePath, { recursive: true, force: true }).catch(() => {});\n\n s?.stop('Template files downloaded');\n } catch (err) {\n s?.stop('Template download failed');\n if (!json) {\n clack.log.warn(`Failed to download template: ${(err as Error).message}`);\n clack.log.info('You can manually set up the template later.');\n }\n }\n}\n\n\n","import type { Command } from 'commander';\nimport { getCredentials, getGlobalConfig, getProjectConfig } from '../lib/config.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson } from '../lib/output.js';\n\nexport function registerContextCommand(program: Command): void {\n program\n .command('current')\n .description('Show current CLI context (user, org, project)')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n const creds = getCredentials();\n const globalConfig = getGlobalConfig();\n const projectConfig = getProjectConfig();\n\n if (json) {\n outputJson({\n authenticated: !!creds,\n user: creds?.user ?? null,\n default_org_id: globalConfig.default_org_id ?? null,\n project: projectConfig,\n });\n return;\n }\n\n console.log('\\n InsForge CLI Context\\n');\n\n // Auth status\n if (creds) {\n console.log(` User: ${creds.user.name} <${creds.user.email}>`);\n } else {\n console.log(' User: (not logged in)');\n }\n\n // Org\n if (globalConfig.default_org_id) {\n console.log(` Default Org: ${globalConfig.default_org_id}`);\n } else {\n console.log(' Default Org: (none)');\n }\n\n // Project\n if (projectConfig) {\n console.log('');\n console.log(` Project: ${projectConfig.project_name} (${projectConfig.project_id})`);\n console.log(` App Key: ${projectConfig.appkey}`);\n console.log(` Region: ${projectConfig.region}`);\n console.log(` OSS Host: ${projectConfig.oss_host}`);\n } else {\n console.log('\\n Project: (not linked — run `insforge projects link`)');\n }\n\n console.log('');\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { listOrganizations, listProjects } from '../lib/api/platform.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputTable } from '../lib/output.js';\n\nexport function registerListCommand(program: Command): void {\n program\n .command('list')\n .description('List all organizations and their projects')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n const orgs = await listOrganizations(apiUrl);\n\n if (orgs.length === 0) {\n if (json) {\n outputJson([]);\n } else {\n console.log('No organizations found.');\n }\n return;\n }\n\n // Fetch projects for all orgs in parallel\n const orgProjects = await Promise.all(\n orgs.map(async (org) => ({\n org,\n projects: await listProjects(org.id, apiUrl),\n })),\n );\n\n if (json) {\n outputJson(\n orgProjects.map(({ org, projects }) => ({\n id: org.id,\n name: org.name,\n type: org.type ?? null,\n projects: projects.map((p) => ({\n id: p.id,\n name: p.name,\n region: p.region,\n status: p.status,\n appkey: p.appkey,\n })),\n })),\n );\n return;\n }\n\n // Human-readable: grouped table\n const rows: string[][] = [];\n for (const { org, projects } of orgProjects) {\n if (projects.length === 0) {\n rows.push([org.name, '-', '-', '-', '-']);\n } else {\n for (let i = 0; i < projects.length; i++) {\n const p = projects[i];\n rows.push([\n i === 0 ? org.name : '',\n p.name,\n p.region,\n p.status,\n p.appkey,\n ]);\n }\n }\n }\n\n outputTable(['Organization', 'Project', 'Region', 'Status', 'AppKey'], rows);\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs/promises';\nimport * as clack from '@clack/prompts';\nimport archiver from 'archiver';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\nimport type { CreateDeploymentResponse, StartDeploymentRequest, SiteDeployment } from '../../types.js';\n\nconst POLL_INTERVAL_MS = 5_000;\nconst POLL_TIMEOUT_MS = 120_000;\n\nconst EXCLUDE_PATTERNS = [\n 'node_modules',\n '.git',\n '.next',\n '.env',\n '.env.local',\n 'dist',\n 'build',\n '.DS_Store',\n '.insforge',\n];\n\nfunction shouldExclude(name: string): boolean {\n const normalized = name.replace(/\\\\/g, '/');\n for (const pattern of EXCLUDE_PATTERNS) {\n if (\n normalized === pattern ||\n normalized.startsWith(pattern + '/') ||\n normalized.endsWith('/' + pattern) ||\n normalized.includes('/' + pattern + '/')\n ) {\n return true;\n }\n }\n if (normalized.endsWith('.log')) return true;\n return false;\n}\n\nasync function createZipBuffer(sourceDir: string): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n const archive = archiver('zip', { zlib: { level: 9 } });\n const chunks: Buffer[] = [];\n\n archive.on('data', (chunk: Buffer) => chunks.push(chunk));\n archive.on('end', () => resolve(Buffer.concat(chunks)));\n archive.on('error', (err: Error) => reject(err));\n\n archive.directory(sourceDir, false, (entry) => {\n if (shouldExclude(entry.name)) return false;\n return entry;\n });\n\n void archive.finalize();\n });\n}\n\nexport function registerDeploymentsDeployCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('deploy [directory]')\n .description('Deploy a frontend project to Vercel')\n .option('--env <vars>', 'Environment variables as JSON (e.g. \\'{\"KEY\":\"value\"}\\')')\n .option('--meta <meta>', 'Deployment metadata as JSON')\n .action(async (directory: string | undefined, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n // Resolve source directory\n const sourceDir = path.resolve(directory ?? '.');\n const stats = await fs.stat(sourceDir).catch(() => null);\n if (!stats?.isDirectory()) {\n throw new CLIError(`\"${sourceDir}\" is not a valid directory.`);\n }\n\n const s = !json ? clack.spinner() : null;\n\n // Step 1: Create deployment to get presigned upload URL\n s?.start('Creating deployment...');\n const createRes = await ossFetch('/api/deployments', { method: 'POST' });\n const { id: deploymentId, uploadUrl, uploadFields } =\n (await createRes.json()) as CreateDeploymentResponse;\n\n // Step 2: Create zip\n s?.message('Compressing source files...');\n const zipBuffer = await createZipBuffer(sourceDir);\n\n // Step 3: Upload zip to presigned URL\n s?.message('Uploading...');\n const formData = new FormData();\n for (const [key, value] of Object.entries(uploadFields)) {\n formData.append(key, value);\n }\n formData.append(\n 'file',\n new Blob([zipBuffer], { type: 'application/zip' }),\n 'deployment.zip',\n );\n\n const uploadRes = await fetch(uploadUrl, { method: 'POST', body: formData });\n if (!uploadRes.ok) {\n const uploadErr = await uploadRes.text();\n throw new CLIError(`Failed to upload: ${uploadErr}`);\n }\n\n // Step 4: Start the deployment\n s?.message('Starting deployment...');\n const startBody: StartDeploymentRequest = {};\n if (opts.env) {\n try {\n const parsed = JSON.parse(opts.env) as Record<string, string>;\n // Convert {\"KEY\":\"value\"} object to [{key,value}] array format\n if (Array.isArray(parsed)) {\n startBody.envVars = parsed;\n } else {\n startBody.envVars = Object.entries(parsed).map(([key, value]) => ({ key, value }));\n }\n } catch { throw new CLIError('Invalid --env JSON.'); }\n }\n if (opts.meta) {\n try { startBody.meta = JSON.parse(opts.meta); } catch { throw new CLIError('Invalid --meta JSON.'); }\n }\n\n const startRes = await ossFetch(`/api/deployments/${deploymentId}/start`, {\n method: 'POST',\n body: JSON.stringify(startBody),\n });\n await startRes.json();\n\n // Step 5: Poll for deployment status\n s?.message('Building and deploying...');\n const startTime = Date.now();\n let deployment: SiteDeployment | null = null;\n\n while (Date.now() - startTime < POLL_TIMEOUT_MS) {\n await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\n try {\n const statusRes = await ossFetch(`/api/deployments/${deploymentId}`);\n deployment = (await statusRes.json()) as SiteDeployment;\n\n if (deployment.status === 'ready' || deployment.status === 'READY') {\n break;\n }\n if (deployment.status === 'error' || deployment.status === 'ERROR' || deployment.status === 'canceled') {\n s?.stop('Deployment failed');\n throw new CLIError(deployment.error ?? `Deployment failed with status: ${deployment.status}`);\n }\n\n const elapsed = Math.round((Date.now() - startTime) / 1000);\n s?.message(`Building and deploying... (${elapsed}s, status: ${deployment.status})`);\n } catch (err) {\n if (err instanceof CLIError) throw err;\n // Ignore transient fetch errors during polling\n }\n }\n\n const isReady = deployment?.status === 'ready' || deployment?.status === 'READY';\n\n if (isReady) {\n s?.stop('Deployment complete');\n if (json) {\n outputJson(deployment);\n } else {\n const liveUrl = deployment?.deploymentUrl ?? deployment?.url;\n if (liveUrl) {\n clack.log.success(`Live at: ${liveUrl}`);\n }\n clack.log.info(`Deployment ID: ${deploymentId}`);\n }\n } else {\n s?.stop('Deployment is still building');\n if (json) {\n outputJson({ id: deploymentId, status: deployment?.status ?? 'building', timedOut: true });\n } else {\n clack.log.info(`Deployment ID: ${deploymentId}`);\n clack.log.warn('Deployment did not finish within 2 minutes.');\n clack.log.info(`Check status with: insforge deployments status ${deploymentId}`);\n }\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\n\nexport function registerDeploymentsListCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('list')\n .description('List all deployments')\n .option('--limit <n>', 'Limit number of results', '20')\n .option('--offset <n>', 'Offset for pagination', '0')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const res = await ossFetch(`/api/deployments?limit=${opts.limit}&offset=${opts.offset}`);\n const raw = await res.json() as unknown;\n\n // API may return array directly or { data: [...] }\n let deployments: Record<string, unknown>[];\n if (Array.isArray(raw)) {\n deployments = raw as Record<string, unknown>[];\n } else if (raw && typeof raw === 'object' && 'data' in raw && Array.isArray((raw as Record<string, unknown>).data)) {\n deployments = (raw as Record<string, unknown>).data as Record<string, unknown>[];\n } else {\n deployments = [];\n }\n\n if (json) {\n outputJson(raw);\n } else {\n if (!deployments.length) {\n console.log('No deployments found.');\n return;\n }\n outputTable(\n ['ID', 'Status', 'Provider', 'URL', 'Created'],\n deployments.map((d) => [\n String(d.id ?? '-'),\n String(d.status ?? '-'),\n String(d.provider ?? '-'),\n String(d.deploymentUrl ?? d.url ?? '-'),\n d.createdAt ?? d.created_at ? new Date(String(d.createdAt ?? d.created_at)).toLocaleString() : '-',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { SiteDeployment } from '../../types.js';\n\nexport function registerDeploymentsStatusCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('status <id>')\n .description('Get deployment details and sync status from Vercel')\n .option('--sync', 'Sync status from Vercel before showing')\n .action(async (id: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n // Optionally sync status from Vercel first\n if (opts.sync) {\n await ossFetch(`/api/deployments/${id}/sync`, { method: 'POST' });\n }\n\n const res = await ossFetch(`/api/deployments/${id}`);\n const d = (await res.json()) as SiteDeployment;\n\n if (json) {\n outputJson(d);\n } else {\n outputTable(\n ['Field', 'Value'],\n [\n ['ID', d.id],\n ['Status', d.status],\n ['Provider', d.provider ?? '-'],\n ['Provider ID', d.providerDeploymentId ?? '-'],\n ['URL', d.deploymentUrl ?? d.url ?? '-'],\n ['Created', new Date(d.createdAt).toLocaleString()],\n ['Updated', new Date(d.updatedAt).toLocaleString()],\n ...(d.error ? [['Error', d.error]] : []),\n ],\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDeploymentsCancelCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('cancel <id>')\n .description('Cancel a deployment')\n .action(async (id: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n if (!yes && !json) {\n const confirmed = await clack.confirm({\n message: `Cancel deployment ${id}?`,\n });\n if (clack.isCancel(confirmed) || !confirmed) process.exit(0);\n }\n\n const res = await ossFetch(`/api/deployments/${id}/cancel`, { method: 'POST' });\n const result = await res.json();\n\n if (json) {\n outputJson(result);\n } else {\n outputSuccess(`Deployment ${id} cancelled.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerSecretsListCommand(secretsCmd: Command): void {\n secretsCmd\n .command('list')\n .description('List secrets (metadata only, values are hidden)')\n .option('--all', 'Include inactive (deleted) secrets')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/secrets');\n const data = await res.json() as { secrets: Record<string, unknown>[] };\n let secrets = data.secrets ?? [];\n\n if (!opts.all) {\n secrets = secrets.filter((s) => s.isActive !== false);\n }\n\n if (json) {\n outputJson(opts.all ? data : { secrets });\n } else {\n if (!secrets.length) {\n console.log('No secrets found.');\n return;\n }\n const headers = opts.all\n ? ['Key', 'Active', 'Reserved', 'Expires', 'Updated']\n : ['Key', 'Reserved', 'Expires', 'Updated'];\n outputTable(\n headers,\n secrets.map((s) => {\n const row = [\n String(s.key ?? '-'),\n ...(opts.all ? [s.isActive ? 'Yes' : 'No'] : []),\n s.isReserved ? 'Yes' : 'No',\n s.expiresAt ? new Date(String(s.expiresAt)).toLocaleString() : '-',\n s.updatedAt ? new Date(String(s.updatedAt)).toLocaleString() : '-',\n ];\n return row;\n }),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\nexport function registerSecretsGetCommand(secretsCmd: Command): void {\n secretsCmd\n .command('get <key>')\n .description('Get the decrypted value of a secret')\n .action(async (key: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`);\n const data = await res.json() as { key: string; value: string };\n\n if (json) {\n outputJson(data);\n } else {\n console.log(`${data.key} = ${data.value}`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerSecretsAddCommand(secretsCmd: Command): void {\n secretsCmd\n .command('add <key> <value>')\n .description('Create a new secret')\n .option('--reserved', 'Mark secret as protected from deletion')\n .option('--expires <date>', 'Expiration date (ISO 8601 format)')\n .action(async (key: string, value: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const body: Record<string, unknown> = { key, value };\n if (opts.reserved) body.isReserved = true;\n if (opts.expires) body.expiresAt = opts.expires;\n\n const res = await ossFetch('/api/secrets', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n const data = await res.json() as { success: boolean; message: string; id: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} created.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerSecretsUpdateCommand(secretsCmd: Command): void {\n secretsCmd\n .command('update <key>')\n .description('Update an existing secret')\n .option('--value <value>', 'New secret value')\n .option('--active <bool>', 'Set active status (true/false)')\n .option('--reserved <bool>', 'Set reserved status (true/false)')\n .option('--expires <date>', 'Expiration date (ISO 8601, or \"null\" to remove)')\n .action(async (key: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const body: Record<string, unknown> = {};\n if (opts.value !== undefined) body.value = opts.value;\n if (opts.active !== undefined) body.isActive = opts.active === 'true';\n if (opts.reserved !== undefined) body.isReserved = opts.reserved === 'true';\n if (opts.expires !== undefined) body.expiresAt = opts.expires === 'null' ? null : opts.expires;\n\n if (Object.keys(body).length === 0) {\n throw new CLIError('Provide at least one option to update (--value, --active, --reserved, --expires).');\n }\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`, {\n method: 'PUT',\n body: JSON.stringify(body),\n });\n const data = await res.json() as { success: boolean; message: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} updated.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerSecretsDeleteCommand(secretsCmd: Command): void {\n secretsCmd\n .command('delete <key>')\n .description('Delete a secret')\n .action(async (key: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!yes && !json) {\n const confirm = await clack.confirm({\n message: `Delete secret \"${key}\"? This cannot be undone.`,\n });\n if (!confirm || clack.isCancel(confirm)) {\n process.exit(0);\n }\n }\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`, {\n method: 'DELETE',\n });\n const data = await res.json() as { success: boolean; message: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} deleted.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n"],"mappings":"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","names":["existsSync","mkdirSync","join","resolve","path","password","program","password","program","program","orgsCmd","clack","projectsCmd","clack","clack","program","path","dbCmd","dbCmd","dbCmd","str","extractArray","dbCmd","str","extractArray","dbCmd","str","extractArray","dbCmd","dbCmd","writeFileSync","dbCmd","writeFileSync","readFileSync","dbCmd","readFileSync","recordsCmd","path","recordsCmd","recordsCmd","recordsCmd","functionsCmd","readFileSync","existsSync","join","functionsCmd","join","existsSync","readFileSync","functionsCmd","text","functionsCmd","storageCmd","readFileSync","existsSync","basename","storageCmd","existsSync","readFileSync","basename","writeFileSync","join","basename","storageCmd","join","basename","writeFileSync","storageCmd","clack","storageCmd","confirm","storageCmd","exec","promisify","clack","execAsync","promisify","exec","buildOssHost","program","program","program","path","fs","clack","resolve","deploymentsCmd","deploymentsCmd","deploymentsCmd","clack","deploymentsCmd","secretsCmd","secretsCmd","secretsCmd","secretsCmd","clack","secretsCmd","confirm","join","existsSync","mkdirSync"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/login.ts","../src/lib/config.ts","../src/lib/errors.ts","../src/lib/auth.ts","../src/lib/credentials.ts","../src/lib/api/platform.ts","../src/lib/output.ts","../src/commands/logout.ts","../src/commands/whoami.ts","../src/commands/orgs/list.ts","../src/commands/projects/list.ts","../src/commands/projects/link.ts","../src/lib/skills.ts","../src/lib/api/oss.ts","../src/commands/db/query.ts","../src/commands/db/tables.ts","../src/commands/db/functions.ts","../src/commands/db/indexes.ts","../src/commands/db/policies.ts","../src/commands/db/triggers.ts","../src/commands/db/rpc.ts","../src/commands/db/export.ts","../src/commands/db/import.ts","../src/commands/records/list.ts","../src/commands/records/create.ts","../src/commands/records/update.ts","../src/commands/records/delete.ts","../src/commands/functions/list.ts","../src/commands/functions/deploy.ts","../src/commands/functions/invoke.ts","../src/commands/functions/code.ts","../src/commands/storage/buckets.ts","../src/commands/storage/upload.ts","../src/commands/storage/download.ts","../src/commands/storage/create-bucket.ts","../src/commands/storage/delete-bucket.ts","../src/commands/storage/list-objects.ts","../src/commands/create.ts","../src/commands/info.ts","../src/commands/list.ts","../src/commands/deployments/deploy.ts","../src/commands/deployments/list.ts","../src/commands/deployments/status.ts","../src/commands/deployments/cancel.ts","../src/commands/docs.ts","../src/commands/secrets/list.ts","../src/commands/secrets/get.ts","../src/commands/secrets/add.ts","../src/commands/secrets/update.ts","../src/commands/secrets/delete.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync } from 'node:fs';\nimport { join, dirname } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { Command } from 'commander';\nimport { registerLoginCommand } from './commands/login.js';\nimport { registerLogoutCommand } from './commands/logout.js';\nimport { registerWhoamiCommand } from './commands/whoami.js';\nimport { registerOrgsCommands } from './commands/orgs/list.js';\nimport { registerProjectsCommands } from './commands/projects/list.js';\nimport { registerProjectLinkCommand } from './commands/projects/link.js';\nimport { registerDbCommands } from './commands/db/query.js';\nimport { registerDbTablesCommand } from './commands/db/tables.js';\nimport { registerDbFunctionsCommand } from './commands/db/functions.js';\nimport { registerDbIndexesCommand } from './commands/db/indexes.js';\nimport { registerDbPoliciesCommand } from './commands/db/policies.js';\nimport { registerDbTriggersCommand } from './commands/db/triggers.js';\nimport { registerDbRpcCommand } from './commands/db/rpc.js';\nimport { registerDbExportCommand } from './commands/db/export.js';\nimport { registerDbImportCommand } from './commands/db/import.js';\nimport { registerRecordsCommands } from './commands/records/list.js';\nimport { registerRecordsCreateCommand } from './commands/records/create.js';\nimport { registerRecordsUpdateCommand } from './commands/records/update.js';\nimport { registerRecordsDeleteCommand } from './commands/records/delete.js';\nimport { registerFunctionsCommands } from './commands/functions/list.js';\nimport { registerFunctionsDeployCommand } from './commands/functions/deploy.js';\nimport { registerFunctionsInvokeCommand } from './commands/functions/invoke.js';\nimport { registerFunctionsCodeCommand } from './commands/functions/code.js';\nimport { registerStorageBucketsCommand } from './commands/storage/buckets.js';\nimport { registerStorageUploadCommand } from './commands/storage/upload.js';\nimport { registerStorageDownloadCommand } from './commands/storage/download.js';\nimport { registerStorageCreateBucketCommand } from './commands/storage/create-bucket.js';\nimport { registerStorageDeleteBucketCommand } from './commands/storage/delete-bucket.js';\nimport { registerStorageListObjectsCommand } from './commands/storage/list-objects.js';\nimport { registerCreateCommand } from './commands/create.js';\nimport { registerContextCommand } from './commands/info.js';\nimport { registerListCommand } from './commands/list.js';\nimport { registerDeploymentsDeployCommand } from './commands/deployments/deploy.js';\nimport { registerDeploymentsListCommand } from './commands/deployments/list.js';\nimport { registerDeploymentsStatusCommand } from './commands/deployments/status.js';\nimport { registerDeploymentsCancelCommand } from './commands/deployments/cancel.js';\n\nimport { registerDocsCommand } from './commands/docs.js';\nimport { registerSecretsListCommand } from './commands/secrets/list.js';\nimport { registerSecretsGetCommand } from './commands/secrets/get.js';\nimport { registerSecretsAddCommand } from './commands/secrets/add.js';\nimport { registerSecretsUpdateCommand } from './commands/secrets/update.js';\nimport { registerSecretsDeleteCommand } from './commands/secrets/delete.js';\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\nconst pkg = JSON.parse(readFileSync(join(__dirname, '../package.json'), 'utf-8')) as { version: string };\n\nconst INSFORGE_LOGO = `\n██╗███╗ ██╗███████╗███████╗ ██████╗ ██████╗ ██████╗ ███████╗\n██║████╗ ██║██╔════╝██╔════╝██╔═══██╗██╔══██╗██╔════╝ ██╔════╝\n██║██╔██╗ ██║███████╗█████╗ ██║ ██║██████╔╝██║ ███╗█████╗\n██║██║╚██╗██║╚════██║██╔══╝ ██║ ██║██╔══██╗██║ ██║██╔══╝\n██║██║ ╚████║███████║██║ ╚██████╔╝██║ ██║╚██████╔╝███████╗\n╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══════╝\n`;\n\nfunction showLogoOnFirstRun(): void {\n if (process.argv.includes('--json')) return;\n\n const localDir = join(process.cwd(), '.insforge');\n if (existsSync(localDir)) return;\n\n console.log(INSFORGE_LOGO);\n console.log(' Welcome to InsForge CLI! Run `insforge login` to get started.\\n');\n\n mkdirSync(localDir, { recursive: true });\n}\n\nshowLogoOnFirstRun();\n\nconst program = new Command();\n\nprogram\n .name('insforge')\n .description('InsForge CLI - Command line tool for InsForge platform')\n .version(pkg.version);\n\n// Global options\nprogram\n .option('--json', 'Output in JSON format')\n .option('--project-id <id>', 'Override linked project ID')\n .option('--api-url <url>', 'Override Platform API URL')\n .option('-y, --yes', 'Skip confirmation prompts');\n\n// Top-level commands\nregisterLoginCommand(program);\nregisterLogoutCommand(program);\nregisterWhoamiCommand(program);\nregisterCreateCommand(program);\nregisterContextCommand(program);\nregisterListCommand(program);\nregisterDocsCommand(program);\nregisterProjectLinkCommand(program);\n\n// Orgs commands (hidden — use `insforge list` instead)\nconst orgsCmd = program.command('orgs', { hidden: true }).description('Manage organizations');\nregisterOrgsCommands(orgsCmd);\n\n// Projects commands (hidden — use `insforge list` instead)\nconst projectsCmd = program.command('projects', { hidden: true }).description('Manage projects');\nregisterProjectsCommands(projectsCmd);\n\n// Database commands\nconst dbCmd = program.command('db').description('Database operations');\nregisterDbCommands(dbCmd);\nregisterDbTablesCommand(dbCmd);\nregisterDbFunctionsCommand(dbCmd);\nregisterDbIndexesCommand(dbCmd);\nregisterDbPoliciesCommand(dbCmd);\nregisterDbTriggersCommand(dbCmd);\nregisterDbRpcCommand(dbCmd);\nregisterDbExportCommand(dbCmd);\nregisterDbImportCommand(dbCmd);\n\n// Records commands (hidden — do not use for now)\nconst recordsCmd = program.command('records', { hidden: true }).description('CRUD operations on table records');\nregisterRecordsCommands(recordsCmd);\nregisterRecordsCreateCommand(recordsCmd);\nregisterRecordsUpdateCommand(recordsCmd);\nregisterRecordsDeleteCommand(recordsCmd);\n\n// Functions commands\nconst functionsCmd = program.command('functions').description('Manage edge functions');\nregisterFunctionsCommands(functionsCmd);\nregisterFunctionsCodeCommand(functionsCmd);\nregisterFunctionsDeployCommand(functionsCmd);\nregisterFunctionsInvokeCommand(functionsCmd);\n\n// Storage commands\nconst storageCmd = program.command('storage').description('Manage storage');\nregisterStorageBucketsCommand(storageCmd);\nregisterStorageCreateBucketCommand(storageCmd);\nregisterStorageDeleteBucketCommand(storageCmd);\nregisterStorageListObjectsCommand(storageCmd);\nregisterStorageUploadCommand(storageCmd);\nregisterStorageDownloadCommand(storageCmd);\n\n// Deployments commands\nconst deploymentsCmd = program.command('deployments').description('Deploy and manage frontend sites');\nregisterDeploymentsDeployCommand(deploymentsCmd);\nregisterDeploymentsListCommand(deploymentsCmd);\nregisterDeploymentsStatusCommand(deploymentsCmd);\nregisterDeploymentsCancelCommand(deploymentsCmd);\n// registerDeploymentsMetadataCommand(deploymentsCmd);\n// slug command doesn't work yet.\n// registerDeploymentsSlugCommand(deploymentsCmd);\n\n// Secrets commands\nconst secretsCmd = program.command('secrets').description('Manage secrets');\nregisterSecretsListCommand(secretsCmd);\nregisterSecretsGetCommand(secretsCmd);\nregisterSecretsAddCommand(secretsCmd);\nregisterSecretsUpdateCommand(secretsCmd);\nregisterSecretsDeleteCommand(secretsCmd);\n\nprogram.parse();\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { saveCredentials, getGlobalConfig, getPlatformApiUrl } from '../lib/config.js';\nimport { login as platformLogin, getProfile } from '../lib/api/platform.js';\nimport {\n generatePKCE,\n generateState,\n buildAuthorizeUrl,\n exchangeCodeForTokens,\n startCallbackServer,\n DEFAULT_CLIENT_ID,\n OAUTH_SCOPES,\n} from '../lib/auth.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport type { StoredCredentials } from '../types.js';\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Authenticate with InsForge platform')\n .option('--email', 'Login with email and password instead of browser')\n .option('--client-id <id>', 'OAuth client ID (defaults to insforge-cli)')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n\n try {\n if (opts.email) {\n await loginWithEmail(json, apiUrl);\n } else {\n await loginWithOAuth(json, apiUrl, opts.clientId);\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('cancelled')) {\n process.exit(0);\n }\n handleError(err, json);\n }\n });\n}\n\nasync function loginWithEmail(json: boolean, apiUrl?: string): Promise<void> {\n if (!json) {\n clack.intro('InsForge CLI');\n }\n\n const email = json\n ? process.env.INSFORGE_EMAIL\n : await clack.text({\n message: 'Email:',\n validate: (v) => (v.includes('@') ? undefined : 'Please enter a valid email'),\n });\n\n if (clack.isCancel(email)) {\n clack.cancel('Login cancelled.');\n throw new Error('cancelled');\n }\n\n const password = json\n ? process.env.INSFORGE_PASSWORD\n : await clack.password({\n message: 'Password:',\n });\n\n if (clack.isCancel(password)) {\n clack.cancel('Login cancelled.');\n throw new Error('cancelled');\n }\n\n if (!email || !password) {\n throw new Error('Email and password are required. Set INSFORGE_EMAIL and INSFORGE_PASSWORD environment variables for non-interactive mode.');\n }\n\n if (!json) {\n const s = clack.spinner();\n s.start('Authenticating...');\n\n const result = await platformLogin(email as string, password as string, apiUrl);\n const creds: StoredCredentials = {\n access_token: result.token,\n refresh_token: result._refreshToken ?? '',\n user: result.user,\n };\n saveCredentials(creds);\n\n s.stop(`Authenticated as ${result.user.email}`);\n clack.outro('Done');\n } else {\n const result = await platformLogin(email as string, password as string, apiUrl);\n const creds: StoredCredentials = {\n access_token: result.token,\n refresh_token: result._refreshToken ?? '',\n user: result.user,\n };\n saveCredentials(creds);\n console.log(JSON.stringify({ success: true, user: result.user }));\n }\n}\n\nasync function loginWithOAuth(json: boolean, apiUrl?: string, clientIdOverride?: string): Promise<void> {\n const platformUrl = getPlatformApiUrl(apiUrl);\n const config = getGlobalConfig();\n const clientId = clientIdOverride ?? config.oauth_client_id ?? DEFAULT_CLIENT_ID;\n\n // 1. Generate PKCE and state\n const pkce = generatePKCE();\n const state = generateState();\n\n // 2. Start local callback server\n const { port, result, close } = await startCallbackServer();\n const redirectUri = `http://127.0.0.1:${port}/callback`;\n\n // 3. Build authorization URL\n const authUrl = buildAuthorizeUrl({\n platformUrl,\n clientId,\n redirectUri,\n codeChallenge: pkce.code_challenge,\n state,\n scopes: OAUTH_SCOPES,\n });\n\n if (!json) {\n clack.intro('InsForge CLI');\n clack.log.info('Opening browser for authentication...');\n clack.log.info(`If browser doesn't open, visit:\\n${authUrl}`);\n }\n\n // 4. Open browser\n try {\n const open = (await import('open')).default;\n await open(authUrl);\n } catch {\n if (!json) {\n clack.log.warn(`Could not open browser. Please visit the URL above.`);\n }\n }\n\n // 5. Wait for callback\n if (!json) {\n const s = clack.spinner();\n s.start('Waiting for authentication...');\n\n try {\n const callbackResult = await result;\n close();\n\n // Verify state\n if (callbackResult.state !== state) {\n s.stop('Authentication failed');\n throw new Error('State mismatch. Possible CSRF attack.');\n }\n\n // 6. Exchange code for tokens\n s.message('Exchanging authorization code...');\n const tokens = await exchangeCodeForTokens({\n platformUrl,\n code: callbackResult.code,\n redirectUri,\n clientId,\n codeVerifier: pkce.code_verifier,\n });\n\n // 7. Fetch user profile with the new token\n const creds: StoredCredentials = {\n access_token: tokens.access_token,\n refresh_token: tokens.refresh_token,\n user: { id: '', name: '', email: '', avatar_url: null, email_verified: true },\n };\n saveCredentials(creds);\n\n // Try to get user profile\n try {\n const profile = await getProfile(apiUrl);\n creds.user = profile;\n saveCredentials(creds);\n s.stop(`Authenticated as ${profile.email}`);\n } catch {\n s.stop('Authenticated successfully');\n }\n\n clack.outro('Done');\n } catch (err) {\n close();\n s.stop('Authentication failed');\n throw err;\n }\n } else {\n // JSON mode\n try {\n const callbackResult = await result;\n close();\n\n if (callbackResult.state !== state) {\n throw new Error('State mismatch.');\n }\n\n const tokens = await exchangeCodeForTokens({\n platformUrl,\n code: callbackResult.code,\n redirectUri,\n clientId,\n codeVerifier: pkce.code_verifier,\n });\n\n const creds: StoredCredentials = {\n access_token: tokens.access_token,\n refresh_token: tokens.refresh_token,\n user: { id: '', name: '', email: '', avatar_url: null, email_verified: true },\n };\n saveCredentials(creds);\n\n try {\n const profile = await getProfile(apiUrl);\n creds.user = profile;\n saveCredentials(creds);\n } catch {}\n\n console.log(JSON.stringify({ success: true, user: creds.user }));\n } catch (err) {\n close();\n throw err;\n }\n }\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport type { GlobalConfig, ProjectConfig, StoredCredentials } from '../types.js';\n\nconst GLOBAL_DIR = join(homedir(), '.insforge');\nconst CREDENTIALS_FILE = join(GLOBAL_DIR, 'credentials.json');\nconst CONFIG_FILE = join(GLOBAL_DIR, 'config.json');\n\nconst DEFAULT_PLATFORM_URL = 'https://api.insforge.dev';\nconst DEFAULT_FRONTEND_URL = 'https://app.insforge.dev';\n\nfunction ensureGlobalDir(): void {\n if (!existsSync(GLOBAL_DIR)) {\n mkdirSync(GLOBAL_DIR, { recursive: true });\n }\n}\n\n// --- Global Config ---\n\nexport function getGlobalConfig(): GlobalConfig {\n if (!existsSync(CONFIG_FILE)) {\n return { platform_api_url: DEFAULT_PLATFORM_URL };\n }\n const raw = readFileSync(CONFIG_FILE, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveGlobalConfig(config: GlobalConfig): void {\n ensureGlobalDir();\n writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));\n}\n\n// --- Credentials ---\n\nexport function getCredentials(): StoredCredentials | null {\n if (!existsSync(CREDENTIALS_FILE)) {\n return null;\n }\n const raw = readFileSync(CREDENTIALS_FILE, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveCredentials(creds: StoredCredentials): void {\n ensureGlobalDir();\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(creds, null, 2), { mode: 0o600 });\n}\n\nexport function clearCredentials(): void {\n if (existsSync(CREDENTIALS_FILE)) {\n unlinkSync(CREDENTIALS_FILE);\n }\n}\n\n// --- Project Config (local) ---\n\nfunction getLocalConfigDir(): string {\n return join(process.cwd(), '.insforge');\n}\n\nfunction getLocalConfigFile(): string {\n return join(getLocalConfigDir(), 'project.json');\n}\n\nexport function getProjectConfig(): ProjectConfig | null {\n const file = getLocalConfigFile();\n if (!existsSync(file)) {\n return null;\n }\n const raw = readFileSync(file, 'utf-8');\n return JSON.parse(raw);\n}\n\nexport function saveProjectConfig(config: ProjectConfig): void {\n const dir = getLocalConfigDir();\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(getLocalConfigFile(), JSON.stringify(config, null, 2), { mode: 0o600 });\n}\n\n// --- Resolved values (env vars > flags > config) ---\n\nexport function getPlatformApiUrl(override?: string): string {\n return process.env.INSFORGE_API_URL ?? override ?? getGlobalConfig().platform_api_url ?? DEFAULT_PLATFORM_URL;\n}\n\nexport function getFrontendUrl(): string {\n return process.env.INSFORGE_FRONTEND_URL ?? DEFAULT_FRONTEND_URL;\n}\n\nexport function getAccessToken(): string | null {\n return process.env.INSFORGE_ACCESS_TOKEN ?? getCredentials()?.access_token ?? null;\n}\n\nexport function getProjectId(override?: string): string | null {\n return process.env.INSFORGE_PROJECT_ID ?? override ?? getProjectConfig()?.project_id ?? null;\n}\n","import type { Command } from 'commander';\n\nexport class CLIError extends Error {\n constructor(\n message: string,\n public exitCode: number = 1,\n public code?: string,\n ) {\n super(message);\n this.name = 'CLIError';\n }\n}\n\nexport class AuthError extends CLIError {\n constructor(message: string = 'Not authenticated. Run `insforge login` first.') {\n super(message, 2, 'AUTH_ERROR');\n }\n}\n\nexport class ProjectNotLinkedError extends CLIError {\n constructor() {\n super('No project linked. Run `insforge projects link` first.', 3, 'PROJECT_NOT_LINKED');\n }\n}\n\nexport class NotFoundError extends CLIError {\n constructor(resource: string) {\n super(`${resource} not found.`, 4, 'NOT_FOUND');\n }\n}\n\nexport class PermissionError extends CLIError {\n constructor(message: string = 'Permission denied.') {\n super(message, 5, 'PERMISSION_DENIED');\n }\n}\n\nexport function handleError(err: unknown, json: boolean): never {\n if (err instanceof CLIError) {\n if (json) {\n console.error(JSON.stringify({ error: err.message, code: err.code }));\n } else {\n console.error(`Error: ${err.message}`);\n }\n process.exit(err.exitCode);\n }\n\n const message = err instanceof Error ? err.message : String(err);\n if (json) {\n console.error(JSON.stringify({ error: message, code: 'UNKNOWN_ERROR' }));\n } else {\n console.error(`Error: ${message}`);\n }\n process.exit(1);\n}\n\nexport function getJsonFlag(cmd: Command): boolean {\n let root: Command = cmd;\n while (root.parent) {\n root = root.parent;\n }\n return root.opts().json ?? false;\n}\n\nexport function getRootOpts(cmd: Command): { json: boolean; projectId?: string; apiUrl?: string; yes: boolean } {\n let root: Command = cmd;\n while (root.parent) {\n root = root.parent;\n }\n const opts = root.opts();\n return {\n json: opts.json ?? false,\n projectId: opts.projectId,\n apiUrl: opts.apiUrl,\n yes: opts.yes ?? false,\n };\n}\n","import { createServer } from 'node:http';\nimport { randomBytes, createHash } from 'node:crypto';\nimport { URL } from 'node:url';\n\n// Default OAuth client for InsForge CLI (pre-registered on the platform)\nexport const DEFAULT_CLIENT_ID = 'clf_NK8cMUs41gm8ZcfdtSguVw';\nexport const OAUTH_SCOPES = 'user:read organizations:read projects:read projects:write';\n\nexport interface PKCEChallenge {\n code_verifier: string;\n code_challenge: string;\n}\n\nexport interface OAuthCallbackResult {\n code: string;\n state: string;\n}\n\n/**\n * Generate PKCE code_verifier and code_challenge (S256).\n */\nexport function generatePKCE(): PKCEChallenge {\n const code_verifier = randomBytes(32).toString('base64url');\n const code_challenge = createHash('sha256').update(code_verifier).digest('base64url');\n return { code_verifier, code_challenge };\n}\n\n/**\n * Generate a random state parameter for CSRF protection.\n */\nexport function generateState(): string {\n return randomBytes(16).toString('base64url');\n}\n\n/**\n * Build the OAuth authorization URL.\n */\nexport function buildAuthorizeUrl(params: {\n platformUrl: string;\n clientId: string;\n redirectUri: string;\n codeChallenge: string;\n state: string;\n scopes: string;\n}): string {\n const url = new URL(`${params.platformUrl}/api/oauth/v1/authorize`);\n url.searchParams.set('client_id', params.clientId);\n url.searchParams.set('redirect_uri', params.redirectUri);\n url.searchParams.set('response_type', 'code');\n url.searchParams.set('scope', params.scopes);\n url.searchParams.set('code_challenge', params.codeChallenge);\n url.searchParams.set('code_challenge_method', 'S256');\n url.searchParams.set('state', params.state);\n return url.toString();\n}\n\n/**\n * Exchange authorization code for tokens via the token endpoint.\n */\nexport async function exchangeCodeForTokens(params: {\n platformUrl: string;\n code: string;\n redirectUri: string;\n clientId: string;\n codeVerifier: string;\n}): Promise<{ access_token: string; refresh_token: string; expires_in: number; scope: string }> {\n const res = await fetch(`${params.platformUrl}/api/oauth/v1/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'authorization_code',\n code: params.code,\n redirect_uri: params.redirectUri,\n client_id: params.clientId,\n code_verifier: params.codeVerifier,\n }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error_description?: string; error?: string };\n throw new Error(err.error_description ?? err.error ?? 'Token exchange failed');\n }\n\n return await res.json() as { access_token: string; refresh_token: string; expires_in: number; scope: string };\n}\n\n/**\n * Refresh an OAuth access token using a refresh token.\n */\nexport async function refreshOAuthToken(params: {\n platformUrl: string;\n refreshToken: string;\n clientId: string;\n}): Promise<{ access_token: string; refresh_token?: string; expires_in: number }> {\n const res = await fetch(`${params.platformUrl}/api/oauth/v1/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n grant_type: 'refresh_token',\n refresh_token: params.refreshToken,\n client_id: params.clientId,\n }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error_description?: string; error?: string };\n throw new Error(err.error_description ?? err.error ?? 'Token refresh failed');\n }\n\n return await res.json() as { access_token: string; refresh_token?: string; expires_in: number };\n}\n\n/**\n * Start a local HTTP server to receive the OAuth authorization code callback.\n */\nexport function startCallbackServer(): Promise<{\n port: number;\n result: Promise<OAuthCallbackResult>;\n close: () => void;\n}> {\n return new Promise((resolveServer) => {\n let resolveResult: (value: OAuthCallbackResult) => void;\n let rejectResult: (reason: Error) => void;\n\n const resultPromise = new Promise<OAuthCallbackResult>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n const server = createServer((req, res) => {\n const url = new URL(req.url ?? '/', 'http://localhost');\n\n if (url.pathname === '/callback') {\n const code = url.searchParams.get('code');\n const state = url.searchParams.get('state');\n const error = url.searchParams.get('error');\n\n if (error) {\n const desc = url.searchParams.get('error_description') ?? error;\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(`<html><body><h2>Authentication failed</h2><p>${desc}</p><p>You can close this window.</p></body></html>`);\n rejectResult!(new Error(desc));\n return;\n }\n\n if (!code || !state) {\n res.writeHead(400, { 'Content-Type': 'text/html' });\n res.end('<html><body><h2>Invalid callback</h2><p>Missing authorization code.</p></body></html>');\n return;\n }\n\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end('<html><body><h2>Authentication successful!</h2><p>You can close this window and return to the terminal.</p></body></html>');\n resolveResult!({ code, state });\n } else {\n res.writeHead(404);\n res.end('Not found');\n }\n });\n\n server.listen(0, '127.0.0.1', () => {\n const addr = server.address();\n const port = typeof addr === 'object' ? addr!.port : 0;\n resolveServer({\n port,\n result: resultPromise,\n close: () => { server.close(); server.closeAllConnections(); },\n });\n });\n\n // Timeout after 5 minutes (unref so it doesn't keep the process alive)\n setTimeout(() => {\n rejectResult!(new Error('Authentication timed out. Please try again.'));\n server.close();\n }, 5 * 60 * 1000).unref();\n });\n}\n","import { getCredentials, getGlobalConfig, getPlatformApiUrl, saveCredentials } from './config.js';\nimport { AuthError } from './errors.js';\nimport { refreshOAuthToken, DEFAULT_CLIENT_ID } from './auth.js';\nimport type { StoredCredentials } from '../types.js';\n\nexport function requireAuth(): StoredCredentials {\n const creds = getCredentials();\n if (!creds || !creds.access_token) {\n throw new AuthError();\n }\n return creds;\n}\n\nexport async function refreshAccessToken(apiUrl?: string): Promise<string> {\n const creds = getCredentials();\n if (!creds?.refresh_token) {\n throw new AuthError('Refresh token not found. Run `insforge login` again.');\n }\n\n const platformUrl = getPlatformApiUrl(apiUrl);\n const config = getGlobalConfig();\n const clientId = config.oauth_client_id ?? DEFAULT_CLIENT_ID;\n\n try {\n const data = await refreshOAuthToken({\n platformUrl,\n refreshToken: creds.refresh_token,\n clientId,\n });\n\n const updated: StoredCredentials = {\n ...creds,\n access_token: data.access_token,\n // Update refresh token if rotated\n refresh_token: data.refresh_token ?? creds.refresh_token,\n };\n saveCredentials(updated);\n return data.access_token;\n } catch {\n throw new AuthError('Failed to refresh token. Run `insforge login` again.');\n }\n}\n","import { getAccessToken, getPlatformApiUrl } from '../config.js';\nimport { AuthError, CLIError } from '../errors.js';\nimport { refreshAccessToken } from '../credentials.js';\nimport type {\n ApiKeyResponse,\n LoginResponse,\n Organization,\n Project,\n User,\n} from '../../types.js';\n\nasync function platformFetch(\n path: string,\n options: RequestInit = {},\n apiUrl?: string,\n): Promise<Response> {\n const baseUrl = getPlatformApiUrl(apiUrl);\n const token = getAccessToken();\n if (!token) {\n throw new AuthError();\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n ...(options.headers as Record<string, string> ?? {}),\n };\n\n const res = await fetch(`${baseUrl}${path}`, { ...options, headers });\n\n // Auto-refresh on 401\n if (res.status === 401) {\n const newToken = await refreshAccessToken(apiUrl);\n headers.Authorization = `Bearer ${newToken}`;\n const retryRes = await fetch(`${baseUrl}${path}`, { ...options, headers });\n if (!retryRes.ok) {\n const err = await retryRes.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Request failed: ${retryRes.status}`, retryRes.status === 403 ? 5 : 1);\n }\n return retryRes;\n }\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Request failed: ${res.status}`, res.status === 403 ? 5 : 1);\n }\n\n return res;\n}\n\n// --- Auth ---\n\nexport async function login(email: string, password: string, apiUrl?: string): Promise<LoginResponse & { _refreshToken?: string }> {\n const baseUrl = getPlatformApiUrl(apiUrl);\n const res = await fetch(`${baseUrl}/auth/v1/login`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ email, password }),\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new AuthError(err.error ?? 'Login failed. Check your email and password.');\n }\n\n // Extract refresh token from Set-Cookie header\n const setCookie = res.headers.get('set-cookie') ?? '';\n const refreshTokenMatch = setCookie.match(/refreshToken=([^;]+)/);\n const data = (await res.json()) as LoginResponse;\n\n return {\n ...data,\n // Attach refresh token to the response for storage\n _refreshToken: refreshTokenMatch?.[1],\n } as LoginResponse & { _refreshToken?: string };\n}\n\nexport async function getProfile(apiUrl?: string): Promise<User> {\n const res = await platformFetch('/auth/v1/profile', {}, apiUrl);\n const data = await res.json() as { user?: User };\n return data.user ?? (data as unknown as User);\n}\n\n// --- Organizations ---\n\nexport async function listOrganizations(apiUrl?: string): Promise<Organization[]> {\n const res = await platformFetch('/organizations/v1', {}, apiUrl);\n const data = await res.json() as { organizations?: Organization[] };\n return data.organizations ?? (data as unknown as Organization[]);\n}\n\n// --- Projects ---\n\nexport async function listProjects(orgId: string, apiUrl?: string): Promise<Project[]> {\n const res = await platformFetch(`/organizations/v1/${orgId}/projects`, {}, apiUrl);\n const data = await res.json() as { projects?: Project[] };\n return data.projects ?? (data as unknown as Project[]);\n}\n\nexport async function getProject(projectId: string, apiUrl?: string): Promise<Project> {\n const res = await platformFetch(`/projects/v1/${projectId}`, {}, apiUrl);\n const data = await res.json() as { project?: Project };\n return data.project ?? (data as unknown as Project);\n}\n\nexport async function getProjectApiKey(projectId: string, apiUrl?: string): Promise<string> {\n const res = await platformFetch(`/projects/v1/${projectId}/access-api-key`, {}, apiUrl);\n const data = (await res.json()) as ApiKeyResponse;\n return data.access_api_key;\n}\n\nexport async function createProject(\n orgId: string,\n name: string,\n region?: string,\n apiUrl?: string,\n): Promise<Project> {\n const body: Record<string, string> = { name };\n if (region) body.region = region;\n\n const res = await platformFetch(`/organizations/v1/${orgId}/projects`, {\n method: 'POST',\n body: JSON.stringify(body),\n }, apiUrl);\n const data = await res.json() as { project?: Project };\n return data.project ?? (data as unknown as Project);\n}\n\n","import Table from 'cli-table3';\n\nexport function outputJson(data: unknown): void {\n console.log(JSON.stringify(data, null, 2));\n}\n\nexport function outputTable(headers: string[], rows: string[][]): void {\n const table = new Table({\n head: headers,\n style: { head: ['cyan'] },\n });\n for (const row of rows) {\n table.push(row);\n }\n console.log(table.toString());\n}\n\nexport function outputSuccess(message: string): void {\n console.log(`✓ ${message}`);\n}\n\nexport function outputInfo(message: string): void {\n console.log(message);\n}\n","import type { Command } from 'commander';\nimport { clearCredentials } from '../lib/config.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputSuccess, outputJson } from '../lib/output.js';\n\nexport function registerLogoutCommand(program: Command): void {\n program\n .command('logout')\n .description('Log out from InsForge platform')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n clearCredentials();\n if (json) {\n outputJson({ success: true, message: 'Logged out successfully' });\n } else {\n outputSuccess('Logged out successfully.');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { getProfile } from '../lib/api/platform.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputInfo } from '../lib/output.js';\nimport { requireAuth } from '../lib/credentials.js';\n\nexport function registerWhoamiCommand(program: Command): void {\n program\n .command('whoami')\n .description('Show current authenticated user')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n const profile = await getProfile(apiUrl);\n\n if (json) {\n outputJson(profile);\n } else {\n outputInfo(`Logged in as: ${profile.email ?? profile.name}`);\n if (profile.name) outputInfo(`Name: ${profile.name}`);\n if (profile.id) outputInfo(`ID: ${profile.id}`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { listOrganizations } from '../../lib/api/platform.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerOrgsCommands(orgsCmd: Command): void {\n orgsCmd\n .command('list')\n .description('List all organizations')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n const orgs = await listOrganizations(apiUrl);\n\n if (json) {\n outputJson(orgs);\n } else {\n if (!orgs.length) {\n console.log('No organizations found.');\n return;\n }\n outputTable(\n ['ID', 'Name', 'Type'],\n orgs.map((o) => [\n o.id,\n o.name,\n o.type ?? '-',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { listOrganizations, listProjects } from '../../lib/api/platform.js';\nimport { getGlobalConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerProjectsCommands(projectsCmd: Command): void {\n projectsCmd\n .command('list')\n .description('List all projects in an organization')\n .option('--org-id <id>', 'Organization ID (uses default if not specified)')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n\n let orgId = opts.orgId ?? getGlobalConfig().default_org_id;\n\n if (!orgId) {\n // Try to auto-select if user has only one org\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found. Create one on the InsForge dashboard.');\n }\n if (orgs.length === 1) {\n orgId = orgs[0].id;\n } else if (!json) {\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) {\n process.exit(0);\n }\n orgId = selected as string;\n } else {\n throw new CLIError('Multiple organizations found. Specify --org-id.');\n }\n }\n\n const projects = await listProjects(orgId, apiUrl);\n\n if (json) {\n outputJson(projects);\n } else {\n if (!projects.length) {\n console.log('No projects found.');\n return;\n }\n outputTable(\n ['ID', 'Name', 'Region', 'Status', 'AppKey'],\n projects.map((p) => [p.id, p.name, p.region, p.status, p.appkey]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport {\n listOrganizations,\n listProjects,\n getProject,\n getProjectApiKey,\n} from '../../lib/api/platform.js';\nimport { getGlobalConfig, saveGlobalConfig, saveProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\nimport { installSkills } from '../../lib/skills.js';\nimport type { ProjectConfig } from '../../types.js';\n\nfunction buildOssHost(appkey: string, region: string): string {\n return `https://${appkey}.${region}.insforge.app`;\n}\n\nexport function registerProjectLinkCommand(program: Command): void {\n program\n .command('link')\n .description('Link current directory to an InsForge project')\n .option('--project-id <id>', 'Project ID to link')\n .option('--org-id <id>', 'Organization ID')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n\n let orgId = opts.orgId;\n let projectId = opts.projectId;\n\n // Always show organization selection\n if (!orgId) {\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found.');\n }\n if (json) {\n throw new CLIError('Specify --org-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n orgId = selected as string;\n }\n\n // Save default org\n const config = getGlobalConfig();\n config.default_org_id = orgId;\n saveGlobalConfig(config);\n\n // Select project if not specified\n if (!projectId) {\n const projects = await listProjects(orgId, apiUrl);\n if (projects.length === 0) {\n throw new CLIError('No projects found in this organization.');\n }\n if (json) {\n throw new CLIError('Specify --project-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select a project to link:',\n options: projects.map((p) => ({\n value: p.id,\n label: `${p.name} (${p.region}, ${p.status})`,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n projectId = selected as string;\n }\n\n // Fetch project details and API key\n const [project, apiKey] = await Promise.all([\n getProject(projectId, apiUrl),\n getProjectApiKey(projectId, apiUrl),\n ]);\n\n const projectConfig: ProjectConfig = {\n project_id: project.id,\n project_name: project.name,\n org_id: project.organization_id,\n appkey: project.appkey,\n region: project.region,\n api_key: apiKey,\n oss_host: buildOssHost(project.appkey, project.region),\n };\n\n saveProjectConfig(projectConfig);\n\n if (json) {\n outputJson({ success: true, project: { id: project.id, name: project.name, region: project.region } });\n } else {\n outputSuccess(`Linked to project \"${project.name}\" (${project.appkey}.${project.region})`);\n }\n\n // Install InsForge agent skills\n await installSkills(json);\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n\n\n","import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport * as clack from '@clack/prompts';\n\nconst execAsync = promisify(exec);\n\nexport async function installSkills(json: boolean): Promise<void> {\n try {\n if (!json) clack.log.info('Installing InsForge agent skills...');\n await execAsync('npx skills add insforge/agent-skills -y -a antigravity -a augment -a claude-code -a cline -a codex -a cursor -a gemini-cli -a github-copilot -a kilo -a qoder -a qwen-code -a roo -a trae -a windsurf', {\n cwd: process.cwd(),\n timeout: 60_000,\n });\n if (!json) clack.log.success('InsForge agent skills installed.');\n } catch {\n if (!json) clack.log.warn('Failed to install agent skills. You can run manually: npx skills add insforge/agent-skills');\n }\n}\n","import { getProjectConfig } from '../config.js';\nimport { CLIError, ProjectNotLinkedError } from '../errors.js';\nimport type { ProjectConfig } from '../../types.js';\n\nfunction requireProjectConfig(): ProjectConfig {\n const config = getProjectConfig();\n if (!config) {\n throw new ProjectNotLinkedError();\n }\n return config;\n}\n\n/**\n * Unified OSS API fetch. Uses API key as Bearer token for all requests,\n * which grants superadmin access (SQL execution, bucket management, etc.).\n */\nexport async function getAnonKey(): Promise<string> {\n const res = await ossFetch('/api/auth/tokens/anon', { method: 'POST' });\n const data = await res.json() as { accessToken: string };\n return data.accessToken;\n}\n\nexport async function ossFetch(\n path: string,\n options: RequestInit = {},\n): Promise<Response> {\n const config = requireProjectConfig();\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.api_key}`,\n ...(options.headers as Record<string, string> ?? {}),\n };\n\n const res = await fetch(`${config.oss_host}${path}`, { ...options, headers });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `OSS request failed: ${res.status}`);\n }\n\n return res;\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerDbCommands(dbCmd: Command): void {\n dbCmd\n .command('query <sql>')\n .description('Execute a SQL query against the database')\n .option('--unrestricted', 'Use unrestricted mode (allows system table access)')\n .action(async (sql: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const endpoint = opts.unrestricted\n ? '/api/database/advance/rawsql/unrestricted'\n : '/api/database/advance/rawsql';\n\n const res = await ossFetch(endpoint, {\n method: 'POST',\n body: JSON.stringify({ query: sql }),\n });\n\n const data = await res.json() as { rows?: Record<string, unknown>[]; data?: Record<string, unknown>[] };\n\n if (json) {\n outputJson(data);\n } else {\n // Try to render as table if results are array of objects\n const rows = data.rows ?? data.data ?? null;\n if (rows && rows.length > 0) {\n const headers = Object.keys(rows[0]);\n outputTable(\n headers,\n rows.map((row) => headers.map((h) => String(row[h] ?? ''))),\n );\n console.log(`${rows.length} row(s) returned.`);\n } else {\n console.log('Query executed successfully.');\n if (rows && rows.length === 0) {\n console.log('No rows returned.');\n }\n }\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerDbTablesCommand(dbCmd: Command): void {\n dbCmd\n .command('tables')\n .description('List all database tables')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/database/tables');\n const tables = await res.json() as string[];\n\n if (json) {\n outputJson(tables);\n } else {\n if (tables.length === 0) {\n console.log('No tables found.');\n return;\n }\n outputTable(\n ['Table Name'],\n tables.map((t) => [t]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nfunction str(val: unknown): string {\n if (val === null || val === undefined) return '-';\n if (Array.isArray(val)) return val.join(', ');\n return String(val);\n}\n\nfunction extractArray(raw: unknown): Record<string, unknown>[] {\n if (Array.isArray(raw)) return raw as Record<string, unknown>[];\n if (raw && typeof raw === 'object') {\n const arr = Object.values(raw).find(Array.isArray);\n if (arr) return arr as Record<string, unknown>[];\n }\n return [];\n}\n\nexport function registerDbFunctionsCommand(dbCmd: Command): void {\n dbCmd\n .command('functions')\n .description('List all database functions')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/database/functions');\n const raw = await res.json() as unknown;\n const functions = extractArray(raw);\n\n if (json) {\n outputJson(raw);\n } else {\n if (functions.length === 0) {\n console.log('No database functions found.');\n return;\n }\n outputTable(\n ['Name', 'Schema', 'Language', 'Return Type', 'Arguments'],\n functions.map((f) => [str(f.name), str(f.schema), str(f.language), str(f.returnType), str(f.arguments)]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nfunction str(val: unknown): string {\n if (val === null || val === undefined) return '-';\n if (Array.isArray(val)) return val.join(', ');\n return String(val);\n}\n\nfunction extractArray(raw: unknown): Record<string, unknown>[] {\n if (Array.isArray(raw)) return raw as Record<string, unknown>[];\n if (raw && typeof raw === 'object') {\n const arr = Object.values(raw).find(Array.isArray);\n if (arr) return arr as Record<string, unknown>[];\n }\n return [];\n}\n\nexport function registerDbIndexesCommand(dbCmd: Command): void {\n dbCmd\n .command('indexes')\n .description('List all database indexes')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/database/indexes');\n const raw = await res.json() as unknown;\n const indexes = extractArray(raw);\n\n if (json) {\n outputJson(raw);\n } else {\n if (indexes.length === 0) {\n console.log('No database indexes found.');\n return;\n }\n outputTable(\n ['Table', 'Index Name', 'Definition', 'Unique', 'Primary'],\n indexes.map((i) => [\n str(i.tableName),\n str(i.indexName),\n str(i.indexDef),\n i.isUnique ? 'Yes' : 'No',\n i.isPrimary ? 'Yes' : 'No',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nfunction str(val: unknown): string {\n if (val === null || val === undefined) return '-';\n if (Array.isArray(val)) return val.join(', ');\n return String(val);\n}\n\nfunction extractArray(raw: unknown): Record<string, unknown>[] {\n if (Array.isArray(raw)) return raw as Record<string, unknown>[];\n if (raw && typeof raw === 'object') {\n const arr = Object.values(raw).find(Array.isArray);\n if (arr) return arr as Record<string, unknown>[];\n }\n return [];\n}\n\nexport function registerDbPoliciesCommand(dbCmd: Command): void {\n dbCmd\n .command('policies')\n .description('List all RLS policies')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/database/policies');\n const raw = await res.json() as unknown;\n const policies = extractArray(raw);\n\n if (json) {\n outputJson(raw);\n } else {\n if (policies.length === 0) {\n console.log('No RLS policies found.');\n return;\n }\n outputTable(\n ['Table', 'Policy Name', 'Command', 'Roles', 'Qual', 'With Check'],\n policies.map((p) => [\n str(p.tableName),\n str(p.policyName),\n str(p.cmd),\n str(p.roles),\n str(p.qual),\n str(p.withCheck),\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nfunction str(val: unknown): string {\n if (val === null || val === undefined) return '-';\n if (Array.isArray(val)) return val.join(', ');\n return String(val);\n}\n\nfunction extractArray(raw: unknown): Record<string, unknown>[] {\n if (Array.isArray(raw)) return raw as Record<string, unknown>[];\n if (raw && typeof raw === 'object') {\n const arr = Object.values(raw).find(Array.isArray);\n if (arr) return arr as Record<string, unknown>[];\n }\n return [];\n}\n\nexport function registerDbTriggersCommand(dbCmd: Command): void {\n dbCmd\n .command('triggers')\n .description('List all database triggers')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/database/triggers');\n const raw = await res.json() as unknown;\n const triggers = extractArray(raw);\n\n if (json) {\n outputJson(raw);\n } else {\n if (triggers.length === 0) {\n console.log('No database triggers found.');\n return;\n }\n outputTable(\n ['Name', 'Table', 'Timing', 'Events', 'Function', 'Enabled'],\n triggers.map((t) => [\n str(t.name),\n str(t.tableName),\n str(t.timing),\n str(t.events),\n str(t.functionName),\n t.enabled ? 'Yes' : 'No',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\nexport function registerDbRpcCommand(dbCmd: Command): void {\n dbCmd\n .command('rpc <functionName>')\n .description('Call a database function via RPC')\n .option('--data <json>', 'JSON body to pass as function parameters')\n .action(async (functionName: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const body = opts.data ? JSON.stringify(JSON.parse(opts.data) as unknown) : undefined;\n\n const res = await ossFetch(`/api/database/rpc/${encodeURIComponent(functionName)}`, {\n method: body ? 'POST' : 'GET',\n ...(body ? { body } : {}),\n });\n\n const result = await res.json() as unknown;\n\n if (json) {\n outputJson(result);\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { writeFileSync } from 'node:fs';\nimport type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDbExportCommand(dbCmd: Command): void {\n dbCmd\n .command('export')\n .description('Export database schema and/or data')\n .option('--format <format>', 'Export format: sql or json', 'sql')\n .option('--tables <tables>', 'Comma-separated list of tables to export (default: all)')\n .option('--no-data', 'Exclude table data (schema only)')\n .option('--include-functions', 'Include database functions')\n .option('--include-sequences', 'Include sequences')\n .option('--include-views', 'Include views')\n .option('--row-limit <n>', 'Maximum rows per table')\n .option('-o, --output <file>', 'Output file path (default: stdout)')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const body: Record<string, unknown> = {\n format: opts.format,\n includeData: opts.data !== false,\n };\n\n if (opts.tables) {\n body.tables = (opts.tables as string).split(',').map((t: string) => t.trim());\n }\n if (opts.includeFunctions) body.includeFunctions = true;\n if (opts.includeSequences) body.includeSequences = true;\n if (opts.includeViews) body.includeViews = true;\n if (opts.rowLimit) body.rowLimit = parseInt(opts.rowLimit as string, 10);\n\n const res = await ossFetch('/api/database/advance/export', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n\n const raw = await res.text();\n\n // API may return JSON wrapper { format, content, tables } or raw SQL/JSON text\n let content: string;\n let meta: { format?: string; tables?: string[] } | null = null;\n try {\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n if (typeof parsed.content === 'string') {\n content = parsed.content;\n meta = { format: parsed.format as string, tables: parsed.tables as string[] };\n } else {\n content = raw;\n }\n } catch {\n content = raw;\n }\n\n if (json) {\n outputJson(meta ?? { content });\n return;\n }\n\n if (opts.output) {\n writeFileSync(opts.output as string, content);\n const tableCount = meta?.tables?.length;\n const suffix = tableCount ? ` (${tableCount} tables, format: ${meta?.format ?? opts.format})` : '';\n outputSuccess(`Exported to ${opts.output}${suffix}`);\n } else {\n console.log(content);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { readFileSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDbImportCommand(dbCmd: Command): void {\n dbCmd\n .command('import <file>')\n .description('Import database from a local SQL file')\n .option('--truncate', 'Truncate existing tables before import')\n .action(async (file: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const fileContent = readFileSync(file);\n const fileName = basename(file);\n\n const formData = new FormData();\n formData.append('file', new Blob([fileContent]), fileName);\n if (opts.truncate) {\n formData.append('truncate', 'true');\n }\n\n const res = await fetch(`${config.oss_host}/api/database/advance/import`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n body: formData,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Import failed: ${res.status}`);\n }\n\n const data = await res.json() as { filename: string; fileSize: number; tables: string[]; rowsImported: number };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Imported ${data.filename} (${data.tables.length} tables, ${data.rowsImported} rows)`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerRecordsCommands(recordsCmd: Command): void {\n recordsCmd\n .command('list <table>')\n .description('List records from a table')\n .option('--select <columns>', 'Columns to select (comma-separated)')\n .option('--filter <filter>', 'Filter expression (e.g. \"name=eq.John\")')\n .option('--order <order>', 'Order by (e.g. \"created_at.desc\")')\n .option('--limit <n>', 'Limit number of records', parseInt)\n .option('--offset <n>', 'Offset for pagination', parseInt)\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const params = new URLSearchParams();\n if (opts.select) params.set('select', opts.select);\n if (opts.filter) params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n if (opts.order) params.set('order', opts.order);\n if (opts.limit) params.set('limit', String(opts.limit));\n if (opts.offset) params.set('offset', String(opts.offset));\n\n const query = params.toString();\n const path = `/api/database/records/${encodeURIComponent(table)}${query ? `?${query}` : ''}`;\n const res = await ossFetch(path);\n const data = await res.json() as { data?: Record<string, unknown>[] };\n const records = data.data ?? [];\n\n if (json) {\n outputJson(data);\n } else {\n if (records.length === 0) {\n console.log('No records found.');\n return;\n }\n const headers = Object.keys(records[0]);\n outputTable(\n headers,\n records.map((r) => headers.map((h) => {\n const val = r[h];\n if (val === null || val === undefined) return '';\n if (typeof val === 'object') return JSON.stringify(val);\n return String(val);\n })),\n );\n console.log(`${records.length} record(s).`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsCreateCommand(recordsCmd: Command): void {\n recordsCmd\n .command('create <table>')\n .description('Create record(s) in a table')\n .option('--data <json>', 'JSON data to insert (object or array of objects)')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!opts.data) {\n throw new CLIError('--data is required. Example: --data \\'{\"name\":\"John\"}\\'');\n }\n\n let records: unknown[];\n try {\n const parsed = JSON.parse(opts.data) as unknown;\n records = Array.isArray(parsed) ? parsed : [parsed];\n } catch {\n throw new CLIError('Invalid JSON in --data. Provide a JSON object or array.');\n }\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?return=representation`,\n {\n method: 'POST',\n body: JSON.stringify(records),\n },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const created = data.data ?? [];\n outputSuccess(`Created ${created.length || records.length} record(s) in \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsUpdateCommand(recordsCmd: Command): void {\n recordsCmd\n .command('update <table>')\n .description('Update records in a table matching a filter')\n .option('--filter <filter>', 'Filter expression (e.g. \"id=eq.123\")')\n .option('--data <json>', 'JSON data to update')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!opts.filter) {\n throw new CLIError('--filter is required to prevent accidental updates to all rows.');\n }\n if (!opts.data) {\n throw new CLIError('--data is required. Example: --data \\'{\"name\":\"Jane\"}\\'');\n }\n\n let body: unknown;\n try {\n body = JSON.parse(opts.data) as unknown;\n } catch {\n throw new CLIError('Invalid JSON in --data.');\n }\n\n const params = new URLSearchParams();\n params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n params.set('return', 'representation');\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?${params}`,\n {\n method: 'PATCH',\n body: JSON.stringify(body),\n },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const updated = data.data ?? [];\n outputSuccess(`Updated ${updated.length} record(s) in \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerRecordsDeleteCommand(recordsCmd: Command): void {\n recordsCmd\n .command('delete <table>')\n .description('Delete records from a table matching a filter')\n .option('--filter <filter>', 'Filter expression (e.g. \"id=eq.123\")')\n .action(async (table: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!opts.filter) {\n throw new CLIError('--filter is required to prevent accidental deletion of all rows.');\n }\n\n const params = new URLSearchParams();\n params.set(opts.filter.split('=')[0], opts.filter.split('=').slice(1).join('='));\n params.set('return', 'representation');\n\n const res = await ossFetch(\n `/api/database/records/${encodeURIComponent(table)}?${params}`,\n { method: 'DELETE' },\n );\n\n const data = await res.json() as { data?: unknown[] };\n\n if (json) {\n outputJson(data);\n } else {\n const deleted = data.data ?? [];\n outputSuccess(`Deleted ${deleted.length} record(s) from \"${table}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { OssFunction } from '../../types.js';\n\nexport function registerFunctionsCommands(functionsCmd: Command): void {\n functionsCmd\n .command('list')\n .description('List all edge functions')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/functions');\n const data = await res.json() as { functions?: OssFunction[] };\n const functions = data.functions ?? [];\n\n if (json) {\n outputJson(functions);\n } else {\n if (functions.length === 0) {\n console.log('No functions found.');\n return;\n }\n outputTable(\n ['Slug', 'Name', 'Status', 'Created At'],\n functions.map((f) => [\n f.slug,\n f.name ?? '-',\n f.status ?? '-',\n f.created_at ? new Date(f.created_at).toLocaleString() : '-',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerFunctionsDeployCommand(functionsCmd: Command): void {\n functionsCmd\n .command('deploy <slug>')\n .description('Deploy an edge function (create or update)')\n .option('--file <path>', 'Path to the function source file')\n .option('--name <name>', 'Function display name')\n .option('--description <desc>', 'Function description')\n .action(async (slug: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n // Resolve source file\n const filePath = opts.file ?? join(process.cwd(), 'insforge', 'functions', slug, 'index.ts');\n if (!existsSync(filePath)) {\n throw new CLIError(\n `Source file not found: ${filePath}\\n` +\n `Specify --file <path> or create ${join('insforge', 'functions', slug, 'index.ts')}`,\n );\n }\n\n const code = readFileSync(filePath, 'utf-8');\n const name = opts.name ?? slug;\n const description = opts.description ?? '';\n\n // Check if function exists\n let exists = false;\n try {\n await ossFetch(`/api/functions/${encodeURIComponent(slug)}`);\n exists = true;\n } catch {\n exists = false;\n }\n\n if (exists) {\n await ossFetch(`/api/functions/${encodeURIComponent(slug)}`, {\n method: 'PUT',\n body: JSON.stringify({ name, description, code }),\n });\n } else {\n await ossFetch('/api/functions', {\n method: 'POST',\n body: JSON.stringify({ slug, name, description, code }),\n });\n }\n\n if (json) {\n outputJson({ success: true, slug, action: exists ? 'updated' : 'created' });\n } else {\n outputSuccess(`Function \"${slug}\" ${exists ? 'updated' : 'created'} successfully.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\nexport function registerFunctionsInvokeCommand(functionsCmd: Command): void {\n functionsCmd\n .command('invoke <slug>')\n .description('Invoke an edge function')\n .option('--data <json>', 'JSON body to send to the function')\n .option('--method <method>', 'HTTP method (GET, POST, PUT, PATCH, DELETE)', 'POST')\n .action(async (slug: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const method = opts.method.toUpperCase();\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${config.api_key}`,\n };\n\n const fetchOpts: RequestInit = { method, headers };\n\n if (opts.data && ['POST', 'PUT', 'PATCH'].includes(method)) {\n fetchOpts.body = opts.data;\n }\n\n // Functions client endpoint is at /functions/{slug} (not /api/functions/{slug})\n // Use direct fetch so we always show the function's full response,\n // even on non-200 status codes (function errors are part of the output).\n const res = await fetch(\n `${config.oss_host}/functions/${encodeURIComponent(slug)}`,\n fetchOpts,\n );\n\n const contentType = res.headers.get('content-type') ?? '';\n const status = res.status;\n\n if (contentType.includes('application/json')) {\n const data = await res.json();\n if (json) {\n outputJson({ status, body: data });\n } else {\n if (status >= 400) {\n console.error(`HTTP ${status}`);\n }\n console.log(JSON.stringify(data, null, 2));\n }\n } else {\n const text = await res.text();\n if (!json && status >= 400) {\n console.error(`HTTP ${status}`);\n }\n console.log(text);\n }\n\n // Exit with non-zero code on function errors\n if (status >= 400) {\n process.exit(1);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\ninterface FunctionDetails {\n id: string;\n slug: string;\n name: string;\n description: string | null;\n code: string;\n status: string;\n created_at: string;\n updated_at: string;\n deployed_at: string | null;\n}\n\nexport function registerFunctionsCodeCommand(functionsCmd: Command): void {\n functionsCmd\n .command('code <slug>')\n .description('Fetch and display the source code of an edge function')\n .action(async (slug: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch(`/api/functions/${encodeURIComponent(slug)}`);\n const fn = await res.json() as FunctionDetails;\n\n if (json) {\n outputJson(fn);\n } else {\n console.log(`Function: ${fn.name} (${fn.slug})`);\n console.log(`Status: ${fn.status}`);\n if (fn.description) console.log(`Desc: ${fn.description}`);\n if (fn.deployed_at) console.log(`Deployed: ${fn.deployed_at}`);\n console.log('---');\n console.log(fn.code);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerStorageBucketsCommand(storageCmd: Command): void {\n storageCmd\n .command('buckets')\n .description('List all storage buckets')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/storage/buckets');\n const raw = await res.json() as unknown;\n\n // API may return { buckets: string[] } or string[] directly\n let buckets: string[];\n if (Array.isArray(raw)) {\n buckets = raw as string[];\n } else if (raw && typeof raw === 'object' && 'buckets' in raw && Array.isArray((raw as Record<string, unknown>).buckets)) {\n buckets = (raw as Record<string, unknown>).buckets as string[];\n } else {\n // Fallback: find first array in response\n const arr = raw && typeof raw === 'object' ? Object.values(raw).find(Array.isArray) : null;\n buckets = (arr as string[] | null) ?? [];\n }\n\n if (json) {\n outputJson(raw);\n } else {\n if (buckets.length === 0) {\n console.log('No buckets found.');\n return;\n }\n outputTable(\n ['Bucket Name'],\n buckets.map((b) => [typeof b === 'string' ? b : JSON.stringify(b)]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { readFileSync, existsSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageUploadCommand(storageCmd: Command): void {\n storageCmd\n .command('upload <file>')\n .description('Upload a file to a storage bucket')\n .requiredOption('--bucket <name>', 'Target bucket name')\n .option('--key <objectKey>', 'Object key (defaults to filename)')\n .action(async (file: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n if (!existsSync(file)) {\n throw new CLIError(`File not found: ${file}`);\n }\n\n const fileContent = readFileSync(file);\n const objectKey = opts.key ?? basename(file);\n const bucketName = opts.bucket;\n\n // Build multipart form data\n const formData = new FormData();\n const blob = new Blob([fileContent]);\n formData.append('file', blob, objectKey);\n\n // PUT /api/storage/buckets/{bucket}/objects/{key} for named upload\n const url = `${config.oss_host}/api/storage/buckets/${encodeURIComponent(bucketName)}/objects/${encodeURIComponent(objectKey)}`;\n\n const res = await fetch(url, {\n method: 'PUT',\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n body: formData,\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Upload failed: ${res.status}`);\n }\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Uploaded \"${basename(file)}\" to bucket \"${bucketName}\".`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import { writeFileSync } from 'node:fs';\nimport { join, basename } from 'node:path';\nimport type { Command } from 'commander';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageDownloadCommand(storageCmd: Command): void {\n storageCmd\n .command('download <objectKey>')\n .description('Download a file from a storage bucket')\n .requiredOption('--bucket <name>', 'Source bucket name')\n .option('--output <path>', 'Output file path (defaults to current directory)')\n .action(async (objectKey: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n const bucketName = opts.bucket;\n const url = `${config.oss_host}/api/storage/buckets/${encodeURIComponent(bucketName)}/objects/${encodeURIComponent(objectKey)}`;\n\n const res = await fetch(url, {\n headers: {\n Authorization: `Bearer ${config.api_key}`,\n },\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({})) as { error?: string };\n throw new CLIError(err.error ?? `Download failed: ${res.status}`);\n }\n\n const buffer = Buffer.from(await res.arrayBuffer());\n const outputPath = opts.output ?? join(process.cwd(), basename(objectKey));\n writeFileSync(outputPath, buffer);\n\n if (json) {\n outputJson({ success: true, path: outputPath, size: buffer.length });\n } else {\n outputSuccess(`Downloaded \"${objectKey}\" to ${outputPath} (${buffer.length} bytes).`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageCreateBucketCommand(storageCmd: Command): void {\n storageCmd\n .command('create-bucket <name>')\n .description('Create a new storage bucket')\n .option('--public', 'Make the bucket publicly accessible (default)')\n .option('--private', 'Make the bucket private')\n .action(async (name: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const isPublic = !opts.private;\n\n const res = await ossFetch('/api/storage/buckets', {\n method: 'POST',\n body: JSON.stringify({ bucketName: name, isPublic }),\n });\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Bucket \"${name}\" created (${isPublic ? 'public' : 'private'}).`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerStorageDeleteBucketCommand(storageCmd: Command): void {\n storageCmd\n .command('delete-bucket <name>')\n .description('Delete a storage bucket and all its objects')\n .action(async (name: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!yes && !json) {\n const confirm = await clack.confirm({\n message: `Delete bucket \"${name}\" and all its objects? This cannot be undone.`,\n });\n if (!confirm || clack.isCancel(confirm)) {\n process.exit(0);\n }\n }\n\n const res = await ossFetch(`/api/storage/buckets/${encodeURIComponent(name)}`, {\n method: 'DELETE',\n });\n\n const data = await res.json();\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(`Bucket \"${name}\" deleted.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\ninterface StoredFile {\n key: string;\n size: number;\n mimeType?: string;\n uploadedAt: string;\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function registerStorageListObjectsCommand(storageCmd: Command): void {\n storageCmd\n .command('list-objects <bucket>')\n .description('List objects in a storage bucket')\n .option('--limit <n>', 'Maximum number of objects to return', '100')\n .option('--offset <n>', 'Number of objects to skip', '0')\n .option('--prefix <prefix>', 'Filter objects by key prefix')\n .option('--search <term>', 'Search objects by key (partial match)')\n .option('--sort <field>', 'Sort by field: key, size, uploadedAt (default: key)')\n .action(async (bucket: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const params = new URLSearchParams();\n params.set('limit', opts.limit);\n params.set('offset', opts.offset);\n if (opts.prefix) params.set('prefix', opts.prefix);\n if (opts.search) params.set('search', opts.search);\n\n const res = await ossFetch(\n `/api/storage/buckets/${encodeURIComponent(bucket)}/objects?${params.toString()}`,\n );\n const raw = await res.json() as { data?: StoredFile[]; pagination?: { total?: number } };\n\n const objects: StoredFile[] = Array.isArray(raw)\n ? raw as StoredFile[]\n : (raw.data ?? []);\n\n // Client-side sort\n const sortField = opts.sort ?? 'key';\n objects.sort((a, b) => {\n if (sortField === 'size') return a.size - b.size;\n if (sortField === 'uploadedAt') return a.uploadedAt.localeCompare(b.uploadedAt);\n return a.key.localeCompare(b.key);\n });\n\n if (json) {\n outputJson(raw);\n } else {\n if (objects.length === 0) {\n console.log(`No objects found in bucket \"${bucket}\".`);\n return;\n }\n const total = raw.pagination?.total;\n if (total !== undefined) {\n console.log(`Showing ${objects.length} of ${total} objects:\\n`);\n }\n outputTable(\n ['Key', 'Size', 'Type', 'Uploaded At'],\n objects.map((o) => [\n o.key,\n formatSize(o.size),\n o.mimeType ?? '-',\n o.uploadedAt,\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { exec } from 'node:child_process';\nimport { tmpdir } from 'node:os';\nimport { promisify } from 'node:util';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport * as clack from '@clack/prompts';\nimport {\n listOrganizations,\n createProject,\n getProject,\n getProjectApiKey,\n} from '../lib/api/platform.js';\nimport { getAnonKey } from '../lib/api/oss.js';\nimport { getGlobalConfig, saveGlobalConfig, saveProjectConfig } from '../lib/config.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../lib/errors.js';\nimport { outputJson } from '../lib/output.js';\nimport { installSkills } from '../lib/skills.js';\nimport type { ProjectConfig } from '../types.js';\n\nconst execAsync = promisify(exec);\n\ntype Framework = 'react' | 'nextjs';\n\nfunction buildOssHost(appkey: string, region: string): string {\n return `https://${appkey}.${region}.insforge.app`;\n}\n\nasync function waitForProjectActive(projectId: string, apiUrl?: string, timeoutMs = 120_000): Promise<void> {\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n const project = await getProject(projectId, apiUrl);\n if (project.status === 'active') return;\n await new Promise((r) => setTimeout(r, 3000));\n }\n throw new CLIError('Project creation timed out. Check the dashboard for status.');\n}\n\nasync function copyDir(src: string, dest: string): Promise<void> {\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) {\n await fs.mkdir(destPath, { recursive: true });\n await copyDir(srcPath, destPath);\n } else {\n await fs.copyFile(srcPath, destPath);\n }\n }\n}\n\nexport function registerCreateCommand(program: Command): void {\n program\n .command('create')\n .description('Create a new InsForge project')\n .option('--name <name>', 'Project name')\n .option('--org-id <id>', 'Organization ID')\n .option('--region <region>', 'Deployment region (us-east, us-west, eu-central, ap-southeast)')\n .option('--template <template>', 'Template to use: react, nextjs, or empty')\n .action(async (opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!json) {\n clack.intro('Create a new InsForge project');\n }\n\n // 1. Select organization\n let orgId = opts.orgId;\n if (!orgId) {\n const orgs = await listOrganizations(apiUrl);\n if (orgs.length === 0) {\n throw new CLIError('No organizations found.');\n }\n if (json) {\n throw new CLIError('Specify --org-id in JSON mode.');\n }\n const selected = await clack.select({\n message: 'Select an organization:',\n options: orgs.map((o) => ({\n value: o.id,\n label: o.name,\n })),\n });\n if (clack.isCancel(selected)) process.exit(0);\n orgId = selected as string;\n }\n\n // Save default org\n const globalConfig = getGlobalConfig();\n globalConfig.default_org_id = orgId;\n saveGlobalConfig(globalConfig);\n\n // 2. Project name\n let projectName = opts.name;\n if (!projectName) {\n if (json) throw new CLIError('--name is required in JSON mode.');\n const name = await clack.text({\n message: 'Project name:',\n validate: (v) => (v.length >= 2 ? undefined : 'Name must be at least 2 characters'),\n });\n if (clack.isCancel(name)) process.exit(0);\n projectName = name as string;\n }\n\n // 3. Select template\n let template = opts.template as string | undefined;\n if (!template) {\n if (json) {\n template = 'empty';\n } else {\n const selected = await clack.select({\n message: 'Choose a starter template:',\n options: [\n { value: 'react', label: 'Web app template with React' },\n { value: 'nextjs', label: 'Web app template with Next.js' },\n { value: 'empty', label: 'Empty project' },\n ],\n });\n if (clack.isCancel(selected)) process.exit(0);\n template = selected as string;\n }\n }\n\n // 4. Create project via Platform API\n const s = !json ? clack.spinner() : null;\n s?.start('Creating project...');\n\n const project = await createProject(orgId, projectName, opts.region, apiUrl);\n\n s?.message('Waiting for project to become active...');\n await waitForProjectActive(project.id, apiUrl);\n\n // 5. Fetch API key and link project\n const apiKey = await getProjectApiKey(project.id, apiUrl);\n const projectConfig: ProjectConfig = {\n project_id: project.id,\n project_name: project.name,\n org_id: project.organization_id,\n appkey: project.appkey,\n region: project.region,\n api_key: apiKey,\n oss_host: buildOssHost(project.appkey, project.region),\n };\n saveProjectConfig(projectConfig);\n\n s?.stop(`Project \"${project.name}\" created and linked`);\n\n // 6. Download template if selected\n if (template !== 'empty') {\n await downloadTemplate(template as Framework, projectConfig, projectName, json, apiUrl);\n }\n\n // Install InsForge agent skills\n await installSkills(json);\n\n if (json) {\n outputJson({\n success: true,\n project: { id: project.id, name: project.name, appkey: project.appkey, region: project.region },\n template,\n });\n } else {\n clack.outro('Done! Run `npm install` to get started.');\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n\nasync function downloadTemplate(\n framework: Framework,\n projectConfig: ProjectConfig,\n projectName: string,\n json: boolean,\n _apiUrl?: string,\n): Promise<void> {\n const s = !json ? clack.spinner() : null;\n s?.start('Downloading template...');\n\n try {\n // Get the anon key from the OSS backend\n const anonKey = await getAnonKey();\n if (!anonKey) {\n throw new Error('Failed to retrieve anon key from backend');\n }\n\n // Create temp directory for download\n const tempDir = tmpdir();\n const targetDir = projectName;\n const templatePath = path.join(tempDir, targetDir);\n\n // Remove existing temp directory if it exists\n try {\n await fs.rm(templatePath, { recursive: true, force: true });\n } catch {\n // Directory doesn't exist, which is fine\n }\n\n const frame = framework === 'nextjs' ? 'nextjs' : 'react';\n const command = `npx create-insforge-app ${targetDir} --frame ${frame} --base-url ${projectConfig.oss_host} --anon-key ${anonKey} --skip-install`;\n\n s?.message(`Running create-insforge-app (${frame})...`);\n\n await execAsync(command, {\n maxBuffer: 10 * 1024 * 1024,\n cwd: tempDir,\n });\n\n // Copy template files to current directory\n s?.message('Copying template files...');\n const cwd = process.cwd();\n await copyDir(templatePath, cwd);\n\n // Cleanup temp directory\n await fs.rm(templatePath, { recursive: true, force: true }).catch(() => {});\n\n s?.stop('Template files downloaded');\n } catch (err) {\n s?.stop('Template download failed');\n if (!json) {\n clack.log.warn(`Failed to download template: ${(err as Error).message}`);\n clack.log.info('You can manually set up the template later.');\n }\n }\n}\n\n\n","import type { Command } from 'commander';\nimport { getCredentials, getGlobalConfig, getProjectConfig } from '../lib/config.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson } from '../lib/output.js';\n\nexport function registerContextCommand(program: Command): void {\n program\n .command('current')\n .description('Show current CLI context (user, org, project)')\n .action(async (_opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n const creds = getCredentials();\n const globalConfig = getGlobalConfig();\n const projectConfig = getProjectConfig();\n\n if (json) {\n outputJson({\n authenticated: !!creds,\n user: creds?.user ?? null,\n default_org_id: globalConfig.default_org_id ?? null,\n project: projectConfig,\n });\n return;\n }\n\n console.log('\\n InsForge CLI Context\\n');\n\n // Auth status\n if (creds) {\n console.log(` User: ${creds.user.name} <${creds.user.email}>`);\n } else {\n console.log(' User: (not logged in)');\n }\n\n // Org\n if (globalConfig.default_org_id) {\n console.log(` Default Org: ${globalConfig.default_org_id}`);\n } else {\n console.log(' Default Org: (none)');\n }\n\n // Project\n if (projectConfig) {\n console.log('');\n console.log(` Project: ${projectConfig.project_name} (${projectConfig.project_id})`);\n console.log(` App Key: ${projectConfig.appkey}`);\n console.log(` Region: ${projectConfig.region}`);\n console.log(` OSS Host: ${projectConfig.oss_host}`);\n } else {\n console.log('\\n Project: (not linked — run `insforge projects link`)');\n }\n\n console.log('');\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { listOrganizations, listProjects } from '../lib/api/platform.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputTable } from '../lib/output.js';\n\nexport function registerListCommand(program: Command): void {\n program\n .command('list')\n .description('List all organizations and their projects')\n .action(async (_opts, cmd) => {\n const { json, apiUrl } = getRootOpts(cmd);\n try {\n requireAuth();\n const orgs = await listOrganizations(apiUrl);\n\n if (orgs.length === 0) {\n if (json) {\n outputJson([]);\n } else {\n console.log('No organizations found.');\n }\n return;\n }\n\n // Fetch projects for all orgs in parallel\n const orgProjects = await Promise.all(\n orgs.map(async (org) => ({\n org,\n projects: await listProjects(org.id, apiUrl),\n })),\n );\n\n if (json) {\n outputJson(\n orgProjects.map(({ org, projects }) => ({\n id: org.id,\n name: org.name,\n type: org.type ?? null,\n projects: projects.map((p) => ({\n id: p.id,\n name: p.name,\n region: p.region,\n status: p.status,\n appkey: p.appkey,\n })),\n })),\n );\n return;\n }\n\n // Human-readable: grouped table\n const rows: string[][] = [];\n for (const { org, projects } of orgProjects) {\n if (projects.length === 0) {\n rows.push([org.name, '-', '-', '-', '-']);\n } else {\n for (let i = 0; i < projects.length; i++) {\n const p = projects[i];\n rows.push([\n i === 0 ? org.name : '',\n p.name,\n p.region,\n p.status,\n p.appkey,\n ]);\n }\n }\n }\n\n outputTable(['Organization', 'Project', 'Region', 'Status', 'AppKey'], rows);\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as path from 'node:path';\nimport * as fs from 'node:fs/promises';\nimport * as clack from '@clack/prompts';\nimport archiver from 'archiver';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\nimport type { CreateDeploymentResponse, StartDeploymentRequest, SiteDeployment } from '../../types.js';\n\nconst POLL_INTERVAL_MS = 5_000;\nconst POLL_TIMEOUT_MS = 120_000;\n\nconst EXCLUDE_PATTERNS = [\n 'node_modules',\n '.git',\n '.next',\n '.env',\n '.env.local',\n 'dist',\n 'build',\n '.DS_Store',\n '.insforge',\n];\n\nfunction shouldExclude(name: string): boolean {\n const normalized = name.replace(/\\\\/g, '/');\n for (const pattern of EXCLUDE_PATTERNS) {\n if (\n normalized === pattern ||\n normalized.startsWith(pattern + '/') ||\n normalized.endsWith('/' + pattern) ||\n normalized.includes('/' + pattern + '/')\n ) {\n return true;\n }\n }\n if (normalized.endsWith('.log')) return true;\n return false;\n}\n\nasync function createZipBuffer(sourceDir: string): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n const archive = archiver('zip', { zlib: { level: 9 } });\n const chunks: Buffer[] = [];\n\n archive.on('data', (chunk: Buffer) => chunks.push(chunk));\n archive.on('end', () => resolve(Buffer.concat(chunks)));\n archive.on('error', (err: Error) => reject(err));\n\n archive.directory(sourceDir, false, (entry) => {\n if (shouldExclude(entry.name)) return false;\n return entry;\n });\n\n void archive.finalize();\n });\n}\n\nexport function registerDeploymentsDeployCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('deploy [directory]')\n .description('Deploy a frontend project to Vercel')\n .option('--env <vars>', 'Environment variables as JSON (e.g. \\'{\"KEY\":\"value\"}\\')')\n .option('--meta <meta>', 'Deployment metadata as JSON')\n .action(async (directory: string | undefined, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n const config = getProjectConfig();\n if (!config) throw new ProjectNotLinkedError();\n\n // Resolve source directory\n const sourceDir = path.resolve(directory ?? '.');\n const stats = await fs.stat(sourceDir).catch(() => null);\n if (!stats?.isDirectory()) {\n throw new CLIError(`\"${sourceDir}\" is not a valid directory.`);\n }\n\n const s = !json ? clack.spinner() : null;\n\n // Step 1: Create deployment to get presigned upload URL\n s?.start('Creating deployment...');\n const createRes = await ossFetch('/api/deployments', { method: 'POST' });\n const { id: deploymentId, uploadUrl, uploadFields } =\n (await createRes.json()) as CreateDeploymentResponse;\n\n // Step 2: Create zip\n s?.message('Compressing source files...');\n const zipBuffer = await createZipBuffer(sourceDir);\n\n // Step 3: Upload zip to presigned URL\n s?.message('Uploading...');\n const formData = new FormData();\n for (const [key, value] of Object.entries(uploadFields)) {\n formData.append(key, value);\n }\n formData.append(\n 'file',\n new Blob([zipBuffer], { type: 'application/zip' }),\n 'deployment.zip',\n );\n\n const uploadRes = await fetch(uploadUrl, { method: 'POST', body: formData });\n if (!uploadRes.ok) {\n const uploadErr = await uploadRes.text();\n throw new CLIError(`Failed to upload: ${uploadErr}`);\n }\n\n // Step 4: Start the deployment\n s?.message('Starting deployment...');\n const startBody: StartDeploymentRequest = {};\n if (opts.env) {\n try {\n const parsed = JSON.parse(opts.env) as Record<string, string>;\n // Convert {\"KEY\":\"value\"} object to [{key,value}] array format\n if (Array.isArray(parsed)) {\n startBody.envVars = parsed;\n } else {\n startBody.envVars = Object.entries(parsed).map(([key, value]) => ({ key, value }));\n }\n } catch { throw new CLIError('Invalid --env JSON.'); }\n }\n if (opts.meta) {\n try { startBody.meta = JSON.parse(opts.meta); } catch { throw new CLIError('Invalid --meta JSON.'); }\n }\n\n const startRes = await ossFetch(`/api/deployments/${deploymentId}/start`, {\n method: 'POST',\n body: JSON.stringify(startBody),\n });\n await startRes.json();\n\n // Step 5: Poll for deployment status\n s?.message('Building and deploying...');\n const startTime = Date.now();\n let deployment: SiteDeployment | null = null;\n\n while (Date.now() - startTime < POLL_TIMEOUT_MS) {\n await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\n try {\n const statusRes = await ossFetch(`/api/deployments/${deploymentId}`);\n deployment = (await statusRes.json()) as SiteDeployment;\n\n if (deployment.status === 'ready' || deployment.status === 'READY') {\n break;\n }\n if (deployment.status === 'error' || deployment.status === 'ERROR' || deployment.status === 'canceled') {\n s?.stop('Deployment failed');\n throw new CLIError(deployment.error ?? `Deployment failed with status: ${deployment.status}`);\n }\n\n const elapsed = Math.round((Date.now() - startTime) / 1000);\n s?.message(`Building and deploying... (${elapsed}s, status: ${deployment.status})`);\n } catch (err) {\n if (err instanceof CLIError) throw err;\n // Ignore transient fetch errors during polling\n }\n }\n\n const isReady = deployment?.status === 'ready' || deployment?.status === 'READY';\n\n if (isReady) {\n s?.stop('Deployment complete');\n if (json) {\n outputJson(deployment);\n } else {\n const liveUrl = deployment?.deploymentUrl ?? deployment?.url;\n if (liveUrl) {\n clack.log.success(`Live at: ${liveUrl}`);\n }\n clack.log.info(`Deployment ID: ${deploymentId}`);\n }\n } else {\n s?.stop('Deployment is still building');\n if (json) {\n outputJson({ id: deploymentId, status: deployment?.status ?? 'building', timedOut: true });\n } else {\n clack.log.info(`Deployment ID: ${deploymentId}`);\n clack.log.warn('Deployment did not finish within 2 minutes.');\n clack.log.info(`Check status with: insforge deployments status ${deploymentId}`);\n }\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\n\nexport function registerDeploymentsListCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('list')\n .description('List all deployments')\n .option('--limit <n>', 'Limit number of results', '20')\n .option('--offset <n>', 'Offset for pagination', '0')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n const res = await ossFetch(`/api/deployments?limit=${opts.limit}&offset=${opts.offset}`);\n const raw = await res.json() as unknown;\n\n // API may return array directly or { data: [...] }\n let deployments: Record<string, unknown>[];\n if (Array.isArray(raw)) {\n deployments = raw as Record<string, unknown>[];\n } else if (raw && typeof raw === 'object' && 'data' in raw && Array.isArray((raw as Record<string, unknown>).data)) {\n deployments = (raw as Record<string, unknown>).data as Record<string, unknown>[];\n } else {\n deployments = [];\n }\n\n if (json) {\n outputJson(raw);\n } else {\n if (!deployments.length) {\n console.log('No deployments found.');\n return;\n }\n outputTable(\n ['ID', 'Status', 'Provider', 'URL', 'Created'],\n deployments.map((d) => [\n String(d.id ?? '-'),\n String(d.status ?? '-'),\n String(d.provider ?? '-'),\n String(d.deploymentUrl ?? d.url ?? '-'),\n d.createdAt ?? d.created_at ? new Date(String(d.createdAt ?? d.created_at)).toLocaleString() : '-',\n ]),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\nimport type { SiteDeployment } from '../../types.js';\n\nexport function registerDeploymentsStatusCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('status <id>')\n .description('Get deployment details and sync status from Vercel')\n .option('--sync', 'Sync status from Vercel before showing')\n .action(async (id: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n // Optionally sync status from Vercel first\n if (opts.sync) {\n await ossFetch(`/api/deployments/${id}/sync`, { method: 'POST' });\n }\n\n const res = await ossFetch(`/api/deployments/${id}`);\n const d = (await res.json()) as SiteDeployment;\n\n if (json) {\n outputJson(d);\n } else {\n outputTable(\n ['Field', 'Value'],\n [\n ['ID', d.id],\n ['Status', d.status],\n ['Provider', d.provider ?? '-'],\n ['Provider ID', d.providerDeploymentId ?? '-'],\n ['URL', d.deploymentUrl ?? d.url ?? '-'],\n ['Created', new Date(d.createdAt).toLocaleString()],\n ['Updated', new Date(d.updatedAt).toLocaleString()],\n ...(d.error ? [['Error', d.error]] : []),\n ],\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { getProjectConfig } from '../../lib/config.js';\nimport { handleError, getRootOpts, ProjectNotLinkedError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerDeploymentsCancelCommand(deploymentsCmd: Command): void {\n deploymentsCmd\n .command('cancel <id>')\n .description('Cancel a deployment')\n .action(async (id: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n requireAuth();\n if (!getProjectConfig()) throw new ProjectNotLinkedError();\n\n if (!yes && !json) {\n const confirmed = await clack.confirm({\n message: `Cancel deployment ${id}?`,\n });\n if (clack.isCancel(confirmed) || !confirmed) process.exit(0);\n }\n\n const res = await ossFetch(`/api/deployments/${id}/cancel`, { method: 'POST' });\n const result = await res.json();\n\n if (json) {\n outputJson(result);\n } else {\n outputSuccess(`Deployment ${id} cancelled.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../lib/api/oss.js';\nimport { requireAuth } from '../lib/credentials.js';\nimport { handleError, getRootOpts } from '../lib/errors.js';\nimport { outputJson, outputTable } from '../lib/output.js';\n\nconst FEATURES = ['db', 'storage', 'functions', 'auth', 'ai', 'realtime'] as const;\nconst LANGUAGES = ['typescript', 'swift', 'kotlin', 'rest-api'] as const;\n\nexport function registerDocsCommand(program: Command): void {\n program\n .command('docs [feature] [language]')\n .description('Browse InsForge SDK documentation')\n .addHelpText('after', `\nFeatures: ${FEATURES.join(', ')}\nLanguages: ${LANGUAGES.join(', ')}\n\nExamples:\n insforge docs List all available docs\n insforge docs instructions Show setup instructions\n insforge docs db typescript Show TypeScript database SDK docs\n insforge docs auth swift Show Swift auth SDK docs\n insforge docs storage rest-api Show REST API storage docs`)\n .action(async (feature: string | undefined, language: string | undefined, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n // No args → list all docs\n if (!feature) {\n await listDocs(json);\n return;\n }\n\n // Single arg → legacy doc type (e.g. \"instructions\")\n if (!language) {\n await fetchDoc(`/api/docs/${encodeURIComponent(feature)}`, feature, json);\n return;\n }\n\n // Two args → feature + language\n await fetchDoc(\n `/api/docs/${encodeURIComponent(feature)}/${encodeURIComponent(language)}`,\n `${feature}/${language}`,\n json,\n );\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n\nasync function listDocs(json: boolean): Promise<void> {\n const res = await ossFetch('/api/docs');\n const data = await res.json() as { data?: DocEntry[] } | DocEntry[];\n const docs = Array.isArray(data) ? data : (data.data ?? []);\n\n if (json) {\n outputJson(docs);\n } else {\n if (!docs.length) {\n console.log('No documentation available.');\n return;\n }\n outputTable(\n ['Type', 'Endpoint'],\n docs.map((d) => [String(d.type ?? '-'), String(d.endpoint ?? '-')]),\n );\n }\n}\n\nasync function fetchDoc(path: string, label: string, json: boolean): Promise<void> {\n const res = await ossFetch(path);\n const data = await res.json() as { data?: { type?: string; content?: string }; type?: string; content?: string };\n const doc = data.data ?? data;\n\n if (json) {\n outputJson(doc);\n } else {\n if (doc.content) {\n console.log(doc.content);\n } else {\n console.log(`No content returned for \"${label}\".`);\n }\n }\n}\n\ninterface DocEntry {\n type?: string;\n filename?: string;\n endpoint?: string;\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputTable } from '../../lib/output.js';\n\nexport function registerSecretsListCommand(secretsCmd: Command): void {\n secretsCmd\n .command('list')\n .description('List secrets (metadata only, values are hidden)')\n .option('--all', 'Include inactive (deleted) secrets')\n .action(async (opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch('/api/secrets');\n const data = await res.json() as { secrets: Record<string, unknown>[] };\n let secrets = data.secrets ?? [];\n\n if (!opts.all) {\n secrets = secrets.filter((s) => s.isActive !== false);\n }\n\n if (json) {\n outputJson(opts.all ? data : { secrets });\n } else {\n if (!secrets.length) {\n console.log('No secrets found.');\n return;\n }\n const headers = opts.all\n ? ['Key', 'Active', 'Reserved', 'Expires', 'Updated']\n : ['Key', 'Reserved', 'Expires', 'Updated'];\n outputTable(\n headers,\n secrets.map((s) => {\n const row = [\n String(s.key ?? '-'),\n ...(opts.all ? [s.isActive ? 'Yes' : 'No'] : []),\n s.isReserved ? 'Yes' : 'No',\n s.expiresAt ? new Date(String(s.expiresAt)).toLocaleString() : '-',\n s.updatedAt ? new Date(String(s.updatedAt)).toLocaleString() : '-',\n ];\n return row;\n }),\n );\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson } from '../../lib/output.js';\n\nexport function registerSecretsGetCommand(secretsCmd: Command): void {\n secretsCmd\n .command('get <key>')\n .description('Get the decrypted value of a secret')\n .action(async (key: string, _opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`);\n const data = await res.json() as { key: string; value: string };\n\n if (json) {\n outputJson(data);\n } else {\n console.log(`${data.key} = ${data.value}`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerSecretsAddCommand(secretsCmd: Command): void {\n secretsCmd\n .command('add <key> <value>')\n .description('Create a new secret')\n .option('--reserved', 'Mark secret as protected from deletion')\n .option('--expires <date>', 'Expiration date (ISO 8601 format)')\n .action(async (key: string, value: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const body: Record<string, unknown> = { key, value };\n if (opts.reserved) body.isReserved = true;\n if (opts.expires) body.expiresAt = opts.expires;\n\n const res = await ossFetch('/api/secrets', {\n method: 'POST',\n body: JSON.stringify(body),\n });\n const data = await res.json() as { success: boolean; message: string; id: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} created.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts, CLIError } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerSecretsUpdateCommand(secretsCmd: Command): void {\n secretsCmd\n .command('update <key>')\n .description('Update an existing secret')\n .option('--value <value>', 'New secret value')\n .option('--active <bool>', 'Set active status (true/false)')\n .option('--reserved <bool>', 'Set reserved status (true/false)')\n .option('--expires <date>', 'Expiration date (ISO 8601, or \"null\" to remove)')\n .action(async (key: string, opts, cmd) => {\n const { json } = getRootOpts(cmd);\n try {\n requireAuth();\n\n const body: Record<string, unknown> = {};\n if (opts.value !== undefined) body.value = opts.value;\n if (opts.active !== undefined) body.isActive = opts.active === 'true';\n if (opts.reserved !== undefined) body.isReserved = opts.reserved === 'true';\n if (opts.expires !== undefined) body.expiresAt = opts.expires === 'null' ? null : opts.expires;\n\n if (Object.keys(body).length === 0) {\n throw new CLIError('Provide at least one option to update (--value, --active, --reserved, --expires).');\n }\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`, {\n method: 'PUT',\n body: JSON.stringify(body),\n });\n const data = await res.json() as { success: boolean; message: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} updated.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n","import type { Command } from 'commander';\nimport * as clack from '@clack/prompts';\nimport { ossFetch } from '../../lib/api/oss.js';\nimport { requireAuth } from '../../lib/credentials.js';\nimport { handleError, getRootOpts } from '../../lib/errors.js';\nimport { outputJson, outputSuccess } from '../../lib/output.js';\n\nexport function registerSecretsDeleteCommand(secretsCmd: Command): void {\n secretsCmd\n .command('delete <key>')\n .description('Delete a secret')\n .action(async (key: string, _opts, cmd) => {\n const { json, yes } = getRootOpts(cmd);\n try {\n requireAuth();\n\n if (!yes && !json) {\n const confirm = await clack.confirm({\n message: `Delete secret \"${key}\"? This cannot be undone.`,\n });\n if (!confirm || clack.isCancel(confirm)) {\n process.exit(0);\n }\n }\n\n const res = await ossFetch(`/api/secrets/${encodeURIComponent(key)}`, {\n method: 'DELETE',\n });\n const data = await res.json() as { success: boolean; message: string };\n\n if (json) {\n outputJson(data);\n } else {\n outputSuccess(data.message ?? `Secret ${key} deleted.`);\n }\n } catch (err) {\n handleError(err, json);\n }\n });\n}\n"],"mappings":"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","names":["existsSync","mkdirSync","readFileSync","join","resolve","path","password","program","password","program","program","orgsCmd","clack","projectsCmd","clack","clack","program","path","dbCmd","dbCmd","dbCmd","str","extractArray","dbCmd","str","extractArray","dbCmd","str","extractArray","dbCmd","dbCmd","writeFileSync","dbCmd","writeFileSync","readFileSync","dbCmd","readFileSync","recordsCmd","path","recordsCmd","recordsCmd","recordsCmd","functionsCmd","readFileSync","existsSync","join","functionsCmd","join","existsSync","readFileSync","functionsCmd","text","functionsCmd","storageCmd","readFileSync","existsSync","basename","storageCmd","existsSync","readFileSync","basename","writeFileSync","join","basename","storageCmd","join","basename","writeFileSync","storageCmd","clack","storageCmd","confirm","storageCmd","exec","promisify","clack","execAsync","promisify","exec","buildOssHost","program","program","program","path","fs","clack","resolve","deploymentsCmd","deploymentsCmd","deploymentsCmd","clack","deploymentsCmd","program","path","secretsCmd","secretsCmd","secretsCmd","secretsCmd","clack","secretsCmd","confirm","readFileSync","join","existsSync","mkdirSync"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@insforge/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "InsForge CLI - Command line tool for InsForge platform",
5
5
  "type": "module",
6
6
  "bin": {
package/bin/insforge.js DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- import '../dist/index.js';