{"version":3,"sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from 'commander';\n\nimport { Identity, Policy } from './domain';\nimport { SecretManager } from './manager';\nimport {\n  FileSecretStore,\n  GCPStorageSecretStore,\n  PostgreSQLSecretStore,\n  S3SecretStore,\n  type SecretStore,\n  type SecretStoreConfig,\n} from './storage';\n\ntype GlobalOptions = {\n  store: string;\n  masterKey: string;\n  auditLog?: string;\n  tenant?: string;\n  subject?: string;\n  storage?: 'file' | 's3' | 'gcp' | 'postgres';\n  s3Bucket?: string;\n  s3Region?: string;\n  gcpBucket?: string;\n  gcpProjectId?: string;\n  dbConnectionString?: string;\n};\n\ntype StoreOptions = {\n  storage?: 'file' | 's3' | 'gcp' | 'postgres';\n  filePath: string;\n  s3Bucket?: string;\n  s3Region?: string;\n  gcpBucket?: string;\n  gcpProjectId?: string;\n  dbConnectionString?: string;\n};\n\nfunction createStore(baseConfig: SecretStoreConfig, options: StoreOptions): SecretStore {\n  const storage = options.storage ?? 'file';\n  switch (storage) {\n    case 's3': {\n      if (!options.s3Bucket || !options.s3Region) {\n        throw new Error('S3 bucket and region are required for S3 storage');\n      }\n      return new S3SecretStore({\n        ...baseConfig,\n        bucket: options.s3Bucket,\n        region: options.s3Region,\n      });\n    }\n    case 'gcp': {\n      if (!options.gcpBucket) {\n        throw new Error('GCP bucket is required for GCP storage');\n      }\n      return new GCPStorageSecretStore({\n        ...baseConfig,\n        bucket: options.gcpBucket,\n        ...(options.gcpProjectId ? { projectId: options.gcpProjectId } : {}),\n      });\n    }\n    case 'postgres': {\n      if (!options.dbConnectionString) {\n        throw new Error('Database connection string is required for PostgreSQL storage');\n      }\n      return new PostgreSQLSecretStore({\n        ...baseConfig,\n        connectionString: options.dbConnectionString,\n      });\n    }\n    case 'file': {\n      return new FileSecretStore(options.filePath, baseConfig);\n    }\n  }\n}\n\nfunction buildManager(options: {\n  store: string;\n  masterKey: string;\n  auditLog?: string | undefined;\n  storage?: 'file' | 's3' | 'gcp' | 'postgres';\n  s3Bucket?: string;\n  s3Region?: string;\n  gcpBucket?: string;\n  gcpProjectId?: string;\n  dbConnectionString?: string;\n}): SecretManager {\n  const baseConfig: SecretStoreConfig = {\n    masterKey: options.masterKey,\n    ...(options.auditLog ? { auditLogPath: options.auditLog } : {}),\n  };\n\n  const store = createStore(baseConfig, {\n    filePath: options.store,\n    ...(options.storage ? { storage: options.storage } : {}),\n    ...(options.s3Bucket ? { s3Bucket: options.s3Bucket } : {}),\n    ...(options.s3Region ? { s3Region: options.s3Region } : {}),\n    ...(options.gcpBucket ? { gcpBucket: options.gcpBucket } : {}),\n    ...(options.gcpProjectId ? { gcpProjectId: options.gcpProjectId } : {}),\n    ...(options.dbConnectionString ? { dbConnectionString: options.dbConnectionString } : {}),\n  });\n\n  return new SecretManager(store);\n}\n\nfunction buildStoreFromGlobals(globals: GlobalOptions): SecretStore {\n  const baseConfig: SecretStoreConfig = {\n    masterKey: globals.masterKey,\n    ...(globals.auditLog ? { auditLogPath: globals.auditLog } : {}),\n  };\n\n  return createStore(baseConfig, {\n    filePath: globals.store,\n    ...(globals.storage ? { storage: globals.storage } : {}),\n    ...(globals.s3Bucket ? { s3Bucket: globals.s3Bucket } : {}),\n    ...(globals.s3Region ? { s3Region: globals.s3Region } : {}),\n    ...(globals.gcpBucket ? { gcpBucket: globals.gcpBucket } : {}),\n    ...(globals.gcpProjectId ? { gcpProjectId: globals.gcpProjectId } : {}),\n    ...(globals.dbConnectionString ? { dbConnectionString: globals.dbConnectionString } : {}),\n  });\n}\n\nfunction identity(subject: string, roles: string[], tenant: string): Identity {\n  return new Identity(subject, roles, tenant);\n}\n\nfunction buildManagerFromGlobals(globals: GlobalOptions): SecretManager {\n  return buildManager({\n    store: globals.store,\n    masterKey: globals.masterKey,\n    auditLog: globals.auditLog,\n    ...(globals.storage ? { storage: globals.storage } : {}),\n    ...(globals.s3Bucket ? { s3Bucket: globals.s3Bucket } : {}),\n    ...(globals.s3Region ? { s3Region: globals.s3Region } : {}),\n    ...(globals.gcpBucket ? { gcpBucket: globals.gcpBucket } : {}),\n    ...(globals.gcpProjectId ? { gcpProjectId: globals.gcpProjectId } : {}),\n    ...(globals.dbConnectionString ? { dbConnectionString: globals.dbConnectionString } : {}),\n  });\n}\n\nconst program = new Command();\nprogram\n  .name('secret-engine')\n  .description('Enterprise-ready secret manager CLI (TypeScript edition)')\n  .option('--store <path>', 'path to secrets store (for file storage)', './data/secrets.json')\n  .option('--audit-log <path>', 'path to audit log', './data/audit.log')\n  .requiredOption('--master-key <value>', 'master key for encrypting secrets')\n  .option('--tenant <name>', 'tenant namespace', 'default')\n  .option('--subject <name>', 'actor subject for audit logging', 'cli')\n  .option('--storage <type>', 'storage backend (file, s3, gcp, postgres)', 'file')\n  .option('--s3-bucket <bucket>', 'S3 bucket name for S3 storage')\n  .option('--s3-region <region>', 'AWS region for S3 storage')\n  .option('--gcp-bucket <bucket>', 'GCP bucket name for GCP storage')\n  .option('--gcp-project-id <projectId>', 'GCP project ID for GCP storage')\n  .option('--db-connection-string <conn>', 'PostgreSQL connection string for database storage');\n\nprogram\n  .command('create')\n  .description('Create a new secret')\n  .argument('name')\n  .argument('value')\n  .option('--description <text>')\n  .option('--policy-name <name>', 'policy name', 'default')\n  .option('--policy-description <text>', 'policy description', 'Default policy')\n  .option(\n    '--rotation-days <days>',\n    'rotation frequency in days',\n    (value) => parseInt(value, 10),\n    90\n  )\n  .option('--min-length <length>', 'minimum secret length', (value) => parseInt(value, 10), 16)\n  .option('--forbid-patterns <patterns...>', 'forbidden patterns')\n  .option('--ttl <seconds>', 'time-to-live in seconds', (value) => parseInt(value, 10))\n  .action(async (name, value, options) => {\n    const globals = program.opts() as GlobalOptions;\n    const manager = buildManagerFromGlobals(globals);\n    const actor = identity(\n      globals.subject ?? 'cli',\n      ['admin', 'writer', 'reader'],\n      globals.tenant ?? 'default'\n    );\n    const policy = new Policy(\n      options.policyName,\n      options.policyDescription,\n      options.rotationDays,\n      options.minLength,\n      options.forbidPatterns\n    );\n    const secret = await manager.createSecret(\n      name,\n      value,\n      policy,\n      actor,\n      options.description,\n      undefined,\n      options.ttl\n    );\n    console.info(\n      JSON.stringify({ id: secret.id, version: secret.latestVersion().version }, null, 2)\n    );\n  });\n\nprogram\n  .command('get')\n  .description('Retrieve a secret value')\n  .argument('secretId')\n  .action(async (secretId) => {\n    const globals = program.opts() as GlobalOptions;\n    const manager = buildManagerFromGlobals(globals);\n    const actor = identity(globals.subject ?? 'cli', ['reader'], globals.tenant ?? 'default');\n    const secret = await manager.getSecret(secretId, actor);\n    console.info(\n      JSON.stringify(\n        {\n          id: secret.id,\n          name: secret.name,\n          tenant: secret.tenant,\n          value: secret.latestVersion().value,\n          version: secret.latestVersion().version,\n        },\n        null,\n        2\n      )\n    );\n  });\n\nprogram\n  .command('put')\n  .description('Add a new version of a secret')\n  .argument('secretId')\n  .argument('value')\n  .option('--ttl <seconds>', 'time-to-live in seconds', (value) => parseInt(value, 10))\n  .action(async (secretId, value, options) => {\n    const globals = program.opts() as GlobalOptions;\n    const manager = buildManagerFromGlobals(globals);\n    const actor = identity(globals.subject ?? 'cli', ['writer'], globals.tenant ?? 'default');\n    const secret = await manager.putSecret(secretId, value, actor, options.ttl);\n    console.info(JSON.stringify({ version: secret.latestVersion().version }, null, 2));\n  });\n\nprogram\n  .command('list')\n  .description('List secrets for the tenant')\n  .action(async () => {\n    const globals = program.opts() as GlobalOptions;\n    const manager = buildManagerFromGlobals(globals);\n    const actor = identity(globals.subject ?? 'cli', ['reader'], globals.tenant ?? 'default');\n    const secrets = await manager.listSecrets(actor);\n    console.info(\n      JSON.stringify(\n        secrets.map((secret) => ({\n          id: secret.id,\n          name: secret.name,\n          tenant: secret.tenant,\n          version: secret.latestVersion().version,\n        })),\n        null,\n        2\n      )\n    );\n  });\n\nprogram\n  .command('delete')\n  .description('Delete a secret')\n  .argument('secretId')\n  .action(async (secretId) => {\n    const globals = program.opts() as GlobalOptions;\n    const manager = buildManagerFromGlobals(globals);\n    const actor = identity(globals.subject ?? 'cli', ['admin'], globals.tenant ?? 'default');\n    await manager.deleteSecret(secretId, actor);\n    console.info(JSON.stringify({ deleted: secretId }, null, 2));\n  });\n\n// Phase 2: Advanced Enterprise Features\nprogram\n  .command('rotate')\n  .description('Manually rotate a secret')\n  .argument('secretId')\n  .action(async (secretId) => {\n    const globals = program.opts() as GlobalOptions;\n    const manager = buildManagerFromGlobals(globals);\n    const actor = identity(globals.subject ?? 'cli', ['writer'], globals.tenant ?? 'default');\n    await manager.rotate(secretId, actor);\n    console.info(JSON.stringify({ rotated: secretId }, null, 2));\n  });\n\nprogram\n  .command('compliance-report')\n  .description('Generate a compliance report')\n  .option('--start-date <date>', 'Start date (ISO format)', (value) => new Date(value))\n  .option('--end-date <date>', 'End date (ISO format)', (value) => new Date(value))\n  .option('--format <format>', 'Output format (json|csv)', 'json')\n  .action(async (options) => {\n    const globals = program.opts() as GlobalOptions;\n    const manager = buildManagerFromGlobals(globals);\n\n    const { ComplianceAuditor: complianceAuditorCtor } = await import('./compliance');\n    const auditor = new complianceAuditorCtor(manager);\n\n    const startDate = options.startDate ?? new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); // 30 days ago\n    const endDate = options.endDate ?? new Date();\n\n    const report = await auditor.generateComplianceReport(startDate, endDate, globals.tenant);\n\n    if (options.format === 'csv') {\n      const csv = await auditor.exportAuditReport('csv', report);\n      console.info(csv.toString());\n    } else {\n      console.info(JSON.stringify(report, null, 2));\n    }\n  });\n\nprogram\n  .command('health-check')\n  .description('Run health checks and show system status')\n  .action(async () => {\n    const globals = program.opts() as GlobalOptions;\n    const manager = buildManagerFromGlobals(globals);\n    const store = buildStoreFromGlobals(globals);\n\n    const { HealthMonitor: healthMonitorCtor } = await import('./monitoring');\n    const monitor = new healthMonitorCtor(manager, store, {\n      healthCheckIntervalMs: 60000, // 1 minute\n      metricsRetentionHours: 24,\n    });\n\n    const health = await monitor.checkHealth();\n    console.info(JSON.stringify(health, null, 2));\n  });\n\n// Phase 3: Advanced Security & Scalability\nprogram\n  .command('rotate-keys')\n  .description('Rotate encryption keys')\n  .action(async () => {\n    const globals = program.opts() as GlobalOptions;\n\n    const { AdvancedEncryptionManager: advancedEncryptionManagerCtor } =\n      await import('./encryption');\n    const encryptionManager = new advancedEncryptionManagerCtor({\n      masterKey: globals.masterKey,\n      keyRotationDays: 90,\n      keySize: 32,\n      algorithm: 'aes-256-gcm',\n    });\n\n    const newKeyId = await encryptionManager.rotateKey();\n    console.info(JSON.stringify({ newKeyId, rotated: true }, null, 2));\n  });\n\nprogram\n  .command('create-backup')\n  .description('Create a backup of all secrets')\n  .argument('backupId')\n  .action(async (backupId) => {\n    const globals = program.opts() as GlobalOptions;\n    const manager = buildManagerFromGlobals(globals);\n\n    const { BackupManager: backupManagerCtor } = await import('./encryption');\n    const backupManager = new backupManagerCtor('./backups');\n\n    // Get all secrets for backup\n    const actor = identity(globals.subject ?? 'cli', ['reader'], globals.tenant ?? 'default');\n    const secrets = await manager.listSecrets(actor);\n\n    await backupManager.createBackup(secrets);\n    console.info(JSON.stringify({ backupId, created: true }, null, 2));\n  });\n\nprogram\n  .command('performance-stats')\n  .description('Show performance statistics')\n  .action(async () => {\n    const globals = program.opts() as GlobalOptions;\n    const manager = buildManagerFromGlobals(globals);\n\n    const { PerformanceMonitor: performanceMonitorCtor } = await import('./performance');\n    const monitor = new performanceMonitorCtor(manager, {\n      metricsRetentionMs: 3600000, // 1 hour\n      samplingRate: 1.0,\n      alertThresholds: {\n        maxLatencyMs: 1000,\n        maxErrorRate: 0.05,\n        minThroughput: 10,\n      },\n    });\n\n    const metrics = monitor.getMetrics();\n    const healthScore = monitor.getHealthScore();\n    const alerts = monitor.getAlerts();\n\n    console.info(\n      JSON.stringify(\n        {\n          healthScore,\n          metrics,\n          alerts,\n        },\n        null,\n        2\n      )\n    );\n  });\n\nprogram\n  .command('docker-deploy')\n  .description('Deploy application with secrets to Docker')\n  .argument('containerName')\n  .argument('image')\n  .option('--env <key=value...>', 'Environment variables')\n  .option('--secret <key=value...>', 'Secrets to inject')\n  .action(async (containerName, image, options) => {\n    const { DockerIntegration: dockerIntegrationCtor } = await import('./containers');\n    const docker = new dockerIntegrationCtor();\n\n    const environmentVariables: Record<string, string> = {};\n    const secrets: Record<string, string> = {};\n\n    if (options.env) {\n      options.env.forEach((environment: string) => {\n        const parts = environment.split('=', 2);\n        const key = parts[0] ?? '';\n        const value = parts[1] ?? '';\n        environmentVariables[key] = value;\n      });\n    }\n\n    if (options.secret) {\n      options.secret.forEach((secret: string) => {\n        const parts = secret.split('=', 2);\n        const key = parts[0] ?? '';\n        const value = parts[1] ?? '';\n        secrets[key] = value;\n      });\n    }\n\n    const config = {\n      image,\n      environment: environmentVariables,\n      volumes: [],\n      ports: {},\n      secrets,\n    };\n\n    const containerId = await docker.createContainer(containerName, config);\n    if (Object.keys(secrets).length > 0) {\n      await docker.injectSecrets(containerId, secrets);\n    }\n\n    console.info(JSON.stringify({ containerId, deployed: true }, null, 2));\n  });\n\nprogram\n  .command('k8s-create-secret')\n  .description('Create a secret in Kubernetes')\n  .argument('secretName')\n  .option('--namespace <ns>', 'Kubernetes namespace', 'default')\n  .option('--data <key=value...>', 'Secret data')\n  .action(async (secretName, options) => {\n    const { K8sIntegration: k8sIntegrationCtor } = await import('./containers');\n    const k8s = new k8sIntegrationCtor();\n\n    const data: Record<string, string> = {};\n    if (options.data) {\n      options.data.forEach((item: string) => {\n        const parts = item.split('=', 2);\n        const key = parts[0] ?? '';\n        const value = parts[1] ?? '';\n        data[key] = value;\n      });\n    }\n\n    await k8s.createSecret(secretName, options.namespace, data);\n    console.info(\n      JSON.stringify({ secretName, namespace: options.namespace, created: true }, null, 2)\n    );\n  });\n\nasync function main(): Promise<void> {\n  try {\n    await program.parseAsync(process.argv);\n  } catch (error: unknown) {\n    console.error(error);\n    process.exitCode = 1;\n  }\n}\n\nvoid main();\n"],"mappings":"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","names":[]}