@moneydevkit/create 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -185,6 +185,14 @@ function ensureEnvFileExists(filePath) {
185
185
  import_node_fs.default.writeFileSync(filePath, "", "utf8");
186
186
  }
187
187
  }
188
+ function resolveLocalEnvPath(options) {
189
+ const trimmed = options.organizationId?.trim();
190
+ if (!trimmed) {
191
+ return void 0;
192
+ }
193
+ const homeDir = import_node_os.default.homedir();
194
+ return import_node_path2.default.join(homeDir, ".mdk", trimmed, ".env");
195
+ }
188
196
  function isValidHttpUrl(value) {
189
197
  if (!value) return false;
190
198
  try {
@@ -444,6 +452,14 @@ async function main() {
444
452
  const existingEnv = readEnvFile(envPath);
445
453
  const preview = renderEnvPreview(existingEnv, updates);
446
454
  writeEnvFile(envPath, existingEnv, updates);
455
+ const localEnvPath = resolveLocalEnvPath({
456
+ organizationId: result.credentials.organizationId
457
+ });
458
+ if (localEnvPath) {
459
+ ensureEnvFileExists(localEnvPath);
460
+ const localEnv = readEnvFile(localEnvPath);
461
+ writeEnvFile(localEnvPath, localEnv, updates);
462
+ }
447
463
  if (!jsonMode) {
448
464
  p.note(preview, "Env file updated");
449
465
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/env-target.ts"],"sourcesContent":["import { createORPCClient } from \"@orpc/client\";\nimport { RPCLink } from \"@orpc/client/fetch\";\nimport * as p from \"@clack/prompts\";\nimport minimist from \"minimist\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport open from \"open\";\nimport clipboard from \"clipboardy\";\nimport setCookieParser, { Cookie } from \"set-cookie-parser\";\nimport { generateMnemonic as generateBip39Mnemonic } from \"bip39\";\nimport { contract } from \"@moneydevkit/api-contract\";\nimport type { ContractRouterClient } from \"@orpc/contract\";\nimport type {\n\tBootstrapOnboardingResponse,\n\tStartDeviceAuthResponse,\n} from \"@moneydevkit/api-contract\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { deriveProjectName, resolveEnvTarget } from \"./utils/env-target.js\";\n\ntype Flags = {\n\tjson: boolean;\n\tnoClipboard: boolean;\n\tnoOpen: boolean;\n\tyes: boolean;\n\tbaseUrl?: string;\n\tenvFile?: string;\n\tprojectName?: string;\n\tmanualLogin?: string;\n\tforceNewWebhook?: boolean;\n\twebhookUrl?: string;\n};\n\nconst DEFAULT_BASE_URL = \"https://moneydevkit.com\";\nconst DEFAULT_ENV_FILE = \".env.local\";\n\nclass CookieJar {\n\tprivate store = new Map<string, string>();\n\n\tconstructor(initial?: string) {\n\t\tif (initial) {\n\t\t\tthis.add(initial);\n\t\t}\n\t}\n\n\tadd(input: string | string[]) {\n\t\tconst cookies = Array.isArray(input) ? input : [input];\n\t\tfor (const line of cookies) {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (!trimmed) continue;\n\t\t\tconst parsed = setCookieParser.parse(trimmed);\n\t\t\tconst handle = (cookie: Cookie) => {\n\t\t\t\tif (cookie?.name && cookie.value !== undefined) {\n\t\t\t\t\tthis.store.set(cookie.name, cookie.value);\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (Array.isArray(parsed)) {\n\t\t\t\tfor (const cookie of parsed) {\n\t\t\t\t\thandle(cookie);\n\t\t\t\t}\n\t\t\t} else if (parsed && typeof parsed === \"object\") {\n\t\t\t\thandle(parsed);\n\t\t\t}\n\t\t}\n\t}\n\n\theader(): string | undefined {\n\t\tif (this.store.size === 0) return undefined;\n\t\treturn Array.from(this.store.entries())\n\t\t\t.map(([name, value]) => `${name}=${value}`)\n\t\t\t.join(\"; \");\n\t}\n}\n\nfunction parseFlags(argv: string[]): Flags {\n\tconst result = minimist(argv, {\n\t\tboolean: [\"json\", \"no-clipboard\", \"no-open\", \"force-new-webhook\", \"yes\"],\n\t\tstring: [\n\t\t\t\"base-url\",\n\t\t\t\"env-target\",\n\t\t\t\"project-name\",\n\t\t\t\"manual-login\",\n\t\t\t\"webhook-url\",\n\t\t],\n\t\talias: {\n\t\t\tjson: \"j\",\n\t\t},\n\t\tdefault: {\n\t\t\t\"no-clipboard\": false,\n\t\t\t\"no-open\": false,\n\t\t\tjson: false,\n\t\t\t\"force-new-webhook\": false,\n\t\t\tyes: false,\n\t\t},\n\t});\n\nreturn {\n\tjson: Boolean(result.json),\n\tnoClipboard: Boolean(result[\"no-clipboard\"]),\n\tnoOpen: Boolean(result[\"no-open\"]),\n\tyes: Boolean(result.yes),\n\tbaseUrl: result[\"base-url\"],\n\tenvFile: result[\"env-target\"],\n\t\tprojectName:\n\t\t\ttypeof result[\"project-name\"] === \"string\"\n\t\t\t\t? result[\"project-name\"]\n\t\t\t\t: undefined,\n\t\tmanualLogin:\n\t\t\ttypeof result[\"manual-login\"] === \"string\"\n\t\t\t\t? result[\"manual-login\"]\n\t\t\t\t: undefined,\n\t\tforceNewWebhook: Boolean(result[\"force-new-webhook\"]),\n\t\twebhookUrl:\n\t\t\ttypeof result[\"webhook-url\"] === \"string\"\n\t\t\t\t? result[\"webhook-url\"]\n\t\t\t\t: undefined,\n\t};\n}\n\nfunction normalizeDirectory(dir: string): string {\n\tif (path.isAbsolute(dir)) return dir;\n\treturn path.resolve(process.cwd(), dir);\n}\n\nfunction ensureDirectoryExists(dir: string) {\n\tif (!fs.existsSync(dir)) {\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t}\n}\n\nfunction readEnvFile(filePath: string): Map<string, string> {\n\tconst env = new Map<string, string>();\n\tif (!fs.existsSync(filePath)) {\n\t\treturn env;\n\t}\n\tconst contents = fs.readFileSync(filePath, \"utf8\");\n\tfor (const line of contents.split(/\\r?\\n/)) {\n\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\tconst [key, ...rest] = line.split(\"=\");\n\t\tif (!key) continue;\n\t\tenv.set(key.trim(), rest.join(\"=\").trim());\n\t}\n\treturn env;\n}\n\nfunction renderEnvPreview(\n\t_original: Map<string, string>,\n\tupdates: Record<string, string>,\n): string {\n\tconst lines: string[] = [\"Writing the following values:\", \"\"];\n\tfor (const [key, value] of Object.entries(updates)) {\n\t\tlines.push(` ${key}=${value}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction writeEnvFile(\n\tfilePath: string,\n\texisting: Map<string, string>,\n\tupdates: Record<string, string>,\n) {\n\tfor (const [key, value] of Object.entries(updates)) {\n\t\texisting.set(key, value);\n\t}\n\tconst content =\n\t\tArray.from(existing.entries())\n\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t.map(([key, value]) => `${key}=${value}`)\n\t\t\t.join(os.EOL) + os.EOL;\n\tfs.writeFileSync(filePath, content, \"utf8\");\n}\n\nfunction ensureEnvFileExists(filePath: string) {\n\tconst dir = path.dirname(filePath);\n\tensureDirectoryExists(dir);\n\tif (!fs.existsSync(filePath)) {\n\t\tfs.writeFileSync(filePath, \"\", \"utf8\");\n\t}\n}\n\nfunction isValidHttpUrl(value?: string): boolean {\n\tif (!value) return false;\n\ttry {\n\t\tconst parsed = new URL(value);\n\t\treturn parsed.protocol === \"https:\" || parsed.protocol === \"http:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction createRpcClient(\n\tbaseUrl: string,\n\tjar: CookieJar,\n): ContractRouterClient<typeof contract> {\n\tconst link = new RPCLink({\n\t\turl: `${baseUrl.replace(/\\/$/, \"\")}/rpc`,\n\t\theaders: () => {\n\t\t\tconst cookieHeader = jar.header();\n\t\t\treturn cookieHeader ? { Cookie: cookieHeader } : {};\n\t\t},\n\t\tfetch: async (input, init) => {\n\t\t\tconst response = await fetch(input, init);\n\t\t\tconst setCookie = response.headers.getSetCookie?.() ?? [];\n\t\t\tif (setCookie.length > 0) {\n\t\t\t\tjar.add(setCookie);\n\t\t\t}\n\t\t\treturn response;\n\t\t},\n\t});\n\n\treturn createORPCClient(link) as ContractRouterClient<typeof contract>;\n}\n\nasync function runDeviceFlow(options: {\n\tflags: Flags;\n\tbaseUrl: string;\n\tcookies: CookieJar;\n\tprojectName?: string;\n\twebhookUrl: string;\n}): Promise<{\n\tdevice: StartDeviceAuthResponse;\n\tbootstrapToken: string;\n\tcredentials: BootstrapOnboardingResponse;\n\tmnemonic: string;\n}> {\n\tconst client = createRpcClient(options.baseUrl, options.cookies);\nconst manualSessionCookie = options.flags.manualLogin;\nconst webhookUrl = options.webhookUrl;\n\nconst device = await client.onboarding.startDeviceAuth({\n clientDisplayName: options.projectName,\n webhookUrl,\n forceNewWebhook: options.flags.forceNewWebhook,\n});\n\n\tif (manualSessionCookie) {\n\t\tconst response = await fetch(\n\t\t\t`${options.baseUrl.replace(/\\/$/, \"\")}/api/cli/device/authorize`,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\tCookie: manualSessionCookie,\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tcode: device.userCode,\n\t\t\t\t\tforceNewWebhook: options.flags.forceNewWebhook ?? false,\n\t\t\t\t}),\n\t\t\t},\n\t\t);\n\n\t\tif (!response.ok) {\n\t\t\tconst body = (await response.json().catch(() => ({}))) as {\n\t\t\t\terror?: string;\n\t\t\t};\n\t\t\tthrow new Error(\n\t\t\t\tbody.error ??\n\t\t\t\t\t`Manual authorize failed with status ${response.status}`,\n\t\t\t);\n\t\t}\n\t} else {\n if (!options.flags.json) {\n p.note(\n [\n `Device code: ${device.userCode}`,\n `Webhook URL: ${webhookUrl}`,\n \"Open the authorization page, click Authorize, then return to this terminal.\",\n ].join(\"\\n\"),\n \"Authorize this device\",\n );\n }\n\n\t\tif (!options.flags.noOpen && !options.flags.json) {\n\t\t\ttry {\n\t\t\t\tawait open(device.verificationUri, { wait: false });\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Unable to open browser automatically (${(error as Error).message}).`,\n\t\t\t\t);\n\t\t\t\tconsole.warn(`Open this URL manually: ${device.verificationUri}`);\n\t\t\t}\n\t\t} else if (!options.flags.json) {\n\t\t\tconsole.log(`Open this URL in your browser: ${device.verificationUri}`);\n\t\t}\n\n\t\tconst spinner = options.flags.json ? null : p.spinner();\n\t\tspinner?.start(\"Waiting for authorization...\");\n\n\t\tconst deadline = Date.now() + device.expiresIn * 1000;\n\t\tlet bootstrapToken: string | undefined;\n\n\t\twhile (Date.now() < deadline) {\n\t\t\tconst poll = await client.onboarding.pollDeviceAuth({\n\t\t\t\tdeviceCode: device.deviceCode,\n\t\t\t});\n\n\t\t\tif (poll.status === \"authorized\") {\n\t\t\t\tbootstrapToken = poll.bootstrapToken;\n\t\t\t\tspinner?.stop(\"Device authorized.\");\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (poll.status === \"expired\") {\n\t\t\t\tspinner?.stop(\"Device code expired.\");\n\t\t\t\tthrow new Error(\"Device code expired before authorization.\");\n\t\t\t}\n\n\t\t\tif (poll.status === \"denied\") {\n\t\t\t\tspinner?.stop(\"Authorization denied.\");\n\t\t\t\tthrow new Error(\"Authorization was denied in the dashboard.\");\n\t\t\t}\n\n const secondsLeft = Math.max(\n 0,\n Math.floor((deadline - Date.now()) / 1000),\n );\n spinner?.message(\n `Waiting for authorization (${secondsLeft}s remaining)`,\n\t\t\t);\n\t\t\tawait delay(device.interval * 1000);\n\t\t}\n\n\t\tif (!bootstrapToken) {\n\t\t\tthrow new Error(\"Timed out waiting for authorization.\");\n\t\t}\n\n const credentials = await client.onboarding.bootstrap({\n bootstrapToken,\n projectName: options.projectName,\n webhookUrl,\n forceNewWebhook: options.flags.forceNewWebhook,\n\t\t});\n\n\t\tconst mnemonic = generateBip39Mnemonic(128);\n\n\t\treturn {\n\t\t\tdevice,\n\t\t\tbootstrapToken,\n\t\t\tcredentials,\n\t\t\tmnemonic,\n\t\t};\n\t}\n\n\t// Manual path: poll once to get the bootstrap token.\n\tconst pollResult = await client.onboarding.pollDeviceAuth({\n\t\tdeviceCode: device.deviceCode,\n\t});\n\n\tif (pollResult.status !== \"authorized\") {\n\t\tthrow new Error(\n\t\t\t`Unable to obtain bootstrap token (status: ${pollResult.status}).`,\n\t\t);\n\t}\n\n\tconst credentials = await client.onboarding.bootstrap({\n\t\tbootstrapToken: pollResult.bootstrapToken,\n\t\tprojectName: options.projectName,\n\t\twebhookUrl,\n\t\tforceNewWebhook: options.flags.forceNewWebhook,\n\t});\n\n\tconst mnemonic = generateBip39Mnemonic(128);\n\n\treturn {\n\t\tdevice,\n\t\tbootstrapToken: pollResult.bootstrapToken,\n\t\tcredentials,\n\t\tmnemonic,\n\t};\n}\n\nasync function main() {\n\tconst flags = parseFlags(process.argv.slice(2));\n\tconst jsonMode = flags.json;\n\n\tif (!jsonMode) {\n\t\tp.intro(\"Money Dev Kit – @moneydevkit/create\");\n\t}\n\n\tconst baseUrl = flags.baseUrl ?? DEFAULT_BASE_URL;\n\tconst cookies = new CookieJar(flags.manualLogin);\n\n\tconst envFileOverride = process.env.MDK_ENV_FILE;\n\tconst envResolution = resolveEnvTarget({\n\t\texplicitTarget: flags.envFile,\n\t\toverrideTarget: envFileOverride,\n\t\tcwd: process.cwd(),\n\t\tdefaultFilename: DEFAULT_ENV_FILE,\n\t});\n\tconst { providedExplicitly } = envResolution;\n\tlet projectDir = envResolution.projectDir;\n\tlet envFile = envResolution.envFile;\n\n\tif (!providedExplicitly && !jsonMode && !flags.envFile) {\n\t\tconst dirPrompt = await p.text({\n\t\t\tmessage: \"Where should we store your MDK credentials?\",\n\t\t\tinitialValue: projectDir,\n\t\t});\n\n\t\tif (p.isCancel(dirPrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tprojectDir = dirPrompt;\n\t}\n\n\tprojectDir = normalizeDirectory(projectDir);\n\tensureDirectoryExists(projectDir);\n\n\tif (!flags.envFile && !envFileOverride && !jsonMode) {\n\t\tconst envPrompt = await p.text({\n\t\t\tmessage: \"Env file to update\",\n\t\t\tinitialValue: envFile,\n\t\t});\n\n\t\tif (p.isCancel(envPrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tenvFile = envPrompt.trim() || DEFAULT_ENV_FILE;\n\t}\n\n\tconst envPath = path.join(projectDir, envFile);\n\tconst existingEnvValues = readEnvFile(envPath);\n\tconst mnemonicAlreadySet = existingEnvValues.get(\"MDK_MNEMONIC\")?.trim();\n\n\tif (mnemonicAlreadySet) {\n\t\tconst warningMessage =\n\t\t\t\"We found MDK_MNEMONIC already set in your project. Your mnemonic is the key to your wallet. If you've already deployed and taken payments with this mnemonic and change it, you will lose access to your funds. If you want to generate a new mnemonic, delete MDK_MNEMONIC from your .env and try again.\";\n\n\t\tif (jsonMode) {\n\t\t\tconsole.error(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\terror: { message: warningMessage },\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tp.cancel(warningMessage);\n\t\t}\n\n\t\tprocess.exit(1);\n\t}\n\n\tlet webhookUrl = flags.webhookUrl?.trim();\n\tif ((!webhookUrl || !isValidHttpUrl(webhookUrl)) && jsonMode) {\n\t\tthrow new Error(\"Provide a valid --webhook-url when running in --json mode.\");\n\t}\n\n\twhile (!webhookUrl) {\n\t\tconst webhookInput = await p.text({\n\t\t\tmessage: \"Webhook URL for your application\",\n\t\t\tinitialValue: \"https://\",\n\t\t\tplaceholder: \"https://yourapp.com\",\n\t\t\tvalidate: (value) =>\n\t\t\t\tisValidHttpUrl(value?.trim())\n\t\t\t\t\t? undefined\n\t\t\t\t\t: \"Enter a valid http(s) URL (e.g. https://yourapp.com)\",\n\t\t});\n\n\t\tif (p.isCancel(webhookInput)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\twebhookUrl = webhookInput.trim();\n\t}\n\n\tlet projectName = flags.projectName?.trim();\n\tif (!projectName && !jsonMode) {\n\t\tconst namePrompt = await p.text({\n\t\t\tmessage: \"Project name (used for the generated API key)\",\n\t\t\tplaceholder: \"Optional: e.g. My Next.js Store\",\n\t\t});\n\t\tif (p.isCancel(namePrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tprojectName = namePrompt.trim() || undefined;\n\t}\n\n\tprojectName = deriveProjectName(projectName, webhookUrl);\n\n\ttry {\n\t\tconst result = await runDeviceFlow({\n\t\t\tflags,\n\t\t\tbaseUrl,\n\t\t\tcookies,\n\t\t\tprojectName,\n\t\t\twebhookUrl,\n\t\t});\n\n\t\tconst updates: Record<string, string> = {\n\t\t\tMDK_ACCESS_TOKEN: result.credentials.apiKey,\n\t\t\tMDK_WEBHOOK_SECRET: result.credentials.webhookSecret,\n\t\t\tMDK_MNEMONIC: result.mnemonic,\n\t\t};\n\n\t\tensureEnvFileExists(envPath);\n\t\tconst existingEnv = readEnvFile(envPath);\n\t\tconst preview = renderEnvPreview(existingEnv, updates);\n\n\t\twriteEnvFile(envPath, existingEnv, updates);\n\n\t\tif (!jsonMode) {\n\t\t\tp.note(preview, \"Env file updated\");\n\t\t}\n\n if (!flags.noClipboard) {\n await clipboard.write(\n\t\t\t\t[`MDK_ACCESS_TOKEN=${updates.MDK_ACCESS_TOKEN}`, `MDK_WEBHOOK_SECRET=${updates.MDK_WEBHOOK_SECRET}`, `MDK_MNEMONIC=${updates.MDK_MNEMONIC}`].join(\n\t\t\t\t\t\"\\n\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tconst summary = {\n\t\t\tprojectDir,\n\t\t\tenvFile: envPath,\n\t\t\tapiKeyPreview: result.credentials.apiKeyPreview,\n\t\t\twebhookId: result.credentials.webhookId,\n\t\t\torganizationId: result.credentials.organizationId,\n\t\t\twebhookUrl: result.credentials.webhookUrl,\n\t\t\tmnemonic: updates.MDK_MNEMONIC,\n\t\t};\n\n if (jsonMode) {\n console.log(\n JSON.stringify(\n {\n status: \"success\",\n data: {\n\t\t\t\t\t\t\tenvFile: envPath,\n\t\t\t\t\t\t\tapiKeyId: result.credentials.apiKeyId,\n\t\t\t\t\t\t\tapiKeyPreview: result.credentials.apiKeyPreview,\n\t\t\t\t\t\t\twebhookId: result.credentials.webhookId,\n\t\t\t\t\t\t\twebhookSecret: result.credentials.webhookSecret,\n\t\t\t\t\t\t\twebhookUrl: result.credentials.webhookUrl,\n\t\t\t\t\t\t\torganizationId: result.credentials.organizationId,\n\t\t\t\t\t\t\tmnemonic: updates.MDK_MNEMONIC,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n ),\n );\n } else {\n p.outro(\n [\n \"Authorized successfully!\",\n `• Credentials written to ${envPath}`,\n `• Webhook ID: ${result.credentials.webhookId}`,\n `• Organization: ${result.credentials.organizationId}`,\n flags.noClipboard\n ? \"Clipboard copy skipped (--no-clipboard).\"\n : \"Secrets copied to clipboard.\",\n \"Return to your project and continue development.\",\n ].join(\"\\n\"),\n );\n }\n\n return summary;\n\t} catch (error) {\n\t\tif (jsonMode) {\n\t\t\tconsole.error(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tp.cancel(\n\t\t\t\terror instanceof Error ? error.message : `Unexpected error: ${error}`,\n\t\t\t);\n\t\t}\n\t\tprocess.exit(1);\n\t}\n}\n\nvoid main();\n","import path from \"node:path\";\n\nexport type EnvTargetResolution = {\n projectDir: string;\n envFile: string;\n providedExplicitly: boolean;\n};\n\nexport function resolveEnvTarget(options: {\n explicitTarget?: string;\n overrideTarget?: string;\n cwd: string;\n defaultFilename: string;\n}): EnvTargetResolution {\n const { explicitTarget, overrideTarget, cwd, defaultFilename } = options;\n const rawTarget = explicitTarget ?? overrideTarget ?? defaultFilename;\n const hasPathSeparator = rawTarget.includes(\"/\") || rawTarget.includes(\"\\\\\");\n\n let projectDir = cwd;\n let envFile = path.basename(rawTarget);\n let providedExplicitly = Boolean(explicitTarget);\n\n if (path.isAbsolute(rawTarget)) {\n projectDir = path.dirname(rawTarget);\n envFile = path.basename(rawTarget);\n providedExplicitly = true;\n } else if (hasPathSeparator) {\n const relativeDir = path.dirname(rawTarget);\n if (relativeDir && relativeDir !== \".\" && relativeDir !== \"\") {\n projectDir = path.resolve(cwd, relativeDir);\n envFile = path.basename(rawTarget);\n providedExplicitly = true;\n }\n }\n\n return {\n projectDir: path.resolve(projectDir),\n envFile,\n providedExplicitly,\n };\n}\n\nexport function deriveProjectName(input: string | undefined, webhookUrl: string): string {\n const trimmed = input?.trim();\n if (trimmed) {\n return trimmed;\n }\n return webhookUrl;\n}\n"],"mappings":"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","names":["import_node_path","path","setCookieParser","minimist","path","fs","os","open","spinner","delay","credentials","mnemonic","generateBip39Mnemonic","clipboard"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/env-target.ts"],"sourcesContent":["import { createORPCClient } from \"@orpc/client\";\nimport { RPCLink } from \"@orpc/client/fetch\";\nimport * as p from \"@clack/prompts\";\nimport minimist from \"minimist\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport open from \"open\";\nimport clipboard from \"clipboardy\";\nimport setCookieParser, { Cookie } from \"set-cookie-parser\";\nimport { generateMnemonic as generateBip39Mnemonic } from \"bip39\";\nimport { contract } from \"@moneydevkit/api-contract\";\nimport type { ContractRouterClient } from \"@orpc/contract\";\nimport type {\n\tBootstrapOnboardingResponse,\n\tStartDeviceAuthResponse,\n} from \"@moneydevkit/api-contract\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { deriveProjectName, resolveEnvTarget } from \"./utils/env-target.js\";\n\ntype Flags = {\n\tjson: boolean;\n\tnoClipboard: boolean;\n\tnoOpen: boolean;\n\tyes: boolean;\n\tbaseUrl?: string;\n\tenvFile?: string;\n\tprojectName?: string;\n\tmanualLogin?: string;\n\tforceNewWebhook?: boolean;\n\twebhookUrl?: string;\n};\n\nconst DEFAULT_BASE_URL = \"https://moneydevkit.com\";\nconst DEFAULT_ENV_FILE = \".env.local\";\n\nclass CookieJar {\n\tprivate store = new Map<string, string>();\n\n\tconstructor(initial?: string) {\n\t\tif (initial) {\n\t\t\tthis.add(initial);\n\t\t}\n\t}\n\n\tadd(input: string | string[]) {\n\t\tconst cookies = Array.isArray(input) ? input : [input];\n\t\tfor (const line of cookies) {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (!trimmed) continue;\n\t\t\tconst parsed = setCookieParser.parse(trimmed);\n\t\t\tconst handle = (cookie: Cookie) => {\n\t\t\t\tif (cookie?.name && cookie.value !== undefined) {\n\t\t\t\t\tthis.store.set(cookie.name, cookie.value);\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (Array.isArray(parsed)) {\n\t\t\t\tfor (const cookie of parsed) {\n\t\t\t\t\thandle(cookie);\n\t\t\t\t}\n\t\t\t} else if (parsed && typeof parsed === \"object\") {\n\t\t\t\thandle(parsed);\n\t\t\t}\n\t\t}\n\t}\n\n\theader(): string | undefined {\n\t\tif (this.store.size === 0) return undefined;\n\t\treturn Array.from(this.store.entries())\n\t\t\t.map(([name, value]) => `${name}=${value}`)\n\t\t\t.join(\"; \");\n\t}\n}\n\nfunction parseFlags(argv: string[]): Flags {\n\tconst result = minimist(argv, {\n\t\tboolean: [\"json\", \"no-clipboard\", \"no-open\", \"force-new-webhook\", \"yes\"],\n\t\tstring: [\n\t\t\t\"base-url\",\n\t\t\t\"env-target\",\n\t\t\t\"project-name\",\n\t\t\t\"manual-login\",\n\t\t\t\"webhook-url\",\n\t\t],\n\t\talias: {\n\t\t\tjson: \"j\",\n\t\t},\n\t\tdefault: {\n\t\t\t\"no-clipboard\": false,\n\t\t\t\"no-open\": false,\n\t\t\tjson: false,\n\t\t\t\"force-new-webhook\": false,\n\t\t\tyes: false,\n\t\t},\n\t});\n\nreturn {\n\tjson: Boolean(result.json),\n\tnoClipboard: Boolean(result[\"no-clipboard\"]),\n\tnoOpen: Boolean(result[\"no-open\"]),\n\tyes: Boolean(result.yes),\n\tbaseUrl: result[\"base-url\"],\n\tenvFile: result[\"env-target\"],\n\t\tprojectName:\n\t\t\ttypeof result[\"project-name\"] === \"string\"\n\t\t\t\t? result[\"project-name\"]\n\t\t\t\t: undefined,\n\t\tmanualLogin:\n\t\t\ttypeof result[\"manual-login\"] === \"string\"\n\t\t\t\t? result[\"manual-login\"]\n\t\t\t\t: undefined,\n\t\tforceNewWebhook: Boolean(result[\"force-new-webhook\"]),\n\t\twebhookUrl:\n\t\t\ttypeof result[\"webhook-url\"] === \"string\"\n\t\t\t\t? result[\"webhook-url\"]\n\t\t\t\t: undefined,\n\t};\n}\n\nfunction normalizeDirectory(dir: string): string {\n\tif (path.isAbsolute(dir)) return dir;\n\treturn path.resolve(process.cwd(), dir);\n}\n\nfunction ensureDirectoryExists(dir: string) {\n\tif (!fs.existsSync(dir)) {\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t}\n}\n\nfunction readEnvFile(filePath: string): Map<string, string> {\n\tconst env = new Map<string, string>();\n\tif (!fs.existsSync(filePath)) {\n\t\treturn env;\n\t}\n\tconst contents = fs.readFileSync(filePath, \"utf8\");\n\tfor (const line of contents.split(/\\r?\\n/)) {\n\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\tconst [key, ...rest] = line.split(\"=\");\n\t\tif (!key) continue;\n\t\tenv.set(key.trim(), rest.join(\"=\").trim());\n\t}\n\treturn env;\n}\n\nfunction renderEnvPreview(\n\t_original: Map<string, string>,\n\tupdates: Record<string, string>,\n): string {\n\tconst lines: string[] = [\"Writing the following values:\", \"\"];\n\tfor (const [key, value] of Object.entries(updates)) {\n\t\tlines.push(` ${key}=${value}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction writeEnvFile(\n\tfilePath: string,\n\texisting: Map<string, string>,\n\tupdates: Record<string, string>,\n) {\n\tfor (const [key, value] of Object.entries(updates)) {\n\t\texisting.set(key, value);\n\t}\n\tconst content =\n\t\tArray.from(existing.entries())\n\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t.map(([key, value]) => `${key}=${value}`)\n\t\t\t.join(os.EOL) + os.EOL;\n\tfs.writeFileSync(filePath, content, \"utf8\");\n}\n\nfunction ensureEnvFileExists(filePath: string) {\n\tconst dir = path.dirname(filePath);\n\tensureDirectoryExists(dir);\n\tif (!fs.existsSync(filePath)) {\n\t\tfs.writeFileSync(filePath, \"\", \"utf8\");\n\t}\n}\n\nfunction resolveLocalEnvPath(options: {\n\torganizationId?: string;\n}): string | undefined {\n\tconst trimmed = options.organizationId?.trim();\n\tif (!trimmed) {\n\t\treturn undefined;\n\t}\n\tconst homeDir = os.homedir();\n\treturn path.join(homeDir, \".mdk\", trimmed, \".env\");\n}\n\nfunction isValidHttpUrl(value?: string): boolean {\n\tif (!value) return false;\n\ttry {\n\t\tconst parsed = new URL(value);\n\t\treturn parsed.protocol === \"https:\" || parsed.protocol === \"http:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction createRpcClient(\n\tbaseUrl: string,\n\tjar: CookieJar,\n): ContractRouterClient<typeof contract> {\n\tconst link = new RPCLink({\n\t\turl: `${baseUrl.replace(/\\/$/, \"\")}/rpc`,\n\t\theaders: () => {\n\t\t\tconst cookieHeader = jar.header();\n\t\t\treturn cookieHeader ? { Cookie: cookieHeader } : {};\n\t\t},\n\t\tfetch: async (input, init) => {\n\t\t\tconst response = await fetch(input, init);\n\t\t\tconst setCookie = response.headers.getSetCookie?.() ?? [];\n\t\t\tif (setCookie.length > 0) {\n\t\t\t\tjar.add(setCookie);\n\t\t\t}\n\t\t\treturn response;\n\t\t},\n\t});\n\n\treturn createORPCClient(link) as ContractRouterClient<typeof contract>;\n}\n\nasync function runDeviceFlow(options: {\n\tflags: Flags;\n\tbaseUrl: string;\n\tcookies: CookieJar;\n\tprojectName?: string;\n\twebhookUrl: string;\n}): Promise<{\n\tdevice: StartDeviceAuthResponse;\n\tbootstrapToken: string;\n\tcredentials: BootstrapOnboardingResponse;\n\tmnemonic: string;\n}> {\n\tconst client = createRpcClient(options.baseUrl, options.cookies);\nconst manualSessionCookie = options.flags.manualLogin;\nconst webhookUrl = options.webhookUrl;\n\nconst device = await client.onboarding.startDeviceAuth({\n clientDisplayName: options.projectName,\n webhookUrl,\n forceNewWebhook: options.flags.forceNewWebhook,\n});\n\n\tif (manualSessionCookie) {\n\t\tconst response = await fetch(\n\t\t\t`${options.baseUrl.replace(/\\/$/, \"\")}/api/cli/device/authorize`,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\tCookie: manualSessionCookie,\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tcode: device.userCode,\n\t\t\t\t\tforceNewWebhook: options.flags.forceNewWebhook ?? false,\n\t\t\t\t}),\n\t\t\t},\n\t\t);\n\n\t\tif (!response.ok) {\n\t\t\tconst body = (await response.json().catch(() => ({}))) as {\n\t\t\t\terror?: string;\n\t\t\t};\n\t\t\tthrow new Error(\n\t\t\t\tbody.error ??\n\t\t\t\t\t`Manual authorize failed with status ${response.status}`,\n\t\t\t);\n\t\t}\n\t} else {\n if (!options.flags.json) {\n p.note(\n [\n `Device code: ${device.userCode}`,\n `Webhook URL: ${webhookUrl}`,\n \"Open the authorization page, click Authorize, then return to this terminal.\",\n ].join(\"\\n\"),\n \"Authorize this device\",\n );\n }\n\n\t\tif (!options.flags.noOpen && !options.flags.json) {\n\t\t\ttry {\n\t\t\t\tawait open(device.verificationUri, { wait: false });\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Unable to open browser automatically (${(error as Error).message}).`,\n\t\t\t\t);\n\t\t\t\tconsole.warn(`Open this URL manually: ${device.verificationUri}`);\n\t\t\t}\n\t\t} else if (!options.flags.json) {\n\t\t\tconsole.log(`Open this URL in your browser: ${device.verificationUri}`);\n\t\t}\n\n\t\tconst spinner = options.flags.json ? null : p.spinner();\n\t\tspinner?.start(\"Waiting for authorization...\");\n\n\t\tconst deadline = Date.now() + device.expiresIn * 1000;\n\t\tlet bootstrapToken: string | undefined;\n\n\t\twhile (Date.now() < deadline) {\n\t\t\tconst poll = await client.onboarding.pollDeviceAuth({\n\t\t\t\tdeviceCode: device.deviceCode,\n\t\t\t});\n\n\t\t\tif (poll.status === \"authorized\") {\n\t\t\t\tbootstrapToken = poll.bootstrapToken;\n\t\t\t\tspinner?.stop(\"Device authorized.\");\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (poll.status === \"expired\") {\n\t\t\t\tspinner?.stop(\"Device code expired.\");\n\t\t\t\tthrow new Error(\"Device code expired before authorization.\");\n\t\t\t}\n\n\t\t\tif (poll.status === \"denied\") {\n\t\t\t\tspinner?.stop(\"Authorization denied.\");\n\t\t\t\tthrow new Error(\"Authorization was denied in the dashboard.\");\n\t\t\t}\n\n const secondsLeft = Math.max(\n 0,\n Math.floor((deadline - Date.now()) / 1000),\n );\n spinner?.message(\n `Waiting for authorization (${secondsLeft}s remaining)`,\n\t\t\t);\n\t\t\tawait delay(device.interval * 1000);\n\t\t}\n\n\t\tif (!bootstrapToken) {\n\t\t\tthrow new Error(\"Timed out waiting for authorization.\");\n\t\t}\n\n const credentials = await client.onboarding.bootstrap({\n bootstrapToken,\n projectName: options.projectName,\n webhookUrl,\n forceNewWebhook: options.flags.forceNewWebhook,\n\t\t});\n\n\t\tconst mnemonic = generateBip39Mnemonic(128);\n\n\t\treturn {\n\t\t\tdevice,\n\t\t\tbootstrapToken,\n\t\t\tcredentials,\n\t\t\tmnemonic,\n\t\t};\n\t}\n\n\t// Manual path: poll once to get the bootstrap token.\n\tconst pollResult = await client.onboarding.pollDeviceAuth({\n\t\tdeviceCode: device.deviceCode,\n\t});\n\n\tif (pollResult.status !== \"authorized\") {\n\t\tthrow new Error(\n\t\t\t`Unable to obtain bootstrap token (status: ${pollResult.status}).`,\n\t\t);\n\t}\n\n\tconst credentials = await client.onboarding.bootstrap({\n\t\tbootstrapToken: pollResult.bootstrapToken,\n\t\tprojectName: options.projectName,\n\t\twebhookUrl,\n\t\tforceNewWebhook: options.flags.forceNewWebhook,\n\t});\n\n\tconst mnemonic = generateBip39Mnemonic(128);\n\n\treturn {\n\t\tdevice,\n\t\tbootstrapToken: pollResult.bootstrapToken,\n\t\tcredentials,\n\t\tmnemonic,\n\t};\n}\n\nasync function main() {\n\tconst flags = parseFlags(process.argv.slice(2));\n\tconst jsonMode = flags.json;\n\n\tif (!jsonMode) {\n\t\tp.intro(\"Money Dev Kit – @moneydevkit/create\");\n\t}\n\n\tconst baseUrl = flags.baseUrl ?? DEFAULT_BASE_URL;\n\tconst cookies = new CookieJar(flags.manualLogin);\n\n\tconst envFileOverride = process.env.MDK_ENV_FILE;\n\tconst envResolution = resolveEnvTarget({\n\t\texplicitTarget: flags.envFile,\n\t\toverrideTarget: envFileOverride,\n\t\tcwd: process.cwd(),\n\t\tdefaultFilename: DEFAULT_ENV_FILE,\n\t});\n\tconst { providedExplicitly } = envResolution;\n\tlet projectDir = envResolution.projectDir;\n\tlet envFile = envResolution.envFile;\n\n\tif (!providedExplicitly && !jsonMode && !flags.envFile) {\n\t\tconst dirPrompt = await p.text({\n\t\t\tmessage: \"Where should we store your MDK credentials?\",\n\t\t\tinitialValue: projectDir,\n\t\t});\n\n\t\tif (p.isCancel(dirPrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tprojectDir = dirPrompt;\n\t}\n\n\tprojectDir = normalizeDirectory(projectDir);\n\tensureDirectoryExists(projectDir);\n\n\tif (!flags.envFile && !envFileOverride && !jsonMode) {\n\t\tconst envPrompt = await p.text({\n\t\t\tmessage: \"Env file to update\",\n\t\t\tinitialValue: envFile,\n\t\t});\n\n\t\tif (p.isCancel(envPrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tenvFile = envPrompt.trim() || DEFAULT_ENV_FILE;\n\t}\n\n\tconst envPath = path.join(projectDir, envFile);\n\tconst existingEnvValues = readEnvFile(envPath);\n\tconst mnemonicAlreadySet = existingEnvValues.get(\"MDK_MNEMONIC\")?.trim();\n\n\tif (mnemonicAlreadySet) {\n\t\tconst warningMessage =\n\t\t\t\"We found MDK_MNEMONIC already set in your project. Your mnemonic is the key to your wallet. If you've already deployed and taken payments with this mnemonic and change it, you will lose access to your funds. If you want to generate a new mnemonic, delete MDK_MNEMONIC from your .env and try again.\";\n\n\t\tif (jsonMode) {\n\t\t\tconsole.error(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\terror: { message: warningMessage },\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tp.cancel(warningMessage);\n\t\t}\n\n\t\tprocess.exit(1);\n\t}\n\n\tlet webhookUrl = flags.webhookUrl?.trim();\n\tif ((!webhookUrl || !isValidHttpUrl(webhookUrl)) && jsonMode) {\n\t\tthrow new Error(\"Provide a valid --webhook-url when running in --json mode.\");\n\t}\n\n\twhile (!webhookUrl) {\n\t\tconst webhookInput = await p.text({\n\t\t\tmessage: \"Webhook URL for your application\",\n\t\t\tinitialValue: \"https://\",\n\t\t\tplaceholder: \"https://yourapp.com\",\n\t\t\tvalidate: (value) =>\n\t\t\t\tisValidHttpUrl(value?.trim())\n\t\t\t\t\t? undefined\n\t\t\t\t\t: \"Enter a valid http(s) URL (e.g. https://yourapp.com)\",\n\t\t});\n\n\t\tif (p.isCancel(webhookInput)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\twebhookUrl = webhookInput.trim();\n\t}\n\n\tlet projectName = flags.projectName?.trim();\n\tif (!projectName && !jsonMode) {\n\t\tconst namePrompt = await p.text({\n\t\t\tmessage: \"Project name (used for the generated API key)\",\n\t\t\tplaceholder: \"Optional: e.g. My Next.js Store\",\n\t\t});\n\t\tif (p.isCancel(namePrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tprojectName = namePrompt.trim() || undefined;\n\t}\n\n\tprojectName = deriveProjectName(projectName, webhookUrl);\n\n\ttry {\n\t\tconst result = await runDeviceFlow({\n\t\t\tflags,\n\t\t\tbaseUrl,\n\t\t\tcookies,\n\t\t\tprojectName,\n\t\t\twebhookUrl,\n\t\t});\n\n\t\tconst updates: Record<string, string> = {\n\t\t\tMDK_ACCESS_TOKEN: result.credentials.apiKey,\n\t\t\tMDK_WEBHOOK_SECRET: result.credentials.webhookSecret,\n\t\t\tMDK_MNEMONIC: result.mnemonic,\n\t\t};\n\n\t\tensureEnvFileExists(envPath);\n\t\tconst existingEnv = readEnvFile(envPath);\n\t\tconst preview = renderEnvPreview(existingEnv, updates);\n\n\t\twriteEnvFile(envPath, existingEnv, updates);\n\n\t\tconst localEnvPath = resolveLocalEnvPath({\n\t\t\torganizationId: result.credentials.organizationId,\n\t\t});\n\t\tif (localEnvPath) {\n\t\t\tensureEnvFileExists(localEnvPath);\n\t\t\tconst localEnv = readEnvFile(localEnvPath);\n\t\t\twriteEnvFile(localEnvPath, localEnv, updates);\n\t\t}\n\n\t\tif (!jsonMode) {\n\t\t\tp.note(preview, \"Env file updated\");\n\t\t}\n\n if (!flags.noClipboard) {\n await clipboard.write(\n\t\t\t\t[`MDK_ACCESS_TOKEN=${updates.MDK_ACCESS_TOKEN}`, `MDK_WEBHOOK_SECRET=${updates.MDK_WEBHOOK_SECRET}`, `MDK_MNEMONIC=${updates.MDK_MNEMONIC}`].join(\n\t\t\t\t\t\"\\n\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tconst summary = {\n\t\t\tprojectDir,\n\t\t\tenvFile: envPath,\n\t\t\tapiKeyPreview: result.credentials.apiKeyPreview,\n\t\t\twebhookId: result.credentials.webhookId,\n\t\t\torganizationId: result.credentials.organizationId,\n\t\t\twebhookUrl: result.credentials.webhookUrl,\n\t\t\tmnemonic: updates.MDK_MNEMONIC,\n\t\t};\n\n if (jsonMode) {\n console.log(\n JSON.stringify(\n {\n status: \"success\",\n data: {\n\t\t\t\t\t\t\tenvFile: envPath,\n\t\t\t\t\t\t\tapiKeyId: result.credentials.apiKeyId,\n\t\t\t\t\t\t\tapiKeyPreview: result.credentials.apiKeyPreview,\n\t\t\t\t\t\t\twebhookId: result.credentials.webhookId,\n\t\t\t\t\t\t\twebhookSecret: result.credentials.webhookSecret,\n\t\t\t\t\t\t\twebhookUrl: result.credentials.webhookUrl,\n\t\t\t\t\t\t\torganizationId: result.credentials.organizationId,\n\t\t\t\t\t\t\tmnemonic: updates.MDK_MNEMONIC,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n ),\n );\n } else {\n p.outro(\n [\n \"Authorized successfully!\",\n `• Credentials written to ${envPath}`,\n `• Webhook ID: ${result.credentials.webhookId}`,\n `• Organization: ${result.credentials.organizationId}`,\n flags.noClipboard\n ? \"Clipboard copy skipped (--no-clipboard).\"\n : \"Secrets copied to clipboard.\",\n \"Return to your project and continue development.\",\n ].join(\"\\n\"),\n );\n }\n\n return summary;\n\t} catch (error) {\n\t\tif (jsonMode) {\n\t\t\tconsole.error(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tp.cancel(\n\t\t\t\terror instanceof Error ? error.message : `Unexpected error: ${error}`,\n\t\t\t);\n\t\t}\n\t\tprocess.exit(1);\n\t}\n}\n\nvoid main();\n","import path from \"node:path\";\n\nexport type EnvTargetResolution = {\n projectDir: string;\n envFile: string;\n providedExplicitly: boolean;\n};\n\nexport function resolveEnvTarget(options: {\n explicitTarget?: string;\n overrideTarget?: string;\n cwd: string;\n defaultFilename: string;\n}): EnvTargetResolution {\n const { explicitTarget, overrideTarget, cwd, defaultFilename } = options;\n const rawTarget = explicitTarget ?? overrideTarget ?? defaultFilename;\n const hasPathSeparator = rawTarget.includes(\"/\") || rawTarget.includes(\"\\\\\");\n\n let projectDir = cwd;\n let envFile = path.basename(rawTarget);\n let providedExplicitly = Boolean(explicitTarget);\n\n if (path.isAbsolute(rawTarget)) {\n projectDir = path.dirname(rawTarget);\n envFile = path.basename(rawTarget);\n providedExplicitly = true;\n } else if (hasPathSeparator) {\n const relativeDir = path.dirname(rawTarget);\n if (relativeDir && relativeDir !== \".\" && relativeDir !== \"\") {\n projectDir = path.resolve(cwd, relativeDir);\n envFile = path.basename(rawTarget);\n providedExplicitly = true;\n }\n }\n\n return {\n projectDir: path.resolve(projectDir),\n envFile,\n providedExplicitly,\n };\n}\n\nexport function deriveProjectName(input: string | undefined, webhookUrl: string): string {\n const trimmed = input?.trim();\n if (trimmed) {\n return trimmed;\n }\n return webhookUrl;\n}\n"],"mappings":"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","names":["import_node_path","path","setCookieParser","minimist","path","fs","os","open","spinner","delay","credentials","mnemonic","generateBip39Mnemonic","clipboard"]}
package/dist/index.js CHANGED
@@ -162,6 +162,14 @@ function ensureEnvFileExists(filePath) {
162
162
  fs.writeFileSync(filePath, "", "utf8");
163
163
  }
164
164
  }
165
+ function resolveLocalEnvPath(options) {
166
+ const trimmed = options.organizationId?.trim();
167
+ if (!trimmed) {
168
+ return void 0;
169
+ }
170
+ const homeDir = os.homedir();
171
+ return path2.join(homeDir, ".mdk", trimmed, ".env");
172
+ }
165
173
  function isValidHttpUrl(value) {
166
174
  if (!value) return false;
167
175
  try {
@@ -421,6 +429,14 @@ async function main() {
421
429
  const existingEnv = readEnvFile(envPath);
422
430
  const preview = renderEnvPreview(existingEnv, updates);
423
431
  writeEnvFile(envPath, existingEnv, updates);
432
+ const localEnvPath = resolveLocalEnvPath({
433
+ organizationId: result.credentials.organizationId
434
+ });
435
+ if (localEnvPath) {
436
+ ensureEnvFileExists(localEnvPath);
437
+ const localEnv = readEnvFile(localEnvPath);
438
+ writeEnvFile(localEnvPath, localEnv, updates);
439
+ }
424
440
  if (!jsonMode) {
425
441
  p.note(preview, "Env file updated");
426
442
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/env-target.ts"],"sourcesContent":["import { createORPCClient } from \"@orpc/client\";\nimport { RPCLink } from \"@orpc/client/fetch\";\nimport * as p from \"@clack/prompts\";\nimport minimist from \"minimist\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport open from \"open\";\nimport clipboard from \"clipboardy\";\nimport setCookieParser, { Cookie } from \"set-cookie-parser\";\nimport { generateMnemonic as generateBip39Mnemonic } from \"bip39\";\nimport { contract } from \"@moneydevkit/api-contract\";\nimport type { ContractRouterClient } from \"@orpc/contract\";\nimport type {\n\tBootstrapOnboardingResponse,\n\tStartDeviceAuthResponse,\n} from \"@moneydevkit/api-contract\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { deriveProjectName, resolveEnvTarget } from \"./utils/env-target.js\";\n\ntype Flags = {\n\tjson: boolean;\n\tnoClipboard: boolean;\n\tnoOpen: boolean;\n\tyes: boolean;\n\tbaseUrl?: string;\n\tenvFile?: string;\n\tprojectName?: string;\n\tmanualLogin?: string;\n\tforceNewWebhook?: boolean;\n\twebhookUrl?: string;\n};\n\nconst DEFAULT_BASE_URL = \"https://moneydevkit.com\";\nconst DEFAULT_ENV_FILE = \".env.local\";\n\nclass CookieJar {\n\tprivate store = new Map<string, string>();\n\n\tconstructor(initial?: string) {\n\t\tif (initial) {\n\t\t\tthis.add(initial);\n\t\t}\n\t}\n\n\tadd(input: string | string[]) {\n\t\tconst cookies = Array.isArray(input) ? input : [input];\n\t\tfor (const line of cookies) {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (!trimmed) continue;\n\t\t\tconst parsed = setCookieParser.parse(trimmed);\n\t\t\tconst handle = (cookie: Cookie) => {\n\t\t\t\tif (cookie?.name && cookie.value !== undefined) {\n\t\t\t\t\tthis.store.set(cookie.name, cookie.value);\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (Array.isArray(parsed)) {\n\t\t\t\tfor (const cookie of parsed) {\n\t\t\t\t\thandle(cookie);\n\t\t\t\t}\n\t\t\t} else if (parsed && typeof parsed === \"object\") {\n\t\t\t\thandle(parsed);\n\t\t\t}\n\t\t}\n\t}\n\n\theader(): string | undefined {\n\t\tif (this.store.size === 0) return undefined;\n\t\treturn Array.from(this.store.entries())\n\t\t\t.map(([name, value]) => `${name}=${value}`)\n\t\t\t.join(\"; \");\n\t}\n}\n\nfunction parseFlags(argv: string[]): Flags {\n\tconst result = minimist(argv, {\n\t\tboolean: [\"json\", \"no-clipboard\", \"no-open\", \"force-new-webhook\", \"yes\"],\n\t\tstring: [\n\t\t\t\"base-url\",\n\t\t\t\"env-target\",\n\t\t\t\"project-name\",\n\t\t\t\"manual-login\",\n\t\t\t\"webhook-url\",\n\t\t],\n\t\talias: {\n\t\t\tjson: \"j\",\n\t\t},\n\t\tdefault: {\n\t\t\t\"no-clipboard\": false,\n\t\t\t\"no-open\": false,\n\t\t\tjson: false,\n\t\t\t\"force-new-webhook\": false,\n\t\t\tyes: false,\n\t\t},\n\t});\n\nreturn {\n\tjson: Boolean(result.json),\n\tnoClipboard: Boolean(result[\"no-clipboard\"]),\n\tnoOpen: Boolean(result[\"no-open\"]),\n\tyes: Boolean(result.yes),\n\tbaseUrl: result[\"base-url\"],\n\tenvFile: result[\"env-target\"],\n\t\tprojectName:\n\t\t\ttypeof result[\"project-name\"] === \"string\"\n\t\t\t\t? result[\"project-name\"]\n\t\t\t\t: undefined,\n\t\tmanualLogin:\n\t\t\ttypeof result[\"manual-login\"] === \"string\"\n\t\t\t\t? result[\"manual-login\"]\n\t\t\t\t: undefined,\n\t\tforceNewWebhook: Boolean(result[\"force-new-webhook\"]),\n\t\twebhookUrl:\n\t\t\ttypeof result[\"webhook-url\"] === \"string\"\n\t\t\t\t? result[\"webhook-url\"]\n\t\t\t\t: undefined,\n\t};\n}\n\nfunction normalizeDirectory(dir: string): string {\n\tif (path.isAbsolute(dir)) return dir;\n\treturn path.resolve(process.cwd(), dir);\n}\n\nfunction ensureDirectoryExists(dir: string) {\n\tif (!fs.existsSync(dir)) {\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t}\n}\n\nfunction readEnvFile(filePath: string): Map<string, string> {\n\tconst env = new Map<string, string>();\n\tif (!fs.existsSync(filePath)) {\n\t\treturn env;\n\t}\n\tconst contents = fs.readFileSync(filePath, \"utf8\");\n\tfor (const line of contents.split(/\\r?\\n/)) {\n\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\tconst [key, ...rest] = line.split(\"=\");\n\t\tif (!key) continue;\n\t\tenv.set(key.trim(), rest.join(\"=\").trim());\n\t}\n\treturn env;\n}\n\nfunction renderEnvPreview(\n\t_original: Map<string, string>,\n\tupdates: Record<string, string>,\n): string {\n\tconst lines: string[] = [\"Writing the following values:\", \"\"];\n\tfor (const [key, value] of Object.entries(updates)) {\n\t\tlines.push(` ${key}=${value}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction writeEnvFile(\n\tfilePath: string,\n\texisting: Map<string, string>,\n\tupdates: Record<string, string>,\n) {\n\tfor (const [key, value] of Object.entries(updates)) {\n\t\texisting.set(key, value);\n\t}\n\tconst content =\n\t\tArray.from(existing.entries())\n\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t.map(([key, value]) => `${key}=${value}`)\n\t\t\t.join(os.EOL) + os.EOL;\n\tfs.writeFileSync(filePath, content, \"utf8\");\n}\n\nfunction ensureEnvFileExists(filePath: string) {\n\tconst dir = path.dirname(filePath);\n\tensureDirectoryExists(dir);\n\tif (!fs.existsSync(filePath)) {\n\t\tfs.writeFileSync(filePath, \"\", \"utf8\");\n\t}\n}\n\nfunction isValidHttpUrl(value?: string): boolean {\n\tif (!value) return false;\n\ttry {\n\t\tconst parsed = new URL(value);\n\t\treturn parsed.protocol === \"https:\" || parsed.protocol === \"http:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction createRpcClient(\n\tbaseUrl: string,\n\tjar: CookieJar,\n): ContractRouterClient<typeof contract> {\n\tconst link = new RPCLink({\n\t\turl: `${baseUrl.replace(/\\/$/, \"\")}/rpc`,\n\t\theaders: () => {\n\t\t\tconst cookieHeader = jar.header();\n\t\t\treturn cookieHeader ? { Cookie: cookieHeader } : {};\n\t\t},\n\t\tfetch: async (input, init) => {\n\t\t\tconst response = await fetch(input, init);\n\t\t\tconst setCookie = response.headers.getSetCookie?.() ?? [];\n\t\t\tif (setCookie.length > 0) {\n\t\t\t\tjar.add(setCookie);\n\t\t\t}\n\t\t\treturn response;\n\t\t},\n\t});\n\n\treturn createORPCClient(link) as ContractRouterClient<typeof contract>;\n}\n\nasync function runDeviceFlow(options: {\n\tflags: Flags;\n\tbaseUrl: string;\n\tcookies: CookieJar;\n\tprojectName?: string;\n\twebhookUrl: string;\n}): Promise<{\n\tdevice: StartDeviceAuthResponse;\n\tbootstrapToken: string;\n\tcredentials: BootstrapOnboardingResponse;\n\tmnemonic: string;\n}> {\n\tconst client = createRpcClient(options.baseUrl, options.cookies);\nconst manualSessionCookie = options.flags.manualLogin;\nconst webhookUrl = options.webhookUrl;\n\nconst device = await client.onboarding.startDeviceAuth({\n clientDisplayName: options.projectName,\n webhookUrl,\n forceNewWebhook: options.flags.forceNewWebhook,\n});\n\n\tif (manualSessionCookie) {\n\t\tconst response = await fetch(\n\t\t\t`${options.baseUrl.replace(/\\/$/, \"\")}/api/cli/device/authorize`,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\tCookie: manualSessionCookie,\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tcode: device.userCode,\n\t\t\t\t\tforceNewWebhook: options.flags.forceNewWebhook ?? false,\n\t\t\t\t}),\n\t\t\t},\n\t\t);\n\n\t\tif (!response.ok) {\n\t\t\tconst body = (await response.json().catch(() => ({}))) as {\n\t\t\t\terror?: string;\n\t\t\t};\n\t\t\tthrow new Error(\n\t\t\t\tbody.error ??\n\t\t\t\t\t`Manual authorize failed with status ${response.status}`,\n\t\t\t);\n\t\t}\n\t} else {\n if (!options.flags.json) {\n p.note(\n [\n `Device code: ${device.userCode}`,\n `Webhook URL: ${webhookUrl}`,\n \"Open the authorization page, click Authorize, then return to this terminal.\",\n ].join(\"\\n\"),\n \"Authorize this device\",\n );\n }\n\n\t\tif (!options.flags.noOpen && !options.flags.json) {\n\t\t\ttry {\n\t\t\t\tawait open(device.verificationUri, { wait: false });\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Unable to open browser automatically (${(error as Error).message}).`,\n\t\t\t\t);\n\t\t\t\tconsole.warn(`Open this URL manually: ${device.verificationUri}`);\n\t\t\t}\n\t\t} else if (!options.flags.json) {\n\t\t\tconsole.log(`Open this URL in your browser: ${device.verificationUri}`);\n\t\t}\n\n\t\tconst spinner = options.flags.json ? null : p.spinner();\n\t\tspinner?.start(\"Waiting for authorization...\");\n\n\t\tconst deadline = Date.now() + device.expiresIn * 1000;\n\t\tlet bootstrapToken: string | undefined;\n\n\t\twhile (Date.now() < deadline) {\n\t\t\tconst poll = await client.onboarding.pollDeviceAuth({\n\t\t\t\tdeviceCode: device.deviceCode,\n\t\t\t});\n\n\t\t\tif (poll.status === \"authorized\") {\n\t\t\t\tbootstrapToken = poll.bootstrapToken;\n\t\t\t\tspinner?.stop(\"Device authorized.\");\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (poll.status === \"expired\") {\n\t\t\t\tspinner?.stop(\"Device code expired.\");\n\t\t\t\tthrow new Error(\"Device code expired before authorization.\");\n\t\t\t}\n\n\t\t\tif (poll.status === \"denied\") {\n\t\t\t\tspinner?.stop(\"Authorization denied.\");\n\t\t\t\tthrow new Error(\"Authorization was denied in the dashboard.\");\n\t\t\t}\n\n const secondsLeft = Math.max(\n 0,\n Math.floor((deadline - Date.now()) / 1000),\n );\n spinner?.message(\n `Waiting for authorization (${secondsLeft}s remaining)`,\n\t\t\t);\n\t\t\tawait delay(device.interval * 1000);\n\t\t}\n\n\t\tif (!bootstrapToken) {\n\t\t\tthrow new Error(\"Timed out waiting for authorization.\");\n\t\t}\n\n const credentials = await client.onboarding.bootstrap({\n bootstrapToken,\n projectName: options.projectName,\n webhookUrl,\n forceNewWebhook: options.flags.forceNewWebhook,\n\t\t});\n\n\t\tconst mnemonic = generateBip39Mnemonic(128);\n\n\t\treturn {\n\t\t\tdevice,\n\t\t\tbootstrapToken,\n\t\t\tcredentials,\n\t\t\tmnemonic,\n\t\t};\n\t}\n\n\t// Manual path: poll once to get the bootstrap token.\n\tconst pollResult = await client.onboarding.pollDeviceAuth({\n\t\tdeviceCode: device.deviceCode,\n\t});\n\n\tif (pollResult.status !== \"authorized\") {\n\t\tthrow new Error(\n\t\t\t`Unable to obtain bootstrap token (status: ${pollResult.status}).`,\n\t\t);\n\t}\n\n\tconst credentials = await client.onboarding.bootstrap({\n\t\tbootstrapToken: pollResult.bootstrapToken,\n\t\tprojectName: options.projectName,\n\t\twebhookUrl,\n\t\tforceNewWebhook: options.flags.forceNewWebhook,\n\t});\n\n\tconst mnemonic = generateBip39Mnemonic(128);\n\n\treturn {\n\t\tdevice,\n\t\tbootstrapToken: pollResult.bootstrapToken,\n\t\tcredentials,\n\t\tmnemonic,\n\t};\n}\n\nasync function main() {\n\tconst flags = parseFlags(process.argv.slice(2));\n\tconst jsonMode = flags.json;\n\n\tif (!jsonMode) {\n\t\tp.intro(\"Money Dev Kit – @moneydevkit/create\");\n\t}\n\n\tconst baseUrl = flags.baseUrl ?? DEFAULT_BASE_URL;\n\tconst cookies = new CookieJar(flags.manualLogin);\n\n\tconst envFileOverride = process.env.MDK_ENV_FILE;\n\tconst envResolution = resolveEnvTarget({\n\t\texplicitTarget: flags.envFile,\n\t\toverrideTarget: envFileOverride,\n\t\tcwd: process.cwd(),\n\t\tdefaultFilename: DEFAULT_ENV_FILE,\n\t});\n\tconst { providedExplicitly } = envResolution;\n\tlet projectDir = envResolution.projectDir;\n\tlet envFile = envResolution.envFile;\n\n\tif (!providedExplicitly && !jsonMode && !flags.envFile) {\n\t\tconst dirPrompt = await p.text({\n\t\t\tmessage: \"Where should we store your MDK credentials?\",\n\t\t\tinitialValue: projectDir,\n\t\t});\n\n\t\tif (p.isCancel(dirPrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tprojectDir = dirPrompt;\n\t}\n\n\tprojectDir = normalizeDirectory(projectDir);\n\tensureDirectoryExists(projectDir);\n\n\tif (!flags.envFile && !envFileOverride && !jsonMode) {\n\t\tconst envPrompt = await p.text({\n\t\t\tmessage: \"Env file to update\",\n\t\t\tinitialValue: envFile,\n\t\t});\n\n\t\tif (p.isCancel(envPrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tenvFile = envPrompt.trim() || DEFAULT_ENV_FILE;\n\t}\n\n\tconst envPath = path.join(projectDir, envFile);\n\tconst existingEnvValues = readEnvFile(envPath);\n\tconst mnemonicAlreadySet = existingEnvValues.get(\"MDK_MNEMONIC\")?.trim();\n\n\tif (mnemonicAlreadySet) {\n\t\tconst warningMessage =\n\t\t\t\"We found MDK_MNEMONIC already set in your project. Your mnemonic is the key to your wallet. If you've already deployed and taken payments with this mnemonic and change it, you will lose access to your funds. If you want to generate a new mnemonic, delete MDK_MNEMONIC from your .env and try again.\";\n\n\t\tif (jsonMode) {\n\t\t\tconsole.error(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\terror: { message: warningMessage },\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tp.cancel(warningMessage);\n\t\t}\n\n\t\tprocess.exit(1);\n\t}\n\n\tlet webhookUrl = flags.webhookUrl?.trim();\n\tif ((!webhookUrl || !isValidHttpUrl(webhookUrl)) && jsonMode) {\n\t\tthrow new Error(\"Provide a valid --webhook-url when running in --json mode.\");\n\t}\n\n\twhile (!webhookUrl) {\n\t\tconst webhookInput = await p.text({\n\t\t\tmessage: \"Webhook URL for your application\",\n\t\t\tinitialValue: \"https://\",\n\t\t\tplaceholder: \"https://yourapp.com\",\n\t\t\tvalidate: (value) =>\n\t\t\t\tisValidHttpUrl(value?.trim())\n\t\t\t\t\t? undefined\n\t\t\t\t\t: \"Enter a valid http(s) URL (e.g. https://yourapp.com)\",\n\t\t});\n\n\t\tif (p.isCancel(webhookInput)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\twebhookUrl = webhookInput.trim();\n\t}\n\n\tlet projectName = flags.projectName?.trim();\n\tif (!projectName && !jsonMode) {\n\t\tconst namePrompt = await p.text({\n\t\t\tmessage: \"Project name (used for the generated API key)\",\n\t\t\tplaceholder: \"Optional: e.g. My Next.js Store\",\n\t\t});\n\t\tif (p.isCancel(namePrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tprojectName = namePrompt.trim() || undefined;\n\t}\n\n\tprojectName = deriveProjectName(projectName, webhookUrl);\n\n\ttry {\n\t\tconst result = await runDeviceFlow({\n\t\t\tflags,\n\t\t\tbaseUrl,\n\t\t\tcookies,\n\t\t\tprojectName,\n\t\t\twebhookUrl,\n\t\t});\n\n\t\tconst updates: Record<string, string> = {\n\t\t\tMDK_ACCESS_TOKEN: result.credentials.apiKey,\n\t\t\tMDK_WEBHOOK_SECRET: result.credentials.webhookSecret,\n\t\t\tMDK_MNEMONIC: result.mnemonic,\n\t\t};\n\n\t\tensureEnvFileExists(envPath);\n\t\tconst existingEnv = readEnvFile(envPath);\n\t\tconst preview = renderEnvPreview(existingEnv, updates);\n\n\t\twriteEnvFile(envPath, existingEnv, updates);\n\n\t\tif (!jsonMode) {\n\t\t\tp.note(preview, \"Env file updated\");\n\t\t}\n\n if (!flags.noClipboard) {\n await clipboard.write(\n\t\t\t\t[`MDK_ACCESS_TOKEN=${updates.MDK_ACCESS_TOKEN}`, `MDK_WEBHOOK_SECRET=${updates.MDK_WEBHOOK_SECRET}`, `MDK_MNEMONIC=${updates.MDK_MNEMONIC}`].join(\n\t\t\t\t\t\"\\n\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tconst summary = {\n\t\t\tprojectDir,\n\t\t\tenvFile: envPath,\n\t\t\tapiKeyPreview: result.credentials.apiKeyPreview,\n\t\t\twebhookId: result.credentials.webhookId,\n\t\t\torganizationId: result.credentials.organizationId,\n\t\t\twebhookUrl: result.credentials.webhookUrl,\n\t\t\tmnemonic: updates.MDK_MNEMONIC,\n\t\t};\n\n if (jsonMode) {\n console.log(\n JSON.stringify(\n {\n status: \"success\",\n data: {\n\t\t\t\t\t\t\tenvFile: envPath,\n\t\t\t\t\t\t\tapiKeyId: result.credentials.apiKeyId,\n\t\t\t\t\t\t\tapiKeyPreview: result.credentials.apiKeyPreview,\n\t\t\t\t\t\t\twebhookId: result.credentials.webhookId,\n\t\t\t\t\t\t\twebhookSecret: result.credentials.webhookSecret,\n\t\t\t\t\t\t\twebhookUrl: result.credentials.webhookUrl,\n\t\t\t\t\t\t\torganizationId: result.credentials.organizationId,\n\t\t\t\t\t\t\tmnemonic: updates.MDK_MNEMONIC,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n ),\n );\n } else {\n p.outro(\n [\n \"Authorized successfully!\",\n `• Credentials written to ${envPath}`,\n `• Webhook ID: ${result.credentials.webhookId}`,\n `• Organization: ${result.credentials.organizationId}`,\n flags.noClipboard\n ? \"Clipboard copy skipped (--no-clipboard).\"\n : \"Secrets copied to clipboard.\",\n \"Return to your project and continue development.\",\n ].join(\"\\n\"),\n );\n }\n\n return summary;\n\t} catch (error) {\n\t\tif (jsonMode) {\n\t\t\tconsole.error(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tp.cancel(\n\t\t\t\terror instanceof Error ? error.message : `Unexpected error: ${error}`,\n\t\t\t);\n\t\t}\n\t\tprocess.exit(1);\n\t}\n}\n\nvoid main();\n","import path from \"node:path\";\n\nexport type EnvTargetResolution = {\n projectDir: string;\n envFile: string;\n providedExplicitly: boolean;\n};\n\nexport function resolveEnvTarget(options: {\n explicitTarget?: string;\n overrideTarget?: string;\n cwd: string;\n defaultFilename: string;\n}): EnvTargetResolution {\n const { explicitTarget, overrideTarget, cwd, defaultFilename } = options;\n const rawTarget = explicitTarget ?? overrideTarget ?? defaultFilename;\n const hasPathSeparator = rawTarget.includes(\"/\") || rawTarget.includes(\"\\\\\");\n\n let projectDir = cwd;\n let envFile = path.basename(rawTarget);\n let providedExplicitly = Boolean(explicitTarget);\n\n if (path.isAbsolute(rawTarget)) {\n projectDir = path.dirname(rawTarget);\n envFile = path.basename(rawTarget);\n providedExplicitly = true;\n } else if (hasPathSeparator) {\n const relativeDir = path.dirname(rawTarget);\n if (relativeDir && relativeDir !== \".\" && relativeDir !== \"\") {\n projectDir = path.resolve(cwd, relativeDir);\n envFile = path.basename(rawTarget);\n providedExplicitly = true;\n }\n }\n\n return {\n projectDir: path.resolve(projectDir),\n envFile,\n providedExplicitly,\n };\n}\n\nexport function deriveProjectName(input: string | undefined, webhookUrl: string): string {\n const trimmed = input?.trim();\n if (trimmed) {\n return trimmed;\n }\n return webhookUrl;\n}\n"],"mappings":";;;AAAA,SAAS,wBAAwB;AACjC,SAAS,eAAe;AACxB,YAAY,OAAO;AACnB,OAAO,cAAc;AACrB,OAAOA,WAAU;AACjB,OAAO,QAAQ;AACf,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,OAAO,eAAe;AACtB,OAAO,qBAAiC;AACxC,SAAS,oBAAoB,6BAA6B;AAO1D,SAAS,cAAc,aAAa;;;ACjBpC,OAAO,UAAU;AAQV,SAAS,iBAAiB,SAKT;AACtB,QAAM,EAAE,gBAAgB,gBAAgB,KAAK,gBAAgB,IAAI;AACjE,QAAM,YAAY,kBAAkB,kBAAkB;AACtD,QAAM,mBAAmB,UAAU,SAAS,GAAG,KAAK,UAAU,SAAS,IAAI;AAE3E,MAAI,aAAa;AACjB,MAAI,UAAU,KAAK,SAAS,SAAS;AACrC,MAAI,qBAAqB,QAAQ,cAAc;AAE/C,MAAI,KAAK,WAAW,SAAS,GAAG;AAC9B,iBAAa,KAAK,QAAQ,SAAS;AACnC,cAAU,KAAK,SAAS,SAAS;AACjC,yBAAqB;AAAA,EACvB,WAAW,kBAAkB;AAC3B,UAAM,cAAc,KAAK,QAAQ,SAAS;AAC1C,QAAI,eAAe,gBAAgB,OAAO,gBAAgB,IAAI;AAC5D,mBAAa,KAAK,QAAQ,KAAK,WAAW;AAC1C,gBAAU,KAAK,SAAS,SAAS;AACjC,2BAAqB;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,YAAY,KAAK,QAAQ,UAAU;AAAA,IACnC;AAAA,IACA;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,OAA2B,YAA4B;AACvF,QAAM,UAAU,OAAO,KAAK;AAC5B,MAAI,SAAS;AACX,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ADfA,IAAM,mBAAmB;AACzB,IAAM,mBAAmB;AAEzB,IAAM,YAAN,MAAgB;AAAA,EACP,QAAQ,oBAAI,IAAoB;AAAA,EAExC,YAAY,SAAkB;AAC7B,QAAI,SAAS;AACZ,WAAK,IAAI,OAAO;AAAA,IACjB;AAAA,EACD;AAAA,EAEA,IAAI,OAA0B;AAC7B,UAAM,UAAU,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACrD,eAAW,QAAQ,SAAS;AAC3B,YAAM,UAAU,KAAK,KAAK;AAC1B,UAAI,CAAC,QAAS;AACd,YAAM,SAAS,gBAAgB,MAAM,OAAO;AAC5C,YAAM,SAAS,CAAC,WAAmB;AAClC,YAAI,QAAQ,QAAQ,OAAO,UAAU,QAAW;AAC/C,eAAK,MAAM,IAAI,OAAO,MAAM,OAAO,KAAK;AAAA,QACzC;AAAA,MACD;AACA,UAAI,MAAM,QAAQ,MAAM,GAAG;AAC1B,mBAAW,UAAU,QAAQ;AAC5B,iBAAO,MAAM;AAAA,QACd;AAAA,MACD,WAAW,UAAU,OAAO,WAAW,UAAU;AAChD,eAAO,MAAM;AAAA,MACd;AAAA,IACD;AAAA,EACD;AAAA,EAEA,SAA6B;AAC5B,QAAI,KAAK,MAAM,SAAS,EAAG,QAAO;AAClC,WAAO,MAAM,KAAK,KAAK,MAAM,QAAQ,CAAC,EACpC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,GAAG,IAAI,IAAI,KAAK,EAAE,EACzC,KAAK,IAAI;AAAA,EACZ;AACD;AAEA,SAAS,WAAW,MAAuB;AAC1C,QAAM,SAAS,SAAS,MAAM;AAAA,IAC7B,SAAS,CAAC,QAAQ,gBAAgB,WAAW,qBAAqB,KAAK;AAAA,IACvE,QAAQ;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,OAAO;AAAA,MACN,MAAM;AAAA,IACP;AAAA,IACA,SAAS;AAAA,MACR,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,MAAM;AAAA,MACN,qBAAqB;AAAA,MACrB,KAAK;AAAA,IACN;AAAA,EACD,CAAC;AAEF,SAAO;AAAA,IACN,MAAM,QAAQ,OAAO,IAAI;AAAA,IACzB,aAAa,QAAQ,OAAO,cAAc,CAAC;AAAA,IAC3C,QAAQ,QAAQ,OAAO,SAAS,CAAC;AAAA,IACjC,KAAK,QAAQ,OAAO,GAAG;AAAA,IACvB,SAAS,OAAO,UAAU;AAAA,IAC1B,SAAS,OAAO,YAAY;AAAA,IAC3B,aACC,OAAO,OAAO,cAAc,MAAM,WAC/B,OAAO,cAAc,IACrB;AAAA,IACJ,aACC,OAAO,OAAO,cAAc,MAAM,WAC/B,OAAO,cAAc,IACrB;AAAA,IACJ,iBAAiB,QAAQ,OAAO,mBAAmB,CAAC;AAAA,IACpD,YACC,OAAO,OAAO,aAAa,MAAM,WAC9B,OAAO,aAAa,IACpB;AAAA,EACL;AACD;AAEA,SAAS,mBAAmB,KAAqB;AAChD,MAAIC,MAAK,WAAW,GAAG,EAAG,QAAO;AACjC,SAAOA,MAAK,QAAQ,QAAQ,IAAI,GAAG,GAAG;AACvC;AAEA,SAAS,sBAAsB,KAAa;AAC3C,MAAI,CAAC,GAAG,WAAW,GAAG,GAAG;AACxB,OAAG,UAAU,KAAK,EAAE,WAAW,KAAK,CAAC;AAAA,EACtC;AACD;AAEA,SAAS,YAAY,UAAuC;AAC3D,QAAM,MAAM,oBAAI,IAAoB;AACpC,MAAI,CAAC,GAAG,WAAW,QAAQ,GAAG;AAC7B,WAAO;AAAA,EACR;AACA,QAAM,WAAW,GAAG,aAAa,UAAU,MAAM;AACjD,aAAW,QAAQ,SAAS,MAAM,OAAO,GAAG;AAC3C,QAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,EAAG;AACnC,UAAM,CAAC,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,GAAG;AACrC,QAAI,CAAC,IAAK;AACV,QAAI,IAAI,IAAI,KAAK,GAAG,KAAK,KAAK,GAAG,EAAE,KAAK,CAAC;AAAA,EAC1C;AACA,SAAO;AACR;AAEA,SAAS,iBACR,WACA,SACS;AACT,QAAM,QAAkB,CAAC,iCAAiC,EAAE;AAC5D,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AACnD,UAAM,KAAK,KAAK,GAAG,IAAI,KAAK,EAAE;AAAA,EAC/B;AACA,SAAO,MAAM,KAAK,IAAI;AACvB;AAEA,SAAS,aACR,UACA,UACA,SACC;AACD,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AACnD,aAAS,IAAI,KAAK,KAAK;AAAA,EACxB;AACA,QAAM,UACL,MAAM,KAAK,SAAS,QAAQ,CAAC,EAC3B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EACrC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,EACvC,KAAK,GAAG,GAAG,IAAI,GAAG;AACrB,KAAG,cAAc,UAAU,SAAS,MAAM;AAC3C;AAEA,SAAS,oBAAoB,UAAkB;AAC9C,QAAM,MAAMA,MAAK,QAAQ,QAAQ;AACjC,wBAAsB,GAAG;AACzB,MAAI,CAAC,GAAG,WAAW,QAAQ,GAAG;AAC7B,OAAG,cAAc,UAAU,IAAI,MAAM;AAAA,EACtC;AACD;AAEA,SAAS,eAAe,OAAyB;AAChD,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI;AACH,UAAM,SAAS,IAAI,IAAI,KAAK;AAC5B,WAAO,OAAO,aAAa,YAAY,OAAO,aAAa;AAAA,EAC5D,QAAQ;AACP,WAAO;AAAA,EACR;AACD;AAEA,SAAS,gBACR,SACA,KACwC;AACxC,QAAM,OAAO,IAAI,QAAQ;AAAA,IACxB,KAAK,GAAG,QAAQ,QAAQ,OAAO,EAAE,CAAC;AAAA,IAClC,SAAS,MAAM;AACd,YAAM,eAAe,IAAI,OAAO;AAChC,aAAO,eAAe,EAAE,QAAQ,aAAa,IAAI,CAAC;AAAA,IACnD;AAAA,IACA,OAAO,OAAO,OAAO,SAAS;AAC7B,YAAM,WAAW,MAAM,MAAM,OAAO,IAAI;AACxC,YAAM,YAAY,SAAS,QAAQ,eAAe,KAAK,CAAC;AACxD,UAAI,UAAU,SAAS,GAAG;AACzB,YAAI,IAAI,SAAS;AAAA,MAClB;AACA,aAAO;AAAA,IACR;AAAA,EACD,CAAC;AAED,SAAO,iBAAiB,IAAI;AAC7B;AAEA,eAAe,cAAc,SAW1B;AACF,QAAM,SAAS,gBAAgB,QAAQ,SAAS,QAAQ,OAAO;AAChE,QAAM,sBAAsB,QAAQ,MAAM;AAC1C,QAAM,aAAa,QAAQ;AAE3B,QAAM,SAAS,MAAM,OAAO,WAAW,gBAAgB;AAAA,IACnD,mBAAmB,QAAQ;AAAA,IAC3B;AAAA,IACA,iBAAiB,QAAQ,MAAM;AAAA,EACnC,CAAC;AAEA,MAAI,qBAAqB;AACxB,UAAM,WAAW,MAAM;AAAA,MACtB,GAAG,QAAQ,QAAQ,QAAQ,OAAO,EAAE,CAAC;AAAA,MACrC;AAAA,QACC,QAAQ;AAAA,QACR,SAAS;AAAA,UACR,gBAAgB;AAAA,UAChB,QAAQ;AAAA,QACT;AAAA,QACA,MAAM,KAAK,UAAU;AAAA,UACpB,MAAM,OAAO;AAAA,UACb,iBAAiB,QAAQ,MAAM,mBAAmB;AAAA,QACnD,CAAC;AAAA,MACF;AAAA,IACD;AAEA,QAAI,CAAC,SAAS,IAAI;AACjB,YAAM,OAAQ,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAGpD,YAAM,IAAI;AAAA,QACT,KAAK,SACJ,uCAAuC,SAAS,MAAM;AAAA,MACxD;AAAA,IACD;AAAA,EACD,OAAO;AACA,QAAI,CAAC,QAAQ,MAAM,MAAM;AACrB,MAAE;AAAA,QACE;AAAA,UACI,gBAAgB,OAAO,QAAQ;AAAA,UAC/B,gBAAgB,UAAU;AAAA,UAC1B;AAAA,QACJ,EAAE,KAAK,IAAI;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAEN,QAAI,CAAC,QAAQ,MAAM,UAAU,CAAC,QAAQ,MAAM,MAAM;AACjD,UAAI;AACH,cAAM,KAAK,OAAO,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAAA,MACnD,SAAS,OAAO;AACf,gBAAQ;AAAA,UACP,yCAA0C,MAAgB,OAAO;AAAA,QAClE;AACA,gBAAQ,KAAK,2BAA2B,OAAO,eAAe,EAAE;AAAA,MACjE;AAAA,IACD,WAAW,CAAC,QAAQ,MAAM,MAAM;AAC/B,cAAQ,IAAI,kCAAkC,OAAO,eAAe,EAAE;AAAA,IACvE;AAEA,UAAMC,WAAU,QAAQ,MAAM,OAAO,OAAS,UAAQ;AACtD,IAAAA,UAAS,MAAM,8BAA8B;AAE7C,UAAM,WAAW,KAAK,IAAI,IAAI,OAAO,YAAY;AACjD,QAAI;AAEJ,WAAO,KAAK,IAAI,IAAI,UAAU;AAC7B,YAAM,OAAO,MAAM,OAAO,WAAW,eAAe;AAAA,QACnD,YAAY,OAAO;AAAA,MACpB,CAAC;AAED,UAAI,KAAK,WAAW,cAAc;AACjC,yBAAiB,KAAK;AACtB,QAAAA,UAAS,KAAK,oBAAoB;AAClC;AAAA,MACD;AAEA,UAAI,KAAK,WAAW,WAAW;AAC9B,QAAAA,UAAS,KAAK,sBAAsB;AACpC,cAAM,IAAI,MAAM,2CAA2C;AAAA,MAC5D;AAEA,UAAI,KAAK,WAAW,UAAU;AAC7B,QAAAA,UAAS,KAAK,uBAAuB;AACrC,cAAM,IAAI,MAAM,4CAA4C;AAAA,MAC7D;AAEK,YAAM,cAAc,KAAK;AAAA,QACrB;AAAA,QACA,KAAK,OAAO,WAAW,KAAK,IAAI,KAAK,GAAI;AAAA,MAC7C;AACA,MAAAA,UAAS;AAAA,QACL,8BAA8B,WAAW;AAAA,MAClD;AACA,YAAM,MAAM,OAAO,WAAW,GAAI;AAAA,IACnC;AAEA,QAAI,CAAC,gBAAgB;AACpB,YAAM,IAAI,MAAM,sCAAsC;AAAA,IACvD;AAEM,UAAMC,eAAc,MAAM,OAAO,WAAW,UAAU;AAAA,MAClD;AAAA,MACA,aAAa,QAAQ;AAAA,MACrB;AAAA,MACA,iBAAiB,QAAQ,MAAM;AAAA,IACzC,CAAC;AAED,UAAMC,YAAW,sBAAsB,GAAG;AAE1C,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA,aAAAD;AAAA,MACA,UAAAC;AAAA,IACD;AAAA,EACD;AAGA,QAAM,aAAa,MAAM,OAAO,WAAW,eAAe;AAAA,IACzD,YAAY,OAAO;AAAA,EACpB,CAAC;AAED,MAAI,WAAW,WAAW,cAAc;AACvC,UAAM,IAAI;AAAA,MACT,6CAA6C,WAAW,MAAM;AAAA,IAC/D;AAAA,EACD;AAEA,QAAM,cAAc,MAAM,OAAO,WAAW,UAAU;AAAA,IACrD,gBAAgB,WAAW;AAAA,IAC3B,aAAa,QAAQ;AAAA,IACrB;AAAA,IACA,iBAAiB,QAAQ,MAAM;AAAA,EAChC,CAAC;AAED,QAAM,WAAW,sBAAsB,GAAG;AAE1C,SAAO;AAAA,IACN;AAAA,IACA,gBAAgB,WAAW;AAAA,IAC3B;AAAA,IACA;AAAA,EACD;AACD;AAEA,eAAe,OAAO;AACrB,QAAM,QAAQ,WAAW,QAAQ,KAAK,MAAM,CAAC,CAAC;AAC9C,QAAM,WAAW,MAAM;AAEvB,MAAI,CAAC,UAAU;AACd,IAAE,QAAM,0CAAqC;AAAA,EAC9C;AAEA,QAAM,UAAU,MAAM,WAAW;AACjC,QAAM,UAAU,IAAI,UAAU,MAAM,WAAW;AAE/C,QAAM,kBAAkB,QAAQ,IAAI;AACpC,QAAM,gBAAgB,iBAAiB;AAAA,IACtC,gBAAgB,MAAM;AAAA,IACtB,gBAAgB;AAAA,IAChB,KAAK,QAAQ,IAAI;AAAA,IACjB,iBAAiB;AAAA,EAClB,CAAC;AACD,QAAM,EAAE,mBAAmB,IAAI;AAC/B,MAAI,aAAa,cAAc;AAC/B,MAAI,UAAU,cAAc;AAE5B,MAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,MAAM,SAAS;AACvD,UAAM,YAAY,MAAQ,OAAK;AAAA,MAC9B,SAAS;AAAA,MACT,cAAc;AAAA,IACf,CAAC;AAED,QAAM,WAAS,SAAS,GAAG;AAC1B,MAAE,SAAO,UAAU;AACnB,cAAQ,KAAK,CAAC;AAAA,IACf;AACA,iBAAa;AAAA,EACd;AAEA,eAAa,mBAAmB,UAAU;AAC1C,wBAAsB,UAAU;AAEhC,MAAI,CAAC,MAAM,WAAW,CAAC,mBAAmB,CAAC,UAAU;AACpD,UAAM,YAAY,MAAQ,OAAK;AAAA,MAC9B,SAAS;AAAA,MACT,cAAc;AAAA,IACf,CAAC;AAED,QAAM,WAAS,SAAS,GAAG;AAC1B,MAAE,SAAO,UAAU;AACnB,cAAQ,KAAK,CAAC;AAAA,IACf;AACA,cAAU,UAAU,KAAK,KAAK;AAAA,EAC/B;AAEA,QAAM,UAAUH,MAAK,KAAK,YAAY,OAAO;AAC7C,QAAM,oBAAoB,YAAY,OAAO;AAC7C,QAAM,qBAAqB,kBAAkB,IAAI,cAAc,GAAG,KAAK;AAEvE,MAAI,oBAAoB;AACvB,UAAM,iBACL;AAED,QAAI,UAAU;AACb,cAAQ;AAAA,QACP,KAAK;AAAA,UACJ;AAAA,YACC,QAAQ;AAAA,YACR,OAAO,EAAE,SAAS,eAAe;AAAA,UAClC;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,IACD,OAAO;AACN,MAAE,SAAO,cAAc;AAAA,IACxB;AAEA,YAAQ,KAAK,CAAC;AAAA,EACf;AAEA,MAAI,aAAa,MAAM,YAAY,KAAK;AACxC,OAAK,CAAC,cAAc,CAAC,eAAe,UAAU,MAAM,UAAU;AAC7D,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC7E;AAEA,SAAO,CAAC,YAAY;AACnB,UAAM,eAAe,MAAQ,OAAK;AAAA,MACjC,SAAS;AAAA,MACT,cAAc;AAAA,MACd,aAAa;AAAA,MACb,UAAU,CAAC,UACV,eAAe,OAAO,KAAK,CAAC,IACzB,SACA;AAAA,IACL,CAAC;AAED,QAAM,WAAS,YAAY,GAAG;AAC7B,MAAE,SAAO,UAAU;AACnB,cAAQ,KAAK,CAAC;AAAA,IACf;AAEA,iBAAa,aAAa,KAAK;AAAA,EAChC;AAEA,MAAI,cAAc,MAAM,aAAa,KAAK;AAC1C,MAAI,CAAC,eAAe,CAAC,UAAU;AAC9B,UAAM,aAAa,MAAQ,OAAK;AAAA,MAC/B,SAAS;AAAA,MACT,aAAa;AAAA,IACd,CAAC;AACD,QAAM,WAAS,UAAU,GAAG;AAC3B,MAAE,SAAO,UAAU;AACnB,cAAQ,KAAK,CAAC;AAAA,IACf;AACA,kBAAc,WAAW,KAAK,KAAK;AAAA,EACpC;AAEA,gBAAc,kBAAkB,aAAa,UAAU;AAEvD,MAAI;AACH,UAAM,SAAS,MAAM,cAAc;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAC;AAED,UAAM,UAAkC;AAAA,MACvC,kBAAkB,OAAO,YAAY;AAAA,MACrC,oBAAoB,OAAO,YAAY;AAAA,MACvC,cAAc,OAAO;AAAA,IACtB;AAEA,wBAAoB,OAAO;AAC3B,UAAM,cAAc,YAAY,OAAO;AACvC,UAAM,UAAU,iBAAiB,aAAa,OAAO;AAErD,iBAAa,SAAS,aAAa,OAAO;AAE1C,QAAI,CAAC,UAAU;AACd,MAAE,OAAK,SAAS,kBAAkB;AAAA,IACnC;AAEM,QAAI,CAAC,MAAM,aAAa;AACpB,YAAM,UAAU;AAAA,QACxB,CAAC,oBAAoB,QAAQ,gBAAgB,IAAI,sBAAsB,QAAQ,kBAAkB,IAAI,gBAAgB,QAAQ,YAAY,EAAE,EAAE;AAAA,UAC5I;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,UAAM,UAAU;AAAA,MACf;AAAA,MACA,SAAS;AAAA,MACT,eAAe,OAAO,YAAY;AAAA,MAClC,WAAW,OAAO,YAAY;AAAA,MAC9B,gBAAgB,OAAO,YAAY;AAAA,MACnC,YAAY,OAAO,YAAY;AAAA,MAC/B,UAAU,QAAQ;AAAA,IACnB;AAEM,QAAI,UAAU;AACV,cAAQ;AAAA,QACJ,KAAK;AAAA,UACD;AAAA,YACI,QAAQ;AAAA,YACR,MAAM;AAAA,cACvB,SAAS;AAAA,cACT,UAAU,OAAO,YAAY;AAAA,cAC7B,eAAe,OAAO,YAAY;AAAA,cAClC,WAAW,OAAO,YAAY;AAAA,cAC9B,eAAe,OAAO,YAAY;AAAA,cAClC,YAAY,OAAO,YAAY;AAAA,cAC/B,gBAAgB,OAAO,YAAY;AAAA,cACnC,UAAU,QAAQ;AAAA,YACnB;AAAA,UACD;AAAA,UACA;AAAA,UACA;AAAA,QACW;AAAA,MACJ;AAAA,IACJ,OAAO;AACH,MAAE;AAAA,QACE;AAAA,UACI;AAAA,UACA,iCAA4B,OAAO;AAAA,UACnC,sBAAiB,OAAO,YAAY,SAAS;AAAA,UAC7C,wBAAmB,OAAO,YAAY,cAAc;AAAA,UACpD,MAAM,cACA,6CACA;AAAA,UACN;AAAA,QACJ,EAAE,KAAK,IAAI;AAAA,MACf;AAAA,IACJ;AAEA,WAAO;AAAA,EACd,SAAS,OAAO;AACf,QAAI,UAAU;AACb,cAAQ;AAAA,QACP,KAAK;AAAA,UACJ;AAAA,YACC,QAAQ;AAAA,YACR,OAAO;AAAA,cACN,SACC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,YACvD;AAAA,UACD;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA,IACD,OAAO;AACN,MAAE;AAAA,QACD,iBAAiB,QAAQ,MAAM,UAAU,qBAAqB,KAAK;AAAA,MACpE;AAAA,IACD;AACA,YAAQ,KAAK,CAAC;AAAA,EACf;AACD;AAEA,KAAK,KAAK;","names":["path","path","spinner","credentials","mnemonic"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils/env-target.ts"],"sourcesContent":["import { createORPCClient } from \"@orpc/client\";\nimport { RPCLink } from \"@orpc/client/fetch\";\nimport * as p from \"@clack/prompts\";\nimport minimist from \"minimist\";\nimport path from \"node:path\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport open from \"open\";\nimport clipboard from \"clipboardy\";\nimport setCookieParser, { Cookie } from \"set-cookie-parser\";\nimport { generateMnemonic as generateBip39Mnemonic } from \"bip39\";\nimport { contract } from \"@moneydevkit/api-contract\";\nimport type { ContractRouterClient } from \"@orpc/contract\";\nimport type {\n\tBootstrapOnboardingResponse,\n\tStartDeviceAuthResponse,\n} from \"@moneydevkit/api-contract\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { deriveProjectName, resolveEnvTarget } from \"./utils/env-target.js\";\n\ntype Flags = {\n\tjson: boolean;\n\tnoClipboard: boolean;\n\tnoOpen: boolean;\n\tyes: boolean;\n\tbaseUrl?: string;\n\tenvFile?: string;\n\tprojectName?: string;\n\tmanualLogin?: string;\n\tforceNewWebhook?: boolean;\n\twebhookUrl?: string;\n};\n\nconst DEFAULT_BASE_URL = \"https://moneydevkit.com\";\nconst DEFAULT_ENV_FILE = \".env.local\";\n\nclass CookieJar {\n\tprivate store = new Map<string, string>();\n\n\tconstructor(initial?: string) {\n\t\tif (initial) {\n\t\t\tthis.add(initial);\n\t\t}\n\t}\n\n\tadd(input: string | string[]) {\n\t\tconst cookies = Array.isArray(input) ? input : [input];\n\t\tfor (const line of cookies) {\n\t\t\tconst trimmed = line.trim();\n\t\t\tif (!trimmed) continue;\n\t\t\tconst parsed = setCookieParser.parse(trimmed);\n\t\t\tconst handle = (cookie: Cookie) => {\n\t\t\t\tif (cookie?.name && cookie.value !== undefined) {\n\t\t\t\t\tthis.store.set(cookie.name, cookie.value);\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (Array.isArray(parsed)) {\n\t\t\t\tfor (const cookie of parsed) {\n\t\t\t\t\thandle(cookie);\n\t\t\t\t}\n\t\t\t} else if (parsed && typeof parsed === \"object\") {\n\t\t\t\thandle(parsed);\n\t\t\t}\n\t\t}\n\t}\n\n\theader(): string | undefined {\n\t\tif (this.store.size === 0) return undefined;\n\t\treturn Array.from(this.store.entries())\n\t\t\t.map(([name, value]) => `${name}=${value}`)\n\t\t\t.join(\"; \");\n\t}\n}\n\nfunction parseFlags(argv: string[]): Flags {\n\tconst result = minimist(argv, {\n\t\tboolean: [\"json\", \"no-clipboard\", \"no-open\", \"force-new-webhook\", \"yes\"],\n\t\tstring: [\n\t\t\t\"base-url\",\n\t\t\t\"env-target\",\n\t\t\t\"project-name\",\n\t\t\t\"manual-login\",\n\t\t\t\"webhook-url\",\n\t\t],\n\t\talias: {\n\t\t\tjson: \"j\",\n\t\t},\n\t\tdefault: {\n\t\t\t\"no-clipboard\": false,\n\t\t\t\"no-open\": false,\n\t\t\tjson: false,\n\t\t\t\"force-new-webhook\": false,\n\t\t\tyes: false,\n\t\t},\n\t});\n\nreturn {\n\tjson: Boolean(result.json),\n\tnoClipboard: Boolean(result[\"no-clipboard\"]),\n\tnoOpen: Boolean(result[\"no-open\"]),\n\tyes: Boolean(result.yes),\n\tbaseUrl: result[\"base-url\"],\n\tenvFile: result[\"env-target\"],\n\t\tprojectName:\n\t\t\ttypeof result[\"project-name\"] === \"string\"\n\t\t\t\t? result[\"project-name\"]\n\t\t\t\t: undefined,\n\t\tmanualLogin:\n\t\t\ttypeof result[\"manual-login\"] === \"string\"\n\t\t\t\t? result[\"manual-login\"]\n\t\t\t\t: undefined,\n\t\tforceNewWebhook: Boolean(result[\"force-new-webhook\"]),\n\t\twebhookUrl:\n\t\t\ttypeof result[\"webhook-url\"] === \"string\"\n\t\t\t\t? result[\"webhook-url\"]\n\t\t\t\t: undefined,\n\t};\n}\n\nfunction normalizeDirectory(dir: string): string {\n\tif (path.isAbsolute(dir)) return dir;\n\treturn path.resolve(process.cwd(), dir);\n}\n\nfunction ensureDirectoryExists(dir: string) {\n\tif (!fs.existsSync(dir)) {\n\t\tfs.mkdirSync(dir, { recursive: true });\n\t}\n}\n\nfunction readEnvFile(filePath: string): Map<string, string> {\n\tconst env = new Map<string, string>();\n\tif (!fs.existsSync(filePath)) {\n\t\treturn env;\n\t}\n\tconst contents = fs.readFileSync(filePath, \"utf8\");\n\tfor (const line of contents.split(/\\r?\\n/)) {\n\t\tif (!line || line.startsWith(\"#\")) continue;\n\t\tconst [key, ...rest] = line.split(\"=\");\n\t\tif (!key) continue;\n\t\tenv.set(key.trim(), rest.join(\"=\").trim());\n\t}\n\treturn env;\n}\n\nfunction renderEnvPreview(\n\t_original: Map<string, string>,\n\tupdates: Record<string, string>,\n): string {\n\tconst lines: string[] = [\"Writing the following values:\", \"\"];\n\tfor (const [key, value] of Object.entries(updates)) {\n\t\tlines.push(` ${key}=${value}`);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\nfunction writeEnvFile(\n\tfilePath: string,\n\texisting: Map<string, string>,\n\tupdates: Record<string, string>,\n) {\n\tfor (const [key, value] of Object.entries(updates)) {\n\t\texisting.set(key, value);\n\t}\n\tconst content =\n\t\tArray.from(existing.entries())\n\t\t\t.sort(([a], [b]) => a.localeCompare(b))\n\t\t\t.map(([key, value]) => `${key}=${value}`)\n\t\t\t.join(os.EOL) + os.EOL;\n\tfs.writeFileSync(filePath, content, \"utf8\");\n}\n\nfunction ensureEnvFileExists(filePath: string) {\n\tconst dir = path.dirname(filePath);\n\tensureDirectoryExists(dir);\n\tif (!fs.existsSync(filePath)) {\n\t\tfs.writeFileSync(filePath, \"\", \"utf8\");\n\t}\n}\n\nfunction resolveLocalEnvPath(options: {\n\torganizationId?: string;\n}): string | undefined {\n\tconst trimmed = options.organizationId?.trim();\n\tif (!trimmed) {\n\t\treturn undefined;\n\t}\n\tconst homeDir = os.homedir();\n\treturn path.join(homeDir, \".mdk\", trimmed, \".env\");\n}\n\nfunction isValidHttpUrl(value?: string): boolean {\n\tif (!value) return false;\n\ttry {\n\t\tconst parsed = new URL(value);\n\t\treturn parsed.protocol === \"https:\" || parsed.protocol === \"http:\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction createRpcClient(\n\tbaseUrl: string,\n\tjar: CookieJar,\n): ContractRouterClient<typeof contract> {\n\tconst link = new RPCLink({\n\t\turl: `${baseUrl.replace(/\\/$/, \"\")}/rpc`,\n\t\theaders: () => {\n\t\t\tconst cookieHeader = jar.header();\n\t\t\treturn cookieHeader ? { Cookie: cookieHeader } : {};\n\t\t},\n\t\tfetch: async (input, init) => {\n\t\t\tconst response = await fetch(input, init);\n\t\t\tconst setCookie = response.headers.getSetCookie?.() ?? [];\n\t\t\tif (setCookie.length > 0) {\n\t\t\t\tjar.add(setCookie);\n\t\t\t}\n\t\t\treturn response;\n\t\t},\n\t});\n\n\treturn createORPCClient(link) as ContractRouterClient<typeof contract>;\n}\n\nasync function runDeviceFlow(options: {\n\tflags: Flags;\n\tbaseUrl: string;\n\tcookies: CookieJar;\n\tprojectName?: string;\n\twebhookUrl: string;\n}): Promise<{\n\tdevice: StartDeviceAuthResponse;\n\tbootstrapToken: string;\n\tcredentials: BootstrapOnboardingResponse;\n\tmnemonic: string;\n}> {\n\tconst client = createRpcClient(options.baseUrl, options.cookies);\nconst manualSessionCookie = options.flags.manualLogin;\nconst webhookUrl = options.webhookUrl;\n\nconst device = await client.onboarding.startDeviceAuth({\n clientDisplayName: options.projectName,\n webhookUrl,\n forceNewWebhook: options.flags.forceNewWebhook,\n});\n\n\tif (manualSessionCookie) {\n\t\tconst response = await fetch(\n\t\t\t`${options.baseUrl.replace(/\\/$/, \"\")}/api/cli/device/authorize`,\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\tCookie: manualSessionCookie,\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\tcode: device.userCode,\n\t\t\t\t\tforceNewWebhook: options.flags.forceNewWebhook ?? false,\n\t\t\t\t}),\n\t\t\t},\n\t\t);\n\n\t\tif (!response.ok) {\n\t\t\tconst body = (await response.json().catch(() => ({}))) as {\n\t\t\t\terror?: string;\n\t\t\t};\n\t\t\tthrow new Error(\n\t\t\t\tbody.error ??\n\t\t\t\t\t`Manual authorize failed with status ${response.status}`,\n\t\t\t);\n\t\t}\n\t} else {\n if (!options.flags.json) {\n p.note(\n [\n `Device code: ${device.userCode}`,\n `Webhook URL: ${webhookUrl}`,\n \"Open the authorization page, click Authorize, then return to this terminal.\",\n ].join(\"\\n\"),\n \"Authorize this device\",\n );\n }\n\n\t\tif (!options.flags.noOpen && !options.flags.json) {\n\t\t\ttry {\n\t\t\t\tawait open(device.verificationUri, { wait: false });\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Unable to open browser automatically (${(error as Error).message}).`,\n\t\t\t\t);\n\t\t\t\tconsole.warn(`Open this URL manually: ${device.verificationUri}`);\n\t\t\t}\n\t\t} else if (!options.flags.json) {\n\t\t\tconsole.log(`Open this URL in your browser: ${device.verificationUri}`);\n\t\t}\n\n\t\tconst spinner = options.flags.json ? null : p.spinner();\n\t\tspinner?.start(\"Waiting for authorization...\");\n\n\t\tconst deadline = Date.now() + device.expiresIn * 1000;\n\t\tlet bootstrapToken: string | undefined;\n\n\t\twhile (Date.now() < deadline) {\n\t\t\tconst poll = await client.onboarding.pollDeviceAuth({\n\t\t\t\tdeviceCode: device.deviceCode,\n\t\t\t});\n\n\t\t\tif (poll.status === \"authorized\") {\n\t\t\t\tbootstrapToken = poll.bootstrapToken;\n\t\t\t\tspinner?.stop(\"Device authorized.\");\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (poll.status === \"expired\") {\n\t\t\t\tspinner?.stop(\"Device code expired.\");\n\t\t\t\tthrow new Error(\"Device code expired before authorization.\");\n\t\t\t}\n\n\t\t\tif (poll.status === \"denied\") {\n\t\t\t\tspinner?.stop(\"Authorization denied.\");\n\t\t\t\tthrow new Error(\"Authorization was denied in the dashboard.\");\n\t\t\t}\n\n const secondsLeft = Math.max(\n 0,\n Math.floor((deadline - Date.now()) / 1000),\n );\n spinner?.message(\n `Waiting for authorization (${secondsLeft}s remaining)`,\n\t\t\t);\n\t\t\tawait delay(device.interval * 1000);\n\t\t}\n\n\t\tif (!bootstrapToken) {\n\t\t\tthrow new Error(\"Timed out waiting for authorization.\");\n\t\t}\n\n const credentials = await client.onboarding.bootstrap({\n bootstrapToken,\n projectName: options.projectName,\n webhookUrl,\n forceNewWebhook: options.flags.forceNewWebhook,\n\t\t});\n\n\t\tconst mnemonic = generateBip39Mnemonic(128);\n\n\t\treturn {\n\t\t\tdevice,\n\t\t\tbootstrapToken,\n\t\t\tcredentials,\n\t\t\tmnemonic,\n\t\t};\n\t}\n\n\t// Manual path: poll once to get the bootstrap token.\n\tconst pollResult = await client.onboarding.pollDeviceAuth({\n\t\tdeviceCode: device.deviceCode,\n\t});\n\n\tif (pollResult.status !== \"authorized\") {\n\t\tthrow new Error(\n\t\t\t`Unable to obtain bootstrap token (status: ${pollResult.status}).`,\n\t\t);\n\t}\n\n\tconst credentials = await client.onboarding.bootstrap({\n\t\tbootstrapToken: pollResult.bootstrapToken,\n\t\tprojectName: options.projectName,\n\t\twebhookUrl,\n\t\tforceNewWebhook: options.flags.forceNewWebhook,\n\t});\n\n\tconst mnemonic = generateBip39Mnemonic(128);\n\n\treturn {\n\t\tdevice,\n\t\tbootstrapToken: pollResult.bootstrapToken,\n\t\tcredentials,\n\t\tmnemonic,\n\t};\n}\n\nasync function main() {\n\tconst flags = parseFlags(process.argv.slice(2));\n\tconst jsonMode = flags.json;\n\n\tif (!jsonMode) {\n\t\tp.intro(\"Money Dev Kit – @moneydevkit/create\");\n\t}\n\n\tconst baseUrl = flags.baseUrl ?? DEFAULT_BASE_URL;\n\tconst cookies = new CookieJar(flags.manualLogin);\n\n\tconst envFileOverride = process.env.MDK_ENV_FILE;\n\tconst envResolution = resolveEnvTarget({\n\t\texplicitTarget: flags.envFile,\n\t\toverrideTarget: envFileOverride,\n\t\tcwd: process.cwd(),\n\t\tdefaultFilename: DEFAULT_ENV_FILE,\n\t});\n\tconst { providedExplicitly } = envResolution;\n\tlet projectDir = envResolution.projectDir;\n\tlet envFile = envResolution.envFile;\n\n\tif (!providedExplicitly && !jsonMode && !flags.envFile) {\n\t\tconst dirPrompt = await p.text({\n\t\t\tmessage: \"Where should we store your MDK credentials?\",\n\t\t\tinitialValue: projectDir,\n\t\t});\n\n\t\tif (p.isCancel(dirPrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tprojectDir = dirPrompt;\n\t}\n\n\tprojectDir = normalizeDirectory(projectDir);\n\tensureDirectoryExists(projectDir);\n\n\tif (!flags.envFile && !envFileOverride && !jsonMode) {\n\t\tconst envPrompt = await p.text({\n\t\t\tmessage: \"Env file to update\",\n\t\t\tinitialValue: envFile,\n\t\t});\n\n\t\tif (p.isCancel(envPrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tenvFile = envPrompt.trim() || DEFAULT_ENV_FILE;\n\t}\n\n\tconst envPath = path.join(projectDir, envFile);\n\tconst existingEnvValues = readEnvFile(envPath);\n\tconst mnemonicAlreadySet = existingEnvValues.get(\"MDK_MNEMONIC\")?.trim();\n\n\tif (mnemonicAlreadySet) {\n\t\tconst warningMessage =\n\t\t\t\"We found MDK_MNEMONIC already set in your project. Your mnemonic is the key to your wallet. If you've already deployed and taken payments with this mnemonic and change it, you will lose access to your funds. If you want to generate a new mnemonic, delete MDK_MNEMONIC from your .env and try again.\";\n\n\t\tif (jsonMode) {\n\t\t\tconsole.error(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\terror: { message: warningMessage },\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tp.cancel(warningMessage);\n\t\t}\n\n\t\tprocess.exit(1);\n\t}\n\n\tlet webhookUrl = flags.webhookUrl?.trim();\n\tif ((!webhookUrl || !isValidHttpUrl(webhookUrl)) && jsonMode) {\n\t\tthrow new Error(\"Provide a valid --webhook-url when running in --json mode.\");\n\t}\n\n\twhile (!webhookUrl) {\n\t\tconst webhookInput = await p.text({\n\t\t\tmessage: \"Webhook URL for your application\",\n\t\t\tinitialValue: \"https://\",\n\t\t\tplaceholder: \"https://yourapp.com\",\n\t\t\tvalidate: (value) =>\n\t\t\t\tisValidHttpUrl(value?.trim())\n\t\t\t\t\t? undefined\n\t\t\t\t\t: \"Enter a valid http(s) URL (e.g. https://yourapp.com)\",\n\t\t});\n\n\t\tif (p.isCancel(webhookInput)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\n\t\twebhookUrl = webhookInput.trim();\n\t}\n\n\tlet projectName = flags.projectName?.trim();\n\tif (!projectName && !jsonMode) {\n\t\tconst namePrompt = await p.text({\n\t\t\tmessage: \"Project name (used for the generated API key)\",\n\t\t\tplaceholder: \"Optional: e.g. My Next.js Store\",\n\t\t});\n\t\tif (p.isCancel(namePrompt)) {\n\t\t\tp.cancel(\"Aborted.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tprojectName = namePrompt.trim() || undefined;\n\t}\n\n\tprojectName = deriveProjectName(projectName, webhookUrl);\n\n\ttry {\n\t\tconst result = await runDeviceFlow({\n\t\t\tflags,\n\t\t\tbaseUrl,\n\t\t\tcookies,\n\t\t\tprojectName,\n\t\t\twebhookUrl,\n\t\t});\n\n\t\tconst updates: Record<string, string> = {\n\t\t\tMDK_ACCESS_TOKEN: result.credentials.apiKey,\n\t\t\tMDK_WEBHOOK_SECRET: result.credentials.webhookSecret,\n\t\t\tMDK_MNEMONIC: result.mnemonic,\n\t\t};\n\n\t\tensureEnvFileExists(envPath);\n\t\tconst existingEnv = readEnvFile(envPath);\n\t\tconst preview = renderEnvPreview(existingEnv, updates);\n\n\t\twriteEnvFile(envPath, existingEnv, updates);\n\n\t\tconst localEnvPath = resolveLocalEnvPath({\n\t\t\torganizationId: result.credentials.organizationId,\n\t\t});\n\t\tif (localEnvPath) {\n\t\t\tensureEnvFileExists(localEnvPath);\n\t\t\tconst localEnv = readEnvFile(localEnvPath);\n\t\t\twriteEnvFile(localEnvPath, localEnv, updates);\n\t\t}\n\n\t\tif (!jsonMode) {\n\t\t\tp.note(preview, \"Env file updated\");\n\t\t}\n\n if (!flags.noClipboard) {\n await clipboard.write(\n\t\t\t\t[`MDK_ACCESS_TOKEN=${updates.MDK_ACCESS_TOKEN}`, `MDK_WEBHOOK_SECRET=${updates.MDK_WEBHOOK_SECRET}`, `MDK_MNEMONIC=${updates.MDK_MNEMONIC}`].join(\n\t\t\t\t\t\"\\n\",\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tconst summary = {\n\t\t\tprojectDir,\n\t\t\tenvFile: envPath,\n\t\t\tapiKeyPreview: result.credentials.apiKeyPreview,\n\t\t\twebhookId: result.credentials.webhookId,\n\t\t\torganizationId: result.credentials.organizationId,\n\t\t\twebhookUrl: result.credentials.webhookUrl,\n\t\t\tmnemonic: updates.MDK_MNEMONIC,\n\t\t};\n\n if (jsonMode) {\n console.log(\n JSON.stringify(\n {\n status: \"success\",\n data: {\n\t\t\t\t\t\t\tenvFile: envPath,\n\t\t\t\t\t\t\tapiKeyId: result.credentials.apiKeyId,\n\t\t\t\t\t\t\tapiKeyPreview: result.credentials.apiKeyPreview,\n\t\t\t\t\t\t\twebhookId: result.credentials.webhookId,\n\t\t\t\t\t\t\twebhookSecret: result.credentials.webhookSecret,\n\t\t\t\t\t\t\twebhookUrl: result.credentials.webhookUrl,\n\t\t\t\t\t\t\torganizationId: result.credentials.organizationId,\n\t\t\t\t\t\t\tmnemonic: updates.MDK_MNEMONIC,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n ),\n );\n } else {\n p.outro(\n [\n \"Authorized successfully!\",\n `• Credentials written to ${envPath}`,\n `• Webhook ID: ${result.credentials.webhookId}`,\n `• Organization: ${result.credentials.organizationId}`,\n flags.noClipboard\n ? \"Clipboard copy skipped (--no-clipboard).\"\n : \"Secrets copied to clipboard.\",\n \"Return to your project and continue development.\",\n ].join(\"\\n\"),\n );\n }\n\n return summary;\n\t} catch (error) {\n\t\tif (jsonMode) {\n\t\t\tconsole.error(\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t{\n\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\terror instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tnull,\n\t\t\t\t\t2,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tp.cancel(\n\t\t\t\terror instanceof Error ? error.message : `Unexpected error: ${error}`,\n\t\t\t);\n\t\t}\n\t\tprocess.exit(1);\n\t}\n}\n\nvoid main();\n","import path from \"node:path\";\n\nexport type EnvTargetResolution = {\n projectDir: string;\n envFile: string;\n providedExplicitly: boolean;\n};\n\nexport function resolveEnvTarget(options: {\n explicitTarget?: string;\n overrideTarget?: string;\n cwd: string;\n defaultFilename: string;\n}): EnvTargetResolution {\n const { explicitTarget, overrideTarget, cwd, defaultFilename } = options;\n const rawTarget = explicitTarget ?? overrideTarget ?? defaultFilename;\n const hasPathSeparator = rawTarget.includes(\"/\") || rawTarget.includes(\"\\\\\");\n\n let projectDir = cwd;\n let envFile = path.basename(rawTarget);\n let providedExplicitly = Boolean(explicitTarget);\n\n if (path.isAbsolute(rawTarget)) {\n projectDir = path.dirname(rawTarget);\n envFile = path.basename(rawTarget);\n providedExplicitly = true;\n } else if (hasPathSeparator) {\n const relativeDir = path.dirname(rawTarget);\n if (relativeDir && relativeDir !== \".\" && relativeDir !== \"\") {\n projectDir = path.resolve(cwd, relativeDir);\n envFile = path.basename(rawTarget);\n providedExplicitly = true;\n }\n }\n\n return {\n projectDir: path.resolve(projectDir),\n envFile,\n providedExplicitly,\n };\n}\n\nexport function deriveProjectName(input: string | undefined, webhookUrl: string): string {\n const trimmed = input?.trim();\n if (trimmed) {\n return trimmed;\n }\n return webhookUrl;\n}\n"],"mappings":"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","names":["path","path","spinner","credentials","mnemonic"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneydevkit/create",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Interactive CLI for bootstrapping Money Dev Kit credentials.",
5
5
  "type": "module",
6
6
  "bin": {