UNPKG

@alavida/agentpack

Version:

Compiler-driven lifecycle CLI for source-backed agent skills

94 lines (80 loc) 2.35 kB
import { existsSync, readFileSync } from 'node:fs'; import { join } from 'node:path'; import { readUserConfig } from '../../infrastructure/fs/user-config-repository.js'; import { readUserCredentials } from '../../infrastructure/fs/user-credentials-repository.js'; import { getUserNpmrcPath, parseNpmrc, readUserNpmrc } from '../../infrastructure/fs/user-npmrc-repository.js'; import { resolveRegistryConfig } from '../../domain/auth/registry-resolution.js'; function findRepoNpmrc(cwd) { let current = cwd; while (true) { const npmrcPath = join(current, '.npmrc'); if (existsSync(npmrcPath)) { return { path: npmrcPath, config: parseNpmrc(readFileSync(npmrcPath, 'utf-8')), }; } const gitPath = join(current, '.git'); if (existsSync(gitPath)) break; const parent = join(current, '..'); if (parent === current) break; current = parent; } return { path: null, config: {}, }; } export async function getAuthStatus({ cwd = process.cwd(), env = process.env, verify = false, } = {}) { const config = readUserConfig({ env }); const credentials = readUserCredentials({ env }); const userNpmrc = readUserNpmrc({ env }); const repoNpmrc = findRepoNpmrc(cwd); const resolved = resolveRegistryConfig({ scope: config.scope, defaults: { registry: config.registry, }, userNpmrc, repoNpmrc: repoNpmrc.config, }); const userNpmrcPath = getUserNpmrcPath({ env }); const requiredRegistryKey = `${config.scope}:registry`; const requiredTokenKey = resolved.registry ? `//${new URL(resolved.registry).host}/:_authToken` : null; const npmWired = Boolean( userNpmrc[requiredRegistryKey] && requiredTokenKey && userNpmrc[requiredTokenKey] ); const result = { provider: config.provider, configured: Boolean(credentials?.token && npmWired), scope: config.scope, registry: resolved.registry, storage: { mode: credentials?.token ? 'file' : 'missing', }, npmConfig: { path: userNpmrcPath, wired: npmWired, source: resolved.source, repoOverridePath: repoNpmrc.path, }, verification: { status: 'not_checked', }, }; if (!verify) { return result; } result.verification = { status: 'unsupported', }; return result; }