@platforma-sdk/bootstrap 3.5.21 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/assets/compose-backend.yaml +119 -49
  2. package/dist/commands/svc/create/arg-parser.cjs +175 -0
  3. package/dist/commands/svc/create/arg-parser.cjs.map +1 -0
  4. package/dist/commands/svc/create/arg-parser.d.ts +42 -0
  5. package/dist/commands/svc/create/arg-parser.js +173 -0
  6. package/dist/commands/svc/create/arg-parser.js.map +1 -0
  7. package/dist/commands/svc/create/docker/s3.cjs +26 -3
  8. package/dist/commands/svc/create/docker/s3.cjs.map +1 -1
  9. package/dist/commands/svc/create/docker/s3.js +26 -3
  10. package/dist/commands/svc/create/docker/s3.js.map +1 -1
  11. package/dist/commands/svc/create/docker.cjs +36 -3
  12. package/dist/commands/svc/create/docker.cjs.map +1 -1
  13. package/dist/commands/svc/create/docker.js +36 -3
  14. package/dist/commands/svc/create/docker.js.map +1 -1
  15. package/dist/commands/svc/create/local/s3.cjs +21 -3
  16. package/dist/commands/svc/create/local/s3.cjs.map +1 -1
  17. package/dist/commands/svc/create/local/s3.js +21 -3
  18. package/dist/commands/svc/create/local/s3.js.map +1 -1
  19. package/dist/commands/svc/create/local.cjs +51 -28
  20. package/dist/commands/svc/create/local.cjs.map +1 -1
  21. package/dist/commands/svc/create/local.js +51 -28
  22. package/dist/commands/svc/create/local.js.map +1 -1
  23. package/dist/core.cjs +174 -44
  24. package/dist/core.cjs.map +1 -1
  25. package/dist/core.d.ts +3 -0
  26. package/dist/core.js +198 -68
  27. package/dist/core.js.map +1 -1
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.ts +8 -8
  30. package/dist/index.js.map +1 -1
  31. package/dist/package.cjs +21 -2
  32. package/dist/package.cjs.map +1 -1
  33. package/dist/package.js +2 -2
  34. package/dist/package.js.map +1 -1
  35. package/dist/platforma.js +9 -9
  36. package/dist/platforma.js.map +1 -1
  37. package/dist/state.js +13 -13
  38. package/dist/state.js.map +1 -1
  39. package/dist/templates/compose.cjs +3 -0
  40. package/dist/templates/compose.cjs.map +1 -1
  41. package/dist/templates/compose.d.ts +1 -0
  42. package/dist/templates/compose.js +6 -3
  43. package/dist/templates/compose.js.map +1 -1
  44. package/dist/templates/pl-config.cjs +2 -2
  45. package/dist/templates/pl-config.cjs.map +1 -1
  46. package/dist/templates/pl-config.js +4 -4
  47. package/dist/templates/pl-config.js.map +1 -1
  48. package/dist/util.js +4 -4
  49. package/dist/util.js.map +1 -1
  50. package/package.json +4 -4
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sources":["../src/core.ts"],"sourcesContent":["import type { ChildProcess, SpawnSyncReturns } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport * as pkg from './package';\nimport * as run from './run';\nimport * as composeCfg from './templates/compose';\nimport * as plCfg from './templates/pl-config';\nimport type * as types from './templates/types';\nimport * as platforma from './platforma';\nimport type { instanceInfo, instanceCommand } from './state';\nimport state from './state';\nimport * as util from './util';\nimport type winston from 'winston';\n\nexport default class Core {\n constructor(private readonly logger: winston.Logger) { }\n\n public startLast(): ChildProcess[] {\n const instance = state.currentInstance;\n if (!instance) {\n this.logger.error('failed to bring back Platforma Backend in the last started configuration: no last configuration found');\n throw new Error('no previous run info found');\n }\n\n return this.startInstance(instance);\n }\n\n public startInstance(instance: instanceInfo): ChildProcess[] {\n if (instance.runInfo) {\n const runInfo = this.renderRunInfo(instance.runInfo);\n this.logger.info(`Starting platforma backend instance '${instance.name}':\\n${runInfo}`);\n }\n\n const result = run.runCommands(\n this.logger,\n instance.upCommands,\n );\n checkRunError(result.executed);\n\n if (result.spawned.length > 0 && instance.type === 'process') {\n instance.pid = result.spawned[result.spawned.length - 1].pid;\n state.setInstanceInfo(instance.name, instance);\n this.logger.info(`instance '${instance.name}' started`);\n }\n\n state.currentInstanceName = instance.name;\n\n return result.spawned;\n }\n\n public stopInstance(instance: instanceInfo) {\n this.logger.info(`stopping platforma backend instance '${instance.name}'...`);\n const result = run.runCommands(this.logger, instance.downCommands);\n checkRunError(result.executed);\n\n const iType = instance.type;\n switch (iType) {\n case 'docker': {\n return;\n }\n\n case 'process': {\n if (instance.pid && state.isInstanceActive(instance)) {\n process.kill(instance.pid);\n }\n\n return;\n }\n default:\n util.assertNever(iType);\n }\n }\n\n public switchInstance(instance: instanceInfo): ChildProcess[] {\n // Stop all other active instances before switching to new one;\n for (const iName of state.instanceList) {\n if (iName !== instance.name) {\n const iToStop = state.getInstanceInfo(iName);\n if (state.isInstanceActive(iToStop)) {\n this.stopInstance(iToStop);\n }\n }\n }\n\n return this.startInstance(instance);\n }\n\n public createLocal(instanceName: string, options?: createLocalOptions): instanceInfo {\n let plBinaryPath = platforma.binaryPath(options?.version, 'binaries', 'platforma');\n if (options?.sourcesPath) {\n plBinaryPath = path.join(os.tmpdir(), 'platforma-custom-build');\n }\n if (options?.binaryPath) {\n plBinaryPath = options.binaryPath;\n }\n\n let configPath = options?.configPath;\n const workdir: string = options?.workdir ?? (configPath ? process.cwd() : state.instanceDir(instanceName));\n\n if (options?.primaryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n primary: plCfg.storageSettingsFromURL(options.primaryURL, workdir, options.configOptions?.storages?.primary),\n },\n };\n }\n if (options?.libraryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n library: plCfg.storageSettingsFromURL(options.libraryURL, workdir, options.configOptions?.storages?.library),\n },\n };\n }\n\n const configOptions = plCfg.loadDefaults(this.getLastJwt(), options?.configOptions);\n\n this.logger.debug(` checking license...`);\n this.checkLicense(options?.configOptions?.license?.value, options?.configOptions?.license?.file);\n\n const storageDirs: string[] = [\n `${configOptions.localRoot}/packages`,\n `${configOptions.localRoot}/packages-local`,\n `${configOptions.localRoot}/blocks-local`,\n ];\n if (configOptions.storages.primary.type === 'FS') {\n storageDirs.push(configOptions.storages.primary.rootPath);\n }\n if (configOptions.storages.library.type === 'FS') {\n storageDirs.push(configOptions.storages.library.rootPath);\n configOptions.hacks.libraryDownloadable = false;\n }\n if (configOptions.storages.work.type === 'FS') {\n storageDirs.push(configOptions.storages.work.rootPath);\n }\n\n this.logger.debug(' creating pl state directories...');\n for (const dir of storageDirs) {\n if (!fs.existsSync(dir)) {\n this.logger.debug(` '${dir}'`);\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n\n for (const drv of configOptions.core.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n if (!fs.existsSync(drv.path)) {\n this.logger.debug(` installing default 'users.htpasswd' to ${drv.path}...`);\n fs.copyFileSync(pkg.assets('users.htpasswd'), drv.path);\n }\n }\n }\n\n if (!configPath) {\n configPath = path.join(configOptions.localRoot, 'config.yaml');\n this.logger.debug(` rendering configuration '${configPath}'...`);\n fs.writeFileSync(configPath, plCfg.render(configOptions));\n }\n\n const upCommands: instanceCommand[] = [];\n if (options?.sourcesPath) {\n upCommands.push({\n cmd: 'go',\n args: ['build', '-o', plBinaryPath, '.'],\n workdir: path.resolve(options.sourcesPath, 'cmd', 'platforma'),\n runOpts: {\n stdio: 'inherit',\n },\n });\n }\n\n const runBinary: instanceCommand = {\n async: true,\n cmd: plBinaryPath,\n args: ['--quiet', '--config', configPath],\n workdir: workdir,\n runOpts: {\n stdio: 'inherit',\n },\n };\n\n if (options?.configOptions?.numCpu) {\n runBinary.runOpts.env = {\n GOMAXPROCS: String(options?.configOptions?.numCpu),\n };\n }\n\n upCommands.push(runBinary);\n\n state.setInstanceInfo(instanceName, {\n type: 'process',\n upCommands: upCommands,\n downCommands: [],\n cleanupCommands: [],\n runInfo: {\n configPath,\n dbPath: configOptions.core.db.path,\n apiAddr: configOptions.grpc.listen,\n logPath: configOptions.log.path,\n primary: configOptions.storages.primary,\n work: configOptions.storages.work,\n library: configOptions.storages.library,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createLocalS3(instanceName: string, options?: createLocalS3Options): instanceInfo {\n this.logger.debug('creating platforma instance in \\'local s3\\' mode...');\n\n const minioPort = options?.minioPort ?? 9000;\n\n const instance = this.createLocal(instanceName, {\n ...options,\n primaryURL: options?.primaryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/main-bucket/?region=no-region`,\n libraryURL: options?.libraryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/library-bucket/?region=no-region`,\n });\n\n const localRoot = options?.configOptions?.localRoot;\n const minioRunCmd = this.createMinio(instanceName, {\n minioPort: minioPort,\n minioConsolePort: options?.minioConsolePort,\n storage: localRoot ? path.join(localRoot, 'minio') : undefined,\n });\n\n instance.upCommands = [\n minioRunCmd.start,\n ...instance.upCommands,\n ];\n\n instance.downCommands = [\n minioRunCmd.stop,\n ...instance.downCommands,\n ];\n\n instance.cleanupCommands = [\n minioRunCmd.cleanup,\n ...instance.cleanupCommands,\n ];\n\n state.setInstanceInfo(instanceName, instance);\n return instance;\n }\n\n public createMinio(\n instanceName: string,\n options?: {\n image?: string;\n version?: string;\n minioPort?: number;\n minioConsolePort?: number;\n storage?: string;\n }): {\n start: instanceCommand;\n stop: instanceCommand;\n cleanup: instanceCommand;\n } {\n this.logger.debug(' creating docker compose for minio service...');\n const composeSrc = pkg.assets('compose-backend.yaml');\n const composeMinio = state.instanceDir(instanceName, 'compose-minio.yaml');\n\n composeCfg.render(composeSrc, composeMinio, `pl-${instanceName}-minio`,\n new Map([\n ['minio', {}],\n ]),\n { dropVolumes: true },\n );\n\n const version = options?.version ? `:${options.version}` : '';\n this.logger.debug(` minio version: ${version}`);\n const image = options?.image ?? `quay.io/minio/minio${version}`;\n this.logger.debug(` minio image: ${image}`);\n\n const storage = options?.storage ?? state.instanceDir(instanceName, 'minio');\n util.ensureDir(storage, { mode: '0775' });\n\n const minioPort = options?.minioPort ?? 9000;\n const minioConsolePort = options?.minioConsolePort ?? 9001;\n\n const envs = {\n MINIO_IMAGE: image,\n MINIO_STORAGE: path.resolve(storage),\n MINIO_PORT: minioPort.toString(),\n MINIO_CONSOLE_PORT: minioConsolePort.toString(),\n };\n\n return {\n start: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n stop: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n cleanup: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n };\n }\n\n public createDockerS3(\n instanceName: string,\n localRoot: string,\n options?: {\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n\n grpcPort?: number;\n grpcAddr?: string;\n\n presignHost?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n s3Port?: number;\n s3ConsolePort?: number;\n\n customMounts?: { hostPath: string; containerPath?: string }[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker s3\\' mode...');\n\n const composeS3Path = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const presignHost = options?.presignHost ?? 'localhost';\n const presignPort = options?.s3Port ?? 9000;\n\n const primary = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/main-bucket`);\n if (primary.type !== 'S3') {\n throw new Error('primary storage must have \\'S3\\' type in \\'docker s3\\' configuration');\n } else {\n primary.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const library = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/library-bucket`);\n if (library.type !== 'S3') {\n throw new Error(`${library.type} storage type is not supported for library storage`);\n } else {\n library.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const dbFSPath = storageDir('db');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n composeCfg.render(composeS3Path, composeDstPath, `pl-${instanceName}`, new Map([\n ['minio', {}],\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n }],\n ]));\n\n const envs: NodeJS.ProcessEnv = {\n MINIO_IMAGE: 'quay.io/minio/minio',\n MINIO_STORAGE: storageDir('minio'),\n\n PL_IMAGE: image,\n\n PL_AUTH_HTPASSWD_PATH: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: storageDir('primary'),\n PL_DATA_LIBRARY_ROOT: storageDir('library'),\n PL_DATA_WORKDIR_ROOT: workFSPath,\n\n // Mount packages storage as volume, because APFS is case-insensitive on Mac OS X and this breaks some pl software installation.\n // PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) envs.PL_GRPC_ADDR = options.grpcAddr;\n if (options?.grpcPort) envs.PL_GRPC_PORT = options.grpcPort.toString();\n if (options?.monitoringAddr) envs.PL_MONITORING_ADDR = options.monitoringAddr;\n if (options?.monitoringPort) envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n if (options?.debugAddr) envs.PL_DEBUG_ADDR = options.debugAddr;\n if (options?.debugPort) envs.PL_DEBUG_PORT = options.debugPort.toString();\n\n if (options?.s3Port) envs.MINIO_PORT = options.s3Port.toString();\n if (options?.s3ConsolePort) envs.MINIO_CONSOLE_PORT = options.s3ConsolePort.toString();\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_AUTH_ENABLED'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD_PATH'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createDocker(\n instanceName: string,\n localRoot: string,\n options?: {\n primaryStorageURL?: string;\n workStoragePath?: string;\n libraryStorageURL?: string;\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n grpcPort?: number;\n grpcAddr?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker\\' mode...');\n\n const composeFSPath = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const dbFSPath = storageDir('db');\n const primaryFSPath = storageDir('primary');\n const libraryFSPath = storageDir('library');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n this.logger.debug(`Rendering docker compose file '${composeDstPath}' using '${composeFSPath}' as base template`);\n composeCfg.render(composeFSPath, composeDstPath, `pl-${instanceName}`, new Map([\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n }],\n ]));\n\n const primary = plCfg.storageSettingsFromURL(options?.primaryStorageURL ?? `file:${primaryFSPath}`, '.');\n const library = plCfg.storageSettingsFromURL(options?.libraryStorageURL ?? `file:${libraryFSPath}`, '.');\n\n const envs: NodeJS.ProcessEnv = {\n PL_IMAGE: image,\n PL_AUTH_HTPASSWD_PATH: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: primaryFSPath,\n PL_DATA_LIBRARY_ROOT: libraryFSPath,\n PL_DATA_WORKDIR_ROOT: workFSPath,\n PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) envs.PL_GRPC_ADDR = options.grpcAddr;\n if (options?.grpcPort) envs.PL_GRPC_PORT = options.grpcPort.toString();\n if (options?.monitoringAddr) envs.PL_MONITORING_ADDR = options.monitoringAddr;\n if (options?.monitoringPort) envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n if (options?.debugAddr) envs.PL_DEBUG_ADDR = options.debugAddr;\n if (options?.debugPort) envs.PL_DEBUG_PORT = options.debugPort.toString();\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_AUTH_ENABLED'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD_PATH'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public cleanupInstance(instanceName?: string) {\n const removeWarns: string[] = [];\n const instancesToDrop = new Map<string, instanceInfo>();\n let warnMessage: string = '';\n\n if (instanceName) {\n const instance = state.getInstanceInfo(instanceName);\n instancesToDrop.set(instanceName, instance);\n const iType = instance.type;\n switch (iType) {\n case 'docker':{\n removeWarns.push(`docker service 'pl-${instanceName}', including all its volumes and data in '${state.instanceDir(instanceName)}' will be destroyed`);\n break;\n }\n case 'process':{\n removeWarns.push(`directory '${state.instanceDir(instanceName)}' would be deleted`);\n if (instance.downCommands) {\n removeWarns.push(`associated docker service, including all volumes and data will be destroyed`);\n }\n break;\n }\n default:\n util.assertNever(iType);\n }\n\n if (instanceName === state.currentInstanceName) {\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n );\n }\n\n warnMessage = `\nYou are going to reset the state of platforma service '${instanceName}':\n - ${removeWarns.join('\\n - ')}\n`;\n } else {\n for (const iName of state.instanceList) {\n instancesToDrop.set(iName, state.getInstanceInfo(iName));\n }\n\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n `all service configurations stored in: ${state.instanceDir()} (including all associated docker containers and volumes)`,\n );\n\n warnMessage = `\nYou are going to reset the state of all platforma services configured with pl-bootstrap package.\n - ${removeWarns.join('\\n - ')}\n`;\n }\n\n this.logger.warn(warnMessage);\n if (!util.askYN('Are you sure?')) {\n this.logger.info('Reset action was canceled');\n return;\n }\n\n for (const [name, instance] of instancesToDrop.entries()) {\n if (instance.cleanupCommands.length) {\n this.logger.info(`Wiping instance ${name} services`);\n const result = run.runCommands(this.logger, instance.cleanupCommands);\n checkRunError(result.executed, `failed to wipe instance ${name} services`);\n }\n\n this.logger.info(`Destroying instance '${name}' data directory`);\n fs.rmSync(state.instanceDir(name), { recursive: true, force: true });\n }\n\n if (!instanceName) {\n this.logger.info(`Destroying state dir '${state.path()}'`);\n fs.rmSync(state.path(), { recursive: true, force: true });\n }\n\n this.logger.info(\n `\\nIf you want to remove all downloaded platforma binaries, delete '${state.binaries()}' dir manually\\n`,\n );\n }\n\n public mergeLicenseEnvs(flags: { 'license'?: string; 'license-file'?: string }) {\n if (flags.license === undefined) {\n if ((process.env.MI_LICENSE ?? '') != '') flags.license = process.env.MI_LICENSE;\n else if ((process.env.PL_LICENSE ?? '') != '') flags.license = process.env.PL_LICENSE;\n }\n\n // set 'license-file' only if license is still undefined\n if (flags['license-file'] === undefined && flags.license === undefined) {\n if ((process.env.MI_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.MI_LICENSE_FILE;\n else if ((process.env.PL_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.PL_LICENSE_FILE;\n else if (fs.existsSync(path.resolve(os.homedir(), '.pl.license')))\n flags['license-file'] = path.resolve(os.homedir(), '.pl.license');\n }\n }\n\n public initAuthDriversList(\n flags: {\n 'auth-htpasswd-file'?: string;\n\n 'auth-ldap-server'?: string;\n 'auth-ldap-default-dn'?: string;\n },\n workdir: string,\n ): types.authDriver[] | undefined {\n const authDrivers: types.authDriver[] = [];\n if (flags['auth-htpasswd-file']) {\n authDrivers.push({\n driver: 'htpasswd',\n path: path.resolve(workdir, flags['auth-htpasswd-file']),\n });\n }\n\n if (Boolean(flags['auth-ldap-server']) !== Boolean(flags['auth-ldap-default-dn'])) {\n throw new Error('LDAP auth settings require both \\'server\\' and \\'default DN\\' options to be set');\n }\n\n if (flags['auth-ldap-server']) {\n authDrivers.push({\n driver: 'ldap',\n serverUrl: flags['auth-ldap-server'],\n defaultDN: flags['auth-ldap-default-dn']!,\n });\n }\n\n if (authDrivers.length === 0) {\n return undefined;\n }\n\n return [{ driver: 'jwt', key: this.getLastJwt() }, ...authDrivers] as types.authDriver[];\n }\n\n /** Gets the last stored JWT secret key or generates it and stores in a file. */\n public getLastJwt() {\n const jwtFile = state.path('auth.jwt');\n const encoding = 'utf-8';\n\n let lastJwt = '';\n if (fs.existsSync(jwtFile)) {\n lastJwt = fs.readFileSync(jwtFile, { encoding });\n }\n\n if (lastJwt == '') {\n lastJwt = util.randomStr(64);\n fs.writeFileSync(jwtFile, lastJwt, { encoding });\n }\n\n return lastJwt;\n }\n\n private checkLicense(value?: string, file?: string) {\n if (value !== undefined && value != '') return;\n\n if (file !== undefined && file != '') return;\n\n this.logger.error(`A license for Platforma Backend must be set.\n\nYou can provide the license directly using the '--license' flag\nor use the '--license-file' flag if the license is stored in a file.\n\nAlternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_LICENSE'.\n\nThe license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',\nor stored in '$HOME/.pl.license'.\n\nYou can obtain the license from \"https://licensing.milaboratories.com\".`);\n\n throw new Error(`The license was not provided.`);\n }\n\n private configureDockerStorage(storageID: string, storage: types.storageOptions): NodeJS.ProcessEnv {\n const envs: NodeJS.ProcessEnv = {};\n const sType = storage.type;\n storageID = storageID.toUpperCase();\n\n switch (sType) {\n case 'S3':\n envs[`PL_DATA_${storageID}_TYPE`] = 'S3';\n envs[`PL_DATA_${storageID}_S3_BUCKET`] = storage.bucketName!;\n\n if (storage.endpoint) envs[`PL_DATA_${storageID}_S3_ENDPOINT`] = storage.endpoint;\n if (storage.presignEndpoint) envs[`PL_DATA_${storageID}_S3_PRESIGN_ENDPOINT`] = storage.presignEndpoint;\n if (storage.region) envs[`PL_DATA_${storageID}_S3_REGION`] = storage.region;\n if (storage.key) envs[`PL_DATA_${storageID}_S3_KEY`] = storage.key;\n if (storage.secret) envs[`PL_DATA_${storageID}_S3_SECRET`] = storage.secret;\n\n return envs;\n\n case 'FS':\n envs[`PL_DATA_${storageID}_TYPE`] = 'FS';\n\n return envs;\n\n default:\n util.assertNever(sType);\n }\n\n return {};\n }\n\n private renderRunInfo(\n runInfo: {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n },\n indent: number = 10,\n ) {\n const report: string[] = [];\n\n const column = (t: string) => t.padStart(indent, ' ');\n if (runInfo.configPath) {\n report.push(`${column('config')}: ${runInfo.configPath}`);\n }\n\n if (runInfo.apiAddr) {\n report.push(`${column('API')}: ${runInfo.apiAddr}`);\n } else if (runInfo.apiPort) {\n report.push(`${column('API')}: 127.0.0.1:${runInfo.apiPort.toString()}`);\n } else {\n report.push(`${column('API')}: 127.0.0.1:6345`);\n }\n\n if (runInfo.logPath) {\n report.push(`${column('log')}: ${runInfo.logPath}`);\n }\n\n const primaryType = runInfo.primary?.type;\n switch (primaryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('primary')}: ${runInfo.primary!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('primary')}: S3 at '${runInfo.primary!.endpoint ?? 'AWS'}', bucket '${runInfo.primary!.bucketName!}', prefix: '${runInfo.primary!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(primaryType);\n }\n\n const libraryType = runInfo.library?.type;\n switch (libraryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('library')}: ${runInfo.library!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('library')}: S3 at '${runInfo.library!.endpoint ?? 'AWS'}', bucket '${runInfo.library!.bucketName!}', prefix: '${runInfo.library!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(libraryType);\n }\n\n if (runInfo.work) {\n report.push(`${column('workdirs')}: ${runInfo.work.rootPath}`);\n }\n\n if (runInfo.dbPath) {\n report.push(`${column('db')}: ${runInfo.dbPath}`);\n }\n\n return report.join('\\n');\n }\n}\n\nexport function checkRunError(result: SpawnSyncReturns<Buffer>[], message?: string) {\n for (const buffer of result) {\n if (buffer.error) {\n throw buffer.error;\n }\n\n const msg = message ?? 'failed to run command';\n\n if (buffer.status !== 0) {\n throw new Error(`${msg}, process exited with code '${buffer.status}'`);\n }\n }\n}\n\nexport type createLocalOptions = {\n version?: string;\n sourcesPath?: string;\n binaryPath?: string;\n configPath?: string;\n configOptions?: plCfg.plOptions;\n workdir?: string;\n\n primaryURL?: string;\n libraryURL?: string;\n};\n\nexport type createLocalFSOptions = createLocalOptions;\n\nexport type createLocalS3Options = createLocalOptions & {\n minioPort?: number;\n minioConsolePort?: number;\n};\n"],"names":["run.runCommands","util.assertNever","platforma.binaryPath","os","plCfg.storageSettingsFromURL","plCfg.loadDefaults","pkg.assets","plCfg.render","composeCfg.render","util.ensureDir","pkg.plImageTag","util.askYN","util.randomStr"],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sources":["../src/core.ts"],"sourcesContent":["import type { ChildProcess, SpawnSyncReturns } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport * as pkg from './package';\nimport * as run from './run';\nimport * as composeCfg from './templates/compose';\nimport * as plCfg from './templates/pl-config';\nimport type * as types from './templates/types';\nimport * as platforma from './platforma';\nimport type { instanceInfo, instanceCommand } from './state';\nimport state from './state';\nimport * as util from './util';\nimport type winston from 'winston';\n\nexport default class Core {\n constructor(private readonly logger: winston.Logger) { }\n\n public startLast(): ChildProcess[] {\n const instance = state.currentInstance;\n if (!instance) {\n this.logger.error('failed to bring back Platforma Backend in the last started configuration: no last configuration found');\n throw new Error('no previous run info found');\n }\n\n return this.startInstance(instance);\n }\n\n public startInstance(instance: instanceInfo): ChildProcess[] {\n if (instance.runInfo) {\n const runInfo = this.renderRunInfo(instance.runInfo);\n this.logger.info(`Starting platforma backend instance '${instance.name}':\\n${runInfo}`);\n }\n\n const result = run.runCommands(\n this.logger,\n instance.upCommands,\n );\n checkRunError(result.executed);\n\n if (result.spawned.length > 0 && instance.type === 'process') {\n instance.pid = result.spawned[result.spawned.length - 1].pid;\n state.setInstanceInfo(instance.name, instance);\n this.logger.info(`instance '${instance.name}' started`);\n }\n\n state.currentInstanceName = instance.name;\n\n return result.spawned;\n }\n\n public stopInstance(instance: instanceInfo) {\n this.logger.info(`stopping platforma backend instance '${instance.name}'...`);\n const result = run.runCommands(this.logger, instance.downCommands);\n checkRunError(result.executed);\n\n const iType = instance.type;\n switch (iType) {\n case 'docker': {\n return;\n }\n\n case 'process': {\n if (instance.pid && state.isInstanceActive(instance)) {\n process.kill(instance.pid);\n }\n\n return;\n }\n default:\n util.assertNever(iType);\n }\n }\n\n public switchInstance(instance: instanceInfo): ChildProcess[] {\n // Stop all other active instances before switching to new one;\n for (const iName of state.instanceList) {\n if (iName !== instance.name) {\n const iToStop = state.getInstanceInfo(iName);\n if (state.isInstanceActive(iToStop)) {\n this.stopInstance(iToStop);\n }\n }\n }\n\n return this.startInstance(instance);\n }\n\n public createLocal(instanceName: string, options?: createLocalOptions): instanceInfo {\n let plBinaryPath = platforma.binaryPath(options?.version, 'binaries', 'platforma');\n if (options?.sourcesPath) {\n plBinaryPath = path.join(os.tmpdir(), 'platforma-custom-build');\n }\n if (options?.binaryPath) {\n plBinaryPath = options.binaryPath;\n }\n\n let configPath = options?.configPath;\n const workdir: string = options?.workdir ?? (configPath ? process.cwd() : state.instanceDir(instanceName));\n\n if (options?.primaryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n primary: plCfg.storageSettingsFromURL(options.primaryURL, workdir, options.configOptions?.storages?.primary),\n },\n };\n }\n if (options?.libraryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n library: plCfg.storageSettingsFromURL(options.libraryURL, workdir, options.configOptions?.storages?.library),\n },\n };\n }\n\n const configOptions = plCfg.loadDefaults(this.getLastJwt(), options?.configOptions);\n\n this.logger.debug(` checking license...`);\n this.checkLicense(options?.configOptions?.license?.value, options?.configOptions?.license?.file);\n\n const storageDirs: string[] = [\n `${configOptions.localRoot}/packages`,\n `${configOptions.localRoot}/packages-local`,\n `${configOptions.localRoot}/blocks-local`,\n ];\n if (configOptions.storages.primary.type === 'FS') {\n storageDirs.push(configOptions.storages.primary.rootPath);\n }\n if (configOptions.storages.library.type === 'FS') {\n storageDirs.push(configOptions.storages.library.rootPath);\n configOptions.hacks.libraryDownloadable = false;\n }\n if (configOptions.storages.work.type === 'FS') {\n storageDirs.push(configOptions.storages.work.rootPath);\n }\n\n this.logger.debug(' creating pl state directories...');\n for (const dir of storageDirs) {\n if (!fs.existsSync(dir)) {\n this.logger.debug(` '${dir}'`);\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n\n for (const drv of configOptions.core.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n if (!fs.existsSync(drv.path)) {\n this.logger.debug(` installing default 'users.htpasswd' to ${drv.path}...`);\n fs.copyFileSync(pkg.assets('users.htpasswd'), drv.path);\n }\n }\n }\n\n if (!configPath) {\n configPath = path.join(configOptions.localRoot, 'config.yaml');\n this.logger.debug(` rendering configuration '${configPath}'...`);\n fs.writeFileSync(configPath, plCfg.render(configOptions));\n }\n\n const upCommands: instanceCommand[] = [];\n if (options?.sourcesPath) {\n upCommands.push({\n cmd: 'go',\n args: ['build', '-o', plBinaryPath, '.'],\n workdir: path.resolve(options.sourcesPath, 'cmd', 'platforma'),\n runOpts: {\n stdio: 'inherit',\n },\n });\n }\n\n const runBinary: instanceCommand = {\n async: true,\n cmd: plBinaryPath,\n args: ['--quiet', '--config', configPath],\n workdir: workdir,\n runOpts: {\n stdio: 'inherit',\n },\n };\n\n if (options?.configOptions?.numCpu) {\n runBinary.runOpts.env = {\n GOMAXPROCS: String(options?.configOptions?.numCpu),\n };\n }\n\n // Process additional environment variables from CLI options\n if (options?.backendCommands) {\n if (!runBinary.runOpts.env) {\n runBinary.runOpts.env = {};\n }\n for (const cmd of options.backendCommands) {\n const equalIndex = cmd.indexOf('=');\n if (equalIndex > 0) {\n const key = cmd.substring(0, equalIndex);\n const value = cmd.substring(equalIndex + 1);\n runBinary.runOpts.env[key] = value;\n } else {\n this.logger.warn(`Invalid environment variable format: ${cmd}. Expected format: KEY=VALUE`);\n }\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n // Add commands as arguments to the binary\n runBinary.args = [...runBinary.args, ...options.backendCommands];\n }\n\n upCommands.push(runBinary);\n\n state.setInstanceInfo(instanceName, {\n type: 'process',\n upCommands: upCommands,\n downCommands: [],\n cleanupCommands: [],\n runInfo: {\n configPath,\n dbPath: configOptions.core.db.path,\n apiAddr: configOptions.grpc.listen,\n logPath: configOptions.log.path,\n primary: configOptions.storages.primary,\n work: configOptions.storages.work,\n library: configOptions.storages.library,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createLocalS3(instanceName: string, options?: createLocalS3Options): instanceInfo {\n this.logger.debug('creating platforma instance in \\'local s3\\' mode...');\n\n const minioPort = options?.minioPort ?? 9000;\n\n const instance = this.createLocal(instanceName, {\n ...options,\n primaryURL: options?.primaryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-primary-bucket/?region=no-region`,\n libraryURL: options?.libraryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-library-bucket/?region=no-region`,\n });\n\n const localRoot = options?.configOptions?.localRoot;\n const minioRunCmd = this.createMinio(instanceName, {\n minioPort: minioPort,\n minioConsolePort: options?.minioConsolePort,\n storage: localRoot ? path.join(localRoot, 'minio') : undefined,\n });\n\n instance.upCommands = [\n minioRunCmd.start,\n ...instance.upCommands,\n ];\n\n instance.downCommands = [\n minioRunCmd.stop,\n ...instance.downCommands,\n ];\n\n instance.cleanupCommands = [\n minioRunCmd.cleanup,\n ...instance.cleanupCommands,\n ];\n\n state.setInstanceInfo(instanceName, instance);\n return instance;\n }\n\n public createMinio(\n instanceName: string,\n options?: {\n image?: string;\n version?: string;\n minioPort?: number;\n minioConsolePort?: number;\n storage?: string;\n }): {\n start: instanceCommand;\n stop: instanceCommand;\n cleanup: instanceCommand;\n } {\n this.logger.debug(' creating docker compose for minio service...');\n const composeSrc = pkg.assets('compose-backend.yaml');\n const composeMinio = state.instanceDir(instanceName, 'compose-minio.yaml');\n\n composeCfg.render(composeSrc, composeMinio, `pl-${instanceName}-minio`,\n new Map([\n ['minio', {}],\n ]),\n { dropVolumes: true },\n );\n\n const version = options?.version ? `:${options.version}` : '';\n this.logger.debug(` minio version: ${version}`);\n const image = options?.image ?? `quay.io/minio/minio${version}`;\n this.logger.debug(` minio image: ${image}`);\n\n const storage = options?.storage ?? state.instanceDir(instanceName, 'minio');\n util.ensureDir(storage, { mode: '0775' });\n\n const minioPort = options?.minioPort ?? 9000;\n const minioConsolePort = options?.minioConsolePort ?? 9001;\n\n const envs = {\n MINIO_IMAGE: image,\n MINIO_STORAGE: path.resolve(storage),\n MINIO_PORT: minioPort.toString(),\n MINIO_CONSOLE_PORT: minioConsolePort.toString(),\n };\n\n return {\n start: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n stop: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n cleanup: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n };\n }\n\n public createDockerS3(\n instanceName: string,\n localRoot: string,\n options?: {\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n\n grpcPort?: number;\n grpcAddr?: string;\n\n presignHost?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n s3Port?: number;\n s3ConsolePort?: number;\n\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker s3\\' mode...');\n\n const composeS3Path = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const presignHost = options?.presignHost ?? 'localhost';\n const presignPort = options?.s3Port ?? 9000;\n\n const primary = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-primary-bucket`);\n if (primary.type !== 'S3') {\n throw new Error('primary storage must have \\'S3\\' type in \\'docker s3\\' configuration');\n } else {\n primary.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const library = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-library-bucket`);\n if (library.type !== 'S3') {\n throw new Error(`${library.type} storage type is not supported for library storage`);\n } else {\n library.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const dbFSPath = storageDir('db');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n composeCfg.render(composeS3Path, composeDstPath, `pl-${instanceName}`, new Map([\n ['minio', {}],\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n }],\n ]));\n\n const envs: NodeJS.ProcessEnv = {\n MINIO_IMAGE: 'quay.io/minio/minio',\n MINIO_STORAGE: storageDir('minio'),\n\n PL_IMAGE: image,\n\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: storageDir('primary'),\n PL_DATA_LIBRARY_ROOT: storageDir('library'),\n PL_DATA_WORKDIR_ROOT: workFSPath,\n\n // Mount packages storage as volume, because APFS is case-insensitive on Mac OS X and this breaks some pl software installation.\n // PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.s3Port) envs.MINIO_PORT = options.s3Port.toString();\n if (options?.s3ConsolePort) envs.MINIO_CONSOLE_PORT = options.s3ConsolePort.toString();\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_NO_AUTH'] = 'false';\n } else {\n envs['PL_NO_AUTH'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createDocker(\n instanceName: string,\n localRoot: string,\n options?: {\n primaryStorageURL?: string;\n workStoragePath?: string;\n libraryStorageURL?: string;\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n grpcPort?: number;\n grpcAddr?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker\\' mode...');\n\n const composeFSPath = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const dbFSPath = storageDir('db');\n const primaryFSPath = storageDir('primary');\n const libraryFSPath = storageDir('library');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n this.logger.debug(`Rendering docker compose file '${composeDstPath}' using '${composeFSPath}' as base template`);\n composeCfg.render(composeFSPath, composeDstPath, `pl-${instanceName}`, new Map([\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n }],\n ]));\n\n const primary = plCfg.storageSettingsFromURL(options?.primaryStorageURL ?? `file:${primaryFSPath}`, '.');\n const library = plCfg.storageSettingsFromURL(options?.libraryStorageURL ?? `file:${libraryFSPath}`, '.');\n\n const envs: NodeJS.ProcessEnv = {\n PL_IMAGE: image,\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: primaryFSPath,\n PL_DATA_LIBRARY_ROOT: libraryFSPath,\n PL_DATA_WORKDIR_ROOT: workFSPath,\n PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_NO_AUTH'] = 'false';\n } else {\n envs['PL_NO_AUTH'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public cleanupInstance(instanceName?: string) {\n const removeWarns: string[] = [];\n const instancesToDrop = new Map<string, instanceInfo>();\n let warnMessage: string = '';\n\n if (instanceName) {\n const instance = state.getInstanceInfo(instanceName);\n instancesToDrop.set(instanceName, instance);\n const iType = instance.type;\n switch (iType) {\n case 'docker':{\n removeWarns.push(`docker service 'pl-${instanceName}', including all its volumes and data in '${state.instanceDir(instanceName)}' will be destroyed`);\n break;\n }\n case 'process':{\n removeWarns.push(`directory '${state.instanceDir(instanceName)}' would be deleted`);\n if (instance.downCommands) {\n removeWarns.push(`associated docker service, including all volumes and data will be destroyed`);\n }\n break;\n }\n default:\n util.assertNever(iType);\n }\n\n if (instanceName === state.currentInstanceName) {\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n );\n }\n\n warnMessage = `\nYou are going to reset the state of platforma service '${instanceName}':\n - ${removeWarns.join('\\n - ')}\n`;\n } else {\n for (const iName of state.instanceList) {\n instancesToDrop.set(iName, state.getInstanceInfo(iName));\n }\n\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n `all service configurations stored in: ${state.instanceDir()} (including all associated docker containers and volumes)`,\n );\n\n warnMessage = `\nYou are going to reset the state of all platforma services configured with pl-bootstrap package.\n - ${removeWarns.join('\\n - ')}\n`;\n }\n\n this.logger.warn(warnMessage);\n if (!util.askYN('Are you sure?')) {\n this.logger.info('Reset action was canceled');\n return;\n }\n\n for (const [name, instance] of instancesToDrop.entries()) {\n if (instance.cleanupCommands.length) {\n this.logger.info(`Wiping instance ${name} services`);\n const result = run.runCommands(this.logger, instance.cleanupCommands);\n checkRunError(result.executed, `failed to wipe instance ${name} services`);\n }\n\n this.logger.info(`Destroying instance '${name}' data directory`);\n fs.rmSync(state.instanceDir(name), { recursive: true, force: true });\n }\n\n if (!instanceName) {\n this.logger.info(`Destroying state dir '${state.path()}'`);\n fs.rmSync(state.path(), { recursive: true, force: true });\n }\n\n this.logger.info(\n `\\nIf you want to remove all downloaded platforma binaries, delete '${state.binaries()}' dir manually\\n`,\n );\n }\n\n public mergeLicenseEnvs(flags: { 'license'?: string; 'license-file'?: string }) {\n if (flags.license === undefined) {\n if ((process.env.MI_LICENSE ?? '') != '') flags.license = process.env.MI_LICENSE;\n else if ((process.env.PL_LICENSE ?? '') != '') flags.license = process.env.PL_LICENSE;\n }\n\n // set 'license-file' only if license is still undefined\n if (flags['license-file'] === undefined && flags.license === undefined) {\n if ((process.env.MI_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.MI_LICENSE_FILE;\n else if ((process.env.PL_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.PL_LICENSE_FILE;\n else if (fs.existsSync(path.resolve(os.homedir(), '.pl.license')))\n flags['license-file'] = path.resolve(os.homedir(), '.pl.license');\n }\n }\n\n public initAuthDriversList(\n flags: {\n 'auth-htpasswd-file'?: string;\n\n 'auth-ldap-server'?: string;\n 'auth-ldap-default-dn'?: string;\n },\n workdir: string,\n ): types.authDriver[] | undefined {\n const authDrivers: types.authDriver[] = [];\n if (flags['auth-htpasswd-file']) {\n authDrivers.push({\n driver: 'htpasswd',\n path: path.resolve(workdir, flags['auth-htpasswd-file']),\n });\n }\n\n if (Boolean(flags['auth-ldap-server']) !== Boolean(flags['auth-ldap-default-dn'])) {\n throw new Error('LDAP auth settings require both \\'server\\' and \\'default DN\\' options to be set');\n }\n\n if (flags['auth-ldap-server']) {\n authDrivers.push({\n driver: 'ldap',\n serverUrl: flags['auth-ldap-server'],\n defaultDN: flags['auth-ldap-default-dn']!,\n });\n }\n\n if (authDrivers.length === 0) {\n return undefined;\n }\n\n return [{ driver: 'jwt', key: this.getLastJwt() }, ...authDrivers] as types.authDriver[];\n }\n\n /** Gets the last stored JWT secret key or generates it and stores in a file. */\n public getLastJwt() {\n const jwtFile = state.path('auth.jwt');\n const encoding = 'utf-8';\n\n let lastJwt = '';\n if (fs.existsSync(jwtFile)) {\n lastJwt = fs.readFileSync(jwtFile, { encoding });\n }\n\n if (lastJwt == '') {\n lastJwt = util.randomStr(64);\n fs.writeFileSync(jwtFile, lastJwt, { encoding });\n }\n\n return lastJwt;\n }\n\n private checkLicense(value?: string, file?: string) {\n if (value !== undefined && value != '') return;\n\n if (file !== undefined && file != '') return;\n\n this.logger.error(`A license for Platforma Backend must be set.\n\nYou can provide the license directly using the '--license' flag\nor use the '--license-file' flag if the license is stored in a file.\n\nAlternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_LICENSE'.\n\nThe license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',\nor stored in '$HOME/.pl.license'.\n\nYou can obtain the license from \"https://licensing.milaboratories.com\".`);\n\n throw new Error(`The license was not provided.`);\n }\n\n private configureDockerStorage(storageID: string, storage: types.storageOptions): NodeJS.ProcessEnv {\n const envs: NodeJS.ProcessEnv = {};\n const sType = storage.type;\n storageID = storageID.toUpperCase();\n\n switch (sType) {\n case 'S3':\n switch (storageID) {\n case 'PRIMARY': {\n // Construct the S3 URL for primary storage\n if (storage.endpoint && storage.bucketName) {\n envs['PL_DATA_LIBRARY_S3_URL'] = `${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs['PL_PRIMARY_STORAGE_S3_ENDPOINT'] = storage.endpoint;\n if (storage.presignEndpoint) envs['PL_PRIMARY_STORAGE_S3_EXTERNAL_ENDPOINT'] = storage.presignEndpoint;\n if (storage.region) envs['PL_PRIMARY_STORAGE_S3_REGION'] = storage.region;\n if (storage.key) envs['PL_PRIMARY_STORAGE_S3_KEY'] = storage.key;\n if (storage.secret) envs['PL_PRIMARY_STORAGE_S3_SECRET'] = storage.secret;\n break;\n }\n case 'LIBRARY': {\n // Construct the S3 URL for library storage\n if (storage.endpoint && storage.bucketName) {\n envs['PL_DATA_LIBRARY_S3_URL'] = `library=${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs['PL_DATA_LIBRARY_S3_ENDPOINT'] = `library=${storage.endpoint}`;\n if (storage.presignEndpoint) envs['PL_DATA_LIBRARY_S3_EXTERNAL_ENDPOINT'] = `library=${storage.presignEndpoint}`;\n if (storage.region) envs['PL_DATA_LIBRARY_S3_REGION'] = `library=${storage.region}`;\n if (storage.key) envs['PL_DATA_LIBRARY_S3_KEY'] = `library=${storage.key}`;\n if (storage.secret) envs['PL_DATA_LIBRARY_S3_SECRET'] = `library=${storage.secret}`;\n break;\n }\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n case 'FS':\n switch (storageID) {\n case 'PRIMARY':\n if (storage.rootPath) envs['PL_PRIMARY_STORAGE_FS'] = storage.rootPath;\n break;\n case 'LIBRARY':\n if (storage.rootPath) envs['PL_DATA_LIBRARY_FS_PATH'] = storage.rootPath;\n break;\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n\n default:\n util.assertNever(sType);\n }\n\n return {};\n }\n\n private renderRunInfo(\n runInfo: {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n },\n indent: number = 10,\n ) {\n const report: string[] = [];\n\n const column = (t: string) => t.padStart(indent, ' ');\n if (runInfo.configPath) {\n report.push(`${column('config')}: ${runInfo.configPath}`);\n }\n\n if (runInfo.apiAddr) {\n report.push(`${column('API')}: ${runInfo.apiAddr}`);\n } else if (runInfo.apiPort) {\n report.push(`${column('API')}: 127.0.0.1:${runInfo.apiPort.toString()}`);\n } else {\n report.push(`${column('API')}: 127.0.0.1:6345`);\n }\n\n if (runInfo.logPath) {\n report.push(`${column('log')}: ${runInfo.logPath}`);\n }\n\n const primaryType = runInfo.primary?.type;\n switch (primaryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('primary')}: ${runInfo.primary!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('primary')}: S3 at '${runInfo.primary!.endpoint ?? 'AWS'}', bucket '${runInfo.primary!.bucketName!}', prefix: '${runInfo.primary!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(primaryType);\n }\n\n const libraryType = runInfo.library?.type;\n switch (libraryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('library')}: ${runInfo.library!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('library')}: S3 at '${runInfo.library!.endpoint ?? 'AWS'}', bucket '${runInfo.library!.bucketName!}', prefix: '${runInfo.library!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(libraryType);\n }\n\n if (runInfo.work) {\n report.push(`${column('workdirs')}: ${runInfo.work.rootPath}`);\n }\n\n if (runInfo.dbPath) {\n report.push(`${column('db')}: ${runInfo.dbPath}`);\n }\n\n return report.join('\\n');\n }\n}\n\nexport function checkRunError(result: SpawnSyncReturns<Buffer>[], message?: string) {\n for (const buffer of result) {\n if (buffer.error) {\n throw buffer.error;\n }\n\n const msg = message ?? 'failed to run command';\n\n if (buffer.status !== 0) {\n throw new Error(`${msg}, process exited with code '${buffer.status}'`);\n }\n }\n}\n\nexport type createLocalOptions = {\n version?: string;\n sourcesPath?: string;\n binaryPath?: string;\n configPath?: string;\n configOptions?: plCfg.plOptions;\n workdir?: string;\n\n primaryURL?: string;\n libraryURL?: string;\n\n backendCommands?: string[];\n};\n\nexport type createLocalFSOptions = createLocalOptions;\n\nexport type createLocalS3Options = createLocalOptions & {\n minioPort?: number;\n minioConsolePort?: number;\n};\n"],"names":["run.runCommands","util.assertNever","platforma.binaryPath","os","plCfg.storageSettingsFromURL","plCfg.loadDefaults","fs","pkg.assets","plCfg.render","composeCfg.render","util.ensureDir","pkg.plImageTag","util.askYN","util.randomStr"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from './commands/create-block';\nimport Cmd1 from './commands/reset';\nimport Cmd2 from './commands/start';\nimport Cmd3 from './commands/stop';\nimport Cmd4 from './commands/start/docker';\nimport Cmd5 from './commands/start/local';\nimport Cmd6 from './commands/svc/delete';\nimport Cmd7 from './commands/svc/down';\nimport Cmd8 from './commands/svc/list';\nimport Cmd9 from './commands/svc/up';\nimport Cmd10 from './commands/start/docker/s3';\nimport Cmd11 from './commands/start/local/s3';\nimport Cmd12 from './commands/svc/create/docker';\nimport Cmd13 from './commands/svc/create/local';\nimport Cmd14 from './commands/svc/create/docker/s3';\nimport Cmd15 from './commands/svc/create/local/s3';\n\n// prettier-ignore\nexport const COMMANDS = {\n 'create-block': Cmd0,\n 'reset': Cmd1,\n 'start': Cmd2,\n 'stop': Cmd3,\n 'start:docker': Cmd4,\n 'start:local': Cmd5,\n 'svc:delete': Cmd6,\n 'svc:down': Cmd7,\n 'svc:list': Cmd8,\n 'svc:up': Cmd9,\n 'start:docker:s3': Cmd10,\n 'start:local:s3': Cmd11,\n 'svc:create:docker': Cmd12,\n 'svc:create:local': Cmd13,\n 'svc:create:docker:s3': Cmd14,\n 'svc:create:local:s3': Cmd15,\n};\n"],"names":["Cmd0","Cmd1","Cmd2","Cmd3","Cmd4","Cmd5","Cmd6","Cmd7","Cmd8","Cmd9","Cmd10","Cmd11","Cmd12","Cmd13","Cmd14","Cmd15"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAmBA;AACO,MAAM,QAAQ,GAAG;AACtB,IAAA,cAAc,EAAEA,WAAI;AACpB,IAAA,OAAO,EAAEC,KAAI;AACb,IAAA,OAAO,EAAEC,KAAI;AACb,IAAA,MAAM,EAAEC,IAAI;AACZ,IAAA,cAAc,EAAEC,QAAI;AACpB,IAAA,aAAa,EAAEC,OAAI;AACnB,IAAA,YAAY,EAAEC,OAAI;AAClB,IAAA,UAAU,EAAEC,IAAI;AAChB,IAAA,UAAU,EAAEC,IAAI;AAChB,IAAA,QAAQ,EAAEC,EAAI;AACd,IAAA,iBAAiB,EAAEC,IAAK;AACxB,IAAA,gBAAgB,EAAEC,IAAK;AACvB,IAAA,mBAAmB,EAAEC,MAAK;AAC1B,IAAA,kBAAkB,EAAEC,KAAK;AACzB,IAAA,sBAAsB,EAAEC,IAAK;AAC7B,IAAA,qBAAqB,EAAEC,EAAK;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from './commands/create-block';\nimport Cmd1 from './commands/reset';\nimport Cmd2 from './commands/start';\nimport Cmd3 from './commands/stop';\nimport Cmd4 from './commands/start/docker';\nimport Cmd5 from './commands/start/local';\nimport Cmd6 from './commands/svc/delete';\nimport Cmd7 from './commands/svc/down';\nimport Cmd8 from './commands/svc/list';\nimport Cmd9 from './commands/svc/up';\nimport Cmd10 from './commands/start/docker/s3';\nimport Cmd11 from './commands/start/local/s3';\nimport Cmd13 from './commands/svc/create/docker';\nimport Cmd14 from './commands/svc/create/local';\nimport Cmd15 from './commands/svc/create/docker/s3';\nimport Cmd16 from './commands/svc/create/local/s3';\n\n// prettier-ignore\nexport const COMMANDS = {\n 'create-block': Cmd0,\n 'reset': Cmd1,\n 'start': Cmd2,\n 'stop': Cmd3,\n 'start:docker': Cmd4,\n 'start:local': Cmd5,\n 'svc:delete': Cmd6,\n 'svc:down': Cmd7,\n 'svc:list': Cmd8,\n 'svc:up': Cmd9,\n 'start:docker:s3': Cmd10,\n 'start:local:s3': Cmd11,\n 'svc:create:docker': Cmd13,\n 'svc:create:local': Cmd14,\n 'svc:create:docker:s3': Cmd15,\n 'svc:create:local:s3': Cmd16,\n};\n"],"names":["Cmd0","Cmd1","Cmd2","Cmd3","Cmd4","Cmd5","Cmd6","Cmd7","Cmd8","Cmd9","Cmd10","Cmd11","Cmd13","Cmd14","Cmd15","Cmd16"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAmBA;AACO,MAAM,QAAQ,GAAG;AACtB,IAAA,cAAc,EAAEA,WAAI;AACpB,IAAA,OAAO,EAAEC,KAAI;AACb,IAAA,OAAO,EAAEC,KAAI;AACb,IAAA,MAAM,EAAEC,IAAI;AACZ,IAAA,cAAc,EAAEC,QAAI;AACpB,IAAA,aAAa,EAAEC,OAAI;AACnB,IAAA,YAAY,EAAEC,OAAI;AAClB,IAAA,UAAU,EAAEC,IAAI;AAChB,IAAA,UAAU,EAAEC,IAAI;AAChB,IAAA,QAAQ,EAAEC,EAAI;AACd,IAAA,iBAAiB,EAAEC,IAAK;AACxB,IAAA,gBAAgB,EAAEC,IAAK;AACvB,IAAA,mBAAmB,EAAEC,MAAK;AAC1B,IAAA,kBAAkB,EAAEC,KAAK;AACzB,IAAA,sBAAsB,EAAEC,IAAK;AAC7B,IAAA,qBAAqB,EAAEC,EAAK;;;;;"}
package/dist/index.d.ts CHANGED
@@ -10,10 +10,10 @@ import { default as Cmd8 } from './commands/svc/list';
10
10
  import { default as Cmd9 } from './commands/svc/up';
11
11
  import { default as Cmd10 } from './commands/start/docker/s3';
12
12
  import { default as Cmd11 } from './commands/start/local/s3';
13
- import { default as Cmd12 } from './commands/svc/create/docker';
14
- import { default as Cmd13 } from './commands/svc/create/local';
15
- import { default as Cmd14 } from './commands/svc/create/docker/s3';
16
- import { default as Cmd15 } from './commands/svc/create/local/s3';
13
+ import { default as Cmd13 } from './commands/svc/create/docker';
14
+ import { default as Cmd14 } from './commands/svc/create/local';
15
+ import { default as Cmd15 } from './commands/svc/create/docker/s3';
16
+ import { default as Cmd16 } from './commands/svc/create/local/s3';
17
17
  export declare const COMMANDS: {
18
18
  'create-block': typeof Cmd0;
19
19
  reset: typeof Cmd1;
@@ -27,8 +27,8 @@ export declare const COMMANDS: {
27
27
  'svc:up': typeof Cmd9;
28
28
  'start:docker:s3': typeof Cmd10;
29
29
  'start:local:s3': typeof Cmd11;
30
- 'svc:create:docker': typeof Cmd12;
31
- 'svc:create:local': typeof Cmd13;
32
- 'svc:create:docker:s3': typeof Cmd14;
33
- 'svc:create:local:s3': typeof Cmd15;
30
+ 'svc:create:docker': typeof Cmd13;
31
+ 'svc:create:local': typeof Cmd14;
32
+ 'svc:create:docker:s3': typeof Cmd15;
33
+ 'svc:create:local:s3': typeof Cmd16;
34
34
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from './commands/create-block';\nimport Cmd1 from './commands/reset';\nimport Cmd2 from './commands/start';\nimport Cmd3 from './commands/stop';\nimport Cmd4 from './commands/start/docker';\nimport Cmd5 from './commands/start/local';\nimport Cmd6 from './commands/svc/delete';\nimport Cmd7 from './commands/svc/down';\nimport Cmd8 from './commands/svc/list';\nimport Cmd9 from './commands/svc/up';\nimport Cmd10 from './commands/start/docker/s3';\nimport Cmd11 from './commands/start/local/s3';\nimport Cmd12 from './commands/svc/create/docker';\nimport Cmd13 from './commands/svc/create/local';\nimport Cmd14 from './commands/svc/create/docker/s3';\nimport Cmd15 from './commands/svc/create/local/s3';\n\n// prettier-ignore\nexport const COMMANDS = {\n 'create-block': Cmd0,\n 'reset': Cmd1,\n 'start': Cmd2,\n 'stop': Cmd3,\n 'start:docker': Cmd4,\n 'start:local': Cmd5,\n 'svc:delete': Cmd6,\n 'svc:down': Cmd7,\n 'svc:list': Cmd8,\n 'svc:up': Cmd9,\n 'start:docker:s3': Cmd10,\n 'start:local:s3': Cmd11,\n 'svc:create:docker': Cmd12,\n 'svc:create:local': Cmd13,\n 'svc:create:docker:s3': Cmd14,\n 'svc:create:local:s3': Cmd15,\n};\n"],"names":["Cmd0","Cmd1","Cmd2","Cmd3","Cmd4","Cmd5","Cmd6","Cmd7","Cmd8","Cmd9","Cmd10","Cmd11","Cmd12","Cmd13","Cmd14","Cmd15"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAmBA;AACO,MAAM,QAAQ,GAAG;AACtB,IAAA,cAAc,EAAEA,WAAI;AACpB,IAAA,OAAO,EAAEC,KAAI;AACb,IAAA,OAAO,EAAEC,KAAI;AACb,IAAA,MAAM,EAAEC,IAAI;AACZ,IAAA,cAAc,EAAEC,QAAI;AACpB,IAAA,aAAa,EAAEC,OAAI;AACnB,IAAA,YAAY,EAAEC,MAAI;AAClB,IAAA,UAAU,EAAEC,IAAI;AAChB,IAAA,UAAU,EAAEC,IAAI;AAChB,IAAA,QAAQ,EAAEC,EAAI;AACd,IAAA,iBAAiB,EAAEC,IAAK;AACxB,IAAA,gBAAgB,EAAEC,IAAK;AACvB,IAAA,mBAAmB,EAAEC,MAAK;AAC1B,IAAA,kBAAkB,EAAEC,OAAK;AACzB,IAAA,sBAAsB,EAAEC,EAAK;AAC7B,IAAA,qBAAqB,EAAEC,KAAK;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["// DO NOT EDIT. This file was generated by oclif-index utility.\n\nimport Cmd0 from './commands/create-block';\nimport Cmd1 from './commands/reset';\nimport Cmd2 from './commands/start';\nimport Cmd3 from './commands/stop';\nimport Cmd4 from './commands/start/docker';\nimport Cmd5 from './commands/start/local';\nimport Cmd6 from './commands/svc/delete';\nimport Cmd7 from './commands/svc/down';\nimport Cmd8 from './commands/svc/list';\nimport Cmd9 from './commands/svc/up';\nimport Cmd10 from './commands/start/docker/s3';\nimport Cmd11 from './commands/start/local/s3';\nimport Cmd13 from './commands/svc/create/docker';\nimport Cmd14 from './commands/svc/create/local';\nimport Cmd15 from './commands/svc/create/docker/s3';\nimport Cmd16 from './commands/svc/create/local/s3';\n\n// prettier-ignore\nexport const COMMANDS = {\n 'create-block': Cmd0,\n 'reset': Cmd1,\n 'start': Cmd2,\n 'stop': Cmd3,\n 'start:docker': Cmd4,\n 'start:local': Cmd5,\n 'svc:delete': Cmd6,\n 'svc:down': Cmd7,\n 'svc:list': Cmd8,\n 'svc:up': Cmd9,\n 'start:docker:s3': Cmd10,\n 'start:local:s3': Cmd11,\n 'svc:create:docker': Cmd13,\n 'svc:create:local': Cmd14,\n 'svc:create:docker:s3': Cmd15,\n 'svc:create:local:s3': Cmd16,\n};\n"],"names":["Cmd0","Cmd1","Cmd2","Cmd3","Cmd4","Cmd5","Cmd6","Cmd7","Cmd8","Cmd9","Cmd10","Cmd11","Cmd13","Cmd14","Cmd15","Cmd16"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAmBA;AACO,MAAM,QAAQ,GAAG;AACtB,IAAA,cAAc,EAAEA,WAAI;AACpB,IAAA,OAAO,EAAEC,KAAI;AACb,IAAA,OAAO,EAAEC,KAAI;AACb,IAAA,MAAM,EAAEC,IAAI;AACZ,IAAA,cAAc,EAAEC,QAAI;AACpB,IAAA,aAAa,EAAEC,OAAI;AACnB,IAAA,YAAY,EAAEC,MAAI;AAClB,IAAA,UAAU,EAAEC,IAAI;AAChB,IAAA,UAAU,EAAEC,IAAI;AAChB,IAAA,QAAQ,EAAEC,EAAI;AACd,IAAA,iBAAiB,EAAEC,IAAK;AACxB,IAAA,gBAAgB,EAAEC,IAAK;AACvB,IAAA,mBAAmB,EAAEC,MAAK;AAC1B,IAAA,kBAAkB,EAAEC,OAAK;AACzB,IAAA,sBAAsB,EAAEC,EAAK;AAC7B,IAAA,qBAAqB,EAAEC,KAAK;;;;;"}
package/dist/package.cjs CHANGED
@@ -4,14 +4,33 @@ var path$1 = require('node:path');
4
4
  var fs = require('node:fs');
5
5
  var plDeployments = require('@milaboratories/pl-deployments');
6
6
 
7
+ function _interopNamespaceDefault(e) {
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
16
+ });
17
+ }
18
+ });
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs);
25
+
7
26
  function path(...p) {
8
- return path$1.resolve(__dirname, '..', ...p);
27
+ return path$1.resolve(process.cwd(), '..', ...p);
9
28
  }
10
29
  function assets(...p) {
11
30
  return path('assets', ...p);
12
31
  }
13
32
  function readFileSync(...p) {
14
- return fs.readFileSync(path(...p));
33
+ return fs__namespace.readFileSync(path(...p));
15
34
  }
16
35
  function plImageTag(version) {
17
36
  if (!version) {
@@ -1 +1 @@
1
- {"version":3,"file":"package.cjs","sources":["../src/package.ts"],"sourcesContent":["import { resolve, join } from 'path';\nimport fs from 'fs';\nimport { getDefaultPlVersion } from '@milaboratories/pl-deployments';\n\nexport function path(...p: string[]): string {\n return resolve(__dirname, '..', ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path('dist', ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path('assets', ...p);\n}\n\nexport function composeFiles(): string[] {\n const dockerDirEntries = fs.readdirSync(assets());\n return dockerDirEntries\n .filter((entry) => {\n return entry.startsWith('compose-') && entry.endsWith('.yaml');\n })\n .map((value) => assets(value));\n}\n\nexport function readFileSync(...p: string[]): Buffer {\n return fs.readFileSync(path(...p));\n}\n\nexport function plImageTag(version?: string): string {\n if (!version) {\n version = getDefaultPlVersion();\n }\n\n return `quay.io/milaboratories/platforma:${version}`;\n}\n"],"names":["resolve","getDefaultPlVersion"],"mappings":";;;;;;AAIM,SAAU,IAAI,CAAC,GAAG,CAAW,EAAA;IACjC,OAAOA,cAAO,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACvC;AAMM,SAAU,MAAM,CAAC,GAAG,CAAW,EAAA;AACnC,IAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC7B;AAWM,SAAU,YAAY,CAAC,GAAG,CAAW,EAAA;IACzC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC;AAEM,SAAU,UAAU,CAAC,OAAgB,EAAA;IACzC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAGC,iCAAmB,EAAE;IACjC;IAEA,OAAO,CAAA,iCAAA,EAAoC,OAAO,CAAA,CAAE;AACtD;;;;;;;"}
1
+ {"version":3,"file":"package.cjs","sources":["../src/package.ts"],"sourcesContent":["import { resolve } from 'path';\nimport * as fs from 'fs';\nimport { getDefaultPlVersion } from '@milaboratories/pl-deployments';\n\nexport function path(...p: string[]): string {\n return resolve(process.cwd(), '..', ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path('dist', ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path('assets', ...p);\n}\n\nexport function composeFiles(): string[] {\n const dockerDirEntries = fs.readdirSync(assets());\n return dockerDirEntries\n .filter((entry) => {\n return entry.startsWith('compose-') && entry.endsWith('.yaml');\n })\n .map((value) => assets(value));\n}\n\nexport function readFileSync(...p: string[]): Buffer {\n return fs.readFileSync(path(...p));\n}\n\nexport function plImageTag(version?: string): string {\n if (!version) {\n version = getDefaultPlVersion();\n }\n\n return `quay.io/milaboratories/platforma:${version}`;\n}\n"],"names":["resolve","fs","getDefaultPlVersion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIM,SAAU,IAAI,CAAC,GAAG,CAAW,EAAA;AACjC,IAAA,OAAOA,cAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3C;AAMM,SAAU,MAAM,CAAC,GAAG,CAAW,EAAA;AACnC,IAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC7B;AAWM,SAAU,YAAY,CAAC,GAAG,CAAW,EAAA;IACzC,OAAOC,aAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC;AAEM,SAAU,UAAU,CAAC,OAAgB,EAAA;IACzC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAGC,iCAAmB,EAAE;IACjC;IAEA,OAAO,CAAA,iCAAA,EAAoC,OAAO,CAAA,CAAE;AACtD;;;;;;;"}
package/dist/package.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { resolve } from 'node:path';
2
- import fs from 'node:fs';
2
+ import * as fs from 'node:fs';
3
3
  import { getDefaultPlVersion } from '@milaboratories/pl-deployments';
4
4
 
5
5
  function path(...p) {
6
- return resolve(__dirname, '..', ...p);
6
+ return resolve(process.cwd(), '..', ...p);
7
7
  }
8
8
  function assets(...p) {
9
9
  return path('assets', ...p);
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","sources":["../src/package.ts"],"sourcesContent":["import { resolve, join } from 'path';\nimport fs from 'fs';\nimport { getDefaultPlVersion } from '@milaboratories/pl-deployments';\n\nexport function path(...p: string[]): string {\n return resolve(__dirname, '..', ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path('dist', ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path('assets', ...p);\n}\n\nexport function composeFiles(): string[] {\n const dockerDirEntries = fs.readdirSync(assets());\n return dockerDirEntries\n .filter((entry) => {\n return entry.startsWith('compose-') && entry.endsWith('.yaml');\n })\n .map((value) => assets(value));\n}\n\nexport function readFileSync(...p: string[]): Buffer {\n return fs.readFileSync(path(...p));\n}\n\nexport function plImageTag(version?: string): string {\n if (!version) {\n version = getDefaultPlVersion();\n }\n\n return `quay.io/milaboratories/platforma:${version}`;\n}\n"],"names":[],"mappings":";;;;AAIM,SAAU,IAAI,CAAC,GAAG,CAAW,EAAA;IACjC,OAAO,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACvC;AAMM,SAAU,MAAM,CAAC,GAAG,CAAW,EAAA;AACnC,IAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC7B;AAWM,SAAU,YAAY,CAAC,GAAG,CAAW,EAAA;IACzC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC;AAEM,SAAU,UAAU,CAAC,OAAgB,EAAA;IACzC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,mBAAmB,EAAE;IACjC;IAEA,OAAO,CAAA,iCAAA,EAAoC,OAAO,CAAA,CAAE;AACtD;;;;"}
1
+ {"version":3,"file":"package.js","sources":["../src/package.ts"],"sourcesContent":["import { resolve } from 'path';\nimport * as fs from 'fs';\nimport { getDefaultPlVersion } from '@milaboratories/pl-deployments';\n\nexport function path(...p: string[]): string {\n return resolve(process.cwd(), '..', ...p);\n}\n\nexport function dist(...p: string[]): string {\n return path('dist', ...p);\n}\n\nexport function assets(...p: string[]): string {\n return path('assets', ...p);\n}\n\nexport function composeFiles(): string[] {\n const dockerDirEntries = fs.readdirSync(assets());\n return dockerDirEntries\n .filter((entry) => {\n return entry.startsWith('compose-') && entry.endsWith('.yaml');\n })\n .map((value) => assets(value));\n}\n\nexport function readFileSync(...p: string[]): Buffer {\n return fs.readFileSync(path(...p));\n}\n\nexport function plImageTag(version?: string): string {\n if (!version) {\n version = getDefaultPlVersion();\n }\n\n return `quay.io/milaboratories/platforma:${version}`;\n}\n"],"names":[],"mappings":";;;;AAIM,SAAU,IAAI,CAAC,GAAG,CAAW,EAAA;AACjC,IAAA,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3C;AAMM,SAAU,MAAM,CAAC,GAAG,CAAW,EAAA;AACnC,IAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC7B;AAWM,SAAU,YAAY,CAAC,GAAG,CAAW,EAAA;IACzC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpC;AAEM,SAAU,UAAU,CAAC,OAAgB,EAAA;IACzC,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,GAAG,mBAAmB,EAAE;IACjC;IAEA,OAAO,CAAA,iCAAA,EAAoC,OAAO,CAAA,CAAE;AACtD;;;;"}
package/dist/platforma.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import os__default from 'node:os';
2
- import fs from 'node:fs';
2
+ import fs__default from 'node:fs';
3
3
  import https from 'node:https';
4
4
  import path from 'node:path';
5
5
  import * as tar from 'tar';
@@ -40,11 +40,11 @@ function downloadArchive(logger, options) {
40
40
  const archiveName = `pl-${version}-${archiveArch()}.tgz`;
41
41
  const downloadURL = options?.downloadURL ?? `https://cdn.platforma.bio/software/pl/${archiveOS()}/${archiveName}`;
42
42
  const archiveFilePath = options?.saveTo ?? state.binaries(archiveName);
43
- if (fs.existsSync(archiveFilePath)) {
43
+ if (fs__default.existsSync(archiveFilePath)) {
44
44
  logger.info(`Platforma Backend archive download skipped: '${archiveFilePath}' already exists`);
45
45
  return Promise.resolve(archiveFilePath);
46
46
  }
47
- fs.mkdirSync(path.dirname(archiveFilePath), { recursive: true });
47
+ fs__default.mkdirSync(path.dirname(archiveFilePath), { recursive: true });
48
48
  logger.info(`Downloading Platforma Backend archive:\n URL: ${downloadURL}\n Save to: ${archiveFilePath}`);
49
49
  const request = https.get(downloadURL);
50
50
  return new Promise((resolve, reject) => {
@@ -63,7 +63,7 @@ function downloadArchive(logger, options) {
63
63
  }
64
64
  const totalBytes = parseInt(response.headers['content-length'] || '0', 10);
65
65
  let downloadedBytes = 0;
66
- const archive = fs.createWriteStream(archiveFilePath);
66
+ const archive = fs__default.createWriteStream(archiveFilePath);
67
67
  response.pipe(archive);
68
68
  response.on('data', (chunk) => {
69
69
  downloadedBytes += chunk.length;
@@ -73,7 +73,7 @@ function downloadArchive(logger, options) {
73
73
  }
74
74
  });
75
75
  response.on('error', (err) => {
76
- fs.unlinkSync(archiveFilePath);
76
+ fs__default.unlinkSync(archiveFilePath);
77
77
  logger.error(`Failed to download Platforma Binary: ${err.message}`);
78
78
  request.destroy();
79
79
  reject(err);
@@ -96,18 +96,18 @@ function extractArchive(logger, options) {
96
96
  logger.debug(` archive path: '${archivePath}'`);
97
97
  const targetDir = options?.extractTo ?? trimExtension(archivePath);
98
98
  logger.debug(` target dir: '${targetDir}'`);
99
- if (fs.existsSync(targetDir)) {
99
+ if (fs__default.existsSync(targetDir)) {
100
100
  logger.info(`Platforma Backend binaries unpack skipped: '${targetDir}' exists`);
101
101
  return targetDir;
102
102
  }
103
- if (!fs.existsSync(archivePath)) {
103
+ if (!fs__default.existsSync(archivePath)) {
104
104
  const msg = `Platforma Backend binary archive not found at '${archivePath}'`;
105
105
  logger.error(msg);
106
106
  throw new Error(msg);
107
107
  }
108
- if (!fs.existsSync(targetDir)) {
108
+ if (!fs__default.existsSync(targetDir)) {
109
109
  logger.debug(` creating target dir '${targetDir}'`);
110
- fs.mkdirSync(targetDir, { recursive: true });
110
+ fs__default.mkdirSync(targetDir, { recursive: true });
111
111
  }
112
112
  logger.info(`Unpacking Platforma Backend archive:\n Archive: ${archivePath}\n Target dir: ${targetDir}`);
113
113
  tar.x({
@@ -1 +1 @@
1
- {"version":3,"file":"platforma.js","sources":["../src/platforma.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs';\nimport https from 'https';\nimport path from 'node:path';\n\nimport * as tar from 'tar';\nimport type winston from 'winston';\nimport state from './state';\nimport { getDefaultPlVersion } from '@milaboratories/pl-deployments';\n\nexport const OSes = ['linux', 'macos', 'windows'] as const;\nexport type OSType = (typeof OSes)[number];\n\nexport function archiveOS(osName?: string): OSType {\n const platform = osName ?? os.platform();\n\n switch (platform) {\n case 'darwin':\n return 'macos';\n case 'linux':\n return 'linux';\n case 'win32':\n return 'windows';\n default:\n throw new Error(\n `operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: `\n + JSON.stringify(OSes),\n );\n }\n}\n\nexport const Arches = ['amd64', 'arm64'] as const;\nexport type ArchType = (typeof Arches)[number];\n\nexport function archiveArch(archName?: string): ArchType {\n const arch = archName ?? os.arch();\n\n switch (arch) {\n case 'arm64':\n return 'arm64';\n case 'x64':\n return 'amd64';\n default:\n throw new Error(\n `processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: `\n + JSON.stringify(Arches),\n );\n }\n}\n\nexport function downloadArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n showProgress?: boolean;\n downloadURL?: string;\n saveTo?: string;\n },\n): Promise<string> {\n const version = options?.version ?? getDefaultPlVersion();\n const showProgress = options?.showProgress ?? process.stdout.isTTY;\n\n const archiveName = `pl-${version}-${archiveArch()}.tgz`;\n const downloadURL = options?.downloadURL ?? `https://cdn.platforma.bio/software/pl/${archiveOS()}/${archiveName}`;\n\n const archiveFilePath = options?.saveTo ?? state.binaries(archiveName);\n if (fs.existsSync(archiveFilePath)) {\n logger.info(`Platforma Backend archive download skipped: '${archiveFilePath}' already exists`);\n return Promise.resolve(archiveFilePath);\n }\n\n fs.mkdirSync(path.dirname(archiveFilePath), { recursive: true });\n\n logger.info(`Downloading Platforma Backend archive:\\n URL: ${downloadURL}\\n Save to: ${archiveFilePath}`);\n\n const request = https.get(downloadURL);\n\n return new Promise((resolve, reject) => {\n request.on('response', (response) => {\n if (!response.statusCode) {\n const err = new Error('failed to download archive: no HTTP status code in response from server');\n request.destroy();\n reject(err);\n return;\n }\n if (response.statusCode !== 200) {\n const err = new Error(`failed to download archive: ${response.statusCode} ${response.statusMessage}`);\n request.destroy();\n reject(err);\n return;\n }\n\n const totalBytes = parseInt(response.headers['content-length'] || '0', 10);\n let downloadedBytes = 0;\n\n const archive = fs.createWriteStream(archiveFilePath);\n\n response.pipe(archive);\n response.on('data', (chunk) => {\n downloadedBytes += chunk.length;\n const progress = (downloadedBytes / totalBytes) * 100;\n if (showProgress) {\n process.stdout.write(` downloading: ${progress.toFixed(2)}%\\r`);\n }\n });\n\n response.on('error', (err: Error) => {\n fs.unlinkSync(archiveFilePath);\n logger.error(`Failed to download Platforma Binary: ${err.message}`);\n request.destroy();\n reject(err);\n });\n\n archive.on('finish', () => {\n archive.close();\n logger.info(` ... download done.`);\n request.destroy();\n resolve(archiveFilePath);\n });\n });\n });\n}\n\nexport function extractArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n archivePath?: string;\n extractTo?: string;\n },\n): string {\n logger.debug('extracting archive...');\n\n const version = options?.version ?? getDefaultPlVersion();\n logger.debug(` version: '${version}'`);\n const archiveName = `${binaryDirName({ version })}.tgz`;\n\n const archivePath = options?.archivePath ?? state.binaries(archiveName);\n logger.debug(` archive path: '${archivePath}'`);\n\n const targetDir = options?.extractTo ?? trimExtension(archivePath);\n logger.debug(` target dir: '${targetDir}'`);\n\n if (fs.existsSync(targetDir)) {\n logger.info(`Platforma Backend binaries unpack skipped: '${targetDir}' exists`);\n return targetDir;\n }\n\n if (!fs.existsSync(archivePath)) {\n const msg = `Platforma Backend binary archive not found at '${archivePath}'`;\n logger.error(msg);\n throw new Error(msg);\n }\n\n if (!fs.existsSync(targetDir)) {\n logger.debug(` creating target dir '${targetDir}'`);\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n logger.info(`Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${targetDir}`);\n\n tar.x({\n file: archivePath,\n cwd: targetDir,\n gzip: true,\n sync: true,\n });\n\n logger.info(` ... unpack done.`);\n\n return targetDir;\n}\n\nexport function getBinary(\n logger: winston.Logger,\n options?: { version?: string; showProgress?: boolean },\n): Promise<string> {\n return downloadArchive(logger, options).then((archivePath) => extractArchive(logger, { archivePath }));\n}\n\nfunction binaryDirName(options?: { version?: string }): string {\n const version = options?.version ?? getDefaultPlVersion();\n return `pl-${version}-${archiveArch()}`;\n}\n\nexport function binaryPath(version?: string, ...p: string[]): string {\n return state.binaries(binaryDirName({ version }), ...p);\n}\n\nfunction trimExtension(filename: string): string {\n const lastDotIndex = filename.lastIndexOf('.');\n if (lastDotIndex === -1) {\n return filename;\n }\n return filename.slice(0, lastDotIndex);\n}\n"],"names":["os"],"mappings":"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"}
1
+ {"version":3,"file":"platforma.js","sources":["../src/platforma.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs';\nimport https from 'https';\nimport path from 'node:path';\n\nimport * as tar from 'tar';\nimport type winston from 'winston';\nimport state from './state';\nimport { getDefaultPlVersion } from '@milaboratories/pl-deployments';\n\nexport const OSes = ['linux', 'macos', 'windows'] as const;\nexport type OSType = (typeof OSes)[number];\n\nexport function archiveOS(osName?: string): OSType {\n const platform = osName ?? os.platform();\n\n switch (platform) {\n case 'darwin':\n return 'macos';\n case 'linux':\n return 'linux';\n case 'win32':\n return 'windows';\n default:\n throw new Error(\n `operating system '${platform}' is not currently supported by Platforma ecosystem. The list of OSes supported: `\n + JSON.stringify(OSes),\n );\n }\n}\n\nexport const Arches = ['amd64', 'arm64'] as const;\nexport type ArchType = (typeof Arches)[number];\n\nexport function archiveArch(archName?: string): ArchType {\n const arch = archName ?? os.arch();\n\n switch (arch) {\n case 'arm64':\n return 'arm64';\n case 'x64':\n return 'amd64';\n default:\n throw new Error(\n `processor architecture '${arch}' is not currently supported by Platforma ecosystem. The list of architectures supported: `\n + JSON.stringify(Arches),\n );\n }\n}\n\nexport function downloadArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n showProgress?: boolean;\n downloadURL?: string;\n saveTo?: string;\n },\n): Promise<string> {\n const version = options?.version ?? getDefaultPlVersion();\n const showProgress = options?.showProgress ?? process.stdout.isTTY;\n\n const archiveName = `pl-${version}-${archiveArch()}.tgz`;\n const downloadURL = options?.downloadURL ?? `https://cdn.platforma.bio/software/pl/${archiveOS()}/${archiveName}`;\n\n const archiveFilePath = options?.saveTo ?? state.binaries(archiveName);\n if (fs.existsSync(archiveFilePath)) {\n logger.info(`Platforma Backend archive download skipped: '${archiveFilePath}' already exists`);\n return Promise.resolve(archiveFilePath);\n }\n\n fs.mkdirSync(path.dirname(archiveFilePath), { recursive: true });\n\n logger.info(`Downloading Platforma Backend archive:\\n URL: ${downloadURL}\\n Save to: ${archiveFilePath}`);\n\n const request = https.get(downloadURL);\n\n return new Promise((resolve, reject) => {\n request.on('response', (response) => {\n if (!response.statusCode) {\n const err = new Error('failed to download archive: no HTTP status code in response from server');\n request.destroy();\n reject(err);\n return;\n }\n if (response.statusCode !== 200) {\n const err = new Error(`failed to download archive: ${response.statusCode} ${response.statusMessage}`);\n request.destroy();\n reject(err);\n return;\n }\n\n const totalBytes = parseInt(response.headers['content-length'] || '0', 10);\n let downloadedBytes = 0;\n\n const archive = fs.createWriteStream(archiveFilePath);\n\n response.pipe(archive);\n response.on('data', (chunk) => {\n downloadedBytes += chunk.length;\n const progress = (downloadedBytes / totalBytes) * 100;\n if (showProgress) {\n process.stdout.write(` downloading: ${progress.toFixed(2)}%\\r`);\n }\n });\n\n response.on('error', (err: Error) => {\n fs.unlinkSync(archiveFilePath);\n logger.error(`Failed to download Platforma Binary: ${err.message}`);\n request.destroy();\n reject(err);\n });\n\n archive.on('finish', () => {\n archive.close();\n logger.info(` ... download done.`);\n request.destroy();\n resolve(archiveFilePath);\n });\n });\n });\n}\n\nexport function extractArchive(\n logger: winston.Logger,\n options?: {\n version?: string;\n archivePath?: string;\n extractTo?: string;\n },\n): string {\n logger.debug('extracting archive...');\n\n const version = options?.version ?? getDefaultPlVersion();\n logger.debug(` version: '${version}'`);\n const archiveName = `${binaryDirName({ version })}.tgz`;\n\n const archivePath = options?.archivePath ?? state.binaries(archiveName);\n logger.debug(` archive path: '${archivePath}'`);\n\n const targetDir = options?.extractTo ?? trimExtension(archivePath);\n logger.debug(` target dir: '${targetDir}'`);\n\n if (fs.existsSync(targetDir)) {\n logger.info(`Platforma Backend binaries unpack skipped: '${targetDir}' exists`);\n return targetDir;\n }\n\n if (!fs.existsSync(archivePath)) {\n const msg = `Platforma Backend binary archive not found at '${archivePath}'`;\n logger.error(msg);\n throw new Error(msg);\n }\n\n if (!fs.existsSync(targetDir)) {\n logger.debug(` creating target dir '${targetDir}'`);\n fs.mkdirSync(targetDir, { recursive: true });\n }\n\n logger.info(`Unpacking Platforma Backend archive:\\n Archive: ${archivePath}\\n Target dir: ${targetDir}`);\n\n tar.x({\n file: archivePath,\n cwd: targetDir,\n gzip: true,\n sync: true,\n });\n\n logger.info(` ... unpack done.`);\n\n return targetDir;\n}\n\nexport function getBinary(\n logger: winston.Logger,\n options?: { version?: string; showProgress?: boolean },\n): Promise<string> {\n return downloadArchive(logger, options).then((archivePath) => extractArchive(logger, { archivePath }));\n}\n\nfunction binaryDirName(options?: { version?: string }): string {\n const version = options?.version ?? getDefaultPlVersion();\n return `pl-${version}-${archiveArch()}`;\n}\n\nexport function binaryPath(version?: string, ...p: string[]): string {\n return state.binaries(binaryDirName({ version }), ...p);\n}\n\nfunction trimExtension(filename: string): string {\n const lastDotIndex = filename.lastIndexOf('.');\n if (lastDotIndex === -1) {\n return filename;\n }\n return filename.slice(0, lastDotIndex);\n}\n"],"names":["os","fs"],"mappings":"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"}