everything-dev 1.14.4 → 1.16.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/cli/init.cjs +6 -18
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.d.cts.map +1 -1
- package/dist/cli/init.d.mts.map +1 -1
- package/dist/cli/init.mjs +6 -18
- package/dist/cli/init.mjs.map +1 -1
- package/dist/cli/prompts.cjs +8 -8
- package/dist/cli/prompts.cjs.map +1 -1
- package/dist/cli/prompts.mjs +8 -8
- package/dist/cli/prompts.mjs.map +1 -1
- package/dist/config.cjs +2 -0
- package/dist/config.cjs.map +1 -1
- package/dist/config.d.cts.map +1 -1
- package/dist/config.d.mts.map +1 -1
- package/dist/config.mjs +2 -0
- package/dist/config.mjs.map +1 -1
- package/dist/contract.d.cts +4 -0
- package/dist/contract.d.cts.map +1 -1
- package/dist/contract.d.mts +4 -0
- package/dist/contract.d.mts.map +1 -1
- package/dist/merge.cjs +2 -0
- package/dist/merge.cjs.map +1 -1
- package/dist/merge.d.cts +1 -1
- package/dist/merge.d.cts.map +1 -1
- package/dist/merge.d.mts +1 -1
- package/dist/merge.d.mts.map +1 -1
- package/dist/merge.mjs +2 -0
- package/dist/merge.mjs.map +1 -1
- package/dist/near-cli.cjs +29 -52
- package/dist/near-cli.cjs.map +1 -1
- package/dist/near-cli.mjs +29 -52
- package/dist/near-cli.mjs.map +1 -1
- package/dist/plugin.cjs +15 -7
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +5 -0
- package/dist/plugin.d.mts +5 -0
- package/dist/plugin.mjs +15 -7
- package/dist/plugin.mjs.map +1 -1
- package/dist/types.cjs +4 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +7 -0
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +7 -0
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +4 -0
- package/dist/types.mjs.map +1 -1
- package/package.json +2 -1
- package/src/cli/init.ts +4 -24
- package/src/cli/prompts.ts +12 -8
- package/src/config.ts +2 -0
- package/src/merge.ts +2 -0
- package/src/near-cli.ts +42 -69
- package/src/plugin.ts +38 -19
- package/src/types.ts +6 -0
package/dist/plugin.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.mjs","names":[],"sources":["../src/plugin.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { Effect } from \"effect\";\nimport { syncApiContractBridge } from \"./api-contract\";\nimport { buildRuntimeConfig, detectLocalPackages, prepareDevelopmentRuntimeConfig } from \"./app\";\nimport {\n copyFilteredFiles,\n fetchParentConfig,\n generateDatabaseMigrations,\n personalizeConfig,\n readTemplatekeep,\n resolveSourceDir,\n runBunInstall,\n runTypesGen,\n writeInitSnapshot,\n} from \"./cli/init\";\nimport { promptInitOptions } from \"./cli/prompts\";\nimport { getStatus } from \"./cli/status\";\nimport { syncTemplate } from \"./cli/sync\";\nimport { upgradeTemplate } from \"./cli/upgrade\";\nimport {\n buildRuntimePluginsForConfig,\n findConfigPath,\n getHostDevelopmentPort,\n getProjectRoot,\n loadConfig,\n resolveLocalDevelopmentPath,\n writeResolvedConfig,\n} from \"./config\";\nimport { type BosConfigResult, bosContract, type PluginListResult } from \"./contract\";\nimport { devApp, startApp } from \"./dev-session\";\nimport {\n buildRegistryConfigUrl,\n buildRegistryConfigUrlForNetwork,\n fetchBosConfigFromFastKv,\n fetchRemotePluginManifest,\n getRegistryNamespaceForAccount,\n getRegistryNamespaceForNetwork,\n type PluginManifest,\n} from \"./fastkv\";\nimport { computeSriHashForUrl } from \"./integrity\";\nimport type { BosEnv } from \"./merge\";\nimport { addFunctionCallAccessKey, ensureNearCli, executeTransaction } from \"./near-cli\";\nimport { getNetworkIdForAccount } from \"./network\";\nimport { createPlugin, z } from \"./sdk\";\nimport {\n type AppOrchestrator,\n buildDescription,\n buildServiceDescriptorMap,\n} from \"./service-descriptor\";\nimport { syncAndGenerateSharedUi } from \"./shared\";\nimport { writePluginSidebarGen } from \"./sidebar\";\nimport type { BosConfig, BosPluginRef, RuntimeConfig, SourceMode } from \"./types\";\nimport { run } from \"./utils/run\";\nimport { saveBosConfig } from \"./utils/save-config\";\nimport { colors } from \"./utils/theme\";\n\nfunction ensureEnvFile(configDir: string, opts?: { domain?: string }): void {\n const envPath = join(configDir, \".env\");\n const examplePath = join(configDir, \".env.example\");\n\n if (existsSync(envPath)) return;\n\n if (!existsSync(examplePath)) return;\n\n const content = readFileSync(examplePath, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n const secret = randomBytes(32).toString(\"base64url\");\n const corsOrigin = opts?.domain\n ? `http://localhost:3000,https://${opts.domain}`\n : \"http://localhost:3000\";\n\n const updated = lines\n .map((line) => {\n if (/^BETTER_AUTH_SECRET=/.test(line)) {\n return `BETTER_AUTH_SECRET=${secret}`;\n }\n if (/^CORS_ORIGIN=/.test(line)) {\n return `CORS_ORIGIN=${corsOrigin}`;\n }\n return line;\n })\n .join(\"\\n\");\n\n writeFileSync(envPath, updated);\n p.log.info(`Created .env from .env.example with generated BETTER_AUTH_SECRET`);\n}\n\nconst buildCommands: Record<string, { cmd: string; args: string[] }> = {\n host: { cmd: \"bun\", args: [\"run\", \"build\"] },\n ui: { cmd: \"bun\", args: [\"run\", \"build\"] },\n api: { cmd: \"bun\", args: [\"run\", \"build\"] },\n};\n\nconst PUBLISH_FUNCTION_NAMES = [\"__fastdata_kv\"];\n\ntype BosDeps = {\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n configDir: string;\n};\n\ntype PluginAttachmentConfig = NonNullable<BosConfig[\"plugins\"]>[string];\n\nfunction getPluginRef(entry: string | BosPluginRef | undefined | null): BosPluginRef | null {\n if (!entry || typeof entry === \"string\") return null;\n return entry;\n}\n\nfunction parseSourceMode(value: string | undefined, defaultValue: SourceMode): SourceMode {\n if (value === \"local\" || value === \"remote\") return value;\n return defaultValue;\n}\n\nfunction buildConfigResult(bosConfig: BosConfig | null): BosConfigResult {\n const packages = bosConfig ? Object.keys(bosConfig.app) : [];\n const remotes = packages.filter((name) => name !== \"host\");\n\n return {\n config: bosConfig,\n packages,\n remotes,\n };\n}\n\ntype WorkspaceTarget = {\n key: string;\n kind: \"app\" | \"plugin\";\n path: string;\n};\n\nfunction resolveWorkspaceTarget(\n key: string,\n bosConfig: BosConfig | null,\n runtimeConfig: RuntimeConfig | null,\n configDir: string,\n): WorkspaceTarget | null {\n if (bosConfig?.app && key in bosConfig.app) {\n const appEntry = (bosConfig.app as Record<string, { development?: string }>)[key];\n const devPath = resolveLocalDevelopmentPath(appEntry?.development, configDir);\n if (devPath) {\n return {\n key,\n kind: \"app\",\n path: devPath,\n };\n }\n return {\n key,\n kind: \"app\",\n path: `${configDir}/${key}`,\n };\n }\n\n const runtimePlugin = runtimeConfig?.plugins?.[key];\n const pluginPath =\n runtimePlugin?.localPath ??\n resolveLocalDevelopmentPath(getPluginRef(bosConfig?.plugins?.[key])?.development, configDir);\n if (pluginPath) {\n return {\n key,\n kind: \"plugin\",\n path: pluginPath,\n };\n }\n\n return null;\n}\n\nfunction isValidProxyUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\nfunction resolveProxyUrl(bosConfig: BosConfig | null): string | null {\n if (!bosConfig) return null;\n const apiConfig = bosConfig.app.api;\n if (!apiConfig) return null;\n if (apiConfig.proxy && isValidProxyUrl(apiConfig.proxy)) return apiConfig.proxy;\n if (apiConfig.production && isValidProxyUrl(apiConfig.production)) return apiConfig.production;\n return null;\n}\n\nfunction sanitizePluginKey(value: string): string {\n return value\n .replace(/[^A-Za-z0-9/_-]/g, \"-\")\n .replace(/\\/+/g, \"/\")\n .split(\"/\")\n .filter(Boolean)\n .map((segment) => segment.replace(/[^A-Za-z0-9_-]/g, \"-\"))\n .join(\"/\")\n .replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction defaultPluginKey(source: string): string {\n const normalized = source.replace(/^local:/, \"\").replace(/\\/$/, \"\");\n if (source.startsWith(\"local:\")) {\n return sanitizePluginKey(basename(normalized)) || \"plugin\";\n }\n\n try {\n const url = new URL(source);\n return sanitizePluginKey(basename(url.pathname) || url.hostname) || \"plugin\";\n } catch {\n return sanitizePluginKey(source) || \"plugin\";\n }\n}\n\nfunction pluginLocalPath(configDir: string, attachment: PluginAttachmentConfig): string | null {\n const ref = getPluginRef(attachment);\n const source = ref?.development ?? ref?.production;\n if (!source?.startsWith(\"local:\")) {\n return null;\n }\n\n return join(configDir, source.slice(\"local:\".length));\n}\n\nfunction listPluginAttachments(config: BosConfig | null) {\n return (Object.entries(config?.plugins ?? {}) as Array<[string, PluginAttachmentConfig]>)\n .map(([key, attachment]) => {\n const ref = getPluginRef(attachment);\n return {\n key,\n development: ref?.development,\n production: ref?.production,\n localPath: ref?.development?.startsWith(\"local:\")\n ? ref.development.slice(\"local:\".length)\n : undefined,\n source: ref?.development?.startsWith(\"local:\") ? (\"local\" as const) : (\"remote\" as const),\n integrity: ref?.integrity,\n version: ref?.version,\n name: ref?.name,\n };\n })\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\ninterface GeneratedArtifacts {\n sidebarPath: string;\n resolvedConfigPath?: string;\n contractBridgePath: string;\n}\n\nasync function generateCodeArtifacts(\n configDir: string,\n config: BosConfig,\n opts?: {\n env?: BosEnv;\n extendsChain?: string[];\n runtimeConfig?: RuntimeConfig;\n },\n): Promise<GeneratedArtifacts | null> {\n writePluginSidebarGen(configDir, config);\n\n if (opts?.env) {\n writeResolvedConfig(configDir, config, opts.env, opts.extendsChain);\n }\n\n const runtimeConfig = opts?.runtimeConfig ?? (await loadConfig({ cwd: configDir }))?.runtime;\n if (!runtimeConfig) return null;\n\n const bridge = await syncApiContractBridge({\n configDir,\n runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\n\n return {\n sidebarPath: join(configDir, \"ui/src/lib/plugin-sidebar.gen.ts\"),\n resolvedConfigPath: opts?.env ? join(configDir, \".bos/bos.resolved-config.json\") : undefined,\n contractBridgePath: bridge.bridgePath,\n };\n}\n\nfunction extractPublishedUrl(output: string): string | null {\n const match = output.match(/https?:\\/\\/[^\\s\"'<>]+/g);\n if (!match || match.length === 0) return null;\n return match[match.length - 1] ?? null;\n}\n\nasync function buildEveryPluginQuietly(cwd: string) {\n const packageDir = `${cwd}/packages/every-plugin`;\n const packageExists = await Bun.file(`${packageDir}/package.json`).exists();\n if (!packageExists) {\n return;\n }\n\n const distPath = `${cwd}/packages/every-plugin/dist/build/rspack/plugin.mjs`;\n const distExists = await Bun.file(distPath).exists();\n\n if (distExists) {\n return;\n }\n\n const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/every-plugin\", \"build\"], {\n cwd,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (result.exitCode === 0) {\n console.log(\"[build:ssr] build succeeded\");\n return;\n }\n\n if (result.stdout.trim()) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr.trim()) {\n process.stderr.write(result.stderr);\n }\n\n throw new Error(\n `bun run --cwd packages/every-plugin build failed with exit code ${result.exitCode}`,\n );\n}\n\nasync function buildEverythingDevQuietly(cwd: string) {\n const packageDir = `${cwd}/packages/everything-dev`;\n const packageExists = await Bun.file(`${packageDir}/package.json`).exists();\n if (!packageExists) {\n return;\n }\n\n const distPath = `${cwd}/packages/everything-dev/dist/index.mjs`;\n const distExists = await Bun.file(distPath).exists();\n\n if (distExists) {\n return;\n }\n\n const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/everything-dev\", \"build\"], {\n cwd,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (result.exitCode === 0) {\n console.log(\"[everything-dev] build succeeded\");\n return;\n }\n\n if (result.stdout.trim()) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr.trim()) {\n process.stderr.write(result.stderr);\n }\n\n throw new Error(\n `bun run --cwd packages/everything-dev build failed with exit code ${result.exitCode}`,\n );\n}\n\nasync function fetchPublishedConfig(\n accountId: string,\n gatewayId: string,\n): Promise<BosConfig | null> {\n try {\n return await fetchBosConfigFromFastKv<BosConfig>(`bos://${accountId}/${gatewayId}`);\n } catch {\n return null;\n }\n}\n\nfunction selectWorkspaceTargets(packages: string, bosConfig: BosConfig | null): string[] {\n const allPackages = [\n ...Object.keys(bosConfig?.app ?? {}),\n ...Object.keys(bosConfig?.plugins ?? {}),\n ];\n if (packages === \"all\") {\n return allPackages;\n }\n\n return packages\n .split(\",\")\n .map((pkg) => pkg.trim())\n .filter((pkg) => allPackages.includes(pkg));\n}\n\nasync function buildWorkspaceTargets(opts: {\n configDir: string;\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n targets: string[];\n deploy: boolean;\n}): Promise<{ built: string[]; skipped: string[] }> {\n const existing: WorkspaceTarget[] = [];\n const skipped: string[] = [];\n\n for (const target of opts.targets) {\n const resolved = resolveWorkspaceTarget(\n target,\n opts.bosConfig,\n opts.runtimeConfig,\n opts.configDir,\n );\n if (!resolved) {\n skipped.push(target);\n continue;\n }\n\n const exists = await Bun.file(`${resolved.path}/package.json`).exists();\n if (exists) existing.push(resolved);\n else skipped.push(target);\n }\n\n if (existing.length === 0) {\n return { built: [], skipped };\n }\n\n const sharedSync = await syncAndGenerateSharedUi({\n configDir: opts.configDir,\n hostMode: \"local\",\n bosConfig: opts.bosConfig ?? undefined,\n extendsChain: [],\n });\n if (sharedSync.catalogChanged) {\n await run(\"bun\", [\"install\"], { cwd: opts.configDir });\n }\n\n if (existing.some((entry) => entry.key === \"api\")) {\n await buildEveryPluginQuietly(opts.configDir);\n }\n\n await buildEverythingDevQuietly(opts.configDir);\n\n const env: Record<string, string> = {\n ...process.env,\n NODE_ENV: opts.deploy ? \"production\" : \"development\",\n };\n if (opts.deploy) {\n env.DEPLOY = \"true\";\n } else {\n delete env.DEPLOY;\n }\n\n const orderedExisting = opts.deploy\n ? [\n ...existing.filter((entry) => entry.kind === \"app\" && entry.key !== \"host\"),\n ...existing.filter((entry) => entry.kind === \"plugin\"),\n ...existing.filter((entry) => entry.kind === \"app\" && entry.key === \"host\"),\n ]\n : existing;\n const built: string[] = [];\n\n for (const resolved of orderedExisting) {\n const pkgJson = JSON.parse(await Bun.file(`${resolved.path}/package.json`).text()) as {\n scripts?: Record<string, string>;\n };\n const shouldDeployScript = opts.deploy && pkgJson.scripts?.deploy;\n const buildConfig = shouldDeployScript\n ? { cmd: \"bun\", args: [\"run\", \"deploy\"] }\n : (buildCommands[resolved.key] ?? { cmd: \"bun\", args: [\"run\", \"build\"] });\n\n await run(buildConfig.cmd, buildConfig.args, {\n cwd: resolved.path,\n env,\n });\n built.push(resolved.key);\n }\n\n return { built, skipped };\n}\n\nexport default createPlugin({\n variables: z.object({\n configPath: z.string().optional(),\n }),\n secrets: z.object({}),\n contract: bosContract,\n initialize: (config) =>\n Effect.promise(async () => {\n const configResult = await loadConfig({ path: config.variables.configPath });\n return {\n bosConfig: configResult?.config ?? null,\n runtimeConfig: configResult?.runtime ?? null,\n configDir: getProjectRoot(),\n } satisfies BosDeps;\n }),\n shutdown: () => Effect.void,\n createRouter: (deps, builder) => ({\n config: builder.config.handler(async () => buildConfigResult(deps.bosConfig)),\n\n pluginAdd: builder.pluginAdd.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const isBosRef = input.source.startsWith(\"bos://\");\n const isLocal = input.source.startsWith(\"local:\");\n const key = sanitizePluginKey(\n input.as ??\n (isBosRef ? (input.source.split(\"/\").pop() ?? \"plugin\") : defaultPluginKey(input.source)),\n );\n const existing = deps.bosConfig.plugins?.[key];\n const existingEntry = existing && typeof existing === \"object\" ? existing : {};\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n\n if (isBosRef) {\n nextPlugins[key] = {\n ...existingEntry,\n extends: input.source,\n };\n } else if (isLocal) {\n nextPlugins[key] = {\n ...existingEntry,\n development: input.source,\n ...(existingEntry.extends ? {} : {}),\n };\n } else {\n nextPlugins[key] = {\n ...existingEntry,\n production: input.production ?? input.source,\n };\n }\n\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: nextPlugins,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n\n const stored = deps.bosConfig.plugins?.[key];\n const storedObj = stored && typeof stored === \"object\" ? stored : {};\n\n return {\n status: \"added\" as const,\n key,\n development: storedObj.development,\n production: storedObj.production,\n integrity: storedObj.integrity,\n version: storedObj.version,\n };\n }),\n\n pluginRemove: builder.pluginRemove.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n if (!deps.bosConfig.plugins?.[input.key]) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n delete nextPlugins[input.key];\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: Object.keys(nextPlugins).length > 0 ? nextPlugins : undefined,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n\n return {\n status: \"removed\" as const,\n key: input.key,\n };\n }),\n\n pluginList: builder.pluginList.handler(async () => {\n const plugins: PluginListResult[\"plugins\"] = listPluginAttachments(deps.bosConfig);\n return {\n status: \"listed\" as const,\n plugins,\n };\n }),\n\n pluginPublish: builder.pluginPublish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n const attachment = deps.bosConfig.plugins?.[input.key];\n if (!attachment) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const attachmentRef = getPluginRef(attachment);\n\n const localPath = pluginLocalPath(deps.configDir, attachment);\n if (!localPath) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' does not have a local development path`,\n };\n }\n\n const pkgPath = join(localPath, \"package.json\");\n if (!(await Bun.file(pkgPath).exists())) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Missing package.json at ${localPath}`,\n };\n }\n\n const pkgJson = (await Bun.file(pkgPath).json()) as {\n scripts?: Record<string, string>;\n name?: string;\n version?: string;\n };\n const script = pkgJson.scripts?.deploy ? \"deploy\" : \"build\";\n\n const { stdout, stderr, exitCode } = (await run(\"bun\", [\"run\", script], {\n cwd: localPath,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (exitCode !== 0) {\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Publish failed with exit code ${exitCode}`,\n };\n }\n\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n\n let publishedUrl = extractPublishedUrl(`${stdout}\\n${stderr}`);\n\n let manifest: PluginManifest | null = null;\n if (publishedUrl) {\n manifest = await fetchRemotePluginManifest(publishedUrl);\n } else if (attachmentRef?.production) {\n manifest = await fetchRemotePluginManifest(attachmentRef.production);\n if (manifest) {\n publishedUrl = attachmentRef.production;\n }\n }\n\n const integrity = publishedUrl ? await computeSriHashForUrl(publishedUrl) : null;\n const version = manifest?.plugin.version ?? pkgJson.version;\n\n if (publishedUrl) {\n const pluginConfigPath = join(localPath, \"bos.config.json\");\n if (existsSync(pluginConfigPath)) {\n try {\n const pluginConfig = JSON.parse(readFileSync(pluginConfigPath, \"utf-8\")) as Record<\n string,\n unknown\n >;\n if (!pluginConfig.app) pluginConfig.app = {};\n const app = pluginConfig.app as Record<string, unknown>;\n if (!app.api) app.api = {};\n const api = app.api as Record<string, unknown>;\n api.production = publishedUrl;\n if (integrity) {\n api.integrity = integrity;\n } else {\n delete api.integrity;\n }\n writeFileSync(pluginConfigPath, `${JSON.stringify(pluginConfig, null, 2)}\\n`);\n console.log(` ✅ Updated ${pluginConfigPath}: app.api.production`);\n } catch (err) {\n console.error(\n ` ❌ Failed to update plugin bos.config.json:`,\n err instanceof Error ? err.message : err,\n );\n }\n }\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\n\n let pluginDomain: string | undefined;\n if (existsSync(pluginConfigPath)) {\n try {\n const pluginConfig = JSON.parse(readFileSync(pluginConfigPath, \"utf-8\"));\n if (typeof pluginConfig.domain === \"string\") {\n pluginDomain = pluginConfig.domain;\n }\n } catch {}\n }\n if (!pluginDomain) {\n pluginDomain = `${input.key}.${deps.bosConfig.domain ?? \"everything.dev\"}`;\n }\n\n if (manifest && version) {\n try {\n const registryEntries: Record<string, string> = {\n [`plugins/${account}/${input.key}/manifest.json`]: JSON.stringify(manifest),\n [`plugins/${account}/${input.key}/metadata`]: JSON.stringify({\n title: null,\n description: null,\n repoUrl: deps.bosConfig.repository ?? null,\n version,\n publishedAt: new Date().toISOString(),\n cdnUrl: publishedUrl,\n integrity,\n }),\n [`plugins/${account}/${input.key}/versions/${version}/manifest.json`]:\n JSON.stringify(manifest),\n };\n\n if (existsSync(pluginConfigPath)) {\n try {\n const publishedPluginConfig = JSON.parse(readFileSync(pluginConfigPath, \"utf-8\"));\n delete publishedPluginConfig.development;\n registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] =\n JSON.stringify(publishedPluginConfig);\n } catch {}\n }\n\n const payload = JSON.stringify(registryEntries);\n const argsBase64 = Buffer.from(payload).toString(\"base64\");\n const privateKey = process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;\n\n await Effect.runPromise(ensureNearCli);\n try {\n await Effect.runPromise(\n executeTransaction({\n account,\n contract: getRegistryNamespaceForNetwork(network),\n method: \"__fastdata_kv\",\n argsBase64,\n network,\n privateKey,\n gas: \"50Tgas\",\n deposit: \"0NEAR\",\n }),\n );\n } catch (registryError) {\n const txHash = extractTransactionHash(registryError);\n if (!txHash) {\n console.warn(\n `[publish] Plugin registry write failed: ${registryError instanceof Error ? registryError.message : registryError}`,\n );\n }\n }\n } catch (registryError) {\n console.warn(\n `[publish] Plugin registry write skipped: ${registryError instanceof Error ? registryError.message : registryError}`,\n );\n }\n }\n\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n }\n\n return {\n status: \"published\" as const,\n key: input.key,\n path: localPath,\n script,\n production: publishedUrl ?? attachmentRef?.production,\n integrity: integrity ?? undefined,\n version: version ?? undefined,\n };\n }),\n\n dev: builder.dev.handler(async ({ input }) => {\n ensureEnvFile(deps.configDir);\n\n const localPackages = detectLocalPackages(\n deps.bosConfig ?? undefined,\n deps.runtimeConfig ?? undefined,\n );\n\n const hostSource: SourceMode = localPackages.includes(\"host\")\n ? parseSourceMode(input.host, \"local\")\n : \"remote\";\n const uiSource: SourceMode = localPackages.includes(\"ui\")\n ? parseSourceMode(input.ui, \"local\")\n : \"remote\";\n const apiSource: SourceMode = localPackages.includes(\"api\")\n ? parseSourceMode(input.api, \"local\")\n : \"remote\";\n const authSource: SourceMode = localPackages.includes(\"auth\")\n ? parseSourceMode(input.auth, \"local\")\n : \"remote\";\n const ssr = input.ssr ?? false;\n const proxy = input.proxy ?? false;\n\n const sharedSync = await syncAndGenerateSharedUi({\n configDir: deps.configDir,\n hostMode: hostSource,\n bosConfig: deps.bosConfig ?? undefined,\n extendsChain: [],\n });\n if (sharedSync.catalogChanged) {\n await run(\"bun\", [\"install\"], { cwd: deps.configDir });\n }\n if (\n (apiSource === \"local\" && !proxy) ||\n localPackages.some((pkg) => pkg.startsWith(\"plugin:\"))\n ) {\n await buildEveryPluginQuietly(deps.configDir);\n }\n\n await buildEverythingDevQuietly(deps.configDir);\n\n const refreshed = await loadConfig({ cwd: deps.configDir });\n deps.bosConfig = refreshed?.config ?? deps.bosConfig;\n deps.runtimeConfig = refreshed?.runtime ?? deps.runtimeConfig;\n\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n description: \"No bos.config.json found\",\n processes: [],\n };\n }\n\n if (proxy && !resolveProxyUrl(deps.bosConfig)) {\n return {\n status: \"error\" as const,\n description: \"No valid proxy URL configured in bos.config.json\",\n processes: [],\n };\n }\n\n const hostPort = input.port ?? getHostDevelopmentPort(deps.bosConfig.app.host.development);\n const developmentRuntime = buildRuntimeConfig(deps.bosConfig, {\n uiSource,\n apiSource,\n authSource,\n hostSource,\n env: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n const runtimeConfig = await prepareDevelopmentRuntimeConfig(developmentRuntime, {\n hostPort,\n ssr,\n });\n\n await generateCodeArtifacts(deps.configDir, deps.bosConfig, {\n env: \"development\",\n extendsChain: refreshed?.source.extended,\n runtimeConfig,\n });\n\n const services = buildServiceDescriptorMap(runtimeConfig, { ssr, proxy });\n const packages = [...services.keys()];\n const displayEnv: Record<string, string> = {};\n const apiDescriptor = services.get(\"api\");\n if (apiDescriptor?.proxy) {\n const proxyUrl = resolveProxyUrl(deps.bosConfig);\n if (proxyUrl) displayEnv.API_PROXY = proxyUrl;\n }\n\n const orchestrator: AppOrchestrator = {\n packages,\n env: displayEnv,\n description: buildDescription(services),\n port: runtimeConfig.host.port,\n interactive: input.interactive,\n };\n\n devApp(orchestrator, services, runtimeConfig);\n\n return {\n status: \"started\" as const,\n description: orchestrator.description,\n processes: packages,\n };\n }),\n\n start: builder.start.handler(async ({ input }) => {\n ensureEnvFile(deps.configDir);\n\n const account = input.account ?? process.env.BOS_ACCOUNT;\n const domain = input.domain ?? process.env.BOS_GATEWAY;\n\n let config: BosConfig | null = null;\n let remoteConfig: BosConfig | null = null;\n\n if (account && domain) {\n remoteConfig = await fetchPublishedConfig(account, domain);\n if (remoteConfig) {\n config = remoteConfig;\n } else {\n console.warn(\n `[Start] Failed to fetch remote config for ${account}/${domain}, falling back to local bos.config.json`,\n );\n }\n }\n\n if (!config) {\n config = deps.bosConfig;\n }\n\n if (!config) {\n return {\n status: \"error\" as const,\n url: \"\",\n error:\n \"No configuration found. Set BOS_ACCOUNT and BOS_GATEWAY environment variables, or provide a local bos.config.json.\",\n };\n }\n\n // Apply runtime overrides from CLI flags / env vars\n if (account) {\n config = { ...config, account };\n }\n if (domain) {\n config = { ...config, domain };\n }\n\n const port = input.port ?? getHostDevelopmentPort(config.app.host.development);\n const isStaging = input.env === \"staging\";\n const runtimePlugins = await buildRuntimePluginsForConfig(\n config,\n deps.configDir,\n \"production\",\n );\n const runtimeConfig = buildRuntimeConfig(config, {\n uiSource: \"remote\",\n apiSource: \"remote\",\n authSource: \"remote\",\n hostSource: \"remote\",\n env: \"production\",\n plugins: runtimePlugins,\n });\n\n await generateCodeArtifacts(deps.configDir, config, {\n env: \"production\",\n runtimeConfig,\n });\n\n // ── Production Readiness Validation ──\n const productionEnv: Record<string, string> = {};\n const warnings: string[] = [];\n\n // Default CORS_ORIGIN to the configured domain if not set\n if (!process.env.CORS_ORIGIN && config.domain) {\n const defaultOrigin = `https://${config.domain}`;\n productionEnv.CORS_ORIGIN = defaultOrigin;\n warnings.push(`CORS_ORIGIN defaulting to ${defaultOrigin}`);\n }\n\n // Validate required secrets\n const requiredSecrets = new Set<string>();\n const missingSecrets: string[] = [];\n\n if (runtimeConfig.auth?.secrets) {\n for (const s of runtimeConfig.auth.secrets) requiredSecrets.add(s);\n }\n if (runtimeConfig.api?.secrets) {\n for (const s of runtimeConfig.api.secrets) requiredSecrets.add(s);\n }\n for (const plugin of Object.values(runtimeConfig.plugins ?? {})) {\n if (plugin.secrets) {\n for (const s of plugin.secrets) requiredSecrets.add(s);\n }\n }\n\n for (const secret of requiredSecrets) {\n const value = process.env[secret];\n if (!value || value.length === 0) {\n missingSecrets.push(secret);\n }\n }\n\n if (missingSecrets.length > 0) {\n warnings.push(`Missing ${missingSecrets.length} secret(s): ${missingSecrets.join(\", \")}`);\n }\n\n const services = buildServiceDescriptorMap(runtimeConfig);\n\n const stagingEnvVars: Record<string, string> = isStaging\n ? { BOS_GATEWAY: config.staging?.domain ?? config.domain ?? \"\" }\n : {};\n\n const configSource = remoteConfig\n ? `bos://${account}/${domain}`\n : (findConfigPath() ?? \"bos.config.json\");\n\n const configSourceHttp =\n remoteConfig && account && domain ? buildRegistryConfigUrl(account, domain) : undefined;\n\n const summaryLines: string[] = [\"\", ` ${colors.dim(\"Config Source:\")} ${configSource}`];\n if (configSourceHttp) {\n summaryLines.push(` ${colors.dim(configSourceHttp)}`);\n }\n summaryLines.push(\n ` ${colors.dim(\"Account:\")} ${config.account}`,\n ` ${colors.dim(\"Domain:\")} ${config.domain ?? \"not configured\"}`,\n \"\",\n ` ${colors.dim(\"Modules:\")}`,\n ` ${colors.dim(\"HOST\")} → ${runtimeConfig.host.remoteUrl ?? runtimeConfig.host.url ?? \"local\"}`,\n ` ${colors.dim(\"UI\")} → ${runtimeConfig.ui.url ?? \"local\"}`,\n ` ${colors.dim(\"API\")} → ${runtimeConfig.api.url ?? \"local\"}`,\n );\n if (runtimeConfig.auth) {\n summaryLines.push(` ${colors.dim(\"AUTH\")} → ${runtimeConfig.auth.url ?? \"local\"}`);\n }\n if (warnings.length > 0) {\n summaryLines.push(\"\");\n for (const w of warnings) {\n summaryLines.push(` ${colors.yellow(w)}`);\n }\n }\n summaryLines.push(\"\");\n console.log(summaryLines.join(\"\\n\"));\n\n const orchestrator: AppOrchestrator = {\n packages: [\"host\"],\n env: {\n NODE_ENV: \"production\",\n ...productionEnv,\n ...stagingEnvVars,\n },\n description: `${isStaging ? \"Staging\" : \"Production\"} Mode (${config.account})`,\n port,\n interactive: input.interactive,\n noLogs: true,\n };\n\n startApp(orchestrator, services, runtimeConfig);\n return {\n status: \"running\" as const,\n url: `http://localhost:${port}`,\n };\n }),\n\n build: builder.build.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n const buildEnv: BosEnv = input.deploy ? \"production\" : \"development\";\n\n const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);\n if (targets.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n const runtimeConfig = buildRuntimeConfig(deps.bosConfig, {\n uiSource: deps.bosConfig.app.ui?.development ? \"local\" : \"remote\",\n apiSource: deps.bosConfig.app.api?.development ? \"local\" : \"remote\",\n authSource: deps.bosConfig.app.auth?.development ? \"local\" : \"remote\",\n hostSource: deps.bosConfig.app.host?.development ? \"local\" : \"remote\",\n env: buildEnv,\n plugins: deps.runtimeConfig?.plugins,\n });\n\n await generateCodeArtifacts(deps.configDir, deps.bosConfig, {\n env: buildEnv,\n runtimeConfig,\n });\n\n const { built, skipped } = await buildWorkspaceTargets({\n configDir: deps.configDir,\n bosConfig: deps.bosConfig,\n runtimeConfig: runtimeConfig,\n targets,\n deploy: input.deploy,\n });\n\n if (built.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped,\n };\n }\n\n return {\n status: \"success\" as const,\n built,\n skipped,\n deployed: input.deploy,\n };\n }),\n\n publish: builder.publish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const account = deps.bosConfig.account;\n const gateway = deps.bosConfig.domain;\n if (!gateway) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n error: \"bos.config.json must define domain to publish\",\n };\n }\n\n const network = input.network ?? getNetworkIdForAccount(account);\n const bosUrl = `bos://${account}/${gateway}`;\n const registryUrl = buildRegistryConfigUrlForNetwork(network, account, gateway);\n const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);\n\n let publishConfig = deps.bosConfig;\n let built: string[] | undefined;\n let skipped: string[] | undefined;\n\n if (input.dryRun) {\n return {\n status: \"dry-run\" as const,\n registryUrl,\n built,\n skipped,\n };\n }\n\n if (input.deploy) {\n await generateCodeArtifacts(deps.configDir, deps.bosConfig, {\n env: \"production\",\n runtimeConfig: deps.runtimeConfig ?? undefined,\n });\n\n const result = await buildWorkspaceTargets({\n configDir: deps.configDir,\n bosConfig: deps.bosConfig,\n runtimeConfig: deps.runtimeConfig,\n targets,\n deploy: true,\n });\n built = result.built;\n skipped = result.skipped;\n\n const refreshed = await loadConfig({ cwd: deps.configDir });\n if (refreshed?.config) {\n deps.bosConfig = refreshed.config;\n deps.runtimeConfig = refreshed.runtime;\n publishConfig = refreshed.config;\n }\n }\n\n const registryEntries: Record<string, string> = {\n [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishConfig),\n };\n\n for (const [pluginKey, pluginEntry] of Object.entries(publishConfig.plugins ?? {})) {\n const pluginRef = getPluginRef(pluginEntry);\n if (!pluginRef?.development?.startsWith(\"local:\")) continue;\n\n const localPath = join(deps.configDir, pluginRef.development.slice(\"local:\".length));\n const pluginConfigPath = join(localPath, \"bos.config.json\");\n if (!existsSync(pluginConfigPath)) continue;\n\n try {\n const pluginConfig = JSON.parse(readFileSync(pluginConfigPath, \"utf-8\")) as Record<\n string,\n unknown\n >;\n const pluginDomain =\n typeof pluginConfig.domain === \"string\"\n ? pluginConfig.domain\n : `${pluginKey}.${gateway}`;\n delete pluginConfig.development;\n registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] =\n JSON.stringify(pluginConfig);\n } catch {}\n }\n\n const payload = JSON.stringify(registryEntries);\n const argsBase64 = Buffer.from(payload).toString(\"base64\");\n const privateKey =\n input.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;\n\n try {\n await Effect.runPromise(ensureNearCli);\n let txHash: string | undefined;\n\n try {\n const tx = await Effect.runPromise(\n executeTransaction({\n account,\n contract: getRegistryNamespaceForNetwork(network),\n method: \"__fastdata_kv\",\n argsBase64,\n network,\n privateKey,\n gas: \"300Tgas\",\n deposit: \"0NEAR\",\n }),\n );\n txHash = tx.txHash;\n } catch (error) {\n txHash = extractTransactionHash(error);\n\n if (!txHash) {\n throw error;\n }\n\n try {\n const verifiedConfig = await fetchBosConfigFromFastKv<BosConfig>(bosUrl);\n if (JSON.stringify(verifiedConfig) !== JSON.stringify(publishConfig)) {\n throw error;\n }\n } catch {\n // Config may not exist yet on first publish or propagation delay;\n // a valid txHash is sufficient proof the transaction was submitted.\n }\n }\n\n return {\n status: \"published\" as const,\n registryUrl,\n txHash,\n built,\n skipped,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n registryUrl,\n error: error instanceof Error ? error.message : \"Unknown error\",\n built,\n skipped,\n };\n }\n }),\n\n keyPublish: builder.keyPublish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n account: \"\",\n network: \"mainnet\" as const,\n contract: \"\",\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: \"No bos.config.json found\",\n };\n }\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\n const contract = getRegistryNamespaceForAccount(account);\n try {\n await Effect.runPromise(ensureNearCli);\n const keyPair = await addFunctionCallAccessKey({\n account,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n network,\n });\n\n return {\n status: \"published\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n publicKey: keyPair.publicKey,\n privateKey: keyPair.privateKey,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n init: builder.init.handler(async ({ input }) => {\n try {\n let extendsAccount = input.extendsAccount;\n let extendsGateway = input.extendsGateway;\n let directory = input.directory;\n let account = input.account;\n let domain = input.domain;\n let withHost = input.withHost;\n let plugins = input.plugins;\n\n if (input.extends) {\n const match = input.extends.match(/^(?:bos:\\/\\/)?([^/]+)\\/(.+)$/);\n if (match) {\n if (!extendsAccount) extendsAccount = match[1];\n if (!extendsGateway) extendsGateway = match[2];\n }\n }\n\n if (!input.noInteractive) {\n const prompted = await promptInitOptions({\n extendsAccount,\n extendsGateway,\n extends: input.extends,\n directory,\n account,\n domain,\n plugins,\n withHost,\n });\n extendsAccount = prompted.extendsAccount;\n extendsGateway = prompted.extendsGateway;\n directory = prompted.directory;\n account = prompted.account;\n domain = prompted.domain;\n withHost = prompted.withHost;\n plugins = prompted.plugins;\n }\n\n extendsAccount = extendsAccount || \"dev.everything.near\";\n extendsGateway = extendsGateway || \"everything.dev\";\n directory = directory || domain || extendsGateway;\n plugins = plugins?.length ? plugins : [\"settings\"];\n\n try {\n await fetchParentConfig(extendsAccount, extendsGateway);\n } catch {\n return {\n status: \"error\" as const,\n directory,\n extendsAccount,\n extendsGateway,\n account,\n domain,\n extends: `bos://${extendsAccount}/${extendsGateway}`,\n plugins: plugins ?? [],\n filesCopied: 0,\n error: `No config found at bos://${extendsAccount}/${extendsGateway} — are you sure this is the right parent?`,\n };\n }\n\n const { sourceDir, parentConfig, cleanup } = await resolveSourceDir({\n extendsAccount,\n extendsGateway,\n source: input.source,\n });\n\n try {\n const patterns = await readTemplatekeep(sourceDir);\n if (patterns.length === 0) {\n return {\n status: \"error\" as const,\n directory,\n extendsAccount,\n extendsGateway,\n account,\n domain,\n extends: `bos://${extendsAccount}/${extendsGateway}`,\n plugins: plugins ?? [],\n filesCopied: 0,\n error: \"No .templatekeep found in template source\",\n };\n }\n\n const pluginRoutes: Record<string, string[]> = {};\n if (parentConfig.plugins) {\n for (const [key, entry] of Object.entries(parentConfig.plugins)) {\n const entryRef = getPluginRef(entry);\n if (entryRef?.routes && entryRef.routes.length > 0) {\n pluginRoutes[key] = entryRef.routes;\n }\n }\n }\n\n const s = p.spinner();\n s.start(\"Setting up project\");\n\n const filesCopied = await copyFilteredFiles(sourceDir, directory, patterns, {\n withHost,\n plugins,\n pluginRoutes,\n });\n\n await personalizeConfig(directory, {\n extendsAccount,\n extendsGateway,\n account: account || extendsAccount,\n domain: domain || extendsGateway,\n plugins,\n pluginRoutes,\n workspaceOpts: { sourceDir },\n withHost,\n });\n\n await writeInitSnapshot(directory, extendsAccount, extendsGateway, sourceDir, patterns, {\n withHost,\n plugins,\n pluginRoutes,\n });\n\n ensureEnvFile(directory, { domain });\n\n if (!input.noInstall) {\n await runBunInstall(directory);\n await runTypesGen(directory);\n await generateDatabaseMigrations(directory);\n }\n\n const initConfig = await loadConfig({ cwd: directory });\n if (initConfig?.config) {\n await generateCodeArtifacts(directory, initConfig.config);\n }\n\n s.stop(\"Project initialized\");\n\n return {\n status: \"initialized\" as const,\n directory,\n extendsAccount,\n extendsGateway,\n account,\n domain,\n extends: `bos://${extendsAccount}/${extendsGateway}`,\n plugins,\n filesCopied,\n };\n } finally {\n await cleanup();\n }\n } catch (error) {\n return {\n status: \"error\" as const,\n directory: input.directory ?? \"\",\n extendsAccount: input.extendsAccount ?? \"\",\n extendsGateway: input.extendsGateway ?? \"\",\n account: input.account,\n domain: input.domain,\n extends:\n input.extendsAccount && input.extendsGateway\n ? `bos://${input.extendsAccount}/${input.extendsGateway}`\n : \"\",\n plugins: input.plugins ?? [],\n filesCopied: 0,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n sync: builder.sync.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n updated: [],\n skipped: [],\n added: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n const result = await syncTemplate(projectDir, input);\n\n if (result.status === \"synced\" || result.status === \"dry-run\") {\n const syncedConfig = await loadConfig({ cwd: projectDir });\n if (syncedConfig?.config) {\n await generateCodeArtifacts(projectDir, syncedConfig.config);\n }\n }\n\n return result;\n } catch (error) {\n return {\n status: \"error\" as const,\n updated: [],\n skipped: [],\n added: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n upgrade: builder.upgrade.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await upgradeTemplate(projectDir, input);\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n typesGen: builder.typesGen.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n const env =\n input.env ?? (process.env.NODE_ENV === \"production\" ? \"production\" : \"development\");\n\n const refreshed = await loadConfig({ cwd: projectDir, env });\n if (!refreshed) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: \"Failed to load bos.config.json\",\n };\n }\n\n if (input.dryRun) {\n const pluginEntries = Object.entries(refreshed.runtime.plugins ?? {});\n const fetched: string[] = [];\n const skipped: string[] = [];\n\n if (refreshed.runtime.api.source !== \"local\") {\n fetched.push(refreshed.runtime.api.url);\n } else {\n skipped.push(\"api (local)\");\n }\n\n if (refreshed.runtime.auth) {\n if (refreshed.runtime.auth.source !== \"local\") {\n fetched.push(refreshed.runtime.auth.url);\n } else {\n skipped.push(\"auth (local)\");\n }\n }\n\n for (const [key, plugin] of pluginEntries) {\n if (plugin.url && plugin.source !== \"local\") {\n fetched.push(plugin.url);\n } else if (plugin.localPath) {\n skipped.push(`${key} (local)`);\n }\n }\n\n const generated = [\n \"ui/src/lib/api-types.gen.ts\",\n \"ui/src/lib/auth-types.gen.ts\",\n \"api/src/lib/plugins-types.gen.ts\",\n \"api/src/lib/auth-types.gen.ts\",\n ];\n if (existsSync(join(projectDir, \"host\", \"src\"))) {\n generated.push(\"host/src/lib/auth-types.gen.ts\");\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched,\n skipped,\n failed: [],\n source: refreshed.runtime.api.source,\n };\n }\n\n await generateCodeArtifacts(projectDir, refreshed.config, {\n runtimeConfig: refreshed.runtime,\n });\n\n const generated = [\n \"ui/src/lib/plugin-sidebar.gen.ts\",\n \"ui/src/lib/api-types.gen.ts\",\n \"api/src/lib/plugins-types.gen.ts\",\n \"api/src/lib/auth-types.gen.ts\",\n ];\n if (\n refreshed.runtime.auth &&\n (refreshed.runtime.auth.source !== \"local\" || refreshed.runtime.auth.localPath)\n ) {\n generated.push(\"ui/src/lib/auth-types.gen.ts\");\n }\n if (existsSync(join(projectDir, \"host\", \"src\"))) {\n generated.push(\"host/src/lib/auth-types.gen.ts\");\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched: refreshed.runtime.api.source === \"remote\" ? [refreshed.runtime.api.url] : [],\n skipped: refreshed.runtime.api.source === \"local\" ? [\"api (local)\"] : [],\n failed: [],\n source: refreshed.runtime.api.source,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n status: builder.status.handler(async () => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await getStatus(projectDir);\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n }),\n});\n\nfunction extractTransactionHash(error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const match = message.match(/Transaction ID:\\s*([A-Za-z0-9]+)/i);\n return match?.[1];\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.mjs","names":[],"sources":["../src/plugin.ts"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { Effect } from \"effect\";\nimport { syncApiContractBridge } from \"./api-contract\";\nimport { buildRuntimeConfig, detectLocalPackages, prepareDevelopmentRuntimeConfig } from \"./app\";\nimport {\n copyFilteredFiles,\n fetchParentConfig,\n generateDatabaseMigrations,\n personalizeConfig,\n readTemplatekeep,\n resolveSourceDir,\n runBunInstall,\n runTypesGen,\n writeInitSnapshot,\n} from \"./cli/init\";\nimport { promptInitOptions } from \"./cli/prompts\";\nimport { getStatus } from \"./cli/status\";\nimport { syncTemplate } from \"./cli/sync\";\nimport { upgradeTemplate } from \"./cli/upgrade\";\nimport {\n buildRuntimePluginsForConfig,\n findConfigPath,\n getHostDevelopmentPort,\n getProjectRoot,\n loadConfig,\n resolveLocalDevelopmentPath,\n writeResolvedConfig,\n} from \"./config\";\nimport { type BosConfigResult, bosContract, type PluginListResult } from \"./contract\";\nimport { devApp, startApp } from \"./dev-session\";\nimport {\n buildRegistryConfigUrl,\n buildRegistryConfigUrlForNetwork,\n fetchBosConfigFromFastKv,\n fetchRemotePluginManifest,\n getRegistryNamespaceForAccount,\n getRegistryNamespaceForNetwork,\n type PluginManifest,\n} from \"./fastkv\";\nimport { computeSriHashForUrl } from \"./integrity\";\nimport type { BosEnv } from \"./merge\";\nimport { addFunctionCallAccessKey, ensureNearCli, executeTransaction } from \"./near-cli\";\nimport { getNetworkIdForAccount } from \"./network\";\nimport { createPlugin, z } from \"./sdk\";\nimport {\n type AppOrchestrator,\n buildDescription,\n buildServiceDescriptorMap,\n} from \"./service-descriptor\";\nimport { syncAndGenerateSharedUi } from \"./shared\";\nimport { writePluginSidebarGen } from \"./sidebar\";\nimport type { BosConfig, BosPluginRef, RuntimeConfig, SourceMode } from \"./types\";\nimport { run } from \"./utils/run\";\nimport { saveBosConfig } from \"./utils/save-config\";\nimport { colors } from \"./utils/theme\";\n\nfunction ensureEnvFile(configDir: string, opts?: { domain?: string }): void {\n const envPath = join(configDir, \".env\");\n const examplePath = join(configDir, \".env.example\");\n\n if (existsSync(envPath)) return;\n\n if (!existsSync(examplePath)) return;\n\n const content = readFileSync(examplePath, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n const secret = randomBytes(32).toString(\"base64url\");\n const corsOrigin = opts?.domain\n ? `http://localhost:3000,https://${opts.domain}`\n : \"http://localhost:3000\";\n\n const updated = lines\n .map((line) => {\n if (/^BETTER_AUTH_SECRET=/.test(line)) {\n return `BETTER_AUTH_SECRET=${secret}`;\n }\n if (/^CORS_ORIGIN=/.test(line)) {\n return `CORS_ORIGIN=${corsOrigin}`;\n }\n return line;\n })\n .join(\"\\n\");\n\n writeFileSync(envPath, updated);\n p.log.info(`Created .env from .env.example with generated BETTER_AUTH_SECRET`);\n}\n\nconst buildCommands: Record<string, { cmd: string; args: string[] }> = {\n host: { cmd: \"bun\", args: [\"run\", \"build\"] },\n ui: { cmd: \"bun\", args: [\"run\", \"build\"] },\n api: { cmd: \"bun\", args: [\"run\", \"build\"] },\n};\n\nconst PUBLISH_FUNCTION_NAMES = [\"__fastdata_kv\"];\n\ntype BosDeps = {\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n configDir: string;\n};\n\ntype PluginAttachmentConfig = NonNullable<BosConfig[\"plugins\"]>[string];\n\nfunction getPluginRef(entry: string | BosPluginRef | undefined | null): BosPluginRef | null {\n if (!entry || typeof entry === \"string\") return null;\n return entry;\n}\n\nfunction parseSourceMode(value: string | undefined, defaultValue: SourceMode): SourceMode {\n if (value === \"local\" || value === \"remote\") return value;\n return defaultValue;\n}\n\nfunction buildConfigResult(bosConfig: BosConfig | null): BosConfigResult {\n const packages = bosConfig ? Object.keys(bosConfig.app) : [];\n const remotes = packages.filter((name) => name !== \"host\");\n\n return {\n config: bosConfig,\n packages,\n remotes,\n };\n}\n\ntype WorkspaceTarget = {\n key: string;\n kind: \"app\" | \"plugin\";\n path: string;\n};\n\nfunction resolveWorkspaceTarget(\n key: string,\n bosConfig: BosConfig | null,\n runtimeConfig: RuntimeConfig | null,\n configDir: string,\n): WorkspaceTarget | null {\n if (bosConfig?.app && key in bosConfig.app) {\n const appEntry = (bosConfig.app as Record<string, { development?: string }>)[key];\n const devPath = resolveLocalDevelopmentPath(appEntry?.development, configDir);\n if (devPath) {\n return {\n key,\n kind: \"app\",\n path: devPath,\n };\n }\n return {\n key,\n kind: \"app\",\n path: `${configDir}/${key}`,\n };\n }\n\n const runtimePlugin = runtimeConfig?.plugins?.[key];\n const pluginPath =\n runtimePlugin?.localPath ??\n resolveLocalDevelopmentPath(getPluginRef(bosConfig?.plugins?.[key])?.development, configDir);\n if (pluginPath) {\n return {\n key,\n kind: \"plugin\",\n path: pluginPath,\n };\n }\n\n return null;\n}\n\nfunction isValidProxyUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n return parsed.protocol === \"http:\" || parsed.protocol === \"https:\";\n } catch {\n return false;\n }\n}\n\nfunction resolveProxyUrl(bosConfig: BosConfig | null): string | null {\n if (!bosConfig) return null;\n const apiConfig = bosConfig.app.api;\n if (!apiConfig) return null;\n if (apiConfig.proxy && isValidProxyUrl(apiConfig.proxy)) return apiConfig.proxy;\n if (apiConfig.production && isValidProxyUrl(apiConfig.production)) return apiConfig.production;\n return null;\n}\n\nfunction sanitizePluginKey(value: string): string {\n return value\n .replace(/[^A-Za-z0-9/_-]/g, \"-\")\n .replace(/\\/+/g, \"/\")\n .split(\"/\")\n .filter(Boolean)\n .map((segment) => segment.replace(/[^A-Za-z0-9_-]/g, \"-\"))\n .join(\"/\")\n .replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction defaultPluginKey(source: string): string {\n const normalized = source.replace(/^local:/, \"\").replace(/\\/$/, \"\");\n if (source.startsWith(\"local:\")) {\n return sanitizePluginKey(basename(normalized)) || \"plugin\";\n }\n\n try {\n const url = new URL(source);\n return sanitizePluginKey(basename(url.pathname) || url.hostname) || \"plugin\";\n } catch {\n return sanitizePluginKey(source) || \"plugin\";\n }\n}\n\nfunction pluginLocalPath(configDir: string, attachment: PluginAttachmentConfig): string | null {\n const ref = getPluginRef(attachment);\n const source = ref?.development ?? ref?.production;\n if (!source?.startsWith(\"local:\")) {\n return null;\n }\n\n return join(configDir, source.slice(\"local:\".length));\n}\n\nfunction listPluginAttachments(config: BosConfig | null) {\n return (Object.entries(config?.plugins ?? {}) as Array<[string, PluginAttachmentConfig]>)\n .map(([key, attachment]) => {\n const ref = getPluginRef(attachment);\n return {\n key,\n development: ref?.development,\n production: ref?.production,\n localPath: ref?.development?.startsWith(\"local:\")\n ? ref.development.slice(\"local:\".length)\n : undefined,\n source: ref?.development?.startsWith(\"local:\") ? (\"local\" as const) : (\"remote\" as const),\n integrity: ref?.integrity,\n version: ref?.version,\n name: ref?.name,\n };\n })\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\ninterface GeneratedArtifacts {\n sidebarPath: string;\n resolvedConfigPath?: string;\n contractBridgePath: string;\n}\n\nasync function generateCodeArtifacts(\n configDir: string,\n config: BosConfig,\n opts?: {\n env?: BosEnv;\n extendsChain?: string[];\n runtimeConfig?: RuntimeConfig;\n },\n): Promise<GeneratedArtifacts | null> {\n writePluginSidebarGen(configDir, config);\n\n if (opts?.env) {\n writeResolvedConfig(configDir, config, opts.env, opts.extendsChain);\n }\n\n const runtimeConfig = opts?.runtimeConfig ?? (await loadConfig({ cwd: configDir }))?.runtime;\n if (!runtimeConfig) return null;\n\n const bridge = await syncApiContractBridge({\n configDir,\n runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\n\n return {\n sidebarPath: join(configDir, \"ui/src/lib/plugin-sidebar.gen.ts\"),\n resolvedConfigPath: opts?.env ? join(configDir, \".bos/bos.resolved-config.json\") : undefined,\n contractBridgePath: bridge.bridgePath,\n };\n}\n\nfunction extractPublishedUrl(output: string): string | null {\n const match = output.match(/https?:\\/\\/[^\\s\"'<>]+/g);\n if (!match || match.length === 0) return null;\n return match[match.length - 1] ?? null;\n}\n\nasync function buildEveryPluginQuietly(cwd: string) {\n const packageDir = `${cwd}/packages/every-plugin`;\n const packageExists = await Bun.file(`${packageDir}/package.json`).exists();\n if (!packageExists) {\n return;\n }\n\n const distPath = `${cwd}/packages/every-plugin/dist/build/rspack/plugin.mjs`;\n const distExists = await Bun.file(distPath).exists();\n\n if (distExists) {\n return;\n }\n\n const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/every-plugin\", \"build\"], {\n cwd,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (result.exitCode === 0) {\n console.log(\"[build:ssr] build succeeded\");\n return;\n }\n\n if (result.stdout.trim()) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr.trim()) {\n process.stderr.write(result.stderr);\n }\n\n throw new Error(\n `bun run --cwd packages/every-plugin build failed with exit code ${result.exitCode}`,\n );\n}\n\nasync function buildEverythingDevQuietly(cwd: string) {\n const packageDir = `${cwd}/packages/everything-dev`;\n const packageExists = await Bun.file(`${packageDir}/package.json`).exists();\n if (!packageExists) {\n return;\n }\n\n const distPath = `${cwd}/packages/everything-dev/dist/index.mjs`;\n const distExists = await Bun.file(distPath).exists();\n\n if (distExists) {\n return;\n }\n\n const result = (await run(\"bun\", [\"run\", \"--cwd\", \"packages/everything-dev\", \"build\"], {\n cwd,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (result.exitCode === 0) {\n console.log(\"[everything-dev] build succeeded\");\n return;\n }\n\n if (result.stdout.trim()) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr.trim()) {\n process.stderr.write(result.stderr);\n }\n\n throw new Error(\n `bun run --cwd packages/everything-dev build failed with exit code ${result.exitCode}`,\n );\n}\n\nasync function fetchPublishedConfig(\n accountId: string,\n gatewayId: string,\n): Promise<BosConfig | null> {\n try {\n return await fetchBosConfigFromFastKv<BosConfig>(`bos://${accountId}/${gatewayId}`);\n } catch {\n return null;\n }\n}\n\nfunction selectWorkspaceTargets(packages: string, bosConfig: BosConfig | null): string[] {\n const allPackages = [\n ...Object.keys(bosConfig?.app ?? {}),\n ...Object.keys(bosConfig?.plugins ?? {}),\n ];\n if (packages === \"all\") {\n return allPackages;\n }\n\n return packages\n .split(\",\")\n .map((pkg) => pkg.trim())\n .filter((pkg) => allPackages.includes(pkg));\n}\n\nasync function buildWorkspaceTargets(opts: {\n configDir: string;\n bosConfig: BosConfig | null;\n runtimeConfig: RuntimeConfig | null;\n targets: string[];\n deploy: boolean;\n}): Promise<{ built: string[]; skipped: string[] }> {\n const existing: WorkspaceTarget[] = [];\n const skipped: string[] = [];\n\n for (const target of opts.targets) {\n const resolved = resolveWorkspaceTarget(\n target,\n opts.bosConfig,\n opts.runtimeConfig,\n opts.configDir,\n );\n if (!resolved) {\n skipped.push(target);\n continue;\n }\n\n const exists = await Bun.file(`${resolved.path}/package.json`).exists();\n if (exists) existing.push(resolved);\n else skipped.push(target);\n }\n\n if (existing.length === 0) {\n return { built: [], skipped };\n }\n\n const sharedSync = await syncAndGenerateSharedUi({\n configDir: opts.configDir,\n hostMode: \"local\",\n bosConfig: opts.bosConfig ?? undefined,\n extendsChain: [],\n });\n if (sharedSync.catalogChanged) {\n await run(\"bun\", [\"install\"], { cwd: opts.configDir });\n }\n\n if (existing.some((entry) => entry.key === \"api\")) {\n await buildEveryPluginQuietly(opts.configDir);\n }\n\n await buildEverythingDevQuietly(opts.configDir);\n\n const env: Record<string, string> = {\n ...process.env,\n NODE_ENV: opts.deploy ? \"production\" : \"development\",\n };\n if (opts.deploy) {\n env.DEPLOY = \"true\";\n } else {\n delete env.DEPLOY;\n }\n\n const orderedExisting = opts.deploy\n ? [\n ...existing.filter((entry) => entry.kind === \"app\" && entry.key !== \"host\"),\n ...existing.filter((entry) => entry.kind === \"plugin\"),\n ...existing.filter((entry) => entry.kind === \"app\" && entry.key === \"host\"),\n ]\n : existing;\n const built: string[] = [];\n\n for (const resolved of orderedExisting) {\n const pkgJson = JSON.parse(await Bun.file(`${resolved.path}/package.json`).text()) as {\n scripts?: Record<string, string>;\n };\n const shouldDeployScript = opts.deploy && pkgJson.scripts?.deploy;\n const buildConfig = shouldDeployScript\n ? { cmd: \"bun\", args: [\"run\", \"deploy\"] }\n : (buildCommands[resolved.key] ?? { cmd: \"bun\", args: [\"run\", \"build\"] });\n\n await run(buildConfig.cmd, buildConfig.args, {\n cwd: resolved.path,\n env,\n });\n built.push(resolved.key);\n }\n\n return { built, skipped };\n}\n\nexport default createPlugin({\n variables: z.object({\n configPath: z.string().optional(),\n }),\n secrets: z.object({}),\n contract: bosContract,\n initialize: (config) =>\n Effect.promise(async () => {\n const configResult = await loadConfig({ path: config.variables.configPath });\n return {\n bosConfig: configResult?.config ?? null,\n runtimeConfig: configResult?.runtime ?? null,\n configDir: getProjectRoot(),\n } satisfies BosDeps;\n }),\n shutdown: () => Effect.void,\n createRouter: (deps, builder) => ({\n config: builder.config.handler(async () => buildConfigResult(deps.bosConfig)),\n\n pluginAdd: builder.pluginAdd.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const isBosRef = input.source.startsWith(\"bos://\");\n const isLocal = input.source.startsWith(\"local:\");\n const key = sanitizePluginKey(\n input.as ??\n (isBosRef ? (input.source.split(\"/\").pop() ?? \"plugin\") : defaultPluginKey(input.source)),\n );\n const existing = deps.bosConfig.plugins?.[key];\n const existingEntry = existing && typeof existing === \"object\" ? existing : {};\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n\n if (isBosRef) {\n nextPlugins[key] = {\n ...existingEntry,\n extends: input.source,\n };\n } else if (isLocal) {\n nextPlugins[key] = {\n ...existingEntry,\n development: input.source,\n ...(existingEntry.extends ? {} : {}),\n };\n } else {\n nextPlugins[key] = {\n ...existingEntry,\n production: input.production ?? input.source,\n };\n }\n\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: nextPlugins,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n\n const stored = deps.bosConfig.plugins?.[key];\n const storedObj = stored && typeof stored === \"object\" ? stored : {};\n\n return {\n status: \"added\" as const,\n key,\n development: storedObj.development,\n production: storedObj.production,\n integrity: storedObj.integrity,\n version: storedObj.version,\n };\n }),\n\n pluginRemove: builder.pluginRemove.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n if (!deps.bosConfig.plugins?.[input.key]) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n delete nextPlugins[input.key];\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: Object.keys(nextPlugins).length > 0 ? nextPlugins : undefined,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n\n return {\n status: \"removed\" as const,\n key: input.key,\n };\n }),\n\n pluginList: builder.pluginList.handler(async () => {\n const plugins: PluginListResult[\"plugins\"] = listPluginAttachments(deps.bosConfig);\n return {\n status: \"listed\" as const,\n plugins,\n };\n }),\n\n pluginPublish: builder.pluginPublish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: \"No bos.config.json found\",\n };\n }\n\n const attachment = deps.bosConfig.plugins?.[input.key];\n if (!attachment) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' is not configured`,\n };\n }\n\n const attachmentRef = getPluginRef(attachment);\n\n const localPath = pluginLocalPath(deps.configDir, attachment);\n if (!localPath) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Plugin '${input.key}' does not have a local development path`,\n };\n }\n\n const pkgPath = join(localPath, \"package.json\");\n if (!(await Bun.file(pkgPath).exists())) {\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Missing package.json at ${localPath}`,\n };\n }\n\n const pkgJson = (await Bun.file(pkgPath).json()) as {\n scripts?: Record<string, string>;\n name?: string;\n version?: string;\n };\n const script = pkgJson.scripts?.deploy ? \"deploy\" : \"build\";\n\n const { stdout, stderr, exitCode } = (await run(\"bun\", [\"run\", script], {\n cwd: localPath,\n capture: true,\n })) as { stdout: string; stderr: string; exitCode: number };\n\n if (exitCode !== 0) {\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n return {\n status: \"error\" as const,\n key: input.key,\n error: `Publish failed with exit code ${exitCode}`,\n };\n }\n\n if (stdout.trim()) process.stdout.write(stdout);\n if (stderr.trim()) process.stderr.write(stderr);\n\n let publishedUrl = extractPublishedUrl(`${stdout}\\n${stderr}`);\n\n let manifest: PluginManifest | null = null;\n if (publishedUrl) {\n manifest = await fetchRemotePluginManifest(publishedUrl);\n } else if (attachmentRef?.production) {\n manifest = await fetchRemotePluginManifest(attachmentRef.production);\n if (manifest) {\n publishedUrl = attachmentRef.production;\n }\n }\n\n const integrity = publishedUrl ? await computeSriHashForUrl(publishedUrl) : null;\n const version = manifest?.plugin.version ?? pkgJson.version;\n\n if (publishedUrl) {\n const pluginConfigPath = join(localPath, \"bos.config.json\");\n if (existsSync(pluginConfigPath)) {\n try {\n const pluginConfig = JSON.parse(readFileSync(pluginConfigPath, \"utf-8\")) as Record<\n string,\n unknown\n >;\n if (!pluginConfig.app) pluginConfig.app = {};\n const app = pluginConfig.app as Record<string, unknown>;\n if (!app.api) app.api = {};\n const api = app.api as Record<string, unknown>;\n api.production = publishedUrl;\n if (integrity) {\n api.integrity = integrity;\n } else {\n delete api.integrity;\n }\n writeFileSync(pluginConfigPath, `${JSON.stringify(pluginConfig, null, 2)}\\n`);\n console.log(` ✅ Updated ${pluginConfigPath}: app.api.production`);\n } catch (err) {\n console.error(\n ` ❌ Failed to update plugin bos.config.json:`,\n err instanceof Error ? err.message : err,\n );\n }\n }\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\n\n let pluginDomain: string | undefined;\n if (existsSync(pluginConfigPath)) {\n try {\n const pluginConfig = JSON.parse(readFileSync(pluginConfigPath, \"utf-8\"));\n if (typeof pluginConfig.domain === \"string\") {\n pluginDomain = pluginConfig.domain;\n }\n } catch {}\n }\n if (!pluginDomain) {\n pluginDomain = `${input.key}.${deps.bosConfig.domain ?? \"everything.dev\"}`;\n }\n\n if (manifest && version) {\n try {\n const registryEntries: Record<string, string> = {\n [`plugins/${account}/${input.key}/manifest.json`]: JSON.stringify(manifest),\n [`plugins/${account}/${input.key}/metadata`]: JSON.stringify({\n title: null,\n description: null,\n repoUrl: deps.bosConfig.repository ?? null,\n version,\n publishedAt: new Date().toISOString(),\n cdnUrl: publishedUrl,\n integrity,\n }),\n [`plugins/${account}/${input.key}/versions/${version}/manifest.json`]:\n JSON.stringify(manifest),\n };\n\n if (existsSync(pluginConfigPath)) {\n try {\n const publishedPluginConfig = JSON.parse(readFileSync(pluginConfigPath, \"utf-8\"));\n delete publishedPluginConfig.development;\n registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] =\n JSON.stringify(publishedPluginConfig);\n } catch {}\n }\n\n const payload = JSON.stringify(registryEntries);\n const argsBase64 = Buffer.from(payload).toString(\"base64\");\n const privateKey = process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;\n\n await Effect.runPromise(ensureNearCli);\n try {\n await Effect.runPromise(\n executeTransaction({\n account,\n contract: getRegistryNamespaceForNetwork(network),\n method: \"__fastdata_kv\",\n argsBase64,\n network,\n privateKey,\n gas: \"50Tgas\",\n deposit: \"0NEAR\",\n }),\n );\n } catch (registryError) {\n const txHash = extractTransactionHash(registryError);\n if (!txHash) {\n console.warn(\n `[publish] Plugin registry write failed: ${registryError instanceof Error ? registryError.message : registryError}`,\n );\n }\n }\n } catch (registryError) {\n console.warn(\n `[publish] Plugin registry write skipped: ${registryError instanceof Error ? registryError.message : registryError}`,\n );\n }\n }\n\n await generateCodeArtifacts(deps.configDir, deps.bosConfig);\n }\n\n return {\n status: \"published\" as const,\n key: input.key,\n path: localPath,\n script,\n production: publishedUrl ?? attachmentRef?.production,\n integrity: integrity ?? undefined,\n version: version ?? undefined,\n };\n }),\n\n dev: builder.dev.handler(async ({ input }) => {\n ensureEnvFile(deps.configDir);\n\n const localPackages = detectLocalPackages(\n deps.bosConfig ?? undefined,\n deps.runtimeConfig ?? undefined,\n );\n\n const hostSource: SourceMode = localPackages.includes(\"host\")\n ? parseSourceMode(input.host, \"local\")\n : \"remote\";\n const uiSource: SourceMode = localPackages.includes(\"ui\")\n ? parseSourceMode(input.ui, \"local\")\n : \"remote\";\n const apiSource: SourceMode = localPackages.includes(\"api\")\n ? parseSourceMode(input.api, \"local\")\n : \"remote\";\n const authSource: SourceMode = localPackages.includes(\"auth\")\n ? parseSourceMode(input.auth, \"local\")\n : \"remote\";\n const ssr = input.ssr ?? false;\n const proxy = input.proxy ?? false;\n\n const sharedSync = await syncAndGenerateSharedUi({\n configDir: deps.configDir,\n hostMode: hostSource,\n bosConfig: deps.bosConfig ?? undefined,\n extendsChain: [],\n });\n if (sharedSync.catalogChanged) {\n await run(\"bun\", [\"install\"], { cwd: deps.configDir });\n }\n if (\n (apiSource === \"local\" && !proxy) ||\n localPackages.some((pkg) => pkg.startsWith(\"plugin:\"))\n ) {\n await buildEveryPluginQuietly(deps.configDir);\n }\n\n await buildEverythingDevQuietly(deps.configDir);\n\n const refreshed = await loadConfig({ cwd: deps.configDir });\n deps.bosConfig = refreshed?.config ?? deps.bosConfig;\n deps.runtimeConfig = refreshed?.runtime ?? deps.runtimeConfig;\n\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n description: \"No bos.config.json found\",\n processes: [],\n };\n }\n\n if (proxy && !resolveProxyUrl(deps.bosConfig)) {\n return {\n status: \"error\" as const,\n description: \"No valid proxy URL configured in bos.config.json\",\n processes: [],\n };\n }\n\n const hostPort = input.port ?? getHostDevelopmentPort(deps.bosConfig.app.host.development);\n const developmentRuntime = buildRuntimeConfig(deps.bosConfig, {\n uiSource,\n apiSource,\n authSource,\n hostSource,\n env: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n const runtimeConfig = await prepareDevelopmentRuntimeConfig(developmentRuntime, {\n hostPort,\n ssr,\n });\n\n await generateCodeArtifacts(deps.configDir, deps.bosConfig, {\n env: \"development\",\n extendsChain: refreshed?.source.extended,\n runtimeConfig,\n });\n\n const services = buildServiceDescriptorMap(runtimeConfig, { ssr, proxy });\n const packages = [...services.keys()];\n const displayEnv: Record<string, string> = {};\n const apiDescriptor = services.get(\"api\");\n if (apiDescriptor?.proxy) {\n const proxyUrl = resolveProxyUrl(deps.bosConfig);\n if (proxyUrl) displayEnv.API_PROXY = proxyUrl;\n }\n\n const orchestrator: AppOrchestrator = {\n packages,\n env: displayEnv,\n description: buildDescription(services),\n port: runtimeConfig.host.port,\n interactive: input.interactive,\n };\n\n devApp(orchestrator, services, runtimeConfig);\n\n return {\n status: \"started\" as const,\n description: orchestrator.description,\n processes: packages,\n };\n }),\n\n start: builder.start.handler(async ({ input }) => {\n ensureEnvFile(deps.configDir);\n\n const account = input.account ?? process.env.BOS_ACCOUNT;\n const domain = input.domain ?? process.env.BOS_GATEWAY;\n\n let config: BosConfig | null = null;\n let remoteConfig: BosConfig | null = null;\n\n if (account && domain) {\n remoteConfig = await fetchPublishedConfig(account, domain);\n if (remoteConfig) {\n config = remoteConfig;\n } else {\n console.warn(\n `[Start] Failed to fetch remote config for ${account}/${domain}, falling back to local bos.config.json`,\n );\n }\n }\n\n if (!config) {\n config = deps.bosConfig;\n }\n\n if (!config) {\n return {\n status: \"error\" as const,\n url: \"\",\n error:\n \"No configuration found. Set BOS_ACCOUNT and BOS_GATEWAY environment variables, or provide a local bos.config.json.\",\n };\n }\n\n // Apply runtime overrides from CLI flags / env vars\n if (account) {\n config = { ...config, account };\n }\n if (domain) {\n config = { ...config, domain };\n }\n\n const port = input.port ?? getHostDevelopmentPort(config.app.host.development);\n const isStaging = input.env === \"staging\";\n const runtimePlugins = await buildRuntimePluginsForConfig(\n config,\n deps.configDir,\n \"production\",\n );\n const runtimeConfig = buildRuntimeConfig(config, {\n uiSource: \"remote\",\n apiSource: \"remote\",\n authSource: \"remote\",\n hostSource: \"remote\",\n env: \"production\",\n plugins: runtimePlugins,\n });\n\n await generateCodeArtifacts(deps.configDir, config, {\n env: \"production\",\n runtimeConfig,\n });\n\n // ── Production Readiness Validation ──\n const productionEnv: Record<string, string> = {};\n const warnings: string[] = [];\n\n // Default CORS_ORIGIN to the configured domain if not set\n if (!process.env.CORS_ORIGIN && config.domain) {\n const defaultOrigin = `https://${config.domain}`;\n productionEnv.CORS_ORIGIN = defaultOrigin;\n warnings.push(`CORS_ORIGIN defaulting to ${defaultOrigin}`);\n }\n\n // Validate required secrets\n const requiredSecrets = new Set<string>();\n const missingSecrets: string[] = [];\n\n if (runtimeConfig.auth?.secrets) {\n for (const s of runtimeConfig.auth.secrets) requiredSecrets.add(s);\n }\n if (runtimeConfig.api?.secrets) {\n for (const s of runtimeConfig.api.secrets) requiredSecrets.add(s);\n }\n for (const plugin of Object.values(runtimeConfig.plugins ?? {})) {\n if (plugin.secrets) {\n for (const s of plugin.secrets) requiredSecrets.add(s);\n }\n }\n\n for (const secret of requiredSecrets) {\n const value = process.env[secret];\n if (!value || value.length === 0) {\n missingSecrets.push(secret);\n }\n }\n\n if (missingSecrets.length > 0) {\n warnings.push(`Missing ${missingSecrets.length} secret(s): ${missingSecrets.join(\", \")}`);\n }\n\n const services = buildServiceDescriptorMap(runtimeConfig);\n\n const stagingEnvVars: Record<string, string> = isStaging\n ? { BOS_GATEWAY: config.staging?.domain ?? config.domain ?? \"\" }\n : {};\n\n const configSource = remoteConfig\n ? `bos://${account}/${domain}`\n : (findConfigPath() ?? \"bos.config.json\");\n\n const configSourceHttp =\n remoteConfig && account && domain ? buildRegistryConfigUrl(account, domain) : undefined;\n\n const summaryLines: string[] = [\"\", ` ${colors.dim(\"Config Source:\")} ${configSource}`];\n if (configSourceHttp) {\n summaryLines.push(` ${colors.dim(configSourceHttp)}`);\n }\n summaryLines.push(\n ` ${colors.dim(\"Account:\")} ${config.account}`,\n ` ${colors.dim(\"Domain:\")} ${config.domain ?? \"not configured\"}`,\n \"\",\n ` ${colors.dim(\"Modules:\")}`,\n ` ${colors.dim(\"HOST\")} → ${runtimeConfig.host.remoteUrl ?? runtimeConfig.host.url ?? \"local\"}`,\n ` ${colors.dim(\"UI\")} → ${runtimeConfig.ui.url ?? \"local\"}`,\n ` ${colors.dim(\"API\")} → ${runtimeConfig.api.url ?? \"local\"}`,\n );\n if (runtimeConfig.auth) {\n summaryLines.push(` ${colors.dim(\"AUTH\")} → ${runtimeConfig.auth.url ?? \"local\"}`);\n }\n if (warnings.length > 0) {\n summaryLines.push(\"\");\n for (const w of warnings) {\n summaryLines.push(` ${colors.yellow(w)}`);\n }\n }\n summaryLines.push(\"\");\n console.log(summaryLines.join(\"\\n\"));\n\n const orchestrator: AppOrchestrator = {\n packages: [\"host\"],\n env: {\n NODE_ENV: \"production\",\n ...productionEnv,\n ...stagingEnvVars,\n },\n description: `${isStaging ? \"Staging\" : \"Production\"} Mode (${config.account})`,\n port,\n interactive: input.interactive,\n noLogs: true,\n };\n\n startApp(orchestrator, services, runtimeConfig);\n return {\n status: \"running\" as const,\n url: `http://localhost:${port}`,\n };\n }),\n\n build: builder.build.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n const buildEnv: BosEnv = input.deploy ? \"production\" : \"development\";\n\n const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);\n if (targets.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\n\n const runtimeConfig = buildRuntimeConfig(deps.bosConfig, {\n uiSource: deps.bosConfig.app.ui?.development ? \"local\" : \"remote\",\n apiSource: deps.bosConfig.app.api?.development ? \"local\" : \"remote\",\n authSource: deps.bosConfig.app.auth?.development ? \"local\" : \"remote\",\n hostSource: deps.bosConfig.app.host?.development ? \"local\" : \"remote\",\n env: buildEnv,\n plugins: deps.runtimeConfig?.plugins,\n });\n\n await generateCodeArtifacts(deps.configDir, deps.bosConfig, {\n env: buildEnv,\n runtimeConfig,\n });\n\n const { built, skipped } = await buildWorkspaceTargets({\n configDir: deps.configDir,\n bosConfig: deps.bosConfig,\n runtimeConfig: runtimeConfig,\n targets,\n deploy: input.deploy,\n });\n\n if (built.length === 0) {\n return {\n status: \"error\" as const,\n built: [],\n skipped,\n };\n }\n\n return {\n status: \"success\" as const,\n built,\n skipped,\n deployed: input.deploy,\n };\n }),\n\n publish: builder.publish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n error: \"No bos.config.json found\",\n };\n }\n\n const account = deps.bosConfig.account;\n const gateway = deps.bosConfig.domain;\n if (!gateway) {\n return {\n status: \"error\" as const,\n registryUrl: \"\",\n error: \"bos.config.json must define domain to publish\",\n };\n }\n\n const network = input.network ?? getNetworkIdForAccount(account);\n const bosUrl = `bos://${account}/${gateway}`;\n const registryUrl = buildRegistryConfigUrlForNetwork(network, account, gateway);\n const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);\n\n let publishConfig = deps.bosConfig;\n let built: string[] | undefined;\n let skipped: string[] | undefined;\n\n if (input.dryRun) {\n return {\n status: \"dry-run\" as const,\n registryUrl,\n built,\n skipped,\n };\n }\n\n if (input.deploy) {\n await generateCodeArtifacts(deps.configDir, deps.bosConfig, {\n env: \"production\",\n runtimeConfig: deps.runtimeConfig ?? undefined,\n });\n\n const result = await buildWorkspaceTargets({\n configDir: deps.configDir,\n bosConfig: deps.bosConfig,\n runtimeConfig: deps.runtimeConfig,\n targets,\n deploy: true,\n });\n built = result.built;\n skipped = result.skipped;\n\n const refreshed = await loadConfig({ cwd: deps.configDir });\n if (refreshed?.config) {\n deps.bosConfig = refreshed.config;\n deps.runtimeConfig = refreshed.runtime;\n publishConfig = refreshed.config;\n }\n }\n\n const registryEntries: Record<string, string> = {\n [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishConfig),\n };\n\n for (const [pluginKey, pluginEntry] of Object.entries(publishConfig.plugins ?? {})) {\n const pluginRef = getPluginRef(pluginEntry);\n if (!pluginRef?.development?.startsWith(\"local:\")) continue;\n\n const localPath = join(deps.configDir, pluginRef.development.slice(\"local:\".length));\n const pluginConfigPath = join(localPath, \"bos.config.json\");\n if (!existsSync(pluginConfigPath)) continue;\n\n try {\n const pluginConfig = JSON.parse(readFileSync(pluginConfigPath, \"utf-8\")) as Record<\n string,\n unknown\n >;\n const pluginDomain =\n typeof pluginConfig.domain === \"string\"\n ? pluginConfig.domain\n : `${pluginKey}.${gateway}`;\n delete pluginConfig.development;\n registryEntries[`apps/${account}/${pluginDomain}/bos.config.json`] =\n JSON.stringify(pluginConfig);\n } catch {}\n }\n\n const payload = JSON.stringify(registryEntries);\n const argsBase64 = Buffer.from(payload).toString(\"base64\");\n const privateKey =\n input.privateKey || process.env.NEAR_PRIVATE_KEY || process.env.BOS_NEAR_PRIVATE_KEY;\n\n try {\n await Effect.runPromise(ensureNearCli);\n let txHash: string | undefined;\n\n try {\n const tx = await Effect.runPromise(\n executeTransaction({\n account,\n contract: getRegistryNamespaceForNetwork(network),\n method: \"__fastdata_kv\",\n argsBase64,\n network,\n privateKey,\n gas: \"300Tgas\",\n deposit: \"0NEAR\",\n }),\n );\n txHash = tx.txHash;\n } catch (error) {\n txHash = extractTransactionHash(error);\n\n if (!txHash) {\n throw error;\n }\n\n try {\n const verifiedConfig = await fetchBosConfigFromFastKv<BosConfig>(bosUrl);\n if (JSON.stringify(verifiedConfig) !== JSON.stringify(publishConfig)) {\n throw error;\n }\n } catch {\n // Config may not exist yet on first publish or propagation delay;\n // a valid txHash is sufficient proof the transaction was submitted.\n }\n }\n\n return {\n status: \"published\" as const,\n registryUrl,\n txHash,\n built,\n skipped,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n registryUrl,\n error: error instanceof Error ? error.message : \"Unknown error\",\n built,\n skipped,\n };\n }\n }),\n\n keyPublish: builder.keyPublish.handler(async ({ input }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n account: \"\",\n network: \"mainnet\" as const,\n contract: \"\",\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: \"No bos.config.json found\",\n };\n }\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\n const contract = getRegistryNamespaceForAccount(account);\n try {\n await Effect.runPromise(ensureNearCli);\n const keyPair = await addFunctionCallAccessKey({\n account,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n network,\n });\n\n return {\n status: \"published\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n publicKey: keyPair.publicKey,\n privateKey: keyPair.privateKey,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n account,\n network,\n contract,\n allowance: input.allowance,\n functionNames: PUBLISH_FUNCTION_NAMES,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n init: builder.init.handler(async ({ input }) => {\n try {\n let extendsAccount = input.extendsAccount;\n let extendsGateway = input.extendsGateway;\n let directory = input.directory;\n let account = input.account;\n let domain = input.domain;\n let withHost = input.withHost;\n let plugins = input.plugins;\n\n if (input.extends) {\n const match = input.extends.match(/^(?:bos:\\/\\/)?([^/]+)\\/(.+)$/);\n if (match) {\n if (!extendsAccount) extendsAccount = match[1];\n if (!extendsGateway) extendsGateway = match[2];\n }\n }\n\n extendsAccount = extendsAccount || \"dev.everything.near\";\n extendsGateway = extendsGateway || \"everything.dev\";\n\n let parentPluginKeys: string[] = [];\n let parentConfig: BosConfig | null = null;\n try {\n parentConfig = await fetchParentConfig(extendsAccount, extendsGateway);\n if (parentConfig?.plugins && typeof parentConfig.plugins === \"object\") {\n parentPluginKeys = Object.keys(parentConfig.plugins);\n }\n } catch {}\n\n if (!input.noInteractive) {\n const prompted = await promptInitOptions({\n extendsAccount,\n extendsGateway,\n extends: input.extends,\n directory,\n account,\n domain,\n plugins,\n withHost,\n parentPluginKeys,\n });\n extendsAccount = prompted.extendsAccount;\n extendsGateway = prompted.extendsGateway;\n directory = prompted.directory;\n account = prompted.account;\n domain = prompted.domain;\n withHost = prompted.withHost;\n plugins = prompted.plugins;\n }\n\n directory = directory || domain || extendsGateway;\n plugins = plugins ?? [];\n\n if (!parentConfig) {\n try {\n parentConfig = await fetchParentConfig(extendsAccount, extendsGateway);\n } catch {\n return {\n status: \"error\" as const,\n directory,\n extendsAccount,\n extendsGateway,\n account,\n domain,\n extends: `bos://${extendsAccount}/${extendsGateway}`,\n plugins: plugins ?? [],\n filesCopied: 0,\n error: `No config found at bos://${extendsAccount}/${extendsGateway} — are you sure this is the right parent?`,\n };\n }\n }\n\n const {\n sourceDir,\n parentConfig: resolvedParentConfig,\n cleanup,\n } = await resolveSourceDir({\n extendsAccount,\n extendsGateway,\n source: input.source,\n });\n\n parentConfig = resolvedParentConfig;\n\n try {\n const patterns = await readTemplatekeep(sourceDir);\n if (patterns.length === 0) {\n return {\n status: \"error\" as const,\n directory,\n extendsAccount,\n extendsGateway,\n account,\n domain,\n extends: `bos://${extendsAccount}/${extendsGateway}`,\n plugins: plugins ?? [],\n filesCopied: 0,\n error: \"No .templatekeep found in template source\",\n };\n }\n\n const pluginRoutes: Record<string, string[]> = {};\n if (parentConfig.plugins) {\n for (const [key, entry] of Object.entries(parentConfig.plugins)) {\n const entryRef = getPluginRef(entry);\n if (entryRef?.routes && entryRef.routes.length > 0) {\n pluginRoutes[key] = entryRef.routes;\n }\n }\n }\n\n const s = p.spinner();\n s.start(\"Setting up project\");\n\n const filesCopied = await copyFilteredFiles(sourceDir, directory, patterns, {\n withHost,\n plugins,\n pluginRoutes,\n });\n\n await personalizeConfig(directory, {\n extendsAccount,\n extendsGateway,\n account: account || extendsAccount,\n domain: domain || extendsGateway,\n plugins,\n pluginRoutes,\n workspaceOpts: { sourceDir },\n withHost,\n });\n\n await writeInitSnapshot(directory, extendsAccount, extendsGateway, sourceDir, patterns, {\n withHost,\n plugins,\n pluginRoutes,\n });\n\n ensureEnvFile(directory, { domain });\n\n if (!input.noInstall) {\n await runBunInstall(directory);\n await runTypesGen(directory);\n await generateDatabaseMigrations(directory);\n }\n\n const initConfig = await loadConfig({ cwd: directory });\n if (initConfig?.config) {\n await generateCodeArtifacts(directory, initConfig.config);\n }\n\n s.stop(\"Project initialized\");\n\n return {\n status: \"initialized\" as const,\n directory,\n extendsAccount,\n extendsGateway,\n account,\n domain,\n extends: `bos://${extendsAccount}/${extendsGateway}`,\n plugins,\n filesCopied,\n };\n } finally {\n await cleanup();\n }\n } catch (error) {\n return {\n status: \"error\" as const,\n directory: input.directory ?? \"\",\n extendsAccount: input.extendsAccount ?? \"\",\n extendsGateway: input.extendsGateway ?? \"\",\n account: input.account,\n domain: input.domain,\n extends:\n input.extendsAccount && input.extendsGateway\n ? `bos://${input.extendsAccount}/${input.extendsGateway}`\n : \"\",\n plugins: input.plugins ?? [],\n filesCopied: 0,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n sync: builder.sync.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n updated: [],\n skipped: [],\n added: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n const result = await syncTemplate(projectDir, input);\n\n if (result.status === \"synced\" || result.status === \"dry-run\") {\n const syncedConfig = await loadConfig({ cwd: projectDir });\n if (syncedConfig?.config) {\n await generateCodeArtifacts(projectDir, syncedConfig.config);\n }\n }\n\n return result;\n } catch (error) {\n return {\n status: \"error\" as const,\n updated: [],\n skipped: [],\n added: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n upgrade: builder.upgrade.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await upgradeTemplate(projectDir, input);\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n typesGen: builder.typesGen.handler(async ({ input }) => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n const env =\n input.env ?? (process.env.NODE_ENV === \"production\" ? \"production\" : \"development\");\n\n const refreshed = await loadConfig({ cwd: projectDir, env });\n if (!refreshed) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: \"Failed to load bos.config.json\",\n };\n }\n\n if (input.dryRun) {\n const pluginEntries = Object.entries(refreshed.runtime.plugins ?? {});\n const fetched: string[] = [];\n const skipped: string[] = [];\n\n if (refreshed.runtime.api.source !== \"local\") {\n fetched.push(refreshed.runtime.api.url);\n } else {\n skipped.push(\"api (local)\");\n }\n\n if (refreshed.runtime.auth) {\n if (refreshed.runtime.auth.source !== \"local\") {\n fetched.push(refreshed.runtime.auth.url);\n } else {\n skipped.push(\"auth (local)\");\n }\n }\n\n for (const [key, plugin] of pluginEntries) {\n if (plugin.url && plugin.source !== \"local\") {\n fetched.push(plugin.url);\n } else if (plugin.localPath) {\n skipped.push(`${key} (local)`);\n }\n }\n\n const generated = [\n \"ui/src/lib/api-types.gen.ts\",\n \"ui/src/lib/auth-types.gen.ts\",\n \"api/src/lib/plugins-types.gen.ts\",\n \"api/src/lib/auth-types.gen.ts\",\n ];\n if (existsSync(join(projectDir, \"host\", \"src\"))) {\n generated.push(\"host/src/lib/auth-types.gen.ts\");\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched,\n skipped,\n failed: [],\n source: refreshed.runtime.api.source,\n };\n }\n\n await generateCodeArtifacts(projectDir, refreshed.config, {\n runtimeConfig: refreshed.runtime,\n });\n\n const generated = [\n \"ui/src/lib/plugin-sidebar.gen.ts\",\n \"ui/src/lib/api-types.gen.ts\",\n \"api/src/lib/plugins-types.gen.ts\",\n \"api/src/lib/auth-types.gen.ts\",\n ];\n if (\n refreshed.runtime.auth &&\n (refreshed.runtime.auth.source !== \"local\" || refreshed.runtime.auth.localPath)\n ) {\n generated.push(\"ui/src/lib/auth-types.gen.ts\");\n }\n if (existsSync(join(projectDir, \"host\", \"src\"))) {\n generated.push(\"host/src/lib/auth-types.gen.ts\");\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched: refreshed.runtime.api.source === \"remote\" ? [refreshed.runtime.api.url] : [],\n skipped: refreshed.runtime.api.source === \"local\" ? [\"api (local)\"] : [],\n failed: [],\n source: refreshed.runtime.api.source,\n };\n } catch (error) {\n return {\n status: \"error\" as const,\n generated: [],\n fetched: [],\n skipped: [],\n failed: [],\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n\n status: builder.status.handler(async () => {\n try {\n const configPath = findConfigPath();\n if (!configPath) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: \"No bos.config.json found in current directory\",\n };\n }\n\n const projectDir = resolve(dirname(configPath));\n return await getStatus(projectDir);\n } catch (error) {\n return {\n status: \"error\" as const,\n packages: [],\n envFile: \"missing\" as const,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }),\n }),\n});\n\nfunction extractTransactionHash(error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const match = message.match(/Transaction ID:\\s*([A-Za-z0-9]+)/i);\n return match?.[1];\n}\n"],"mappings":"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"}
|
package/dist/types.cjs
CHANGED
|
@@ -112,6 +112,7 @@ const ClientRuntimeInfoSchema = every_plugin_zod.z.object({
|
|
|
112
112
|
gatewayId: every_plugin_zod.z.string(),
|
|
113
113
|
runtimeBasePath: every_plugin_zod.z.string(),
|
|
114
114
|
title: every_plugin_zod.z.string().nullable(),
|
|
115
|
+
description: every_plugin_zod.z.string().nullable(),
|
|
115
116
|
hostUrl: every_plugin_zod.z.string().nullable()
|
|
116
117
|
});
|
|
117
118
|
const BosStagingSchema = every_plugin_zod.z.object({ domain: every_plugin_zod.z.string() });
|
|
@@ -145,6 +146,8 @@ const BosConfigSchema = every_plugin_zod.z.object({
|
|
|
145
146
|
account: every_plugin_zod.z.string(),
|
|
146
147
|
extends: ExtendsSchema.optional(),
|
|
147
148
|
domain: every_plugin_zod.z.string().optional(),
|
|
149
|
+
title: every_plugin_zod.z.string().optional(),
|
|
150
|
+
description: every_plugin_zod.z.string().optional(),
|
|
148
151
|
testnet: every_plugin_zod.z.string().optional(),
|
|
149
152
|
staging: BosStagingSchema.optional(),
|
|
150
153
|
repository: every_plugin_zod.z.string().optional(),
|
|
@@ -167,6 +170,7 @@ const RuntimeConfigSchema = every_plugin_zod.z.object({
|
|
|
167
170
|
domain: every_plugin_zod.z.string().optional(),
|
|
168
171
|
networkId: every_plugin_zod.z.enum(["mainnet", "testnet"]),
|
|
169
172
|
title: every_plugin_zod.z.string().optional(),
|
|
173
|
+
description: every_plugin_zod.z.string().optional(),
|
|
170
174
|
repository: every_plugin_zod.z.string().optional(),
|
|
171
175
|
host: FederationEntrySchema.extend({
|
|
172
176
|
localPath: every_plugin_zod.z.string().optional(),
|
package/dist/types.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.cjs","names":["z"],"sources":["../src/types.ts"],"sourcesContent":["import { z } from \"./sdk\";\n\nexport const ExtendsSchema = z.union([\n z.string(),\n z.object({\n development: z.string().optional(),\n production: z.string().optional(),\n staging: z.string().optional(),\n }),\n]);\nexport type Extends = z.infer<typeof ExtendsSchema>;\nexport type ExtendsConfig = Extract<Extends, Record<string, string | undefined>>;\n\nexport const SourceModeSchema = z.enum([\"local\", \"remote\"]);\nexport type SourceMode = z.infer<typeof SourceModeSchema>;\n\nexport const SharedConfigSchema = z.object({\n version: z.string(),\n requiredVersion: z.string().optional(),\n singleton: z.boolean().optional(),\n eager: z.boolean().optional(),\n strictVersion: z.boolean().optional(),\n shareScope: z.string().optional(),\n});\nexport type SharedConfig = z.infer<typeof SharedConfigSchema>;\nexport type SharedDepConfig = SharedConfig;\nexport const SharedDepConfigSchema = SharedConfigSchema;\n\nexport const FederationEntrySchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n integrity: z.string().optional(),\n});\nexport type FederationEntry = z.infer<typeof FederationEntrySchema>;\n\nexport const SidebarRoleSchema = z.enum([\"anon\", \"member\", \"admin\"]);\nexport type SidebarRole = z.infer<typeof SidebarRoleSchema>;\n\nexport const SidebarItemSchema = z.object({\n icon: z.string(),\n label: z.string(),\n to: z.string().optional(),\n roleRequired: SidebarRoleSchema.optional(),\n});\nexport type SidebarItem = z.infer<typeof SidebarItemSchema>;\n\nexport const ApiPluginConfigSchema = z.object({\n name: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n});\nexport type ApiPluginConfig = z.infer<typeof ApiPluginConfigSchema>;\n\nexport const PluginUiConfigSchema = z.object({\n name: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n});\nexport type PluginUiConfig = z.infer<typeof PluginUiConfigSchema>;\n\nexport const BosPluginRefSchema = z.object({\n extends: ExtendsSchema.optional(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n name: z.string().optional(),\n version: z.string().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n routes: z.array(z.string()).optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n app: z.record(z.string(), z.unknown()).optional(),\n shared: z.record(z.string(), z.record(z.string(), SharedConfigSchema)).optional(),\n plugins: z.record(z.string(), z.unknown()).optional(),\n});\nexport type BosPluginRef = z.infer<typeof BosPluginRefSchema>;\nexport type PluginEntryValue = string | BosPluginRef;\nexport type PluginEntries = Record<string, PluginEntryValue>;\n\nconst PluginRuntimeUiSchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n localPath: z.string().optional(),\n port: z.number().optional(),\n integrity: z.string().optional(),\n});\nexport type PluginRuntimeUi = z.infer<typeof PluginRuntimeUiSchema>;\n\nexport const RuntimePluginConfigSchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n integrity: z.string().optional(),\n ui: PluginRuntimeUiSchema.optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n routes: z.array(z.string()).optional(),\n});\nexport type RuntimePluginConfig = z.infer<typeof RuntimePluginConfigSchema>;\n\nexport const UiConfigSchema = z.object({\n name: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n ssr: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n});\nexport type UiConfig = z.infer<typeof UiConfigSchema>;\n\nexport const HostConfigSchema = z.object({\n development: z.string(),\n production: z.string(),\n integrity: z.string().optional(),\n secrets: z.array(z.string()).optional(),\n});\nexport type HostConfig = z.infer<typeof HostConfigSchema>;\n\nexport const ClientRuntimeInfoSchema = z.object({\n accountId: z.string(),\n gatewayId: z.string(),\n runtimeBasePath: z.string(),\n title: z.string().nullable(),\n hostUrl: z.string().nullable(),\n});\nexport type ClientRuntimeInfo = z.infer<typeof ClientRuntimeInfoSchema>;\n\nexport const BosStagingSchema = z.object({\n domain: z.string(),\n});\nexport type BosStaging = z.infer<typeof BosStagingSchema>;\n\nconst BosConfigInputAppEntrySchema = z.record(z.string(), z.unknown());\nexport type BosConfigInputAppEntry = z.infer<typeof BosConfigInputAppEntrySchema>;\n\nexport const BosConfigInputSchema: z.ZodType<BosConfigInput> = z.lazy(() =>\n z.object({\n extends: ExtendsSchema.optional(),\n account: z.string().optional(),\n domain: z.string().optional(),\n testnet: z.string().optional(),\n template: z.string().optional(),\n gateway: z\n .object({\n development: z.string().optional(),\n production: z.string().optional(),\n account: z.string().optional(),\n })\n .optional(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n name: z.string().optional(),\n version: z.string().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n routes: z.array(z.string()).optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n app: z.record(z.string(), BosConfigInputAppEntrySchema).optional(),\n shared: z.record(z.string(), z.record(z.string(), SharedConfigSchema)).optional(),\n plugins: z.record(z.string(), z.union([z.string(), BosConfigInputSchema])).optional(),\n }),\n);\n\nexport interface BosConfigInput {\n extends?: string | ExtendsConfig;\n account?: string;\n domain?: string;\n testnet?: string;\n template?: string;\n gateway?: {\n development?: string;\n production?: string;\n account?: string;\n };\n development?: string;\n production?: string;\n integrity?: string;\n name?: string;\n version?: string;\n proxy?: string;\n variables?: Record<string, string>;\n secrets?: string[];\n routes?: string[];\n sidebar?: SidebarItem[];\n app?: Record<string, BosConfigInputAppEntry>;\n shared?: Record<string, Record<string, SharedDepConfig>>;\n plugins?: Record<string, string | BosConfigInput>;\n}\n\nexport const BosConfigSchema = z.object({\n account: z.string(),\n extends: ExtendsSchema.optional(),\n domain: z.string().optional(),\n testnet: z.string().optional(),\n staging: BosStagingSchema.optional(),\n repository: z.string().optional(),\n shared: z.record(z.string(), z.record(z.string(), SharedConfigSchema)).optional(),\n plugins: z.record(z.string(), z.union([z.string(), BosPluginRefSchema])).optional(),\n app: z.object({\n host: HostConfigSchema,\n ui: UiConfigSchema,\n api: ApiPluginConfigSchema,\n auth: ApiPluginConfigSchema.optional(),\n }),\n});\nexport type BosConfig = z.infer<typeof BosConfigSchema>;\n\nexport const RuntimeConfigSchema = z.object({\n env: z.enum([\"development\", \"production\", \"staging\"]),\n account: z.string(),\n domain: z.string().optional(),\n networkId: z.enum([\"mainnet\", \"testnet\"]),\n title: z.string().optional(),\n repository: z.string().optional(),\n host: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n secrets: z.array(z.string()).optional(),\n remoteUrl: z.string().optional(),\n }),\n shared: z\n .object({\n ui: z.record(z.string(), SharedConfigSchema).optional(),\n plugins: z.record(z.string(), SharedConfigSchema).optional(),\n })\n .optional(),\n ui: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n ssrUrl: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n }),\n api: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n }),\n auth: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n }).optional(),\n plugins: z.record(z.string(), RuntimePluginConfigSchema).optional(),\n});\nexport type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;\n\nexport const ClientRuntimeConfigSchema = z.object({\n cspNonce: z.string().optional(),\n env: z.enum([\"development\", \"production\", \"staging\"]),\n account: z.string(),\n networkId: z.enum([\"mainnet\", \"testnet\"]),\n hostUrl: z.string().optional(),\n assetsUrl: z.string(),\n apiBase: z.string(),\n rpcBase: z.string(),\n repository: z.string().optional(),\n authAvailable: z.boolean().optional(),\n runtime: ClientRuntimeInfoSchema.optional(),\n ui: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n })\n .optional(),\n api: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n })\n .optional(),\n auth: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n })\n .optional(),\n plugins: z\n .record(\n z.string(),\n z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n ui: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n integrity: z.string().optional(),\n })\n .optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n }),\n )\n .optional(),\n});\nexport type ClientRuntimeConfig = z.infer<typeof ClientRuntimeConfigSchema>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.cjs","names":["z"],"sources":["../src/types.ts"],"sourcesContent":["import { z } from \"./sdk\";\n\nexport const ExtendsSchema = z.union([\n z.string(),\n z.object({\n development: z.string().optional(),\n production: z.string().optional(),\n staging: z.string().optional(),\n }),\n]);\nexport type Extends = z.infer<typeof ExtendsSchema>;\nexport type ExtendsConfig = Extract<Extends, Record<string, string | undefined>>;\n\nexport const SourceModeSchema = z.enum([\"local\", \"remote\"]);\nexport type SourceMode = z.infer<typeof SourceModeSchema>;\n\nexport const SharedConfigSchema = z.object({\n version: z.string(),\n requiredVersion: z.string().optional(),\n singleton: z.boolean().optional(),\n eager: z.boolean().optional(),\n strictVersion: z.boolean().optional(),\n shareScope: z.string().optional(),\n});\nexport type SharedConfig = z.infer<typeof SharedConfigSchema>;\nexport type SharedDepConfig = SharedConfig;\nexport const SharedDepConfigSchema = SharedConfigSchema;\n\nexport const FederationEntrySchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n integrity: z.string().optional(),\n});\nexport type FederationEntry = z.infer<typeof FederationEntrySchema>;\n\nexport const SidebarRoleSchema = z.enum([\"anon\", \"member\", \"admin\"]);\nexport type SidebarRole = z.infer<typeof SidebarRoleSchema>;\n\nexport const SidebarItemSchema = z.object({\n icon: z.string(),\n label: z.string(),\n to: z.string().optional(),\n roleRequired: SidebarRoleSchema.optional(),\n});\nexport type SidebarItem = z.infer<typeof SidebarItemSchema>;\n\nexport const ApiPluginConfigSchema = z.object({\n name: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n});\nexport type ApiPluginConfig = z.infer<typeof ApiPluginConfigSchema>;\n\nexport const PluginUiConfigSchema = z.object({\n name: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n});\nexport type PluginUiConfig = z.infer<typeof PluginUiConfigSchema>;\n\nexport const BosPluginRefSchema = z.object({\n extends: ExtendsSchema.optional(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n name: z.string().optional(),\n version: z.string().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n routes: z.array(z.string()).optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n app: z.record(z.string(), z.unknown()).optional(),\n shared: z.record(z.string(), z.record(z.string(), SharedConfigSchema)).optional(),\n plugins: z.record(z.string(), z.unknown()).optional(),\n});\nexport type BosPluginRef = z.infer<typeof BosPluginRefSchema>;\nexport type PluginEntryValue = string | BosPluginRef;\nexport type PluginEntries = Record<string, PluginEntryValue>;\n\nconst PluginRuntimeUiSchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n localPath: z.string().optional(),\n port: z.number().optional(),\n integrity: z.string().optional(),\n});\nexport type PluginRuntimeUi = z.infer<typeof PluginRuntimeUiSchema>;\n\nexport const RuntimePluginConfigSchema = z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n integrity: z.string().optional(),\n ui: PluginRuntimeUiSchema.optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n routes: z.array(z.string()).optional(),\n});\nexport type RuntimePluginConfig = z.infer<typeof RuntimePluginConfigSchema>;\n\nexport const UiConfigSchema = z.object({\n name: z.string(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n ssr: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n});\nexport type UiConfig = z.infer<typeof UiConfigSchema>;\n\nexport const HostConfigSchema = z.object({\n development: z.string(),\n production: z.string(),\n integrity: z.string().optional(),\n secrets: z.array(z.string()).optional(),\n});\nexport type HostConfig = z.infer<typeof HostConfigSchema>;\n\nexport const ClientRuntimeInfoSchema = z.object({\n accountId: z.string(),\n gatewayId: z.string(),\n runtimeBasePath: z.string(),\n title: z.string().nullable(),\n description: z.string().nullable(),\n hostUrl: z.string().nullable(),\n});\nexport type ClientRuntimeInfo = z.infer<typeof ClientRuntimeInfoSchema>;\n\nexport const BosStagingSchema = z.object({\n domain: z.string(),\n});\nexport type BosStaging = z.infer<typeof BosStagingSchema>;\n\nconst BosConfigInputAppEntrySchema = z.record(z.string(), z.unknown());\nexport type BosConfigInputAppEntry = z.infer<typeof BosConfigInputAppEntrySchema>;\n\nexport const BosConfigInputSchema: z.ZodType<BosConfigInput> = z.lazy(() =>\n z.object({\n extends: ExtendsSchema.optional(),\n account: z.string().optional(),\n domain: z.string().optional(),\n testnet: z.string().optional(),\n template: z.string().optional(),\n gateway: z\n .object({\n development: z.string().optional(),\n production: z.string().optional(),\n account: z.string().optional(),\n })\n .optional(),\n development: z.string().optional(),\n production: z.string().optional(),\n integrity: z.string().optional(),\n name: z.string().optional(),\n version: z.string().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n routes: z.array(z.string()).optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n app: z.record(z.string(), BosConfigInputAppEntrySchema).optional(),\n shared: z.record(z.string(), z.record(z.string(), SharedConfigSchema)).optional(),\n plugins: z.record(z.string(), z.union([z.string(), BosConfigInputSchema])).optional(),\n }),\n);\n\nexport interface BosConfigInput {\n extends?: string | ExtendsConfig;\n account?: string;\n domain?: string;\n title?: string;\n description?: string;\n testnet?: string;\n template?: string;\n gateway?: {\n development?: string;\n production?: string;\n account?: string;\n };\n development?: string;\n production?: string;\n integrity?: string;\n name?: string;\n version?: string;\n proxy?: string;\n variables?: Record<string, string>;\n secrets?: string[];\n routes?: string[];\n sidebar?: SidebarItem[];\n app?: Record<string, BosConfigInputAppEntry>;\n shared?: Record<string, Record<string, SharedDepConfig>>;\n plugins?: Record<string, string | BosConfigInput>;\n}\n\nexport const BosConfigSchema = z.object({\n account: z.string(),\n extends: ExtendsSchema.optional(),\n domain: z.string().optional(),\n title: z.string().optional(),\n description: z.string().optional(),\n testnet: z.string().optional(),\n staging: BosStagingSchema.optional(),\n repository: z.string().optional(),\n shared: z.record(z.string(), z.record(z.string(), SharedConfigSchema)).optional(),\n plugins: z.record(z.string(), z.union([z.string(), BosPluginRefSchema])).optional(),\n app: z.object({\n host: HostConfigSchema,\n ui: UiConfigSchema,\n api: ApiPluginConfigSchema,\n auth: ApiPluginConfigSchema.optional(),\n }),\n});\nexport type BosConfig = z.infer<typeof BosConfigSchema>;\n\nexport const RuntimeConfigSchema = z.object({\n env: z.enum([\"development\", \"production\", \"staging\"]),\n account: z.string(),\n domain: z.string().optional(),\n networkId: z.enum([\"mainnet\", \"testnet\"]),\n title: z.string().optional(),\n description: z.string().optional(),\n repository: z.string().optional(),\n host: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n secrets: z.array(z.string()).optional(),\n remoteUrl: z.string().optional(),\n }),\n shared: z\n .object({\n ui: z.record(z.string(), SharedConfigSchema).optional(),\n plugins: z.record(z.string(), SharedConfigSchema).optional(),\n })\n .optional(),\n ui: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n ssrUrl: z.string().optional(),\n ssrIntegrity: z.string().optional(),\n }),\n api: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n }),\n auth: FederationEntrySchema.extend({\n localPath: z.string().optional(),\n port: z.number().optional(),\n proxy: z.string().optional(),\n variables: z.record(z.string(), z.string()).optional(),\n secrets: z.array(z.string()).optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n }).optional(),\n plugins: z.record(z.string(), RuntimePluginConfigSchema).optional(),\n});\nexport type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;\n\nexport const ClientRuntimeConfigSchema = z.object({\n cspNonce: z.string().optional(),\n env: z.enum([\"development\", \"production\", \"staging\"]),\n account: z.string(),\n networkId: z.enum([\"mainnet\", \"testnet\"]),\n hostUrl: z.string().optional(),\n assetsUrl: z.string(),\n apiBase: z.string(),\n rpcBase: z.string(),\n repository: z.string().optional(),\n authAvailable: z.boolean().optional(),\n runtime: ClientRuntimeInfoSchema.optional(),\n ui: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n })\n .optional(),\n api: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n })\n .optional(),\n auth: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n })\n .optional(),\n plugins: z\n .record(\n z.string(),\n z.object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n integrity: z.string().optional(),\n ui: z\n .object({\n name: z.string(),\n url: z.string(),\n entry: z.string(),\n source: SourceModeSchema,\n integrity: z.string().optional(),\n })\n .optional(),\n sidebar: z.array(SidebarItemSchema).optional(),\n }),\n )\n .optional(),\n});\nexport type ClientRuntimeConfig = z.infer<typeof ClientRuntimeConfigSchema>;\n"],"mappings":"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"}
|
package/dist/types.d.cts
CHANGED
|
@@ -198,6 +198,7 @@ declare const ClientRuntimeInfoSchema: z.ZodObject<{
|
|
|
198
198
|
gatewayId: z.ZodString;
|
|
199
199
|
runtimeBasePath: z.ZodString;
|
|
200
200
|
title: z.ZodNullable<z.ZodString>;
|
|
201
|
+
description: z.ZodNullable<z.ZodString>;
|
|
201
202
|
hostUrl: z.ZodNullable<z.ZodString>;
|
|
202
203
|
}, z.core.$strip>;
|
|
203
204
|
type ClientRuntimeInfo = z.infer<typeof ClientRuntimeInfoSchema>;
|
|
@@ -212,6 +213,8 @@ interface BosConfigInput {
|
|
|
212
213
|
extends?: string | ExtendsConfig;
|
|
213
214
|
account?: string;
|
|
214
215
|
domain?: string;
|
|
216
|
+
title?: string;
|
|
217
|
+
description?: string;
|
|
215
218
|
testnet?: string;
|
|
216
219
|
template?: string;
|
|
217
220
|
gateway?: {
|
|
@@ -241,6 +244,8 @@ declare const BosConfigSchema: z.ZodObject<{
|
|
|
241
244
|
staging: z.ZodOptional<z.ZodString>;
|
|
242
245
|
}, z.core.$strip>]>>;
|
|
243
246
|
domain: z.ZodOptional<z.ZodString>;
|
|
247
|
+
title: z.ZodOptional<z.ZodString>;
|
|
248
|
+
description: z.ZodOptional<z.ZodString>;
|
|
244
249
|
testnet: z.ZodOptional<z.ZodString>;
|
|
245
250
|
staging: z.ZodOptional<z.ZodObject<{
|
|
246
251
|
domain: z.ZodString;
|
|
@@ -359,6 +364,7 @@ declare const RuntimeConfigSchema: z.ZodObject<{
|
|
|
359
364
|
mainnet: "mainnet";
|
|
360
365
|
}>;
|
|
361
366
|
title: z.ZodOptional<z.ZodString>;
|
|
367
|
+
description: z.ZodOptional<z.ZodString>;
|
|
362
368
|
repository: z.ZodOptional<z.ZodString>;
|
|
363
369
|
host: z.ZodObject<{
|
|
364
370
|
name: z.ZodString;
|
|
@@ -509,6 +515,7 @@ declare const ClientRuntimeConfigSchema: z.ZodObject<{
|
|
|
509
515
|
gatewayId: z.ZodString;
|
|
510
516
|
runtimeBasePath: z.ZodString;
|
|
511
517
|
title: z.ZodNullable<z.ZodString>;
|
|
518
|
+
description: z.ZodNullable<z.ZodString>;
|
|
512
519
|
hostUrl: z.ZodNullable<z.ZodString>;
|
|
513
520
|
}, z.core.$strip>>;
|
|
514
521
|
ui: z.ZodOptional<z.ZodObject<{
|
package/dist/types.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.ts"],"mappings":";;;cAEa,aAAA,EAAa,CAAA,CAAA,QAAA,WAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CAAA,SAAA;;;;;KAQd,OAAA,GAAU,CAAA,CAAE,KAAA,QAAa,aAAA;AAAA,KACzB,aAAA,GAAgB,OAAA,CAAQ,OAAA,EAAS,MAAA;AAAA,cAEhC,gBAAA,EAAgB,CAAA,CAAA,OAAA;;;;KACjB,UAAA,GAAa,CAAA,CAAE,KAAA,QAAa,gBAAA;AAAA,cAE3B,kBAAA,EAAkB,CAAA,CAAA,SAAA;;;;;;;;KAQnB,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAC9B,eAAA,GAAkB,YAAA;AAAA,cACjB,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;;;cAErB,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;;;;;KAOtB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,cAEhC,iBAAA,EAAiB,CAAA,CAAA,OAAA;;;;;KAClB,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,cAE5B,iBAAA,EAAiB,CAAA,CAAA,SAAA;;;;;;;;;;KAMlB,WAAA,GAAc,CAAA,CAAE,KAAA,QAAa,iBAAA;AAAA,cAE5B,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;KAUtB,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,cAEhC,oBAAA,EAAoB,CAAA,CAAA,SAAA;;;;;;KAMrB,cAAA,GAAiB,CAAA,CAAE,KAAA,QAAa,oBAAA;AAAA,cAE/B,kBAAA,EAAkB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgBnB,YAAA,GAAe,CAAA,CAAE,KAAA,QAAa,kBAAA;AAAA,KAC9B,gBAAA,YAA4B,YAAA;AAAA,KAC5B,aAAA,GAAgB,MAAA,SAAe,gBAAA;AAAA,cAErC,qBAAA,EAAqB,CAAA,CAAA,SAAA;;;;;;;;;;;;KASf,eAAA,GAAkB,CAAA,CAAE,KAAA,QAAa,qBAAA;AAAA,cAEhC,yBAAA,EAAyB,CAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAe1B,mBAAA,GAAsB,CAAA,CAAE,KAAA,QAAa,yBAAA;AAAA,cAEpC,cAAA,EAAc,CAAA,CAAA,SAAA;;;;;;;;KAQf,QAAA,GAAW,CAAA,CAAE,KAAA,QAAa,cAAA;AAAA,cAEzB,gBAAA,EAAgB,CAAA,CAAA,SAAA;;;;;;KAMjB,UAAA,GAAa,CAAA,CAAE,KAAA,QAAa,gBAAA;AAAA,cAE3B,uBAAA,EAAuB,CAAA,CAAA,SAAA
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
|
package/dist/types.d.mts
CHANGED
|
@@ -198,6 +198,7 @@ declare const ClientRuntimeInfoSchema: z.ZodObject<{
|
|
|
198
198
|
gatewayId: z.ZodString;
|
|
199
199
|
runtimeBasePath: z.ZodString;
|
|
200
200
|
title: z.ZodNullable<z.ZodString>;
|
|
201
|
+
description: z.ZodNullable<z.ZodString>;
|
|
201
202
|
hostUrl: z.ZodNullable<z.ZodString>;
|
|
202
203
|
}, z.core.$strip>;
|
|
203
204
|
type ClientRuntimeInfo = z.infer<typeof ClientRuntimeInfoSchema>;
|
|
@@ -212,6 +213,8 @@ interface BosConfigInput {
|
|
|
212
213
|
extends?: string | ExtendsConfig;
|
|
213
214
|
account?: string;
|
|
214
215
|
domain?: string;
|
|
216
|
+
title?: string;
|
|
217
|
+
description?: string;
|
|
215
218
|
testnet?: string;
|
|
216
219
|
template?: string;
|
|
217
220
|
gateway?: {
|
|
@@ -241,6 +244,8 @@ declare const BosConfigSchema: z.ZodObject<{
|
|
|
241
244
|
staging: z.ZodOptional<z.ZodString>;
|
|
242
245
|
}, z.core.$strip>]>>;
|
|
243
246
|
domain: z.ZodOptional<z.ZodString>;
|
|
247
|
+
title: z.ZodOptional<z.ZodString>;
|
|
248
|
+
description: z.ZodOptional<z.ZodString>;
|
|
244
249
|
testnet: z.ZodOptional<z.ZodString>;
|
|
245
250
|
staging: z.ZodOptional<z.ZodObject<{
|
|
246
251
|
domain: z.ZodString;
|
|
@@ -359,6 +364,7 @@ declare const RuntimeConfigSchema: z.ZodObject<{
|
|
|
359
364
|
mainnet: "mainnet";
|
|
360
365
|
}>;
|
|
361
366
|
title: z.ZodOptional<z.ZodString>;
|
|
367
|
+
description: z.ZodOptional<z.ZodString>;
|
|
362
368
|
repository: z.ZodOptional<z.ZodString>;
|
|
363
369
|
host: z.ZodObject<{
|
|
364
370
|
name: z.ZodString;
|
|
@@ -509,6 +515,7 @@ declare const ClientRuntimeConfigSchema: z.ZodObject<{
|
|
|
509
515
|
gatewayId: z.ZodString;
|
|
510
516
|
runtimeBasePath: z.ZodString;
|
|
511
517
|
title: z.ZodNullable<z.ZodString>;
|
|
518
|
+
description: z.ZodNullable<z.ZodString>;
|
|
512
519
|
hostUrl: z.ZodNullable<z.ZodString>;
|
|
513
520
|
}, z.core.$strip>>;
|
|
514
521
|
ui: z.ZodOptional<z.ZodObject<{
|