everything-dev 1.35.2 → 1.35.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/infra.cjs +45 -8
- package/dist/cli/infra.cjs.map +1 -1
- package/dist/cli/infra.mjs +45 -8
- package/dist/cli/infra.mjs.map +1 -1
- package/dist/cli/init.cjs +2 -1
- package/dist/cli/init.cjs.map +1 -1
- package/dist/cli/init.mjs +2 -1
- package/dist/cli/init.mjs.map +1 -1
- package/dist/contract.d.cts +18 -18
- package/dist/contract.d.mts +18 -18
- package/dist/plugin.cjs +9 -11
- package/dist/plugin.cjs.map +1 -1
- package/dist/plugin.d.cts +10 -10
- package/dist/plugin.d.cts.map +1 -1
- package/dist/plugin.d.mts +10 -10
- package/dist/plugin.d.mts.map +1 -1
- package/dist/plugin.mjs +9 -11
- package/dist/plugin.mjs.map +1 -1
- package/dist/types.d.cts +2 -2
- package/dist/types.d.mts +2 -2
- package/package.json +1 -1
- package/skills/dev-workflow/SKILL.md +3 -3
- package/skills/publish-sync/SKILL.md +1 -1
- package/skills/super-app/SKILL.md +2 -2
package/dist/cli/init.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.mjs","names":[],"sources":["../../src/cli/init.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n createWriteStream,\n existsSync,\n lstatSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport { pipeline } from \"node:stream/promises\";\nimport { execa } from \"execa\";\nimport { glob } from \"glob\";\nimport type { OverrideSection } from \"../contract\";\nimport { fetchBosConfigFromFastKv } from \"../fastkv\";\nimport {\n loadManifestNormalizationSpec,\n normalizePackageManifestsInTree,\n} from \"../internal/manifest-normalizer\";\nimport { resolveExtendsRef } from \"../merge\";\nimport type { BosConfig, BosConfigInput } from \"../types\";\nimport { saveBosConfig } from \"../utils/save-config\";\nimport { writeSnapshot } from \"./snapshot\";\n\nconst require = createRequire(import.meta.url);\n\nexport const INIT_ROOT_PATTERNS = [\n \"bos.config.json\",\n \"package.json\",\n \".env.example\",\n \".gitignore\",\n \"biome.json\",\n \"bunfig.toml\",\n \"Dockerfile\",\n \"railway.json\",\n \"railway.toml\",\n \"AGENTS.md\",\n \".changeset/config.json\",\n \".changeset/README.md\",\n \"README.md\",\n \"CONTRIBUTING.md\",\n \".github/templates/**\",\n] as const;\n\nconst OVERRIDE_WORKSPACE_MAP: Record<OverrideSection, string[]> = {\n ui: [\"ui\"],\n api: [\"api\"],\n host: [\"host\"],\n plugins: [],\n};\n\ninterface SourceResult {\n sourceDir: string;\n parentConfig: BosConfig;\n cleanup: () => Promise<void>;\n}\n\nexport interface CatalogChainSource {\n catalog: Record<string, string>;\n repository?: string;\n extendsChain: string[];\n}\n\nfunction getExtendsRef(config: Record<string, unknown>): string | undefined {\n if (typeof config.extends === \"string\") {\n return config.extends;\n }\n\n if (config.extends && typeof config.extends === \"object\") {\n return resolveExtendsRef(config.extends as Record<string, string>, \"production\");\n }\n\n return undefined;\n}\n\nfunction parseBosRef(ref: string): { account: string; gateway: string } | null {\n const match = ref.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n if (!match?.[1] || !match[2]) return null;\n return { account: match[1], gateway: match[2] };\n}\n\nfunction readWorkspaceCatalog(sourceDir: string): Record<string, string> {\n const pkgPath = join(sourceDir, \"package.json\");\n if (!existsSync(pkgPath)) {\n return {};\n }\n\n const pkg = readJsonFile<{ workspaces?: { catalog?: Record<string, string> } }>(pkgPath);\n return { ...(pkg.workspaces?.catalog ?? {}) };\n}\n\nexport async function resolveCatalogChainSource(opts: {\n extendsAccount: string;\n extendsGateway: string;\n sourceDir?: string;\n}): Promise<CatalogChainSource> {\n const catalogs: Record<string, string>[] = [];\n const cleanups: Array<() => Promise<void>> = [];\n const extendsChain: string[] = [];\n const visited = new Set<string>();\n let repository: string | undefined;\n let currentRef = `bos://${opts.extendsAccount}/${opts.extendsGateway}`;\n let sourceDir = opts.sourceDir ? resolve(opts.sourceDir) : undefined;\n let configPath = sourceDir ? join(sourceDir, \"bos.config.json\") : undefined;\n\n try {\n while (true) {\n if (visited.has(currentRef)) {\n throw new Error(`Circular extends detected while resolving catalog source: ${currentRef}`);\n }\n\n visited.add(currentRef);\n extendsChain.push(currentRef);\n\n let config: Record<string, unknown>;\n let currentSourceDir = sourceDir;\n let cleanup: () => Promise<void> = async () => {};\n\n if (configPath) {\n config = readJsonFile<Record<string, unknown>>(configPath);\n currentSourceDir = dirname(configPath);\n } else {\n const parsed = parseBosRef(currentRef);\n if (!parsed) {\n break;\n }\n const sourceResult = await resolveSourceDir({\n extendsAccount: parsed.account,\n extendsGateway: parsed.gateway,\n });\n config = sourceResult.parentConfig as Record<string, unknown>;\n currentSourceDir = sourceResult.sourceDir || undefined;\n cleanup = sourceResult.cleanup;\n }\n\n cleanups.push(cleanup);\n catalogs.push(currentSourceDir ? readWorkspaceCatalog(currentSourceDir) : {});\n\n if (typeof config.repository === \"string\") {\n repository = config.repository;\n }\n\n const nextExtendsRef = getExtendsRef(config);\n if (!nextExtendsRef) {\n break;\n }\n\n if (nextExtendsRef.startsWith(\"bos://\")) {\n currentRef = nextExtendsRef;\n sourceDir = undefined;\n configPath = undefined;\n continue;\n }\n\n if (!currentSourceDir) {\n break;\n }\n\n const nextConfigPath = resolve(currentSourceDir, nextExtendsRef);\n if (!existsSync(nextConfigPath)) {\n break;\n }\n\n currentRef = nextConfigPath;\n sourceDir = dirname(nextConfigPath);\n configPath = nextConfigPath;\n }\n } finally {\n for (const cleanup of cleanups.reverse()) {\n await cleanup();\n }\n }\n\n return {\n catalog: Object.assign({}, ...catalogs.reverse()),\n repository,\n extendsChain,\n };\n}\n\nexport async function resolveSourceDir(opts: {\n extendsAccount: string;\n extendsGateway: string;\n source?: string;\n}): Promise<SourceResult> {\n if (opts.source) {\n const sourceDir = resolve(opts.source);\n if (!existsSync(join(sourceDir, \"bos.config.json\"))) {\n throw new Error(`No bos.config.json found in source directory: ${sourceDir}`);\n }\n const parentConfig = JSON.parse(\n readFileSync(join(sourceDir, \"bos.config.json\"), \"utf-8\"),\n ) as BosConfig;\n return { sourceDir, parentConfig, cleanup: async () => {} };\n }\n\n const parentConfig = await fetchParentConfig(opts.extendsAccount, opts.extendsGateway);\n\n if (parentConfig.repository) {\n const { dir: sourceDir, cleanup } = await downloadTarball(parentConfig.repository);\n return { sourceDir, parentConfig, cleanup };\n }\n\n const chainResult = await resolveRepositoryViaExtendsChain(\n opts.extendsAccount,\n opts.extendsGateway,\n );\n if (chainResult?.repository) {\n const { dir: sourceDir, cleanup } = await downloadTarball(chainResult.repository);\n return { sourceDir, parentConfig: chainResult.config, cleanup };\n }\n\n return {\n sourceDir: \"\",\n parentConfig,\n cleanup: async () => {},\n };\n}\n\nexport function buildInitPatterns(overrides: OverrideSection[], plugins?: string[]): string[] {\n const has = (section: OverrideSection) => overrides.includes(section);\n const patterns: string[] = [...INIT_ROOT_PATTERNS];\n\n if (has(\"ui\")) patterns.push(\"ui/**\");\n if (has(\"api\")) patterns.push(\"api/**\");\n if (has(\"host\")) patterns.push(\"host/**\");\n if (has(\"plugins\")) {\n for (const plugin of plugins ?? []) {\n patterns.push(`plugins/${plugin}/**`);\n }\n }\n\n return patterns;\n}\n\nexport function sourcePathToDestinationPath(filePath: string): string {\n return filePath.startsWith(\".github/templates/\")\n ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n : filePath;\n}\n\nexport async function fetchParentConfig(\n extendsAccount: string,\n extendsGateway: string,\n): Promise<BosConfig> {\n const bosUrl = `bos://${extendsAccount}/${extendsGateway}`;\n return fetchBosConfigFromFastKv<BosConfig>(bosUrl);\n}\n\nexport async function resolveRepositoryViaExtendsChain(\n extendsAccount: string,\n extendsGateway: string,\n visited = new Set<string>(),\n): Promise<{ repository: string; config: BosConfig } | null> {\n const key = `bos://${extendsAccount}/${extendsGateway}`;\n if (visited.has(key)) return null;\n visited.add(key);\n\n try {\n const config = await fetchParentConfig(extendsAccount, extendsGateway);\n if (config.repository) {\n return { repository: config.repository, config };\n }\n\n const extendsRef = getExtendsRef(config as Record<string, unknown>);\n if (extendsRef) {\n const normalized = extendsRef.startsWith(\"bos://\") ? extendsRef : `bos://${extendsRef}`;\n const parsed = parseBosRef(normalized);\n if (parsed) {\n const result = await resolveRepositoryViaExtendsChain(\n parsed.account,\n parsed.gateway,\n visited,\n );\n if (result) return result;\n }\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\nexport async function detectGitRemoteUrl(directory: string): Promise<string | undefined> {\n try {\n const { stdout } = await execa(\"git\", [\"remote\", \"get-url\", \"origin\"], {\n cwd: directory,\n stdio: \"pipe\",\n });\n const url = stdout.trim();\n if (!url) return undefined;\n return normalizeGitUrl(url);\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeGitUrl(url: string): string | undefined {\n const sshMatch = url.match(/^git@github\\.com:([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n if (sshMatch) {\n return `https://github.com/${sshMatch[1]}/${sshMatch[2]}`;\n }\n const httpsMatch = url.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?(?:\\/.*)?$/);\n if (httpsMatch) {\n return `https://github.com/${httpsMatch[1]}/${httpsMatch[2]}`;\n }\n return url.endsWith(\".git\") ? url.slice(0, -4) : url;\n}\n\nexport async function downloadTarball(\n repoUrl: string,\n): Promise<{ dir: string; cleanup: () => Promise<void> }> {\n const parsed = parseGitHubUrl(repoUrl);\n if (!parsed) {\n throw new Error(`Cannot parse repository URL: ${repoUrl}`);\n }\n\n const { owner, repo } = parsed;\n let response: Response | null = null;\n\n for (const branch of [\"main\", \"master\"]) {\n const candidate = await fetch(\n `https://api.github.com/repos/${owner}/${repo}/tarball/${branch}`,\n {\n headers: { \"User-Agent\": \"everything-dev\" },\n redirect: \"follow\",\n },\n );\n if (candidate.ok) {\n response = candidate;\n break;\n }\n if (candidate.status !== 404) {\n throw new Error(\n `GitHub tarball download failed: ${candidate.status} ${candidate.statusText}`,\n );\n }\n }\n\n if (!response) {\n throw new Error(`GitHub tarball download failed for ${repoUrl}: tried main and master`);\n }\n\n if (!response.body) {\n throw new Error(\"GitHub tarball download returned empty body\");\n }\n\n const tmpDir = mkTmpDir(\"bos-init-tarball-\");\n const tarballPath = join(tmpDir, \"source.tar.gz\");\n\n const fileStream = createWriteStream(tarballPath);\n const reader = response.body as unknown as NodeJS.ReadableStream;\n await pipeline(reader, fileStream);\n\n const extractDir = mkTmpDir(\"bos-init-extract-\");\n try {\n const tar = require(\"tar\") as {\n extract: (opts: { cwd: string; file: string; strip: number }) => Promise<void>;\n };\n await tar.extract({ cwd: extractDir, file: tarballPath, strip: 1 });\n } catch {\n await execCommand(\"tar\", [\"-xzf\", tarballPath, \"--strip-components=1\", \"-C\", extractDir]);\n }\n\n rmSync(tmpDir, { recursive: true, force: true });\n\n return {\n dir: extractDir,\n cleanup: async () => {\n rmSync(extractDir, { recursive: true, force: true });\n },\n };\n}\n\nfunction parseGitHubUrl(url: string): { owner: string; repo: string } | null {\n const httpsMatch = url.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?(?:\\/.*)?$/);\n if (httpsMatch) {\n return { owner: httpsMatch[1], repo: httpsMatch[2] };\n }\n\n const sshMatch = url.match(/^git@github\\.com:([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n if (sshMatch) {\n return { owner: sshMatch[1], repo: sshMatch[2] };\n }\n\n return null;\n}\n\nexport async function copyFilteredFiles(\n sourceDir: string,\n destination: string,\n patterns: string[],\n _options: {\n overrides: OverrideSection[];\n plugins?: string[];\n },\n): Promise<number> {\n if (patterns.length === 0) {\n return 0;\n }\n\n const allFiles = new Set<string>();\n for (const pattern of patterns) {\n const matches = await glob(pattern, {\n cwd: sourceDir,\n nodir: true,\n dot: true,\n absolute: false,\n ignore: [\"**/node_modules/**\", \"**/.git/**\", \"**/dist/**\", \"**/.bos/**\"],\n });\n for (const match of matches) {\n allFiles.add(match);\n }\n }\n\n mkdirSync(destination, { recursive: true });\n\n let count = 0;\n for (const filePath of allFiles) {\n const src = join(sourceDir, filePath);\n const stat = lstatSync(src);\n if (!stat.isFile()) continue;\n\n const destPath = sourcePathToDestinationPath(filePath);\n const dest = join(destination, destPath);\n mkdirSync(dirname(dest), { recursive: true });\n const content = readFileSync(src);\n writeFileSync(dest, content);\n count++;\n }\n\n return count;\n}\n\nfunction stripProductionFields(entry: Record<string, unknown>): void {\n delete entry.production;\n delete entry.integrity;\n delete entry.ssr;\n delete entry.ssrIntegrity;\n}\n\nfunction buildRootTypecheckScript(sections: {\n ui: boolean;\n api: boolean;\n host: boolean;\n plugins: boolean;\n}): string {\n const commands = [\"bun run types:gen\"];\n\n if (sections.ui) {\n commands.push(\"if [ -d ui ]; then bun run --cwd ui typecheck; fi\");\n }\n if (sections.api) {\n commands.push(\"if [ -d api ]; then bun run --cwd api typecheck; fi\");\n }\n if (sections.host) {\n commands.push(\"if [ -d host ]; then bun run --cwd host typecheck; fi\");\n }\n if (sections.plugins) {\n commands.push(\n 'if [ -d plugins ]; then for dir in plugins/*; do if [ -f \"$dir/package.json\" ]; then bun run --cwd \"$dir\" typecheck; fi; done; fi',\n );\n }\n\n return commands.join(\" && \");\n}\n\nexport function buildChildRootScripts(sections: {\n ui: boolean;\n api: boolean;\n host: boolean;\n plugins: boolean;\n}): Record<string, string> {\n const scripts: Record<string, string> = {\n dev: \"node_modules/.bin/bos dev --host remote\",\n \"dev:proxy\": \"node_modules/.bin/bos dev --proxy\",\n build: \"node_modules/.bin/bos build\",\n deploy: \"node_modules/.bin/bos build --deploy\",\n publish: \"node_modules/.bin/bos publish\",\n start: \"node_modules/.bin/bos start\",\n typecheck: buildRootTypecheckScript(sections),\n lint: \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n format: \"biome format --write .\",\n \"format:check\": \"biome format .\",\n changeset: \"changeset\",\n version: \"changeset version\",\n release: \"echo 'Packages versioned - app release handled by workflow'\",\n postinstall: \"node_modules/.bin/bos types gen || true\",\n \"types:gen\": \"node_modules/.bin/bos types gen\",\n bos: \"node_modules/.bin/bos\",\n };\n\n if (sections.api) {\n scripts[\"db:push\"] = \"bun run --cwd api drizzle-kit push\";\n scripts[\"db:studio\"] = \"bun run --cwd api drizzle-kit studio\";\n scripts[\"db:generate\"] = \"bun run --cwd api drizzle-kit generate\";\n scripts[\"db:migrate\"] = \"bun run --cwd api drizzle-kit migrate\";\n scripts[\"test:api\"] = \"cd api && bun run test tests/integration/ tests/unit/\";\n scripts[\"test:integration\"] = \"cd api && bun run test tests/integration/\";\n }\n\n if (sections.host) {\n scripts[\"test:e2e\"] = \"bun run --cwd host test:e2e\";\n }\n\n if (sections.api && sections.host) {\n scripts.test = \"bun run test:api && bun run test:e2e\";\n } else if (sections.api) {\n scripts.test = \"bun run test:api\";\n } else if (sections.host) {\n scripts.test = \"bun run test:e2e\";\n }\n\n if (sections.api || sections.host) {\n scripts[\"dev:postgres\"] = \"docker compose up -d --wait && bun run dev\";\n scripts[\"dev:postgres:down\"] = \"docker compose down\";\n scripts[\"dev:postgres:reset\"] = \"docker compose down -v && docker compose up -d --wait\";\n }\n\n if (sections.ui) {\n scripts[\"dev:ui\"] = \"node_modules/.bin/bos dev --ui local --api remote\";\n }\n if (sections.api) {\n scripts[\"dev:api\"] = \"node_modules/.bin/bos dev --ui remote --api local\";\n }\n\n return scripts;\n}\n\nexport async function personalizeConfig(\n destination: string,\n opts: {\n extendsAccount: string;\n extendsGateway: string;\n account?: string;\n domain?: string;\n plugins?: string[];\n overrides: OverrideSection[];\n pluginRoutes?: Record<string, string[]>;\n workspaceOpts?: { localOverrides?: boolean; sourceDir?: string };\n mode?: \"init\" | \"sync\";\n existingConfig?: Record<string, unknown>;\n repository?: string;\n title?: string;\n description?: string;\n testnet?: string;\n staging?: unknown;\n },\n): Promise<void> {\n const has = (section: OverrideSection) => opts.overrides.includes(section);\n const existingApp =\n opts.mode === \"sync\" && opts.existingConfig?.app && typeof opts.existingConfig.app === \"object\"\n ? (opts.existingConfig.app as Record<string, unknown>)\n : undefined;\n const preservedAuth = existingApp?.auth;\n\n const explicitRootKeys = new Set(\n Object.entries(opts)\n .filter(\n ([key, value]) =>\n value !== undefined &&\n ![\n \"extendsAccount\",\n \"extendsGateway\",\n \"plugins\",\n \"overrides\",\n \"pluginRoutes\",\n \"workspaceOpts\",\n \"mode\",\n \"existingConfig\",\n ].includes(key),\n )\n .map(([key]) => key),\n );\n\n const configPath = join(destination, \"bos.config.json\");\n if (existsSync(configPath)) {\n const config = JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n\n config.extends = `bos://${opts.extendsAccount}/${opts.extendsGateway}`;\n\n if (opts.account) {\n config.account = opts.account;\n }\n if (opts.domain) {\n config.domain = opts.domain;\n }\n if (opts.repository) {\n config.repository = opts.repository;\n } else {\n delete config.repository;\n }\n\n const inheritableFields = [\"title\", \"description\", \"testnet\", \"staging\"] as const;\n for (const field of inheritableFields) {\n if (!(field in opts)) {\n delete config[field];\n }\n }\n\n if (config.app && typeof config.app === \"object\") {\n const app = config.app as Record<string, unknown>;\n\n for (const entryKey of Object.keys(app)) {\n if (\n !has(entryKey as OverrideSection) &&\n (entryKey === \"host\" || entryKey === \"ui\" || entryKey === \"api\")\n ) {\n delete app[entryKey];\n continue;\n }\n if (entryKey === \"auth\") {\n delete app[entryKey];\n continue;\n }\n const entry = app[entryKey];\n if (entry && typeof entry === \"object\") {\n stripProductionFields(entry as Record<string, unknown>);\n }\n }\n\n if (preservedAuth !== undefined) {\n app.auth = preservedAuth;\n }\n\n if (Object.keys(app).length === 0) {\n delete config.app;\n }\n }\n\n if (has(\"plugins\")) {\n if (config.plugins && typeof config.plugins === \"object\") {\n const plugins = config.plugins as Record<string, unknown>;\n\n if (opts.plugins !== undefined) {\n for (const pluginKey of Object.keys(plugins)) {\n if (!opts.plugins.includes(pluginKey)) {\n delete plugins[pluginKey];\n }\n }\n }\n\n for (const pluginKey of Object.keys(plugins)) {\n const plugin = plugins[pluginKey];\n let pluginObj: Record<string, unknown>;\n\n if (typeof plugin === \"string\") {\n pluginObj = { extends: plugin };\n plugins[pluginKey] = pluginObj;\n } else if (plugin && typeof plugin === \"object\") {\n pluginObj = { ...(plugin as Record<string, unknown>) };\n plugins[pluginKey] = pluginObj;\n } else {\n continue;\n }\n\n stripProductionFields(pluginObj);\n }\n\n if (Object.keys(plugins).length === 0) {\n config.plugins = {};\n }\n }\n } else {\n config.plugins = {};\n }\n\n if (opts.mode === \"sync\" && opts.existingConfig) {\n const managedRootKeys = new Set([\"extends\", \"account\", \"domain\", \"app\", \"plugins\"]);\n const preservedRootKeys = new Set([\n ...managedRootKeys,\n ...Object.keys(opts.existingConfig),\n ...explicitRootKeys,\n ]);\n\n for (const key of Object.keys(config)) {\n if (!preservedRootKeys.has(key)) {\n delete config[key];\n }\n }\n\n for (const [key, value] of Object.entries(opts.existingConfig)) {\n if (!(key in config) && !managedRootKeys.has(key) && !explicitRootKeys.has(key)) {\n config[key] = value;\n }\n }\n }\n\n await saveBosConfig(destination, config);\n }\n\n const pkgPath = join(destination, \"package.json\");\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\")) as Record<string, unknown>;\n const childScripts = buildChildRootScripts({\n ui: has(\"ui\"),\n api: has(\"api\"),\n host: has(\"host\"),\n plugins: has(\"plugins\"),\n });\n\n if (typeof pkg.name !== \"string\" || pkg.name.length === 0) {\n pkg.name = \"monorepo\";\n }\n pkg.private = true;\n pkg.type = \"module\";\n delete pkg.module;\n delete pkg.peerDependencies;\n\n if (pkg.workspaces && typeof pkg.workspaces === \"object\") {\n const ws = pkg.workspaces as { packages?: string[] };\n if (Array.isArray(ws.packages)) {\n ws.packages = ws.packages.filter((p: string) => {\n if (p.startsWith(\"packages/\")) return false;\n if (p === \"ui\") return has(\"ui\");\n if (p === \"api\") return has(\"api\");\n if (p === \"host\") return has(\"host\");\n if (p.startsWith(\"plugins/\")) return false;\n return true;\n });\n\n if (has(\"plugins\")) {\n if (!ws.packages.includes(\"plugins/*\")) {\n ws.packages.push(\"plugins/*\");\n }\n }\n }\n }\n\n if (!pkg.scripts || typeof pkg.scripts !== \"object\") {\n pkg.scripts = {};\n }\n const scripts = pkg.scripts as Record<string, string>;\n for (const [key, value] of Object.entries(childScripts)) {\n scripts[key] = value;\n }\n for (const obsoleteScript of [\n \"init\",\n \"sync-catalog\",\n \"db:push\",\n \"db:studio\",\n \"db:generate\",\n \"db:migrate\",\n \"test\",\n \"test:api\",\n \"test:integration\",\n \"test:e2e\",\n \"dev:postgres\",\n \"dev:postgres:down\",\n \"dev:postgres:reset\",\n \"dev:ui\",\n \"dev:api\",\n ]) {\n if (!(obsoleteScript in childScripts)) {\n delete scripts[obsoleteScript];\n }\n }\n\n if (pkg.devDependencies && typeof pkg.devDependencies === \"object\") {\n const deps = pkg.devDependencies as Record<string, string>;\n delete deps[\"every-plugin\"];\n delete deps[\"everything-dev\"];\n }\n\n if (!pkg.workspaces || typeof pkg.workspaces !== \"object\") {\n pkg.workspaces = { packages: [], catalog: {} };\n }\n const workspaces = pkg.workspaces as { packages?: string[]; catalog?: Record<string, string> };\n if (!workspaces.catalog || typeof workspaces.catalog !== \"object\") {\n workspaces.catalog = {};\n }\n\n if (!pkg.dependencies) pkg.dependencies = {};\n const deps = pkg.dependencies as Record<string, string>;\n const spec = opts.workspaceOpts?.sourceDir\n ? loadManifestNormalizationSpec(opts.workspaceOpts.sourceDir)\n : null;\n if (spec) {\n workspaces.catalog[\"everything-dev\"] = spec.rootCatalog[\"everything-dev\"];\n workspaces.catalog[\"every-plugin\"] = spec.rootCatalog[\"every-plugin\"];\n }\n const frameworkCatalog = (\n await resolveCatalogChainSource({\n extendsAccount: opts.extendsAccount,\n extendsGateway: opts.extendsGateway,\n sourceDir: opts.workspaceOpts?.sourceDir,\n })\n ).catalog;\n for (const [name, version] of Object.entries(frameworkCatalog)) {\n workspaces.catalog[name] = version;\n }\n if (!deps[\"everything-dev\"]) deps[\"everything-dev\"] = \"catalog:\";\n if (!deps[\"every-plugin\"]) deps[\"every-plugin\"] = \"catalog:\";\n\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n }\n\n const apiTsConfigPath = join(destination, \"api\", \"tsconfig.json\");\n if (existsSync(apiTsConfigPath)) {\n const apiTsConfig = JSON.parse(readFileSync(apiTsConfigPath, \"utf-8\")) as {\n files?: string[];\n [key: string]: unknown;\n };\n if (apiTsConfig.files) {\n const validFiles = apiTsConfig.files.filter((f) => existsSync(join(destination, \"api\", f)));\n if (validFiles.length !== apiTsConfig.files.length) {\n if (validFiles.length === 0) {\n delete apiTsConfig.files;\n } else {\n apiTsConfig.files = validFiles;\n }\n writeFileSync(apiTsConfigPath, `${JSON.stringify(apiTsConfig, null, 2)}\\n`);\n }\n }\n }\n\n await resolveWorkspaceRefs(destination, opts.workspaceOpts);\n\n if (has(\"ui\")) {\n const genContractPath = join(destination, \"ui\", \"src\", \"lib\", \"api-types.gen.ts\");\n if (!existsSync(genContractPath)) {\n mkdirSync(dirname(genContractPath), { recursive: true });\n writeFileSync(genContractPath, `export type ApiContract = Record<string, never>;\\n`);\n }\n }\n\n if (has(\"api\")) {\n const pluginsClientGenPath = join(destination, \"api\", \"src\", \"lib\", \"plugins-types.gen.ts\");\n if (!existsSync(pluginsClientGenPath)) {\n mkdirSync(dirname(pluginsClientGenPath), { recursive: true });\n writeFileSync(\n pluginsClientGenPath,\n `import type { ContractRouterClient, AnyContractRouter } from \"@orpc/contract\";\\ntype ClientFactory<C extends AnyContractRouter> = (context?: Record<string, unknown>) => ContractRouterClient<C>;\\nexport type PluginsClient = Record<string, never>;\\n`,\n );\n }\n }\n\n const authTypesPaths: string[] = [];\n if (has(\"ui\")) {\n authTypesPaths.push(join(destination, \"ui\", \"src\", \"lib\", \"auth-types.gen.ts\"));\n }\n if (has(\"api\")) {\n authTypesPaths.push(join(destination, \"api\", \"src\", \"lib\", \"auth-types.gen.ts\"));\n }\n if (has(\"host\") && existsSync(join(destination, \"host\", \"src\"))) {\n authTypesPaths.push(join(destination, \"host\", \"src\", \"lib\", \"auth-types.gen.ts\"));\n }\n for (const authTypesGenPath of authTypesPaths) {\n if (!existsSync(authTypesGenPath)) {\n mkdirSync(dirname(authTypesGenPath), { recursive: true });\n writeFileSync(authTypesGenPath, generateAuthTypesContent(authTypesGenPath, destination));\n }\n }\n\n if (authTypesPaths.length > 0) {\n const authDir = join(destination, \".bos\", \"generated\", \"auth\");\n if (!existsSync(authDir)) {\n mkdirSync(authDir, { recursive: true });\n }\n const authExportStubPath = join(authDir, \"auth-export.d.ts\");\n if (!existsSync(authExportStubPath)) {\n writeFileSync(\n authExportStubPath,\n `export type Auth = any;\nexport type AuthOrganizationContext = any;\nexport type AuthOrganization = any;\nexport type AuthOrganizationSummary = any;\nexport type AuthOrganizationMember = any;\nexport type AuthApiKey = any;\nexport type AuthInvitation = any;\nexport type GetActiveMemberInput = any;\nexport type GetOrganizationInput = any;\nexport type ListMembersInput = any;\nexport type ListInvitationsInput = any;\nexport type ListApiKeysInput = any;\nexport type AuthServices = any;\nexport type createAuthInstance = any;\n`,\n );\n }\n const contractStubPath = join(authDir, \"contract.d.ts\");\n if (!existsSync(contractStubPath)) {\n writeFileSync(\n contractStubPath,\n `export type ContractType = any;\nexport type InferOutput<_TRoute extends string> = any;\n`,\n );\n }\n }\n\n if (has(\"plugins\")) {\n for (const plugin of opts.plugins ?? []) {\n const pluginSrcDir = join(destination, \"plugins\", plugin, \"src\");\n const pluginIndexPath = join(pluginSrcDir, \"index.ts\");\n const pluginClientGenPath = join(pluginSrcDir, \"plugins-client.gen.ts\");\n if (!existsSync(pluginIndexPath) || existsSync(pluginClientGenPath)) {\n continue;\n }\n const pluginIndex = readFileSync(pluginIndexPath, \"utf-8\");\n if (!pluginIndex.includes(\"./plugins-client.gen\")) {\n continue;\n }\n writeFileSync(pluginClientGenPath, \"export type PluginsClient = Record<string, never>;\\n\");\n }\n }\n}\n\nfunction generateAuthTypesContent(targetPath: string, configDir: string): string {\n const authExportRel = toRelativeImportPath(\n join(configDir, \".bos\", \"generated\", \"auth\", \"auth-export.d.ts\"),\n targetPath,\n );\n const contractRel = toRelativeImportPath(\n join(configDir, \".bos\", \"generated\", \"auth\", \"contract.d.ts\"),\n targetPath,\n );\n\n return `export type {\n Auth,\n AuthOrganizationContext,\n AuthOrganization,\n AuthOrganizationSummary,\n AuthOrganizationMember,\n AuthApiKey,\n AuthInvitation,\n GetActiveMemberInput,\n GetOrganizationInput,\n ListMembersInput,\n ListInvitationsInput,\n ListApiKeysInput,\n AuthServices,\n createAuthInstance,\n} from \"${authExportRel}\";\nimport type { InferOutput, ContractType as AuthContract } from \"${contractRel}\";\nimport type { Auth as BaseAuth } from \"${authExportRel}\";\n\ntype RawAuthSession = InferOutput<\"getSession\">;\ntype RawAuthRequestContext = InferOutput<\"getContext\">;\ntype RawAuthActiveMember = InferOutput<\"getActiveMember\">;\n\nexport type AuthSessionUser = NonNullable<RawAuthSession[\"user\"]> & {\n role?: string | null;\n isAnonymous?: boolean | null;\n walletAddress?: string | null;\n banned?: boolean | null;\n};\nexport type AuthSessionData = NonNullable<RawAuthSession[\"session\"]> & {\n activeOrganizationId?: string | null;\n};\nexport type AuthSession = {\n user: AuthSessionUser | null;\n session: AuthSessionData | null;\n};\nexport type AuthRequestContext = RawAuthRequestContext & {\n organization?: { activeOrganizationId?: string | null } | null;\n apiKey?: { id: string; permissions?: Record<string, string[]> | null } | null;\n};\nexport type AuthActiveMember = RawAuthActiveMember;\nexport type AuthBaseSession = BaseAuth[\"$Infer\"][\"Session\"];\nexport type AuthContractType = AuthContract;\n`;\n}\n\nfunction toRelativeImportPath(fromPath: string, toPath: string): string {\n const rel = relative(dirname(toPath), fromPath);\n return rel.startsWith(\".\") ? rel : `./${rel}`;\n}\n\nexport async function runBunInstall(\n destination: string,\n spinner?: { message: (msg: string) => void },\n): Promise<void> {\n await runWithProgress(\n \"bun\",\n [\"install\", \"--ignore-scripts\"],\n destination,\n spinner,\n \"Installing dependencies\",\n );\n}\n\nexport async function runBunInstallForUpgrade(\n destination: string,\n spinner?: { message: (msg: string) => void },\n): Promise<void> {\n await runWithProgress(\n \"bun\",\n [\"install\", \"--force\"],\n destination,\n spinner,\n \"Installing dependencies\",\n );\n}\n\nexport async function runTypesGen(\n destination: string,\n spinner?: { message: (msg: string) => void },\n): Promise<void> {\n const localBosBin = join(destination, \"node_modules\", \".bin\", \"bos\");\n if (existsSync(localBosBin)) {\n await runWithProgress(\n \"node_modules/.bin/bos\",\n [\"types\", \"gen\"],\n destination,\n spinner,\n \"Generating types\",\n );\n return;\n }\n\n throw new Error(\"Unable to locate bos CLI for types generation\");\n}\n\nexport async function runDockerComposeUp(destination: string): Promise<void> {\n await execCommand(\"docker\", [\"compose\", \"up\", \"-d\", \"--wait\"], destination, { stdio: \"inherit\" });\n}\n\nasync function runWithProgress(\n command: string,\n args: string[],\n cwd: string,\n spinner: { message: (msg: string) => void } | undefined,\n label: string,\n): Promise<void> {\n const timeout = COMMAND_TIMEOUTS[command] ?? 2 * 60_000;\n const child = execa(command, args, { cwd, stdio: \"inherit\", timeout });\n\n if (spinner) {\n const start = Date.now();\n const interval = setInterval(() => {\n const elapsed = Math.round((Date.now() - start) / 1000);\n spinner.message(`${label}... (${elapsed}s)`);\n }, 2000);\n try {\n await child;\n } finally {\n clearInterval(interval);\n }\n } else {\n await child;\n }\n}\n\nexport function stripOrphanedWorkspacesFromLockfile(\n lockfilePath: string,\n allowedWorkspaces: string[],\n): void {\n if (!existsSync(lockfilePath)) return;\n\n const content = readFileSync(lockfilePath, \"utf-8\");\n let lockfile: Record<string, unknown>;\n try {\n lockfile = JSON.parse(content) as Record<string, unknown>;\n } catch {\n return;\n }\n\n const workspaces = lockfile.workspaces;\n if (!workspaces || typeof workspaces !== \"object\") return;\n\n const workspaceMap = workspaces as Record<string, unknown>;\n const allowed = new Set([\"\", ...allowedWorkspaces]);\n\n const keys = Object.keys(workspaceMap);\n let changed = false;\n for (const key of keys) {\n if (allowed.has(key)) continue;\n if (\n allowedWorkspaces.some(\n (pattern) => pattern.endsWith(\"/*\") && key.startsWith(pattern.slice(0, -1)),\n )\n )\n continue;\n delete workspaceMap[key];\n changed = true;\n }\n\n if (changed) {\n writeFileSync(lockfilePath, `${JSON.stringify(lockfile, null, 2)}\\n`);\n }\n}\n\nexport function removeInitLockfile(lockfilePath: string): void {\n if (!existsSync(lockfilePath)) return;\n rmSync(lockfilePath, { force: true });\n}\n\nfunction readJsonFile<T>(filePath: string): T {\n return JSON.parse(readFileSync(filePath, \"utf-8\")) as T;\n}\n\nexport async function scaffoldMinimalProject(\n destination: string,\n parentConfig: BosConfigInput,\n opts: {\n extendsAccount: string;\n extendsGateway: string;\n account?: string;\n domain?: string;\n plugins?: string[];\n overrides: OverrideSection[];\n repository?: string;\n title?: string;\n description?: string;\n },\n): Promise<number> {\n mkdirSync(destination, { recursive: true });\n\n const has = (section: OverrideSection) => opts.overrides.includes(section);\n\n const config: Record<string, unknown> = {\n extends: `bos://${opts.extendsAccount}/${opts.extendsGateway}`,\n account: opts.account || opts.extendsAccount,\n ...(opts.domain ? { domain: opts.domain } : {}),\n ...(opts.repository ? { repository: opts.repository } : {}),\n ...(opts.title ? { title: opts.title } : {}),\n ...(opts.description ? { description: opts.description } : {}),\n };\n\n if (parentConfig.app && typeof parentConfig.app === \"object\") {\n const app: Record<string, unknown> = {};\n const parentApp = parentConfig.app as Record<string, Record<string, unknown>>;\n\n if (has(\"host\") && parentApp.host) {\n app.host = { ...parentApp.host };\n stripProductionFields(app.host as Record<string, unknown>);\n }\n\n if (has(\"ui\") && parentApp.ui) {\n app.ui = { ...parentApp.ui };\n stripProductionFields(app.ui as Record<string, unknown>);\n }\n\n if (has(\"api\") && parentApp.api) {\n app.api = { ...parentApp.api };\n stripProductionFields(app.api as Record<string, unknown>);\n }\n\n if (Object.keys(app).length > 0) {\n config.app = app;\n }\n }\n\n if (has(\"plugins\") && opts.plugins && opts.plugins.length > 0 && parentConfig.plugins) {\n const plugins: Record<string, unknown> = {};\n for (const key of opts.plugins) {\n const parentPlugin = (parentConfig.plugins as Record<string, unknown>)?.[key];\n if (parentPlugin) {\n if (typeof parentPlugin === \"string\") {\n plugins[key] = { extends: parentPlugin };\n } else {\n const pluginCopy = { ...(parentPlugin as Record<string, unknown>) };\n stripProductionFields(pluginCopy);\n plugins[key] = pluginCopy;\n }\n }\n }\n config.plugins = plugins;\n } else if (has(\"plugins\")) {\n config.plugins = {};\n }\n\n await saveBosConfig(destination, config);\n\n const workspacePackages: string[] = [];\n for (const section of opts.overrides) {\n workspacePackages.push(...OVERRIDE_WORKSPACE_MAP[section]);\n }\n if (has(\"plugins\")) {\n workspacePackages.push(\"plugins/*\");\n }\n\n const catalog = (\n await resolveCatalogChainSource({\n extendsAccount: opts.extendsAccount,\n extendsGateway: opts.extendsGateway,\n })\n ).catalog;\n\n const pkg: Record<string, unknown> = {\n name: \"monorepo\",\n private: true,\n type: \"module\",\n scripts: buildChildRootScripts({\n ui: has(\"ui\"),\n api: has(\"api\"),\n host: has(\"host\"),\n plugins: has(\"plugins\"),\n }),\n dependencies: {\n \"everything-dev\": \"catalog:\",\n \"every-plugin\": \"catalog:\",\n },\n devDependencies: {},\n workspaces: {\n packages: workspacePackages,\n catalog,\n },\n };\n writeFileSync(join(destination, \"package.json\"), `${JSON.stringify(pkg, null, 2)}\\n`);\n\n writeFileSync(join(destination, \".gitignore\"), generateGitignore());\n\n return 4;\n}\n\nasync function resolveWorkspaceRefs(\n destination: string,\n options?: { localOverrides?: boolean; sourceDir?: string },\n): Promise<void> {\n await normalizePackageManifestsInTree({\n sourceRootDir: options?.sourceDir ?? destination,\n targetDir: destination,\n resolveCatalogRefs: false,\n preserveCatalogRefs: true,\n removeWorkspaceDeps: [\"host\"],\n });\n}\n\nexport async function writeInitSnapshot(\n destination: string,\n extendsAccount: string,\n extendsGateway: string,\n sourceDir: string,\n patterns: string[],\n _options: {\n overrides: OverrideSection[];\n plugins?: string[];\n },\n): Promise<void> {\n const allFiles = new Set<string>();\n for (const pattern of patterns) {\n const matches = await glob(pattern, {\n cwd: sourceDir,\n nodir: true,\n dot: true,\n absolute: false,\n ignore: [\"**/node_modules/**\", \"**/.git/**\", \"**/dist/**\", \"**/.bos/**\"],\n });\n for (const match of matches) {\n allFiles.add(match);\n }\n }\n\n const fileHashes: Record<string, string> = {};\n for (const filePath of allFiles) {\n const src = join(sourceDir, filePath);\n const stat = lstatSync(src);\n if (!stat.isFile()) continue;\n const content = readFileSync(src);\n const destPath = sourcePathToDestinationPath(filePath);\n fileHashes[destPath] = computeHash(content);\n }\n\n await writeSnapshot(destination, {\n parentRef: `bos://${extendsAccount}/${extendsGateway}`,\n files: fileHashes,\n });\n}\n\nfunction computeHash(data: Uint8Array): string {\n return createHash(\"sha256\").update(data).digest(\"hex\").substring(0, 16);\n}\n\nfunction mkTmpDir(prefix: string): string {\n return mkdtempSync(join(tmpdir(), `${prefix}-`));\n}\n\nexport async function generateDatabaseMigrations(destination: string): Promise<void> {\n const drizzleConfigs = await glob(\"**/drizzle.config.ts\", {\n cwd: destination,\n nodir: true,\n dot: false,\n absolute: false,\n ignore: [\"**/node_modules/**\"],\n });\n\n for (const configPath of drizzleConfigs) {\n const workspaceDir = dirname(configPath);\n const pkgPath = join(destination, workspaceDir, \"package.json\");\n if (!existsSync(pkgPath)) continue;\n\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\")) as Record<string, unknown>;\n const scripts = pkg.scripts as Record<string, string> | undefined;\n if (!scripts?.[\"db:generate\"]) continue;\n\n const cwd = join(destination, workspaceDir);\n await execCommand(\"bun\", [\"run\", \"db:generate\"], cwd);\n }\n}\n\nconst COMMAND_TIMEOUTS: Record<string, number> = {\n bun: 5 * 60_000,\n docker: 5 * 60_000,\n node_modules: 2 * 60_000,\n tar: 60_000,\n};\n\nexport async function execCommand(\n command: string,\n args: string[],\n cwd?: string,\n options?: { stdio?: \"pipe\" | \"inherit\" },\n): Promise<void> {\n const timeout = COMMAND_TIMEOUTS[command] ?? 2 * 60_000;\n await execa(command, args, { cwd, stdio: options?.stdio ?? \"pipe\", timeout });\n}\n\nfunction generateGitignore(): string {\n return `node_modules/\ndist/\n.env\n.bos/\n*.gen.ts\n*.gen.tsx\n`;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.mjs","names":[],"sources":["../../src/cli/init.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n createWriteStream,\n existsSync,\n lstatSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, relative, resolve } from \"node:path\";\nimport { pipeline } from \"node:stream/promises\";\nimport { execa } from \"execa\";\nimport { glob } from \"glob\";\nimport type { OverrideSection } from \"../contract\";\nimport { fetchBosConfigFromFastKv } from \"../fastkv\";\nimport {\n loadManifestNormalizationSpec,\n normalizePackageManifestsInTree,\n} from \"../internal/manifest-normalizer\";\nimport { resolveExtendsRef } from \"../merge\";\nimport type { BosConfig, BosConfigInput } from \"../types\";\nimport { saveBosConfig } from \"../utils/save-config\";\nimport { writeSnapshot } from \"./snapshot\";\n\nconst require = createRequire(import.meta.url);\n\nexport const INIT_ROOT_PATTERNS = [\n \"bos.config.json\",\n \"package.json\",\n \".env.example\",\n \".gitignore\",\n \"biome.json\",\n \"bunfig.toml\",\n \"Dockerfile\",\n \"railway.json\",\n \"railway.toml\",\n \"AGENTS.md\",\n \".changeset/config.json\",\n \".changeset/README.md\",\n \"README.md\",\n \"CONTRIBUTING.md\",\n \".github/templates/**\",\n] as const;\n\nconst OVERRIDE_WORKSPACE_MAP: Record<OverrideSection, string[]> = {\n ui: [\"ui\"],\n api: [\"api\"],\n host: [\"host\"],\n plugins: [],\n};\n\ninterface SourceResult {\n sourceDir: string;\n parentConfig: BosConfig;\n cleanup: () => Promise<void>;\n}\n\nexport interface CatalogChainSource {\n catalog: Record<string, string>;\n repository?: string;\n extendsChain: string[];\n}\n\nfunction getExtendsRef(config: Record<string, unknown>): string | undefined {\n if (typeof config.extends === \"string\") {\n return config.extends;\n }\n\n if (config.extends && typeof config.extends === \"object\") {\n return resolveExtendsRef(config.extends as Record<string, string>, \"production\");\n }\n\n return undefined;\n}\n\nfunction parseBosRef(ref: string): { account: string; gateway: string } | null {\n const match = ref.match(/^bos:\\/\\/([^/]+)\\/(.+)$/);\n if (!match?.[1] || !match[2]) return null;\n return { account: match[1], gateway: match[2] };\n}\n\nfunction readWorkspaceCatalog(sourceDir: string): Record<string, string> {\n const pkgPath = join(sourceDir, \"package.json\");\n if (!existsSync(pkgPath)) {\n return {};\n }\n\n const pkg = readJsonFile<{ workspaces?: { catalog?: Record<string, string> } }>(pkgPath);\n return { ...(pkg.workspaces?.catalog ?? {}) };\n}\n\nexport async function resolveCatalogChainSource(opts: {\n extendsAccount: string;\n extendsGateway: string;\n sourceDir?: string;\n}): Promise<CatalogChainSource> {\n const catalogs: Record<string, string>[] = [];\n const cleanups: Array<() => Promise<void>> = [];\n const extendsChain: string[] = [];\n const visited = new Set<string>();\n let repository: string | undefined;\n let currentRef = `bos://${opts.extendsAccount}/${opts.extendsGateway}`;\n let sourceDir = opts.sourceDir ? resolve(opts.sourceDir) : undefined;\n let configPath = sourceDir ? join(sourceDir, \"bos.config.json\") : undefined;\n\n try {\n while (true) {\n if (visited.has(currentRef)) {\n throw new Error(`Circular extends detected while resolving catalog source: ${currentRef}`);\n }\n\n visited.add(currentRef);\n extendsChain.push(currentRef);\n\n let config: Record<string, unknown>;\n let currentSourceDir = sourceDir;\n let cleanup: () => Promise<void> = async () => {};\n\n if (configPath) {\n config = readJsonFile<Record<string, unknown>>(configPath);\n currentSourceDir = dirname(configPath);\n } else {\n const parsed = parseBosRef(currentRef);\n if (!parsed) {\n break;\n }\n const sourceResult = await resolveSourceDir({\n extendsAccount: parsed.account,\n extendsGateway: parsed.gateway,\n });\n config = sourceResult.parentConfig as Record<string, unknown>;\n currentSourceDir = sourceResult.sourceDir || undefined;\n cleanup = sourceResult.cleanup;\n }\n\n cleanups.push(cleanup);\n catalogs.push(currentSourceDir ? readWorkspaceCatalog(currentSourceDir) : {});\n\n if (typeof config.repository === \"string\") {\n repository = config.repository;\n }\n\n const nextExtendsRef = getExtendsRef(config);\n if (!nextExtendsRef) {\n break;\n }\n\n if (nextExtendsRef.startsWith(\"bos://\")) {\n currentRef = nextExtendsRef;\n sourceDir = undefined;\n configPath = undefined;\n continue;\n }\n\n if (!currentSourceDir) {\n break;\n }\n\n const nextConfigPath = resolve(currentSourceDir, nextExtendsRef);\n if (!existsSync(nextConfigPath)) {\n break;\n }\n\n currentRef = nextConfigPath;\n sourceDir = dirname(nextConfigPath);\n configPath = nextConfigPath;\n }\n } finally {\n for (const cleanup of cleanups.reverse()) {\n await cleanup();\n }\n }\n\n return {\n catalog: Object.assign({}, ...catalogs.reverse()),\n repository,\n extendsChain,\n };\n}\n\nexport async function resolveSourceDir(opts: {\n extendsAccount: string;\n extendsGateway: string;\n source?: string;\n}): Promise<SourceResult> {\n if (opts.source) {\n const sourceDir = resolve(opts.source);\n if (!existsSync(join(sourceDir, \"bos.config.json\"))) {\n throw new Error(`No bos.config.json found in source directory: ${sourceDir}`);\n }\n const parentConfig = JSON.parse(\n readFileSync(join(sourceDir, \"bos.config.json\"), \"utf-8\"),\n ) as BosConfig;\n return { sourceDir, parentConfig, cleanup: async () => {} };\n }\n\n const parentConfig = await fetchParentConfig(opts.extendsAccount, opts.extendsGateway);\n\n if (parentConfig.repository) {\n const { dir: sourceDir, cleanup } = await downloadTarball(parentConfig.repository);\n return { sourceDir, parentConfig, cleanup };\n }\n\n const chainResult = await resolveRepositoryViaExtendsChain(\n opts.extendsAccount,\n opts.extendsGateway,\n );\n if (chainResult?.repository) {\n const { dir: sourceDir, cleanup } = await downloadTarball(chainResult.repository);\n return { sourceDir, parentConfig: chainResult.config, cleanup };\n }\n\n return {\n sourceDir: \"\",\n parentConfig,\n cleanup: async () => {},\n };\n}\n\nexport function buildInitPatterns(overrides: OverrideSection[], plugins?: string[]): string[] {\n const has = (section: OverrideSection) => overrides.includes(section);\n const patterns: string[] = [...INIT_ROOT_PATTERNS];\n\n if (has(\"ui\")) patterns.push(\"ui/**\");\n if (has(\"api\")) patterns.push(\"api/**\");\n if (has(\"host\")) patterns.push(\"host/**\");\n if (has(\"plugins\")) {\n for (const plugin of plugins ?? []) {\n patterns.push(`plugins/${plugin}/**`);\n }\n }\n\n return patterns;\n}\n\nexport function sourcePathToDestinationPath(filePath: string): string {\n return filePath.startsWith(\".github/templates/\")\n ? filePath.replace(/^\\.github\\/templates\\//, \".github/\")\n : filePath;\n}\n\nexport async function fetchParentConfig(\n extendsAccount: string,\n extendsGateway: string,\n): Promise<BosConfig> {\n const bosUrl = `bos://${extendsAccount}/${extendsGateway}`;\n return fetchBosConfigFromFastKv<BosConfig>(bosUrl);\n}\n\nexport async function resolveRepositoryViaExtendsChain(\n extendsAccount: string,\n extendsGateway: string,\n visited = new Set<string>(),\n): Promise<{ repository: string; config: BosConfig } | null> {\n const key = `bos://${extendsAccount}/${extendsGateway}`;\n if (visited.has(key)) return null;\n visited.add(key);\n\n try {\n const config = await fetchParentConfig(extendsAccount, extendsGateway);\n if (config.repository) {\n return { repository: config.repository, config };\n }\n\n const extendsRef = getExtendsRef(config as Record<string, unknown>);\n if (extendsRef) {\n const normalized = extendsRef.startsWith(\"bos://\") ? extendsRef : `bos://${extendsRef}`;\n const parsed = parseBosRef(normalized);\n if (parsed) {\n const result = await resolveRepositoryViaExtendsChain(\n parsed.account,\n parsed.gateway,\n visited,\n );\n if (result) return result;\n }\n }\n\n return null;\n } catch {\n return null;\n }\n}\n\nexport async function detectGitRemoteUrl(directory: string): Promise<string | undefined> {\n try {\n const { stdout } = await execa(\"git\", [\"remote\", \"get-url\", \"origin\"], {\n cwd: directory,\n stdio: \"pipe\",\n });\n const url = stdout.trim();\n if (!url) return undefined;\n return normalizeGitUrl(url);\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeGitUrl(url: string): string | undefined {\n const sshMatch = url.match(/^git@github\\.com:([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n if (sshMatch) {\n return `https://github.com/${sshMatch[1]}/${sshMatch[2]}`;\n }\n const httpsMatch = url.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?(?:\\/.*)?$/);\n if (httpsMatch) {\n return `https://github.com/${httpsMatch[1]}/${httpsMatch[2]}`;\n }\n return url.endsWith(\".git\") ? url.slice(0, -4) : url;\n}\n\nexport async function downloadTarball(\n repoUrl: string,\n): Promise<{ dir: string; cleanup: () => Promise<void> }> {\n const parsed = parseGitHubUrl(repoUrl);\n if (!parsed) {\n throw new Error(`Cannot parse repository URL: ${repoUrl}`);\n }\n\n const { owner, repo } = parsed;\n let response: Response | null = null;\n\n for (const branch of [\"main\", \"master\"]) {\n const candidate = await fetch(\n `https://api.github.com/repos/${owner}/${repo}/tarball/${branch}`,\n {\n headers: { \"User-Agent\": \"everything-dev\" },\n redirect: \"follow\",\n },\n );\n if (candidate.ok) {\n response = candidate;\n break;\n }\n if (candidate.status !== 404) {\n throw new Error(\n `GitHub tarball download failed: ${candidate.status} ${candidate.statusText}`,\n );\n }\n }\n\n if (!response) {\n throw new Error(`GitHub tarball download failed for ${repoUrl}: tried main and master`);\n }\n\n if (!response.body) {\n throw new Error(\"GitHub tarball download returned empty body\");\n }\n\n const tmpDir = mkTmpDir(\"bos-init-tarball-\");\n const tarballPath = join(tmpDir, \"source.tar.gz\");\n\n const fileStream = createWriteStream(tarballPath);\n const reader = response.body as unknown as NodeJS.ReadableStream;\n await pipeline(reader, fileStream);\n\n const extractDir = mkTmpDir(\"bos-init-extract-\");\n try {\n const tar = require(\"tar\") as {\n extract: (opts: { cwd: string; file: string; strip: number }) => Promise<void>;\n };\n await tar.extract({ cwd: extractDir, file: tarballPath, strip: 1 });\n } catch {\n await execCommand(\"tar\", [\"-xzf\", tarballPath, \"--strip-components=1\", \"-C\", extractDir]);\n }\n\n rmSync(tmpDir, { recursive: true, force: true });\n\n return {\n dir: extractDir,\n cleanup: async () => {\n rmSync(extractDir, { recursive: true, force: true });\n },\n };\n}\n\nfunction parseGitHubUrl(url: string): { owner: string; repo: string } | null {\n const httpsMatch = url.match(/^https?:\\/\\/github\\.com\\/([^/]+)\\/([^/]+?)(?:\\.git)?(?:\\/.*)?$/);\n if (httpsMatch) {\n return { owner: httpsMatch[1], repo: httpsMatch[2] };\n }\n\n const sshMatch = url.match(/^git@github\\.com:([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n if (sshMatch) {\n return { owner: sshMatch[1], repo: sshMatch[2] };\n }\n\n return null;\n}\n\nexport async function copyFilteredFiles(\n sourceDir: string,\n destination: string,\n patterns: string[],\n _options: {\n overrides: OverrideSection[];\n plugins?: string[];\n },\n): Promise<number> {\n if (patterns.length === 0) {\n return 0;\n }\n\n const allFiles = new Set<string>();\n for (const pattern of patterns) {\n const matches = await glob(pattern, {\n cwd: sourceDir,\n nodir: true,\n dot: true,\n absolute: false,\n ignore: [\"**/node_modules/**\", \"**/.git/**\", \"**/dist/**\", \"**/.bos/**\"],\n });\n for (const match of matches) {\n allFiles.add(match);\n }\n }\n\n mkdirSync(destination, { recursive: true });\n\n let count = 0;\n for (const filePath of allFiles) {\n const src = join(sourceDir, filePath);\n const stat = lstatSync(src);\n if (!stat.isFile()) continue;\n\n const destPath = sourcePathToDestinationPath(filePath);\n const dest = join(destination, destPath);\n mkdirSync(dirname(dest), { recursive: true });\n const content = readFileSync(src);\n writeFileSync(dest, content);\n count++;\n }\n\n return count;\n}\n\nfunction stripProductionFields(entry: Record<string, unknown>): void {\n delete entry.production;\n delete entry.integrity;\n delete entry.ssr;\n delete entry.ssrIntegrity;\n}\n\nfunction buildRootTypecheckScript(sections: {\n ui: boolean;\n api: boolean;\n host: boolean;\n plugins: boolean;\n}): string {\n const commands = [\"bun run types:gen\"];\n\n if (sections.ui) {\n commands.push(\"if [ -d ui ]; then bun run --cwd ui typecheck; fi\");\n }\n if (sections.api) {\n commands.push(\"if [ -d api ]; then bun run --cwd api typecheck; fi\");\n }\n if (sections.host) {\n commands.push(\"if [ -d host ]; then bun run --cwd host typecheck; fi\");\n }\n if (sections.plugins) {\n commands.push(\n 'if [ -d plugins ]; then for dir in plugins/*; do if [ -f \"$dir/package.json\" ]; then bun run --cwd \"$dir\" typecheck; fi; done; fi',\n );\n }\n\n return commands.join(\" && \");\n}\n\nexport function buildChildRootScripts(sections: {\n ui: boolean;\n api: boolean;\n host: boolean;\n plugins: boolean;\n}): Record<string, string> {\n const scripts: Record<string, string> = {\n dev: \"node_modules/.bin/bos dev\",\n \"dev:proxy\": \"node_modules/.bin/bos dev --proxy\",\n build: \"node_modules/.bin/bos build\",\n deploy: \"node_modules/.bin/bos build --deploy\",\n publish: \"node_modules/.bin/bos publish\",\n start: \"node_modules/.bin/bos start\",\n typecheck: buildRootTypecheckScript(sections),\n lint: \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n format: \"biome format --write .\",\n \"format:check\": \"biome format .\",\n changeset: \"changeset\",\n version: \"changeset version\",\n release: \"echo 'Packages versioned - app release handled by workflow'\",\n postinstall: \"node_modules/.bin/bos types gen || true\",\n \"types:gen\": \"node_modules/.bin/bos types gen\",\n bos: \"node_modules/.bin/bos\",\n };\n\n if (sections.api) {\n scripts[\"db:push\"] = \"bun run --cwd api drizzle-kit push\";\n scripts[\"db:studio\"] = \"bun run --cwd api drizzle-kit studio\";\n scripts[\"db:generate\"] = \"bun run --cwd api drizzle-kit generate\";\n scripts[\"db:migrate\"] = \"bun run --cwd api drizzle-kit migrate\";\n scripts[\"test:api\"] = \"cd api && bun run test tests/integration/ tests/unit/\";\n scripts[\"test:integration\"] = \"cd api && bun run test tests/integration/\";\n }\n\n if (sections.host) {\n scripts[\"test:e2e\"] = \"bun run --cwd host test:e2e\";\n }\n\n if (sections.api && sections.host) {\n scripts.test = \"bun run test:api && bun run test:e2e\";\n } else if (sections.api) {\n scripts.test = \"bun run test:api\";\n } else if (sections.host) {\n scripts.test = \"bun run test:e2e\";\n }\n\n if (sections.api || sections.host) {\n scripts[\"dev:postgres\"] = \"docker compose up -d --wait && bun run dev\";\n scripts[\"dev:postgres:down\"] = \"docker compose down\";\n scripts[\"dev:postgres:reset\"] = \"docker compose down -v && docker compose up -d --wait\";\n }\n\n if (sections.ui) {\n scripts[\"dev:ui\"] = \"node_modules/.bin/bos dev --ui local --api remote\";\n }\n if (sections.api) {\n scripts[\"dev:api\"] = \"node_modules/.bin/bos dev --ui remote --api local\";\n }\n\n return scripts;\n}\n\nexport async function personalizeConfig(\n destination: string,\n opts: {\n extendsAccount: string;\n extendsGateway: string;\n account?: string;\n domain?: string;\n plugins?: string[];\n overrides: OverrideSection[];\n pluginRoutes?: Record<string, string[]>;\n workspaceOpts?: { localOverrides?: boolean; sourceDir?: string };\n mode?: \"init\" | \"sync\";\n existingConfig?: Record<string, unknown>;\n repository?: string;\n title?: string;\n description?: string;\n testnet?: string;\n staging?: unknown;\n },\n): Promise<void> {\n const has = (section: OverrideSection) => opts.overrides.includes(section);\n const existingApp =\n opts.mode === \"sync\" && opts.existingConfig?.app && typeof opts.existingConfig.app === \"object\"\n ? (opts.existingConfig.app as Record<string, unknown>)\n : undefined;\n const preservedAuth = existingApp?.auth;\n\n const explicitRootKeys = new Set(\n Object.entries(opts)\n .filter(\n ([key, value]) =>\n value !== undefined &&\n ![\n \"extendsAccount\",\n \"extendsGateway\",\n \"plugins\",\n \"overrides\",\n \"pluginRoutes\",\n \"workspaceOpts\",\n \"mode\",\n \"existingConfig\",\n ].includes(key),\n )\n .map(([key]) => key),\n );\n\n const configPath = join(destination, \"bos.config.json\");\n if (existsSync(configPath)) {\n const config = JSON.parse(readFileSync(configPath, \"utf-8\")) as Record<string, unknown>;\n\n config.extends = `bos://${opts.extendsAccount}/${opts.extendsGateway}`;\n\n if (opts.account) {\n config.account = opts.account;\n }\n if (opts.domain) {\n config.domain = opts.domain;\n }\n if (opts.repository) {\n config.repository = opts.repository;\n } else {\n delete config.repository;\n }\n\n const inheritableFields = [\"title\", \"description\", \"testnet\", \"staging\"] as const;\n for (const field of inheritableFields) {\n if (!(field in opts)) {\n delete config[field];\n }\n }\n\n if (config.app && typeof config.app === \"object\") {\n const app = config.app as Record<string, unknown>;\n\n for (const entryKey of Object.keys(app)) {\n if (\n !has(entryKey as OverrideSection) &&\n (entryKey === \"host\" || entryKey === \"ui\" || entryKey === \"api\")\n ) {\n delete app[entryKey];\n continue;\n }\n if (entryKey === \"auth\") {\n delete app[entryKey];\n continue;\n }\n const entry = app[entryKey];\n if (entry && typeof entry === \"object\") {\n stripProductionFields(entry as Record<string, unknown>);\n }\n }\n\n if (preservedAuth !== undefined) {\n app.auth = preservedAuth;\n }\n\n if (Object.keys(app).length === 0) {\n delete config.app;\n }\n }\n\n if (has(\"plugins\")) {\n if (config.plugins && typeof config.plugins === \"object\") {\n const plugins = config.plugins as Record<string, unknown>;\n\n if (opts.plugins !== undefined) {\n for (const pluginKey of Object.keys(plugins)) {\n if (!opts.plugins.includes(pluginKey)) {\n delete plugins[pluginKey];\n }\n }\n }\n\n for (const pluginKey of Object.keys(plugins)) {\n const plugin = plugins[pluginKey];\n let pluginObj: Record<string, unknown>;\n\n if (typeof plugin === \"string\") {\n pluginObj = { extends: plugin };\n plugins[pluginKey] = pluginObj;\n } else if (plugin && typeof plugin === \"object\") {\n pluginObj = { ...(plugin as Record<string, unknown>) };\n plugins[pluginKey] = pluginObj;\n } else {\n continue;\n }\n\n stripProductionFields(pluginObj);\n }\n\n if (Object.keys(plugins).length === 0) {\n config.plugins = {};\n }\n }\n } else {\n config.plugins = {};\n }\n\n if (opts.mode === \"sync\" && opts.existingConfig) {\n const managedRootKeys = new Set([\"extends\", \"account\", \"domain\", \"app\", \"plugins\"]);\n const preservedRootKeys = new Set([\n ...managedRootKeys,\n ...Object.keys(opts.existingConfig),\n ...explicitRootKeys,\n ]);\n\n for (const key of Object.keys(config)) {\n if (!preservedRootKeys.has(key)) {\n delete config[key];\n }\n }\n\n for (const [key, value] of Object.entries(opts.existingConfig)) {\n if (!(key in config) && !managedRootKeys.has(key) && !explicitRootKeys.has(key)) {\n config[key] = value;\n }\n }\n }\n\n await saveBosConfig(destination, config);\n }\n\n const pkgPath = join(destination, \"package.json\");\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\")) as Record<string, unknown>;\n const childScripts = buildChildRootScripts({\n ui: has(\"ui\"),\n api: has(\"api\"),\n host: has(\"host\"),\n plugins: has(\"plugins\"),\n });\n\n if (typeof pkg.name !== \"string\" || pkg.name.length === 0) {\n pkg.name = \"monorepo\";\n }\n pkg.private = true;\n pkg.type = \"module\";\n delete pkg.module;\n delete pkg.peerDependencies;\n\n if (pkg.workspaces && typeof pkg.workspaces === \"object\") {\n const ws = pkg.workspaces as { packages?: string[] };\n if (Array.isArray(ws.packages)) {\n ws.packages = ws.packages.filter((p: string) => {\n if (p.startsWith(\"packages/\")) return false;\n if (p === \"ui\") return has(\"ui\");\n if (p === \"api\") return has(\"api\");\n if (p === \"host\") return has(\"host\");\n if (p.startsWith(\"plugins/\")) return false;\n return true;\n });\n\n if (has(\"plugins\")) {\n if (!ws.packages.includes(\"plugins/*\")) {\n ws.packages.push(\"plugins/*\");\n }\n }\n }\n }\n\n if (!pkg.scripts || typeof pkg.scripts !== \"object\") {\n pkg.scripts = {};\n }\n const scripts = pkg.scripts as Record<string, string>;\n for (const [key, value] of Object.entries(childScripts)) {\n scripts[key] = value;\n }\n for (const obsoleteScript of [\n \"init\",\n \"sync-catalog\",\n \"db:push\",\n \"db:studio\",\n \"db:generate\",\n \"db:migrate\",\n \"test\",\n \"test:api\",\n \"test:integration\",\n \"test:e2e\",\n \"dev:postgres\",\n \"dev:postgres:down\",\n \"dev:postgres:reset\",\n \"dev:ui\",\n \"dev:api\",\n ]) {\n if (!(obsoleteScript in childScripts)) {\n delete scripts[obsoleteScript];\n }\n }\n\n if (pkg.devDependencies && typeof pkg.devDependencies === \"object\") {\n const deps = pkg.devDependencies as Record<string, string>;\n delete deps[\"every-plugin\"];\n delete deps[\"everything-dev\"];\n }\n\n if (!pkg.workspaces || typeof pkg.workspaces !== \"object\") {\n pkg.workspaces = { packages: [], catalog: {} };\n }\n const workspaces = pkg.workspaces as { packages?: string[]; catalog?: Record<string, string> };\n if (!workspaces.catalog || typeof workspaces.catalog !== \"object\") {\n workspaces.catalog = {};\n }\n\n if (!pkg.dependencies) pkg.dependencies = {};\n const deps = pkg.dependencies as Record<string, string>;\n const spec = opts.workspaceOpts?.sourceDir\n ? loadManifestNormalizationSpec(opts.workspaceOpts.sourceDir)\n : null;\n if (spec) {\n workspaces.catalog[\"everything-dev\"] = spec.rootCatalog[\"everything-dev\"];\n workspaces.catalog[\"every-plugin\"] = spec.rootCatalog[\"every-plugin\"];\n }\n const frameworkCatalog = (\n await resolveCatalogChainSource({\n extendsAccount: opts.extendsAccount,\n extendsGateway: opts.extendsGateway,\n sourceDir: opts.workspaceOpts?.sourceDir,\n })\n ).catalog;\n for (const [name, version] of Object.entries(frameworkCatalog)) {\n workspaces.catalog[name] = version;\n }\n if (!deps[\"everything-dev\"]) deps[\"everything-dev\"] = \"catalog:\";\n if (!deps[\"every-plugin\"]) deps[\"every-plugin\"] = \"catalog:\";\n\n writeFileSync(pkgPath, `${JSON.stringify(pkg, null, 2)}\\n`);\n }\n\n const apiTsConfigPath = join(destination, \"api\", \"tsconfig.json\");\n if (existsSync(apiTsConfigPath)) {\n const apiTsConfig = JSON.parse(readFileSync(apiTsConfigPath, \"utf-8\")) as {\n files?: string[];\n [key: string]: unknown;\n };\n if (apiTsConfig.files) {\n const validFiles = apiTsConfig.files.filter((f) => existsSync(join(destination, \"api\", f)));\n if (validFiles.length !== apiTsConfig.files.length) {\n if (validFiles.length === 0) {\n delete apiTsConfig.files;\n } else {\n apiTsConfig.files = validFiles;\n }\n writeFileSync(apiTsConfigPath, `${JSON.stringify(apiTsConfig, null, 2)}\\n`);\n }\n }\n }\n\n await resolveWorkspaceRefs(destination, opts.workspaceOpts);\n\n if (has(\"ui\")) {\n const genContractPath = join(destination, \"ui\", \"src\", \"lib\", \"api-types.gen.ts\");\n if (!existsSync(genContractPath)) {\n mkdirSync(dirname(genContractPath), { recursive: true });\n writeFileSync(genContractPath, `export type ApiContract = Record<string, never>;\\n`);\n }\n }\n\n if (has(\"api\")) {\n const pluginsClientGenPath = join(destination, \"api\", \"src\", \"lib\", \"plugins-types.gen.ts\");\n if (!existsSync(pluginsClientGenPath)) {\n mkdirSync(dirname(pluginsClientGenPath), { recursive: true });\n writeFileSync(\n pluginsClientGenPath,\n `import type { ContractRouterClient, AnyContractRouter } from \"@orpc/contract\";\\ntype ClientFactory<C extends AnyContractRouter> = (context?: Record<string, unknown>) => ContractRouterClient<C>;\\nexport type PluginsClient = Record<string, never>;\\n`,\n );\n }\n }\n\n const authTypesPaths: string[] = [];\n if (has(\"ui\")) {\n authTypesPaths.push(join(destination, \"ui\", \"src\", \"lib\", \"auth-types.gen.ts\"));\n }\n if (has(\"api\")) {\n authTypesPaths.push(join(destination, \"api\", \"src\", \"lib\", \"auth-types.gen.ts\"));\n }\n if (has(\"host\") && existsSync(join(destination, \"host\", \"src\"))) {\n authTypesPaths.push(join(destination, \"host\", \"src\", \"lib\", \"auth-types.gen.ts\"));\n }\n for (const authTypesGenPath of authTypesPaths) {\n if (!existsSync(authTypesGenPath)) {\n mkdirSync(dirname(authTypesGenPath), { recursive: true });\n writeFileSync(authTypesGenPath, generateAuthTypesContent(authTypesGenPath, destination));\n }\n }\n\n if (authTypesPaths.length > 0) {\n const authDir = join(destination, \".bos\", \"generated\", \"auth\");\n if (!existsSync(authDir)) {\n mkdirSync(authDir, { recursive: true });\n }\n const authExportStubPath = join(authDir, \"auth-export.d.ts\");\n if (!existsSync(authExportStubPath)) {\n writeFileSync(\n authExportStubPath,\n `export type Auth = any;\nexport type AuthOrganizationContext = any;\nexport type AuthOrganization = any;\nexport type AuthOrganizationSummary = any;\nexport type AuthOrganizationMember = any;\nexport type AuthApiKey = any;\nexport type AuthInvitation = any;\nexport type GetActiveMemberInput = any;\nexport type GetOrganizationInput = any;\nexport type ListMembersInput = any;\nexport type ListInvitationsInput = any;\nexport type ListApiKeysInput = any;\nexport type AuthServices = any;\nexport type createAuthInstance = any;\n`,\n );\n }\n const contractStubPath = join(authDir, \"contract.d.ts\");\n if (!existsSync(contractStubPath)) {\n writeFileSync(\n contractStubPath,\n `export type ContractType = any;\nexport type InferOutput<_TRoute extends string> = any;\n`,\n );\n }\n }\n\n if (has(\"plugins\")) {\n for (const plugin of opts.plugins ?? []) {\n const pluginSrcDir = join(destination, \"plugins\", plugin, \"src\");\n const pluginIndexPath = join(pluginSrcDir, \"index.ts\");\n const pluginClientGenPath = join(pluginSrcDir, \"plugins-client.gen.ts\");\n if (!existsSync(pluginIndexPath) || existsSync(pluginClientGenPath)) {\n continue;\n }\n const pluginIndex = readFileSync(pluginIndexPath, \"utf-8\");\n if (!pluginIndex.includes(\"./plugins-client.gen\")) {\n continue;\n }\n writeFileSync(pluginClientGenPath, \"export type PluginsClient = Record<string, never>;\\n\");\n }\n }\n}\n\nfunction generateAuthTypesContent(targetPath: string, configDir: string): string {\n const authExportRel = toRelativeImportPath(\n join(configDir, \".bos\", \"generated\", \"auth\", \"auth-export.d.ts\"),\n targetPath,\n );\n const contractRel = toRelativeImportPath(\n join(configDir, \".bos\", \"generated\", \"auth\", \"contract.d.ts\"),\n targetPath,\n );\n\n return `export type {\n Auth,\n AuthOrganizationContext,\n AuthOrganization,\n AuthOrganizationSummary,\n AuthOrganizationMember,\n AuthApiKey,\n AuthInvitation,\n GetActiveMemberInput,\n GetOrganizationInput,\n ListMembersInput,\n ListInvitationsInput,\n ListApiKeysInput,\n AuthServices,\n createAuthInstance,\n} from \"${authExportRel}\";\nimport type { InferOutput, ContractType as AuthContract } from \"${contractRel}\";\nimport type { Auth as BaseAuth } from \"${authExportRel}\";\n\ntype RawAuthSession = InferOutput<\"getSession\">;\ntype RawAuthRequestContext = InferOutput<\"getContext\">;\ntype RawAuthActiveMember = InferOutput<\"getActiveMember\">;\n\nexport type AuthSessionUser = NonNullable<RawAuthSession[\"user\"]> & {\n role?: string | null;\n isAnonymous?: boolean | null;\n walletAddress?: string | null;\n banned?: boolean | null;\n};\nexport type AuthSessionData = NonNullable<RawAuthSession[\"session\"]> & {\n activeOrganizationId?: string | null;\n};\nexport type AuthSession = {\n user: AuthSessionUser | null;\n session: AuthSessionData | null;\n};\nexport type AuthRequestContext = RawAuthRequestContext & {\n organization?: { activeOrganizationId?: string | null } | null;\n apiKey?: { id: string; permissions?: Record<string, string[]> | null } | null;\n};\nexport type AuthActiveMember = RawAuthActiveMember;\nexport type AuthBaseSession = BaseAuth[\"$Infer\"][\"Session\"];\nexport type AuthContractType = AuthContract;\n`;\n}\n\nfunction toRelativeImportPath(fromPath: string, toPath: string): string {\n const rel = relative(dirname(toPath), fromPath);\n return rel.startsWith(\".\") ? rel : `./${rel}`;\n}\n\nexport async function runBunInstall(\n destination: string,\n spinner?: { message: (msg: string) => void },\n): Promise<void> {\n await runWithProgress(\n \"bun\",\n [\"install\", \"--ignore-scripts\"],\n destination,\n spinner,\n \"Installing dependencies\",\n );\n}\n\nexport async function runBunInstallForUpgrade(\n destination: string,\n spinner?: { message: (msg: string) => void },\n): Promise<void> {\n await runWithProgress(\n \"bun\",\n [\"install\", \"--force\"],\n destination,\n spinner,\n \"Installing dependencies\",\n );\n}\n\nexport async function runTypesGen(\n destination: string,\n spinner?: { message: (msg: string) => void },\n): Promise<void> {\n const localBosBin = join(destination, \"node_modules\", \".bin\", \"bos\");\n if (existsSync(localBosBin)) {\n await runWithProgress(\n \"node_modules/.bin/bos\",\n [\"types\", \"gen\"],\n destination,\n spinner,\n \"Generating types\",\n );\n return;\n }\n\n throw new Error(\"Unable to locate bos CLI for types generation\");\n}\n\nexport async function runDockerComposeUp(destination: string): Promise<void> {\n await execCommand(\"docker\", [\"compose\", \"up\", \"-d\", \"--wait\"], destination, { stdio: \"inherit\" });\n}\n\nasync function runWithProgress(\n command: string,\n args: string[],\n cwd: string,\n spinner: { message: (msg: string) => void } | undefined,\n label: string,\n): Promise<void> {\n const timeout = COMMAND_TIMEOUTS[command] ?? 2 * 60_000;\n const child = execa(command, args, { cwd, stdio: \"inherit\", timeout });\n\n if (spinner) {\n const start = Date.now();\n const interval = setInterval(() => {\n const elapsed = Math.round((Date.now() - start) / 1000);\n spinner.message(`${label}... (${elapsed}s)`);\n }, 2000);\n try {\n await child;\n } finally {\n clearInterval(interval);\n }\n } else {\n await child;\n }\n}\n\nexport function stripOrphanedWorkspacesFromLockfile(\n lockfilePath: string,\n allowedWorkspaces: string[],\n): void {\n if (!existsSync(lockfilePath)) return;\n\n const content = readFileSync(lockfilePath, \"utf-8\");\n let lockfile: Record<string, unknown>;\n try {\n lockfile = JSON.parse(content) as Record<string, unknown>;\n } catch {\n return;\n }\n\n const workspaces = lockfile.workspaces;\n if (!workspaces || typeof workspaces !== \"object\") return;\n\n const workspaceMap = workspaces as Record<string, unknown>;\n const allowed = new Set([\"\", ...allowedWorkspaces]);\n\n const keys = Object.keys(workspaceMap);\n let changed = false;\n for (const key of keys) {\n if (allowed.has(key)) continue;\n if (\n allowedWorkspaces.some(\n (pattern) => pattern.endsWith(\"/*\") && key.startsWith(pattern.slice(0, -1)),\n )\n )\n continue;\n delete workspaceMap[key];\n changed = true;\n }\n\n if (changed) {\n writeFileSync(lockfilePath, `${JSON.stringify(lockfile, null, 2)}\\n`);\n }\n}\n\nexport function removeInitLockfile(lockfilePath: string): void {\n if (!existsSync(lockfilePath)) return;\n rmSync(lockfilePath, { force: true });\n}\n\nfunction readJsonFile<T>(filePath: string): T {\n return JSON.parse(readFileSync(filePath, \"utf-8\")) as T;\n}\n\nexport async function scaffoldMinimalProject(\n destination: string,\n parentConfig: BosConfigInput,\n opts: {\n extendsAccount: string;\n extendsGateway: string;\n account?: string;\n domain?: string;\n plugins?: string[];\n overrides: OverrideSection[];\n repository?: string;\n title?: string;\n description?: string;\n },\n): Promise<number> {\n mkdirSync(destination, { recursive: true });\n\n const has = (section: OverrideSection) => opts.overrides.includes(section);\n\n const config: Record<string, unknown> = {\n extends: `bos://${opts.extendsAccount}/${opts.extendsGateway}`,\n account: opts.account || opts.extendsAccount,\n ...(opts.domain ? { domain: opts.domain } : {}),\n ...(opts.repository ? { repository: opts.repository } : {}),\n ...(opts.title ? { title: opts.title } : {}),\n ...(opts.description ? { description: opts.description } : {}),\n };\n\n if (parentConfig.app && typeof parentConfig.app === \"object\") {\n const app: Record<string, unknown> = {};\n const parentApp = parentConfig.app as Record<string, Record<string, unknown>>;\n\n if (has(\"host\") && parentApp.host) {\n app.host = { ...parentApp.host };\n stripProductionFields(app.host as Record<string, unknown>);\n }\n\n if (has(\"ui\") && parentApp.ui) {\n app.ui = { ...parentApp.ui };\n stripProductionFields(app.ui as Record<string, unknown>);\n }\n\n if (has(\"api\") && parentApp.api) {\n app.api = { ...parentApp.api };\n stripProductionFields(app.api as Record<string, unknown>);\n }\n\n if (Object.keys(app).length > 0) {\n config.app = app;\n }\n }\n\n if (has(\"plugins\") && opts.plugins && opts.plugins.length > 0 && parentConfig.plugins) {\n const plugins: Record<string, unknown> = {};\n for (const key of opts.plugins) {\n const parentPlugin = (parentConfig.plugins as Record<string, unknown>)?.[key];\n if (parentPlugin) {\n if (typeof parentPlugin === \"string\") {\n plugins[key] = { extends: parentPlugin };\n } else {\n const pluginCopy = { ...(parentPlugin as Record<string, unknown>) };\n stripProductionFields(pluginCopy);\n plugins[key] = pluginCopy;\n }\n }\n }\n config.plugins = plugins;\n } else if (has(\"plugins\")) {\n config.plugins = {};\n }\n\n await saveBosConfig(destination, config);\n\n const workspacePackages: string[] = [];\n for (const section of opts.overrides) {\n workspacePackages.push(...OVERRIDE_WORKSPACE_MAP[section]);\n }\n if (has(\"plugins\")) {\n workspacePackages.push(\"plugins/*\");\n }\n\n const catalog = (\n await resolveCatalogChainSource({\n extendsAccount: opts.extendsAccount,\n extendsGateway: opts.extendsGateway,\n })\n ).catalog;\n\n const pkg: Record<string, unknown> = {\n name: \"monorepo\",\n private: true,\n type: \"module\",\n scripts: buildChildRootScripts({\n ui: has(\"ui\"),\n api: has(\"api\"),\n host: has(\"host\"),\n plugins: has(\"plugins\"),\n }),\n dependencies: {\n \"everything-dev\": \"catalog:\",\n \"every-plugin\": \"catalog:\",\n },\n devDependencies: {},\n workspaces: {\n packages: workspacePackages,\n catalog,\n },\n };\n writeFileSync(join(destination, \"package.json\"), `${JSON.stringify(pkg, null, 2)}\\n`);\n\n writeFileSync(join(destination, \".gitignore\"), generateGitignore());\n\n return 4;\n}\n\nasync function resolveWorkspaceRefs(\n destination: string,\n options?: { localOverrides?: boolean; sourceDir?: string },\n): Promise<void> {\n await normalizePackageManifestsInTree({\n sourceRootDir: options?.sourceDir ?? destination,\n targetDir: destination,\n resolveCatalogRefs: false,\n preserveCatalogRefs: true,\n removeWorkspaceDeps: [\"host\"],\n });\n}\n\nexport async function writeInitSnapshot(\n destination: string,\n extendsAccount: string,\n extendsGateway: string,\n sourceDir: string,\n patterns: string[],\n _options: {\n overrides: OverrideSection[];\n plugins?: string[];\n },\n): Promise<void> {\n const allFiles = new Set<string>();\n for (const pattern of patterns) {\n const matches = await glob(pattern, {\n cwd: sourceDir,\n nodir: true,\n dot: true,\n absolute: false,\n ignore: [\"**/node_modules/**\", \"**/.git/**\", \"**/dist/**\", \"**/.bos/**\"],\n });\n for (const match of matches) {\n allFiles.add(match);\n }\n }\n\n const fileHashes: Record<string, string> = {};\n for (const filePath of allFiles) {\n const src = join(sourceDir, filePath);\n const stat = lstatSync(src);\n if (!stat.isFile()) continue;\n const content = readFileSync(src);\n const destPath = sourcePathToDestinationPath(filePath);\n fileHashes[destPath] = computeHash(content);\n }\n\n await writeSnapshot(destination, {\n parentRef: `bos://${extendsAccount}/${extendsGateway}`,\n files: fileHashes,\n });\n}\n\nfunction computeHash(data: Uint8Array): string {\n return createHash(\"sha256\").update(data).digest(\"hex\").substring(0, 16);\n}\n\nfunction mkTmpDir(prefix: string): string {\n return mkdtempSync(join(tmpdir(), `${prefix}-`));\n}\n\nexport async function generateDatabaseMigrations(destination: string): Promise<void> {\n const drizzleConfigs = await glob(\"**/drizzle.config.ts\", {\n cwd: destination,\n nodir: true,\n dot: false,\n absolute: false,\n ignore: [\"**/node_modules/**\"],\n });\n\n for (const configPath of drizzleConfigs) {\n const workspaceDir = dirname(configPath);\n const pkgPath = join(destination, workspaceDir, \"package.json\");\n if (!existsSync(pkgPath)) continue;\n\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\")) as Record<string, unknown>;\n const scripts = pkg.scripts as Record<string, string> | undefined;\n if (!scripts?.[\"db:generate\"]) continue;\n\n const cwd = join(destination, workspaceDir);\n await execCommand(\"bun\", [\"run\", \"db:generate\"], cwd);\n }\n}\n\nconst COMMAND_TIMEOUTS: Record<string, number> = {\n bun: 5 * 60_000,\n docker: 5 * 60_000,\n node_modules: 2 * 60_000,\n tar: 60_000,\n};\n\nexport async function execCommand(\n command: string,\n args: string[],\n cwd?: string,\n options?: { stdio?: \"pipe\" | \"inherit\" },\n): Promise<void> {\n const timeout = COMMAND_TIMEOUTS[command] ?? 2 * 60_000;\n await execa(command, args, { cwd, stdio: options?.stdio ?? \"pipe\", timeout });\n}\n\nfunction generateGitignore(): string {\n return `node_modules/\ndist/\n.env\n.bos/\ndocker-compose.yml\n*.gen.ts\n*.gen.tsx\n`;\n}\n"],"mappings":"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"}
|
package/dist/contract.d.cts
CHANGED
|
@@ -281,8 +281,8 @@ declare const PublishOptionsSchema: z.ZodObject<{
|
|
|
281
281
|
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
282
282
|
packages: z.ZodDefault<z.ZodString>;
|
|
283
283
|
network: z.ZodOptional<z.ZodEnum<{
|
|
284
|
-
testnet: "testnet";
|
|
285
284
|
mainnet: "mainnet";
|
|
285
|
+
testnet: "testnet";
|
|
286
286
|
}>>;
|
|
287
287
|
privateKey: z.ZodOptional<z.ZodString>;
|
|
288
288
|
env: z.ZodDefault<z.ZodEnum<{
|
|
@@ -311,8 +311,8 @@ declare const DeployOptionsSchema: z.ZodObject<{
|
|
|
311
311
|
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
312
312
|
packages: z.ZodDefault<z.ZodString>;
|
|
313
313
|
network: z.ZodOptional<z.ZodEnum<{
|
|
314
|
-
testnet: "testnet";
|
|
315
314
|
mainnet: "mainnet";
|
|
315
|
+
testnet: "testnet";
|
|
316
316
|
}>>;
|
|
317
317
|
privateKey: z.ZodOptional<z.ZodString>;
|
|
318
318
|
service: z.ZodOptional<z.ZodString>;
|
|
@@ -342,8 +342,8 @@ declare const KeyPublishResultSchema: z.ZodObject<{
|
|
|
342
342
|
}>;
|
|
343
343
|
account: z.ZodString;
|
|
344
344
|
network: z.ZodEnum<{
|
|
345
|
-
testnet: "testnet";
|
|
346
345
|
mainnet: "mainnet";
|
|
346
|
+
testnet: "testnet";
|
|
347
347
|
}>;
|
|
348
348
|
contract: z.ZodString;
|
|
349
349
|
allowance: z.ZodString;
|
|
@@ -353,20 +353,20 @@ declare const KeyPublishResultSchema: z.ZodObject<{
|
|
|
353
353
|
error: z.ZodOptional<z.ZodString>;
|
|
354
354
|
}, z.core.$strip>;
|
|
355
355
|
declare const OverrideSectionSchema: z.ZodEnum<{
|
|
356
|
-
plugins: "plugins";
|
|
357
356
|
ui: "ui";
|
|
358
|
-
host: "host";
|
|
359
357
|
api: "api";
|
|
358
|
+
plugins: "plugins";
|
|
359
|
+
host: "host";
|
|
360
360
|
}>;
|
|
361
361
|
declare const RuntimeOverrideTargetBaseSchema: z.ZodEnum<{
|
|
362
|
-
plugins: "plugins";
|
|
363
362
|
ui: "ui";
|
|
364
363
|
api: "api";
|
|
364
|
+
plugins: "plugins";
|
|
365
365
|
}>;
|
|
366
366
|
declare const RuntimeOverrideTargetSchema: z.ZodUnion<readonly [z.ZodEnum<{
|
|
367
|
-
plugins: "plugins";
|
|
368
367
|
ui: "ui";
|
|
369
368
|
api: "api";
|
|
369
|
+
plugins: "plugins";
|
|
370
370
|
}>, z.ZodString]>;
|
|
371
371
|
declare const InitOptionsSchema: z.ZodObject<{
|
|
372
372
|
extends: z.ZodOptional<z.ZodString>;
|
|
@@ -376,10 +376,10 @@ declare const InitOptionsSchema: z.ZodObject<{
|
|
|
376
376
|
source: z.ZodOptional<z.ZodString>;
|
|
377
377
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
378
378
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
379
|
-
plugins: "plugins";
|
|
380
379
|
ui: "ui";
|
|
381
|
-
host: "host";
|
|
382
380
|
api: "api";
|
|
381
|
+
plugins: "plugins";
|
|
382
|
+
host: "host";
|
|
383
383
|
}>>>;
|
|
384
384
|
noInteractive: z.ZodDefault<z.ZodBoolean>;
|
|
385
385
|
noInstall: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -400,10 +400,10 @@ declare const InitResultSchema: z.ZodObject<{
|
|
|
400
400
|
extends: z.ZodString;
|
|
401
401
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
402
402
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
403
|
-
plugins: "plugins";
|
|
404
403
|
ui: "ui";
|
|
405
|
-
host: "host";
|
|
406
404
|
api: "api";
|
|
405
|
+
plugins: "plugins";
|
|
406
|
+
host: "host";
|
|
407
407
|
}>>>;
|
|
408
408
|
filesCopied: z.ZodNumber;
|
|
409
409
|
timings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -781,8 +781,8 @@ declare const bosContract: {
|
|
|
781
781
|
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
782
782
|
packages: z.ZodDefault<z.ZodString>;
|
|
783
783
|
network: z.ZodOptional<z.ZodEnum<{
|
|
784
|
-
testnet: "testnet";
|
|
785
784
|
mainnet: "mainnet";
|
|
785
|
+
testnet: "testnet";
|
|
786
786
|
}>>;
|
|
787
787
|
privateKey: z.ZodOptional<z.ZodString>;
|
|
788
788
|
env: z.ZodDefault<z.ZodEnum<{
|
|
@@ -810,8 +810,8 @@ declare const bosContract: {
|
|
|
810
810
|
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
811
811
|
packages: z.ZodDefault<z.ZodString>;
|
|
812
812
|
network: z.ZodOptional<z.ZodEnum<{
|
|
813
|
-
testnet: "testnet";
|
|
814
813
|
mainnet: "mainnet";
|
|
814
|
+
testnet: "testnet";
|
|
815
815
|
}>>;
|
|
816
816
|
privateKey: z.ZodOptional<z.ZodString>;
|
|
817
817
|
service: z.ZodOptional<z.ZodString>;
|
|
@@ -839,8 +839,8 @@ declare const bosContract: {
|
|
|
839
839
|
}>;
|
|
840
840
|
account: z.ZodString;
|
|
841
841
|
network: z.ZodEnum<{
|
|
842
|
-
testnet: "testnet";
|
|
843
842
|
mainnet: "mainnet";
|
|
843
|
+
testnet: "testnet";
|
|
844
844
|
}>;
|
|
845
845
|
contract: z.ZodString;
|
|
846
846
|
allowance: z.ZodString;
|
|
@@ -857,10 +857,10 @@ declare const bosContract: {
|
|
|
857
857
|
source: z.ZodOptional<z.ZodString>;
|
|
858
858
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
859
859
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
860
|
-
plugins: "plugins";
|
|
861
860
|
ui: "ui";
|
|
862
|
-
host: "host";
|
|
863
861
|
api: "api";
|
|
862
|
+
plugins: "plugins";
|
|
863
|
+
host: "host";
|
|
864
864
|
}>>>;
|
|
865
865
|
noInteractive: z.ZodDefault<z.ZodBoolean>;
|
|
866
866
|
noInstall: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -876,10 +876,10 @@ declare const bosContract: {
|
|
|
876
876
|
extends: z.ZodString;
|
|
877
877
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
878
878
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
879
|
-
plugins: "plugins";
|
|
880
879
|
ui: "ui";
|
|
881
|
-
host: "host";
|
|
882
880
|
api: "api";
|
|
881
|
+
plugins: "plugins";
|
|
882
|
+
host: "host";
|
|
883
883
|
}>>>;
|
|
884
884
|
filesCopied: z.ZodNumber;
|
|
885
885
|
timings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
package/dist/contract.d.mts
CHANGED
|
@@ -281,8 +281,8 @@ declare const PublishOptionsSchema: z.ZodObject<{
|
|
|
281
281
|
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
282
282
|
packages: z.ZodDefault<z.ZodString>;
|
|
283
283
|
network: z.ZodOptional<z.ZodEnum<{
|
|
284
|
-
testnet: "testnet";
|
|
285
284
|
mainnet: "mainnet";
|
|
285
|
+
testnet: "testnet";
|
|
286
286
|
}>>;
|
|
287
287
|
privateKey: z.ZodOptional<z.ZodString>;
|
|
288
288
|
env: z.ZodDefault<z.ZodEnum<{
|
|
@@ -311,8 +311,8 @@ declare const DeployOptionsSchema: z.ZodObject<{
|
|
|
311
311
|
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
312
312
|
packages: z.ZodDefault<z.ZodString>;
|
|
313
313
|
network: z.ZodOptional<z.ZodEnum<{
|
|
314
|
-
testnet: "testnet";
|
|
315
314
|
mainnet: "mainnet";
|
|
315
|
+
testnet: "testnet";
|
|
316
316
|
}>>;
|
|
317
317
|
privateKey: z.ZodOptional<z.ZodString>;
|
|
318
318
|
service: z.ZodOptional<z.ZodString>;
|
|
@@ -342,8 +342,8 @@ declare const KeyPublishResultSchema: z.ZodObject<{
|
|
|
342
342
|
}>;
|
|
343
343
|
account: z.ZodString;
|
|
344
344
|
network: z.ZodEnum<{
|
|
345
|
-
testnet: "testnet";
|
|
346
345
|
mainnet: "mainnet";
|
|
346
|
+
testnet: "testnet";
|
|
347
347
|
}>;
|
|
348
348
|
contract: z.ZodString;
|
|
349
349
|
allowance: z.ZodString;
|
|
@@ -353,20 +353,20 @@ declare const KeyPublishResultSchema: z.ZodObject<{
|
|
|
353
353
|
error: z.ZodOptional<z.ZodString>;
|
|
354
354
|
}, z.core.$strip>;
|
|
355
355
|
declare const OverrideSectionSchema: z.ZodEnum<{
|
|
356
|
-
plugins: "plugins";
|
|
357
356
|
ui: "ui";
|
|
358
|
-
host: "host";
|
|
359
357
|
api: "api";
|
|
358
|
+
plugins: "plugins";
|
|
359
|
+
host: "host";
|
|
360
360
|
}>;
|
|
361
361
|
declare const RuntimeOverrideTargetBaseSchema: z.ZodEnum<{
|
|
362
|
-
plugins: "plugins";
|
|
363
362
|
ui: "ui";
|
|
364
363
|
api: "api";
|
|
364
|
+
plugins: "plugins";
|
|
365
365
|
}>;
|
|
366
366
|
declare const RuntimeOverrideTargetSchema: z.ZodUnion<readonly [z.ZodEnum<{
|
|
367
|
-
plugins: "plugins";
|
|
368
367
|
ui: "ui";
|
|
369
368
|
api: "api";
|
|
369
|
+
plugins: "plugins";
|
|
370
370
|
}>, z.ZodString]>;
|
|
371
371
|
declare const InitOptionsSchema: z.ZodObject<{
|
|
372
372
|
extends: z.ZodOptional<z.ZodString>;
|
|
@@ -376,10 +376,10 @@ declare const InitOptionsSchema: z.ZodObject<{
|
|
|
376
376
|
source: z.ZodOptional<z.ZodString>;
|
|
377
377
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
378
378
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
379
|
-
plugins: "plugins";
|
|
380
379
|
ui: "ui";
|
|
381
|
-
host: "host";
|
|
382
380
|
api: "api";
|
|
381
|
+
plugins: "plugins";
|
|
382
|
+
host: "host";
|
|
383
383
|
}>>>;
|
|
384
384
|
noInteractive: z.ZodDefault<z.ZodBoolean>;
|
|
385
385
|
noInstall: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -400,10 +400,10 @@ declare const InitResultSchema: z.ZodObject<{
|
|
|
400
400
|
extends: z.ZodString;
|
|
401
401
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
402
402
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
403
|
-
plugins: "plugins";
|
|
404
403
|
ui: "ui";
|
|
405
|
-
host: "host";
|
|
406
404
|
api: "api";
|
|
405
|
+
plugins: "plugins";
|
|
406
|
+
host: "host";
|
|
407
407
|
}>>>;
|
|
408
408
|
filesCopied: z.ZodNumber;
|
|
409
409
|
timings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -781,8 +781,8 @@ declare const bosContract: {
|
|
|
781
781
|
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
782
782
|
packages: z.ZodDefault<z.ZodString>;
|
|
783
783
|
network: z.ZodOptional<z.ZodEnum<{
|
|
784
|
-
testnet: "testnet";
|
|
785
784
|
mainnet: "mainnet";
|
|
785
|
+
testnet: "testnet";
|
|
786
786
|
}>>;
|
|
787
787
|
privateKey: z.ZodOptional<z.ZodString>;
|
|
788
788
|
env: z.ZodDefault<z.ZodEnum<{
|
|
@@ -810,8 +810,8 @@ declare const bosContract: {
|
|
|
810
810
|
dryRun: z.ZodDefault<z.ZodBoolean>;
|
|
811
811
|
packages: z.ZodDefault<z.ZodString>;
|
|
812
812
|
network: z.ZodOptional<z.ZodEnum<{
|
|
813
|
-
testnet: "testnet";
|
|
814
813
|
mainnet: "mainnet";
|
|
814
|
+
testnet: "testnet";
|
|
815
815
|
}>>;
|
|
816
816
|
privateKey: z.ZodOptional<z.ZodString>;
|
|
817
817
|
service: z.ZodOptional<z.ZodString>;
|
|
@@ -839,8 +839,8 @@ declare const bosContract: {
|
|
|
839
839
|
}>;
|
|
840
840
|
account: z.ZodString;
|
|
841
841
|
network: z.ZodEnum<{
|
|
842
|
-
testnet: "testnet";
|
|
843
842
|
mainnet: "mainnet";
|
|
843
|
+
testnet: "testnet";
|
|
844
844
|
}>;
|
|
845
845
|
contract: z.ZodString;
|
|
846
846
|
allowance: z.ZodString;
|
|
@@ -857,10 +857,10 @@ declare const bosContract: {
|
|
|
857
857
|
source: z.ZodOptional<z.ZodString>;
|
|
858
858
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
859
859
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
860
|
-
plugins: "plugins";
|
|
861
860
|
ui: "ui";
|
|
862
|
-
host: "host";
|
|
863
861
|
api: "api";
|
|
862
|
+
plugins: "plugins";
|
|
863
|
+
host: "host";
|
|
864
864
|
}>>>;
|
|
865
865
|
noInteractive: z.ZodDefault<z.ZodBoolean>;
|
|
866
866
|
noInstall: z.ZodDefault<z.ZodBoolean>;
|
|
@@ -876,10 +876,10 @@ declare const bosContract: {
|
|
|
876
876
|
extends: z.ZodString;
|
|
877
877
|
plugins: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
878
878
|
overrides: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
879
|
-
plugins: "plugins";
|
|
880
879
|
ui: "ui";
|
|
881
|
-
host: "host";
|
|
882
880
|
api: "api";
|
|
881
|
+
plugins: "plugins";
|
|
882
|
+
host: "host";
|
|
883
883
|
}>>>;
|
|
884
884
|
filesCopied: z.ZodNumber;
|
|
885
885
|
timings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
package/dist/plugin.cjs
CHANGED
|
@@ -1316,10 +1316,6 @@ async function publishToFastKv(input) {
|
|
|
1316
1316
|
const network = input.network ?? require_network.getNetworkIdForAccount(account);
|
|
1317
1317
|
const registryUrl = require_fastkv.buildRegistryConfigUrlForNetwork(network, account, gateway);
|
|
1318
1318
|
const targets = selectWorkspaceTargets(input.packages, bosConfig);
|
|
1319
|
-
let publishConfig = isStaging ? {
|
|
1320
|
-
...bosConfig,
|
|
1321
|
-
domain: gateway
|
|
1322
|
-
} : bosConfig;
|
|
1323
1319
|
let built;
|
|
1324
1320
|
let skipped;
|
|
1325
1321
|
if (dryRun) return {
|
|
@@ -1351,12 +1347,14 @@ async function publishToFastKv(input) {
|
|
|
1351
1347
|
error: "Failed to reload bos.config.json after build"
|
|
1352
1348
|
};
|
|
1353
1349
|
bosConfig = refreshed.config;
|
|
1354
|
-
publishConfig = isStaging ? {
|
|
1355
|
-
...refreshed.config,
|
|
1356
|
-
domain: gateway
|
|
1357
|
-
} : refreshed.config;
|
|
1358
1350
|
}
|
|
1359
|
-
const
|
|
1351
|
+
const rawConfigPath = (0, node_path.join)(configDir, "bos.config.json");
|
|
1352
|
+
const rawConfig = JSON.parse((0, node_fs.readFileSync)(rawConfigPath, "utf-8"));
|
|
1353
|
+
const publishPayload = isStaging ? {
|
|
1354
|
+
...rawConfig,
|
|
1355
|
+
domain: gateway
|
|
1356
|
+
} : rawConfig;
|
|
1357
|
+
const registryEntries = { [`apps/${account}/${gateway}/bos.config.json`]: JSON.stringify(publishPayload) };
|
|
1360
1358
|
const payload = JSON.stringify(registryEntries);
|
|
1361
1359
|
const argsBase64 = Buffer.from(payload).toString("base64");
|
|
1362
1360
|
const privateKey = input.privateKey || node_process.default.env.NEAR_PRIVATE_KEY || node_process.default.env.BOS_NEAR_PRIVATE_KEY;
|
|
@@ -1399,7 +1397,7 @@ async function publishToFastKv(input) {
|
|
|
1399
1397
|
await waitForPublishedConfig({
|
|
1400
1398
|
account,
|
|
1401
1399
|
gateway,
|
|
1402
|
-
publishConfig
|
|
1400
|
+
publishConfig: publishPayload
|
|
1403
1401
|
});
|
|
1404
1402
|
return {
|
|
1405
1403
|
status: "published",
|
|
@@ -1407,7 +1405,7 @@ async function publishToFastKv(input) {
|
|
|
1407
1405
|
txHash,
|
|
1408
1406
|
built,
|
|
1409
1407
|
skipped,
|
|
1410
|
-
publishConfig
|
|
1408
|
+
publishConfig: publishPayload
|
|
1411
1409
|
};
|
|
1412
1410
|
} catch (error) {
|
|
1413
1411
|
return {
|