gigadrive 1.1.2 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1459 -640
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1465 -638
- package/dist/index.mjs.map +1 -1
- package/package.json +15 -11
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commands/build/index.ts","../src/util/pm.ts","../../build-utils/src/exec.ts","../src/commands/debug/config/index.ts","../src/util/log.ts","../src/commands/debug/index.ts","../src/commands/platform/deploy/index.ts","../src/util/zip.ts","../src/commands/platform/index.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { build } from './commands/build';\nimport { debug } from './commands/debug';\nimport { platform } from './commands/platform';\nimport { error, log, setVerbose } from './util/log';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nlet { isTTY } = process.stdout;\n//process.stdin.resume();\n\nconst main = async () => {\n if (process.env.FORCE_TTY === '1') {\n isTTY = true;\n process.stdout.isTTY = true;\n process.stdin.isTTY = true;\n }\n\n let exitCode = 0;\n\n const program = new Command();\n\n program.option('-v, --verbose', 'Enable verbose logging', false);\n\n program.hook('preSubcommand', (thisCommand) => {\n setVerbose((thisCommand.opts().verbose as boolean) === true);\n\n if (thisCommand.opts().verbose) {\n log('Using verbose mode');\n }\n });\n\n program.hook('preAction', (thisCommand) => {\n setVerbose((thisCommand.opts().verbose as boolean) === true);\n });\n\n // register commands\n platform(program);\n debug(program);\n build(program);\n\n try {\n await program.parseAsync(process.argv);\n } catch (err) {\n error(err as string | number | boolean | object);\n exitCode = 1;\n }\n\n return exitCode;\n};\n\nconst handleRejection = (err: unknown) => {\n if (err) {\n if (err instanceof Error) {\n handleUnexpected(err);\n } else {\n console.error(`An unexpected rejection occurred\\n ${JSON.stringify(err)}`);\n }\n } else {\n console.error('An unexpected empty rejection occurred');\n }\n\n process.exit(1);\n};\n\nconst handleUnexpected = (error: Error) => {\n const { message } = error;\n\n console.error(`An unexpected error occurred\\n ${message}`);\n\n process.exit(1);\n};\n\nprocess.on('unhandledRejection', handleRejection);\nprocess.on('uncaughtException', handleUnexpected);\n\nprocess.on('exit', () => {\n const terminal = process.stderr.isTTY ? process.stderr : process.stdout.isTTY ? process.stdout : undefined;\n terminal?.write('\\u001B[?25h');\n});\n\nmain()\n .then((exitCode) => {\n process.exitCode = exitCode;\n })\n .catch(handleUnexpected);\n","import { exec } from '@gigadrive/build-utils';\nimport type { Command } from 'commander';\nimport fs from 'fs';\nimport path from 'path';\nimport { buildCommand, getPackageManager, installCommand } from '../../util/pm';\n\nexport const build = (parent: Command) => {\n parent\n .command('build')\n .description('Build the current project')\n .action(async () => {\n // Set relevant environment variables\n const env = {\n ...process.env,\n NODE_ENV: 'production',\n NEBULA: '1',\n VERCEL: '1', // Vercel compatibility\n NOW_BUILDER: '1',\n };\n\n const cwd = process.cwd();\n\n const packageJsonPath = path.join(cwd, 'package.json');\n\n if (!fs.existsSync(packageJsonPath)) {\n console.log('No package.json found');\n return;\n }\n\n // Read package.json and check for build scripts\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n\n const buildScript = packageJson.scripts?.build;\n\n // If build script is not defined, return null\n if (!buildScript) {\n console.log('No build script found in package.json');\n return;\n }\n\n const packageManager = await getPackageManager({ cwd });\n\n if (!packageManager) {\n console.log('No package manager found');\n return;\n }\n\n await exec({\n command: installCommand(packageManager),\n cwd,\n env,\n onOutput: (chunk) => {\n console.log(chunk);\n },\n });\n\n await exec({\n command: buildCommand(packageManager),\n cwd,\n env,\n onOutput: (chunk) => {\n console.log(chunk);\n },\n });\n });\n};\n","import fs from 'fs';\nimport path from 'path';\nimport { exec } from '../../../build-utils/src/exec';\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';\n\n/**\n * Detects the package manager to use for a specific directory\n */\nexport const getPackageManager = async ({ cwd }: { cwd: string }): Promise<PackageManager | null> => {\n // check if package.json exists\n const packageJsonPath = path.join(cwd, 'package.json');\n\n // If package.json does not exist, return null\n if (!fs.existsSync(packageJsonPath)) {\n return null;\n }\n\n // Check if yarn lock exists\n if (fs.existsSync(path.join(cwd, 'yarn.lock'))) {\n return 'yarn';\n }\n\n // Check if pnpm lock exists\n if (fs.existsSync(path.join(cwd, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n\n // Check if bun lock exists\n if (fs.existsSync(path.join(cwd, 'bun.lockb'))) {\n return 'bun';\n }\n\n // Check if pnpm lock exists\n if (fs.existsSync(path.join(cwd, 'package-lock.json'))) {\n return 'npm';\n }\n\n // Check if bun is installed\n try {\n await exec({ command: 'bun --version', cwd });\n return 'bun';\n } catch {\n // If bun is not installed, return npm\n return 'npm';\n }\n};\n\nexport const installCommand = (pm: PackageManager) => {\n return (\n {\n bun: 'bun install',\n npm: 'npm install',\n pnpm: 'pnpm install',\n yarn: 'yarn install',\n }[pm] || 'npm install'\n );\n};\n\nexport const buildCommand = (pm: PackageManager) => {\n return (\n {\n bun: 'bun run build',\n npm: 'npm run build',\n pnpm: 'pnpm build',\n yarn: 'yarn build',\n }[pm] || 'npm run build'\n );\n};\n","import { spawn } from 'child_process';\n\ntype CommandInput = string | { command: string; args?: string[] };\n\ninterface ExecOptions {\n /**\n * The command to execute.\n */\n command: CommandInput;\n\n /**\n * The working directory for the command.\n */\n cwd?: string;\n\n /**\n * Environment variables for the command.\n * Does not include the current process's environment variables by default.\n */\n env?: Record<string, string>;\n\n /**\n * Callback for handling output from the command (stdout).\n */\n onOutput?: (data: string) => void;\n\n /**\n * Callback for handling errors from the command (stderr).\n */\n onError?: (data: string) => void;\n}\n\n/**\n * Executes a command asynchronously in a child process\n * @param options Configuration options for executing the process\n * @returns Promise that resolves when the process completes\n */\nexport async function exec({\n command,\n cwd = process.cwd(),\n env,\n onOutput = (data: string) => console.log(data),\n onError = (data: string) => console.error(data),\n}: ExecOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n let spawnCommand: string;\n let spawnArgs: string[] = [];\n\n if (typeof command === 'string') {\n // For string input, first argument is the command, rest are args\n const parts = command.split(' ');\n spawnCommand = parts[0];\n spawnArgs = parts.slice(1);\n } else {\n // For object input, use command and args properties\n spawnCommand = command.command;\n spawnArgs = command.args || [];\n }\n\n const childProcess = spawn(spawnCommand, spawnArgs, {\n cwd,\n shell: true,\n env,\n });\n\n childProcess.stdout.on('data', (data) => {\n onOutput(data.toString().trim());\n });\n\n childProcess.stderr.on('data', (data) => {\n onError(data.toString().trim());\n });\n\n childProcess.on('error', (error) => {\n reject(new Error(`Failed to start process: ${error.message}`));\n });\n\n childProcess.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`Process exited with code ${code}`));\n }\n });\n });\n}\n","import { findConfig, parseConfig } from '@gigadrive/network-config';\nimport { Command } from 'commander';\nimport { log } from 'console';\nimport { debug } from '../../../util/log';\n\nexport const config = (parent: Command) => {\n parent\n .command('config')\n .description('Provide debug info about the project configuration in the current directory')\n .action(async () => {\n const configPath = findConfig(process.cwd());\n\n if (!configPath) {\n debug('No config file found');\n throw new Error('The current project folder does not have a valid config file.');\n }\n\n const config = await parseConfig(configPath, process.cwd());\n\n log(`Config file found at: ${configPath}`);\n log(JSON.stringify(config, null, 2));\n });\n};\n","import { createConsola } from 'consola';\n\nlet verbose: boolean = false;\n\n// Create a custom consola instance that can be updated with verbose settings\nconst consola = createConsola({\n level: verbose ? 4 : 3, // 4 includes debug messages, 3 is the default (info and above)\n formatOptions: {\n colors: true,\n },\n});\n\n// Update the consola instance when verbose setting changes\nconst updateConsola = () => {\n consola.level = verbose ? 4 : 3;\n};\n\nexport const setVerbose = (value: boolean) => {\n verbose = value;\n updateConsola();\n};\n\nexport const isVerbose = () => verbose;\n\nexport const log = (message: string | number | boolean | object) => {\n consola.info(message);\n};\n\nexport const error = (message: string | number | boolean | object) => {\n consola.error(message);\n};\n\nexport const success = (message: string | number | boolean | object) => {\n consola.success(message);\n};\n\nexport const warn = (message: string | number | boolean | object) => {\n consola.warn(message);\n};\n\nexport const debug = (\n message?: string | number | boolean | object,\n ...optionalParams: (string | number | boolean | object)[]\n) => {\n if (!verbose) {\n return;\n }\n\n consola.debug('[DEBUG]', message, ...optionalParams);\n};\n\nexport const spinner = (message: string | number | boolean | object) => {\n //render(<Spinner label={message} />);\n log(message);\n};\n","import type { Command } from 'commander';\nimport { config } from './config';\n\nexport const debug = (program: Command) => {\n const debug = program.command('debug').description('Provides various debugging utilities');\n\n // register subcommands\n config(debug);\n};\n","import { formatFileSize, objectToQueryString } from '@gigadrive/commons';\nimport type { NormalizedConfig } from '@gigadrive/network-config';\nimport { findConfig, parseConfig } from '@gigadrive/network-config';\nimport type { Command } from 'commander';\nimport fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport { debug, error, log, spinner, success, warn } from '../../../util/log';\nimport { createZipArchive } from '../../../util/zip';\n\nexport const deploy = (parent: Command) => {\n parent\n .command('deploy')\n .description('Deploy the current project')\n .action(async () => {\n debug('Starting deploy command');\n const configPath = findConfig(process.cwd());\n\n if (!configPath) {\n debug('No config file found');\n throw new Error('The current project folder does not have a valid config file.');\n }\n\n debug(`Found config at: ${configPath}`);\n const config = await parseConfig(configPath, process.cwd());\n debug('Parsed config', config);\n\n if (config.warnings.length > 0) {\n debug(`Found ${config.warnings.length} warnings in config`);\n config.warnings.forEach((message) => {\n warn(message);\n });\n }\n\n if (config.errors.length > 0) {\n debug(`Found ${config.errors.length} errors in config`);\n config.errors.forEach((message) => {\n error(message);\n });\n\n throw new Error('The current project folder does not have a valid config file.');\n }\n\n debug('Creating deployment');\n const deploymentId = await createDeployment({\n applicationId: 'test', // TODO\n });\n\n debug(`Deployment ID: ${deploymentId}`);\n\n debug('Starting deployment process');\n await handleDeployment(deploymentId, config);\n });\n};\n\nconst handleDeployment = async (deploymentId: string, config: NormalizedConfig) => {\n debug('Deployment process initialized');\n let status: DeploymentStatus = 'PENDING';\n const logs: DeploymentLog[] = [];\n\n // Log deployment ID\n addLog('Deployment ID: ' + deploymentId, 'INFO', logs);\n\n // Start upload\n try {\n debug('Starting upload process');\n await uploadArchive(deploymentId, logs, config);\n debug('Upload completed successfully');\n addLog('Upload complete.', 'INFO', logs);\n addLog('The deployment pipeline is now being provisioned. This may take a few seconds.', 'INFO', logs);\n } catch (err) {\n debug(`Upload failed with error: ${(err as Error).message}`);\n addLog(`Upload failed: ${(err as Error).message}`, 'ERROR', logs);\n status = 'FAILED';\n error('The deployment failed. Please check the logs for more information.');\n process.exit(1);\n }\n\n // Start status polling\n const statusInterval = setInterval(() => {\n void (async () => {\n try {\n debug(`Fetching deployment status for ${deploymentId}`);\n const newStatus = await getDeploymentStatus(deploymentId);\n debug(`Current status: ${status}, New status: ${newStatus}`);\n\n if (newStatus === 'ACTIVE' || newStatus === 'FAILED') {\n debug(`Final status reached: ${newStatus}, clearing interval`);\n clearInterval(statusInterval);\n clearInterval(logsInterval);\n\n if (newStatus === 'ACTIVE') {\n success(`Deployed to https://${deploymentId}.gigadrivedev.com`);\n } else {\n error('The deployment failed. Please check the logs for more information.');\n }\n\n return;\n }\n\n if (newStatus !== status) {\n debug(`Updating status from ${status} to ${newStatus}`);\n status = newStatus;\n spinner(`Status: ${status.toLowerCase().replace(/^\\w/, (c) => c.toUpperCase())}`);\n }\n } catch (err) {\n debug(`Error fetching status: ${(err as Error).message}`);\n }\n })();\n }, 1000);\n\n // Start logs polling\n const logsInterval = setInterval(() => {\n void (async () => {\n try {\n debug(`Fetching logs for ${deploymentId}, current log count: ${logs.length}`);\n const newLogs = await getLogs(deploymentId, {\n offset: logs.length,\n limit: 100,\n 'createdAt[gt]': logs[logs.length - 1]?.createdAt,\n });\n\n debug(`Fetched ${newLogs.items.length} new logs`);\n\n // Display new logs\n for (const logEntry of newLogs.items) {\n logs.push(logEntry);\n\n if (logEntry.type === 'ERROR') {\n error(logEntry.message);\n } else if (logEntry.type === 'WARN') {\n warn(logEntry.message);\n } else {\n log(logEntry.message);\n }\n }\n } catch (err) {\n debug(`Error fetching logs: ${(err as Error).message}`);\n }\n })();\n }, 1000);\n\n // Initial status display\n spinner(`Status: ${status.toLowerCase().replace(/^\\w/, (c) => c.toUpperCase())}`);\n};\n\nconst addLog = (message: string, type: 'INFO' | 'ERROR' | 'WARN', logs: DeploymentLog[]) => {\n debug(`Adding log: [${type}] ${message}`);\n logs.push({\n id: String(logs.length),\n message,\n type,\n createdAt: new Date().toISOString(),\n });\n\n if (type === 'ERROR') {\n error(message);\n } else if (type === 'WARN') {\n warn(message);\n } else {\n log(message);\n }\n};\n\nconst uploadArchive = async (deploymentId: string, logs: DeploymentLog[], config: NormalizedConfig) => {\n debug('Starting uploadArchive');\n addLog('Creating archive...', 'INFO', logs);\n\n const archivePath = path.join(process.env.TEMP || os.tmpdir(), `project-${Date.now()}.zip`);\n debug(`Archive path: ${archivePath}`);\n\n if (fs.existsSync(archivePath)) {\n debug(`Archive already exists, removing: ${archivePath}`);\n fs.unlinkSync(archivePath);\n }\n\n debug('Creating zip archive');\n\n await createZipArchive(config.userArchive?.rootOverwrite || process.cwd(), archivePath, {\n whitelist: config.userArchive?.fileWhitelist,\n useIgnoreFiles: false,\n useManagedIgnore: false,\n });\n\n const fileStats = fs.statSync(archivePath);\n const fileSize = fileStats.size;\n debug(`Archive created, size: ${fileSize} bytes (${formatFileSize(fileSize)})`);\n\n addLog(`Archive created (${formatFileSize(fileSize)})`, 'INFO', logs);\n\n addLog('Uploading archive...', 'INFO', logs);\n\n debug(`Starting multipart upload for deployment: ${deploymentId}`);\n const uploadId = await startMultipartUpload(deploymentId);\n\n debug(`Upload ID: ${uploadId}`);\n\n debug('Uploading archive...');\n\n const fileChunkSize = 10 * 1024 * 1024; // 10 MB\n const numChunks = Math.ceil(fileSize / fileChunkSize);\n debug(`File size: ${fileSize}, chunk size: ${fileChunkSize}, number of chunks: ${numChunks}`);\n\n const promises = [];\n let start: number, end: number;\n\n for (let index = 1; index < numChunks + 1; index++) {\n start = (index - 1) * fileChunkSize;\n end = index * fileChunkSize;\n debug(`Processing chunk ${index}/${numChunks}, start: ${start}, end: ${end}`);\n\n const presignedUrl = await getPresignedUrl(deploymentId, uploadId, index);\n debug('Presigned URL for part', index, presignedUrl);\n\n const promise = new Promise<Response>((resolve, reject) => {\n void (async () => {\n try {\n debug(`Reading chunk ${index} data`);\n const readStream = fs.createReadStream(archivePath, {\n start,\n end: index < numChunks ? end - 1 : undefined,\n });\n\n const chunks: Buffer[] = [];\n readStream.on('data', (chunk: Buffer | string) => {\n chunks.push(typeof chunk === 'string' ? Buffer.from(chunk) : chunk);\n });\n\n await new Promise<void>((resolveRead) => {\n readStream.on('end', () => resolveRead());\n readStream.on('error', reject);\n });\n\n const buffer = Buffer.concat(chunks);\n\n debug(`Uploading chunk ${index} to presigned URL (${buffer.length} bytes)`);\n const response = await fetch(presignedUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/zip',\n 'Content-Length': String(buffer.length),\n },\n body: buffer,\n });\n resolve(response);\n } catch (err) {\n reject(err instanceof Error ? err : new Error(String(err)));\n }\n })();\n });\n\n promises.push(promise);\n }\n\n const finishedParts: { partNumber: number; etag: string }[] = [];\n\n try {\n debug(`Waiting for all ${promises.length} upload promises to complete`);\n const responses = await Promise.all(promises);\n debug('All upload promises completed');\n\n for (let index = 0; index < responses.length; index++) {\n const res = responses[index];\n debug(`Checking response for part ${index + 1}, status: ${res.status}`);\n\n if (!res.ok) {\n debug(`Failed to upload part ${index + 1}: ${res.statusText} ${await res.text()}`);\n throw new Error(`Failed to upload part ${index + 1}: ${res.statusText}`);\n }\n\n const etag = res.headers.get('ETag');\n if (!etag) {\n debug(`Failed to get ETag for part ${index + 1}`);\n throw new Error(`Failed to get ETag for part ${index + 1}`);\n }\n\n debug(`Part ${index + 1} uploaded successfully, ETag: ${etag}`);\n finishedParts.push({\n partNumber: index + 1,\n etag: etag,\n });\n }\n\n debug(`Completing upload with ${finishedParts.length} parts`);\n await completeUpload(deploymentId, uploadId, finishedParts);\n debug('Upload completed successfully');\n } catch (err) {\n const error = err as Error;\n debug(`Upload error: ${error.message}`);\n addLog(`Upload error: ${error.message}`, 'ERROR', logs);\n throw error;\n }\n};\n\nconst createDeployment = async ({ applicationId }: { applicationId: string }) => {\n debug(`Creating deployment for application: ${applicationId}`);\n const res = await fetch(`http://localhost:3000/${applicationId}/deployments`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({}),\n duplex: 'half',\n });\n\n if (!res.ok) {\n const errorText = await res.text();\n debug(`Failed to create deployment: ${errorText}`);\n throw new Error('Failed to create deployment: ' + errorText);\n }\n\n const deployment = (await res.json()) as { id: string };\n debug(`Deployment created with ID: ${deployment.id}`);\n\n return deployment.id;\n};\n\nconst startMultipartUpload = async (deploymentId: string) => {\n debug(`Starting multipart upload for deployment: ${deploymentId}`);\n const res = await fetch(`http://localhost:3000/deployments/${deploymentId}/pre-signed-url/start`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!res.ok) {\n const errorText = await res.text();\n debug(`Failed to start multipart upload: ${errorText}`);\n throw new Error('Failed to start multipart upload: ' + errorText);\n }\n\n const upload = (await res.json()) as { uploadId: string };\n debug(`Multipart upload started with ID: ${upload.uploadId}`);\n\n return upload.uploadId;\n};\n\nconst getPresignedUrl = async (deploymentId: string, uploadId: string, partNumber: number) => {\n debug(`Getting presigned URL for deployment: ${deploymentId}, upload: ${uploadId}, part: ${partNumber}`);\n const res = await fetch(\n `http://localhost:3000/deployments/${deploymentId}/pre-signed-url/part?uploadId=${uploadId}&partNumber=${partNumber}`,\n {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n }\n );\n\n if (!res.ok) {\n const errorText = await res.text();\n debug(`Failed to get pre-signed URL: ${errorText}`);\n throw new Error('Failed to get pre-signed URL: ' + errorText);\n }\n\n const upload = (await res.json()) as { url: string };\n debug(`Got presigned URL for part ${partNumber}`);\n\n return upload.url;\n};\n\nconst completeUpload = async (\n deploymentId: string,\n uploadId: string,\n parts: { partNumber: number; etag: string }[]\n) => {\n debug(`Completing upload for deployment: ${deploymentId}, upload: ${uploadId}, parts: ${parts.length}`);\n const res = await fetch(`http://localhost:3000/deployments/${deploymentId}/pre-signed-url/complete`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n uploadId,\n parts,\n }),\n duplex: 'half',\n });\n\n if (!res.ok) {\n const errorText = await res.text();\n debug(`Failed to complete upload: ${errorText}`);\n throw new Error('Failed to complete upload: ' + errorText);\n }\n\n debug('Upload completed successfully');\n};\n\nconst getDeploymentStatus = async (deploymentId: string) => {\n debug(`Getting deployment status for: ${deploymentId}`);\n const res = await fetch(`http://localhost:3000/deployments/${deploymentId}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!res.ok) {\n const errorText = await res.text();\n debug(`Failed to get deployment status: ${errorText}`);\n throw new Error('Failed to get deployment status: ' + errorText);\n }\n\n const deployment = (await res.json()) as { status: DeploymentStatus };\n debug(`Deployment status: ${deployment.status}`);\n\n return deployment.status;\n};\n\nconst getLogs = async (\n deploymentId: string,\n options?: {\n offset: number;\n limit: number;\n 'createdAt[gt]'?: string;\n }\n) => {\n debug(`Getting logs for deployment: ${deploymentId}, options:`, options ?? 'No options');\n const res = await fetch(`http://localhost:3000/deployments/${deploymentId}/logs${objectToQueryString(options)}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n if (!res.ok) {\n const errorText = await res.text();\n debug(`Failed to get logs: ${errorText}`);\n throw new Error('Failed to get logs: ' + errorText);\n }\n\n const logs = (await res.json()) as {\n totalItems: number;\n limit: number;\n offset: number;\n items: DeploymentLog[];\n };\n\n debug(`Got ${logs.items.length} logs, total: ${logs.totalItems}`);\n return logs;\n};\n\ntype DeploymentStatus = 'PENDING' | 'BUILDING' | 'PROVISIONING' | 'FAILED' | 'ACTIVE' | 'SUSPENDED';\n\ntype DeploymentLog = { id: string; message: string; type: 'INFO' | 'ERROR' | 'WARN'; createdAt: string };\n","import { getFilesForPattern } from '@gigadrive/build-utils';\nimport archiver from 'archiver';\nimport fs from 'fs';\nimport fsPromises from 'fs/promises';\nimport ignore, { type Ignore } from 'ignore';\nimport path from 'path';\n\nconst ignoreFileNames = [/*'.gitignore', */ '.gigadriveignore', '.vercelignore', '.dockerignore', '.nowignore'];\n\n// Function to read and parse the ignore file\nasync function readIgnoreFile(ignorePath: string) {\n try {\n await fsPromises.access(ignorePath);\n const content = await fsPromises.readFile(ignorePath, 'utf8');\n return content.split('\\n').filter((line: string) => line.trim() !== '');\n } catch {\n return [];\n }\n}\n\n// Collect ignore patterns from the given directory (including the root)\nasync function collectIgnorePatterns(dir: string, baseDir: string, ignoreRules: Ignore) {\n const items = await fsPromises.readdir(dir);\n\n for (const item of items) {\n const fullPath = path.join(dir, item);\n const relativePath = path.relative(baseDir, fullPath);\n const stat = await fsPromises.lstat(fullPath);\n\n if (stat.isDirectory()) {\n // If the directory itself is ignored, skip it unless it has a negation rule\n if (ignoreRules.ignores(`${relativePath}/`)) {\n continue;\n }\n\n // Check if the directory contains an ignore file\n for (const ignoreFileName of ignoreFileNames) {\n const ignoreFilePath = path.join(fullPath, ignoreFileName);\n try {\n await fsPromises.access(ignoreFilePath);\n const patterns = (await readIgnoreFile(ignoreFilePath)).map((pattern: string) => {\n return pattern.startsWith('!')\n ? `!${path.join(relativePath, pattern.slice(1))}`\n : path.join(relativePath, pattern);\n });\n ignoreRules.add(patterns);\n } catch {\n // File doesn't exist, skip\n }\n }\n\n // Recurse into subdirectory\n await collectIgnorePatterns(fullPath, baseDir, ignoreRules);\n }\n }\n}\n\n// Function to initialize ignore rules including root-level ignore files\nasync function initializeIgnoreRules(baseDir: string): Promise<Ignore> {\n const ignoreRules = ignore();\n\n // Add default ignore rules\n ignoreRules.add(['.git/', '**/.DS_Store', '**/Thumbs.db']);\n\n // Process root-level ignore files\n for (const ignoreFileName of ignoreFileNames) {\n const ignoreFilePath = path.join(baseDir, ignoreFileName);\n try {\n await fsPromises.access(ignoreFilePath);\n const patterns = (await readIgnoreFile(ignoreFilePath)).map((pattern: string) => {\n return pattern.startsWith('!') ? `!${pattern.slice(1)}` : pattern;\n });\n ignoreRules.add(patterns);\n } catch {\n // File doesn't exist, skip\n }\n }\n\n // Recursively process all subdirectories to gather additional ignore patterns\n await collectIgnorePatterns(baseDir, baseDir, ignoreRules);\n\n return ignoreRules;\n}\n\n// Function to get all files and directories, excluding those in the ignore list\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nasync function getFilesToInclude(dir: string, ignoreRules: Ignore, whitelist?: string[]) {\n const filesToInclude: string[] = [];\n\n async function walkDir(currentDir: string) {\n const items = await fsPromises.readdir(currentDir);\n\n for (const item of items) {\n const fullPath = path.join(currentDir, item);\n const relativePath = path.relative(dir, fullPath);\n const stat = await fsPromises.lstat(fullPath);\n\n if (stat.isDirectory()) {\n if (ignoreRules.ignores(`${relativePath}/`)) {\n continue;\n }\n await walkDir(fullPath);\n } else {\n if (!ignoreRules.ignores(relativePath)) {\n filesToInclude.push(fullPath);\n } else if (ignoreRules.ignores(relativePath) && ignoreRules.test(relativePath).unignored) {\n // Handle whitelisted files that were previously ignored\n filesToInclude.push(fullPath);\n }\n }\n }\n }\n\n await walkDir(dir);\n return filesToInclude;\n}\n\n// Function to create the zip archive\nexport async function createZipArchive(\n inputDir: string,\n outputFile: string,\n options: {\n whitelist?: string[];\n useIgnoreFiles?: boolean;\n useManagedIgnore?: boolean;\n } = {}\n) {\n const ignoreRules = options.useIgnoreFiles !== false ? await initializeIgnoreRules(inputDir) : ignore();\n\n // Get list of files to include in the zip\n const filesToInclude = options.whitelist\n ? await Promise.all(options.whitelist.map((file) => getFilesForPattern(inputDir, file)))\n : await getFilesToInclude(inputDir, ignoreRules);\n\n // Create zip file\n const output = fs.createWriteStream(outputFile);\n const archive = archiver('zip', { zlib: { level: 9 } });\n\n return new Promise<void>((resolve, reject) => {\n output.on('close', () => resolve());\n archive.on('error', reject);\n\n archive.pipe(output);\n\n // Add files to the archive\n for (const file of filesToInclude.flat()) {\n archive.file(file, { name: path.relative(inputDir, file) });\n }\n\n void archive.finalize();\n });\n}\n","import type { Command } from 'commander';\nimport { deploy } from './deploy';\n\nexport const platform = (program: Command) => {\n const platform = program.command('platform').description('Manage the platform');\n\n // register subcommands\n deploy(platform);\n};\n"],"mappings":"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","names":["exec","fs","path","error","path","fs","exec","log","config","log","debug","findConfig","parseConfig","fs","path","fs","path","findConfig","config","parseConfig","path","fs","error","platform","debug","error"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commands/build/index.ts","../src/errors.ts","../src/services/package-manager.ts","../src/commands/debug/index.ts","../src/commands/debug/config/index.ts","../src/services/project-config.ts","../src/commands/login/index.ts","../src/services/auth.ts","../src/services/auth-storage.ts","../src/domain.ts","../src/services/oauth-config.ts","../src/commands/platform/index.ts","../src/commands/platform/deploy/index.ts","../src/services/archive.ts","../src/services/deployment-api.ts","../src/commands/whoami/index.ts"],"sourcesContent":["import { Command } from '@effect/cli';\nimport { NodeContext, NodeRuntime } from '@effect/platform-node';\nimport { NetworkConfigLive } from '@gigadrive/network-config';\nimport { Effect, Layer, LogLevel, Logger } from 'effect';\nimport { buildCommand } from './commands/build';\nimport { debugCommand } from './commands/debug';\nimport { loginCommand } from './commands/login';\nimport { platformCommand } from './commands/platform';\nimport { whoamiCommand } from './commands/whoami';\nimport { ArchiveService } from './services/archive';\nimport { AuthService } from './services/auth';\nimport { AuthStorageService } from './services/auth-storage';\nimport { DeploymentApiService } from './services/deployment-api';\nimport { OAuthConfigService } from './services/oauth-config';\nimport { PackageManagerService } from './services/package-manager';\nimport { ProjectConfigService } from './services/project-config';\n\n// ---------------------------------------------------------------------------\n// Root command with subcommands\n// ---------------------------------------------------------------------------\n\nconst gigadrive = Command.make('gigadrive', {}, () => Effect.void).pipe(\n Command.withSubcommands([loginCommand, whoamiCommand, buildCommand, debugCommand, platformCommand])\n);\n\n// ---------------------------------------------------------------------------\n// CLI application\n// ---------------------------------------------------------------------------\n\nconst cli = Command.run(gigadrive, {\n name: 'Gigadrive CLI',\n version: '2.0.0',\n});\n\n// ---------------------------------------------------------------------------\n// Service layers — flat composition via mergeAll + provideMerge\n// ---------------------------------------------------------------------------\n\nconst BaseServices = Layer.mergeAll(\n OAuthConfigService.Default,\n AuthStorageService.Default,\n PackageManagerService.Default,\n ArchiveService.Default,\n NetworkConfigLive,\n ProjectConfigService.Default\n).pipe(Layer.provideMerge(AuthService.Default));\n\nconst DeploymentApiLive = Layer.provide(DeploymentApiService.Default, BaseServices);\n\nconst ServicesLive = Layer.mergeAll(BaseServices, DeploymentApiLive);\n\nconst AppLive = Layer.mergeAll(ServicesLive, Logger.minimumLogLevel(LogLevel.Info)).pipe(\n Layer.provideMerge(NodeContext.layer)\n);\n\n// ---------------------------------------------------------------------------\n// Run\n// ---------------------------------------------------------------------------\n\nNodeRuntime.runMain(Effect.provide(cli(process.argv), AppLive));\n","import { Command } from '@effect/cli';\nimport { FileSystem, Path } from '@effect/platform';\nimport { exec } from '@gigadrive/build-utils';\nimport { Console, Effect } from 'effect';\nimport { BuildScriptNotFoundError, ExecError, PackageJsonNotFoundError, PackageJsonParseError } from '../../errors';\nimport { PackageManagerService } from '../../services/package-manager';\n\nexport const buildCommand = Command.make('build', {}, () =>\n Effect.gen(function* () {\n const pmService = yield* PackageManagerService;\n const fs = yield* FileSystem.FileSystem;\n const pathService = yield* Path.Path;\n const cwd = process.cwd();\n\n yield* Effect.log('Starting build', { cwd });\n\n // Validate package.json exists\n const packageJsonPath = pathService.join(cwd, 'package.json');\n const packageJsonExists = yield* fs\n .exists(packageJsonPath)\n .pipe(\n Effect.mapError(\n () => new PackageJsonNotFoundError({ message: 'Failed to check for package.json', directory: cwd })\n )\n );\n if (!packageJsonExists) {\n return yield* Effect.fail(new PackageJsonNotFoundError({ message: 'No package.json found', directory: cwd }));\n }\n\n // Read and validate build script\n const packageJsonContent = yield* fs\n .readFileString(packageJsonPath, 'utf-8')\n .pipe(\n Effect.mapError(() => new PackageJsonNotFoundError({ message: 'Failed to read package.json', directory: cwd }))\n );\n\n const packageJson = yield* Effect.try({\n try: () => JSON.parse(packageJsonContent) as { scripts?: { build?: string } },\n catch: (error) =>\n new PackageJsonParseError({\n message: 'Failed to parse package.json',\n directory: cwd,\n cause: error instanceof Error ? error.message : String(error),\n }),\n });\n\n if (!packageJson.scripts?.build) {\n return yield* Effect.fail(new BuildScriptNotFoundError({ message: 'No build script found in package.json' }));\n }\n\n // Detect package manager\n const pm = yield* pmService.detect(cwd);\n\n const buildEnv = {\n ...process.env,\n NODE_ENV: 'production',\n NEBULA: '1',\n VERCEL: '1',\n NOW_BUILDER: '1',\n };\n\n // Install dependencies\n const installCmd = pmService.installCommand(pm);\n yield* Console.log(`Running: ${installCmd}`);\n yield* Effect.tryPromise({\n try: () =>\n exec({\n command: installCmd,\n cwd,\n env: buildEnv,\n onOutput: (chunk) => {\n Console.log(chunk).pipe(Effect.runSync);\n },\n }),\n catch: (error) =>\n new ExecError({\n message: 'Install failed',\n command: installCmd,\n cause: error instanceof Error ? error.message : String(error),\n }),\n });\n\n // Run build\n const buildCmd = pmService.buildCommand(pm);\n yield* Console.log(`Running: ${buildCmd}`);\n yield* Effect.tryPromise({\n try: () =>\n exec({\n command: buildCmd,\n cwd,\n env: buildEnv,\n onOutput: (chunk) => {\n Console.log(chunk).pipe(Effect.runSync);\n },\n }),\n catch: (error) =>\n new ExecError({\n message: 'Build failed',\n command: buildCmd,\n cause: error instanceof Error ? error.message : String(error),\n }),\n });\n\n yield* Console.log('Build completed successfully.');\n }).pipe(\n Effect.catchTags({\n PackageJsonNotFoundError: (err) => Console.error(err.message).pipe(Effect.andThen(Effect.fail(err))),\n PackageJsonParseError: (err) => Console.error(err.message).pipe(Effect.andThen(Effect.fail(err))),\n BuildScriptNotFoundError: (err) => Console.error(err.message).pipe(Effect.andThen(Effect.fail(err))),\n PackageManagerNotFoundError: (err) => Console.error(err.message).pipe(Effect.andThen(Effect.fail(err))),\n ExecError: (err) =>\n Console.error(`${err.message}: ${err.cause ?? err.command}`).pipe(Effect.andThen(Effect.fail(err))),\n })\n )\n);\n","import { Schema } from 'effect';\n\n// ---------------------------------------------------------------------------\n// Auth errors\n// ---------------------------------------------------------------------------\n\nexport class OAuthDiscoveryError extends Schema.TaggedError<OAuthDiscoveryError>()('OAuthDiscoveryError', {\n message: Schema.String,\n cause: Schema.optional(Schema.String),\n}) {}\n\nexport class AuthStorageReadError extends Schema.TaggedError<AuthStorageReadError>()('AuthStorageReadError', {\n message: Schema.String,\n}) {}\n\nexport class AuthStorageWriteError extends Schema.TaggedError<AuthStorageWriteError>()('AuthStorageWriteError', {\n message: Schema.String,\n cause: Schema.optional(Schema.String),\n}) {}\n\nexport class LoginFlowError extends Schema.TaggedError<LoginFlowError>()('LoginFlowError', {\n message: Schema.String,\n cause: Schema.optional(Schema.String),\n}) {}\n\nexport class TokenExchangeError extends Schema.TaggedError<TokenExchangeError>()('TokenExchangeError', {\n message: Schema.String,\n statusCode: Schema.optional(Schema.Number),\n}) {}\n\nexport class TokenRefreshError extends Schema.TaggedError<TokenRefreshError>()('TokenRefreshError', {\n message: Schema.String,\n statusCode: Schema.optional(Schema.Number),\n}) {}\n\nexport class NotAuthenticatedError extends Schema.TaggedError<NotAuthenticatedError>()('NotAuthenticatedError', {\n message: Schema.String,\n}) {}\n\nexport class UserInfoFetchError extends Schema.TaggedError<UserInfoFetchError>()('UserInfoFetchError', {\n message: Schema.String,\n statusCode: Schema.optional(Schema.Number),\n}) {}\n\n// ---------------------------------------------------------------------------\n// Project errors\n// ---------------------------------------------------------------------------\n\nexport class ConfigNotFoundError extends Schema.TaggedError<ConfigNotFoundError>()('ConfigNotFoundError', {\n message: Schema.String,\n directory: Schema.String,\n}) {}\n\nexport class ConfigParseError extends Schema.TaggedError<ConfigParseError>()('ConfigParseError', {\n message: Schema.String,\n cause: Schema.optional(Schema.String),\n}) {}\n\nexport class ConfigValidationError extends Schema.TaggedError<ConfigValidationError>()('ConfigValidationError', {\n message: Schema.String,\n errors: Schema.Array(Schema.String),\n}) {}\n\nexport class PackageJsonNotFoundError extends Schema.TaggedError<PackageJsonNotFoundError>()(\n 'PackageJsonNotFoundError',\n {\n message: Schema.String,\n directory: Schema.String,\n }\n) {}\n\nexport class PackageJsonParseError extends Schema.TaggedError<PackageJsonParseError>()('PackageJsonParseError', {\n message: Schema.String,\n directory: Schema.String,\n cause: Schema.optional(Schema.String),\n}) {}\n\nexport class BuildScriptNotFoundError extends Schema.TaggedError<BuildScriptNotFoundError>()(\n 'BuildScriptNotFoundError',\n {\n message: Schema.String,\n }\n) {}\n\nexport class PackageManagerNotFoundError extends Schema.TaggedError<PackageManagerNotFoundError>()(\n 'PackageManagerNotFoundError',\n {\n message: Schema.String,\n directory: Schema.String,\n }\n) {}\n\n// ---------------------------------------------------------------------------\n// Build errors\n// ---------------------------------------------------------------------------\n\nexport class ExecError extends Schema.TaggedError<ExecError>()('ExecError', {\n message: Schema.String,\n command: Schema.String,\n cause: Schema.optional(Schema.String),\n}) {}\n\n// ---------------------------------------------------------------------------\n// Deployment errors\n// ---------------------------------------------------------------------------\n\nexport class DeploymentCreateError extends Schema.TaggedError<DeploymentCreateError>()('DeploymentCreateError', {\n message: Schema.String,\n statusCode: Schema.optional(Schema.Number),\n}) {}\n\nexport class UploadStartError extends Schema.TaggedError<UploadStartError>()('UploadStartError', {\n message: Schema.String,\n statusCode: Schema.optional(Schema.Number),\n}) {}\n\nexport class PresignedUrlError extends Schema.TaggedError<PresignedUrlError>()('PresignedUrlError', {\n message: Schema.String,\n partNumber: Schema.Number,\n}) {}\n\nexport class UploadPartError extends Schema.TaggedError<UploadPartError>()('UploadPartError', {\n message: Schema.String,\n partNumber: Schema.Number,\n}) {}\n\nexport class UploadCompleteError extends Schema.TaggedError<UploadCompleteError>()('UploadCompleteError', {\n message: Schema.String,\n}) {}\n\nexport class DeploymentStatusError extends Schema.TaggedError<DeploymentStatusError>()('DeploymentStatusError', {\n message: Schema.String,\n}) {}\n\nexport class DeploymentLogsFetchError extends Schema.TaggedError<DeploymentLogsFetchError>()(\n 'DeploymentLogsFetchError',\n {\n message: Schema.String,\n }\n) {}\n\nexport class ArchiveCreateError extends Schema.TaggedError<ArchiveCreateError>()('ArchiveCreateError', {\n message: Schema.String,\n cause: Schema.optional(Schema.String),\n}) {}\n\nexport class DeploymentAuthError extends Schema.TaggedError<DeploymentAuthError>()('DeploymentAuthError', {\n message: Schema.String,\n}) {}\n\nexport class DeploymentFailedError extends Schema.TaggedError<DeploymentFailedError>()('DeploymentFailedError', {\n message: Schema.String,\n}) {}\n","import { FileSystem, Path } from '@effect/platform';\nimport { exec } from '@gigadrive/build-utils';\nimport { Effect } from 'effect';\nimport type { PackageManager } from '../domain';\nimport { ExecError, PackageManagerNotFoundError } from '../errors';\n\n// ---------------------------------------------------------------------------\n// PackageManagerService\n// ---------------------------------------------------------------------------\n\nexport class PackageManagerService extends Effect.Service<PackageManagerService>()('PackageManagerService', {\n accessors: true,\n\n effect: Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const pathService = yield* Path.Path;\n\n const detect = Effect.fn('PackageManagerService.detect')(function* (cwd: string) {\n yield* Effect.annotateCurrentSpan('cwd', cwd);\n\n const packageJsonPath = pathService.join(cwd, 'package.json');\n const exists = yield* fs\n .exists(packageJsonPath)\n .pipe(\n Effect.mapError(\n () => new PackageManagerNotFoundError({ message: 'Failed to check for package.json', directory: cwd })\n )\n );\n if (!exists) {\n return yield* Effect.fail(\n new PackageManagerNotFoundError({\n message: 'No package.json found',\n directory: cwd,\n })\n );\n }\n\n // Check lock files in priority order\n const lockChecks: Array<{ file: string; pm: PackageManager }> = [\n { file: 'yarn.lock', pm: 'yarn' },\n { file: 'pnpm-lock.yaml', pm: 'pnpm' },\n { file: 'bun.lockb', pm: 'bun' },\n { file: 'package-lock.json', pm: 'npm' },\n ];\n\n for (const { file, pm } of lockChecks) {\n const lockExists = yield* fs\n .exists(pathService.join(cwd, file))\n .pipe(Effect.catchAll(() => Effect.succeed(false)));\n if (lockExists) {\n yield* Effect.log('Package manager detected from lock file', { packageManager: pm, lockFile: file });\n return pm;\n }\n }\n\n // Fallback: check if bun is installed\n const bunAvailable = yield* Effect.tryPromise({\n try: () => exec({ command: 'bun --version', cwd }),\n catch: () => new ExecError({ message: 'bun not found', command: 'bun --version' }),\n }).pipe(\n Effect.as(true),\n Effect.catchTag('ExecError', () => Effect.succeed(false))\n );\n\n const pm: PackageManager = bunAvailable ? 'bun' : 'npm';\n yield* Effect.log('Package manager detected via fallback', { packageManager: pm });\n return pm;\n });\n\n const installCommand = (pm: PackageManager): string =>\n ({\n bun: 'bun install',\n npm: 'npm install',\n pnpm: 'pnpm install',\n yarn: 'yarn install',\n })[pm];\n\n const buildCommand = (pm: PackageManager): string =>\n ({\n bun: 'bun run build',\n npm: 'npm run build',\n pnpm: 'pnpm build',\n yarn: 'yarn build',\n })[pm];\n\n return { detect, installCommand, buildCommand };\n }),\n}) {}\n","import { Command } from '@effect/cli';\nimport { Effect } from 'effect';\nimport { debugConfigCommand } from './config';\n\nconst debugBase = Command.make('debug', {}, () => Effect.void);\n\nexport const debugCommand = debugBase.pipe(Command.withSubcommands([debugConfigCommand]));\n","import { Command } from '@effect/cli';\nimport { Console, Effect } from 'effect';\nimport { ProjectConfigService } from '../../../services/project-config';\n\nexport const debugConfigCommand = Command.make('config', {}, () =>\n Effect.gen(function* () {\n const projectConfig = yield* ProjectConfigService;\n const cwd = process.cwd();\n const { config, configPath } = yield* projectConfig.resolve(cwd);\n\n yield* Console.log(`Config file found at: ${configPath}`);\n yield* Console.log(JSON.stringify(config, null, 2));\n }).pipe(\n Effect.catchTags({\n ConfigNotFoundError: (err) => Console.error(err.message),\n ConfigParseError: (err) => Console.error(`Config parse error: ${err.message}`),\n ConfigValidationError: (err) =>\n Effect.gen(function* () {\n for (const e of err.errors) {\n yield* Console.error(e);\n }\n yield* Console.error(err.message);\n }),\n })\n )\n);\n","import type {\n ConfigFileEmptyError,\n ConfigFileNotFoundError,\n ConfigFileParseError,\n ConfigSchemaValidationError,\n ConfigVersionError,\n FunctionConfigError,\n NormalizedConfig,\n} from '@gigadrive/network-config';\nimport {\n detectFramework,\n mergeWithFrameworkDefaults,\n NetworkConfigLive,\n parseConfig,\n parseConfigRaw,\n postProcessConfig,\n RawConfigReader,\n} from '@gigadrive/network-config';\nimport { Effect } from 'effect';\nimport { ConfigNotFoundError, ConfigParseError, ConfigValidationError } from '../errors';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Wraps parseConfig errors into the CLI's ConfigParseError type.\n */\ntype ParseConfigErrors =\n | ConfigFileNotFoundError\n | ConfigFileEmptyError\n | ConfigFileParseError\n | ConfigVersionError\n | ConfigSchemaValidationError\n | FunctionConfigError;\n\nconst wrapParseErrors = <R>(effect: Effect.Effect<NormalizedConfig, ParseConfigErrors, R>) =>\n effect.pipe(\n Effect.catchTags({\n ConfigFileNotFoundError: (e) => Effect.fail(new ConfigParseError({ message: e.message, cause: e.filePath })),\n ConfigFileEmptyError: (e) => Effect.fail(new ConfigParseError({ message: e.message, cause: e.filePath })),\n ConfigFileParseError: (e) => Effect.fail(new ConfigParseError({ message: e.message, cause: e.cause })),\n ConfigVersionError: (e) => Effect.fail(new ConfigParseError({ message: e.message, cause: e.filePath })),\n ConfigSchemaValidationError: (e) =>\n Effect.fail(new ConfigParseError({ message: e.message, cause: e.validationErrors.join(', ') })),\n FunctionConfigError: (e) => Effect.fail(new ConfigParseError({ message: e.message, cause: e.functionPath })),\n })\n );\n\n// ---------------------------------------------------------------------------\n// ProjectConfigService\n// ---------------------------------------------------------------------------\n\nexport class ProjectConfigService extends Effect.Service<ProjectConfigService>()('ProjectConfigService', {\n accessors: true,\n dependencies: [NetworkConfigLive],\n\n effect: Effect.gen(function* () {\n const rawReader = yield* RawConfigReader;\n\n const resolve = Effect.fn('ProjectConfigService.resolve')(function* (cwd: string) {\n yield* Effect.annotateCurrentSpan('cwd', cwd);\n yield* Effect.log('Resolving project config', { cwd });\n\n const configPath = yield* rawReader.findConfig(cwd);\n\n // Attempt framework auto-detection.\n // ManifestReadError / ManifestParseError indicate genuine problems (the\n // manifest file exists but is unreadable or malformed), so we surface them\n // as ConfigParseError instead of silently swallowing them.\n const detection = yield* detectFramework(cwd).pipe(\n Effect.catchTag('FrameworkNotDetectedError', () => Effect.succeed(null)),\n Effect.catchTag('ManifestReadError', (e) =>\n Effect.fail(new ConfigParseError({ message: `Framework detection failed: ${e.message}`, cause: e.filePath }))\n ),\n Effect.catchTag('ManifestParseError', (e) =>\n Effect.fail(new ConfigParseError({ message: `Framework detection failed: ${e.message}`, cause: e.filePath }))\n )\n );\n\n if (detection) {\n yield* Effect.log('Framework auto-detected', {\n framework: detection.framework.name,\n slug: detection.framework.slug,\n });\n }\n\n let config: NormalizedConfig;\n let resolvedConfigPath: string | null = null;\n let framework: { name: string; slug: string } | undefined;\n\n if (configPath && detection) {\n // Case A: config file + framework detected → parse raw (no post-processing), merge\n // with framework defaults, then post-process the merged result. Running postProcessConfig\n // after the merge ensures validations (empty-deployment check, Vercel BOv3 merge,\n // function/asset dedup) see the full picture instead of producing stale pre-merge errors.\n yield* Effect.log('Config file found, merging with framework defaults', { configPath });\n resolvedConfigPath = configPath;\n\n const userConfig: NormalizedConfig = yield* wrapParseErrors(parseConfigRaw(configPath, cwd));\n const merged: NormalizedConfig = yield* mergeWithFrameworkDefaults(userConfig, detection.config);\n\n config = yield* wrapParseErrors(postProcessConfig(merged, cwd));\n framework = { name: detection.framework.name, slug: detection.framework.slug };\n } else if (configPath) {\n // Case B: config file only → existing behavior\n yield* Effect.log('Config file found', { configPath });\n resolvedConfigPath = configPath;\n\n config = yield* wrapParseErrors(parseConfig(configPath, cwd));\n } else if (detection) {\n // Case C: no config file, framework detected → use detection + post-process\n config = yield* wrapParseErrors(postProcessConfig(detection.config, cwd));\n\n framework = { name: detection.framework.name, slug: detection.framework.slug };\n } else {\n // Case D: neither config file nor framework detected\n return yield* Effect.fail(\n new ConfigNotFoundError({\n message: 'No config file found and no framework detected.',\n directory: cwd,\n })\n );\n }\n\n // Report warnings via structured logging\n for (const warning of config.warnings) {\n yield* Effect.logWarning(warning);\n }\n\n // Fail on config errors\n if (config.errors.length > 0) {\n return yield* Effect.fail(\n new ConfigValidationError({\n message: 'Config file has validation errors',\n errors: config.errors,\n })\n );\n }\n\n return { config, configPath: resolvedConfigPath, framework };\n });\n\n return { resolve };\n }),\n}) {}\n","import { Command } from '@effect/cli';\nimport { Console, Effect } from 'effect';\nimport { AuthService } from '../../services/auth';\n\nexport const loginCommand = Command.make('login', {}, () =>\n Effect.gen(function* () {\n yield* Console.log('Initiating login...');\n\n const auth = yield* AuthService;\n yield* auth.login;\n\n const info = yield* auth.getUserInfo.pipe(Effect.catchAll(() => Effect.succeed({} as Record<string, unknown>)));\n\n const name = auth.inferUserName(info);\n yield* Console.log(`You are now logged in as ${name}.`);\n }).pipe(\n Effect.catchTags({\n LoginFlowError: (err: { message: string }) => Console.error(`Login failed: ${err.message}`),\n TokenExchangeError: (err: { message: string }) => Console.error(`Login failed: ${err.message}`),\n OAuthDiscoveryError: (err: { message: string }) => Console.error(`Login failed: ${err.message}`),\n AuthStorageWriteError: (err: { message: string }) => Console.error(`Failed to save credentials: ${err.message}`),\n })\n )\n);\n","import { Console, Effect, Option } from 'effect';\nimport * as crypto from 'node:crypto';\nimport * as http from 'node:http';\nimport open from 'open';\nimport type { OAuthClientConfig, StoredAuthData } from '../domain';\nimport {\n LoginFlowError,\n NotAuthenticatedError,\n TokenExchangeError,\n TokenRefreshError,\n UserInfoFetchError,\n} from '../errors';\nimport { AuthStorageService } from './auth-storage';\nimport { OAuthConfigService } from './oauth-config';\n\n// Simple HTML escaping to prevent reflected XSS when rendering user input\nconst escapeHtml = (value: string): string =>\n value\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''')\n .replace(/\\//g, '/');\n\n// ---------------------------------------------------------------------------\n// PKCE helpers (exported for testing)\n// ---------------------------------------------------------------------------\n\n/** @internal */\nexport const base64URLEncode = (buffer: Buffer): string =>\n buffer.toString('base64').replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n\n/** @internal */\nexport const generatePKCE = () => {\n const codeVerifier = base64URLEncode(crypto.randomBytes(64));\n const challengeBytes = crypto.createHash('sha256').update(codeVerifier, 'utf8').digest();\n const codeChallenge = base64URLEncode(challengeBytes);\n return { codeVerifier, codeChallenge };\n};\n\n// ---------------------------------------------------------------------------\n// AuthService\n// ---------------------------------------------------------------------------\n\nexport class AuthService extends Effect.Service<AuthService>()('AuthService', {\n accessors: true,\n dependencies: [OAuthConfigService.Default, AuthStorageService.Default],\n\n effect: Effect.gen(function* () {\n const oauthConfig = yield* OAuthConfigService;\n const storage = yield* AuthStorageService;\n\n // In-memory token cache\n let accessToken: string | null = null;\n let tokenExpirationTime = 0;\n\n const logout = Effect.gen(function* () {\n accessToken = null;\n tokenExpirationTime = 0;\n yield* storage.remove;\n yield* Effect.log('Logged out');\n });\n\n const exchangeCodeForTokens = (\n config: OAuthClientConfig,\n authCode: string,\n redirectUri: string,\n codeVerifier: string\n ) =>\n Effect.gen(function* () {\n const response = yield* Effect.tryPromise({\n try: () =>\n fetch(config.tokenUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: config.clientId,\n code: authCode,\n redirect_uri: redirectUri,\n code_verifier: codeVerifier,\n }).toString(),\n }),\n catch: (error) =>\n new TokenExchangeError({\n message: `Token exchange request failed: ${error instanceof Error ? error.message : String(error)}`,\n }),\n });\n\n if (!response.ok) {\n const body = yield* Effect.tryPromise({\n try: () => response.text(),\n catch: () => new TokenExchangeError({ message: 'Failed to read token exchange error response' }),\n });\n return yield* Effect.fail(\n new TokenExchangeError({\n message: `Token exchange failed: ${response.status} ${response.statusText} - ${body}`,\n statusCode: response.status,\n })\n );\n }\n\n const tokens = yield* Effect.tryPromise({\n try: () =>\n response.json() as Promise<{\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n }>,\n catch: () => new TokenExchangeError({ message: 'Failed to parse token exchange response' }),\n });\n\n return tokens;\n });\n\n const startCallbackServer = (config: OAuthClientConfig, codeChallenge: string, state: string) =>\n Effect.async<{ authCode: string; redirectUri: string }, LoginFlowError>((resume) => {\n const server = http.createServer();\n const redirectPath = '/callback';\n\n server.listen(0, '127.0.0.1', () => {\n const address = server.address();\n if (!address || typeof address !== 'object') {\n server.close(() => {\n resume(Effect.fail(new LoginFlowError({ message: 'Failed to determine callback server address' })));\n });\n return;\n }\n\n const port = address.port;\n const redirectUri = `http://127.0.0.1:${port}${redirectPath}`;\n\n const authUrl = new URL(config.authorizeUrl);\n authUrl.searchParams.append('client_id', config.clientId);\n authUrl.searchParams.append('redirect_uri', redirectUri);\n authUrl.searchParams.append('response_type', 'code');\n authUrl.searchParams.append('scope', config.scope);\n authUrl.searchParams.append('code_challenge', codeChallenge);\n authUrl.searchParams.append('code_challenge_method', 'S256');\n authUrl.searchParams.append('state', state);\n\n Console.log(`Please open this URL in your browser to log in:\\n${authUrl.toString()}\\n`).pipe(Effect.runSync);\n Console.log('Waiting for login callback...').pipe(Effect.runSync);\n void open(authUrl.toString());\n\n server.on('request', (req, res) => {\n const reqUrl = new URL(req.url || '', redirectUri);\n if (reqUrl.pathname !== '/callback') {\n res.writeHead(404).end('Not Found');\n return;\n }\n\n const authCode = reqUrl.searchParams.get('code');\n const receivedState = reqUrl.searchParams.get('state');\n const oauthError = reqUrl.searchParams.get('error');\n\n res.writeHead(200, { 'Content-Type': 'text/html', Connection: 'close' });\n\n if (oauthError) {\n const safeOauthError = escapeHtml(oauthError);\n res.end(`<h1>Login Failed!</h1><p>Error: ${safeOauthError}</p><p>You can close this tab.</p>`);\n server.close();\n resume(Effect.fail(new LoginFlowError({ message: `OAuth error: ${oauthError}` })));\n return;\n }\n\n if (receivedState !== state) {\n res.end(\n '<h1>Login Failed!</h1><p>State mismatch. Possible CSRF attack.</p><p>You can close this tab.</p>'\n );\n server.close();\n resume(Effect.fail(new LoginFlowError({ message: 'State mismatch' })));\n return;\n }\n\n if (authCode) {\n res.end('<h1>Login Successful!</h1><p>You can close this tab.</p>');\n server.close();\n resume(Effect.succeed({ authCode, redirectUri }));\n } else {\n res.end('<h1>Login Failed!</h1><p>No authorization code received.</p><p>You can close this tab.</p>');\n server.close();\n resume(Effect.fail(new LoginFlowError({ message: 'No authorization code received' })));\n }\n });\n\n server.on('error', (err: Error) => {\n server.close();\n resume(Effect.fail(new LoginFlowError({ message: `Local server error: ${err.message}` })));\n });\n });\n });\n\n const login = Effect.gen(function* () {\n yield* logout;\n\n const { codeVerifier, codeChallenge } = generatePKCE();\n const state = crypto.randomBytes(16).toString('hex');\n\n const config = yield* oauthConfig.getConfig;\n\n const { authCode, redirectUri } = yield* startCallbackServer(config, codeChallenge, state);\n const tokens = yield* exchangeCodeForTokens(config, authCode, redirectUri, codeVerifier);\n\n if (!tokens.refresh_token) {\n return yield* Effect.fail(\n new TokenExchangeError({ message: 'No refresh token received from identity provider' })\n );\n }\n\n accessToken = tokens.access_token;\n tokenExpirationTime = Date.now() + (tokens.expires_in || 3600) * 1000;\n\n yield* storage.save({\n refreshToken: tokens.refresh_token,\n accessToken,\n tokenExpirationTime,\n });\n\n yield* Effect.log('Login successful');\n return true as const;\n });\n\n const refreshAccessToken: Effect.Effect<true, TokenRefreshError> = Effect.gen(function* () {\n const stored: Option.Option<StoredAuthData> = yield* storage.load.pipe(\n Effect.catchTag('AuthStorageReadError', (err) => Effect.fail(new TokenRefreshError({ message: err.message })))\n );\n const config = yield* oauthConfig.getConfig.pipe(\n Effect.catchTag('OAuthDiscoveryError', (err) => Effect.fail(new TokenRefreshError({ message: err.message })))\n );\n\n const authData: StoredAuthData = yield* Option.match(stored, {\n onNone: () => Effect.fail(new TokenRefreshError({ message: 'No refresh token available. Please log in.' })),\n onSome: (data: StoredAuthData) =>\n data.refreshToken\n ? Effect.succeed(data)\n : Effect.fail(new TokenRefreshError({ message: 'No refresh token available. Please log in.' })),\n });\n\n const response = yield* Effect.tryPromise({\n try: () =>\n fetch(config.tokenUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n client_id: config.clientId,\n refresh_token: authData.refreshToken,\n }).toString(),\n }),\n catch: (error) =>\n new TokenRefreshError({\n message: `Token refresh request failed: ${error instanceof Error ? error.message : String(error)}`,\n }),\n });\n\n if (!response.ok) {\n if (response.status === 400) {\n yield* logout.pipe(Effect.catchAll(() => Effect.void));\n return yield* Effect.fail(\n new TokenRefreshError({\n message: 'Refresh token is invalid or expired. Please log in again.',\n statusCode: response.status,\n })\n );\n }\n const body = yield* Effect.tryPromise({\n try: () => response.text(),\n catch: () => new TokenRefreshError({ message: 'Failed to read refresh error response' }),\n });\n return yield* Effect.fail(\n new TokenRefreshError({\n message: `Token refresh failed: ${response.status} ${response.statusText} - ${body}`,\n statusCode: response.status,\n })\n );\n }\n\n const tokens = yield* Effect.tryPromise({\n try: () => response.json() as Promise<{ access_token: string; refresh_token?: string; expires_in?: number }>,\n catch: () => new TokenRefreshError({ message: 'Failed to parse token refresh response' }),\n });\n\n accessToken = tokens.access_token;\n tokenExpirationTime = Date.now() + (tokens.expires_in || 3600) * 1000;\n const newRefreshToken = tokens.refresh_token || authData.refreshToken;\n\n yield* storage\n .save({\n refreshToken: newRefreshToken,\n accessToken,\n tokenExpirationTime,\n })\n .pipe(Effect.catchAll(() => Effect.void));\n\n yield* Effect.log('Access token refreshed successfully');\n return true as const;\n });\n\n const getAccessToken = Effect.gen(function* () {\n // Check in-memory cache\n if (accessToken && Date.now() < tokenExpirationTime) {\n return accessToken;\n }\n\n // Try to load from storage\n const stored: Option.Option<StoredAuthData> = yield* storage.load.pipe(\n Effect.catchAll(() => Effect.succeed(Option.none<StoredAuthData>()))\n );\n Option.match(stored, {\n onNone: () => {},\n onSome: (data: StoredAuthData) => {\n if (data.accessToken && data.tokenExpirationTime && Date.now() < data.tokenExpirationTime) {\n accessToken = data.accessToken;\n tokenExpirationTime = data.tokenExpirationTime;\n }\n },\n });\n\n if (accessToken && Date.now() < tokenExpirationTime) {\n return accessToken;\n }\n\n // Try refresh\n yield* Effect.log('Access token expired or not available. Attempting to refresh...');\n yield* refreshAccessToken.pipe(\n Effect.catchTag('TokenRefreshError', (err) => Effect.fail(new NotAuthenticatedError({ message: err.message })))\n );\n\n if (!accessToken) {\n return yield* Effect.fail(\n new NotAuthenticatedError({ message: 'No valid access token available. Please log in first.' })\n );\n }\n\n return accessToken;\n });\n\n const getUserInfo = Effect.gen(function* () {\n const config = yield* oauthConfig.getConfig;\n const token = yield* getAccessToken;\n\n const fetchUserInfo = (t: string) =>\n Effect.tryPromise({\n try: () =>\n fetch(config.userinfoUrl, {\n headers: {\n Authorization: `Bearer ${t}`,\n Accept: 'application/json',\n },\n }),\n catch: (error) =>\n new UserInfoFetchError({\n message: `Failed to fetch user info: ${error instanceof Error ? error.message : String(error)}`,\n }),\n });\n\n let response = yield* fetchUserInfo(token);\n\n // Retry once on 401/403\n if (response.status === 401 || response.status === 403) {\n yield* refreshAccessToken.pipe(\n Effect.catchTag('TokenRefreshError', (err) => Effect.fail(new UserInfoFetchError({ message: err.message })))\n );\n if (!accessToken) {\n return yield* Effect.fail(new UserInfoFetchError({ message: 'Token refresh failed' }));\n }\n response = yield* fetchUserInfo(accessToken);\n }\n\n if (!response.ok) {\n const body = yield* Effect.tryPromise({\n try: () => response.text(),\n catch: () => new UserInfoFetchError({ message: 'Failed to read user info error response' }),\n });\n return yield* Effect.fail(\n new UserInfoFetchError({\n message: `Failed to fetch user info: ${response.status} ${response.statusText}${body ? ` - ${body}` : ''}`,\n statusCode: response.status,\n })\n );\n }\n\n const data = yield* Effect.tryPromise({\n try: () => response.json() as Promise<Record<string, unknown>>,\n catch: () => new UserInfoFetchError({ message: 'Failed to parse user info response' }),\n });\n\n return data;\n });\n\n const inferUserName = (info: Record<string, unknown>): string => {\n const isNonEmptyString = (value: unknown): value is string => typeof value === 'string' && value.trim() !== '';\n\n const name = info.name;\n const givenName = info.given_name;\n const familyName = info.family_name;\n const preferredUsername = info.preferred_username;\n const email = info.email;\n\n return (\n (isNonEmptyString(name) && name) ||\n (isNonEmptyString(givenName) && isNonEmptyString(familyName) ? `${givenName} ${familyName}` : undefined) ||\n (isNonEmptyString(preferredUsername) && preferredUsername) ||\n (isNonEmptyString(email) && email) ||\n 'your account'\n );\n };\n\n return { login, logout, getAccessToken, getUserInfo, refreshAccessToken, inferUserName };\n }),\n}) {}\n","import { FileSystem, Path } from '@effect/platform';\nimport { Effect, Option, Schema } from 'effect';\nimport * as os from 'node:os';\nimport type { StoredAuthData } from '../domain';\nimport { StoredAuthData as StoredAuthDataSchema } from '../domain';\nimport { AuthStorageReadError, AuthStorageWriteError } from '../errors';\n\n// ---------------------------------------------------------------------------\n// AuthStorageService\n// ---------------------------------------------------------------------------\n\nexport class AuthStorageService extends Effect.Service<AuthStorageService>()('AuthStorageService', {\n accessors: true,\n\n effect: Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const pathService = yield* Path.Path;\n\n const homeDir = os.homedir();\n const authDir = pathService.join(homeDir, '.gigadrive');\n const authFile = pathService.join(authDir, 'auth.json');\n\n const ensureDirectory = Effect.gen(function* () {\n yield* fs.makeDirectory(authDir, { recursive: true }).pipe(\n Effect.mapError(\n (error) =>\n new AuthStorageWriteError({\n message: 'Failed to create auth directory',\n cause: String(error),\n })\n )\n );\n yield* fs.chmod(authDir, 0o700).pipe(\n Effect.mapError(\n (error) =>\n new AuthStorageWriteError({\n message: 'Failed to set auth directory permissions',\n cause: String(error),\n })\n )\n );\n });\n\n const load = Effect.gen(function* () {\n const exists = yield* fs\n .exists(authFile)\n .pipe(Effect.mapError(() => new AuthStorageReadError({ message: 'Failed to check auth file existence' })));\n if (!exists) return Option.none<StoredAuthData>();\n\n const data = yield* fs\n .readFileString(authFile, 'utf8')\n .pipe(Effect.mapError(() => new AuthStorageReadError({ message: 'Failed to read auth file' })));\n\n const json = yield* Effect.try({\n try: () => JSON.parse(data) as unknown,\n catch: () => new AuthStorageReadError({ message: 'Auth file contains invalid JSON' }),\n });\n\n const authData = yield* Schema.decodeUnknown(StoredAuthDataSchema)(json).pipe(\n Effect.mapError(() => new AuthStorageReadError({ message: 'Auth file has invalid schema' }))\n );\n\n return Option.some(authData);\n });\n\n const save = Effect.fn('AuthStorageService.save')(function* (authData: StoredAuthData) {\n yield* ensureDirectory;\n yield* fs.writeFileString(authFile, JSON.stringify(authData, null, 2), { mode: 0o600 }).pipe(\n Effect.mapError(\n (error) =>\n new AuthStorageWriteError({\n message: 'Failed to write auth file',\n cause: String(error),\n })\n )\n );\n yield* Effect.log('Auth data saved to local storage');\n });\n\n const remove = Effect.gen(function* () {\n yield* fs.remove(authFile).pipe(\n Effect.mapError((error) => {\n const cause = error instanceof Error ? error : (error as { error?: Error }).error;\n const code = cause && typeof cause === 'object' && 'code' in cause ? (cause as { code: string }).code : '';\n return { isNotFound: code === 'ENOENT' || String(error).includes('ENOENT'), original: error };\n }),\n Effect.catchAll((mapped) =>\n mapped.isNotFound\n ? Effect.void\n : Effect.fail(\n new AuthStorageWriteError({\n message: 'Failed to remove auth file',\n cause: String(mapped.original),\n })\n )\n )\n );\n yield* Effect.log('Auth data removed from local storage');\n });\n\n return { load, save, remove };\n }),\n}) {}\n","import { Schema } from 'effect';\n\n// ---------------------------------------------------------------------------\n// Branded IDs\n// ---------------------------------------------------------------------------\n\nexport const DeploymentId = Schema.String.pipe(Schema.brand('@Gigadrive/DeploymentId'));\nexport type DeploymentId = Schema.Schema.Type<typeof DeploymentId>;\n\nexport const ApplicationId = Schema.String.pipe(Schema.brand('@Gigadrive/ApplicationId'));\nexport type ApplicationId = Schema.Schema.Type<typeof ApplicationId>;\n\nexport const UploadId = Schema.String.pipe(Schema.brand('@Gigadrive/UploadId'));\nexport type UploadId = Schema.Schema.Type<typeof UploadId>;\n\n// ---------------------------------------------------------------------------\n// Domain schemas\n// ---------------------------------------------------------------------------\n\nexport const DeploymentStatus = Schema.Literal('PENDING', 'BUILDING', 'PROVISIONING', 'FAILED', 'ACTIVE', 'SUSPENDED');\nexport type DeploymentStatus = Schema.Schema.Type<typeof DeploymentStatus>;\n\nexport const DeploymentLogType = Schema.Literal('INFO', 'ERROR', 'WARN');\nexport type DeploymentLogType = Schema.Schema.Type<typeof DeploymentLogType>;\n\nexport const DeploymentLog = Schema.Struct({\n id: Schema.String,\n message: Schema.String,\n type: DeploymentLogType,\n createdAt: Schema.String,\n});\nexport type DeploymentLog = Schema.Schema.Type<typeof DeploymentLog>;\n\nexport const DeploymentLogPage = Schema.Struct({\n totalItems: Schema.Number,\n limit: Schema.Number,\n offset: Schema.Number,\n items: Schema.Array(DeploymentLog),\n});\nexport type DeploymentLogPage = Schema.Schema.Type<typeof DeploymentLogPage>;\n\nexport const PackageManager = Schema.Literal('npm', 'yarn', 'pnpm', 'bun');\nexport type PackageManager = Schema.Schema.Type<typeof PackageManager>;\n\n// ---------------------------------------------------------------------------\n// OAuth schemas\n// ---------------------------------------------------------------------------\n\nexport const OAuthTokens = Schema.Struct({\n access_token: Schema.String,\n refresh_token: Schema.optional(Schema.String),\n expires_in: Schema.optional(Schema.Number),\n token_type: Schema.optional(Schema.String),\n});\nexport type OAuthTokens = Schema.Schema.Type<typeof OAuthTokens>;\n\nexport const OAuthClientConfig = Schema.Struct({\n clientId: Schema.String,\n issuer: Schema.String,\n authorizeUrl: Schema.String,\n tokenUrl: Schema.String,\n scope: Schema.String,\n userinfoUrl: Schema.String,\n});\nexport type OAuthClientConfig = Schema.Schema.Type<typeof OAuthClientConfig>;\n\nexport const StoredAuthData = Schema.Struct({\n refreshToken: Schema.String,\n accessToken: Schema.optional(Schema.String),\n tokenExpirationTime: Schema.optional(Schema.Number),\n});\nexport type StoredAuthData = Schema.Schema.Type<typeof StoredAuthData>;\n","import { Config, Effect, Schema } from 'effect';\nimport type { OAuthClientConfig } from '../domain';\nimport { OAuthDiscoveryError } from '../errors';\n\n// ---------------------------------------------------------------------------\n// Environment config (replaces env.ts + @t3-oss/env-core + zod + dotenv)\n// ---------------------------------------------------------------------------\n\nconst OAuthEnvConfig = Config.all({\n issuerUrl: Config.string('GIGADRIVE_NETWORK_OAUTH_ISSUER_URL').pipe(Config.withDefault('https://idp.gigadrive.de')),\n clientId: Config.string('GIGADRIVE_NETWORK_OAUTH_CLIENT_ID').pipe(Config.withDefault('todo_add_client_id')),\n});\n\n// ---------------------------------------------------------------------------\n// OIDC discovery document schema\n// ---------------------------------------------------------------------------\n\nconst OpenIdDiscoveryDocument = Schema.Struct({\n issuer: Schema.optional(Schema.String),\n authorization_endpoint: Schema.optional(Schema.String),\n token_endpoint: Schema.optional(Schema.String),\n userinfo_endpoint: Schema.optional(Schema.String),\n});\n\nconst DEFAULT_SCOPE = 'offline_access openid profile email';\n\n// ---------------------------------------------------------------------------\n// OAuthConfigService\n// ---------------------------------------------------------------------------\n\nexport class OAuthConfigService extends Effect.Service<OAuthConfigService>()('OAuthConfigService', {\n accessors: true,\n\n effect: Effect.gen(function* () {\n const envConfig = yield* OAuthEnvConfig;\n let cached: OAuthClientConfig | null = null;\n\n const getConfig: Effect.Effect<OAuthClientConfig, OAuthDiscoveryError> = Effect.gen(function* () {\n if (cached) return cached;\n\n const issuerBase = envConfig.issuerUrl.replace(/\\/$/, '');\n const discoveryUrl = `${issuerBase}/.well-known/openid-configuration`;\n\n yield* Effect.log('Fetching OIDC discovery document', { discoveryUrl });\n\n const response = yield* Effect.tryPromise({\n try: (signal) => fetch(discoveryUrl, { signal }),\n catch: (error) =>\n new OAuthDiscoveryError({\n message: 'Failed to fetch OIDC discovery document',\n cause: error instanceof Error ? error.message : String(error),\n }),\n });\n\n if (!response.ok) {\n return yield* Effect.fail(\n new OAuthDiscoveryError({\n message: `OIDC discovery returned ${response.status} ${response.statusText}`,\n })\n );\n }\n\n const json = yield* Effect.tryPromise({\n try: () => response.json(),\n catch: () =>\n new OAuthDiscoveryError({\n message: 'Failed to parse OIDC discovery JSON',\n }),\n });\n\n const decoded = yield* Schema.decodeUnknown(OpenIdDiscoveryDocument)(json).pipe(\n Effect.mapError(\n () =>\n new OAuthDiscoveryError({\n message: 'Invalid OIDC discovery document schema',\n })\n )\n );\n\n if (!decoded.authorization_endpoint || !decoded.token_endpoint || !decoded.userinfo_endpoint) {\n return yield* Effect.fail(\n new OAuthDiscoveryError({\n message: 'OIDC discovery returned incomplete endpoints',\n })\n );\n }\n\n const config: OAuthClientConfig = {\n clientId: envConfig.clientId,\n issuer: decoded.issuer ?? issuerBase,\n authorizeUrl: decoded.authorization_endpoint,\n tokenUrl: decoded.token_endpoint,\n scope: DEFAULT_SCOPE,\n userinfoUrl: decoded.userinfo_endpoint,\n };\n\n cached = config;\n yield* Effect.log('OIDC discovery completed', { issuer: config.issuer });\n return config;\n });\n\n return { getConfig };\n }),\n}) {}\n","import { Command } from '@effect/cli';\nimport { Effect } from 'effect';\nimport { deployCommand } from './deploy';\n\nconst platformBase = Command.make('platform', {}, () => Effect.void);\n\nexport const platformCommand = platformBase.pipe(Command.withSubcommands([deployCommand]));\n","import { Command } from '@effect/cli';\nimport { FileSystem, Path } from '@effect/platform';\nimport { formatFileSize } from '@gigadrive/commons';\nimport { Console, Duration, Effect, Schedule, Stream } from 'effect';\nimport * as os from 'node:os';\nimport type { DeploymentId, DeploymentLog, DeploymentStatus } from '../../../domain';\nimport { DeploymentFailedError, UploadPartError } from '../../../errors';\nimport { ArchiveService } from '../../../services/archive';\nimport { DeploymentApiService } from '../../../services/deployment-api';\nimport { ProjectConfigService } from '../../../services/project-config';\n\nexport const deployCommand = Command.make('deploy', {}, () =>\n Effect.gen(function* () {\n const projectConfig = yield* ProjectConfigService;\n const deploymentApi = yield* DeploymentApiService;\n const archiveService = yield* ArchiveService;\n const pathService = yield* Path.Path;\n\n const cwd = process.cwd();\n\n // Resolve and validate config\n yield* Effect.log('Starting deploy command');\n const { config } = yield* projectConfig.resolve(cwd);\n\n // Create deployment\n yield* Console.log('Creating deployment...');\n const deploymentId = yield* deploymentApi.createDeployment('test'); // TODO: real application ID\n yield* Console.log(`Deployment ID: ${deploymentId}`);\n\n // Create and upload archive\n yield* Console.log('Creating archive...');\n const archivePath = pathService.join(os.tmpdir(), `project-${Date.now()}.zip`);\n const archive = yield* archiveService.createZipArchive(config.userArchive?.rootOverwrite || cwd, archivePath, {\n whitelist: config.userArchive?.fileWhitelist,\n excludeFiles: config.excludeFiles,\n useIgnoreFiles: false,\n useManagedIgnore: false,\n });\n yield* Console.log(`Archive created (${formatFileSize(archive.size)})`);\n\n // Upload archive\n yield* Console.log('Uploading archive...');\n yield* uploadArchive(deploymentId, archivePath, archive.size);\n yield* Console.log('Upload complete.');\n yield* Console.log('The deployment pipeline is now being provisioned. This may take a few seconds.');\n\n // Poll for status and logs\n yield* pollDeployment(deploymentId);\n }).pipe(\n Effect.catchTags({\n ConfigNotFoundError: (err) => Console.error(err.message).pipe(Effect.andThen(Effect.fail(err))),\n ConfigParseError: (err) =>\n Console.error(`Config parse error: ${err.message}`).pipe(Effect.andThen(Effect.fail(err))),\n ConfigValidationError: (err) =>\n Effect.gen(function* () {\n for (const e of err.errors) {\n yield* Console.error(e);\n }\n yield* Console.error(err.message);\n }).pipe(Effect.andThen(Effect.fail(err))),\n DeploymentCreateError: (err) =>\n Console.error(`Deployment creation failed: ${err.message}`).pipe(Effect.andThen(Effect.fail(err))),\n ArchiveCreateError: (err) =>\n Console.error(`Archive creation failed: ${err.message}`).pipe(Effect.andThen(Effect.fail(err))),\n UploadStartError: (err) => Console.error(`Upload failed: ${err.message}`).pipe(Effect.andThen(Effect.fail(err))),\n UploadPartError: (err) => Console.error(`Upload failed: ${err.message}`).pipe(Effect.andThen(Effect.fail(err))),\n UploadCompleteError: (err) =>\n Console.error(`Upload failed: ${err.message}`).pipe(Effect.andThen(Effect.fail(err))),\n PresignedUrlError: (err) => Console.error(`Upload failed: ${err.message}`).pipe(Effect.andThen(Effect.fail(err))),\n DeploymentAuthError: (err) =>\n Console.error(`Authentication failed: ${err.message}`).pipe(Effect.andThen(Effect.fail(err))),\n DeploymentFailedError: (err) => Console.error(err.message).pipe(Effect.andThen(Effect.fail(err))),\n })\n )\n);\n\n// ---------------------------------------------------------------------------\n// Upload archive helper\n// ---------------------------------------------------------------------------\n\nconst uploadArchive = (deploymentId: DeploymentId, archivePath: string, fileSize: number) =>\n Effect.gen(function* () {\n const deploymentApi = yield* DeploymentApiService;\n const fs = yield* FileSystem.FileSystem;\n\n const uploadId = yield* deploymentApi.startMultipartUpload(deploymentId);\n\n const FILE_CHUNK_SIZE = 10 * 1024 * 1024; // 10 MB\n const numChunks = Math.ceil(fileSize / FILE_CHUNK_SIZE);\n\n yield* Effect.log('Starting multipart upload', { uploadId, numChunks, fileSize });\n\n // Upload all chunks — each chunk is streamed from disk independently\n const parts = yield* Effect.all(\n Array.from({ length: numChunks }, (_, i) => {\n const partNumber = i + 1;\n const start = i * FILE_CHUNK_SIZE;\n const bytesToRead = partNumber < numChunks ? FILE_CHUNK_SIZE : fileSize - start;\n\n return Effect.gen(function* () {\n const presignedUrl = yield* deploymentApi.getPresignedUrl(deploymentId, uploadId, partNumber);\n\n // Stream only this chunk from disk to keep memory bounded\n const chunkData = yield* Stream.runCollect(fs.stream(archivePath, { offset: start, bytesToRead })).pipe(\n Effect.map((chunks) => {\n const arrays = Array.from(chunks);\n return Buffer.concat(arrays);\n }),\n Effect.mapError(\n (error) =>\n new UploadPartError({\n message: `Failed to read chunk ${partNumber}: ${String(error)}`,\n partNumber,\n })\n )\n );\n\n yield* Effect.log(`Uploading part ${partNumber}/${numChunks}`, { size: chunkData.length });\n return yield* deploymentApi.uploadPart(presignedUrl, chunkData, partNumber);\n });\n }),\n { concurrency: 3 }\n );\n\n yield* deploymentApi.completeUpload(deploymentId, uploadId, parts);\n });\n\n// ---------------------------------------------------------------------------\n// Poll deployment status + logs\n// ---------------------------------------------------------------------------\n\nconst pollDeployment = (deploymentId: DeploymentId) =>\n Effect.gen(function* () {\n const deploymentApi = yield* DeploymentApiService;\n let lastStatus: DeploymentStatus = 'PENDING';\n let logOffset = 0;\n\n yield* Console.log('Status: Pending');\n\n // Poll in a loop until terminal status\n yield* Effect.repeat(\n Effect.gen(function* () {\n // Check status\n const newStatus = yield* deploymentApi\n .getDeploymentStatus(deploymentId)\n .pipe(Effect.catchTag('DeploymentStatusError', () => Effect.succeed(lastStatus)));\n\n if (newStatus !== lastStatus) {\n lastStatus = newStatus;\n const label = newStatus.charAt(0) + newStatus.slice(1).toLowerCase();\n yield* Console.log(`Status: ${label}`);\n }\n\n // Fetch logs\n const logsPage = yield* deploymentApi\n .getLogs(deploymentId, { offset: logOffset, limit: 100 })\n .pipe(Effect.catchTag('DeploymentLogsFetchError', () => Effect.succeed(null)));\n\n if (logsPage) {\n for (const logEntry of logsPage.items) {\n logOffset++;\n yield* printLog(logEntry);\n }\n }\n\n // Check terminal states\n if (newStatus === 'ACTIVE') {\n yield* Console.log(`Deployed to https://${deploymentId}.gigadrivedev.com`);\n return yield* Effect.fail('done' as const);\n }\n\n if (newStatus === 'FAILED') {\n return yield* Effect.fail(\n new DeploymentFailedError({\n message: 'The deployment failed. Please check the logs for more information.',\n })\n );\n }\n }),\n Schedule.addDelay(Schedule.forever, () => Duration.seconds(1))\n ).pipe(\n Effect.catchAll((err) => {\n if (err === 'done') return Effect.void;\n return Effect.fail(err);\n })\n );\n });\n\nconst printLog = (logEntry: DeploymentLog) => {\n switch (logEntry.type) {\n case 'ERROR':\n return Console.error(logEntry.message);\n case 'WARN':\n return Console.warn(logEntry.message);\n default:\n return Console.log(logEntry.message);\n }\n};\n","import { FileSystem, Path } from '@effect/platform';\nimport { getFilesForPattern } from '@gigadrive/build-utils';\nimport archiver from 'archiver';\nimport { Effect } from 'effect';\nimport ignore, { type Ignore } from 'ignore';\nimport * as nodeFs from 'node:fs';\nimport * as nodeFsPromises from 'node:fs/promises';\nimport { ArchiveCreateError } from '../errors';\n\n// ---------------------------------------------------------------------------\n// Ignore file handling\n// ---------------------------------------------------------------------------\n\nconst IGNORE_FILE_NAMES = ['.gigadriveignore', '.vercelignore', '.dockerignore', '.nowignore'];\n\nconst readIgnoreFile = (fs: FileSystem.FileSystem, ignorePath: string): Effect.Effect<string[]> =>\n fs.readFileString(ignorePath, 'utf8').pipe(\n Effect.map((content) => content.split('\\n').filter((line: string) => line.trim() !== '')),\n Effect.catchAll(() => Effect.succeed([] as string[]))\n );\n\nconst collectIgnorePatterns = (\n fs: FileSystem.FileSystem,\n pathService: Path.Path,\n dir: string,\n baseDir: string,\n ignoreRules: Ignore\n): Effect.Effect<void> =>\n Effect.gen(function* () {\n const items = yield* fs\n .readDirectory(dir)\n .pipe(Effect.mapError(() => new ArchiveCreateError({ message: `Failed to read directory: ${dir}` })));\n\n for (const item of items) {\n const fullPath = pathService.join(dir, item);\n const relativePath = pathService.relative(baseDir, fullPath);\n // Use lstat to avoid following symlinks (matches original behavior)\n const stat = yield* Effect.tryPromise({\n try: () => nodeFsPromises.lstat(fullPath),\n catch: () => new ArchiveCreateError({ message: `Failed to stat: ${fullPath}` }),\n });\n\n if (stat.isDirectory()) {\n if (ignoreRules.ignores(`${relativePath}/`)) continue;\n\n for (const ignoreFileName of IGNORE_FILE_NAMES) {\n const ignoreFilePath = pathService.join(fullPath, ignoreFileName);\n const patterns = yield* readIgnoreFile(fs, ignoreFilePath);\n if (patterns.length > 0) {\n ignoreRules.add(\n patterns.map((pattern: string) =>\n pattern.startsWith('!')\n ? `!${pathService.join(relativePath, pattern.slice(1))}`\n : pathService.join(relativePath, pattern)\n )\n );\n }\n }\n\n yield* collectIgnorePatterns(fs, pathService, fullPath, baseDir, ignoreRules);\n }\n }\n }).pipe(Effect.catchAll(() => Effect.void));\n\nconst initializeIgnoreRules = (\n fs: FileSystem.FileSystem,\n pathService: Path.Path,\n baseDir: string\n): Effect.Effect<Ignore> =>\n Effect.gen(function* () {\n const ignoreRules = ignore();\n ignoreRules.add(['.git/', '**/.DS_Store', '**/Thumbs.db']);\n\n for (const ignoreFileName of IGNORE_FILE_NAMES) {\n const ignoreFilePath = pathService.join(baseDir, ignoreFileName);\n const patterns = yield* readIgnoreFile(fs, ignoreFilePath);\n if (patterns.length > 0) {\n ignoreRules.add(\n patterns.map((pattern: string) => (pattern.startsWith('!') ? `!${pattern.slice(1)}` : pattern))\n );\n }\n }\n\n yield* collectIgnorePatterns(fs, pathService, baseDir, baseDir, ignoreRules);\n return ignoreRules;\n });\n\nconst getFilesToInclude = (\n fs: FileSystem.FileSystem,\n pathService: Path.Path,\n dir: string,\n ignoreRules: Ignore\n): Effect.Effect<string[]> =>\n Effect.gen(function* () {\n const filesToInclude: string[] = [];\n\n const walkDir = (currentDir: string): Effect.Effect<void> =>\n Effect.gen(function* () {\n const items = yield* fs\n .readDirectory(currentDir)\n .pipe(Effect.mapError(() => new ArchiveCreateError({ message: `Failed to read directory: ${currentDir}` })));\n\n for (const item of items) {\n const fullPath = pathService.join(currentDir, item);\n const relativePath = pathService.relative(dir, fullPath);\n // Use lstat to avoid following symlinks (matches original behavior)\n const stat = yield* Effect.tryPromise({\n try: () => nodeFsPromises.lstat(fullPath),\n catch: () => new ArchiveCreateError({ message: `Failed to stat: ${fullPath}` }),\n });\n\n if (stat.isDirectory()) {\n if (!ignoreRules.ignores(`${relativePath}/`)) {\n yield* walkDir(fullPath);\n }\n } else {\n if (!ignoreRules.ignores(relativePath)) {\n filesToInclude.push(fullPath);\n }\n }\n }\n }).pipe(Effect.catchAll(() => Effect.void));\n\n yield* walkDir(dir);\n return filesToInclude;\n });\n\n// ---------------------------------------------------------------------------\n// ArchiveService\n// ---------------------------------------------------------------------------\n\nexport class ArchiveService extends Effect.Service<ArchiveService>()('ArchiveService', {\n accessors: true,\n\n effect: Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const pathService = yield* Path.Path;\n\n const createZipArchive = Effect.fn('ArchiveService.createZipArchive')(function* (\n inputDir: string,\n outputFile: string,\n options: {\n whitelist?: string[];\n excludeFiles?: string[];\n useIgnoreFiles?: boolean;\n useManagedIgnore?: boolean;\n } = {}\n ) {\n yield* Effect.annotateCurrentSpan('inputDir', inputDir);\n yield* Effect.annotateCurrentSpan('outputFile', outputFile);\n yield* Effect.log('Creating zip archive', { inputDir, outputFile });\n\n const ignoreRules =\n options.useIgnoreFiles !== false ? yield* initializeIgnoreRules(fs, pathService, inputDir) : ignore();\n\n const filesToInclude = options.whitelist\n ? yield* Effect.tryPromise({\n try: () =>\n Promise.all(\n options.whitelist!.map((file) => getFilesForPattern(file, inputDir, options.excludeFiles ?? []))\n ),\n catch: (error) =>\n new ArchiveCreateError({\n message: 'Failed to resolve whitelist patterns',\n cause: error instanceof Error ? error.message : String(error),\n }),\n })\n : yield* Effect.gen(function* () {\n // Add excludeFiles patterns (from framework detection or user config) to ignore rules\n if (options.excludeFiles && options.excludeFiles.length > 0) {\n ignoreRules.add(options.excludeFiles);\n }\n return yield* getFilesToInclude(fs, pathService, inputDir, ignoreRules).pipe(\n Effect.map((files) => [files])\n );\n });\n\n // Remove existing archive if present\n const archiveExists = yield* fs.exists(outputFile).pipe(Effect.catchAll(() => Effect.succeed(false)));\n if (archiveExists) {\n yield* fs.remove(outputFile).pipe(\n Effect.mapError(\n (error) =>\n new ArchiveCreateError({\n message: `Failed to remove existing archive: ${String(error)}`,\n })\n )\n );\n }\n\n yield* Effect.tryPromise({\n try: () =>\n new Promise<void>((resolve, reject) => {\n // archiver requires a Node.js writable stream\n const output = nodeFs.createWriteStream(outputFile);\n const archive = archiver('zip', { zlib: { level: 9 } });\n\n output.on('close', () => resolve());\n output.on('error', reject);\n archive.on('error', reject);\n archive.pipe(output);\n\n for (const file of filesToInclude.flat()) {\n archive.file(file, { name: pathService.relative(inputDir, file) });\n }\n\n void archive.finalize();\n }),\n catch: (error) =>\n new ArchiveCreateError({\n message: 'Failed to create zip archive',\n cause: error instanceof Error ? error.message : String(error),\n }),\n });\n\n const fileInfo = yield* fs.stat(outputFile).pipe(\n Effect.mapError(\n (error) =>\n new ArchiveCreateError({\n message: `Failed to stat archive: ${String(error)}`,\n })\n )\n );\n const size = Number(fileInfo.size);\n yield* Effect.log('Archive created', { size });\n\n return { path: outputFile, size };\n });\n\n return { createZipArchive };\n }),\n}) {}\n","import { objectToQueryString } from '@gigadrive/commons';\nimport { Config, Effect, Schema } from 'effect';\nimport type { DeploymentId, DeploymentLogPage, UploadId } from '../domain';\nimport {\n DeploymentAuthError,\n DeploymentCreateError,\n DeploymentLogsFetchError,\n DeploymentStatusError,\n PresignedUrlError,\n UploadCompleteError,\n UploadPartError,\n UploadStartError,\n} from '../errors';\nimport { AuthService } from './auth';\n\n// ---------------------------------------------------------------------------\n// API response schemas\n// ---------------------------------------------------------------------------\n\nconst CreateDeploymentResponse = Schema.Struct({ id: Schema.String });\nconst StartUploadResponse = Schema.Struct({ uploadId: Schema.String });\nconst PresignedUrlResponse = Schema.Struct({ url: Schema.String });\nconst DeploymentStatusResponse = Schema.Struct({\n status: Schema.Literal('PENDING', 'BUILDING', 'PROVISIONING', 'FAILED', 'ACTIVE', 'SUSPENDED'),\n});\nconst DeploymentLogPageResponse = Schema.Struct({\n totalItems: Schema.Number,\n limit: Schema.Number,\n offset: Schema.Number,\n items: Schema.Array(\n Schema.Struct({\n id: Schema.String,\n message: Schema.String,\n type: Schema.Literal('INFO', 'ERROR', 'WARN'),\n createdAt: Schema.String,\n })\n ),\n});\n\n// ---------------------------------------------------------------------------\n// DeploymentApiService\n// ---------------------------------------------------------------------------\n\nconst ApiBaseUrl = Config.string('GIGADRIVE_API_BASE_URL').pipe(Config.withDefault('http://localhost:3000'));\n\nexport class DeploymentApiService extends Effect.Service<DeploymentApiService>()('DeploymentApiService', {\n accessors: true,\n\n effect: Effect.gen(function* () {\n const baseUrl = yield* ApiBaseUrl;\n const authService = yield* AuthService;\n\n const getAuthHeaders: Effect.Effect<{ Authorization: string }, DeploymentAuthError> = Effect.gen(function* () {\n const token: string = yield* authService.getAccessToken.pipe(\n Effect.mapError((err) => new DeploymentAuthError({ message: `Authentication failed: ${err.message}` }))\n );\n return { Authorization: `Bearer ${token}` };\n });\n\n const createDeployment = Effect.fn('DeploymentApiService.createDeployment')(function* (applicationId: string) {\n yield* Effect.annotateCurrentSpan('applicationId', applicationId);\n yield* Effect.log('Creating deployment', { applicationId });\n\n const authHeaders = yield* getAuthHeaders;\n const response = yield* Effect.tryPromise({\n try: () =>\n fetch(`${baseUrl}/${applicationId}/deployments`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...authHeaders },\n body: JSON.stringify({}),\n }),\n catch: (error) =>\n new DeploymentCreateError({\n message: `Failed to create deployment: ${error instanceof Error ? error.message : String(error)}`,\n }),\n });\n\n if (!response.ok) {\n const body = yield* Effect.tryPromise({\n try: () => response.text(),\n catch: () =>\n new DeploymentCreateError({\n message: 'Failed to read deployment creation error',\n statusCode: response.status,\n }),\n });\n return yield* Effect.fail(\n new DeploymentCreateError({\n message: `Failed to create deployment: ${body}`,\n statusCode: response.status,\n })\n );\n }\n\n const json = yield* Effect.tryPromise({\n try: () => response.json(),\n catch: () => new DeploymentCreateError({ message: 'Failed to parse deployment response' }),\n });\n\n const decoded = yield* Schema.decodeUnknown(CreateDeploymentResponse)(json).pipe(\n Effect.mapError(() => new DeploymentCreateError({ message: 'Invalid deployment response schema' }))\n );\n\n yield* Effect.log('Deployment created', { deploymentId: decoded.id });\n return decoded.id as DeploymentId;\n });\n\n const startMultipartUpload = Effect.fn('DeploymentApiService.startMultipartUpload')(function* (\n deploymentId: DeploymentId\n ) {\n yield* Effect.annotateCurrentSpan('deploymentId', deploymentId);\n\n const authHeaders = yield* getAuthHeaders;\n const response = yield* Effect.tryPromise({\n try: () =>\n fetch(`${baseUrl}/deployments/${deploymentId}/pre-signed-url/start`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json', ...authHeaders },\n }),\n catch: (error) =>\n new UploadStartError({\n message: `Failed to start multipart upload: ${error instanceof Error ? error.message : String(error)}`,\n }),\n });\n\n if (!response.ok) {\n const body = yield* Effect.tryPromise({\n try: () => response.text(),\n catch: () => new UploadStartError({ message: 'Failed to read upload start error' }),\n });\n return yield* Effect.fail(\n new UploadStartError({ message: `Failed to start multipart upload: ${body}`, statusCode: response.status })\n );\n }\n\n const json = yield* Effect.tryPromise({\n try: () => response.json(),\n catch: () => new UploadStartError({ message: 'Failed to parse upload start response' }),\n });\n\n const decoded = yield* Schema.decodeUnknown(StartUploadResponse)(json).pipe(\n Effect.mapError(() => new UploadStartError({ message: 'Invalid upload start response schema' }))\n );\n\n return decoded.uploadId as UploadId;\n });\n\n const getPresignedUrl = Effect.fn('DeploymentApiService.getPresignedUrl')(function* (\n deploymentId: DeploymentId,\n uploadId: UploadId,\n partNumber: number\n ) {\n const authHeaders = yield* getAuthHeaders;\n const response = yield* Effect.tryPromise({\n try: () =>\n fetch(\n `${baseUrl}/deployments/${deploymentId}/pre-signed-url/part?uploadId=${uploadId}&partNumber=${partNumber}`,\n {\n method: 'GET',\n headers: { 'Content-Type': 'application/json', ...authHeaders },\n }\n ),\n catch: (error) =>\n new PresignedUrlError({\n message: `Failed to get presigned URL: ${error instanceof Error ? error.message : String(error)}`,\n partNumber,\n }),\n });\n\n if (!response.ok) {\n const body = yield* Effect.tryPromise({\n try: () => response.text(),\n catch: () => new PresignedUrlError({ message: 'Failed to read presigned URL error', partNumber }),\n });\n return yield* Effect.fail(\n new PresignedUrlError({ message: `Failed to get presigned URL: ${body}`, partNumber })\n );\n }\n\n const json = yield* Effect.tryPromise({\n try: () => response.json(),\n catch: () => new PresignedUrlError({ message: 'Failed to parse presigned URL response', partNumber }),\n });\n\n const decoded = yield* Schema.decodeUnknown(PresignedUrlResponse)(json).pipe(\n Effect.mapError(() => new PresignedUrlError({ message: 'Invalid presigned URL response schema', partNumber }))\n );\n\n return decoded.url;\n });\n\n const uploadPart = Effect.fn('DeploymentApiService.uploadPart')(function* (\n presignedUrl: string,\n data: Buffer,\n partNumber: number\n ) {\n yield* Effect.annotateCurrentSpan('partNumber', partNumber);\n yield* Effect.annotateCurrentSpan('size', data.length);\n\n const response = yield* Effect.tryPromise({\n try: () =>\n fetch(presignedUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/zip',\n 'Content-Length': String(data.length),\n },\n body: data,\n }),\n catch: (error) =>\n new UploadPartError({\n message: `Failed to upload part ${partNumber}: ${error instanceof Error ? error.message : String(error)}`,\n partNumber,\n }),\n });\n\n if (!response.ok) {\n return yield* Effect.fail(\n new UploadPartError({\n message: `Failed to upload part ${partNumber}: ${response.statusText}`,\n partNumber,\n })\n );\n }\n\n const etag = response.headers.get('ETag');\n if (!etag) {\n return yield* Effect.fail(\n new UploadPartError({ message: `No ETag received for part ${partNumber}`, partNumber })\n );\n }\n\n return { partNumber, etag };\n });\n\n const completeUpload = Effect.fn('DeploymentApiService.completeUpload')(function* (\n deploymentId: DeploymentId,\n uploadId: UploadId,\n parts: Array<{ partNumber: number; etag: string }>\n ) {\n yield* Effect.annotateCurrentSpan('deploymentId', deploymentId);\n yield* Effect.annotateCurrentSpan('partsCount', parts.length);\n\n const authHeaders = yield* getAuthHeaders;\n const response = yield* Effect.tryPromise({\n try: () =>\n fetch(`${baseUrl}/deployments/${deploymentId}/pre-signed-url/complete`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...authHeaders },\n body: JSON.stringify({ uploadId, parts }),\n }),\n catch: (error) =>\n new UploadCompleteError({\n message: `Failed to complete upload: ${error instanceof Error ? error.message : String(error)}`,\n }),\n });\n\n if (!response.ok) {\n const body = yield* Effect.tryPromise({\n try: () => response.text(),\n catch: () => new UploadCompleteError({ message: 'Failed to read upload complete error' }),\n });\n return yield* Effect.fail(new UploadCompleteError({ message: `Failed to complete upload: ${body}` }));\n }\n\n yield* Effect.log('Upload completed successfully');\n });\n\n const getDeploymentStatus = Effect.fn('DeploymentApiService.getDeploymentStatus')(function* (\n deploymentId: DeploymentId\n ) {\n const authHeaders = yield* getAuthHeaders;\n const response = yield* Effect.tryPromise({\n try: () =>\n fetch(`${baseUrl}/deployments/${deploymentId}`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json', ...authHeaders },\n }),\n catch: (error) =>\n new DeploymentStatusError({\n message: `Failed to get deployment status: ${error instanceof Error ? error.message : String(error)}`,\n }),\n });\n\n if (!response.ok) {\n const body = yield* Effect.tryPromise({\n try: () => response.text(),\n catch: () => new DeploymentStatusError({ message: 'Failed to read deployment status error' }),\n });\n return yield* Effect.fail(new DeploymentStatusError({ message: `Failed to get deployment status: ${body}` }));\n }\n\n const json = yield* Effect.tryPromise({\n try: () => response.json(),\n catch: () => new DeploymentStatusError({ message: 'Failed to parse deployment status response' }),\n });\n\n const decoded = yield* Schema.decodeUnknown(DeploymentStatusResponse)(json).pipe(\n Effect.mapError(() => new DeploymentStatusError({ message: 'Invalid deployment status response schema' }))\n );\n\n return decoded.status;\n });\n\n const getLogs = Effect.fn('DeploymentApiService.getLogs')(function* (\n deploymentId: DeploymentId,\n options?: { offset: number; limit: number; 'createdAt[gt]'?: string }\n ) {\n const authHeaders = yield* getAuthHeaders;\n const response = yield* Effect.tryPromise({\n try: () =>\n fetch(`${baseUrl}/deployments/${deploymentId}/logs${objectToQueryString(options)}`, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json', ...authHeaders },\n }),\n catch: (error) =>\n new DeploymentLogsFetchError({\n message: `Failed to get logs: ${error instanceof Error ? error.message : String(error)}`,\n }),\n });\n\n if (!response.ok) {\n const body = yield* Effect.tryPromise({\n try: () => response.text(),\n catch: () => new DeploymentLogsFetchError({ message: 'Failed to read logs error' }),\n });\n return yield* Effect.fail(new DeploymentLogsFetchError({ message: `Failed to get logs: ${body}` }));\n }\n\n const json = yield* Effect.tryPromise({\n try: () => response.json(),\n catch: () => new DeploymentLogsFetchError({ message: 'Failed to parse logs response' }),\n });\n\n const decoded = yield* Schema.decodeUnknown(DeploymentLogPageResponse)(json).pipe(\n Effect.mapError(() => new DeploymentLogsFetchError({ message: 'Invalid logs response schema' }))\n );\n\n return decoded as DeploymentLogPage;\n });\n\n return {\n createDeployment,\n startMultipartUpload,\n getPresignedUrl,\n uploadPart,\n completeUpload,\n getDeploymentStatus,\n getLogs,\n };\n }),\n}) {}\n","import { Command } from '@effect/cli';\nimport { Console, Effect } from 'effect';\nimport { AuthService } from '../../services/auth';\n\nexport const whoamiCommand = Command.make('whoami', {}, () =>\n Effect.gen(function* () {\n const auth = yield* AuthService;\n const info = yield* auth.getUserInfo;\n yield* Console.log(JSON.stringify(info, null, 2));\n }).pipe(\n Effect.catchTags({\n NotAuthenticatedError: () => Console.log('You are not logged in. Run \"gigadrive login\" to authenticate.'),\n UserInfoFetchError: (err) => Console.error(`Failed to retrieve user info: ${err.message}`),\n OAuthDiscoveryError: (err) => Console.error(`Failed to retrieve user info: ${err.message}`),\n })\n )\n);\n"],"mappings":"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","names":["Command","NetworkConfigLive","Effect","FileSystem","Path","exec","Effect","pm","buildCommand","Effect","FileSystem","Path","exec","Command","Effect","Command","Console","Effect","Effect","Effect","Command","Effect","Console","Command","Effect","Command","Console","Effect","Console","Effect","Option","FileSystem","Path","Effect","Schema","Schema","Effect","FileSystem","Path","Schema","Effect","Schema","Schema","Effect","Effect","Console","Option","Command","Effect","Console","Command","Effect","Command","FileSystem","Path","Console","Effect","os","FileSystem","Path","Effect","Effect","FileSystem","Path","Config","Effect","Schema","Schema","Config","Effect","Command","Effect","Path","Console","FileSystem","Command","Effect","Command","Console","Effect","Command","Effect","Console","Command","Effect","NetworkConfigLive"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gigadrive",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/Gigadrive/sdk.git",
|
|
@@ -18,29 +18,33 @@
|
|
|
18
18
|
"dist"
|
|
19
19
|
],
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@
|
|
21
|
+
"@effect/cli": "^0.73.2",
|
|
22
|
+
"@effect/platform": "^0.94.5",
|
|
23
|
+
"@effect/platform-node": "^0.104.1",
|
|
22
24
|
"archiver": "^7.0.1",
|
|
23
|
-
"
|
|
24
|
-
"commander": "^13.1.0",
|
|
25
|
-
"consola": "^3.4.2",
|
|
25
|
+
"effect": "^3.19.17",
|
|
26
26
|
"ignore": "^7.0.5",
|
|
27
|
-
"
|
|
28
|
-
"react-devtools-core": "^6.1.5",
|
|
27
|
+
"open": "^10.2.0",
|
|
29
28
|
"@gigadrive/build-utils": "1.0.1",
|
|
30
|
-
"@gigadrive/
|
|
31
|
-
"@gigadrive/
|
|
29
|
+
"@gigadrive/commons": "2.1.1",
|
|
30
|
+
"@gigadrive/network-config": "3.0.0"
|
|
32
31
|
},
|
|
33
32
|
"devDependencies": {
|
|
33
|
+
"@effect/language-service": "^0.73.1",
|
|
34
34
|
"@types/archiver": "^6.0.3",
|
|
35
|
-
"@types/react": "^18.3.24",
|
|
36
35
|
"esbuild": "^0.25.10",
|
|
37
36
|
"typescript": "^5.9.2"
|
|
38
37
|
},
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=20.0.0"
|
|
40
|
+
},
|
|
39
41
|
"publishConfig": {
|
|
40
42
|
"access": "public"
|
|
41
43
|
},
|
|
42
44
|
"scripts": {
|
|
43
45
|
"build": "tsup",
|
|
44
|
-
"clean": "rm -rf dist"
|
|
46
|
+
"clean": "rm -rf dist",
|
|
47
|
+
"dev": "pnpm build && node dist/index.mjs",
|
|
48
|
+
"typecheck": "tsc --noEmit"
|
|
45
49
|
}
|
|
46
50
|
}
|