everything-dev 1.11.3 → 1.11.5

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.
@@ -26,8 +26,8 @@ declare const DevOptionsSchema: z.ZodObject<{
26
26
  }, z.core.$strip>;
27
27
  declare const DevResultSchema: z.ZodObject<{
28
28
  status: z.ZodEnum<{
29
- error: "error";
30
29
  started: "started";
30
+ error: "error";
31
31
  }>;
32
32
  description: z.ZodString;
33
33
  processes: z.ZodArray<z.ZodString>;
@@ -337,8 +337,8 @@ declare const StatusResultSchema: z.ZodObject<{
337
337
  }, z.core.$strip>;
338
338
  declare const TypesGenOptionsSchema: z.ZodObject<{
339
339
  env: z.ZodOptional<z.ZodEnum<{
340
- production: "production";
341
340
  development: "development";
341
+ production: "production";
342
342
  }>>;
343
343
  dryRun: z.ZodDefault<z.ZodBoolean>;
344
344
  }, z.core.$strip>;
@@ -381,8 +381,8 @@ declare const bosContract: {
381
381
  interactive: z.ZodOptional<z.ZodBoolean>;
382
382
  }, z.core.$strip>, z.ZodObject<{
383
383
  status: z.ZodEnum<{
384
- error: "error";
385
384
  started: "started";
385
+ error: "error";
386
386
  }>;
387
387
  description: z.ZodString;
388
388
  processes: z.ZodArray<z.ZodString>;
@@ -682,8 +682,8 @@ declare const bosContract: {
682
682
  }, z.core.$strip>, _$_orpc_contract0.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
683
683
  typesGen: _$_orpc_contract0.ContractProcedure<z.ZodObject<{
684
684
  env: z.ZodOptional<z.ZodEnum<{
685
- production: "production";
686
685
  development: "development";
686
+ production: "production";
687
687
  }>>;
688
688
  dryRun: z.ZodDefault<z.ZodBoolean>;
689
689
  }, z.core.$strip>, z.ZodObject<{
@@ -26,8 +26,8 @@ declare const DevOptionsSchema: z.ZodObject<{
26
26
  }, z.core.$strip>;
27
27
  declare const DevResultSchema: z.ZodObject<{
28
28
  status: z.ZodEnum<{
29
- error: "error";
30
29
  started: "started";
30
+ error: "error";
31
31
  }>;
32
32
  description: z.ZodString;
33
33
  processes: z.ZodArray<z.ZodString>;
@@ -337,8 +337,8 @@ declare const StatusResultSchema: z.ZodObject<{
337
337
  }, z.core.$strip>;
338
338
  declare const TypesGenOptionsSchema: z.ZodObject<{
339
339
  env: z.ZodOptional<z.ZodEnum<{
340
- production: "production";
341
340
  development: "development";
341
+ production: "production";
342
342
  }>>;
343
343
  dryRun: z.ZodDefault<z.ZodBoolean>;
344
344
  }, z.core.$strip>;
@@ -381,8 +381,8 @@ declare const bosContract: {
381
381
  interactive: z.ZodOptional<z.ZodBoolean>;
382
382
  }, z.core.$strip>, z.ZodObject<{
383
383
  status: z.ZodEnum<{
384
- error: "error";
385
384
  started: "started";
385
+ error: "error";
386
386
  }>;
387
387
  description: z.ZodString;
388
388
  processes: z.ZodArray<z.ZodString>;
@@ -682,8 +682,8 @@ declare const bosContract: {
682
682
  }, z.core.$strip>, _$_orpc_contract0.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
683
683
  typesGen: _$_orpc_contract0.ContractProcedure<z.ZodObject<{
684
684
  env: z.ZodOptional<z.ZodEnum<{
685
- production: "production";
686
685
  development: "development";
686
+ production: "production";
687
687
  }>>;
688
688
  dryRun: z.ZodDefault<z.ZodBoolean>;
689
689
  }, z.core.$strip>, z.ZodObject<{
@@ -37,7 +37,7 @@ declare const makeDevProcess: (pkg: string, callbacks: ProcessCallbacks, portOve
37
37
  kill: Effect.Effect<void, never, never>;
38
38
  waitForReady: Effect.Effect<void, Error, never>;
39
39
  waitForExit: Effect.Effect<ExitCode, _$_effect_platform_Error0.PlatformError, never>;
40
- }, string | Error | _$_effect_platform_Error0.PlatformError, ServiceDescriptorMap | DevRuntimeConfig | _$effect_Scope0.Scope | _$_effect_platform_CommandExecutor0.CommandExecutor>;
40
+ }, string | Error | _$_effect_platform_Error0.PlatformError, _$effect_Scope0.Scope | ServiceDescriptorMap | DevRuntimeConfig | _$_effect_platform_CommandExecutor0.CommandExecutor>;
41
41
  declare function getProcessStates(packages: string[], services: Map<string, ServiceDescriptor>, portOverride?: number): ProcessState[];
42
42
  //#endregion
43
43
  export { ProcessCallbacks, ProcessHandle, ProcessState, ProcessStatus, getProcessStates, makeDevProcess };
@@ -37,7 +37,7 @@ declare const makeDevProcess: (pkg: string, callbacks: ProcessCallbacks, portOve
37
37
  kill: Effect.Effect<void, never, never>;
38
38
  waitForReady: Effect.Effect<void, Error, never>;
39
39
  waitForExit: Effect.Effect<ExitCode, _$_effect_platform_Error0.PlatformError, never>;
40
- }, string | Error | _$_effect_platform_Error0.PlatformError, ServiceDescriptorMap | DevRuntimeConfig | _$effect_Scope0.Scope | _$_effect_platform_CommandExecutor0.CommandExecutor>;
40
+ }, string | Error | _$_effect_platform_Error0.PlatformError, _$effect_Scope0.Scope | ServiceDescriptorMap | DevRuntimeConfig | _$_effect_platform_CommandExecutor0.CommandExecutor>;
41
41
  declare function getProcessStates(packages: string[], services: Map<string, ServiceDescriptor>, portOverride?: number): ProcessState[];
42
42
  //#endregion
43
43
  export { ProcessCallbacks, ProcessHandle, ProcessState, ProcessStatus, getProcessStates, makeDevProcess };
package/dist/plugin.cjs CHANGED
@@ -641,7 +641,7 @@ var plugin_default = (0, every_plugin.createPlugin)({
641
641
  runtimeConfig,
642
642
  apiBaseUrl: runtimeConfig.api.url
643
643
  });
644
- const stagingEnvVars = isStaging ? { GATEWAY_DOMAIN: config.staging?.domain ?? config.domain ?? "" } : {};
644
+ const stagingEnvVars = isStaging ? { BOS_GATEWAY: config.staging?.domain ?? config.domain ?? "" } : {};
645
645
  const configSource = remoteConfig ? `bos://${account}/${domain}` : require_config.findConfigPath() ?? "bos.config.json";
646
646
  const configSourceHttp = remoteConfig && account && domain ? require_fastkv.buildRegistryConfigUrl(account, domain) : void 0;
647
647
  const summaryLines = ["", ` ${require_theme.colors.dim("Config Source:")} ${configSource}`];
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.cjs","names":["resolveLocalDevelopmentPath","loadConfig","syncApiContractBridge","run","fetchBosConfigFromFastKv","syncAndGenerateSharedUi","z","bosContract","Effect","getProjectRoot","parsePluginBosUrl","fetchPluginFromRegistry","fetchRemotePluginManifest","computeSriHashForUrl","getNetworkIdForAccount","ensureNearCli","executeTransaction","getRegistryNamespaceForNetwork","detectLocalPackages","getHostDevelopmentPort","prepareDevelopmentRuntimeConfig","buildRuntimeConfig","buildServiceDescriptorMap","buildDescription","buildRuntimePluginsForConfig","findConfigPath","buildRegistryConfigUrl","colors","buildRegistryConfigUrlForNetwork","getRegistryNamespaceForAccount","addFunctionCallAccessKey","promptInitOptions","fetchParentConfig","resolveSourceDir","readTemplatekeep","p","copyFilteredFiles","personalizeConfig","writeInitSnapshot","runBunInstall","runTypesGen","generateDatabaseMigrations","syncTemplate","upgradeTemplate","getStatus"],"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} from \"./config\";\nimport {\n type BosConfigResult,\n type BuildOptions,\n bosContract,\n type DevOptions,\n type InitOptions,\n type KeyPublishOptions,\n type PluginAddOptions,\n type PluginListResult,\n type PluginPublishOptions,\n type PluginRemoveOptions,\n type PublishOptions,\n type StartOptions,\n type SyncOptions,\n type TypesGenOptions,\n type UpgradeOptions,\n} from \"./contract\";\nimport { devApp, startApp } from \"./dev-session\";\nimport {\n buildRegistryConfigUrl,\n buildRegistryConfigUrlForNetwork,\n fetchBosConfigFromFastKv,\n fetchPluginFromRegistry,\n fetchRemotePluginManifest,\n getRegistryNamespaceForAccount,\n getRegistryNamespaceForNetwork,\n type PluginManifest,\n parsePluginBosUrl,\n} from \"./fastkv\";\nimport { computeSriHashForUrl } from \"./integrity\";\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 type { BosConfig, RuntimeConfig, SourceMode } from \"./types\";\nimport { run } from \"./utils/run\";\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 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(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 source = attachment.development ?? attachment.production;\n if (!source?.startsWith(\"local:\")) {\n return null;\n }\n\n return join(configDir, source.slice(\"local:\".length));\n}\n\nasync function saveBosConfig(configDir: string, config: BosConfig): Promise<void> {\n const filePath = join(configDir, \"bos.config.json\");\n const next = `${JSON.stringify(config, null, 2)}\\n`;\n try {\n if (readFileSync(filePath, \"utf8\") === next) return;\n } catch {\n // file does not exist yet\n }\n\n writeFileSync(filePath, next);\n}\n\nfunction listPluginAttachments(config: BosConfig | null) {\n return (Object.entries(config?.plugins ?? {}) as Array<[string, PluginAttachmentConfig]>)\n .map(([key, attachment]) => ({\n key,\n development: attachment.development,\n production: attachment.production,\n localPath: attachment.development?.startsWith(\"local:\")\n ? attachment.development.slice(\"local:\".length)\n : undefined,\n source: attachment.development?.startsWith(\"local:\")\n ? (\"local\" as const)\n : (\"remote\" as const),\n integrity: attachment.integrity,\n version: attachment.version,\n name: attachment.name,\n }))\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nasync function refreshApiContractBridge(\n configDir: string,\n env: \"development\" | \"production\" = \"development\",\n): Promise<void> {\n const refreshed = await loadConfig({ cwd: configDir, env });\n if (!refreshed) return;\n\n await syncApiContractBridge({\n configDir,\n runtimeConfig: refreshed.runtime,\n apiBaseUrl: refreshed.runtime.api.url,\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 });\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: any) =>\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: BosDeps, builder: any) => ({\n config: builder.config.handler(async () => buildConfigResult(deps.bosConfig)),\n\n pluginAdd: builder.pluginAdd.handler(async ({ input }: { input: PluginAddOptions }) => {\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 pluginRef = parsePluginBosUrl(input.source);\n let production = input.production ?? input.source;\n let integrity: string | undefined;\n let version: string | undefined;\n let name: string | undefined;\n\n if (pluginRef) {\n try {\n const entry = await fetchPluginFromRegistry(pluginRef.accountId, pluginRef.pluginName);\n if (!entry) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Plugin not found in registry: bos://${pluginRef.accountId}/plugins/${pluginRef.pluginName}`,\n };\n }\n\n const manifest = entry.manifest;\n if (\n manifest.schemaVersion !== 1 ||\n manifest.kind !== \"every-plugin/manifest\" ||\n !manifest.plugin?.name ||\n !manifest.plugin?.version ||\n !manifest.runtime?.remoteEntry\n ) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Invalid plugin manifest for bos://${pluginRef.accountId}/plugins/${pluginRef.pluginName}`,\n };\n }\n\n production = entry.metadata.cdnUrl || input.production || input.source;\n name = manifest.plugin.name;\n version = manifest.plugin.version;\n } catch (error) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Failed to resolve plugin from registry: ${error instanceof Error ? error.message : error}`,\n };\n }\n }\n\n if (!input.source.startsWith(\"local:\") && !pluginRef && production.startsWith(\"https://\")) {\n try {\n const manifest = await fetchRemotePluginManifest(production);\n if (manifest) {\n name = manifest.plugin.name;\n version = manifest.plugin.version;\n }\n } catch {\n console.warn(`[plugin add] Could not fetch manifest from ${production}`);\n }\n }\n\n if (!input.source.startsWith(\"local:\") && production.startsWith(\"https://\")) {\n try {\n const computed = await computeSriHashForUrl(production);\n if (computed) integrity = computed;\n } catch {\n console.warn(`[plugin add] Could not compute integrity for ${production}`);\n }\n }\n\n const key = sanitizePluginKey(\n input.as ?? (pluginRef ? pluginRef.pluginName : defaultPluginKey(input.source)),\n );\n const existing = deps.bosConfig.plugins?.[key];\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n\n nextPlugins[key] = input.source.startsWith(\"local:\")\n ? {\n ...(existing ?? {}),\n development: input.source,\n production: input.production ?? existing?.production,\n }\n : {\n ...(existing ?? {}),\n production,\n ...(integrity ? { integrity } : {}),\n ...(name ? { name } : {}),\n ...(version ? { version } : {}),\n };\n\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: nextPlugins,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"added\" as const,\n key,\n development: deps.bosConfig.plugins?.[key]?.development,\n production: deps.bosConfig.plugins?.[key]?.production,\n integrity,\n version,\n };\n }),\n\n pluginRemove: builder.pluginRemove.handler(\n async ({ input }: { input: PluginRemoveOptions }) => {\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 refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"removed\" as const,\n key: input.key,\n };\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(\n async ({ input }: { input: PluginPublishOptions }) => {\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 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 (attachment.production) {\n manifest = await fetchRemotePluginManifest(attachment.production);\n if (manifest) {\n publishedUrl = attachment.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 deps.bosConfig = {\n ...deps.bosConfig,\n plugins: {\n ...(deps.bosConfig.plugins ?? {}),\n [input.key]: {\n ...(deps.bosConfig.plugins?.[input.key] ?? {}),\n production: publishedUrl,\n ...(integrity ? { integrity } : {}),\n ...(manifest?.plugin.name ? { name: manifest.plugin.name } : {}),\n ...(version ? { version } : {}),\n },\n },\n };\n await saveBosConfig(deps.configDir, deps.bosConfig);\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\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 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 refreshApiContractBridge(deps.configDir);\n }\n\n return {\n status: \"published\" as const,\n key: input.key,\n path: localPath,\n script,\n production: publishedUrl ?? attachment.production,\n integrity: integrity ?? undefined,\n version: version ?? undefined,\n };\n },\n ),\n\n dev: builder.dev.handler(async ({ input }: { input: DevOptions }) => {\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 as string, \"local\")\n : \"remote\";\n const uiSource: SourceMode = localPackages.includes(\"ui\")\n ? parseSourceMode(input.ui as string, \"local\")\n : \"remote\";\n const apiSource: SourceMode = localPackages.includes(\"api\")\n ? parseSourceMode(input.api as string, \"local\")\n : \"remote\";\n const authSource: SourceMode = localPackages.includes(\"auth\")\n ? parseSourceMode(input.auth as string, \"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 });\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 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 await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\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 }: { input: StartOptions }) => {\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 // ── 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 await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\n\n const stagingEnvVars: Record<string, string> = isStaging\n ? { GATEWAY_DOMAIN: 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 }: { input: BuildOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\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: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n\n await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\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 }: { input: PublishOptions }) => {\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 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 payload = JSON.stringify({\n [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishConfig),\n });\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 }: { input: KeyPublishOptions }) => {\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 }: { input: InitOptions }) => {\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 : [\"_template\"];\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, ref] of Object.entries(parentConfig.plugins)) {\n if (ref.routes && ref.routes.length > 0) {\n pluginRoutes[key] = ref.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 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 }: { input: SyncOptions }) => {\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 return await syncTemplate(projectDir, input);\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 }: { input: UpgradeOptions }) => {\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 }: { input: TypesGenOptions }) => {\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 return {\n status: \"success\" as const,\n generated: [\n \"ui/src/api-contract.gen.ts\",\n \"ui/src/auth-types.gen.ts\",\n \"api/src/plugins-client.gen.ts\",\n ],\n fetched,\n skipped,\n failed: [],\n source: refreshed.runtime.api.source,\n };\n }\n\n const result = await syncApiContractBridge({\n configDir: projectDir,\n runtimeConfig: refreshed.runtime,\n apiBaseUrl: refreshed.runtime.api.url,\n });\n\n const generated = [\"ui/src/api-contract.gen.ts\", \"api/src/plugins-client.gen.ts\"];\n if (\n refreshed.runtime.auth &&\n (refreshed.runtime.auth.source !== \"local\" || refreshed.runtime.auth.localPath)\n ) {\n generated.push(\"ui/src/auth-types.gen.ts\");\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched: result.source === \"remote\" ? [refreshed.runtime.api.url] : [],\n skipped: result.source === \"local\" ? [\"api (local)\"] : [],\n failed: [],\n source: result.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.cjs","names":["resolveLocalDevelopmentPath","loadConfig","syncApiContractBridge","run","fetchBosConfigFromFastKv","syncAndGenerateSharedUi","z","bosContract","Effect","getProjectRoot","parsePluginBosUrl","fetchPluginFromRegistry","fetchRemotePluginManifest","computeSriHashForUrl","getNetworkIdForAccount","ensureNearCli","executeTransaction","getRegistryNamespaceForNetwork","detectLocalPackages","getHostDevelopmentPort","prepareDevelopmentRuntimeConfig","buildRuntimeConfig","buildServiceDescriptorMap","buildDescription","buildRuntimePluginsForConfig","findConfigPath","buildRegistryConfigUrl","colors","buildRegistryConfigUrlForNetwork","getRegistryNamespaceForAccount","addFunctionCallAccessKey","promptInitOptions","fetchParentConfig","resolveSourceDir","readTemplatekeep","p","copyFilteredFiles","personalizeConfig","writeInitSnapshot","runBunInstall","runTypesGen","generateDatabaseMigrations","syncTemplate","upgradeTemplate","getStatus"],"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} from \"./config\";\nimport {\n type BosConfigResult,\n type BuildOptions,\n bosContract,\n type DevOptions,\n type InitOptions,\n type KeyPublishOptions,\n type PluginAddOptions,\n type PluginListResult,\n type PluginPublishOptions,\n type PluginRemoveOptions,\n type PublishOptions,\n type StartOptions,\n type SyncOptions,\n type TypesGenOptions,\n type UpgradeOptions,\n} from \"./contract\";\nimport { devApp, startApp } from \"./dev-session\";\nimport {\n buildRegistryConfigUrl,\n buildRegistryConfigUrlForNetwork,\n fetchBosConfigFromFastKv,\n fetchPluginFromRegistry,\n fetchRemotePluginManifest,\n getRegistryNamespaceForAccount,\n getRegistryNamespaceForNetwork,\n type PluginManifest,\n parsePluginBosUrl,\n} from \"./fastkv\";\nimport { computeSriHashForUrl } from \"./integrity\";\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 type { BosConfig, RuntimeConfig, SourceMode } from \"./types\";\nimport { run } from \"./utils/run\";\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 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(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 source = attachment.development ?? attachment.production;\n if (!source?.startsWith(\"local:\")) {\n return null;\n }\n\n return join(configDir, source.slice(\"local:\".length));\n}\n\nasync function saveBosConfig(configDir: string, config: BosConfig): Promise<void> {\n const filePath = join(configDir, \"bos.config.json\");\n const next = `${JSON.stringify(config, null, 2)}\\n`;\n try {\n if (readFileSync(filePath, \"utf8\") === next) return;\n } catch {\n // file does not exist yet\n }\n\n writeFileSync(filePath, next);\n}\n\nfunction listPluginAttachments(config: BosConfig | null) {\n return (Object.entries(config?.plugins ?? {}) as Array<[string, PluginAttachmentConfig]>)\n .map(([key, attachment]) => ({\n key,\n development: attachment.development,\n production: attachment.production,\n localPath: attachment.development?.startsWith(\"local:\")\n ? attachment.development.slice(\"local:\".length)\n : undefined,\n source: attachment.development?.startsWith(\"local:\")\n ? (\"local\" as const)\n : (\"remote\" as const),\n integrity: attachment.integrity,\n version: attachment.version,\n name: attachment.name,\n }))\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nasync function refreshApiContractBridge(\n configDir: string,\n env: \"development\" | \"production\" = \"development\",\n): Promise<void> {\n const refreshed = await loadConfig({ cwd: configDir, env });\n if (!refreshed) return;\n\n await syncApiContractBridge({\n configDir,\n runtimeConfig: refreshed.runtime,\n apiBaseUrl: refreshed.runtime.api.url,\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 });\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: any) =>\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: BosDeps, builder: any) => ({\n config: builder.config.handler(async () => buildConfigResult(deps.bosConfig)),\n\n pluginAdd: builder.pluginAdd.handler(async ({ input }: { input: PluginAddOptions }) => {\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 pluginRef = parsePluginBosUrl(input.source);\n let production = input.production ?? input.source;\n let integrity: string | undefined;\n let version: string | undefined;\n let name: string | undefined;\n\n if (pluginRef) {\n try {\n const entry = await fetchPluginFromRegistry(pluginRef.accountId, pluginRef.pluginName);\n if (!entry) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Plugin not found in registry: bos://${pluginRef.accountId}/plugins/${pluginRef.pluginName}`,\n };\n }\n\n const manifest = entry.manifest;\n if (\n manifest.schemaVersion !== 1 ||\n manifest.kind !== \"every-plugin/manifest\" ||\n !manifest.plugin?.name ||\n !manifest.plugin?.version ||\n !manifest.runtime?.remoteEntry\n ) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Invalid plugin manifest for bos://${pluginRef.accountId}/plugins/${pluginRef.pluginName}`,\n };\n }\n\n production = entry.metadata.cdnUrl || input.production || input.source;\n name = manifest.plugin.name;\n version = manifest.plugin.version;\n } catch (error) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Failed to resolve plugin from registry: ${error instanceof Error ? error.message : error}`,\n };\n }\n }\n\n if (!input.source.startsWith(\"local:\") && !pluginRef && production.startsWith(\"https://\")) {\n try {\n const manifest = await fetchRemotePluginManifest(production);\n if (manifest) {\n name = manifest.plugin.name;\n version = manifest.plugin.version;\n }\n } catch {\n console.warn(`[plugin add] Could not fetch manifest from ${production}`);\n }\n }\n\n if (!input.source.startsWith(\"local:\") && production.startsWith(\"https://\")) {\n try {\n const computed = await computeSriHashForUrl(production);\n if (computed) integrity = computed;\n } catch {\n console.warn(`[plugin add] Could not compute integrity for ${production}`);\n }\n }\n\n const key = sanitizePluginKey(\n input.as ?? (pluginRef ? pluginRef.pluginName : defaultPluginKey(input.source)),\n );\n const existing = deps.bosConfig.plugins?.[key];\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n\n nextPlugins[key] = input.source.startsWith(\"local:\")\n ? {\n ...(existing ?? {}),\n development: input.source,\n production: input.production ?? existing?.production,\n }\n : {\n ...(existing ?? {}),\n production,\n ...(integrity ? { integrity } : {}),\n ...(name ? { name } : {}),\n ...(version ? { version } : {}),\n };\n\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: nextPlugins,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"added\" as const,\n key,\n development: deps.bosConfig.plugins?.[key]?.development,\n production: deps.bosConfig.plugins?.[key]?.production,\n integrity,\n version,\n };\n }),\n\n pluginRemove: builder.pluginRemove.handler(\n async ({ input }: { input: PluginRemoveOptions }) => {\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 refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"removed\" as const,\n key: input.key,\n };\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(\n async ({ input }: { input: PluginPublishOptions }) => {\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 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 (attachment.production) {\n manifest = await fetchRemotePluginManifest(attachment.production);\n if (manifest) {\n publishedUrl = attachment.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 deps.bosConfig = {\n ...deps.bosConfig,\n plugins: {\n ...(deps.bosConfig.plugins ?? {}),\n [input.key]: {\n ...(deps.bosConfig.plugins?.[input.key] ?? {}),\n production: publishedUrl,\n ...(integrity ? { integrity } : {}),\n ...(manifest?.plugin.name ? { name: manifest.plugin.name } : {}),\n ...(version ? { version } : {}),\n },\n },\n };\n await saveBosConfig(deps.configDir, deps.bosConfig);\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\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 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 refreshApiContractBridge(deps.configDir);\n }\n\n return {\n status: \"published\" as const,\n key: input.key,\n path: localPath,\n script,\n production: publishedUrl ?? attachment.production,\n integrity: integrity ?? undefined,\n version: version ?? undefined,\n };\n },\n ),\n\n dev: builder.dev.handler(async ({ input }: { input: DevOptions }) => {\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 as string, \"local\")\n : \"remote\";\n const uiSource: SourceMode = localPackages.includes(\"ui\")\n ? parseSourceMode(input.ui as string, \"local\")\n : \"remote\";\n const apiSource: SourceMode = localPackages.includes(\"api\")\n ? parseSourceMode(input.api as string, \"local\")\n : \"remote\";\n const authSource: SourceMode = localPackages.includes(\"auth\")\n ? parseSourceMode(input.auth as string, \"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 });\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 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 await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\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 }: { input: StartOptions }) => {\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 // ── 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 await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\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 }: { input: BuildOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\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: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n\n await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\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 }: { input: PublishOptions }) => {\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 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 payload = JSON.stringify({\n [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishConfig),\n });\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 }: { input: KeyPublishOptions }) => {\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 }: { input: InitOptions }) => {\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 : [\"_template\"];\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, ref] of Object.entries(parentConfig.plugins)) {\n if (ref.routes && ref.routes.length > 0) {\n pluginRoutes[key] = ref.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 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 }: { input: SyncOptions }) => {\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 return await syncTemplate(projectDir, input);\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 }: { input: UpgradeOptions }) => {\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 }: { input: TypesGenOptions }) => {\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 return {\n status: \"success\" as const,\n generated: [\n \"ui/src/api-contract.gen.ts\",\n \"ui/src/auth-types.gen.ts\",\n \"api/src/plugins-client.gen.ts\",\n ],\n fetched,\n skipped,\n failed: [],\n source: refreshed.runtime.api.source,\n };\n }\n\n const result = await syncApiContractBridge({\n configDir: projectDir,\n runtimeConfig: refreshed.runtime,\n apiBaseUrl: refreshed.runtime.api.url,\n });\n\n const generated = [\"ui/src/api-contract.gen.ts\", \"api/src/plugins-client.gen.ts\"];\n if (\n refreshed.runtime.auth &&\n (refreshed.runtime.auth.source !== \"local\" || refreshed.runtime.auth.localPath)\n ) {\n generated.push(\"ui/src/auth-types.gen.ts\");\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched: result.source === \"remote\" ? [refreshed.runtime.api.url] : [],\n skipped: result.source === \"local\" ? [\"api (local)\"] : [],\n failed: [],\n source: result.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/plugin.d.cts CHANGED
@@ -27,8 +27,8 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
27
27
  interactive: z.ZodOptional<z.ZodBoolean>;
28
28
  }, z.core.$strip>, z.ZodObject<{
29
29
  status: z.ZodEnum<{
30
- error: "error";
31
30
  started: "started";
31
+ error: "error";
32
32
  }>;
33
33
  description: z.ZodString;
34
34
  processes: z.ZodArray<z.ZodString>;
@@ -328,8 +328,8 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
328
328
  }, z.core.$strip>, _$_orpc_contract0.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
329
329
  typesGen: _$_orpc_contract0.ContractProcedure<z.ZodObject<{
330
330
  env: z.ZodOptional<z.ZodEnum<{
331
- production: "production";
332
331
  development: "development";
332
+ production: "production";
333
333
  }>>;
334
334
  dryRun: z.ZodDefault<z.ZodBoolean>;
335
335
  }, z.core.$strip>, z.ZodObject<{
@@ -415,7 +415,7 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
415
415
  }> | undefined;
416
416
  } | null;
417
417
  runtimeConfig: {
418
- env: "production" | "development";
418
+ env: "development" | "production";
419
419
  account: string;
420
420
  networkId: "testnet" | "mainnet";
421
421
  host: {
package/dist/plugin.d.mts CHANGED
@@ -27,8 +27,8 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
27
27
  interactive: z.ZodOptional<z.ZodBoolean>;
28
28
  }, z.core.$strip>, z.ZodObject<{
29
29
  status: z.ZodEnum<{
30
- error: "error";
31
30
  started: "started";
31
+ error: "error";
32
32
  }>;
33
33
  description: z.ZodString;
34
34
  processes: z.ZodArray<z.ZodString>;
@@ -328,8 +328,8 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
328
328
  }, z.core.$strip>, _$_orpc_contract0.MergedErrorMap<Record<never, never>, Record<never, never>>, Record<never, never>>;
329
329
  typesGen: _$_orpc_contract0.ContractProcedure<z.ZodObject<{
330
330
  env: z.ZodOptional<z.ZodEnum<{
331
- production: "production";
332
331
  development: "development";
332
+ production: "production";
333
333
  }>>;
334
334
  dryRun: z.ZodDefault<z.ZodBoolean>;
335
335
  }, z.core.$strip>, z.ZodObject<{
@@ -415,7 +415,7 @@ declare const _default: _$every_plugin0.LoadedPluginWithBinding<{
415
415
  }> | undefined;
416
416
  } | null;
417
417
  runtimeConfig: {
418
- env: "production" | "development";
418
+ env: "development" | "production";
419
419
  account: string;
420
420
  networkId: "testnet" | "mainnet";
421
421
  host: {
package/dist/plugin.mjs CHANGED
@@ -637,7 +637,7 @@ var plugin_default = createPlugin({
637
637
  runtimeConfig,
638
638
  apiBaseUrl: runtimeConfig.api.url
639
639
  });
640
- const stagingEnvVars = isStaging ? { GATEWAY_DOMAIN: config.staging?.domain ?? config.domain ?? "" } : {};
640
+ const stagingEnvVars = isStaging ? { BOS_GATEWAY: config.staging?.domain ?? config.domain ?? "" } : {};
641
641
  const configSource = remoteConfig ? `bos://${account}/${domain}` : findConfigPath() ?? "bos.config.json";
642
642
  const configSourceHttp = remoteConfig && account && domain ? buildRegistryConfigUrl(account, domain) : void 0;
643
643
  const summaryLines = ["", ` ${colors.dim("Config Source:")} ${configSource}`];
@@ -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} from \"./config\";\nimport {\n type BosConfigResult,\n type BuildOptions,\n bosContract,\n type DevOptions,\n type InitOptions,\n type KeyPublishOptions,\n type PluginAddOptions,\n type PluginListResult,\n type PluginPublishOptions,\n type PluginRemoveOptions,\n type PublishOptions,\n type StartOptions,\n type SyncOptions,\n type TypesGenOptions,\n type UpgradeOptions,\n} from \"./contract\";\nimport { devApp, startApp } from \"./dev-session\";\nimport {\n buildRegistryConfigUrl,\n buildRegistryConfigUrlForNetwork,\n fetchBosConfigFromFastKv,\n fetchPluginFromRegistry,\n fetchRemotePluginManifest,\n getRegistryNamespaceForAccount,\n getRegistryNamespaceForNetwork,\n type PluginManifest,\n parsePluginBosUrl,\n} from \"./fastkv\";\nimport { computeSriHashForUrl } from \"./integrity\";\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 type { BosConfig, RuntimeConfig, SourceMode } from \"./types\";\nimport { run } from \"./utils/run\";\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 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(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 source = attachment.development ?? attachment.production;\n if (!source?.startsWith(\"local:\")) {\n return null;\n }\n\n return join(configDir, source.slice(\"local:\".length));\n}\n\nasync function saveBosConfig(configDir: string, config: BosConfig): Promise<void> {\n const filePath = join(configDir, \"bos.config.json\");\n const next = `${JSON.stringify(config, null, 2)}\\n`;\n try {\n if (readFileSync(filePath, \"utf8\") === next) return;\n } catch {\n // file does not exist yet\n }\n\n writeFileSync(filePath, next);\n}\n\nfunction listPluginAttachments(config: BosConfig | null) {\n return (Object.entries(config?.plugins ?? {}) as Array<[string, PluginAttachmentConfig]>)\n .map(([key, attachment]) => ({\n key,\n development: attachment.development,\n production: attachment.production,\n localPath: attachment.development?.startsWith(\"local:\")\n ? attachment.development.slice(\"local:\".length)\n : undefined,\n source: attachment.development?.startsWith(\"local:\")\n ? (\"local\" as const)\n : (\"remote\" as const),\n integrity: attachment.integrity,\n version: attachment.version,\n name: attachment.name,\n }))\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nasync function refreshApiContractBridge(\n configDir: string,\n env: \"development\" | \"production\" = \"development\",\n): Promise<void> {\n const refreshed = await loadConfig({ cwd: configDir, env });\n if (!refreshed) return;\n\n await syncApiContractBridge({\n configDir,\n runtimeConfig: refreshed.runtime,\n apiBaseUrl: refreshed.runtime.api.url,\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 });\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: any) =>\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: BosDeps, builder: any) => ({\n config: builder.config.handler(async () => buildConfigResult(deps.bosConfig)),\n\n pluginAdd: builder.pluginAdd.handler(async ({ input }: { input: PluginAddOptions }) => {\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 pluginRef = parsePluginBosUrl(input.source);\n let production = input.production ?? input.source;\n let integrity: string | undefined;\n let version: string | undefined;\n let name: string | undefined;\n\n if (pluginRef) {\n try {\n const entry = await fetchPluginFromRegistry(pluginRef.accountId, pluginRef.pluginName);\n if (!entry) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Plugin not found in registry: bos://${pluginRef.accountId}/plugins/${pluginRef.pluginName}`,\n };\n }\n\n const manifest = entry.manifest;\n if (\n manifest.schemaVersion !== 1 ||\n manifest.kind !== \"every-plugin/manifest\" ||\n !manifest.plugin?.name ||\n !manifest.plugin?.version ||\n !manifest.runtime?.remoteEntry\n ) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Invalid plugin manifest for bos://${pluginRef.accountId}/plugins/${pluginRef.pluginName}`,\n };\n }\n\n production = entry.metadata.cdnUrl || input.production || input.source;\n name = manifest.plugin.name;\n version = manifest.plugin.version;\n } catch (error) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Failed to resolve plugin from registry: ${error instanceof Error ? error.message : error}`,\n };\n }\n }\n\n if (!input.source.startsWith(\"local:\") && !pluginRef && production.startsWith(\"https://\")) {\n try {\n const manifest = await fetchRemotePluginManifest(production);\n if (manifest) {\n name = manifest.plugin.name;\n version = manifest.plugin.version;\n }\n } catch {\n console.warn(`[plugin add] Could not fetch manifest from ${production}`);\n }\n }\n\n if (!input.source.startsWith(\"local:\") && production.startsWith(\"https://\")) {\n try {\n const computed = await computeSriHashForUrl(production);\n if (computed) integrity = computed;\n } catch {\n console.warn(`[plugin add] Could not compute integrity for ${production}`);\n }\n }\n\n const key = sanitizePluginKey(\n input.as ?? (pluginRef ? pluginRef.pluginName : defaultPluginKey(input.source)),\n );\n const existing = deps.bosConfig.plugins?.[key];\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n\n nextPlugins[key] = input.source.startsWith(\"local:\")\n ? {\n ...(existing ?? {}),\n development: input.source,\n production: input.production ?? existing?.production,\n }\n : {\n ...(existing ?? {}),\n production,\n ...(integrity ? { integrity } : {}),\n ...(name ? { name } : {}),\n ...(version ? { version } : {}),\n };\n\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: nextPlugins,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"added\" as const,\n key,\n development: deps.bosConfig.plugins?.[key]?.development,\n production: deps.bosConfig.plugins?.[key]?.production,\n integrity,\n version,\n };\n }),\n\n pluginRemove: builder.pluginRemove.handler(\n async ({ input }: { input: PluginRemoveOptions }) => {\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 refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"removed\" as const,\n key: input.key,\n };\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(\n async ({ input }: { input: PluginPublishOptions }) => {\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 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 (attachment.production) {\n manifest = await fetchRemotePluginManifest(attachment.production);\n if (manifest) {\n publishedUrl = attachment.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 deps.bosConfig = {\n ...deps.bosConfig,\n plugins: {\n ...(deps.bosConfig.plugins ?? {}),\n [input.key]: {\n ...(deps.bosConfig.plugins?.[input.key] ?? {}),\n production: publishedUrl,\n ...(integrity ? { integrity } : {}),\n ...(manifest?.plugin.name ? { name: manifest.plugin.name } : {}),\n ...(version ? { version } : {}),\n },\n },\n };\n await saveBosConfig(deps.configDir, deps.bosConfig);\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\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 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 refreshApiContractBridge(deps.configDir);\n }\n\n return {\n status: \"published\" as const,\n key: input.key,\n path: localPath,\n script,\n production: publishedUrl ?? attachment.production,\n integrity: integrity ?? undefined,\n version: version ?? undefined,\n };\n },\n ),\n\n dev: builder.dev.handler(async ({ input }: { input: DevOptions }) => {\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 as string, \"local\")\n : \"remote\";\n const uiSource: SourceMode = localPackages.includes(\"ui\")\n ? parseSourceMode(input.ui as string, \"local\")\n : \"remote\";\n const apiSource: SourceMode = localPackages.includes(\"api\")\n ? parseSourceMode(input.api as string, \"local\")\n : \"remote\";\n const authSource: SourceMode = localPackages.includes(\"auth\")\n ? parseSourceMode(input.auth as string, \"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 });\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 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 await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\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 }: { input: StartOptions }) => {\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 // ── 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 await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\n\n const stagingEnvVars: Record<string, string> = isStaging\n ? { GATEWAY_DOMAIN: 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 }: { input: BuildOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\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: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n\n await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\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 }: { input: PublishOptions }) => {\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 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 payload = JSON.stringify({\n [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishConfig),\n });\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 }: { input: KeyPublishOptions }) => {\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 }: { input: InitOptions }) => {\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 : [\"_template\"];\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, ref] of Object.entries(parentConfig.plugins)) {\n if (ref.routes && ref.routes.length > 0) {\n pluginRoutes[key] = ref.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 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 }: { input: SyncOptions }) => {\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 return await syncTemplate(projectDir, input);\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 }: { input: UpgradeOptions }) => {\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 }: { input: TypesGenOptions }) => {\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 return {\n status: \"success\" as const,\n generated: [\n \"ui/src/api-contract.gen.ts\",\n \"ui/src/auth-types.gen.ts\",\n \"api/src/plugins-client.gen.ts\",\n ],\n fetched,\n skipped,\n failed: [],\n source: refreshed.runtime.api.source,\n };\n }\n\n const result = await syncApiContractBridge({\n configDir: projectDir,\n runtimeConfig: refreshed.runtime,\n apiBaseUrl: refreshed.runtime.api.url,\n });\n\n const generated = [\"ui/src/api-contract.gen.ts\", \"api/src/plugins-client.gen.ts\"];\n if (\n refreshed.runtime.auth &&\n (refreshed.runtime.auth.source !== \"local\" || refreshed.runtime.auth.localPath)\n ) {\n generated.push(\"ui/src/auth-types.gen.ts\");\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched: result.source === \"remote\" ? [refreshed.runtime.api.url] : [],\n skipped: result.source === \"local\" ? [\"api (local)\"] : [],\n failed: [],\n source: result.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} from \"./config\";\nimport {\n type BosConfigResult,\n type BuildOptions,\n bosContract,\n type DevOptions,\n type InitOptions,\n type KeyPublishOptions,\n type PluginAddOptions,\n type PluginListResult,\n type PluginPublishOptions,\n type PluginRemoveOptions,\n type PublishOptions,\n type StartOptions,\n type SyncOptions,\n type TypesGenOptions,\n type UpgradeOptions,\n} from \"./contract\";\nimport { devApp, startApp } from \"./dev-session\";\nimport {\n buildRegistryConfigUrl,\n buildRegistryConfigUrlForNetwork,\n fetchBosConfigFromFastKv,\n fetchPluginFromRegistry,\n fetchRemotePluginManifest,\n getRegistryNamespaceForAccount,\n getRegistryNamespaceForNetwork,\n type PluginManifest,\n parsePluginBosUrl,\n} from \"./fastkv\";\nimport { computeSriHashForUrl } from \"./integrity\";\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 type { BosConfig, RuntimeConfig, SourceMode } from \"./types\";\nimport { run } from \"./utils/run\";\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 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(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 source = attachment.development ?? attachment.production;\n if (!source?.startsWith(\"local:\")) {\n return null;\n }\n\n return join(configDir, source.slice(\"local:\".length));\n}\n\nasync function saveBosConfig(configDir: string, config: BosConfig): Promise<void> {\n const filePath = join(configDir, \"bos.config.json\");\n const next = `${JSON.stringify(config, null, 2)}\\n`;\n try {\n if (readFileSync(filePath, \"utf8\") === next) return;\n } catch {\n // file does not exist yet\n }\n\n writeFileSync(filePath, next);\n}\n\nfunction listPluginAttachments(config: BosConfig | null) {\n return (Object.entries(config?.plugins ?? {}) as Array<[string, PluginAttachmentConfig]>)\n .map(([key, attachment]) => ({\n key,\n development: attachment.development,\n production: attachment.production,\n localPath: attachment.development?.startsWith(\"local:\")\n ? attachment.development.slice(\"local:\".length)\n : undefined,\n source: attachment.development?.startsWith(\"local:\")\n ? (\"local\" as const)\n : (\"remote\" as const),\n integrity: attachment.integrity,\n version: attachment.version,\n name: attachment.name,\n }))\n .sort((a, b) => a.key.localeCompare(b.key));\n}\n\nasync function refreshApiContractBridge(\n configDir: string,\n env: \"development\" | \"production\" = \"development\",\n): Promise<void> {\n const refreshed = await loadConfig({ cwd: configDir, env });\n if (!refreshed) return;\n\n await syncApiContractBridge({\n configDir,\n runtimeConfig: refreshed.runtime,\n apiBaseUrl: refreshed.runtime.api.url,\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 });\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: any) =>\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: BosDeps, builder: any) => ({\n config: builder.config.handler(async () => buildConfigResult(deps.bosConfig)),\n\n pluginAdd: builder.pluginAdd.handler(async ({ input }: { input: PluginAddOptions }) => {\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 pluginRef = parsePluginBosUrl(input.source);\n let production = input.production ?? input.source;\n let integrity: string | undefined;\n let version: string | undefined;\n let name: string | undefined;\n\n if (pluginRef) {\n try {\n const entry = await fetchPluginFromRegistry(pluginRef.accountId, pluginRef.pluginName);\n if (!entry) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Plugin not found in registry: bos://${pluginRef.accountId}/plugins/${pluginRef.pluginName}`,\n };\n }\n\n const manifest = entry.manifest;\n if (\n manifest.schemaVersion !== 1 ||\n manifest.kind !== \"every-plugin/manifest\" ||\n !manifest.plugin?.name ||\n !manifest.plugin?.version ||\n !manifest.runtime?.remoteEntry\n ) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Invalid plugin manifest for bos://${pluginRef.accountId}/plugins/${pluginRef.pluginName}`,\n };\n }\n\n production = entry.metadata.cdnUrl || input.production || input.source;\n name = manifest.plugin.name;\n version = manifest.plugin.version;\n } catch (error) {\n return {\n status: \"error\" as const,\n key: \"\",\n error: `Failed to resolve plugin from registry: ${error instanceof Error ? error.message : error}`,\n };\n }\n }\n\n if (!input.source.startsWith(\"local:\") && !pluginRef && production.startsWith(\"https://\")) {\n try {\n const manifest = await fetchRemotePluginManifest(production);\n if (manifest) {\n name = manifest.plugin.name;\n version = manifest.plugin.version;\n }\n } catch {\n console.warn(`[plugin add] Could not fetch manifest from ${production}`);\n }\n }\n\n if (!input.source.startsWith(\"local:\") && production.startsWith(\"https://\")) {\n try {\n const computed = await computeSriHashForUrl(production);\n if (computed) integrity = computed;\n } catch {\n console.warn(`[plugin add] Could not compute integrity for ${production}`);\n }\n }\n\n const key = sanitizePluginKey(\n input.as ?? (pluginRef ? pluginRef.pluginName : defaultPluginKey(input.source)),\n );\n const existing = deps.bosConfig.plugins?.[key];\n const nextPlugins = { ...(deps.bosConfig.plugins ?? {}) };\n\n nextPlugins[key] = input.source.startsWith(\"local:\")\n ? {\n ...(existing ?? {}),\n development: input.source,\n production: input.production ?? existing?.production,\n }\n : {\n ...(existing ?? {}),\n production,\n ...(integrity ? { integrity } : {}),\n ...(name ? { name } : {}),\n ...(version ? { version } : {}),\n };\n\n deps.bosConfig = {\n ...deps.bosConfig,\n plugins: nextPlugins,\n };\n\n await saveBosConfig(deps.configDir, deps.bosConfig);\n await refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"added\" as const,\n key,\n development: deps.bosConfig.plugins?.[key]?.development,\n production: deps.bosConfig.plugins?.[key]?.production,\n integrity,\n version,\n };\n }),\n\n pluginRemove: builder.pluginRemove.handler(\n async ({ input }: { input: PluginRemoveOptions }) => {\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 refreshApiContractBridge(deps.configDir);\n\n return {\n status: \"removed\" as const,\n key: input.key,\n };\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(\n async ({ input }: { input: PluginPublishOptions }) => {\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 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 (attachment.production) {\n manifest = await fetchRemotePluginManifest(attachment.production);\n if (manifest) {\n publishedUrl = attachment.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 deps.bosConfig = {\n ...deps.bosConfig,\n plugins: {\n ...(deps.bosConfig.plugins ?? {}),\n [input.key]: {\n ...(deps.bosConfig.plugins?.[input.key] ?? {}),\n production: publishedUrl,\n ...(integrity ? { integrity } : {}),\n ...(manifest?.plugin.name ? { name: manifest.plugin.name } : {}),\n ...(version ? { version } : {}),\n },\n },\n };\n await saveBosConfig(deps.configDir, deps.bosConfig);\n\n const account = deps.bosConfig.account;\n const network = getNetworkIdForAccount(account);\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 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 refreshApiContractBridge(deps.configDir);\n }\n\n return {\n status: \"published\" as const,\n key: input.key,\n path: localPath,\n script,\n production: publishedUrl ?? attachment.production,\n integrity: integrity ?? undefined,\n version: version ?? undefined,\n };\n },\n ),\n\n dev: builder.dev.handler(async ({ input }: { input: DevOptions }) => {\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 as string, \"local\")\n : \"remote\";\n const uiSource: SourceMode = localPackages.includes(\"ui\")\n ? parseSourceMode(input.ui as string, \"local\")\n : \"remote\";\n const apiSource: SourceMode = localPackages.includes(\"api\")\n ? parseSourceMode(input.api as string, \"local\")\n : \"remote\";\n const authSource: SourceMode = localPackages.includes(\"auth\")\n ? parseSourceMode(input.auth as string, \"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 });\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 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 await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\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 }: { input: StartOptions }) => {\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 // ── 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 await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig: runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\n });\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 }: { input: BuildOptions }) => {\n if (!deps.bosConfig) {\n return {\n status: \"error\" as const,\n built: [],\n skipped: [],\n };\n }\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: \"development\",\n plugins: deps.runtimeConfig?.plugins,\n });\n\n await syncApiContractBridge({\n configDir: deps.configDir,\n runtimeConfig,\n apiBaseUrl: runtimeConfig.api.url,\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 }: { input: PublishOptions }) => {\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 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 payload = JSON.stringify({\n [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishConfig),\n });\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 }: { input: KeyPublishOptions }) => {\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 }: { input: InitOptions }) => {\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 : [\"_template\"];\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, ref] of Object.entries(parentConfig.plugins)) {\n if (ref.routes && ref.routes.length > 0) {\n pluginRoutes[key] = ref.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 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 }: { input: SyncOptions }) => {\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 return await syncTemplate(projectDir, input);\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 }: { input: UpgradeOptions }) => {\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 }: { input: TypesGenOptions }) => {\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 return {\n status: \"success\" as const,\n generated: [\n \"ui/src/api-contract.gen.ts\",\n \"ui/src/auth-types.gen.ts\",\n \"api/src/plugins-client.gen.ts\",\n ],\n fetched,\n skipped,\n failed: [],\n source: refreshed.runtime.api.source,\n };\n }\n\n const result = await syncApiContractBridge({\n configDir: projectDir,\n runtimeConfig: refreshed.runtime,\n apiBaseUrl: refreshed.runtime.api.url,\n });\n\n const generated = [\"ui/src/api-contract.gen.ts\", \"api/src/plugins-client.gen.ts\"];\n if (\n refreshed.runtime.auth &&\n (refreshed.runtime.auth.source !== \"local\" || refreshed.runtime.auth.localPath)\n ) {\n generated.push(\"ui/src/auth-types.gen.ts\");\n }\n\n return {\n status: \"success\" as const,\n generated,\n fetched: result.source === \"remote\" ? [refreshed.runtime.api.url] : [],\n skipped: result.source === \"local\" ? [\"api (local)\"] : [],\n failed: [],\n source: result.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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"}
@@ -26,7 +26,7 @@ interface ServiceDescriptor {
26
26
  declare const ServiceDescriptorMap_base: Context.TagClass<ServiceDescriptorMap, "ServiceDescriptorMap", Map<string, ServiceDescriptor>>;
27
27
  declare class ServiceDescriptorMap extends ServiceDescriptorMap_base {}
28
28
  declare const DevRuntimeConfig_base: Context.TagClass<DevRuntimeConfig, "DevRuntimeConfig", {
29
- env: "production" | "development";
29
+ env: "development" | "production";
30
30
  account: string;
31
31
  networkId: "testnet" | "mainnet";
32
32
  host: {
@@ -26,7 +26,7 @@ interface ServiceDescriptor {
26
26
  declare const ServiceDescriptorMap_base: Context.TagClass<ServiceDescriptorMap, "ServiceDescriptorMap", Map<string, ServiceDescriptor>>;
27
27
  declare class ServiceDescriptorMap extends ServiceDescriptorMap_base {}
28
28
  declare const DevRuntimeConfig_base: Context.TagClass<DevRuntimeConfig, "DevRuntimeConfig", {
29
- env: "production" | "development";
29
+ env: "development" | "production";
30
30
  account: string;
31
31
  networkId: "testnet" | "mainnet";
32
32
  host: {
package/dist/types.d.cts CHANGED
@@ -192,8 +192,8 @@ declare const BosConfigSchema: z.ZodObject<{
192
192
  type BosConfig = z.infer<typeof BosConfigSchema>;
193
193
  declare const RuntimeConfigSchema: z.ZodObject<{
194
194
  env: z.ZodEnum<{
195
- production: "production";
196
195
  development: "development";
196
+ production: "production";
197
197
  }>;
198
198
  account: z.ZodString;
199
199
  domain: z.ZodOptional<z.ZodString>;
@@ -299,8 +299,8 @@ type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;
299
299
  declare const ClientRuntimeConfigSchema: z.ZodObject<{
300
300
  cspNonce: z.ZodOptional<z.ZodString>;
301
301
  env: z.ZodEnum<{
302
- production: "production";
303
302
  development: "development";
303
+ production: "production";
304
304
  }>;
305
305
  account: z.ZodString;
306
306
  networkId: z.ZodEnum<{
package/dist/types.d.mts CHANGED
@@ -192,8 +192,8 @@ declare const BosConfigSchema: z.ZodObject<{
192
192
  type BosConfig = z.infer<typeof BosConfigSchema>;
193
193
  declare const RuntimeConfigSchema: z.ZodObject<{
194
194
  env: z.ZodEnum<{
195
- production: "production";
196
195
  development: "development";
196
+ production: "production";
197
197
  }>;
198
198
  account: z.ZodString;
199
199
  domain: z.ZodOptional<z.ZodString>;
@@ -299,8 +299,8 @@ type RuntimeConfig = z.infer<typeof RuntimeConfigSchema>;
299
299
  declare const ClientRuntimeConfigSchema: z.ZodObject<{
300
300
  cspNonce: z.ZodOptional<z.ZodString>;
301
301
  env: z.ZodEnum<{
302
- production: "production";
303
302
  development: "development";
303
+ production: "production";
304
304
  }>;
305
305
  account: z.ZodString;
306
306
  networkId: z.ZodEnum<{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "everything-dev",
3
- "version": "1.11.3",
3
+ "version": "1.11.5",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -155,7 +155,7 @@
155
155
  "@orpc/zod": "^1.13.4",
156
156
  "chalk": "^5.6.2",
157
157
  "effect": "^3.21.0",
158
- "every-plugin": "^2.5.6",
158
+ "every-plugin": "^2.5.7",
159
159
  "glob": "^13.0.6",
160
160
  "gradient-string": "^3.0.0",
161
161
  "hono": "^4.7.11",
@@ -187,6 +187,7 @@
187
187
  "@types/react": "^19.2.7",
188
188
  "@types/react-dom": "^19.2.3",
189
189
  "@types/tar": "^7.0.0",
190
+ "react-devtools-core": "^7.0.1",
190
191
  "tsdown": "^0.21.7",
191
192
  "typescript": "^5.7.2",
192
193
  "vite-tsconfig-paths": "^5.1.4",
package/src/plugin.ts CHANGED
@@ -1009,7 +1009,7 @@ export default createPlugin({
1009
1009
  });
1010
1010
 
1011
1011
  const stagingEnvVars: Record<string, string> = isStaging
1012
- ? { GATEWAY_DOMAIN: config.staging?.domain ?? config.domain ?? "" }
1012
+ ? { BOS_GATEWAY: config.staging?.domain ?? config.domain ?? "" }
1013
1013
  : {};
1014
1014
 
1015
1015
  const configSource = remoteConfig