@platforma-sdk/bootstrap 3.5.18 → 3.5.20

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 (171) hide show
  1. package/dist/block.cjs +172 -0
  2. package/dist/block.cjs.map +1 -0
  3. package/dist/block.d.ts +0 -1
  4. package/dist/block.js +151 -0
  5. package/dist/block.js.map +1 -0
  6. package/dist/cmd-opts.cjs +205 -0
  7. package/dist/cmd-opts.cjs.map +1 -0
  8. package/dist/cmd-opts.d.ts +36 -38
  9. package/dist/cmd-opts.js +181 -0
  10. package/dist/cmd-opts.js.map +1 -0
  11. package/dist/commands/create-block.cjs +22 -0
  12. package/dist/commands/create-block.cjs.map +1 -0
  13. package/dist/commands/create-block.d.ts +1 -3
  14. package/dist/commands/create-block.js +20 -0
  15. package/dist/commands/create-block.js.map +1 -0
  16. package/dist/commands/reset.cjs +23 -0
  17. package/dist/commands/reset.cjs.map +1 -0
  18. package/dist/commands/reset.d.ts +1 -3
  19. package/dist/commands/reset.js +21 -0
  20. package/dist/commands/reset.js.map +1 -0
  21. package/dist/commands/start/docker/s3.cjs +69 -0
  22. package/dist/commands/start/docker/s3.cjs.map +1 -0
  23. package/dist/commands/start/docker/s3.d.ts +21 -23
  24. package/dist/commands/start/docker/s3.js +67 -0
  25. package/dist/commands/start/docker/s3.js.map +1 -0
  26. package/dist/commands/start/docker.cjs +69 -0
  27. package/dist/commands/start/docker.cjs.map +1 -0
  28. package/dist/commands/start/docker.d.ts +21 -23
  29. package/dist/commands/start/docker.js +67 -0
  30. package/dist/commands/start/docker.js.map +1 -0
  31. package/dist/commands/start/local/s3.cjs +135 -0
  32. package/dist/commands/start/local/s3.cjs.map +1 -0
  33. package/dist/commands/start/local/s3.d.ts +25 -27
  34. package/dist/commands/start/local/s3.js +114 -0
  35. package/dist/commands/start/local/s3.js.map +1 -0
  36. package/dist/commands/start/local.cjs +122 -0
  37. package/dist/commands/start/local.cjs.map +1 -0
  38. package/dist/commands/start/local.d.ts +23 -25
  39. package/dist/commands/start/local.js +101 -0
  40. package/dist/commands/start/local.js.map +1 -0
  41. package/dist/commands/start.cjs +23 -0
  42. package/dist/commands/start.cjs.map +1 -0
  43. package/dist/commands/start.d.ts +1 -3
  44. package/dist/commands/start.js +21 -0
  45. package/dist/commands/start.js.map +1 -0
  46. package/dist/commands/stop.cjs +29 -0
  47. package/dist/commands/stop.cjs.map +1 -0
  48. package/dist/commands/stop.d.ts +1 -3
  49. package/dist/commands/stop.js +27 -0
  50. package/dist/commands/stop.js.map +1 -0
  51. package/dist/commands/svc/create/docker/s3.cjs +75 -0
  52. package/dist/commands/svc/create/docker/s3.cjs.map +1 -0
  53. package/dist/commands/svc/create/docker/s3.d.ts +22 -24
  54. package/dist/commands/svc/create/docker/s3.js +73 -0
  55. package/dist/commands/svc/create/docker/s3.js.map +1 -0
  56. package/dist/commands/svc/create/docker.cjs +72 -0
  57. package/dist/commands/svc/create/docker.cjs.map +1 -0
  58. package/dist/commands/svc/create/docker.d.ts +22 -24
  59. package/dist/commands/svc/create/docker.js +70 -0
  60. package/dist/commands/svc/create/docker.js.map +1 -0
  61. package/dist/commands/svc/create/local/s3.cjs +121 -0
  62. package/dist/commands/svc/create/local/s3.cjs.map +1 -0
  63. package/dist/commands/svc/create/local/s3.d.ts +26 -28
  64. package/dist/commands/svc/create/local/s3.js +100 -0
  65. package/dist/commands/svc/create/local/s3.js.map +1 -0
  66. package/dist/commands/svc/create/local.cjs +117 -0
  67. package/dist/commands/svc/create/local.cjs.map +1 -0
  68. package/dist/commands/svc/create/local.d.ts +24 -26
  69. package/dist/commands/svc/create/local.js +96 -0
  70. package/dist/commands/svc/create/local.js.map +1 -0
  71. package/dist/commands/svc/delete.cjs +40 -0
  72. package/dist/commands/svc/delete.cjs.map +1 -0
  73. package/dist/commands/svc/delete.d.ts +3 -5
  74. package/dist/commands/svc/delete.js +38 -0
  75. package/dist/commands/svc/delete.js.map +1 -0
  76. package/dist/commands/svc/down.cjs +32 -0
  77. package/dist/commands/svc/down.cjs.map +1 -0
  78. package/dist/commands/svc/down.d.ts +2 -4
  79. package/dist/commands/svc/down.js +30 -0
  80. package/dist/commands/svc/down.js.map +1 -0
  81. package/dist/commands/svc/list.cjs +31 -0
  82. package/dist/commands/svc/list.cjs.map +1 -0
  83. package/dist/commands/svc/list.d.ts +0 -1
  84. package/dist/commands/svc/list.js +29 -0
  85. package/dist/commands/svc/list.js.map +1 -0
  86. package/dist/commands/svc/up.cjs +51 -0
  87. package/dist/commands/svc/up.cjs.map +1 -0
  88. package/dist/commands/svc/up.d.ts +2 -4
  89. package/dist/commands/svc/up.js +49 -0
  90. package/dist/commands/svc/up.js.map +1 -0
  91. package/dist/core.cjs +742 -0
  92. package/dist/core.cjs.map +1 -0
  93. package/dist/core.d.ts +0 -1
  94. package/dist/core.js +737 -0
  95. package/dist/core.js.map +1 -0
  96. package/dist/index.cjs +42 -0
  97. package/dist/index.cjs.map +1 -0
  98. package/dist/index.d.ts +0 -1
  99. package/dist/index.js +39 -126
  100. package/dist/index.js.map +1 -1
  101. package/dist/package.cjs +27 -0
  102. package/dist/package.cjs.map +1 -0
  103. package/dist/package.d.ts +0 -1
  104. package/dist/package.js +22 -0
  105. package/dist/package.js.map +1 -0
  106. package/dist/platforma.cjs +169 -0
  107. package/dist/platforma.cjs.map +1 -0
  108. package/dist/platforma.d.ts +0 -1
  109. package/dist/platforma.js +141 -0
  110. package/dist/platforma.js.map +1 -0
  111. package/dist/run.cjs +68 -0
  112. package/dist/run.cjs.map +1 -0
  113. package/dist/run.d.ts +0 -1
  114. package/dist/run.js +64 -0
  115. package/dist/run.js.map +1 -0
  116. package/dist/state.cjs +143 -0
  117. package/dist/state.cjs.map +1 -0
  118. package/dist/state.d.ts +0 -1
  119. package/dist/state.js +141 -0
  120. package/dist/state.js.map +1 -0
  121. package/dist/templates/compose.cjs +67 -0
  122. package/dist/templates/compose.cjs.map +1 -0
  123. package/dist/templates/compose.d.ts +0 -1
  124. package/dist/templates/compose.js +65 -0
  125. package/dist/templates/compose.js.map +1 -0
  126. package/dist/templates/pl-config.cjs +264 -0
  127. package/dist/templates/pl-config.cjs.map +1 -0
  128. package/dist/templates/pl-config.d.ts +0 -1
  129. package/dist/templates/pl-config.js +260 -0
  130. package/dist/templates/pl-config.js.map +1 -0
  131. package/dist/templates/types.cjs +31 -0
  132. package/dist/templates/types.cjs.map +1 -0
  133. package/dist/templates/types.d.ts +0 -1
  134. package/dist/templates/types.js +28 -0
  135. package/dist/templates/types.js.map +1 -0
  136. package/dist/util.cjs +98 -0
  137. package/dist/util.cjs.map +1 -0
  138. package/dist/util.d.ts +0 -1
  139. package/dist/util.js +89 -0
  140. package/dist/util.js.map +1 -0
  141. package/package.json +10 -13
  142. package/dist/block.d.ts.map +0 -1
  143. package/dist/cmd-opts.d.ts.map +0 -1
  144. package/dist/commands/create-block.d.ts.map +0 -1
  145. package/dist/commands/reset.d.ts.map +0 -1
  146. package/dist/commands/start/docker/s3.d.ts.map +0 -1
  147. package/dist/commands/start/docker.d.ts.map +0 -1
  148. package/dist/commands/start/local/s3.d.ts.map +0 -1
  149. package/dist/commands/start/local.d.ts.map +0 -1
  150. package/dist/commands/start.d.ts.map +0 -1
  151. package/dist/commands/stop.d.ts.map +0 -1
  152. package/dist/commands/svc/create/docker/s3.d.ts.map +0 -1
  153. package/dist/commands/svc/create/docker.d.ts.map +0 -1
  154. package/dist/commands/svc/create/local/s3.d.ts.map +0 -1
  155. package/dist/commands/svc/create/local.d.ts.map +0 -1
  156. package/dist/commands/svc/delete.d.ts.map +0 -1
  157. package/dist/commands/svc/down.d.ts.map +0 -1
  158. package/dist/commands/svc/list.d.ts.map +0 -1
  159. package/dist/commands/svc/up.d.ts.map +0 -1
  160. package/dist/core.d.ts.map +0 -1
  161. package/dist/index.d.ts.map +0 -1
  162. package/dist/index.mjs +0 -1945
  163. package/dist/index.mjs.map +0 -1
  164. package/dist/package.d.ts.map +0 -1
  165. package/dist/platforma.d.ts.map +0 -1
  166. package/dist/run.d.ts.map +0 -1
  167. package/dist/state.d.ts.map +0 -1
  168. package/dist/templates/compose.d.ts.map +0 -1
  169. package/dist/templates/pl-config.d.ts.map +0 -1
  170. package/dist/templates/types.d.ts.map +0 -1
  171. package/dist/util.d.ts.map +0 -1
@@ -0,0 +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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"}
package/dist/index.cjs ADDED
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ var createBlock = require('./commands/create-block.cjs');
4
+ var reset = require('./commands/reset.cjs');
5
+ var start = require('./commands/start.cjs');
6
+ var stop = require('./commands/stop.cjs');
7
+ var docker$1 = require('./commands/start/docker.cjs');
8
+ var local$1 = require('./commands/start/local.cjs');
9
+ var _delete = require('./commands/svc/delete.cjs');
10
+ var down = require('./commands/svc/down.cjs');
11
+ var list = require('./commands/svc/list.cjs');
12
+ var up = require('./commands/svc/up.cjs');
13
+ var s3$3 = require('./commands/start/docker/s3.cjs');
14
+ var s3$2 = require('./commands/start/local/s3.cjs');
15
+ var docker = require('./commands/svc/create/docker.cjs');
16
+ var local = require('./commands/svc/create/local.cjs');
17
+ var s3$1 = require('./commands/svc/create/docker/s3.cjs');
18
+ var s3 = require('./commands/svc/create/local/s3.cjs');
19
+
20
+ // DO NOT EDIT. This file was generated by oclif-index utility.
21
+ // prettier-ignore
22
+ const COMMANDS = {
23
+ 'create-block': createBlock,
24
+ 'reset': reset,
25
+ 'start': start,
26
+ 'stop': stop,
27
+ 'start:docker': docker$1,
28
+ 'start:local': local$1,
29
+ 'svc:delete': _delete,
30
+ 'svc:down': down,
31
+ 'svc:list': list,
32
+ 'svc:up': up,
33
+ 'start:docker:s3': s3$3,
34
+ 'start:local:s3': s3$2,
35
+ 'svc:create:docker': docker,
36
+ 'svc:create:local': local,
37
+ 'svc:create:docker:s3': s3$1,
38
+ 'svc:create:local:s3': s3,
39
+ };
40
+
41
+ exports.COMMANDS = COMMANDS;
42
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +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;;;;;"}
package/dist/index.d.ts CHANGED
@@ -32,4 +32,3 @@ export declare const COMMANDS: {
32
32
  'svc:create:docker:s3': typeof Cmd14;
33
33
  'svc:create:local:s3': typeof Cmd15;
34
34
  };
35
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,127 +1,40 @@
1
- "use strict";var kr=Object.defineProperty;var Sr=(a,e,t)=>e in a?kr(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var l=(a,e,t)=>Sr(a,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("@oclif/core"),R=require("node:os"),f=require("node:fs"),h=require("node:path"),ge=require("node:child_process"),ue=require("winston"),$r=require("node:crypto"),Z=require("readline-sync"),Lr=require("node:fs/promises"),Ar=require("node:stream"),N=require("zod"),Ir=require("decompress"),me=require("@milaboratories/pl-deployments"),gr=require("yaml"),Or=require("node:https"),Fr=require("tar");function qe(a){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const t in a)if(t!=="default"){const r=Object.getOwnPropertyDescriptor(a,t);Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>a[t]})}}return e.default=a,Object.freeze(e)}const fe=qe(R),C=qe(Lr),Er=qe(Fr),$={"log-level":u.Flags.string({description:"logging level",default:"info",options:["error","warn","info","debug"],required:!1})};u.Flags.string({description:"name of instance",required:!1});const he={image:u.Flags.string({description:"use custom docker image to run platforma"})},M={version:u.Flags.string({description:"use custom platforma release (official docker image or binary package)"})},ye={arch:u.Flags.string({description:"override architecture. You can start amd64 linux image on arm-based host (say, Apple M family processor). I.e. arm64, amd64, amd64/v2"})},j={license:u.Flags.string({description:'pass a license code. The license can be got from "https://licensing.milaboratories.com".'}),"license-file":u.Flags.file({exists:!0,description:"specify a path to the file with a license. The license can be got from 'https://licensing.milaboratories.com'."})},B={"grpc-port":u.Flags.integer({description:"port for Platforma Backend gRPC API. Default is 6345",env:"PLATFORMA_GRPC_PORT"}),"grpc-listen":u.Flags.string({description:"full listen addr for Platforma Backend gRPC API. Default is 127.0.0.1:6345",env:"PLATFORMA_GRPC_LISTEN"}),"monitoring-port":u.Flags.integer({description:"port for Platforma Backend monitoring API. Default is 9090",env:"PLATFORMA_MONITORING_PORT"}),"monitoring-listen":u.Flags.string({description:"full listen addr for Platforma Backend monitoring API. Default is 127.0.0.1:9090",env:"PLATFORMA_MONITORING_LISTEN"}),"debug-port":u.Flags.integer({description:"port for Platforma Backend debug API. Default is 9091",env:"PLATFORMA_DEBUG_PORT"}),"debug-listen":u.Flags.string({description:"full listen addr for Platforma Backend debug API. Default is 127.0.0.1:9091",env:"PLATFORMA_DEBUG_LISTEN"})},be={"s3-port":u.Flags.integer({description:"port that S3 will listen, default is 9000",default:9e3,env:"PLATFORMA_S3_PORT"}),"s3-console-port":u.Flags.integer({description:"port that a console of S3 will listen, default is 9001",default:9001,env:"PLATFORMA_S3_CONSOLE_PORT"})},U={storage:u.Flags.string({description:"specify path on host to be used as storage for all Platforma Backend data"})},hr={"minio-presign-host":u.Flags.boolean({description:"use 'minio' host instead of 'localhost' in presign URLs"})},we={mount:u.Flags.string({multiple:!0,description:"things to be mounted into platforma docker container. Targets will appear inside the container under the same absolute paths"})},pe={"pl-log-file":u.Flags.file({description:"specify path for Platforma Backend log file"})},Pe={"pl-workdir":u.Flags.file({description:"specify working directory for Platforma Backend process"})},ve={"pl-binary":u.Flags.file({description:"start given Platforma Backend binary instead of automatically downloaded version"})},ke={"pl-sources":u.Flags.file({description:"path to pl repository root: build Platforma Backend from sources and start the resulting binary"})},Se={config:u.Flags.string({description:"use custom Platforma Backend config"})};u.Flags.file({description:"specify path on host to be used as 'primary' storage"});const ie={"storage-work":u.Flags.file({description:"specify path on host to be used as 'work' storage"})};u.Flags.file({description:"specify path on host to be used as 'library' storage"});const ce={"storage-primary":u.Flags.string({description:`specify 'primary' storage destination URL.
2
- file:/path/to/dir for directory on local FS
3
- s3://<bucket>/?region=<name> for real AWS bucket
4
- s3e://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via http
5
- s3es://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via https`})},oe={"storage-library":u.Flags.string({description:`specify 'library' storage destination URL.
6
- file:/path/to/dir for directory on local FS
7
- s3://<bucket>/?region=<name> for real AWS bucket
8
- s3e://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via http
9
- s3es://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via https`})},Rr={"auth-enabled":u.Flags.boolean({description:"enable authorization"})},Tr={"auth-htpasswd-file":u.Flags.file({description:"path to .htpasswd file with Platforma users (static user DB auth source)"})},xr={"auth-ldap-server":u.Flags.string({description:"address of LDAP server to use for auth in Platforma (auth source)"})},Dr={"auth-ldap-default-dn":u.Flags.string({description:"DN to use when checking user with LDAP bind operation: e.g. cn=%u,ou=users,dc=example,dc=com"})},G={...Rr,...Tr,...xr,...Dr};function _r(a){return Z.question(`${a} [y/N] `).toLowerCase()==="y"}function q(a){throw new Error("this should never happen")}function L(a="debug"){return ue.createLogger({level:a,format:ue.format.printf(({level:e,message:t})=>{const r=" ".repeat(e.length+2);if(typeof t!="string"){const i=JSON.stringify(t);throw Error(`logger message ${i} is not a string`)}const s=t.split(`
10
- `).map((i,c)=>c===0?i:r+i).join(`
11
- `);return`${(i=>ue.format.colorize().colorize(i,i))(e)}: ${s}`}),transports:[new ue.transports.Console({stderrLevels:["error","warn","info","debug"],handleExceptions:!0})]})}function Nr(a){return $r.randomBytes(Math.ceil(a/2)).toString("hex").slice(0,a)}function Cr(a){return a.startsWith("~")?h.join(R.homedir(),a.slice(1)):a}function Le(a,e){f.existsSync(a)||(f.mkdirSync(a,{recursive:!0}),e!=null&&e.mode&&f.chmodSync(a,e.mode))}function Mr(a){try{if(R.platform()!=="win32")return ge.execSync(`ps -p ${a} -o comm=`,{encoding:"utf8"}).trim();const e=`wmic process where processid=${a} get Caption`,t=ge.execSync(e,{encoding:"utf8"}).split(`
12
- `);return t.length<=1?"":t[1].trim()}catch{return""}}function jr(a){const e=ge.execSync(`docker compose ls --filter name=${a} --format json`,{encoding:"utf8"}).trim(),t=JSON.parse(e);for(const r of t)if(r.Name===a)return r}const Ee=["Python"],yr=["Tengo","Python"],Br=N.z.union([N.z.literal("Tengo"),N.z.literal("Python")]),Ur=N.z.object({npmOrgName:N.z.string().min(1),orgName:N.z.string().min(1,{message:"Organization name must be provided"}),blockName:N.z.string().min(1,{message:"Block name must be provided"}),softwarePlatforms:N.z.array(Br).refine(a=>new Set(a).size===a.length,{message:"Must be an array of unique software platforms"})});async function Gr(a){const{npmOrgName:e,orgName:t,blockName:r,softwarePlatforms:s}=qr(),n=h.join(process.cwd(),r);a.info("Downloading boilerplate code..."),await Jr("https://github.com/milaboratory/platforma-block-boilerplate/archive/refs/heads/main.zip","platforma-block-boilerplate-main",n);const i=yr.filter(o=>s.indexOf(o)<0),c=Ee.length==i.length;a.info(`Keep platforms '${s}', remove: '${i}'. Will remove all platforms? ${c}`);for(const o of i)await Hr(n,o);c&&await Wr(n),a.info("Replace everything in the template with provided options..."),zr(n,[{from:/@platforma-open(?!.*runenv-python-3)/g,to:`@${e}`},{from:/my-org/g,to:t},{from:/block-boilerplate/g,to:r}])}function qr(){let a=Z.question('Write an organization name for npm. Default is "platforma-open": ');a===""&&(a="platforma-open");let e="";for(;e.length<1;)e=Z.question('Write an organization name, e.g. "my-org": ');let t="";for(;t.length<1;)t=Z.question('Write a name of the block, e.g. "hello-world": ');const r=Z.keyInYN("Create package for block's software?");let s=["Tengo"];if(r)for(;s.length<yr.length;){const i=Z.keyInSelect(Ee,"Choose software platform:");if(i<0)break;s.push(Ee[i])}s=Array.from(new Set(s)).sort();const n=Ur.safeParse({npmOrgName:a,orgName:e,blockName:t,softwarePlatforms:s});if(!n.success&&n.error.issues.length)throw new Error(n.error.issues.map(i=>i.message).join("; "));return n.data}async function Jr(a,e,t){const s=await(await fetch(a)).blob(),n=await C.mkdtemp(h.join(R.tmpdir(),"create-repo")),i=h.join(n,"packed-repo.zip"),c=Ar.Writable.toWeb(f.createWriteStream(i));await s.stream().pipeTo(c);const o=h.join(n,"unpacked-repo");await C.mkdir(o),await Ir(i,o),await C.cp(h.join(o,e),t,{recursive:!0})}async function Hr(a,e){const t=e.toLowerCase();await ee(h.join(a,"ui","src","pages","MainPage.vue"),new RegExp(`.*${t}Message.*\\n`,"g")),await ee(h.join(a,"model","src","index.ts"),new RegExp(`.*${t}Message.*\\n\\n`,"g")),await ee(h.join(a,"workflow","src","main.tpl.tengo"),new RegExp(`.*${t}.*exec.builder.*[\\s\\S]*?\\n\\n`,"g")),await ee(h.join(a,"workflow","src","main.tpl.tengo"),new RegExp(`.*${t}Message.*\\n`,"g")),await ee(h.join(a,"workflow","src","wf.test.ts"),new RegExp(`.*${t}Message.*\\n.*expect.*\\n\\n`,"g")),await C.rm(h.join(a,"software",`src_${t}`),{recursive:!0}),await Je(h.join(a,"software","package.json"),r=>{const s=JSON.parse(r);return delete s["block-software"].artifacts[`hello-${t}-artifact`],delete s["block-software"].entrypoints[`hello-world-${t}`],JSON.stringify(s,null,2)})}async function Wr(a){await C.rm(h.join(a,"software"),{recursive:!0}),await Je(h.join(a,"workflow","package.json"),e=>{const t=JSON.parse(e);return delete t.dependencies["@platforma-open/my-org.block-boilerplate.software"],JSON.stringify(t,null,2)}),await ee(h.join(a,"pnpm-workspace.yaml"),/.*- software$\n/gm)}async function zr(a,e){const t=await Yr(a);for(const{from:r,to:s}of e)for(const n of t)await br(n,r,s)}async function Yr(a){return(await C.readdir(a,{withFileTypes:!0,recursive:!0})).filter(t=>t.isFile()).map(t=>h.join(t.parentPath,t.name))}async function Je(a,e){const t=await C.readFile(a),r=e(t.toString());await C.writeFile(a,r)}async function br(a,e,t){return await Je(a,r=>r.replaceAll(e,t))}async function ee(a,e){return await br(a,e,"")}const re=class re extends u.Command{async run(){const{flags:e}=await this.parse(re),t=L(e["log-level"]);await Gr(t)}};l(re,"description","Helps to create a new block by downloading a block's template."),l(re,"examples",["<%= name %>"]),l(re,"flags",{...$});let Re=re;function wr(...a){return h.resolve(__dirname,"..",...a)}function X(...a){return wr("assets",...a)}function Ae(...a){return f.readFileSync(wr(...a))}function ur(a){return a||(a=me.getDefaultPlVersion()),`quay.io/milaboratories/platforma:${a}`}const J=class J{constructor(e){l(this,"state",{currentInstance:""});l(this,"filePath");l(this,"dirPath");e=e??h.resolve(R.homedir(),".config","pl-bootstrap");const t=h.join(e,"state.json");this.dirPath=e,this.filePath=t,f.existsSync(e)||f.mkdirSync(e,{recursive:!0}),f.existsSync(t)&&(this.state=JSON.parse(Ae(t).toString()))}static getStateInstance(){return J.instance||(J.instance=new J),J.instance}path(...e){return h.join(this.dirPath,...e)}instanceDir(e,...t){return e?this.path("data",e,...t):this.path("data")}binaries(...e){return this.path("binaries",...e)}writeState(){f.writeFileSync(this.filePath,JSON.stringify(this.state))}get instanceList(){return f.existsSync(this.instanceDir())?f.readdirSync(this.instanceDir()).filter(t=>this.instanceExists(t)):[]}instanceExists(e){return f.existsSync(this.instanceDir(e,"instance.json"))}getInstanceInfo(e){const t=this.instanceDir(e,"instance.json");if(!f.existsSync(t))throw new Error(`platforma backend instance '${e}' does not exist or is corrupted`);const r=JSON.parse(Ae(t).toString());return{name:e,...r}}setInstanceInfo(e,t){f.existsSync(this.instanceDir(e))||f.mkdirSync(this.instanceDir(e),{recursive:!0});const r=this.instanceDir(e,"instance.json");let s={};f.existsSync(r)&&(s=JSON.parse(Ae(r).toString())),f.writeFileSync(r,JSON.stringify({...s,...t}))}isInstanceActive(e){switch(e.type){case"docker":{const r=jr(`pl-${e.name}`);return r?r.Status.trim().startsWith("running"):!1}case"process":return e.pid?mr(e.pid):!1;default:throw q(),new Error("cli logic error: unknown service type, cannot check its state")}}get isActive(){for(const e of this.instanceList){const t=this.getInstanceInfo(e);if(this.isInstanceActive(t))return!0}return!1}isValidPID(e){return mr(e)}get currentInstance(){const e=this.state.currentInstance;if(e&&this.instanceExists(e))return this.getInstanceInfo(e)}get currentInstanceName(){return this.state.currentInstance}set currentInstanceName(e){this.state.currentInstance=e,this.writeState()}selectInstance(e){if(!this.instanceExists(e))throw new Error(`instance '${e}' does not exist`);this.state.currentInstance=e,this.writeState()}};l(J,"instance");let Te=J;function mr(a){const e=Mr(a);return e==="platforma"||e.endsWith("/platforma")||e.endsWith("\\platforma")}const m=Te.getStateInstance();function Ie(a,e,t){const r=[],s=[];for(const n of e){const i={cwd:n.workdir,env:{...n.envs,...t==null?void 0:t.env},...n.runOpts,...t};if(n.async){const c=Vr(a,n.cmd,n.args,i);s.push(c)}else{const c=Kr(a,n.cmd,n.args,i);if(r.push(c),c.error||c.status!==0)break}}return{executed:r,spawned:s}}function Vr(a,e,t,r){var c;a.debug(`Running:
13
- cmd: ${JSON.stringify([e,...t])}
14
- wd: ${(c=r.cwd)==null?void 0:c.toString()}`),r.env={...process.env,...r.env},a.debug(" spawning child process");const s=ge.spawn(e,t,r);let n=!1;const i=()=>{s.kill("SIGINT"),n=!0};return a.debug(" setting up signal handler"),process.on("SIGINT",i),s.on("close",o=>{process.removeListener("SIGINT",i),n&&process.exit(o)}),s}function Kr(a,e,t,r){return a.debug(`Running:
15
- cmd: ${JSON.stringify([e,...t])}
16
- opts: ${JSON.stringify(r)}`),r.env={...process.env,...r.env},ge.spawnSync(e,t,r)}function Oe(a,e,t,r,s){const n=f.readFileSync(a,{encoding:"utf-8"}),i=gr.parse(n.toString());if(!i.services)throw new Error(`file '${a}' seems to be not a docker-compose file or has unsupported version`);if(r)for(const c of Object.keys(i.services))r.has(c)||delete i.services[c];i.name=t;for(const[c,o]of(r==null?void 0:r.entries())??[]){const g=i.services[c];if(!g)throw new Error(`docker compose '${a}' has no declaration of service '${c}'`);if(o.platform&&(g.platform=o.platform),o.envs){g.environment||(g.environment=[]);for(let d=0;d<((g==null?void 0:g.environment.length)??0);){const w=g.environment[d].split("=")[0];if(o.envs[w]){const p=g.environment.pop();p&&g.environment.length!==d&&(g.environment[d]=p)}else d++}for(const[d,y]of Object.entries(o.envs))g.environment.push(`${d}=${y}`)}if(o.mounts){g.volumes||(g.volumes=[]);for(const d of o.mounts)g.volumes.push(`${d.hostPath}:${d.containerPath}`)}}s!=null&&s.dropVolumes&&delete i.volumes,f.writeFileSync(e,gr.stringify(i))}function Xr(a){return{id:a,type:"S3",indexCachePeriod:"0s",endpoint:"",region:"",bucketName:"",createBucket:!1,forcePathStyle:!1,key:"",secret:"",keyPrefix:"",accessPrefixes:[],uploadKeyPrefix:""}}function pr(a){return{id:a,type:"FS",indexCachePeriod:"0s",rootPath:""}}function Q(a,e,t){a=Cr(a);const r=new URL(a,`file:${e}`);switch(r.protocol){case"s3:":{const s=r.hostname,n=r.searchParams.get("region"),i=r.pathname.slice(1);return{...t,type:"S3",bucketName:s,region:n,keyPrefix:i}}case"s3e:":{const s=r.pathname.split("/").slice(1),n=s[0],i=s.length>1?s.slice(1).join("/"):"";return{...t,type:"S3",endpoint:`http://${r.host}/`,bucketName:n,keyPrefix:i,region:r.searchParams.get("region"),key:r.username?`static:${r.username}`:"",secret:r.password?`static:${r.password}`:""}}case"s3es:":{const s=r.pathname.split("/").slice(1),n=s[0],i=s.length>1?s.slice(1).join("/"):"";return{...t,type:"S3",endpoint:`https://${r.host}/`,bucketName:n,keyPrefix:i,region:r.searchParams.get("region"),key:r.username?`static:${r.username}`:"",secret:r.password?`static:${r.password}`:""}}case"file:":return{type:"FS",rootPath:r.pathname};default:throw new Error(`storage protocol '${r.protocol}' is not supported`)}}function Qr(a,e){var p,b,k,S,A,P,v,O,le,F,He,We,ze,Ye,Ve,Ke,Xe,Qe,Ze,er,rr,tr,ar,sr,nr,ir,cr,or,lr,dr;const t=(e==null?void 0:e.localRoot)??m.instanceDir("default"),r={level:((p=e==null?void 0:e.log)==null?void 0:p.level)??"info",path:((b=e==null?void 0:e.log)==null?void 0:b.path)??`${t}/logs/platforma.log`},s={listen:((k=e==null?void 0:e.grpc)==null?void 0:k.listen)??"localhost:6345",tls:{enable:de((A=(S=e==null?void 0:e.grpc)==null?void 0:S.tls)==null?void 0:A.enable,!1),clientAuthMode:((v=(P=e==null?void 0:e.grpc)==null?void 0:P.tls)==null?void 0:v.clientAuthMode)??"NoAuth",certFile:((le=(O=e==null?void 0:e.grpc)==null?void 0:O.tls)==null?void 0:le.certFile)??`${t}/certs/tls.cert`,keyFile:((He=(F=e==null?void 0:e.grpc)==null?void 0:F.tls)==null?void 0:He.keyFile)??`${t}/certs/tls.key`,...(We=e==null?void 0:e.grpc)==null?void 0:We.tls}},n={auth:{enabled:((Ye=(ze=e==null?void 0:e.core)==null?void 0:ze.auth)==null?void 0:Ye.enabled)??!1,drivers:((Ke=(Ve=e==null?void 0:e.core)==null?void 0:Ve.auth)==null?void 0:Ke.drivers)??[{driver:"jwt",key:a},{driver:"htpasswd",path:`${t}/users.htpasswd`}]},db:{path:`${t}/db`}},i=fr("main",`${t}/storages/main`,"main-bucket",(Xe=e==null?void 0:e.storages)==null?void 0:Xe.primary);let c;switch((Ze=(Qe=e==null?void 0:e.storages)==null?void 0:Qe.work)==null?void 0:Ze.type){case void 0:case"FS":c=pr("work"),c.rootPath=((rr=(er=e==null?void 0:e.storages)==null?void 0:er.work)==null?void 0:rr.rootPath)??`${t}/storages/work`,c.indexCachePeriod=((ar=(tr=e==null?void 0:e.storages)==null?void 0:tr.work)==null?void 0:ar.indexCachePeriod)??"1m";break;default:throw new Error("work storage MUST have 'FS' type as it is used for working directories management")}const g=fr("library",`${t}/storages/library`,"library-bucket",(sr=e==null?void 0:e.storages)==null?void 0:sr.library),d={enabled:de((nr=e==null?void 0:e.monitoring)==null?void 0:nr.enabled,!0),listen:((ir=e==null?void 0:e.monitoring)==null?void 0:ir.listen)??"127.0.0.1:9090"},y={enabled:de((cr=e==null?void 0:e.debug)==null?void 0:cr.enabled,!0),listen:((or=e==null?void 0:e.debug)==null?void 0:or.listen)??"127.0.0.1:9091"},w={value:((lr=e==null?void 0:e.license)==null?void 0:lr.value)??"",file:((dr=e==null?void 0:e.license)==null?void 0:dr.file)??""};return{localRoot:t,license:w,log:r,grpc:s,core:n,monitoring:d,debug:y,numCpu:e==null?void 0:e.numCpu,storages:{primary:i,work:c,library:g},hacks:{libraryDownloadable:!0}}}function fr(a,e,t,r){let s;switch(r==null?void 0:r.type){case void 0:case"FS":s=pr(a),s.rootPath=(r==null?void 0:r.rootPath)??e;break;case"S3":s=Xr(a),s.endpoint=r==null?void 0:r.endpoint,s.region=r==null?void 0:r.region,s.presignEndpoint=(r==null?void 0:r.presignEndpoint)??(r==null?void 0:r.endpoint),s.bucketName=(r==null?void 0:r.bucketName)??t,s.createBucket=de(r==null?void 0:r.createBucket,!0),s.forcePathStyle=de(r==null?void 0:r.forcePathStyle,!0),s.key=(r==null?void 0:r.key)??"",s.secret=(r==null?void 0:r.secret)??"",s.keyPrefix=(r==null?void 0:r.keyPrefix)??"",s.accessPrefixes=(r==null?void 0:r.accessPrefixes)??[""],s.uploadKeyPrefix=(r==null?void 0:r.uploadKeyPrefix)??"";break;default:throw q(),new Error("unknown storage type")}return s}function Zr(a){const e=a.monitoring.enabled?"":" disabled",t=a.debug.enabled?"":" disabled",r=a.hacks.libraryDownloadable?"true":"false";let s=a.license.value;a.license.file!=""&&(s=f.readFileSync(a.license.file).toString().trimEnd());let n="";return a.numCpu&&(n=`
17
- resources:
18
- cpu: ${a.numCpu}
19
- `),`
20
- license:
21
- value: '${a.license.value}'
22
- file: '${a.license.file}'
23
-
24
- logging:
25
- level: '${a.log.level}'
26
- destinations:
27
- - path: '${a.log.path}'
28
- rotation:
29
- maxSize: 1GiB
30
- maxBackups: 15
31
- compress: true
32
-
33
- monitoring${e}:
34
- listen: '${a.monitoring.listen}'
35
-
36
- debug${t}:
37
- listen: '${a.debug.listen}'
38
-
39
- core:
40
- logging:
41
- extendedInfo: true
42
- dumpResourceData: false
43
-
44
- grpc:
45
- listen: '${a.grpc.listen}'
46
-
47
- tlsEnabled: ${JSON.stringify(a.grpc.tls.enable)}
48
- tls:
49
- clientAuthMode: '${a.grpc.tls.clientAuthMode}'
50
- certificates:
51
- - certFile: '${a.grpc.tls.certFile}'
52
- keyFile: '${a.grpc.tls.keyFile}'
53
-
54
-
55
- authEnabled: ${JSON.stringify(a.core.auth.enabled)}
56
- auth: ${JSON.stringify(a.core.auth.drivers)}
57
- db:
58
- path: '${a.core.db.path}'
59
-
60
- controllers:
61
- data:
62
- main:
63
- storages:
64
- main:
65
- mode: primary
66
- downloadable: true
67
-
68
- library:
69
- mode: passive
70
- downloadable: ${r}
71
-
72
- work:
73
- mode: active
74
- downloadable: false
75
-
76
- storages:
77
- - ${JSON.stringify(a.storages.primary)}
78
- - ${JSON.stringify(a.storages.library)}
79
- - ${JSON.stringify(a.storages.work)}
80
-
81
- runner:
82
- type: local
83
- storageRoot: '${a.storages.work.rootPath}'
84
- workdirCacheOnSuccess: 20m
85
- workdirCacheOnFailure: 1h
86
- ${n}
87
- secrets:
88
- - map:
89
- MI_LICENSE: ${JSON.stringify(s)}
90
-
91
- packageLoader:
92
- packagesRoot: '${a.localRoot}/packages'
93
-
94
- workflows:
95
- features:
96
- pureFutureFields: true
97
- commandExpressions: true
98
- workdirLimits: true
99
- computeLimits: false
100
- `}function de(a,e){return a===void 0?e:a}const et=["linux","macos","windows"];function rt(a){const e=R.platform();switch(e){case"darwin":return"macos";case"linux":return"linux";case"win32":return"windows";default:throw new Error(`operating system '${e}' is not currently supported by Platforma ecosystem. The list of OSes supported: `+JSON.stringify(et))}}const tt=["amd64","arm64"];function Pr(a){const e=R.arch();switch(e){case"arm64":return"arm64";case"x64":return"amd64";default:throw new Error(`processor architecture '${e}' is not currently supported by Platforma ecosystem. The list of architectures supported: `+JSON.stringify(tt))}}function at(a,e){const t=(e==null?void 0:e.version)??me.getDefaultPlVersion(),r=(e==null?void 0:e.showProgress)??process.stdout.isTTY,s=`pl-${t}-${Pr()}.tgz`,n=(e==null?void 0:e.downloadURL)??`https://cdn.platforma.bio/software/pl/${rt()}/${s}`,i=(e==null?void 0:e.saveTo)??m.binaries(s);if(f.existsSync(i))return a.info(`Platforma Backend archive download skipped: '${i}' already exists`),Promise.resolve(i);f.mkdirSync(h.dirname(i),{recursive:!0}),a.info(`Downloading Platforma Backend archive:
101
- URL: ${n}
102
- Save to: ${i}`);const c=Or.get(n);return new Promise((o,g)=>{c.on("response",d=>{if(!d.statusCode){const b=new Error("failed to download archive: no HTTP status code in response from server");c.destroy(),g(b);return}if(d.statusCode!==200){const b=new Error(`failed to download archive: ${d.statusCode} ${d.statusMessage}`);c.destroy(),g(b);return}const y=parseInt(d.headers["content-length"]||"0",10);let w=0;const p=f.createWriteStream(i);d.pipe(p),d.on("data",b=>{w+=b.length;const k=w/y*100;r&&process.stdout.write(` downloading: ${k.toFixed(2)}%\r`)}),d.on("error",b=>{f.unlinkSync(i),a.error(`Failed to download Platforma Binary: ${b.message}`),c.destroy(),g(b)}),p.on("finish",()=>{p.close(),a.info(" ... download done."),c.destroy(),o(i)})})})}function st(a,e){a.debug("extracting archive...");const t=(e==null?void 0:e.version)??me.getDefaultPlVersion();a.debug(` version: '${t}'`);const r=`${vr({version:t})}.tgz`,s=(e==null?void 0:e.archivePath)??m.binaries(r);a.debug(` archive path: '${s}'`);const n=(e==null?void 0:e.extractTo)??it(s);if(a.debug(` target dir: '${n}'`),f.existsSync(n))return a.info(`Platforma Backend binaries unpack skipped: '${n}' exists`),n;if(!f.existsSync(s)){const i=`Platforma Backend binary archive not found at '${s}'`;throw a.error(i),new Error(i)}return f.existsSync(n)||(a.debug(` creating target dir '${n}'`),f.mkdirSync(n,{recursive:!0})),a.info(`Unpacking Platforma Backend archive:
103
- Archive: ${s}
104
- Target dir: ${n}`),Er.x({file:s,cwd:n,gzip:!0,sync:!0}),a.info(" ... unpack done."),n}function $e(a,e){return at(a,e).then(t=>st(a,{archivePath:t}))}function vr(a){return`pl-${(a==null?void 0:a.version)??me.getDefaultPlVersion()}-${Pr()}`}function nt(a,...e){return m.binaries(vr({version:a}),...e)}function it(a){const e=a.lastIndexOf(".");return e===-1?a:a.slice(0,e)}class I{constructor(e){this.logger=e}startLast(){const e=m.currentInstance;if(!e)throw this.logger.error("failed to bring back Platforma Backend in the last started configuration: no last configuration found"),new Error("no previous run info found");return this.startInstance(e)}startInstance(e){if(e.runInfo){const r=this.renderRunInfo(e.runInfo);this.logger.info(`Starting platforma backend instance '${e.name}':
105
- ${r}`)}const t=Ie(this.logger,e.upCommands);return Fe(t.executed),t.spawned.length>0&&e.type==="process"&&(e.pid=t.spawned[t.spawned.length-1].pid,m.setInstanceInfo(e.name,e),this.logger.info(`instance '${e.name}' started`)),m.currentInstanceName=e.name,t.spawned}stopInstance(e){this.logger.info(`stopping platforma backend instance '${e.name}'...`);const t=Ie(this.logger,e.downCommands);switch(Fe(t.executed),e.type){case"docker":return;case"process":{e.pid&&m.isInstanceActive(e)&&process.kill(e.pid);return}default:q()}}switchInstance(e){for(const t of m.instanceList)if(t!==e.name){const r=m.getInstanceInfo(t);m.isInstanceActive(r)&&this.stopInstance(r)}return this.startInstance(e)}createLocal(e,t){var d,y,w,p,b,k,S,A,P,v,O,le;let r=nt(t==null?void 0:t.version,"binaries","platforma");t!=null&&t.sourcesPath&&(r=h.join(R.tmpdir(),"platforma-custom-build")),t!=null&&t.binaryPath&&(r=t.binaryPath);let s=t==null?void 0:t.configPath;const n=(t==null?void 0:t.workdir)??(s?process.cwd():m.instanceDir(e));t!=null&&t.primaryURL&&(t.configOptions={...t.configOptions,storages:{...(d=t.configOptions)==null?void 0:d.storages,primary:Q(t.primaryURL,n,(w=(y=t.configOptions)==null?void 0:y.storages)==null?void 0:w.primary)}}),t!=null&&t.libraryURL&&(t.configOptions={...t.configOptions,storages:{...(p=t.configOptions)==null?void 0:p.storages,library:Q(t.libraryURL,n,(k=(b=t.configOptions)==null?void 0:b.storages)==null?void 0:k.library)}});const i=Qr(this.getLastJwt(),t==null?void 0:t.configOptions);this.logger.debug(" checking license..."),this.checkLicense((A=(S=t==null?void 0:t.configOptions)==null?void 0:S.license)==null?void 0:A.value,(v=(P=t==null?void 0:t.configOptions)==null?void 0:P.license)==null?void 0:v.file);const c=[`${i.localRoot}/packages`,`${i.localRoot}/packages-local`,`${i.localRoot}/blocks-local`];i.storages.primary.type==="FS"&&c.push(i.storages.primary.rootPath),i.storages.library.type==="FS"&&(c.push(i.storages.library.rootPath),i.hacks.libraryDownloadable=!1),i.storages.work.type==="FS"&&c.push(i.storages.work.rootPath),this.logger.debug(" creating pl state directories...");for(const F of c)f.existsSync(F)||(this.logger.debug(` '${F}'`),f.mkdirSync(F,{recursive:!0}));for(const F of i.core.auth.drivers)F.driver==="htpasswd"&&(f.existsSync(F.path)||(this.logger.debug(` installing default 'users.htpasswd' to ${F.path}...`),f.copyFileSync(X("users.htpasswd"),F.path)));s||(s=h.join(i.localRoot,"config.yaml"),this.logger.debug(` rendering configuration '${s}'...`),f.writeFileSync(s,Zr(i)));const o=[];t!=null&&t.sourcesPath&&o.push({cmd:"go",args:["build","-o",r,"."],workdir:h.resolve(t.sourcesPath,"cmd","platforma"),runOpts:{stdio:"inherit"}});const g={async:!0,cmd:r,args:["--quiet","--config",s],workdir:n,runOpts:{stdio:"inherit"}};return(O=t==null?void 0:t.configOptions)!=null&&O.numCpu&&(g.runOpts.env={GOMAXPROCS:String((le=t==null?void 0:t.configOptions)==null?void 0:le.numCpu)}),o.push(g),m.setInstanceInfo(e,{type:"process",upCommands:o,downCommands:[],cleanupCommands:[],runInfo:{configPath:s,dbPath:i.core.db.path,apiAddr:i.grpc.listen,logPath:i.log.path,primary:i.storages.primary,work:i.storages.work,library:i.storages.library}}),m.getInstanceInfo(e)}createLocalS3(e,t){var c;this.logger.debug("creating platforma instance in 'local s3' mode...");const r=(t==null?void 0:t.minioPort)??9e3,s=this.createLocal(e,{...t,primaryURL:(t==null?void 0:t.primaryURL)??`s3e://testuser:testpassword@localhost:${r}/main-bucket/?region=no-region`,libraryURL:(t==null?void 0:t.libraryURL)??`s3e://testuser:testpassword@localhost:${r}/library-bucket/?region=no-region`}),n=(c=t==null?void 0:t.configOptions)==null?void 0:c.localRoot,i=this.createMinio(e,{minioPort:r,minioConsolePort:t==null?void 0:t.minioConsolePort,storage:n?h.join(n,"minio"):void 0});return s.upCommands=[i.start,...s.upCommands],s.downCommands=[i.stop,...s.downCommands],s.cleanupCommands=[i.cleanup,...s.cleanupCommands],m.setInstanceInfo(e,s),s}createMinio(e,t){this.logger.debug(" creating docker compose for minio service...");const r=X("compose-backend.yaml"),s=m.instanceDir(e,"compose-minio.yaml");Oe(r,s,`pl-${e}-minio`,new Map([["minio",{}]]),{dropVolumes:!0});const n=t!=null&&t.version?`:${t.version}`:"";this.logger.debug(` minio version: ${n}`);const i=(t==null?void 0:t.image)??`quay.io/minio/minio${n}`;this.logger.debug(` minio image: ${i}`);const c=(t==null?void 0:t.storage)??m.instanceDir(e,"minio");Le(c,{mode:"0775"});const o=(t==null?void 0:t.minioPort)??9e3,g=(t==null?void 0:t.minioConsolePort)??9001,d={MINIO_IMAGE:i,MINIO_STORAGE:h.resolve(c),MINIO_PORT:o.toString(),MINIO_CONSOLE_PORT:g.toString()};return{start:{cmd:"docker",args:["compose",`--file=${s}`,"up","--detach","--remove-orphans","--pull=missing"],envs:d,workdir:m.instanceDir(e),runOpts:{stdio:"inherit"}},stop:{cmd:"docker",args:["compose",`--file=${s}`,"down"],envs:d,workdir:m.instanceDir(e),runOpts:{stdio:"inherit"}},cleanup:{cmd:"docker",args:["compose",`--file=${s}`,"down","--volumes","--remove-orphans"],envs:d,workdir:m.instanceDir(e),runOpts:{stdio:"inherit"}}}}createDockerS3(e,t,r){this.logger.debug("creating platforma instance in 'docker s3' mode...");const s=X("compose-backend.yaml"),n=(r==null?void 0:r.image)??ur(r==null?void 0:r.version);this.checkLicense(r==null?void 0:r.license,r==null?void 0:r.licenseFile);const i=(...v)=>h.join(t,...v),c=v=>{const O=i(v);return Le(O,{mode:"0775"}),O},o=i("logs","platforma.log");f.existsSync(o)||(f.mkdirSync(h.dirname(o),{recursive:!0}),f.writeFileSync(o,""));const g=(r==null?void 0:r.presignHost)??"localhost",d=(r==null?void 0:r.s3Port)??9e3,y=Q(`s3e://testuser:testpassword@minio:${d}/main-bucket`);if(y.type!=="S3")throw new Error("primary storage must have 'S3' type in 'docker s3' configuration");y.presignEndpoint=`http://${g}:${d}`;const w=Q(`s3e://testuser:testpassword@minio:${d}/library-bucket`);if(w.type!=="S3")throw new Error(`${w.type} storage type is not supported for library storage`);w.presignEndpoint=`http://${g}:${d}`;const p=c("db"),b=c("work"),k=i("users.htpasswd");f.existsSync(k)||f.copyFileSync(X("users.htpasswd"),k);const S=i("compose.yaml");f.existsSync(S)&&this.logger.info(`replacing docker compose file ${S}`);const A=[];for(const v of(r==null?void 0:r.customMounts)??[])A.push({hostPath:v.hostPath,containerPath:v.containerPath??v.hostPath});Oe(s,S,`pl-${e}`,new Map([["minio",{}],["backend",{platform:r==null?void 0:r.platformOverride,mounts:A}]]));const P={MINIO_IMAGE:"quay.io/minio/minio",MINIO_STORAGE:c("minio"),PL_IMAGE:n,PL_AUTH_HTPASSWD_PATH:k,PL_LICENSE:r==null?void 0:r.license,PL_LICENSE_FILE:r==null?void 0:r.licenseFile,PL_LOG_LEVEL:(r==null?void 0:r.logLevel)??"info",PL_LOG_DIR:h.dirname(o),PL_LOG_ROTATION_ENABLED:"true",PL_RUNNER_WD_CACHE_ON_FAILURE:"1h",PL_DATA_DB_ROOT:p,PL_DATA_PRIMARY_ROOT:c("primary"),PL_DATA_LIBRARY_ROOT:c("library"),PL_DATA_WORKDIR_ROOT:b,...this.configureDockerStorage("primary",y),...this.configureDockerStorage("library",w)};if(r!=null&&r.grpcAddr&&(P.PL_GRPC_ADDR=r.grpcAddr),r!=null&&r.grpcPort&&(P.PL_GRPC_PORT=r.grpcPort.toString()),r!=null&&r.monitoringAddr&&(P.PL_MONITORING_ADDR=r.monitoringAddr),r!=null&&r.monitoringPort&&(P.PL_MONITORING_PORT=r.monitoringPort.toString()),r!=null&&r.debugAddr&&(P.PL_DEBUG_ADDR=r.debugAddr),r!=null&&r.debugPort&&(P.PL_DEBUG_PORT=r.debugPort.toString()),r!=null&&r.s3Port&&(P.MINIO_PORT=r.s3Port.toString()),r!=null&&r.s3ConsolePort&&(P.MINIO_CONSOLE_PORT=r.s3ConsolePort.toString()),r!=null&&r.auth&&(r.auth.enabled&&(P.PL_AUTH_ENABLED="true"),r.auth.drivers)){for(const v of r.auth.drivers)v.driver==="htpasswd"&&(P.PL_AUTH_HTPASSWD_PATH=h.resolve(v.path),v.path="/etc/platforma/users.htpasswd");P.PL_AUTH_DRIVERS=JSON.stringify(r.auth.drivers)}return m.setInstanceInfo(e,{type:"docker",upCommands:[{cmd:"docker",args:["compose",`--file=${S}`,"up","--detach","--remove-orphans","--pull=missing"],envs:P,runOpts:{stdio:"inherit"}}],downCommands:[{cmd:"docker",args:["compose",`--file=${S}`,"down"],envs:P,runOpts:{stdio:"inherit"}}],cleanupCommands:[{cmd:"docker",args:["compose",`--file=${S}`,"down","--volumes","--remove-orphans"],envs:P,runOpts:{stdio:"inherit"}}],runInfo:{apiPort:r==null?void 0:r.grpcPort,apiAddr:r==null?void 0:r.grpcAddr,logPath:o,primary:y,work:{type:"FS",rootPath:b},library:w,dbPath:p}}),m.getInstanceInfo(e)}createDocker(e,t,r){this.logger.debug("creating platforma instance in 'docker' mode...");const s=X("compose-backend.yaml"),n=(r==null?void 0:r.image)??ur(r==null?void 0:r.version);this.checkLicense(r==null?void 0:r.license,r==null?void 0:r.licenseFile);const i=(...v)=>h.join(t,...v),c=v=>{const O=i(v);return Le(O,{mode:"0775"}),O},o=i("logs","platforma.log");f.existsSync(o)||(f.mkdirSync(h.dirname(o),{recursive:!0}),f.writeFileSync(o,""));const g=c("db"),d=c("primary"),y=c("library"),w=c("work"),p=i("users.htpasswd");f.existsSync(p)||f.copyFileSync(X("users.htpasswd"),p);const b=i("compose.yaml");f.existsSync(b)&&this.logger.info(`replacing docker compose file ${b}`);const k=[];for(const v of(r==null?void 0:r.customMounts)??[])k.push({hostPath:v.hostPath,containerPath:v.containerPath??v.hostPath});this.logger.debug(`Rendering docker compose file '${b}' using '${s}' as base template`),Oe(s,b,`pl-${e}`,new Map([["backend",{platform:r==null?void 0:r.platformOverride,mounts:k}]]));const S=Q((r==null?void 0:r.primaryStorageURL)??`file:${d}`,"."),A=Q((r==null?void 0:r.libraryStorageURL)??`file:${y}`,"."),P={PL_IMAGE:n,PL_AUTH_HTPASSWD_PATH:p,PL_LICENSE:r==null?void 0:r.license,PL_LICENSE_FILE:r==null?void 0:r.licenseFile,PL_LOG_LEVEL:"info",PL_LOG_DIR:h.dirname(o),PL_LOG_ROTATION_ENABLED:"true",PL_RUNNER_WD_CACHE_ON_FAILURE:"1h",PL_DATA_DB_ROOT:g,PL_DATA_PRIMARY_ROOT:d,PL_DATA_LIBRARY_ROOT:y,PL_DATA_WORKDIR_ROOT:w,PL_DATA_PACKAGE_ROOT:c("packages"),...this.configureDockerStorage("primary",S),...this.configureDockerStorage("library",A)};if(r!=null&&r.grpcAddr&&(P.PL_GRPC_ADDR=r.grpcAddr),r!=null&&r.grpcPort&&(P.PL_GRPC_PORT=r.grpcPort.toString()),r!=null&&r.monitoringAddr&&(P.PL_MONITORING_ADDR=r.monitoringAddr),r!=null&&r.monitoringPort&&(P.PL_MONITORING_PORT=r.monitoringPort.toString()),r!=null&&r.debugAddr&&(P.PL_DEBUG_ADDR=r.debugAddr),r!=null&&r.debugPort&&(P.PL_DEBUG_PORT=r.debugPort.toString()),r!=null&&r.auth&&(r.auth.enabled&&(P.PL_AUTH_ENABLED="true"),r.auth.drivers)){for(const v of r.auth.drivers)v.driver==="htpasswd"&&(P.PL_AUTH_HTPASSWD_PATH=h.resolve(v.path),v.path="/etc/platforma/users.htpasswd");P.PL_AUTH_DRIVERS=JSON.stringify(r.auth.drivers)}return m.setInstanceInfo(e,{type:"docker",upCommands:[{cmd:"docker",args:["compose",`--file=${b}`,"up","--detach","--remove-orphans","--pull=missing"],envs:P,runOpts:{stdio:"inherit"}}],downCommands:[{cmd:"docker",args:["compose",`--file=${b}`,"down"],envs:P,runOpts:{stdio:"inherit"}}],cleanupCommands:[{cmd:"docker",args:["compose",`--file=${b}`,"down","--volumes","--remove-orphans"],envs:P,runOpts:{stdio:"inherit"}}],runInfo:{apiPort:r==null?void 0:r.grpcPort,apiAddr:r==null?void 0:r.grpcAddr,logPath:o,primary:S,work:{type:"FS",rootPath:w},library:A,dbPath:g}}),m.getInstanceInfo(e)}cleanupInstance(e){const t=[],r=new Map;let s="";if(e){const n=m.getInstanceInfo(e);switch(r.set(e,n),n.type){case"docker":{t.push(`docker service 'pl-${e}', including all its volumes and data in '${m.instanceDir(e)}' will be destroyed`);break}case"process":{t.push(`directory '${m.instanceDir(e)}' would be deleted`),n.downCommands&&t.push("associated docker service, including all volumes and data will be destroyed");break}default:q()}e===m.currentInstanceName&&t.push("last command run cache ('pl-dev start' shorthand will stop working until next full start command call)"),s=`
106
- You are going to reset the state of platforma service '${e}':
107
- - ${t.join(`
108
- - `)}
109
- `}else{for(const n of m.instanceList)r.set(n,m.getInstanceInfo(n));t.push("last command run cache ('pl-dev start' shorthand will stop working until next full start command call)",`all service configurations stored in: ${m.instanceDir()} (including all associated docker containers and volumes)`),s=`
110
- You are going to reset the state of all platforma services configured with pl-bootstrap package.
111
- - ${t.join(`
112
- - `)}
113
- `}if(this.logger.warn(s),!_r("Are you sure?")){this.logger.info("Reset action was canceled");return}for(const[n,i]of r.entries()){if(i.cleanupCommands.length){this.logger.info(`Wiping instance ${n} services`);const c=Ie(this.logger,i.cleanupCommands);Fe(c.executed,`failed to wipe instance ${n} services`)}this.logger.info(`Destroying instance '${n}' data directory`),f.rmSync(m.instanceDir(n),{recursive:!0,force:!0})}e||(this.logger.info(`Destroying state dir '${m.path()}'`),f.rmSync(m.path(),{recursive:!0,force:!0})),this.logger.info(`
114
- If you want to remove all downloaded platforma binaries, delete '${m.binaries()}' dir manually
115
- `)}mergeLicenseEnvs(e){e.license===void 0&&((process.env.MI_LICENSE??"")!=""?e.license=process.env.MI_LICENSE:(process.env.PL_LICENSE??"")!=""&&(e.license=process.env.PL_LICENSE)),e["license-file"]===void 0&&e.license===void 0&&((process.env.MI_LICENSE_FILE??"")!=""?e["license-file"]=process.env.MI_LICENSE_FILE:(process.env.PL_LICENSE_FILE??"")!=""?e["license-file"]=process.env.PL_LICENSE_FILE:f.existsSync(h.resolve(R.homedir(),".pl.license"))&&(e["license-file"]=h.resolve(R.homedir(),".pl.license")))}initAuthDriversList(e,t){const r=[];if(e["auth-htpasswd-file"]&&r.push({driver:"htpasswd",path:h.resolve(t,e["auth-htpasswd-file"])}),!!e["auth-ldap-server"]!=!!e["auth-ldap-default-dn"])throw new Error("LDAP auth settings require both 'server' and 'default DN' options to be set");if(e["auth-ldap-server"]&&r.push({driver:"ldap",serverUrl:e["auth-ldap-server"],defaultDN:e["auth-ldap-default-dn"]}),r.length!==0)return[{driver:"jwt",key:this.getLastJwt()},...r]}getLastJwt(){const e=m.path("auth.jwt"),t="utf-8";let r="";return f.existsSync(e)&&(r=f.readFileSync(e,{encoding:t})),r==""&&(r=Nr(64),f.writeFileSync(e,r,{encoding:t})),r}checkLicense(e,t){if(!(e!==void 0&&e!="")&&!(t!==void 0&&t!=""))throw this.logger.error(`A license for Platforma Backend must be set.
116
-
117
- You can provide the license directly using the '--license' flag
118
- or use the '--license-file' flag if the license is stored in a file.
119
-
120
- Alternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_LICENSE'.
121
-
122
- The license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',
123
- or stored in '$HOME/.pl.license'.
124
-
125
- You can obtain the license from "https://licensing.milaboratories.com".`),new Error("The license was not provided.")}configureDockerStorage(e,t){const r={},s=t.type;switch(e=e.toUpperCase(),s){case"S3":return r[`PL_DATA_${e}_TYPE`]="S3",r[`PL_DATA_${e}_S3_BUCKET`]=t.bucketName,t.endpoint&&(r[`PL_DATA_${e}_S3_ENDPOINT`]=t.endpoint),t.presignEndpoint&&(r[`PL_DATA_${e}_S3_PRESIGN_ENDPOINT`]=t.presignEndpoint),t.region&&(r[`PL_DATA_${e}_S3_REGION`]=t.region),t.key&&(r[`PL_DATA_${e}_S3_KEY`]=t.key),t.secret&&(r[`PL_DATA_${e}_S3_SECRET`]=t.secret),r;case"FS":return r[`PL_DATA_${e}_TYPE`]="FS",r;default:q()}return{}}renderRunInfo(e,t=10){var c,o;const r=[],s=g=>g.padStart(t," ");switch(e.configPath&&r.push(`${s("config")}: ${e.configPath}`),e.apiAddr?r.push(`${s("API")}: ${e.apiAddr}`):e.apiPort?r.push(`${s("API")}: 127.0.0.1:${e.apiPort.toString()}`):r.push(`${s("API")}: 127.0.0.1:6345`),e.logPath&&r.push(`${s("log")}: ${e.logPath}`),(c=e.primary)==null?void 0:c.type){case void 0:break;case"FS":r.push(`${s("primary")}: ${e.primary.rootPath}`);break;case"S3":r.push(`${s("primary")}: S3 at '${e.primary.endpoint??"AWS"}', bucket '${e.primary.bucketName}', prefix: '${e.primary.keyPrefix??""}'`);break;default:q()}switch((o=e.library)==null?void 0:o.type){case void 0:break;case"FS":r.push(`${s("library")}: ${e.library.rootPath}`);break;case"S3":r.push(`${s("library")}: S3 at '${e.library.endpoint??"AWS"}', bucket '${e.library.bucketName}', prefix: '${e.library.keyPrefix??""}'`);break;default:q()}return e.work&&r.push(`${s("workdirs")}: ${e.work.rootPath}`),e.dbPath&&r.push(`${s("db")}: ${e.dbPath}`),r.join(`
126
- `)}}function Fe(a,e){for(const t of a){if(t.error)throw t.error;const r=e??"failed to run command";if(t.status!==0)throw new Error(`${r}, process exited with code '${t.status}'`)}}const te=class te extends u.Command{async run(){const{flags:e}=await this.parse(te),t=L(e["log-level"]);new I(t).cleanupInstance()}};l(te,"description","Clear service state (forget last run command, destroy docker services, volumes and so on)"),l(te,"examples",["<%= config.bin %> <%= command.id %>"]),l(te,"flags",{...$});let xe=te;const ae=class ae extends u.Command{async run(){const{flags:e}=await this.parse(ae),t=L(e["log-level"]);new I(t).startLast()}};l(ae,"description","Start last run service configuraiton"),l(ae,"examples",["<%= config.bin %> <%= command.id %>"]),l(ae,"flags",{...$});let De=ae;const se=class se extends u.Command{async run(){const{flags:e}=await this.parse(se),t=L(e["log-level"]),r=new I(t);m.currentInstance?r.stopInstance(m.currentInstance):t.warn("up/start command was not called for any instance, nothing to stop")}};l(se,"description","Stop platforma service"),l(se,"examples",["<%= config.bin %> <%= command.id %>"]),l(se,"flags",{...$});let _e=se;var T;let ct=(T=class extends u.Command{async run(){const{flags:e}=await this.parse(T),t=L(e["log-level"]),r=new I(t);r.mergeLicenseEnvs(e);const s="docker",n=e["auth-enabled"],i=n?{enabled:n,drivers:r.initAuthDriversList(e,".")}:void 0,c=e.storage?h.join(".",e.storage):m.instanceDir(s),o=[];for(const y of e.mount??[])o.push({hostPath:y});const g=e.arch?`linux/${e.arch}`:void 0,d=r.createDocker(s,c,{primaryStorageURL:e["storage-primary"],workStoragePath:e["storage-work"],libraryStorageURL:e["storage-library"],image:e.image,version:e.version,platformOverride:g,customMounts:o,license:e.license,licenseFile:e["license-file"],auth:i,grpcAddr:e["grpc-listen"],grpcPort:e["grpc-port"],monitoringAddr:e["monitoring-listen"],monitoringPort:e["monitoring-port"],debugAddr:e["debug-listen"],debugPort:e["debug-port"]});r.switchInstance(d)}},l(T,"description","Run platforma backend service with 'FS' primary storage type"),l(T,"examples",["<%= config.bin %> <%= command.id %>"]),l(T,"flags",{...$,...B,...he,...M,...ye,...G,...j,...we,...U,...ce,...ie,...oe}),T);var x;let ot=(x=class extends u.Command{async run(){const{flags:e}=await this.parse(x),t=L(e["log-level"]),r=new I(t);r.mergeLicenseEnvs(e);const s="local",n=e["pl-workdir"]??".",i=e.storage?h.join(n,e.storage):m.instanceDir(s),c=e["pl-log-file"]?h.join(n,e["pl-log-file"]):void 0,o=r.initAuthDriversList(e,n),g=e["auth-enabled"]??o!==void 0;let d="127.0.0.1:6345";e["grpc-listen"]?d=e["grpc-listen"]:e["grpc-port"]&&(d=`127.0.0.1:${e["grpc-port"]}`);let y="127.0.0.1:9090";e["monitoring-listen"]?y=e["monitoring-listen"]:e["monitoring-port"]&&(y=`127.0.0.1:${e["monitoring-port"]}`);let w="127.0.0.1:9091";e["debug-listen"]?w=e["debug-listen"]:e["debug-port"]&&(w=`127.0.0.1:${e["debug-port"]}`);const p={sourcesPath:e["pl-sources"],binaryPath:e["pl-binary"],version:e.version,configPath:e.config,workdir:e["pl-workdir"],primaryURL:e["storage-primary"],libraryURL:e["storage-library"],configOptions:{grpc:{listen:d},monitoring:{listen:y},debug:{listen:w},license:{value:e.license,file:e["license-file"]},log:{path:c},localRoot:i,core:{auth:{enabled:g,drivers:o}},storages:{work:{type:"FS",rootPath:e["storage-work"]}},numCpu:Math.max(fe.cpus().length-2,1)}},b=r.createLocal(s,p);p.binaryPath||p.sourcesPath?r.switchInstance(b):$e(t,{version:e.version}).then(()=>{const k=r.switchInstance(b);setTimeout(()=>{for(const S of k)S.unref()},1e3)}).catch(function(k){t.error(k.message)})}},l(x,"description","Run Platforma Backend service as local process on current host (no docker container)"),l(x,"examples",["<%= config.bin %> <%= command.id %>"]),l(x,"flags",{...$,...M,...B,...ve,...ke,...Se,...j,...U,...ce,...ie,...oe,...pe,...Pe,...G}),x);const H=class H extends u.Command{async run(){const{flags:e,args:t}=await this.parse(H),r=L(e["log-level"]),s=new I(r),n=t.name;e.all&&(s.cleanupInstance(),process.exit(0)),n||(r.error("Please, specify name of instance to be removed or set '--all' flag instead"),process.exit(1)),s.cleanupInstance(n)}};l(H,"description","List available instances"),l(H,"examples",["<%= config.bin %> <%= command.id %>"]),l(H,"flags",{...$,all:u.Flags.boolean({description:"remove all known instances",required:!1})}),l(H,"args",{name:u.Args.string({required:!1})});let Ne=H;const W=class W extends u.Command{async run(){const{flags:e,args:t}=await this.parse(W),r=L(e["log-level"]),s=new I(r),n=t.name??m.currentInstanceName;n||(r.info("no pl service instance selected. No service was stopped"),process.exit(0)),s.stopInstance(m.getInstanceInfo(n))}};l(W,"description","List available instances"),l(W,"examples",["<%= config.bin %> <%= command.id %>"]),l(W,"flags",{...$}),l(W,"args",{name:u.Args.string({required:!1})});let Ce=W;const ne=class ne extends u.Command{async run(){await this.parse(ne);const e=m.instanceList,t=m.currentInstanceName;for(const r of e){const s=[],n=m.getInstanceInfo(r);m.isInstanceActive(n)&&s.push("status:up"),s.push(`type:${n.type}`),console.log(r===t?` * ${r} (${s.join(", ")})`:` ${r} (${s.join(", ")})`)}}};l(ne,"description","List available instances"),l(ne,"examples",["<%= config.bin %> <%= command.id %>"]),l(ne,"flags",{});let Me=ne;const z=class z extends u.Command{async run(){const{flags:e,args:t}=await this.parse(z),r=L(e["log-level"]),s=new I(r),n=t.name??m.currentInstanceName;n||(r.error("no pl service instance is selected. Select instance with 'select' command or provide name to 'up'"),process.exit(1));const i=s.switchInstance(m.getInstanceInfo(n)),c=[];for(const o of i)c.push(new Promise((g,d)=>{o.on("close",g),o.on("error",d)}));await Promise.all(c)}};l(z,"description","List available instances"),l(z,"examples",["<%= config.bin %> <%= command.id %>"]),l(z,"flags",{...$}),l(z,"args",{name:u.Args.string({required:!1})});let je=z;var D;let lt=(D=class extends u.Command{async run(){const{flags:e}=await this.parse(D),t=L(e["log-level"]),r=new I(t);r.mergeLicenseEnvs(e);const s="docker-s3",n=e["auth-enabled"],i=n?{enabled:n,drivers:r.initAuthDriversList(e,".")}:void 0,c=e.storage?h.join(".",e.storage):m.instanceDir(s),o=[];for(const w of e.mount??[])o.push({hostPath:w});const g=e.arch?`linux/${e.arch}`:void 0,d=e["minio-presign-host"]?"minio":"localhost",y=r.createDockerS3(s,c,{image:e.image,version:e.version,license:e.license,licenseFile:e["license-file"],platformOverride:g,customMounts:o,auth:i,grpcAddr:e["grpc-listen"],grpcPort:e["grpc-port"],monitoringAddr:e["monitoring-listen"],monitoringPort:e["monitoring-port"],debugAddr:e["debug-listen"],debugPort:e["debug-port"],s3Port:e["s3-port"],s3ConsolePort:e["s3-console-port"],presignHost:d});r.switchInstance(y)}},l(D,"description","Run platforma backend service with 'S3' primary storage type"),l(D,"examples",["<%= config.bin %> <%= command.id %>"]),l(D,"flags",{...$,...B,...be,...he,...M,...ye,...G,...j,...we,...U,...hr}),D);var _;let dt=(_=class extends u.Command{async run(){const{flags:e}=await this.parse(_),t=L(e["log-level"]),r=new I(t);r.mergeLicenseEnvs(e);const s="local-s3",n=e["pl-workdir"]??".",i=e.storage?h.join(n,e.storage):m.instanceDir(s),c=e["pl-log-file"]?h.join(n,e["pl-log-file"]):void 0,o=r.initAuthDriversList(e,n),g=e["auth-enabled"]??o!==void 0;let d="127.0.0.1:6345";e["grpc-listen"]?d=e["grpc-listen"]:e["grpc-port"]&&(d=`127.0.0.1:${e["grpc-port"]}`);let y="127.0.0.1:9090";e["monitoring-listen"]?y=e["monitoring-listen"]:e["monitoring-port"]&&(y=`127.0.0.1:${e["monitoring-port"]}`);let w="127.0.0.1:9091";e["debug-listen"]?w=e["debug-listen"]:e["debug-port"]&&(w=`127.0.0.1:${e["debug-port"]}`);const p={sourcesPath:e["pl-sources"],binaryPath:e["pl-binary"],version:e.version,configPath:e.config,workdir:e["pl-workdir"],primaryURL:e["storage-primary"],libraryURL:e["storage-library"],minioPort:e["s3-port"],minioConsolePort:e["s3-console-port"],configOptions:{grpc:{listen:d},monitoring:{listen:y},debug:{listen:w},license:{value:e.license,file:e["license-file"]},log:{path:c},localRoot:i,core:{auth:{enabled:g,drivers:o}},numCpu:Math.max(fe.cpus().length-2,1),storages:{work:{type:"FS",rootPath:e["storage-work"]}}}},b=r.createLocalS3(s,p);p.binaryPath||p.sourcesPath?r.switchInstance(b):await $e(t,{version:e.version}).then(()=>{const k=r.switchInstance(b),S=[];for(const A of k)S.push(new Promise((P,v)=>{A.on("close",P),A.on("error",v)}));return Promise.all(S)}).catch(function(k){t.error(k.message)})}},l(_,"description","Run Platforma Backend service as local process on current host (no docker container)"),l(_,"examples",["<%= config.bin %> <%= command.id %>"]),l(_,"flags",{...$,...M,...B,...be,...ve,...ke,...Se,...j,...U,...ce,...ie,...oe,...pe,...Pe,...G}),_);const Y=class Y extends u.Command{async run(){const{flags:e,args:t}=await this.parse(Y),r=L(e["log-level"]),s=new I(r);s.mergeLicenseEnvs(e);const n=t.name,i=e["auth-enabled"],c=i?{enabled:i,drivers:s.initAuthDriversList(e,".")}:void 0,o=e.storage?h.join(".",e.storage):m.instanceDir(n),g=[];for(const y of e.mount??[])g.push({hostPath:y});const d=e.arch?`linux/${e.arch}`:void 0;s.createDocker(n,o,{primaryStorageURL:e["storage-primary"],workStoragePath:e["storage-work"],libraryStorageURL:e["storage-library"],image:e.image,version:e.version,platformOverride:d,customMounts:g,license:e.license,licenseFile:e["license-file"],auth:c,grpcAddr:e["grpc-listen"],grpcPort:e["grpc-port"],monitoringAddr:e["monitoring-listen"],monitoringPort:e["monitoring-port"],debugAddr:e["debug-listen"],debugPort:e["debug-port"]}),r.info(`Instance '${n}' was created. To start it run 'up' command`)}};l(Y,"description","Run Platforma Backend service as docker container on current host"),l(Y,"examples",["<%= config.bin %> <%= command.id %>"]),l(Y,"flags",{...$,...B,...he,...M,...ye,...G,...j,...we,...U,...ce,...ie,...oe}),l(Y,"args",{name:u.Args.string({required:!0})});let Be=Y;var E;let gt=(E=class extends u.Command{async run(){const{flags:e,args:t}=await this.parse(E),r=L(e["log-level"]),s=new I(r);s.mergeLicenseEnvs(e);const n=t.name,i=e["pl-workdir"]??".",c=e.storage?h.join(i,e.storage):m.instanceDir(n),o=e["pl-log-file"]?h.join(i,e["pl-log-file"]):void 0,g=s.initAuthDriversList(e,i),d=e["auth-enabled"]??g!==void 0;let y="127.0.0.1:6345";e["grpc-listen"]?y=e["grpc-listen"]:e["grpc-port"]&&(y=`127.0.0.1:${e["grpc-port"]}`);let w="127.0.0.1:9090";e["monitoring-listen"]?w=e["monitoring-listen"]:e["monitoring-port"]&&(w=`127.0.0.1:${e["monitoring-port"]}`);let p="127.0.0.1:9091";e["debug-listen"]?p=e["debug-listen"]:e["debug-port"]&&(p=`127.0.0.1:${e["debug-port"]}`);const b={sourcesPath:e["pl-sources"],binaryPath:e["pl-binary"],version:e.version,configPath:e.config,workdir:e["pl-workdir"],primaryURL:e["storage-primary"],libraryURL:e["storage-library"],configOptions:{grpc:{listen:y},monitoring:{listen:w},debug:{listen:p},license:{value:e.license,file:e["license-file"]},log:{path:o},localRoot:c,core:{auth:{enabled:d,drivers:g}},storages:{work:{type:"FS",rootPath:e["storage-work"]}},numCpu:Math.max(fe.cpus().length-2,1)}};if(s.createLocal(n,b),b.binaryPath||b.sourcesPath){r.info(`Instance '${n}' was created. To start it run 'up' command`);return}$e(r,{version:e.version}).then(()=>r.info(`Instance '${n}' was created. To start it run 'svc up' command`)).catch(function(k){r.error(k.message)})}},l(E,"description","Run Platforma Backend service as local process on current host (no docker container)"),l(E,"examples",["<%= config.bin %> <%= command.id %>"]),l(E,"flags",{...$,...M,...B,...ve,...ke,...Se,...j,...U,...ce,...ie,...oe,...pe,...Pe,...G}),l(E,"args",{name:u.Args.string({required:!0})}),E);const V=class V extends u.Command{async run(){const{flags:e,args:t}=await this.parse(V),r=L(e["log-level"]),s=new I(r);s.mergeLicenseEnvs(e);const n=t.name,i=e["auth-enabled"],c=i?{enabled:i,drivers:s.initAuthDriversList(e,".")}:void 0,o=e.storage?h.join(".",e.storage):m.instanceDir(n),g=[];for(const w of e.mount??[])g.push({hostPath:w});const d=e.arch?`linux/${e.arch}`:void 0,y=e["minio-presign-host"]?"minio":"localhost";s.createDockerS3(n,o,{image:e.image,version:e.version,license:e.license,licenseFile:e["license-file"],platformOverride:d,customMounts:g,auth:c,grpcAddr:e["grpc-listen"],grpcPort:e["grpc-port"],monitoringAddr:e["monitoring-listen"],monitoringPort:e["monitoring-port"],debugAddr:e["debug-listen"],debugPort:e["debug-port"],s3Port:e["s3-port"],s3ConsolePort:e["s3-console-port"],presignHost:y}),r.info(`Instance '${n}' was created. To start it run 'up' command`),e["minio-presign-host"]&&r.info(" NOTE: make sure you have 'minio' host in your hosts file as 127.0.0.1 address")}};l(V,"description","Run Platforma Backend service as docker container on current host with MinIO as local S3 storage"),l(V,"examples",["<%= config.bin %> <%= command.id %>"]),l(V,"flags",{...$,...B,...be,...he,...M,...ye,...G,...j,...we,...U,...hr}),l(V,"args",{name:u.Args.string({required:!0})});let Ue=V;const K=class K extends u.Command{async run(){const{flags:e,args:t}=await this.parse(K),r=L(e["log-level"]),s=new I(r);s.mergeLicenseEnvs(e);const n=t.name,i=e["pl-workdir"]??".",c=e.storage?h.join(i,e.storage):m.instanceDir(n),o=e["pl-log-file"]?h.join(i,e["pl-log-file"]):void 0,g=s.initAuthDriversList(e,i),d=e["auth-enabled"]??g!==void 0;let y="127.0.0.1:6345";e["grpc-listen"]?y=e["grpc-listen"]:e["grpc-port"]&&(y=`127.0.0.1:${e["grpc-port"]}`);let w="127.0.0.1:9090";e["monitoring-listen"]?w=e["monitoring-listen"]:e["monitoring-port"]&&(w=`127.0.0.1:${e["monitoring-port"]}`);let p="127.0.0.1:9091";e["debug-listen"]?p=e["debug-listen"]:e["debug-port"]&&(p=`127.0.0.1:${e["debug-port"]}`);const b={sourcesPath:e["pl-sources"],binaryPath:e["pl-binary"],version:e.version,configPath:e.config,workdir:e["pl-workdir"],primaryURL:e["storage-primary"],libraryURL:e["storage-library"],minioPort:e["s3-port"],minioConsolePort:e["s3-console-port"],configOptions:{grpc:{listen:y},monitoring:{listen:w},debug:{listen:p},license:{value:e.license,file:e["license-file"]},log:{path:o},localRoot:c,core:{auth:{enabled:d,drivers:g}},storages:{work:{type:"FS",rootPath:e["storage-work"]}},numCpu:Math.max(fe.cpus().length-2,1)}};if(r.info("Creating instance configuration, data directory and other stuff..."),s.createLocalS3(n,b),b.binaryPath||b.sourcesPath){r.info(`Instance '${n}' was created. To start it run 'up' command`);return}$e(r,{version:e.version}).then(()=>r.info(`Instance '${n}' was created. To start it run 'svc up' command`)).catch(function(k){r.error(k.message)})}};l(K,"description","Run Platforma Backend service as local process on current host (no docker container)"),l(K,"examples",["<%= config.bin %> <%= command.id %>"]),l(K,"flags",{...$,...M,...be,...B,...ve,...ke,...Se,...j,...U,...ce,...ie,...oe,...pe,...Pe,...G}),l(K,"args",{name:u.Args.string({required:!0})});let Ge=K;const ut={"create-block":Re,reset:xe,start:De,stop:_e,"start:docker":ct,"start:local":ot,"svc:delete":Ne,"svc:down":Ce,"svc:list":Me,"svc:up":je,"start:docker:s3":lt,"start:local:s3":dt,"svc:create:docker":Be,"svc:create:local":gt,"svc:create:docker:s3":Ue,"svc:create:local:s3":Ge};exports.COMMANDS=ut;
1
+ import CreateBlock from './commands/create-block.js';
2
+ import Reset from './commands/reset.js';
3
+ import Start from './commands/start.js';
4
+ import Stop from './commands/stop.js';
5
+ import Docker$1 from './commands/start/docker.js';
6
+ import Local$2 from './commands/start/local.js';
7
+ import Delete from './commands/svc/delete.js';
8
+ import Down from './commands/svc/down.js';
9
+ import List from './commands/svc/list.js';
10
+ import Up from './commands/svc/up.js';
11
+ import S3$2 from './commands/start/docker/s3.js';
12
+ import S3$1 from './commands/start/local/s3.js';
13
+ import Docker from './commands/svc/create/docker.js';
14
+ import Local$1 from './commands/svc/create/local.js';
15
+ import S3 from './commands/svc/create/docker/s3.js';
16
+ import Local from './commands/svc/create/local/s3.js';
17
+
18
+ // DO NOT EDIT. This file was generated by oclif-index utility.
19
+ // prettier-ignore
20
+ const COMMANDS = {
21
+ 'create-block': CreateBlock,
22
+ 'reset': Reset,
23
+ 'start': Start,
24
+ 'stop': Stop,
25
+ 'start:docker': Docker$1,
26
+ 'start:local': Local$2,
27
+ 'svc:delete': Delete,
28
+ 'svc:down': Down,
29
+ 'svc:list': List,
30
+ 'svc:up': Up,
31
+ 'start:docker:s3': S3$2,
32
+ 'start:local:s3': S3$1,
33
+ 'svc:create:docker': Docker,
34
+ 'svc:create:local': Local$1,
35
+ 'svc:create:docker:s3': S3,
36
+ 'svc:create:local:s3': Local,
37
+ };
38
+
39
+ export { COMMANDS };
127
40
  //# sourceMappingURL=index.js.map