@platforma-sdk/bootstrap 5.2.23 → 5.2.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cmd-opts.cjs CHANGED
@@ -33,11 +33,11 @@ const ArchFlag = {
33
33
  };
34
34
  const LicenseFlags = {
35
35
  'license': core.Flags.string({
36
- description: 'pass a license code. The license can be got from "https://licensing.milaboratories.com".',
36
+ description: 'pass a license code. The license can be got from "https://platforma.bio/getlicense".',
37
37
  }),
38
38
  'license-file': core.Flags.file({
39
39
  exists: true,
40
- description: 'specify a path to the file with a license. The license can be got from \'https://licensing.milaboratories.com\'.',
40
+ description: 'specify a path to the file with a license. The license can be got from \'https://platforma.bio/getlicense\'.',
41
41
  }),
42
42
  };
43
43
  const AddressesFlags = {
@@ -1 +1 @@
1
- {"version":3,"file":"cmd-opts.cjs","sources":["../src/cmd-opts.ts"],"sourcesContent":["import { Flags } from '@oclif/core';\n\nexport const GlobalFlags = {\n 'log-level': Flags.string({\n description: 'logging level',\n default: 'info',\n options: ['error', 'warn', 'info', 'debug'],\n required: false,\n }),\n};\n\nexport const InstanceName = {\n name: Flags.string({\n description: 'name of instance',\n required: false,\n }),\n};\n\nexport const ImageFlag = {\n image: Flags.string({\n description: 'use custom docker image to run platforma',\n }),\n};\n\nexport const VersionFlag = {\n version: Flags.string({\n description: 'use custom platforma release (official docker image or binary package)',\n }),\n};\n\nexport const ArchFlag = {\n arch: Flags.string({\n description: 'override architecture. You can start amd64 linux image on arm-based host (say, Apple M family processor). I.e. arm64, amd64, amd64/v2',\n }),\n};\n\nexport const LicenseFlags = {\n 'license': Flags.string({\n description: 'pass a license code. The license can be got from \"https://licensing.milaboratories.com\".',\n }),\n 'license-file': Flags.file({\n exists: true,\n description:\n 'specify a path to the file with a license. The license can be got from \\'https://licensing.milaboratories.com\\'.',\n }),\n};\n\nexport const AddressesFlags = {\n 'grpc-port': Flags.integer({\n description: 'port for Platforma Backend gRPC API. Default is 6345',\n env: 'PLATFORMA_GRPC_PORT',\n }),\n\n 'grpc-listen': Flags.string({\n description: 'full listen addr for Platforma Backend gRPC API. Default is 127.0.0.1:6345',\n env: 'PLATFORMA_GRPC_LISTEN',\n }),\n\n 'monitoring-port': Flags.integer({\n description: 'port for Platforma Backend monitoring API. Default is 9090',\n env: 'PLATFORMA_MONITORING_PORT',\n }),\n\n 'monitoring-listen': Flags.string({\n description: 'full listen addr for Platforma Backend monitoring API. Default is 127.0.0.1:9090',\n env: 'PLATFORMA_MONITORING_LISTEN',\n }),\n\n 'debug-port': Flags.integer({\n description: 'port for Platforma Backend debug API. Default is 9091',\n env: 'PLATFORMA_DEBUG_PORT',\n }),\n\n 'debug-listen': Flags.string({\n description: 'full listen addr for Platforma Backend debug API. Default is 127.0.0.1:9091',\n env: 'PLATFORMA_DEBUG_LISTEN',\n }),\n};\n\nexport const S3AddressesFlags = {\n 's3-port': Flags.integer({\n description: 'port that S3 will listen, default is 9000',\n default: 9000,\n env: 'PLATFORMA_S3_PORT',\n }),\n\n 's3-console-port': Flags.integer({\n description: 'port that a console of S3 will listen, default is 9001',\n default: 9001,\n env: 'PLATFORMA_S3_CONSOLE_PORT',\n }),\n};\n\nexport const StorageFlag = {\n storage: Flags.string({\n description: 'specify path on host to be used as storage for all Platforma Backend data',\n }),\n};\n\nexport const MinioPresignHostFlag = {\n ['minio-presign-host']: Flags.boolean({\n description: 'use \\'minio\\' host instead of \\'localhost\\' in presign URLs',\n }),\n};\n\nexport const MountFlag = {\n mount: Flags.string({\n multiple: true,\n description: 'things to be mounted into platforma docker container. Targets will appear inside the container under the same absolute paths',\n }),\n};\n\nexport const PlLogFileFlag = {\n ['pl-log-file']: Flags.file({\n description: 'specify path for Platforma Backend log file',\n }),\n};\n\nexport const PlWorkdirFlag = {\n ['pl-workdir']: Flags.file({\n description: 'specify working directory for Platforma Backend process',\n }),\n};\n\nexport const PlBinaryFlag = {\n ['pl-binary']: Flags.file({\n description: 'start given Platforma Backend binary instead of automatically downloaded version',\n }),\n};\n\nexport const PlSourcesFlag = {\n ['pl-sources']: Flags.file({\n description: 'path to pl repository root: build Platforma Backend from sources and start the resulting binary',\n }),\n};\n\nexport const ConfigFlag = {\n config: Flags.string({\n description: 'use custom Platforma Backend config',\n }),\n};\n\nexport const StoragePrimaryPathFlag = {\n 'storage-primary': Flags.file({\n description: 'specify path on host to be used as \\'primary\\' storage',\n }),\n};\n\nexport const StorageWorkPathFlag = {\n 'storage-work': Flags.file({\n description: 'specify path on host to be used as \\'work\\' storage',\n }),\n};\n\nexport const StorageLibraryPathFlag = {\n 'storage-primary': Flags.file({\n description: 'specify path on host to be used as \\'library\\' storage',\n }),\n};\n\nexport const StoragePrimaryURLFlag = {\n 'storage-primary': Flags.string({\n description:\n 'specify \\'primary\\' storage destination URL.\\n'\n + '\\tfile:/path/to/dir for directory on local FS\\n'\n + '\\ts3://<bucket>/?region=<name> for real AWS bucket\\n'\n + '\\ts3e://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via http\\n'\n + '\\ts3es://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via https',\n }),\n};\n\nexport const StorageLibraryURLFlag = {\n 'storage-library': Flags.string({\n description:\n 'specify \\'library\\' storage destination URL.\\n'\n + '\\tfile:/path/to/dir for directory on local FS\\n'\n + '\\ts3://<bucket>/?region=<name> for real AWS bucket\\n'\n + '\\ts3e://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via http\\n'\n + '\\ts3es://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via https',\n }),\n};\n\nexport const AuthEnabledFlag = {\n 'auth-enabled': Flags.boolean({\n description: 'enable authorization',\n }),\n};\n\nexport const HTPasswdFileFlag = {\n 'auth-htpasswd-file': Flags.file({\n description: 'path to .htpasswd file with Platforma users (static user DB auth source)',\n }),\n};\n\nexport const LDAPAddressFlag = {\n 'auth-ldap-server': Flags.string({\n description: 'address of LDAP server to use for auth in Platforma (auth source)',\n }),\n};\n\nexport const LDAPDefaultDNFlag = {\n 'auth-ldap-default-dn': Flags.string({\n description: 'DN to use when checking user with LDAP bind operation: e.g. cn=%u,ou=users,dc=example,dc=com',\n }),\n};\n\nexport const AuthFlags = {\n ...AuthEnabledFlag,\n ...HTPasswdFileFlag,\n\n ...LDAPAddressFlag,\n ...LDAPDefaultDNFlag,\n};\n"],"names":["Flags"],"mappings":"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"}
1
+ {"version":3,"file":"cmd-opts.cjs","sources":["../src/cmd-opts.ts"],"sourcesContent":["import { Flags } from '@oclif/core';\n\nexport const GlobalFlags = {\n 'log-level': Flags.string({\n description: 'logging level',\n default: 'info',\n options: ['error', 'warn', 'info', 'debug'],\n required: false,\n }),\n};\n\nexport const InstanceName = {\n name: Flags.string({\n description: 'name of instance',\n required: false,\n }),\n};\n\nexport const ImageFlag = {\n image: Flags.string({\n description: 'use custom docker image to run platforma',\n }),\n};\n\nexport const VersionFlag = {\n version: Flags.string({\n description: 'use custom platforma release (official docker image or binary package)',\n }),\n};\n\nexport const ArchFlag = {\n arch: Flags.string({\n description: 'override architecture. You can start amd64 linux image on arm-based host (say, Apple M family processor). I.e. arm64, amd64, amd64/v2',\n }),\n};\n\nexport const LicenseFlags = {\n 'license': Flags.string({\n description: 'pass a license code. The license can be got from \"https://platforma.bio/getlicense\".',\n }),\n 'license-file': Flags.file({\n exists: true,\n description:\n 'specify a path to the file with a license. The license can be got from \\'https://platforma.bio/getlicense\\'.',\n }),\n};\n\nexport const AddressesFlags = {\n 'grpc-port': Flags.integer({\n description: 'port for Platforma Backend gRPC API. Default is 6345',\n env: 'PLATFORMA_GRPC_PORT',\n }),\n\n 'grpc-listen': Flags.string({\n description: 'full listen addr for Platforma Backend gRPC API. Default is 127.0.0.1:6345',\n env: 'PLATFORMA_GRPC_LISTEN',\n }),\n\n 'monitoring-port': Flags.integer({\n description: 'port for Platforma Backend monitoring API. Default is 9090',\n env: 'PLATFORMA_MONITORING_PORT',\n }),\n\n 'monitoring-listen': Flags.string({\n description: 'full listen addr for Platforma Backend monitoring API. Default is 127.0.0.1:9090',\n env: 'PLATFORMA_MONITORING_LISTEN',\n }),\n\n 'debug-port': Flags.integer({\n description: 'port for Platforma Backend debug API. Default is 9091',\n env: 'PLATFORMA_DEBUG_PORT',\n }),\n\n 'debug-listen': Flags.string({\n description: 'full listen addr for Platforma Backend debug API. Default is 127.0.0.1:9091',\n env: 'PLATFORMA_DEBUG_LISTEN',\n }),\n};\n\nexport const S3AddressesFlags = {\n 's3-port': Flags.integer({\n description: 'port that S3 will listen, default is 9000',\n default: 9000,\n env: 'PLATFORMA_S3_PORT',\n }),\n\n 's3-console-port': Flags.integer({\n description: 'port that a console of S3 will listen, default is 9001',\n default: 9001,\n env: 'PLATFORMA_S3_CONSOLE_PORT',\n }),\n};\n\nexport const StorageFlag = {\n storage: Flags.string({\n description: 'specify path on host to be used as storage for all Platforma Backend data',\n }),\n};\n\nexport const MinioPresignHostFlag = {\n ['minio-presign-host']: Flags.boolean({\n description: 'use \\'minio\\' host instead of \\'localhost\\' in presign URLs',\n }),\n};\n\nexport const MountFlag = {\n mount: Flags.string({\n multiple: true,\n description: 'things to be mounted into platforma docker container. Targets will appear inside the container under the same absolute paths',\n }),\n};\n\nexport const PlLogFileFlag = {\n ['pl-log-file']: Flags.file({\n description: 'specify path for Platforma Backend log file',\n }),\n};\n\nexport const PlWorkdirFlag = {\n ['pl-workdir']: Flags.file({\n description: 'specify working directory for Platforma Backend process',\n }),\n};\n\nexport const PlBinaryFlag = {\n ['pl-binary']: Flags.file({\n description: 'start given Platforma Backend binary instead of automatically downloaded version',\n }),\n};\n\nexport const PlSourcesFlag = {\n ['pl-sources']: Flags.file({\n description: 'path to pl repository root: build Platforma Backend from sources and start the resulting binary',\n }),\n};\n\nexport const ConfigFlag = {\n config: Flags.string({\n description: 'use custom Platforma Backend config',\n }),\n};\n\nexport const StoragePrimaryPathFlag = {\n 'storage-primary': Flags.file({\n description: 'specify path on host to be used as \\'primary\\' storage',\n }),\n};\n\nexport const StorageWorkPathFlag = {\n 'storage-work': Flags.file({\n description: 'specify path on host to be used as \\'work\\' storage',\n }),\n};\n\nexport const StorageLibraryPathFlag = {\n 'storage-primary': Flags.file({\n description: 'specify path on host to be used as \\'library\\' storage',\n }),\n};\n\nexport const StoragePrimaryURLFlag = {\n 'storage-primary': Flags.string({\n description:\n 'specify \\'primary\\' storage destination URL.\\n'\n + '\\tfile:/path/to/dir for directory on local FS\\n'\n + '\\ts3://<bucket>/?region=<name> for real AWS bucket\\n'\n + '\\ts3e://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via http\\n'\n + '\\ts3es://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via https',\n }),\n};\n\nexport const StorageLibraryURLFlag = {\n 'storage-library': Flags.string({\n description:\n 'specify \\'library\\' storage destination URL.\\n'\n + '\\tfile:/path/to/dir for directory on local FS\\n'\n + '\\ts3://<bucket>/?region=<name> for real AWS bucket\\n'\n + '\\ts3e://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via http\\n'\n + '\\ts3es://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via https',\n }),\n};\n\nexport const AuthEnabledFlag = {\n 'auth-enabled': Flags.boolean({\n description: 'enable authorization',\n }),\n};\n\nexport const HTPasswdFileFlag = {\n 'auth-htpasswd-file': Flags.file({\n description: 'path to .htpasswd file with Platforma users (static user DB auth source)',\n }),\n};\n\nexport const LDAPAddressFlag = {\n 'auth-ldap-server': Flags.string({\n description: 'address of LDAP server to use for auth in Platforma (auth source)',\n }),\n};\n\nexport const LDAPDefaultDNFlag = {\n 'auth-ldap-default-dn': Flags.string({\n description: 'DN to use when checking user with LDAP bind operation: e.g. cn=%u,ou=users,dc=example,dc=com',\n }),\n};\n\nexport const AuthFlags = {\n ...AuthEnabledFlag,\n ...HTPasswdFileFlag,\n\n ...LDAPAddressFlag,\n ...LDAPDefaultDNFlag,\n};\n"],"names":["Flags"],"mappings":"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"}
package/dist/cmd-opts.js CHANGED
@@ -31,11 +31,11 @@ const ArchFlag = {
31
31
  };
32
32
  const LicenseFlags = {
33
33
  'license': Flags.string({
34
- description: 'pass a license code. The license can be got from "https://licensing.milaboratories.com".',
34
+ description: 'pass a license code. The license can be got from "https://platforma.bio/getlicense".',
35
35
  }),
36
36
  'license-file': Flags.file({
37
37
  exists: true,
38
- description: 'specify a path to the file with a license. The license can be got from \'https://licensing.milaboratories.com\'.',
38
+ description: 'specify a path to the file with a license. The license can be got from \'https://platforma.bio/getlicense\'.',
39
39
  }),
40
40
  };
41
41
  const AddressesFlags = {
@@ -1 +1 @@
1
- {"version":3,"file":"cmd-opts.js","sources":["../src/cmd-opts.ts"],"sourcesContent":["import { Flags } from '@oclif/core';\n\nexport const GlobalFlags = {\n 'log-level': Flags.string({\n description: 'logging level',\n default: 'info',\n options: ['error', 'warn', 'info', 'debug'],\n required: false,\n }),\n};\n\nexport const InstanceName = {\n name: Flags.string({\n description: 'name of instance',\n required: false,\n }),\n};\n\nexport const ImageFlag = {\n image: Flags.string({\n description: 'use custom docker image to run platforma',\n }),\n};\n\nexport const VersionFlag = {\n version: Flags.string({\n description: 'use custom platforma release (official docker image or binary package)',\n }),\n};\n\nexport const ArchFlag = {\n arch: Flags.string({\n description: 'override architecture. You can start amd64 linux image on arm-based host (say, Apple M family processor). I.e. arm64, amd64, amd64/v2',\n }),\n};\n\nexport const LicenseFlags = {\n 'license': Flags.string({\n description: 'pass a license code. The license can be got from \"https://licensing.milaboratories.com\".',\n }),\n 'license-file': Flags.file({\n exists: true,\n description:\n 'specify a path to the file with a license. The license can be got from \\'https://licensing.milaboratories.com\\'.',\n }),\n};\n\nexport const AddressesFlags = {\n 'grpc-port': Flags.integer({\n description: 'port for Platforma Backend gRPC API. Default is 6345',\n env: 'PLATFORMA_GRPC_PORT',\n }),\n\n 'grpc-listen': Flags.string({\n description: 'full listen addr for Platforma Backend gRPC API. Default is 127.0.0.1:6345',\n env: 'PLATFORMA_GRPC_LISTEN',\n }),\n\n 'monitoring-port': Flags.integer({\n description: 'port for Platforma Backend monitoring API. Default is 9090',\n env: 'PLATFORMA_MONITORING_PORT',\n }),\n\n 'monitoring-listen': Flags.string({\n description: 'full listen addr for Platforma Backend monitoring API. Default is 127.0.0.1:9090',\n env: 'PLATFORMA_MONITORING_LISTEN',\n }),\n\n 'debug-port': Flags.integer({\n description: 'port for Platforma Backend debug API. Default is 9091',\n env: 'PLATFORMA_DEBUG_PORT',\n }),\n\n 'debug-listen': Flags.string({\n description: 'full listen addr for Platforma Backend debug API. Default is 127.0.0.1:9091',\n env: 'PLATFORMA_DEBUG_LISTEN',\n }),\n};\n\nexport const S3AddressesFlags = {\n 's3-port': Flags.integer({\n description: 'port that S3 will listen, default is 9000',\n default: 9000,\n env: 'PLATFORMA_S3_PORT',\n }),\n\n 's3-console-port': Flags.integer({\n description: 'port that a console of S3 will listen, default is 9001',\n default: 9001,\n env: 'PLATFORMA_S3_CONSOLE_PORT',\n }),\n};\n\nexport const StorageFlag = {\n storage: Flags.string({\n description: 'specify path on host to be used as storage for all Platforma Backend data',\n }),\n};\n\nexport const MinioPresignHostFlag = {\n ['minio-presign-host']: Flags.boolean({\n description: 'use \\'minio\\' host instead of \\'localhost\\' in presign URLs',\n }),\n};\n\nexport const MountFlag = {\n mount: Flags.string({\n multiple: true,\n description: 'things to be mounted into platforma docker container. Targets will appear inside the container under the same absolute paths',\n }),\n};\n\nexport const PlLogFileFlag = {\n ['pl-log-file']: Flags.file({\n description: 'specify path for Platforma Backend log file',\n }),\n};\n\nexport const PlWorkdirFlag = {\n ['pl-workdir']: Flags.file({\n description: 'specify working directory for Platforma Backend process',\n }),\n};\n\nexport const PlBinaryFlag = {\n ['pl-binary']: Flags.file({\n description: 'start given Platforma Backend binary instead of automatically downloaded version',\n }),\n};\n\nexport const PlSourcesFlag = {\n ['pl-sources']: Flags.file({\n description: 'path to pl repository root: build Platforma Backend from sources and start the resulting binary',\n }),\n};\n\nexport const ConfigFlag = {\n config: Flags.string({\n description: 'use custom Platforma Backend config',\n }),\n};\n\nexport const StoragePrimaryPathFlag = {\n 'storage-primary': Flags.file({\n description: 'specify path on host to be used as \\'primary\\' storage',\n }),\n};\n\nexport const StorageWorkPathFlag = {\n 'storage-work': Flags.file({\n description: 'specify path on host to be used as \\'work\\' storage',\n }),\n};\n\nexport const StorageLibraryPathFlag = {\n 'storage-primary': Flags.file({\n description: 'specify path on host to be used as \\'library\\' storage',\n }),\n};\n\nexport const StoragePrimaryURLFlag = {\n 'storage-primary': Flags.string({\n description:\n 'specify \\'primary\\' storage destination URL.\\n'\n + '\\tfile:/path/to/dir for directory on local FS\\n'\n + '\\ts3://<bucket>/?region=<name> for real AWS bucket\\n'\n + '\\ts3e://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via http\\n'\n + '\\ts3es://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via https',\n }),\n};\n\nexport const StorageLibraryURLFlag = {\n 'storage-library': Flags.string({\n description:\n 'specify \\'library\\' storage destination URL.\\n'\n + '\\tfile:/path/to/dir for directory on local FS\\n'\n + '\\ts3://<bucket>/?region=<name> for real AWS bucket\\n'\n + '\\ts3e://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via http\\n'\n + '\\ts3es://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via https',\n }),\n};\n\nexport const AuthEnabledFlag = {\n 'auth-enabled': Flags.boolean({\n description: 'enable authorization',\n }),\n};\n\nexport const HTPasswdFileFlag = {\n 'auth-htpasswd-file': Flags.file({\n description: 'path to .htpasswd file with Platforma users (static user DB auth source)',\n }),\n};\n\nexport const LDAPAddressFlag = {\n 'auth-ldap-server': Flags.string({\n description: 'address of LDAP server to use for auth in Platforma (auth source)',\n }),\n};\n\nexport const LDAPDefaultDNFlag = {\n 'auth-ldap-default-dn': Flags.string({\n description: 'DN to use when checking user with LDAP bind operation: e.g. cn=%u,ou=users,dc=example,dc=com',\n }),\n};\n\nexport const AuthFlags = {\n ...AuthEnabledFlag,\n ...HTPasswdFileFlag,\n\n ...LDAPAddressFlag,\n ...LDAPDefaultDNFlag,\n};\n"],"names":[],"mappings":";;AAEO,MAAM,WAAW,GAAG;AACzB,IAAA,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC;AACxB,QAAA,WAAW,EAAE,eAAe;AAC5B,QAAA,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;AAC3C,QAAA,QAAQ,EAAE,KAAK;KAChB,CAAC;;CAGwB;AAC1B,IAAA,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;AACjB,QAAA,WAAW,EAAE,kBAAkB;AAC/B,QAAA,QAAQ,EAAE,KAAK;KAChB,CAAC;;AAGG,MAAM,SAAS,GAAG;AACvB,IAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;AAClB,QAAA,WAAW,EAAE,0CAA0C;KACxD,CAAC;;AAGG,MAAM,WAAW,GAAG;AACzB,IAAA,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;AACpB,QAAA,WAAW,EAAE,wEAAwE;KACtF,CAAC;;AAGG,MAAM,QAAQ,GAAG;AACtB,IAAA,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;AACjB,QAAA,WAAW,EAAE,uIAAuI;KACrJ,CAAC;;AAGG,MAAM,YAAY,GAAG;AAC1B,IAAA,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;AACtB,QAAA,WAAW,EAAE,0FAA0F;KACxG,CAAC;AACF,IAAA,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC;AACzB,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,WAAW,EACT,kHAAkH;KACrH,CAAC;;AAGG,MAAM,cAAc,GAAG;AAC5B,IAAA,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC;AACzB,QAAA,WAAW,EAAE,sDAAsD;AACnE,QAAA,GAAG,EAAE,qBAAqB;KAC3B,CAAC;AAEF,IAAA,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;AAC1B,QAAA,WAAW,EAAE,4EAA4E;AACzF,QAAA,GAAG,EAAE,uBAAuB;KAC7B,CAAC;AAEF,IAAA,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;AAC/B,QAAA,WAAW,EAAE,4DAA4D;AACzE,QAAA,GAAG,EAAE,2BAA2B;KACjC,CAAC;AAEF,IAAA,mBAAmB,EAAE,KAAK,CAAC,MAAM,CAAC;AAChC,QAAA,WAAW,EAAE,kFAAkF;AAC/F,QAAA,GAAG,EAAE,6BAA6B;KACnC,CAAC;AAEF,IAAA,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;AAC1B,QAAA,WAAW,EAAE,uDAAuD;AACpE,QAAA,GAAG,EAAE,sBAAsB;KAC5B,CAAC;AAEF,IAAA,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC;AAC3B,QAAA,WAAW,EAAE,6EAA6E;AAC1F,QAAA,GAAG,EAAE,wBAAwB;KAC9B,CAAC;;AAGG,MAAM,gBAAgB,GAAG;AAC9B,IAAA,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;AACvB,QAAA,WAAW,EAAE,2CAA2C;AACxD,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,GAAG,EAAE,mBAAmB;KACzB,CAAC;AAEF,IAAA,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;AAC/B,QAAA,WAAW,EAAE,wDAAwD;AACrE,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,GAAG,EAAE,2BAA2B;KACjC,CAAC;;AAGG,MAAM,WAAW,GAAG;AACzB,IAAA,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;AACpB,QAAA,WAAW,EAAE,2EAA2E;KACzF,CAAC;;AAGG,MAAM,oBAAoB,GAAG;AAClC,IAAA,CAAC,oBAAoB,GAAG,KAAK,CAAC,OAAO,CAAC;AACpC,QAAA,WAAW,EAAE,6DAA6D;KAC3E,CAAC;;AAGG,MAAM,SAAS,GAAG;AACvB,IAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;AAClB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,WAAW,EAAE,8HAA8H;KAC5I,CAAC;;AAGG,MAAM,aAAa,GAAG;AAC3B,IAAA,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC;AAC1B,QAAA,WAAW,EAAE,6CAA6C;KAC3D,CAAC;;AAGG,MAAM,aAAa,GAAG;AAC3B,IAAA,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;AACzB,QAAA,WAAW,EAAE,yDAAyD;KACvE,CAAC;;AAGG,MAAM,YAAY,GAAG;AAC1B,IAAA,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;AACxB,QAAA,WAAW,EAAE,kFAAkF;KAChG,CAAC;;AAGG,MAAM,aAAa,GAAG;AAC3B,IAAA,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;AACzB,QAAA,WAAW,EAAE,iGAAiG;KAC/G,CAAC;;AAGG,MAAM,UAAU,GAAG;AACxB,IAAA,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;AACnB,QAAA,WAAW,EAAE,qCAAqC;KACnD,CAAC;;CAGkC;AACpC,IAAA,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC;AAC5B,QAAA,WAAW,EAAE,wDAAwD;KACtE,CAAC;;AAGG,MAAM,mBAAmB,GAAG;AACjC,IAAA,cAAc,EAAE,KAAK,CAAC,IAAI,CAAC;AACzB,QAAA,WAAW,EAAE,qDAAqD;KACnE,CAAC;;CAGkC;AACpC,IAAA,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC;AAC5B,QAAA,WAAW,EAAE,wDAAwD;KACtE,CAAC;;AAGG,MAAM,qBAAqB,GAAG;AACnC,IAAA,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC;AAC9B,QAAA,WAAW,EACT;cACE;cACA;cACA;cACA,yFAAyF;KAC9F,CAAC;;AAGG,MAAM,qBAAqB,GAAG;AACnC,IAAA,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC;AAC9B,QAAA,WAAW,EACT;cACE;cACA;cACA;cACA,yFAAyF;KAC9F,CAAC;;AAGG,MAAM,eAAe,GAAG;AAC7B,IAAA,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC;AAC5B,QAAA,WAAW,EAAE,sBAAsB;KACpC,CAAC;;AAGG,MAAM,gBAAgB,GAAG;AAC9B,IAAA,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC;AAC/B,QAAA,WAAW,EAAE,0EAA0E;KACxF,CAAC;;AAGG,MAAM,eAAe,GAAG;AAC7B,IAAA,kBAAkB,EAAE,KAAK,CAAC,MAAM,CAAC;AAC/B,QAAA,WAAW,EAAE,mEAAmE;KACjF,CAAC;;AAGG,MAAM,iBAAiB,GAAG;AAC/B,IAAA,sBAAsB,EAAE,KAAK,CAAC,MAAM,CAAC;AACnC,QAAA,WAAW,EAAE,8FAA8F;KAC5G,CAAC;;AAGG,MAAM,SAAS,GAAG;AACvB,IAAA,GAAG,eAAe;AAClB,IAAA,GAAG,gBAAgB;AAEnB,IAAA,GAAG,eAAe;AAClB,IAAA,GAAG,iBAAiB;;;;;"}
1
+ {"version":3,"file":"cmd-opts.js","sources":["../src/cmd-opts.ts"],"sourcesContent":["import { Flags } from '@oclif/core';\n\nexport const GlobalFlags = {\n 'log-level': Flags.string({\n description: 'logging level',\n default: 'info',\n options: ['error', 'warn', 'info', 'debug'],\n required: false,\n }),\n};\n\nexport const InstanceName = {\n name: Flags.string({\n description: 'name of instance',\n required: false,\n }),\n};\n\nexport const ImageFlag = {\n image: Flags.string({\n description: 'use custom docker image to run platforma',\n }),\n};\n\nexport const VersionFlag = {\n version: Flags.string({\n description: 'use custom platforma release (official docker image or binary package)',\n }),\n};\n\nexport const ArchFlag = {\n arch: Flags.string({\n description: 'override architecture. You can start amd64 linux image on arm-based host (say, Apple M family processor). I.e. arm64, amd64, amd64/v2',\n }),\n};\n\nexport const LicenseFlags = {\n 'license': Flags.string({\n description: 'pass a license code. The license can be got from \"https://platforma.bio/getlicense\".',\n }),\n 'license-file': Flags.file({\n exists: true,\n description:\n 'specify a path to the file with a license. The license can be got from \\'https://platforma.bio/getlicense\\'.',\n }),\n};\n\nexport const AddressesFlags = {\n 'grpc-port': Flags.integer({\n description: 'port for Platforma Backend gRPC API. Default is 6345',\n env: 'PLATFORMA_GRPC_PORT',\n }),\n\n 'grpc-listen': Flags.string({\n description: 'full listen addr for Platforma Backend gRPC API. Default is 127.0.0.1:6345',\n env: 'PLATFORMA_GRPC_LISTEN',\n }),\n\n 'monitoring-port': Flags.integer({\n description: 'port for Platforma Backend monitoring API. Default is 9090',\n env: 'PLATFORMA_MONITORING_PORT',\n }),\n\n 'monitoring-listen': Flags.string({\n description: 'full listen addr for Platforma Backend monitoring API. Default is 127.0.0.1:9090',\n env: 'PLATFORMA_MONITORING_LISTEN',\n }),\n\n 'debug-port': Flags.integer({\n description: 'port for Platforma Backend debug API. Default is 9091',\n env: 'PLATFORMA_DEBUG_PORT',\n }),\n\n 'debug-listen': Flags.string({\n description: 'full listen addr for Platforma Backend debug API. Default is 127.0.0.1:9091',\n env: 'PLATFORMA_DEBUG_LISTEN',\n }),\n};\n\nexport const S3AddressesFlags = {\n 's3-port': Flags.integer({\n description: 'port that S3 will listen, default is 9000',\n default: 9000,\n env: 'PLATFORMA_S3_PORT',\n }),\n\n 's3-console-port': Flags.integer({\n description: 'port that a console of S3 will listen, default is 9001',\n default: 9001,\n env: 'PLATFORMA_S3_CONSOLE_PORT',\n }),\n};\n\nexport const StorageFlag = {\n storage: Flags.string({\n description: 'specify path on host to be used as storage for all Platforma Backend data',\n }),\n};\n\nexport const MinioPresignHostFlag = {\n ['minio-presign-host']: Flags.boolean({\n description: 'use \\'minio\\' host instead of \\'localhost\\' in presign URLs',\n }),\n};\n\nexport const MountFlag = {\n mount: Flags.string({\n multiple: true,\n description: 'things to be mounted into platforma docker container. Targets will appear inside the container under the same absolute paths',\n }),\n};\n\nexport const PlLogFileFlag = {\n ['pl-log-file']: Flags.file({\n description: 'specify path for Platforma Backend log file',\n }),\n};\n\nexport const PlWorkdirFlag = {\n ['pl-workdir']: Flags.file({\n description: 'specify working directory for Platforma Backend process',\n }),\n};\n\nexport const PlBinaryFlag = {\n ['pl-binary']: Flags.file({\n description: 'start given Platforma Backend binary instead of automatically downloaded version',\n }),\n};\n\nexport const PlSourcesFlag = {\n ['pl-sources']: Flags.file({\n description: 'path to pl repository root: build Platforma Backend from sources and start the resulting binary',\n }),\n};\n\nexport const ConfigFlag = {\n config: Flags.string({\n description: 'use custom Platforma Backend config',\n }),\n};\n\nexport const StoragePrimaryPathFlag = {\n 'storage-primary': Flags.file({\n description: 'specify path on host to be used as \\'primary\\' storage',\n }),\n};\n\nexport const StorageWorkPathFlag = {\n 'storage-work': Flags.file({\n description: 'specify path on host to be used as \\'work\\' storage',\n }),\n};\n\nexport const StorageLibraryPathFlag = {\n 'storage-primary': Flags.file({\n description: 'specify path on host to be used as \\'library\\' storage',\n }),\n};\n\nexport const StoragePrimaryURLFlag = {\n 'storage-primary': Flags.string({\n description:\n 'specify \\'primary\\' storage destination URL.\\n'\n + '\\tfile:/path/to/dir for directory on local FS\\n'\n + '\\ts3://<bucket>/?region=<name> for real AWS bucket\\n'\n + '\\ts3e://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via http\\n'\n + '\\ts3es://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via https',\n }),\n};\n\nexport const StorageLibraryURLFlag = {\n 'storage-library': Flags.string({\n description:\n 'specify \\'library\\' storage destination URL.\\n'\n + '\\tfile:/path/to/dir for directory on local FS\\n'\n + '\\ts3://<bucket>/?region=<name> for real AWS bucket\\n'\n + '\\ts3e://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via http\\n'\n + '\\ts3es://<endpoint>/<bucket>/?region=<name> for bucket behind custom endpoint via https',\n }),\n};\n\nexport const AuthEnabledFlag = {\n 'auth-enabled': Flags.boolean({\n description: 'enable authorization',\n }),\n};\n\nexport const HTPasswdFileFlag = {\n 'auth-htpasswd-file': Flags.file({\n description: 'path to .htpasswd file with Platforma users (static user DB auth source)',\n }),\n};\n\nexport const LDAPAddressFlag = {\n 'auth-ldap-server': Flags.string({\n description: 'address of LDAP server to use for auth in Platforma (auth source)',\n }),\n};\n\nexport const LDAPDefaultDNFlag = {\n 'auth-ldap-default-dn': Flags.string({\n description: 'DN to use when checking user with LDAP bind operation: e.g. cn=%u,ou=users,dc=example,dc=com',\n }),\n};\n\nexport const AuthFlags = {\n ...AuthEnabledFlag,\n ...HTPasswdFileFlag,\n\n ...LDAPAddressFlag,\n ...LDAPDefaultDNFlag,\n};\n"],"names":[],"mappings":"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"}
package/dist/core.cjs CHANGED
@@ -735,7 +735,7 @@ Alternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_
735
735
  The license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',
736
736
  or stored in '$HOME/.pl.license'.
737
737
 
738
- You can obtain the license from "https://licensing.milaboratories.com".`);
738
+ You can obtain the license from "https://platforma.bio/getlicense".`);
739
739
  throw new Error(`The license was not provided.`);
740
740
  }
741
741
  configureDockerStorage(storageID, storage) {
package/dist/core.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.cjs","sources":["../src/core.ts"],"sourcesContent":["import type { ChildProcess, SpawnSyncReturns } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport * as pkg from './package';\nimport * as run from './run';\nimport * as composeCfg from './templates/compose';\nimport * as plCfg from './templates/pl-config';\nimport type * as types from './templates/types';\nimport * as platforma from './platforma';\nimport type { instanceInfo, instanceCommand } from './state';\nimport state from './state';\nimport * as util from './util';\nimport type winston from 'winston';\n\nexport default class Core {\n constructor(private readonly logger: winston.Logger) { }\n\n public startLast(): ChildProcess[] {\n const instance = state.currentInstance;\n if (!instance) {\n this.logger.error('failed to bring back Platforma Backend in the last started configuration: no last configuration found');\n throw new Error('no previous run info found');\n }\n\n return this.startInstance(instance);\n }\n\n public startInstance(instance: instanceInfo): ChildProcess[] {\n if (instance.runInfo) {\n const runInfo = this.renderRunInfo(instance.runInfo);\n this.logger.info(`Starting platforma backend instance '${instance.name}':\\n${runInfo}`);\n }\n\n const result = run.runCommands(\n this.logger,\n instance.upCommands,\n );\n checkRunError(result.executed);\n\n if (result.spawned.length > 0 && instance.type === 'process') {\n instance.pid = result.spawned[result.spawned.length - 1].pid;\n state.setInstanceInfo(instance.name, instance);\n this.logger.info(`instance '${instance.name}' started`);\n }\n\n state.currentInstanceName = instance.name;\n\n return result.spawned;\n }\n\n public stopInstance(instance: instanceInfo) {\n this.logger.info(`stopping platforma backend instance '${instance.name}'...`);\n const result = run.runCommands(this.logger, instance.downCommands);\n checkRunError(result.executed);\n\n const iType = instance.type;\n switch (iType) {\n case 'docker': {\n return;\n }\n\n case 'process': {\n if (instance.pid && state.isInstanceActive(instance)) {\n process.kill(instance.pid);\n }\n\n return;\n }\n default:\n util.assertNever(iType);\n }\n }\n\n public switchInstance(instance: instanceInfo): ChildProcess[] {\n // Stop all other active instances before switching to new one;\n for (const iName of state.instanceList) {\n if (iName !== instance.name) {\n const iToStop = state.getInstanceInfo(iName);\n if (state.isInstanceActive(iToStop)) {\n this.stopInstance(iToStop);\n }\n }\n }\n\n return this.startInstance(instance);\n }\n\n public createLocal(instanceName: string, options?: createLocalOptions): instanceInfo {\n let plBinaryPath = platforma.binaryPath(options?.version, 'binaries', 'platforma');\n if (options?.sourcesPath) {\n plBinaryPath = path.join(os.tmpdir(), 'platforma-custom-build');\n }\n if (options?.binaryPath) {\n plBinaryPath = options.binaryPath;\n }\n\n let configPath = options?.configPath;\n const workdir: string = options?.workdir ?? (configPath ? process.cwd() : state.instanceDir(instanceName));\n\n if (options?.primaryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n primary: plCfg.storageSettingsFromURL(options.primaryURL, workdir, options.configOptions?.storages?.primary),\n },\n };\n }\n if (options?.libraryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n library: plCfg.storageSettingsFromURL(options.libraryURL, workdir, options.configOptions?.storages?.library),\n },\n };\n }\n\n const configOptions = plCfg.loadDefaults(this.getLastJwt(), options?.configOptions);\n\n this.logger.debug(` checking license...`);\n this.checkLicense(options?.configOptions?.license?.value, options?.configOptions?.license?.file);\n\n const storageDirs: string[] = [\n `${configOptions.localRoot}/packages`,\n `${configOptions.localRoot}/packages-local`,\n `${configOptions.localRoot}/blocks-local`,\n ];\n if (configOptions.storages.primary.type === 'FS') {\n storageDirs.push(configOptions.storages.primary.rootPath);\n }\n if (configOptions.storages.library.type === 'FS') {\n storageDirs.push(configOptions.storages.library.rootPath);\n configOptions.hacks.libraryDownloadable = false;\n }\n if (configOptions.storages.work.type === 'FS') {\n storageDirs.push(configOptions.storages.work.rootPath);\n }\n\n this.logger.debug(' creating pl state directories...');\n for (const dir of storageDirs) {\n if (!fs.existsSync(dir)) {\n this.logger.debug(` '${dir}'`);\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n\n for (const drv of configOptions.core.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n if (!fs.existsSync(drv.path)) {\n this.logger.debug(` installing default 'users.htpasswd' to ${drv.path}...`);\n fs.copyFileSync(pkg.assets('users.htpasswd'), drv.path);\n }\n }\n }\n\n if (!configPath) {\n configPath = path.join(configOptions.localRoot, 'config.yaml');\n this.logger.debug(` rendering configuration '${configPath}'...`);\n fs.writeFileSync(configPath, plCfg.render(configOptions));\n }\n\n const upCommands: instanceCommand[] = [];\n if (options?.sourcesPath) {\n upCommands.push({\n cmd: 'go',\n args: ['build', '-o', plBinaryPath, '.'],\n workdir: path.resolve(options.sourcesPath, 'cmd', 'platforma'),\n runOpts: {\n stdio: 'inherit',\n },\n });\n }\n\n const runBinary: instanceCommand = {\n async: true,\n cmd: plBinaryPath,\n args: ['--quiet', '--config', configPath],\n workdir: workdir,\n runOpts: {\n stdio: 'inherit',\n },\n };\n\n if (options?.configOptions?.numCpu) {\n runBinary.runOpts.env = {\n GOMAXPROCS: String(options?.configOptions?.numCpu),\n };\n }\n\n // Process additional environment variables from CLI options\n if (options?.backendCommands) {\n if (!runBinary.runOpts.env) {\n runBinary.runOpts.env = {};\n }\n for (const cmd of options.backendCommands) {\n const equalIndex = cmd.indexOf('=');\n if (equalIndex > 0) {\n const key = cmd.substring(0, equalIndex);\n const value = cmd.substring(equalIndex + 1);\n runBinary.runOpts.env[key] = value;\n } else {\n this.logger.warn(`Invalid environment variable format: ${cmd}. Expected format: KEY=VALUE`);\n }\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n // Add commands as arguments to the binary\n runBinary.args = [...runBinary.args, ...options.backendCommands];\n }\n\n upCommands.push(runBinary);\n\n state.setInstanceInfo(instanceName, {\n type: 'process',\n upCommands: upCommands,\n downCommands: [],\n cleanupCommands: [],\n runInfo: {\n configPath,\n dbPath: configOptions.core.db.path,\n apiAddr: configOptions.grpc.listen,\n logPath: configOptions.log.path,\n primary: configOptions.storages.primary,\n work: configOptions.storages.work,\n library: configOptions.storages.library,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createLocalS3(instanceName: string, options?: createLocalS3Options): instanceInfo {\n this.logger.debug('creating platforma instance in \\'local s3\\' mode...');\n\n const minioPort = options?.minioPort ?? 9000;\n\n const instance = this.createLocal(instanceName, {\n ...options,\n primaryURL: options?.primaryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-primary-bucket/?region=no-region`,\n libraryURL: options?.libraryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-library-bucket/?region=no-region`,\n });\n\n const localRoot = options?.configOptions?.localRoot;\n const minioRunCmd = this.createMinio(instanceName, {\n minioPort: minioPort,\n minioConsolePort: options?.minioConsolePort,\n storage: localRoot ? path.join(localRoot, 'minio') : undefined,\n });\n\n instance.upCommands = [\n minioRunCmd.start,\n ...instance.upCommands,\n ];\n\n instance.downCommands = [\n minioRunCmd.stop,\n ...instance.downCommands,\n ];\n\n instance.cleanupCommands = [\n minioRunCmd.cleanup,\n ...instance.cleanupCommands,\n ];\n\n state.setInstanceInfo(instanceName, instance);\n return instance;\n }\n\n public createMinio(\n instanceName: string,\n options?: {\n image?: string;\n version?: string;\n minioPort?: number;\n minioConsolePort?: number;\n storage?: string;\n }): {\n start: instanceCommand;\n stop: instanceCommand;\n cleanup: instanceCommand;\n } {\n this.logger.debug(' creating docker compose for minio service...');\n const composeSrc = pkg.assets('compose-backend.yaml');\n const composeMinio = state.instanceDir(instanceName, 'compose-minio.yaml');\n\n composeCfg.render(composeSrc, composeMinio, `pl-${instanceName}-minio`,\n new Map([\n ['minio', {}],\n ]),\n { dropVolumes: true },\n );\n\n const version = options?.version ? `:${options.version}` : '';\n this.logger.debug(` minio version: ${version}`);\n const image = options?.image ?? `quay.io/minio/minio${version}`;\n this.logger.debug(` minio image: ${image}`);\n\n const storage = options?.storage ?? state.instanceDir(instanceName, 'minio');\n util.ensureDir(storage, { mode: '0775' });\n\n const minioPort = options?.minioPort ?? 9000;\n const minioConsolePort = options?.minioConsolePort ?? 9001;\n\n const envs = {\n MINIO_IMAGE: image,\n MINIO_STORAGE: path.resolve(storage),\n MINIO_PORT: minioPort.toString(),\n MINIO_CONSOLE_PORT: minioConsolePort.toString(),\n };\n\n return {\n start: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n stop: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n cleanup: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n };\n }\n\n public createDockerS3(\n instanceName: string,\n localRoot: string,\n options?: {\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n\n grpcPort?: number;\n grpcAddr?: string;\n\n presignHost?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n s3Port?: number;\n s3ConsolePort?: number;\n\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker s3\\' mode...');\n\n const composeS3Path = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const presignHost = options?.presignHost ?? 'localhost';\n const presignPort = options?.s3Port ?? 9000;\n\n const primary = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-primary-bucket`);\n if (primary.type !== 'S3') {\n throw new Error('primary storage must have \\'S3\\' type in \\'docker s3\\' configuration');\n } else {\n primary.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const library = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-library-bucket`);\n if (library.type !== 'S3') {\n throw new Error(`${library.type} storage type is not supported for library storage`);\n } else {\n library.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const dbFSPath = storageDir('db');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n composeCfg.render(composeS3Path, composeDstPath, `pl-${instanceName}`, new Map([\n ['minio', {}],\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n }],\n ]));\n\n const envs: NodeJS.ProcessEnv = {\n MINIO_IMAGE: 'quay.io/minio/minio',\n MINIO_STORAGE: storageDir('minio'),\n\n PL_IMAGE: image,\n\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: storageDir('primary'),\n PL_DATA_LIBRARY_ROOT: storageDir('library'),\n PL_DATA_WORKDIR_ROOT: workFSPath,\n\n // Mount packages storage as volume, because APFS is case-insensitive on Mac OS X and this breaks some pl software installation.\n // PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.s3Port) envs.MINIO_PORT = options.s3Port.toString();\n if (options?.s3ConsolePort) envs.MINIO_CONSOLE_PORT = options.s3ConsolePort.toString();\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_NO_AUTH'] = 'false';\n } else {\n envs['PL_NO_AUTH'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createDocker(\n instanceName: string,\n localRoot: string,\n options?: {\n primaryStorageURL?: string;\n workStoragePath?: string;\n libraryStorageURL?: string;\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n grpcPort?: number;\n grpcAddr?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker\\' mode...');\n\n const composeFSPath = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const dbFSPath = storageDir('db');\n const primaryFSPath = storageDir('primary');\n const libraryFSPath = storageDir('library');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n this.logger.debug(`Rendering docker compose file '${composeDstPath}' using '${composeFSPath}' as base template`);\n composeCfg.render(composeFSPath, composeDstPath, `pl-${instanceName}`, new Map([\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n }],\n ]));\n\n const primary = plCfg.storageSettingsFromURL(options?.primaryStorageURL ?? `file:${primaryFSPath}`, '.');\n const library = plCfg.storageSettingsFromURL(options?.libraryStorageURL ?? `file:${libraryFSPath}`, '.');\n\n const envs: NodeJS.ProcessEnv = {\n PL_IMAGE: image,\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: primaryFSPath,\n PL_DATA_LIBRARY_ROOT: libraryFSPath,\n PL_DATA_WORKDIR_ROOT: workFSPath,\n PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_NO_AUTH'] = 'false';\n } else {\n envs['PL_NO_AUTH'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public cleanupInstance(instanceName?: string) {\n const removeWarns: string[] = [];\n const instancesToDrop = new Map<string, instanceInfo>();\n let warnMessage: string = '';\n\n if (instanceName) {\n const instance = state.getInstanceInfo(instanceName);\n instancesToDrop.set(instanceName, instance);\n const iType = instance.type;\n switch (iType) {\n case 'docker':{\n removeWarns.push(`docker service 'pl-${instanceName}', including all its volumes and data in '${state.instanceDir(instanceName)}' will be destroyed`);\n break;\n }\n case 'process':{\n removeWarns.push(`directory '${state.instanceDir(instanceName)}' would be deleted`);\n if (instance.downCommands) {\n removeWarns.push(`associated docker service, including all volumes and data will be destroyed`);\n }\n break;\n }\n default:\n util.assertNever(iType);\n }\n\n if (instanceName === state.currentInstanceName) {\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n );\n }\n\n warnMessage = `\nYou are going to reset the state of platforma service '${instanceName}':\n - ${removeWarns.join('\\n - ')}\n`;\n } else {\n for (const iName of state.instanceList) {\n instancesToDrop.set(iName, state.getInstanceInfo(iName));\n }\n\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n `all service configurations stored in: ${state.instanceDir()} (including all associated docker containers and volumes)`,\n );\n\n warnMessage = `\nYou are going to reset the state of all platforma services configured with pl-bootstrap package.\n - ${removeWarns.join('\\n - ')}\n`;\n }\n\n this.logger.warn(warnMessage);\n if (!util.askYN('Are you sure?')) {\n this.logger.info('Reset action was canceled');\n return;\n }\n\n for (const [name, instance] of instancesToDrop.entries()) {\n if (instance.cleanupCommands.length) {\n this.logger.info(`Wiping instance ${name} services`);\n const result = run.runCommands(this.logger, instance.cleanupCommands);\n checkRunError(result.executed, `failed to wipe instance ${name} services`);\n }\n\n this.logger.info(`Destroying instance '${name}' data directory`);\n fs.rmSync(state.instanceDir(name), { recursive: true, force: true });\n }\n\n if (!instanceName) {\n this.logger.info(`Destroying state dir '${state.path()}'`);\n fs.rmSync(state.path(), { recursive: true, force: true });\n }\n\n this.logger.info(\n `\\nIf you want to remove all downloaded platforma binaries, delete '${state.binaries()}' dir manually\\n`,\n );\n }\n\n public mergeLicenseEnvs(flags: { 'license'?: string; 'license-file'?: string }) {\n if (flags.license === undefined) {\n if ((process.env.MI_LICENSE ?? '') != '') flags.license = process.env.MI_LICENSE;\n else if ((process.env.PL_LICENSE ?? '') != '') flags.license = process.env.PL_LICENSE;\n }\n\n // set 'license-file' only if license is still undefined\n if (flags['license-file'] === undefined && flags.license === undefined) {\n if ((process.env.MI_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.MI_LICENSE_FILE;\n else if ((process.env.PL_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.PL_LICENSE_FILE;\n else if (fs.existsSync(path.resolve(os.homedir(), '.pl.license')))\n flags['license-file'] = path.resolve(os.homedir(), '.pl.license');\n }\n }\n\n public initAuthDriversList(\n flags: {\n 'auth-htpasswd-file'?: string;\n\n 'auth-ldap-server'?: string;\n 'auth-ldap-default-dn'?: string;\n },\n workdir: string,\n ): types.authDriver[] | undefined {\n const authDrivers: types.authDriver[] = [];\n if (flags['auth-htpasswd-file']) {\n authDrivers.push({\n driver: 'htpasswd',\n path: path.resolve(workdir, flags['auth-htpasswd-file']),\n });\n }\n\n if (Boolean(flags['auth-ldap-server']) !== Boolean(flags['auth-ldap-default-dn'])) {\n throw new Error('LDAP auth settings require both \\'server\\' and \\'default DN\\' options to be set');\n }\n\n if (flags['auth-ldap-server']) {\n authDrivers.push({\n driver: 'ldap',\n serverUrl: flags['auth-ldap-server'],\n defaultDN: flags['auth-ldap-default-dn']!,\n });\n }\n\n if (authDrivers.length === 0) {\n return undefined;\n }\n\n return [{ driver: 'jwt', key: this.getLastJwt() }, ...authDrivers] as types.authDriver[];\n }\n\n /** Gets the last stored JWT secret key or generates it and stores in a file. */\n public getLastJwt() {\n const jwtFile = state.path('auth.jwt');\n const encoding = 'utf-8';\n\n let lastJwt = '';\n if (fs.existsSync(jwtFile)) {\n lastJwt = fs.readFileSync(jwtFile, { encoding });\n }\n\n if (lastJwt == '') {\n lastJwt = util.randomStr(64);\n fs.writeFileSync(jwtFile, lastJwt, { encoding });\n }\n\n return lastJwt;\n }\n\n private checkLicense(value?: string, file?: string) {\n if (value !== undefined && value != '') return;\n\n if (file !== undefined && file != '') return;\n\n this.logger.error(`A license for Platforma Backend must be set.\n\nYou can provide the license directly using the '--license' flag\nor use the '--license-file' flag if the license is stored in a file.\n\nAlternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_LICENSE'.\n\nThe license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',\nor stored in '$HOME/.pl.license'.\n\nYou can obtain the license from \"https://licensing.milaboratories.com\".`);\n\n throw new Error(`The license was not provided.`);\n }\n\n private configureDockerStorage(storageID: string, storage: types.storageOptions): NodeJS.ProcessEnv {\n const envs: NodeJS.ProcessEnv = {};\n const sType = storage.type;\n storageID = storageID.toUpperCase();\n\n switch (sType) {\n case 'S3':\n switch (storageID) {\n case 'PRIMARY': {\n // Construct the S3 URL for primary storage\n if (storage.endpoint && storage.bucketName) {\n envs['PL_PRIMARY_STORAGE_S3'] = `${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs['PL_PRIMARY_STORAGE_S3_ENDPOINT'] = storage.endpoint;\n if (storage.presignEndpoint) envs['PL_PRIMARY_STORAGE_S3_EXTERNAL_ENDPOINT'] = storage.presignEndpoint;\n if (storage.region) envs['PL_PRIMARY_STORAGE_S3_REGION'] = storage.region;\n if (storage.key) envs['PL_PRIMARY_STORAGE_S3_KEY'] = storage.key;\n if (storage.secret) envs['PL_PRIMARY_STORAGE_S3_SECRET'] = storage.secret;\n break;\n }\n case 'LIBRARY': {\n // Construct the S3 URL for library storage\n if (storage.endpoint && storage.bucketName) {\n envs['PL_DATA_LIBRARY_S3_URL'] = `library=${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs['PL_DATA_LIBRARY_S3_ENDPOINT'] = `library=${storage.endpoint}`;\n if (storage.presignEndpoint) envs['PL_DATA_LIBRARY_S3_EXTERNAL_ENDPOINT'] = `library=${storage.presignEndpoint}`;\n if (storage.region) envs['PL_DATA_LIBRARY_S3_REGION'] = `library=${storage.region}`;\n if (storage.key) envs['PL_DATA_LIBRARY_S3_KEY'] = `library=${storage.key}`;\n if (storage.secret) envs['PL_DATA_LIBRARY_S3_SECRET'] = `library=${storage.secret}`;\n break;\n }\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n case 'FS':\n switch (storageID) {\n case 'PRIMARY':\n if (storage.rootPath) envs['PL_PRIMARY_STORAGE_FS'] = storage.rootPath;\n break;\n case 'LIBRARY':\n if (storage.rootPath) envs['PL_DATA_LIBRARY_FS_PATH'] = storage.rootPath;\n break;\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n\n default:\n util.assertNever(sType);\n }\n\n return {};\n }\n\n private renderRunInfo(\n runInfo: {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n },\n indent: number = 10,\n ) {\n const report: string[] = [];\n\n const column = (t: string) => t.padStart(indent, ' ');\n if (runInfo.configPath) {\n report.push(`${column('config')}: ${runInfo.configPath}`);\n }\n\n if (runInfo.apiAddr) {\n report.push(`${column('API')}: ${runInfo.apiAddr}`);\n } else if (runInfo.apiPort) {\n report.push(`${column('API')}: 127.0.0.1:${runInfo.apiPort.toString()}`);\n } else {\n report.push(`${column('API')}: 127.0.0.1:6345`);\n }\n\n if (runInfo.logPath) {\n report.push(`${column('log')}: ${runInfo.logPath}`);\n }\n\n const primaryType = runInfo.primary?.type;\n switch (primaryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('primary')}: ${runInfo.primary!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('primary')}: S3 at '${runInfo.primary!.endpoint ?? 'AWS'}', bucket '${runInfo.primary!.bucketName!}', prefix: '${runInfo.primary!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(primaryType);\n }\n\n const libraryType = runInfo.library?.type;\n switch (libraryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('library')}: ${runInfo.library!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('library')}: S3 at '${runInfo.library!.endpoint ?? 'AWS'}', bucket '${runInfo.library!.bucketName!}', prefix: '${runInfo.library!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(libraryType);\n }\n\n if (runInfo.work) {\n report.push(`${column('workdirs')}: ${runInfo.work.rootPath}`);\n }\n\n if (runInfo.dbPath) {\n report.push(`${column('db')}: ${runInfo.dbPath}`);\n }\n\n return report.join('\\n');\n }\n}\n\nexport function checkRunError(result: SpawnSyncReturns<Buffer>[], message?: string) {\n for (const buffer of result) {\n if (buffer.error) {\n throw buffer.error;\n }\n\n const msg = message ?? 'failed to run command';\n\n if (buffer.status !== 0) {\n throw new Error(`${msg}, process exited with code '${buffer.status}'`);\n }\n }\n}\n\nexport type createLocalOptions = {\n version?: string;\n sourcesPath?: string;\n binaryPath?: string;\n configPath?: string;\n configOptions?: plCfg.plOptions;\n workdir?: string;\n\n primaryURL?: string;\n libraryURL?: string;\n\n backendCommands?: string[];\n};\n\nexport type createLocalFSOptions = createLocalOptions;\n\nexport type createLocalS3Options = createLocalOptions & {\n minioPort?: number;\n minioConsolePort?: number;\n};\n"],"names":["run.runCommands","util.assertNever","platforma.binaryPath","plCfg.storageSettingsFromURL","plCfg.loadDefaults","pkg.assets","plCfg.render","composeCfg.render","util.ensureDir","pkg.plImageTag","util.askYN","util.randomStr"],"mappings":"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"}
1
+ {"version":3,"file":"core.cjs","sources":["../src/core.ts"],"sourcesContent":["import type { ChildProcess, SpawnSyncReturns } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport * as pkg from './package';\nimport * as run from './run';\nimport * as composeCfg from './templates/compose';\nimport * as plCfg from './templates/pl-config';\nimport type * as types from './templates/types';\nimport * as platforma from './platforma';\nimport type { instanceInfo, instanceCommand } from './state';\nimport state from './state';\nimport * as util from './util';\nimport type winston from 'winston';\n\nexport default class Core {\n constructor(private readonly logger: winston.Logger) { }\n\n public startLast(): ChildProcess[] {\n const instance = state.currentInstance;\n if (!instance) {\n this.logger.error('failed to bring back Platforma Backend in the last started configuration: no last configuration found');\n throw new Error('no previous run info found');\n }\n\n return this.startInstance(instance);\n }\n\n public startInstance(instance: instanceInfo): ChildProcess[] {\n if (instance.runInfo) {\n const runInfo = this.renderRunInfo(instance.runInfo);\n this.logger.info(`Starting platforma backend instance '${instance.name}':\\n${runInfo}`);\n }\n\n const result = run.runCommands(\n this.logger,\n instance.upCommands,\n );\n checkRunError(result.executed);\n\n if (result.spawned.length > 0 && instance.type === 'process') {\n instance.pid = result.spawned[result.spawned.length - 1].pid;\n state.setInstanceInfo(instance.name, instance);\n this.logger.info(`instance '${instance.name}' started`);\n }\n\n state.currentInstanceName = instance.name;\n\n return result.spawned;\n }\n\n public stopInstance(instance: instanceInfo) {\n this.logger.info(`stopping platforma backend instance '${instance.name}'...`);\n const result = run.runCommands(this.logger, instance.downCommands);\n checkRunError(result.executed);\n\n const iType = instance.type;\n switch (iType) {\n case 'docker': {\n return;\n }\n\n case 'process': {\n if (instance.pid && state.isInstanceActive(instance)) {\n process.kill(instance.pid);\n }\n\n return;\n }\n default:\n util.assertNever(iType);\n }\n }\n\n public switchInstance(instance: instanceInfo): ChildProcess[] {\n // Stop all other active instances before switching to new one;\n for (const iName of state.instanceList) {\n if (iName !== instance.name) {\n const iToStop = state.getInstanceInfo(iName);\n if (state.isInstanceActive(iToStop)) {\n this.stopInstance(iToStop);\n }\n }\n }\n\n return this.startInstance(instance);\n }\n\n public createLocal(instanceName: string, options?: createLocalOptions): instanceInfo {\n let plBinaryPath = platforma.binaryPath(options?.version, 'binaries', 'platforma');\n if (options?.sourcesPath) {\n plBinaryPath = path.join(os.tmpdir(), 'platforma-custom-build');\n }\n if (options?.binaryPath) {\n plBinaryPath = options.binaryPath;\n }\n\n let configPath = options?.configPath;\n const workdir: string = options?.workdir ?? (configPath ? process.cwd() : state.instanceDir(instanceName));\n\n if (options?.primaryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n primary: plCfg.storageSettingsFromURL(options.primaryURL, workdir, options.configOptions?.storages?.primary),\n },\n };\n }\n if (options?.libraryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n library: plCfg.storageSettingsFromURL(options.libraryURL, workdir, options.configOptions?.storages?.library),\n },\n };\n }\n\n const configOptions = plCfg.loadDefaults(this.getLastJwt(), options?.configOptions);\n\n this.logger.debug(` checking license...`);\n this.checkLicense(options?.configOptions?.license?.value, options?.configOptions?.license?.file);\n\n const storageDirs: string[] = [\n `${configOptions.localRoot}/packages`,\n `${configOptions.localRoot}/packages-local`,\n `${configOptions.localRoot}/blocks-local`,\n ];\n if (configOptions.storages.primary.type === 'FS') {\n storageDirs.push(configOptions.storages.primary.rootPath);\n }\n if (configOptions.storages.library.type === 'FS') {\n storageDirs.push(configOptions.storages.library.rootPath);\n configOptions.hacks.libraryDownloadable = false;\n }\n if (configOptions.storages.work.type === 'FS') {\n storageDirs.push(configOptions.storages.work.rootPath);\n }\n\n this.logger.debug(' creating pl state directories...');\n for (const dir of storageDirs) {\n if (!fs.existsSync(dir)) {\n this.logger.debug(` '${dir}'`);\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n\n for (const drv of configOptions.core.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n if (!fs.existsSync(drv.path)) {\n this.logger.debug(` installing default 'users.htpasswd' to ${drv.path}...`);\n fs.copyFileSync(pkg.assets('users.htpasswd'), drv.path);\n }\n }\n }\n\n if (!configPath) {\n configPath = path.join(configOptions.localRoot, 'config.yaml');\n this.logger.debug(` rendering configuration '${configPath}'...`);\n fs.writeFileSync(configPath, plCfg.render(configOptions));\n }\n\n const upCommands: instanceCommand[] = [];\n if (options?.sourcesPath) {\n upCommands.push({\n cmd: 'go',\n args: ['build', '-o', plBinaryPath, '.'],\n workdir: path.resolve(options.sourcesPath, 'cmd', 'platforma'),\n runOpts: {\n stdio: 'inherit',\n },\n });\n }\n\n const runBinary: instanceCommand = {\n async: true,\n cmd: plBinaryPath,\n args: ['--quiet', '--config', configPath],\n workdir: workdir,\n runOpts: {\n stdio: 'inherit',\n },\n };\n\n if (options?.configOptions?.numCpu) {\n runBinary.runOpts.env = {\n GOMAXPROCS: String(options?.configOptions?.numCpu),\n };\n }\n\n // Process additional environment variables from CLI options\n if (options?.backendCommands) {\n if (!runBinary.runOpts.env) {\n runBinary.runOpts.env = {};\n }\n for (const cmd of options.backendCommands) {\n const equalIndex = cmd.indexOf('=');\n if (equalIndex > 0) {\n const key = cmd.substring(0, equalIndex);\n const value = cmd.substring(equalIndex + 1);\n runBinary.runOpts.env[key] = value;\n } else {\n this.logger.warn(`Invalid environment variable format: ${cmd}. Expected format: KEY=VALUE`);\n }\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n // Add commands as arguments to the binary\n runBinary.args = [...runBinary.args, ...options.backendCommands];\n }\n\n upCommands.push(runBinary);\n\n state.setInstanceInfo(instanceName, {\n type: 'process',\n upCommands: upCommands,\n downCommands: [],\n cleanupCommands: [],\n runInfo: {\n configPath,\n dbPath: configOptions.core.db.path,\n apiAddr: configOptions.grpc.listen,\n logPath: configOptions.log.path,\n primary: configOptions.storages.primary,\n work: configOptions.storages.work,\n library: configOptions.storages.library,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createLocalS3(instanceName: string, options?: createLocalS3Options): instanceInfo {\n this.logger.debug('creating platforma instance in \\'local s3\\' mode...');\n\n const minioPort = options?.minioPort ?? 9000;\n\n const instance = this.createLocal(instanceName, {\n ...options,\n primaryURL: options?.primaryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-primary-bucket/?region=no-region`,\n libraryURL: options?.libraryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-library-bucket/?region=no-region`,\n });\n\n const localRoot = options?.configOptions?.localRoot;\n const minioRunCmd = this.createMinio(instanceName, {\n minioPort: minioPort,\n minioConsolePort: options?.minioConsolePort,\n storage: localRoot ? path.join(localRoot, 'minio') : undefined,\n });\n\n instance.upCommands = [\n minioRunCmd.start,\n ...instance.upCommands,\n ];\n\n instance.downCommands = [\n minioRunCmd.stop,\n ...instance.downCommands,\n ];\n\n instance.cleanupCommands = [\n minioRunCmd.cleanup,\n ...instance.cleanupCommands,\n ];\n\n state.setInstanceInfo(instanceName, instance);\n return instance;\n }\n\n public createMinio(\n instanceName: string,\n options?: {\n image?: string;\n version?: string;\n minioPort?: number;\n minioConsolePort?: number;\n storage?: string;\n }): {\n start: instanceCommand;\n stop: instanceCommand;\n cleanup: instanceCommand;\n } {\n this.logger.debug(' creating docker compose for minio service...');\n const composeSrc = pkg.assets('compose-backend.yaml');\n const composeMinio = state.instanceDir(instanceName, 'compose-minio.yaml');\n\n composeCfg.render(composeSrc, composeMinio, `pl-${instanceName}-minio`,\n new Map([\n ['minio', {}],\n ]),\n { dropVolumes: true },\n );\n\n const version = options?.version ? `:${options.version}` : '';\n this.logger.debug(` minio version: ${version}`);\n const image = options?.image ?? `quay.io/minio/minio${version}`;\n this.logger.debug(` minio image: ${image}`);\n\n const storage = options?.storage ?? state.instanceDir(instanceName, 'minio');\n util.ensureDir(storage, { mode: '0775' });\n\n const minioPort = options?.minioPort ?? 9000;\n const minioConsolePort = options?.minioConsolePort ?? 9001;\n\n const envs = {\n MINIO_IMAGE: image,\n MINIO_STORAGE: path.resolve(storage),\n MINIO_PORT: minioPort.toString(),\n MINIO_CONSOLE_PORT: minioConsolePort.toString(),\n };\n\n return {\n start: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n stop: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n cleanup: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n };\n }\n\n public createDockerS3(\n instanceName: string,\n localRoot: string,\n options?: {\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n\n grpcPort?: number;\n grpcAddr?: string;\n\n presignHost?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n s3Port?: number;\n s3ConsolePort?: number;\n\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker s3\\' mode...');\n\n const composeS3Path = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const presignHost = options?.presignHost ?? 'localhost';\n const presignPort = options?.s3Port ?? 9000;\n\n const primary = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-primary-bucket`);\n if (primary.type !== 'S3') {\n throw new Error('primary storage must have \\'S3\\' type in \\'docker s3\\' configuration');\n } else {\n primary.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const library = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-library-bucket`);\n if (library.type !== 'S3') {\n throw new Error(`${library.type} storage type is not supported for library storage`);\n } else {\n library.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const dbFSPath = storageDir('db');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n composeCfg.render(composeS3Path, composeDstPath, `pl-${instanceName}`, new Map([\n ['minio', {}],\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n }],\n ]));\n\n const envs: NodeJS.ProcessEnv = {\n MINIO_IMAGE: 'quay.io/minio/minio',\n MINIO_STORAGE: storageDir('minio'),\n\n PL_IMAGE: image,\n\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: storageDir('primary'),\n PL_DATA_LIBRARY_ROOT: storageDir('library'),\n PL_DATA_WORKDIR_ROOT: workFSPath,\n\n // Mount packages storage as volume, because APFS is case-insensitive on Mac OS X and this breaks some pl software installation.\n // PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.s3Port) envs.MINIO_PORT = options.s3Port.toString();\n if (options?.s3ConsolePort) envs.MINIO_CONSOLE_PORT = options.s3ConsolePort.toString();\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_NO_AUTH'] = 'false';\n } else {\n envs['PL_NO_AUTH'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createDocker(\n instanceName: string,\n localRoot: string,\n options?: {\n primaryStorageURL?: string;\n workStoragePath?: string;\n libraryStorageURL?: string;\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n grpcPort?: number;\n grpcAddr?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker\\' mode...');\n\n const composeFSPath = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const dbFSPath = storageDir('db');\n const primaryFSPath = storageDir('primary');\n const libraryFSPath = storageDir('library');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n this.logger.debug(`Rendering docker compose file '${composeDstPath}' using '${composeFSPath}' as base template`);\n composeCfg.render(composeFSPath, composeDstPath, `pl-${instanceName}`, new Map([\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n }],\n ]));\n\n const primary = plCfg.storageSettingsFromURL(options?.primaryStorageURL ?? `file:${primaryFSPath}`, '.');\n const library = plCfg.storageSettingsFromURL(options?.libraryStorageURL ?? `file:${libraryFSPath}`, '.');\n\n const envs: NodeJS.ProcessEnv = {\n PL_IMAGE: image,\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: primaryFSPath,\n PL_DATA_LIBRARY_ROOT: libraryFSPath,\n PL_DATA_WORKDIR_ROOT: workFSPath,\n PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_NO_AUTH'] = 'false';\n } else {\n envs['PL_NO_AUTH'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public cleanupInstance(instanceName?: string) {\n const removeWarns: string[] = [];\n const instancesToDrop = new Map<string, instanceInfo>();\n let warnMessage: string = '';\n\n if (instanceName) {\n const instance = state.getInstanceInfo(instanceName);\n instancesToDrop.set(instanceName, instance);\n const iType = instance.type;\n switch (iType) {\n case 'docker':{\n removeWarns.push(`docker service 'pl-${instanceName}', including all its volumes and data in '${state.instanceDir(instanceName)}' will be destroyed`);\n break;\n }\n case 'process':{\n removeWarns.push(`directory '${state.instanceDir(instanceName)}' would be deleted`);\n if (instance.downCommands) {\n removeWarns.push(`associated docker service, including all volumes and data will be destroyed`);\n }\n break;\n }\n default:\n util.assertNever(iType);\n }\n\n if (instanceName === state.currentInstanceName) {\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n );\n }\n\n warnMessage = `\nYou are going to reset the state of platforma service '${instanceName}':\n - ${removeWarns.join('\\n - ')}\n`;\n } else {\n for (const iName of state.instanceList) {\n instancesToDrop.set(iName, state.getInstanceInfo(iName));\n }\n\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n `all service configurations stored in: ${state.instanceDir()} (including all associated docker containers and volumes)`,\n );\n\n warnMessage = `\nYou are going to reset the state of all platforma services configured with pl-bootstrap package.\n - ${removeWarns.join('\\n - ')}\n`;\n }\n\n this.logger.warn(warnMessage);\n if (!util.askYN('Are you sure?')) {\n this.logger.info('Reset action was canceled');\n return;\n }\n\n for (const [name, instance] of instancesToDrop.entries()) {\n if (instance.cleanupCommands.length) {\n this.logger.info(`Wiping instance ${name} services`);\n const result = run.runCommands(this.logger, instance.cleanupCommands);\n checkRunError(result.executed, `failed to wipe instance ${name} services`);\n }\n\n this.logger.info(`Destroying instance '${name}' data directory`);\n fs.rmSync(state.instanceDir(name), { recursive: true, force: true });\n }\n\n if (!instanceName) {\n this.logger.info(`Destroying state dir '${state.path()}'`);\n fs.rmSync(state.path(), { recursive: true, force: true });\n }\n\n this.logger.info(\n `\\nIf you want to remove all downloaded platforma binaries, delete '${state.binaries()}' dir manually\\n`,\n );\n }\n\n public mergeLicenseEnvs(flags: { 'license'?: string; 'license-file'?: string }) {\n if (flags.license === undefined) {\n if ((process.env.MI_LICENSE ?? '') != '') flags.license = process.env.MI_LICENSE;\n else if ((process.env.PL_LICENSE ?? '') != '') flags.license = process.env.PL_LICENSE;\n }\n\n // set 'license-file' only if license is still undefined\n if (flags['license-file'] === undefined && flags.license === undefined) {\n if ((process.env.MI_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.MI_LICENSE_FILE;\n else if ((process.env.PL_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.PL_LICENSE_FILE;\n else if (fs.existsSync(path.resolve(os.homedir(), '.pl.license')))\n flags['license-file'] = path.resolve(os.homedir(), '.pl.license');\n }\n }\n\n public initAuthDriversList(\n flags: {\n 'auth-htpasswd-file'?: string;\n\n 'auth-ldap-server'?: string;\n 'auth-ldap-default-dn'?: string;\n },\n workdir: string,\n ): types.authDriver[] | undefined {\n const authDrivers: types.authDriver[] = [];\n if (flags['auth-htpasswd-file']) {\n authDrivers.push({\n driver: 'htpasswd',\n path: path.resolve(workdir, flags['auth-htpasswd-file']),\n });\n }\n\n if (Boolean(flags['auth-ldap-server']) !== Boolean(flags['auth-ldap-default-dn'])) {\n throw new Error('LDAP auth settings require both \\'server\\' and \\'default DN\\' options to be set');\n }\n\n if (flags['auth-ldap-server']) {\n authDrivers.push({\n driver: 'ldap',\n serverUrl: flags['auth-ldap-server'],\n defaultDN: flags['auth-ldap-default-dn']!,\n });\n }\n\n if (authDrivers.length === 0) {\n return undefined;\n }\n\n return [{ driver: 'jwt', key: this.getLastJwt() }, ...authDrivers] as types.authDriver[];\n }\n\n /** Gets the last stored JWT secret key or generates it and stores in a file. */\n public getLastJwt() {\n const jwtFile = state.path('auth.jwt');\n const encoding = 'utf-8';\n\n let lastJwt = '';\n if (fs.existsSync(jwtFile)) {\n lastJwt = fs.readFileSync(jwtFile, { encoding });\n }\n\n if (lastJwt == '') {\n lastJwt = util.randomStr(64);\n fs.writeFileSync(jwtFile, lastJwt, { encoding });\n }\n\n return lastJwt;\n }\n\n private checkLicense(value?: string, file?: string) {\n if (value !== undefined && value != '') return;\n\n if (file !== undefined && file != '') return;\n\n this.logger.error(`A license for Platforma Backend must be set.\n\nYou can provide the license directly using the '--license' flag\nor use the '--license-file' flag if the license is stored in a file.\n\nAlternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_LICENSE'.\n\nThe license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',\nor stored in '$HOME/.pl.license'.\n\nYou can obtain the license from \"https://platforma.bio/getlicense\".`);\n\n throw new Error(`The license was not provided.`);\n }\n\n private configureDockerStorage(storageID: string, storage: types.storageOptions): NodeJS.ProcessEnv {\n const envs: NodeJS.ProcessEnv = {};\n const sType = storage.type;\n storageID = storageID.toUpperCase();\n\n switch (sType) {\n case 'S3':\n switch (storageID) {\n case 'PRIMARY': {\n // Construct the S3 URL for primary storage\n if (storage.endpoint && storage.bucketName) {\n envs['PL_PRIMARY_STORAGE_S3'] = `${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs['PL_PRIMARY_STORAGE_S3_ENDPOINT'] = storage.endpoint;\n if (storage.presignEndpoint) envs['PL_PRIMARY_STORAGE_S3_EXTERNAL_ENDPOINT'] = storage.presignEndpoint;\n if (storage.region) envs['PL_PRIMARY_STORAGE_S3_REGION'] = storage.region;\n if (storage.key) envs['PL_PRIMARY_STORAGE_S3_KEY'] = storage.key;\n if (storage.secret) envs['PL_PRIMARY_STORAGE_S3_SECRET'] = storage.secret;\n break;\n }\n case 'LIBRARY': {\n // Construct the S3 URL for library storage\n if (storage.endpoint && storage.bucketName) {\n envs['PL_DATA_LIBRARY_S3_URL'] = `library=${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs['PL_DATA_LIBRARY_S3_ENDPOINT'] = `library=${storage.endpoint}`;\n if (storage.presignEndpoint) envs['PL_DATA_LIBRARY_S3_EXTERNAL_ENDPOINT'] = `library=${storage.presignEndpoint}`;\n if (storage.region) envs['PL_DATA_LIBRARY_S3_REGION'] = `library=${storage.region}`;\n if (storage.key) envs['PL_DATA_LIBRARY_S3_KEY'] = `library=${storage.key}`;\n if (storage.secret) envs['PL_DATA_LIBRARY_S3_SECRET'] = `library=${storage.secret}`;\n break;\n }\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n case 'FS':\n switch (storageID) {\n case 'PRIMARY':\n if (storage.rootPath) envs['PL_PRIMARY_STORAGE_FS'] = storage.rootPath;\n break;\n case 'LIBRARY':\n if (storage.rootPath) envs['PL_DATA_LIBRARY_FS_PATH'] = storage.rootPath;\n break;\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n\n default:\n util.assertNever(sType);\n }\n\n return {};\n }\n\n private renderRunInfo(\n runInfo: {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n },\n indent: number = 10,\n ) {\n const report: string[] = [];\n\n const column = (t: string) => t.padStart(indent, ' ');\n if (runInfo.configPath) {\n report.push(`${column('config')}: ${runInfo.configPath}`);\n }\n\n if (runInfo.apiAddr) {\n report.push(`${column('API')}: ${runInfo.apiAddr}`);\n } else if (runInfo.apiPort) {\n report.push(`${column('API')}: 127.0.0.1:${runInfo.apiPort.toString()}`);\n } else {\n report.push(`${column('API')}: 127.0.0.1:6345`);\n }\n\n if (runInfo.logPath) {\n report.push(`${column('log')}: ${runInfo.logPath}`);\n }\n\n const primaryType = runInfo.primary?.type;\n switch (primaryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('primary')}: ${runInfo.primary!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('primary')}: S3 at '${runInfo.primary!.endpoint ?? 'AWS'}', bucket '${runInfo.primary!.bucketName!}', prefix: '${runInfo.primary!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(primaryType);\n }\n\n const libraryType = runInfo.library?.type;\n switch (libraryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('library')}: ${runInfo.library!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('library')}: S3 at '${runInfo.library!.endpoint ?? 'AWS'}', bucket '${runInfo.library!.bucketName!}', prefix: '${runInfo.library!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(libraryType);\n }\n\n if (runInfo.work) {\n report.push(`${column('workdirs')}: ${runInfo.work.rootPath}`);\n }\n\n if (runInfo.dbPath) {\n report.push(`${column('db')}: ${runInfo.dbPath}`);\n }\n\n return report.join('\\n');\n }\n}\n\nexport function checkRunError(result: SpawnSyncReturns<Buffer>[], message?: string) {\n for (const buffer of result) {\n if (buffer.error) {\n throw buffer.error;\n }\n\n const msg = message ?? 'failed to run command';\n\n if (buffer.status !== 0) {\n throw new Error(`${msg}, process exited with code '${buffer.status}'`);\n }\n }\n}\n\nexport type createLocalOptions = {\n version?: string;\n sourcesPath?: string;\n binaryPath?: string;\n configPath?: string;\n configOptions?: plCfg.plOptions;\n workdir?: string;\n\n primaryURL?: string;\n libraryURL?: string;\n\n backendCommands?: string[];\n};\n\nexport type createLocalFSOptions = createLocalOptions;\n\nexport type createLocalS3Options = createLocalOptions & {\n minioPort?: number;\n minioConsolePort?: number;\n};\n"],"names":["run.runCommands","util.assertNever","platforma.binaryPath","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/core.js CHANGED
@@ -731,7 +731,7 @@ Alternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_
731
731
  The license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',
732
732
  or stored in '$HOME/.pl.license'.
733
733
 
734
- You can obtain the license from "https://licensing.milaboratories.com".`);
734
+ You can obtain the license from "https://platforma.bio/getlicense".`);
735
735
  throw new Error(`The license was not provided.`);
736
736
  }
737
737
  configureDockerStorage(storageID, storage) {
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sources":["../src/core.ts"],"sourcesContent":["import type { ChildProcess, SpawnSyncReturns } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport * as pkg from './package';\nimport * as run from './run';\nimport * as composeCfg from './templates/compose';\nimport * as plCfg from './templates/pl-config';\nimport type * as types from './templates/types';\nimport * as platforma from './platforma';\nimport type { instanceInfo, instanceCommand } from './state';\nimport state from './state';\nimport * as util from './util';\nimport type winston from 'winston';\n\nexport default class Core {\n constructor(private readonly logger: winston.Logger) { }\n\n public startLast(): ChildProcess[] {\n const instance = state.currentInstance;\n if (!instance) {\n this.logger.error('failed to bring back Platforma Backend in the last started configuration: no last configuration found');\n throw new Error('no previous run info found');\n }\n\n return this.startInstance(instance);\n }\n\n public startInstance(instance: instanceInfo): ChildProcess[] {\n if (instance.runInfo) {\n const runInfo = this.renderRunInfo(instance.runInfo);\n this.logger.info(`Starting platforma backend instance '${instance.name}':\\n${runInfo}`);\n }\n\n const result = run.runCommands(\n this.logger,\n instance.upCommands,\n );\n checkRunError(result.executed);\n\n if (result.spawned.length > 0 && instance.type === 'process') {\n instance.pid = result.spawned[result.spawned.length - 1].pid;\n state.setInstanceInfo(instance.name, instance);\n this.logger.info(`instance '${instance.name}' started`);\n }\n\n state.currentInstanceName = instance.name;\n\n return result.spawned;\n }\n\n public stopInstance(instance: instanceInfo) {\n this.logger.info(`stopping platforma backend instance '${instance.name}'...`);\n const result = run.runCommands(this.logger, instance.downCommands);\n checkRunError(result.executed);\n\n const iType = instance.type;\n switch (iType) {\n case 'docker': {\n return;\n }\n\n case 'process': {\n if (instance.pid && state.isInstanceActive(instance)) {\n process.kill(instance.pid);\n }\n\n return;\n }\n default:\n util.assertNever(iType);\n }\n }\n\n public switchInstance(instance: instanceInfo): ChildProcess[] {\n // Stop all other active instances before switching to new one;\n for (const iName of state.instanceList) {\n if (iName !== instance.name) {\n const iToStop = state.getInstanceInfo(iName);\n if (state.isInstanceActive(iToStop)) {\n this.stopInstance(iToStop);\n }\n }\n }\n\n return this.startInstance(instance);\n }\n\n public createLocal(instanceName: string, options?: createLocalOptions): instanceInfo {\n let plBinaryPath = platforma.binaryPath(options?.version, 'binaries', 'platforma');\n if (options?.sourcesPath) {\n plBinaryPath = path.join(os.tmpdir(), 'platforma-custom-build');\n }\n if (options?.binaryPath) {\n plBinaryPath = options.binaryPath;\n }\n\n let configPath = options?.configPath;\n const workdir: string = options?.workdir ?? (configPath ? process.cwd() : state.instanceDir(instanceName));\n\n if (options?.primaryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n primary: plCfg.storageSettingsFromURL(options.primaryURL, workdir, options.configOptions?.storages?.primary),\n },\n };\n }\n if (options?.libraryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n library: plCfg.storageSettingsFromURL(options.libraryURL, workdir, options.configOptions?.storages?.library),\n },\n };\n }\n\n const configOptions = plCfg.loadDefaults(this.getLastJwt(), options?.configOptions);\n\n this.logger.debug(` checking license...`);\n this.checkLicense(options?.configOptions?.license?.value, options?.configOptions?.license?.file);\n\n const storageDirs: string[] = [\n `${configOptions.localRoot}/packages`,\n `${configOptions.localRoot}/packages-local`,\n `${configOptions.localRoot}/blocks-local`,\n ];\n if (configOptions.storages.primary.type === 'FS') {\n storageDirs.push(configOptions.storages.primary.rootPath);\n }\n if (configOptions.storages.library.type === 'FS') {\n storageDirs.push(configOptions.storages.library.rootPath);\n configOptions.hacks.libraryDownloadable = false;\n }\n if (configOptions.storages.work.type === 'FS') {\n storageDirs.push(configOptions.storages.work.rootPath);\n }\n\n this.logger.debug(' creating pl state directories...');\n for (const dir of storageDirs) {\n if (!fs.existsSync(dir)) {\n this.logger.debug(` '${dir}'`);\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n\n for (const drv of configOptions.core.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n if (!fs.existsSync(drv.path)) {\n this.logger.debug(` installing default 'users.htpasswd' to ${drv.path}...`);\n fs.copyFileSync(pkg.assets('users.htpasswd'), drv.path);\n }\n }\n }\n\n if (!configPath) {\n configPath = path.join(configOptions.localRoot, 'config.yaml');\n this.logger.debug(` rendering configuration '${configPath}'...`);\n fs.writeFileSync(configPath, plCfg.render(configOptions));\n }\n\n const upCommands: instanceCommand[] = [];\n if (options?.sourcesPath) {\n upCommands.push({\n cmd: 'go',\n args: ['build', '-o', plBinaryPath, '.'],\n workdir: path.resolve(options.sourcesPath, 'cmd', 'platforma'),\n runOpts: {\n stdio: 'inherit',\n },\n });\n }\n\n const runBinary: instanceCommand = {\n async: true,\n cmd: plBinaryPath,\n args: ['--quiet', '--config', configPath],\n workdir: workdir,\n runOpts: {\n stdio: 'inherit',\n },\n };\n\n if (options?.configOptions?.numCpu) {\n runBinary.runOpts.env = {\n GOMAXPROCS: String(options?.configOptions?.numCpu),\n };\n }\n\n // Process additional environment variables from CLI options\n if (options?.backendCommands) {\n if (!runBinary.runOpts.env) {\n runBinary.runOpts.env = {};\n }\n for (const cmd of options.backendCommands) {\n const equalIndex = cmd.indexOf('=');\n if (equalIndex > 0) {\n const key = cmd.substring(0, equalIndex);\n const value = cmd.substring(equalIndex + 1);\n runBinary.runOpts.env[key] = value;\n } else {\n this.logger.warn(`Invalid environment variable format: ${cmd}. Expected format: KEY=VALUE`);\n }\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n // Add commands as arguments to the binary\n runBinary.args = [...runBinary.args, ...options.backendCommands];\n }\n\n upCommands.push(runBinary);\n\n state.setInstanceInfo(instanceName, {\n type: 'process',\n upCommands: upCommands,\n downCommands: [],\n cleanupCommands: [],\n runInfo: {\n configPath,\n dbPath: configOptions.core.db.path,\n apiAddr: configOptions.grpc.listen,\n logPath: configOptions.log.path,\n primary: configOptions.storages.primary,\n work: configOptions.storages.work,\n library: configOptions.storages.library,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createLocalS3(instanceName: string, options?: createLocalS3Options): instanceInfo {\n this.logger.debug('creating platforma instance in \\'local s3\\' mode...');\n\n const minioPort = options?.minioPort ?? 9000;\n\n const instance = this.createLocal(instanceName, {\n ...options,\n primaryURL: options?.primaryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-primary-bucket/?region=no-region`,\n libraryURL: options?.libraryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-library-bucket/?region=no-region`,\n });\n\n const localRoot = options?.configOptions?.localRoot;\n const minioRunCmd = this.createMinio(instanceName, {\n minioPort: minioPort,\n minioConsolePort: options?.minioConsolePort,\n storage: localRoot ? path.join(localRoot, 'minio') : undefined,\n });\n\n instance.upCommands = [\n minioRunCmd.start,\n ...instance.upCommands,\n ];\n\n instance.downCommands = [\n minioRunCmd.stop,\n ...instance.downCommands,\n ];\n\n instance.cleanupCommands = [\n minioRunCmd.cleanup,\n ...instance.cleanupCommands,\n ];\n\n state.setInstanceInfo(instanceName, instance);\n return instance;\n }\n\n public createMinio(\n instanceName: string,\n options?: {\n image?: string;\n version?: string;\n minioPort?: number;\n minioConsolePort?: number;\n storage?: string;\n }): {\n start: instanceCommand;\n stop: instanceCommand;\n cleanup: instanceCommand;\n } {\n this.logger.debug(' creating docker compose for minio service...');\n const composeSrc = pkg.assets('compose-backend.yaml');\n const composeMinio = state.instanceDir(instanceName, 'compose-minio.yaml');\n\n composeCfg.render(composeSrc, composeMinio, `pl-${instanceName}-minio`,\n new Map([\n ['minio', {}],\n ]),\n { dropVolumes: true },\n );\n\n const version = options?.version ? `:${options.version}` : '';\n this.logger.debug(` minio version: ${version}`);\n const image = options?.image ?? `quay.io/minio/minio${version}`;\n this.logger.debug(` minio image: ${image}`);\n\n const storage = options?.storage ?? state.instanceDir(instanceName, 'minio');\n util.ensureDir(storage, { mode: '0775' });\n\n const minioPort = options?.minioPort ?? 9000;\n const minioConsolePort = options?.minioConsolePort ?? 9001;\n\n const envs = {\n MINIO_IMAGE: image,\n MINIO_STORAGE: path.resolve(storage),\n MINIO_PORT: minioPort.toString(),\n MINIO_CONSOLE_PORT: minioConsolePort.toString(),\n };\n\n return {\n start: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n stop: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n cleanup: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n };\n }\n\n public createDockerS3(\n instanceName: string,\n localRoot: string,\n options?: {\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n\n grpcPort?: number;\n grpcAddr?: string;\n\n presignHost?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n s3Port?: number;\n s3ConsolePort?: number;\n\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker s3\\' mode...');\n\n const composeS3Path = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const presignHost = options?.presignHost ?? 'localhost';\n const presignPort = options?.s3Port ?? 9000;\n\n const primary = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-primary-bucket`);\n if (primary.type !== 'S3') {\n throw new Error('primary storage must have \\'S3\\' type in \\'docker s3\\' configuration');\n } else {\n primary.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const library = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-library-bucket`);\n if (library.type !== 'S3') {\n throw new Error(`${library.type} storage type is not supported for library storage`);\n } else {\n library.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const dbFSPath = storageDir('db');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n composeCfg.render(composeS3Path, composeDstPath, `pl-${instanceName}`, new Map([\n ['minio', {}],\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n }],\n ]));\n\n const envs: NodeJS.ProcessEnv = {\n MINIO_IMAGE: 'quay.io/minio/minio',\n MINIO_STORAGE: storageDir('minio'),\n\n PL_IMAGE: image,\n\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: storageDir('primary'),\n PL_DATA_LIBRARY_ROOT: storageDir('library'),\n PL_DATA_WORKDIR_ROOT: workFSPath,\n\n // Mount packages storage as volume, because APFS is case-insensitive on Mac OS X and this breaks some pl software installation.\n // PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.s3Port) envs.MINIO_PORT = options.s3Port.toString();\n if (options?.s3ConsolePort) envs.MINIO_CONSOLE_PORT = options.s3ConsolePort.toString();\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_NO_AUTH'] = 'false';\n } else {\n envs['PL_NO_AUTH'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createDocker(\n instanceName: string,\n localRoot: string,\n options?: {\n primaryStorageURL?: string;\n workStoragePath?: string;\n libraryStorageURL?: string;\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n grpcPort?: number;\n grpcAddr?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker\\' mode...');\n\n const composeFSPath = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const dbFSPath = storageDir('db');\n const primaryFSPath = storageDir('primary');\n const libraryFSPath = storageDir('library');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n this.logger.debug(`Rendering docker compose file '${composeDstPath}' using '${composeFSPath}' as base template`);\n composeCfg.render(composeFSPath, composeDstPath, `pl-${instanceName}`, new Map([\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n }],\n ]));\n\n const primary = plCfg.storageSettingsFromURL(options?.primaryStorageURL ?? `file:${primaryFSPath}`, '.');\n const library = plCfg.storageSettingsFromURL(options?.libraryStorageURL ?? `file:${libraryFSPath}`, '.');\n\n const envs: NodeJS.ProcessEnv = {\n PL_IMAGE: image,\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: primaryFSPath,\n PL_DATA_LIBRARY_ROOT: libraryFSPath,\n PL_DATA_WORKDIR_ROOT: workFSPath,\n PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_NO_AUTH'] = 'false';\n } else {\n envs['PL_NO_AUTH'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public cleanupInstance(instanceName?: string) {\n const removeWarns: string[] = [];\n const instancesToDrop = new Map<string, instanceInfo>();\n let warnMessage: string = '';\n\n if (instanceName) {\n const instance = state.getInstanceInfo(instanceName);\n instancesToDrop.set(instanceName, instance);\n const iType = instance.type;\n switch (iType) {\n case 'docker':{\n removeWarns.push(`docker service 'pl-${instanceName}', including all its volumes and data in '${state.instanceDir(instanceName)}' will be destroyed`);\n break;\n }\n case 'process':{\n removeWarns.push(`directory '${state.instanceDir(instanceName)}' would be deleted`);\n if (instance.downCommands) {\n removeWarns.push(`associated docker service, including all volumes and data will be destroyed`);\n }\n break;\n }\n default:\n util.assertNever(iType);\n }\n\n if (instanceName === state.currentInstanceName) {\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n );\n }\n\n warnMessage = `\nYou are going to reset the state of platforma service '${instanceName}':\n - ${removeWarns.join('\\n - ')}\n`;\n } else {\n for (const iName of state.instanceList) {\n instancesToDrop.set(iName, state.getInstanceInfo(iName));\n }\n\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n `all service configurations stored in: ${state.instanceDir()} (including all associated docker containers and volumes)`,\n );\n\n warnMessage = `\nYou are going to reset the state of all platforma services configured with pl-bootstrap package.\n - ${removeWarns.join('\\n - ')}\n`;\n }\n\n this.logger.warn(warnMessage);\n if (!util.askYN('Are you sure?')) {\n this.logger.info('Reset action was canceled');\n return;\n }\n\n for (const [name, instance] of instancesToDrop.entries()) {\n if (instance.cleanupCommands.length) {\n this.logger.info(`Wiping instance ${name} services`);\n const result = run.runCommands(this.logger, instance.cleanupCommands);\n checkRunError(result.executed, `failed to wipe instance ${name} services`);\n }\n\n this.logger.info(`Destroying instance '${name}' data directory`);\n fs.rmSync(state.instanceDir(name), { recursive: true, force: true });\n }\n\n if (!instanceName) {\n this.logger.info(`Destroying state dir '${state.path()}'`);\n fs.rmSync(state.path(), { recursive: true, force: true });\n }\n\n this.logger.info(\n `\\nIf you want to remove all downloaded platforma binaries, delete '${state.binaries()}' dir manually\\n`,\n );\n }\n\n public mergeLicenseEnvs(flags: { 'license'?: string; 'license-file'?: string }) {\n if (flags.license === undefined) {\n if ((process.env.MI_LICENSE ?? '') != '') flags.license = process.env.MI_LICENSE;\n else if ((process.env.PL_LICENSE ?? '') != '') flags.license = process.env.PL_LICENSE;\n }\n\n // set 'license-file' only if license is still undefined\n if (flags['license-file'] === undefined && flags.license === undefined) {\n if ((process.env.MI_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.MI_LICENSE_FILE;\n else if ((process.env.PL_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.PL_LICENSE_FILE;\n else if (fs.existsSync(path.resolve(os.homedir(), '.pl.license')))\n flags['license-file'] = path.resolve(os.homedir(), '.pl.license');\n }\n }\n\n public initAuthDriversList(\n flags: {\n 'auth-htpasswd-file'?: string;\n\n 'auth-ldap-server'?: string;\n 'auth-ldap-default-dn'?: string;\n },\n workdir: string,\n ): types.authDriver[] | undefined {\n const authDrivers: types.authDriver[] = [];\n if (flags['auth-htpasswd-file']) {\n authDrivers.push({\n driver: 'htpasswd',\n path: path.resolve(workdir, flags['auth-htpasswd-file']),\n });\n }\n\n if (Boolean(flags['auth-ldap-server']) !== Boolean(flags['auth-ldap-default-dn'])) {\n throw new Error('LDAP auth settings require both \\'server\\' and \\'default DN\\' options to be set');\n }\n\n if (flags['auth-ldap-server']) {\n authDrivers.push({\n driver: 'ldap',\n serverUrl: flags['auth-ldap-server'],\n defaultDN: flags['auth-ldap-default-dn']!,\n });\n }\n\n if (authDrivers.length === 0) {\n return undefined;\n }\n\n return [{ driver: 'jwt', key: this.getLastJwt() }, ...authDrivers] as types.authDriver[];\n }\n\n /** Gets the last stored JWT secret key or generates it and stores in a file. */\n public getLastJwt() {\n const jwtFile = state.path('auth.jwt');\n const encoding = 'utf-8';\n\n let lastJwt = '';\n if (fs.existsSync(jwtFile)) {\n lastJwt = fs.readFileSync(jwtFile, { encoding });\n }\n\n if (lastJwt == '') {\n lastJwt = util.randomStr(64);\n fs.writeFileSync(jwtFile, lastJwt, { encoding });\n }\n\n return lastJwt;\n }\n\n private checkLicense(value?: string, file?: string) {\n if (value !== undefined && value != '') return;\n\n if (file !== undefined && file != '') return;\n\n this.logger.error(`A license for Platforma Backend must be set.\n\nYou can provide the license directly using the '--license' flag\nor use the '--license-file' flag if the license is stored in a file.\n\nAlternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_LICENSE'.\n\nThe license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',\nor stored in '$HOME/.pl.license'.\n\nYou can obtain the license from \"https://licensing.milaboratories.com\".`);\n\n throw new Error(`The license was not provided.`);\n }\n\n private configureDockerStorage(storageID: string, storage: types.storageOptions): NodeJS.ProcessEnv {\n const envs: NodeJS.ProcessEnv = {};\n const sType = storage.type;\n storageID = storageID.toUpperCase();\n\n switch (sType) {\n case 'S3':\n switch (storageID) {\n case 'PRIMARY': {\n // Construct the S3 URL for primary storage\n if (storage.endpoint && storage.bucketName) {\n envs['PL_PRIMARY_STORAGE_S3'] = `${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs['PL_PRIMARY_STORAGE_S3_ENDPOINT'] = storage.endpoint;\n if (storage.presignEndpoint) envs['PL_PRIMARY_STORAGE_S3_EXTERNAL_ENDPOINT'] = storage.presignEndpoint;\n if (storage.region) envs['PL_PRIMARY_STORAGE_S3_REGION'] = storage.region;\n if (storage.key) envs['PL_PRIMARY_STORAGE_S3_KEY'] = storage.key;\n if (storage.secret) envs['PL_PRIMARY_STORAGE_S3_SECRET'] = storage.secret;\n break;\n }\n case 'LIBRARY': {\n // Construct the S3 URL for library storage\n if (storage.endpoint && storage.bucketName) {\n envs['PL_DATA_LIBRARY_S3_URL'] = `library=${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs['PL_DATA_LIBRARY_S3_ENDPOINT'] = `library=${storage.endpoint}`;\n if (storage.presignEndpoint) envs['PL_DATA_LIBRARY_S3_EXTERNAL_ENDPOINT'] = `library=${storage.presignEndpoint}`;\n if (storage.region) envs['PL_DATA_LIBRARY_S3_REGION'] = `library=${storage.region}`;\n if (storage.key) envs['PL_DATA_LIBRARY_S3_KEY'] = `library=${storage.key}`;\n if (storage.secret) envs['PL_DATA_LIBRARY_S3_SECRET'] = `library=${storage.secret}`;\n break;\n }\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n case 'FS':\n switch (storageID) {\n case 'PRIMARY':\n if (storage.rootPath) envs['PL_PRIMARY_STORAGE_FS'] = storage.rootPath;\n break;\n case 'LIBRARY':\n if (storage.rootPath) envs['PL_DATA_LIBRARY_FS_PATH'] = storage.rootPath;\n break;\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n\n default:\n util.assertNever(sType);\n }\n\n return {};\n }\n\n private renderRunInfo(\n runInfo: {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n },\n indent: number = 10,\n ) {\n const report: string[] = [];\n\n const column = (t: string) => t.padStart(indent, ' ');\n if (runInfo.configPath) {\n report.push(`${column('config')}: ${runInfo.configPath}`);\n }\n\n if (runInfo.apiAddr) {\n report.push(`${column('API')}: ${runInfo.apiAddr}`);\n } else if (runInfo.apiPort) {\n report.push(`${column('API')}: 127.0.0.1:${runInfo.apiPort.toString()}`);\n } else {\n report.push(`${column('API')}: 127.0.0.1:6345`);\n }\n\n if (runInfo.logPath) {\n report.push(`${column('log')}: ${runInfo.logPath}`);\n }\n\n const primaryType = runInfo.primary?.type;\n switch (primaryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('primary')}: ${runInfo.primary!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('primary')}: S3 at '${runInfo.primary!.endpoint ?? 'AWS'}', bucket '${runInfo.primary!.bucketName!}', prefix: '${runInfo.primary!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(primaryType);\n }\n\n const libraryType = runInfo.library?.type;\n switch (libraryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('library')}: ${runInfo.library!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('library')}: S3 at '${runInfo.library!.endpoint ?? 'AWS'}', bucket '${runInfo.library!.bucketName!}', prefix: '${runInfo.library!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(libraryType);\n }\n\n if (runInfo.work) {\n report.push(`${column('workdirs')}: ${runInfo.work.rootPath}`);\n }\n\n if (runInfo.dbPath) {\n report.push(`${column('db')}: ${runInfo.dbPath}`);\n }\n\n return report.join('\\n');\n }\n}\n\nexport function checkRunError(result: SpawnSyncReturns<Buffer>[], message?: string) {\n for (const buffer of result) {\n if (buffer.error) {\n throw buffer.error;\n }\n\n const msg = message ?? 'failed to run command';\n\n if (buffer.status !== 0) {\n throw new Error(`${msg}, process exited with code '${buffer.status}'`);\n }\n }\n}\n\nexport type createLocalOptions = {\n version?: string;\n sourcesPath?: string;\n binaryPath?: string;\n configPath?: string;\n configOptions?: plCfg.plOptions;\n workdir?: string;\n\n primaryURL?: string;\n libraryURL?: string;\n\n backendCommands?: string[];\n};\n\nexport type createLocalFSOptions = createLocalOptions;\n\nexport type createLocalS3Options = createLocalOptions & {\n minioPort?: number;\n minioConsolePort?: number;\n};\n"],"names":["run.runCommands","util.assertNever","platforma.binaryPath","os","plCfg.storageSettingsFromURL","plCfg.loadDefaults","fs","pkg.assets","plCfg.render","composeCfg.render","util.ensureDir","pkg.plImageTag","util.askYN","util.randomStr"],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sources":["../src/core.ts"],"sourcesContent":["import type { ChildProcess, SpawnSyncReturns } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport * as pkg from './package';\nimport * as run from './run';\nimport * as composeCfg from './templates/compose';\nimport * as plCfg from './templates/pl-config';\nimport type * as types from './templates/types';\nimport * as platforma from './platforma';\nimport type { instanceInfo, instanceCommand } from './state';\nimport state from './state';\nimport * as util from './util';\nimport type winston from 'winston';\n\nexport default class Core {\n constructor(private readonly logger: winston.Logger) { }\n\n public startLast(): ChildProcess[] {\n const instance = state.currentInstance;\n if (!instance) {\n this.logger.error('failed to bring back Platforma Backend in the last started configuration: no last configuration found');\n throw new Error('no previous run info found');\n }\n\n return this.startInstance(instance);\n }\n\n public startInstance(instance: instanceInfo): ChildProcess[] {\n if (instance.runInfo) {\n const runInfo = this.renderRunInfo(instance.runInfo);\n this.logger.info(`Starting platforma backend instance '${instance.name}':\\n${runInfo}`);\n }\n\n const result = run.runCommands(\n this.logger,\n instance.upCommands,\n );\n checkRunError(result.executed);\n\n if (result.spawned.length > 0 && instance.type === 'process') {\n instance.pid = result.spawned[result.spawned.length - 1].pid;\n state.setInstanceInfo(instance.name, instance);\n this.logger.info(`instance '${instance.name}' started`);\n }\n\n state.currentInstanceName = instance.name;\n\n return result.spawned;\n }\n\n public stopInstance(instance: instanceInfo) {\n this.logger.info(`stopping platforma backend instance '${instance.name}'...`);\n const result = run.runCommands(this.logger, instance.downCommands);\n checkRunError(result.executed);\n\n const iType = instance.type;\n switch (iType) {\n case 'docker': {\n return;\n }\n\n case 'process': {\n if (instance.pid && state.isInstanceActive(instance)) {\n process.kill(instance.pid);\n }\n\n return;\n }\n default:\n util.assertNever(iType);\n }\n }\n\n public switchInstance(instance: instanceInfo): ChildProcess[] {\n // Stop all other active instances before switching to new one;\n for (const iName of state.instanceList) {\n if (iName !== instance.name) {\n const iToStop = state.getInstanceInfo(iName);\n if (state.isInstanceActive(iToStop)) {\n this.stopInstance(iToStop);\n }\n }\n }\n\n return this.startInstance(instance);\n }\n\n public createLocal(instanceName: string, options?: createLocalOptions): instanceInfo {\n let plBinaryPath = platforma.binaryPath(options?.version, 'binaries', 'platforma');\n if (options?.sourcesPath) {\n plBinaryPath = path.join(os.tmpdir(), 'platforma-custom-build');\n }\n if (options?.binaryPath) {\n plBinaryPath = options.binaryPath;\n }\n\n let configPath = options?.configPath;\n const workdir: string = options?.workdir ?? (configPath ? process.cwd() : state.instanceDir(instanceName));\n\n if (options?.primaryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n primary: plCfg.storageSettingsFromURL(options.primaryURL, workdir, options.configOptions?.storages?.primary),\n },\n };\n }\n if (options?.libraryURL) {\n options.configOptions = {\n ...options.configOptions,\n storages: {\n ...options.configOptions?.storages,\n library: plCfg.storageSettingsFromURL(options.libraryURL, workdir, options.configOptions?.storages?.library),\n },\n };\n }\n\n const configOptions = plCfg.loadDefaults(this.getLastJwt(), options?.configOptions);\n\n this.logger.debug(` checking license...`);\n this.checkLicense(options?.configOptions?.license?.value, options?.configOptions?.license?.file);\n\n const storageDirs: string[] = [\n `${configOptions.localRoot}/packages`,\n `${configOptions.localRoot}/packages-local`,\n `${configOptions.localRoot}/blocks-local`,\n ];\n if (configOptions.storages.primary.type === 'FS') {\n storageDirs.push(configOptions.storages.primary.rootPath);\n }\n if (configOptions.storages.library.type === 'FS') {\n storageDirs.push(configOptions.storages.library.rootPath);\n configOptions.hacks.libraryDownloadable = false;\n }\n if (configOptions.storages.work.type === 'FS') {\n storageDirs.push(configOptions.storages.work.rootPath);\n }\n\n this.logger.debug(' creating pl state directories...');\n for (const dir of storageDirs) {\n if (!fs.existsSync(dir)) {\n this.logger.debug(` '${dir}'`);\n fs.mkdirSync(dir, { recursive: true });\n }\n }\n\n for (const drv of configOptions.core.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n if (!fs.existsSync(drv.path)) {\n this.logger.debug(` installing default 'users.htpasswd' to ${drv.path}...`);\n fs.copyFileSync(pkg.assets('users.htpasswd'), drv.path);\n }\n }\n }\n\n if (!configPath) {\n configPath = path.join(configOptions.localRoot, 'config.yaml');\n this.logger.debug(` rendering configuration '${configPath}'...`);\n fs.writeFileSync(configPath, plCfg.render(configOptions));\n }\n\n const upCommands: instanceCommand[] = [];\n if (options?.sourcesPath) {\n upCommands.push({\n cmd: 'go',\n args: ['build', '-o', plBinaryPath, '.'],\n workdir: path.resolve(options.sourcesPath, 'cmd', 'platforma'),\n runOpts: {\n stdio: 'inherit',\n },\n });\n }\n\n const runBinary: instanceCommand = {\n async: true,\n cmd: plBinaryPath,\n args: ['--quiet', '--config', configPath],\n workdir: workdir,\n runOpts: {\n stdio: 'inherit',\n },\n };\n\n if (options?.configOptions?.numCpu) {\n runBinary.runOpts.env = {\n GOMAXPROCS: String(options?.configOptions?.numCpu),\n };\n }\n\n // Process additional environment variables from CLI options\n if (options?.backendCommands) {\n if (!runBinary.runOpts.env) {\n runBinary.runOpts.env = {};\n }\n for (const cmd of options.backendCommands) {\n const equalIndex = cmd.indexOf('=');\n if (equalIndex > 0) {\n const key = cmd.substring(0, equalIndex);\n const value = cmd.substring(equalIndex + 1);\n runBinary.runOpts.env[key] = value;\n } else {\n this.logger.warn(`Invalid environment variable format: ${cmd}. Expected format: KEY=VALUE`);\n }\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n // Add commands as arguments to the binary\n runBinary.args = [...runBinary.args, ...options.backendCommands];\n }\n\n upCommands.push(runBinary);\n\n state.setInstanceInfo(instanceName, {\n type: 'process',\n upCommands: upCommands,\n downCommands: [],\n cleanupCommands: [],\n runInfo: {\n configPath,\n dbPath: configOptions.core.db.path,\n apiAddr: configOptions.grpc.listen,\n logPath: configOptions.log.path,\n primary: configOptions.storages.primary,\n work: configOptions.storages.work,\n library: configOptions.storages.library,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createLocalS3(instanceName: string, options?: createLocalS3Options): instanceInfo {\n this.logger.debug('creating platforma instance in \\'local s3\\' mode...');\n\n const minioPort = options?.minioPort ?? 9000;\n\n const instance = this.createLocal(instanceName, {\n ...options,\n primaryURL: options?.primaryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-primary-bucket/?region=no-region`,\n libraryURL: options?.libraryURL ?? `s3e://testuser:testpassword@localhost:${minioPort}/platforma-library-bucket/?region=no-region`,\n });\n\n const localRoot = options?.configOptions?.localRoot;\n const minioRunCmd = this.createMinio(instanceName, {\n minioPort: minioPort,\n minioConsolePort: options?.minioConsolePort,\n storage: localRoot ? path.join(localRoot, 'minio') : undefined,\n });\n\n instance.upCommands = [\n minioRunCmd.start,\n ...instance.upCommands,\n ];\n\n instance.downCommands = [\n minioRunCmd.stop,\n ...instance.downCommands,\n ];\n\n instance.cleanupCommands = [\n minioRunCmd.cleanup,\n ...instance.cleanupCommands,\n ];\n\n state.setInstanceInfo(instanceName, instance);\n return instance;\n }\n\n public createMinio(\n instanceName: string,\n options?: {\n image?: string;\n version?: string;\n minioPort?: number;\n minioConsolePort?: number;\n storage?: string;\n }): {\n start: instanceCommand;\n stop: instanceCommand;\n cleanup: instanceCommand;\n } {\n this.logger.debug(' creating docker compose for minio service...');\n const composeSrc = pkg.assets('compose-backend.yaml');\n const composeMinio = state.instanceDir(instanceName, 'compose-minio.yaml');\n\n composeCfg.render(composeSrc, composeMinio, `pl-${instanceName}-minio`,\n new Map([\n ['minio', {}],\n ]),\n { dropVolumes: true },\n );\n\n const version = options?.version ? `:${options.version}` : '';\n this.logger.debug(` minio version: ${version}`);\n const image = options?.image ?? `quay.io/minio/minio${version}`;\n this.logger.debug(` minio image: ${image}`);\n\n const storage = options?.storage ?? state.instanceDir(instanceName, 'minio');\n util.ensureDir(storage, { mode: '0775' });\n\n const minioPort = options?.minioPort ?? 9000;\n const minioConsolePort = options?.minioConsolePort ?? 9001;\n\n const envs = {\n MINIO_IMAGE: image,\n MINIO_STORAGE: path.resolve(storage),\n MINIO_PORT: minioPort.toString(),\n MINIO_CONSOLE_PORT: minioConsolePort.toString(),\n };\n\n return {\n start: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n stop: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n cleanup: {\n cmd: 'docker',\n args: ['compose', `--file=${composeMinio}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n workdir: state.instanceDir(instanceName),\n runOpts: { stdio: 'inherit' },\n },\n };\n }\n\n public createDockerS3(\n instanceName: string,\n localRoot: string,\n options?: {\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n\n grpcPort?: number;\n grpcAddr?: string;\n\n presignHost?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n s3Port?: number;\n s3ConsolePort?: number;\n\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker s3\\' mode...');\n\n const composeS3Path = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const presignHost = options?.presignHost ?? 'localhost';\n const presignPort = options?.s3Port ?? 9000;\n\n const primary = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-primary-bucket`);\n if (primary.type !== 'S3') {\n throw new Error('primary storage must have \\'S3\\' type in \\'docker s3\\' configuration');\n } else {\n primary.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const library = plCfg.storageSettingsFromURL(`s3e://testuser:testpassword@minio:${presignPort}/platforma-library-bucket`);\n if (library.type !== 'S3') {\n throw new Error(`${library.type} storage type is not supported for library storage`);\n } else {\n library.presignEndpoint = `http://${presignHost}:${presignPort}`;\n }\n\n const dbFSPath = storageDir('db');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n composeCfg.render(composeS3Path, composeDstPath, `pl-${instanceName}`, new Map([\n ['minio', {}],\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n }],\n ]));\n\n const envs: NodeJS.ProcessEnv = {\n MINIO_IMAGE: 'quay.io/minio/minio',\n MINIO_STORAGE: storageDir('minio'),\n\n PL_IMAGE: image,\n\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: storageDir('primary'),\n PL_DATA_LIBRARY_ROOT: storageDir('library'),\n PL_DATA_WORKDIR_ROOT: workFSPath,\n\n // Mount packages storage as volume, because APFS is case-insensitive on Mac OS X and this breaks some pl software installation.\n // PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.s3Port) envs.MINIO_PORT = options.s3Port.toString();\n if (options?.s3ConsolePort) envs.MINIO_CONSOLE_PORT = options.s3ConsolePort.toString();\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_NO_AUTH'] = 'false';\n } else {\n envs['PL_NO_AUTH'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public createDocker(\n instanceName: string,\n localRoot: string,\n options?: {\n primaryStorageURL?: string;\n workStoragePath?: string;\n libraryStorageURL?: string;\n customMounts?: { hostPath: string; containerPath?: string }[];\n\n image?: string;\n version?: string;\n platformOverride?: string;\n\n logLevel?: string;\n\n auth?: types.authOptions;\n\n license?: string;\n licenseFile?: string;\n grpcPort?: number;\n grpcAddr?: string;\n\n monitoringPort?: number;\n monitoringAddr?: string;\n\n debugPort?: number;\n debugAddr?: string;\n\n backendCommands?: string[];\n },\n ): instanceInfo {\n this.logger.debug('creating platforma instance in \\'docker\\' mode...');\n\n const composeFSPath = pkg.assets('compose-backend.yaml');\n const image = options?.image ?? pkg.plImageTag(options?.version);\n\n this.checkLicense(options?.license, options?.licenseFile);\n\n const storagePath = (...s: string[]) => path.join(localRoot, ...s);\n const storageDir = (s: string) => {\n const p = storagePath(s);\n util.ensureDir(p, { mode: '0775' });\n return p;\n };\n\n const logFilePath = storagePath('logs', 'platforma.log');\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(path.dirname(logFilePath), { recursive: true });\n fs.writeFileSync(logFilePath, '');\n }\n\n const dbFSPath = storageDir('db');\n const primaryFSPath = storageDir('primary');\n const libraryFSPath = storageDir('library');\n const workFSPath = storageDir('work');\n const usersFSPath = storagePath('users.htpasswd');\n if (!fs.existsSync(usersFSPath)) {\n fs.copyFileSync(pkg.assets('users.htpasswd'), usersFSPath);\n }\n\n const composeDstPath = storagePath('compose.yaml');\n if (fs.existsSync(composeDstPath)) {\n this.logger.info(`replacing docker compose file ${composeDstPath}`);\n }\n\n const backendMounts: composeCfg.VolumeMountOption[] = [];\n for (const mnt of options?.customMounts ?? []) {\n backendMounts.push({\n hostPath: mnt.hostPath,\n containerPath: mnt.containerPath ?? mnt.hostPath,\n });\n }\n this.logger.debug(`Rendering docker compose file '${composeDstPath}' using '${composeFSPath}' as base template`);\n composeCfg.render(composeFSPath, composeDstPath, `pl-${instanceName}`, new Map([\n ['backend', {\n platform: options?.platformOverride,\n mounts: backendMounts,\n commands: options?.backendCommands,\n }],\n ]));\n\n const primary = plCfg.storageSettingsFromURL(options?.primaryStorageURL ?? `file:${primaryFSPath}`, '.');\n const library = plCfg.storageSettingsFromURL(options?.libraryStorageURL ?? `file:${libraryFSPath}`, '.');\n\n const envs: NodeJS.ProcessEnv = {\n PL_IMAGE: image,\n PL_AUTH_HTPASSWD: usersFSPath,\n PL_LICENSE: options?.license,\n PL_LICENSE_FILE: options?.licenseFile,\n\n PL_LOG_LEVEL: options?.logLevel ?? 'info',\n PL_LOG_DIR: path.dirname(logFilePath),\n PL_LOG_ROTATION_ENABLED: 'true',\n\n PL_RUNNER_WD_CACHE_ON_FAILURE: '1h',\n\n PL_DATA_DB_ROOT: dbFSPath,\n PL_DATA_PRIMARY_ROOT: primaryFSPath,\n PL_DATA_LIBRARY_ROOT: libraryFSPath,\n PL_DATA_WORKDIR_ROOT: workFSPath,\n PL_DATA_PACKAGE_ROOT: storageDir('packages'),\n\n ...this.configureDockerStorage('primary', primary),\n ...this.configureDockerStorage('library', library),\n };\n\n if (options?.grpcAddr) {\n const addrParts = options.grpcAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_LISTEN_ADDRESS = addrParts[0];\n envs.PL_LISTEN_PORT = addrParts[1];\n } else {\n envs.PL_LISTEN_ADDRESS = options.grpcAddr;\n }\n } else if (options?.grpcPort) {\n envs.PL_LISTEN_PORT = options.grpcPort.toString();\n }\n\n if (options?.monitoringAddr) {\n const addrParts = options.monitoringAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_MONITORING_IP = addrParts[0];\n envs.PL_MONITORING_PORT = addrParts[1];\n } else {\n envs.PL_MONITORING_IP = options.monitoringAddr;\n }\n } else if (options?.monitoringPort) {\n envs.PL_MONITORING_PORT = options.monitoringPort.toString();\n }\n\n if (options?.debugAddr) {\n const addrParts = options.debugAddr.split(':');\n if (addrParts.length === 2) {\n envs.PL_DEBUG_IP = addrParts[0];\n envs.PL_DEBUG_PORT = addrParts[1];\n } else {\n envs.PL_DEBUG_IP = options.debugAddr;\n }\n } else if (options?.debugPort) {\n envs.PL_DEBUG_PORT = options.debugPort.toString();\n }\n\n if (options?.auth) {\n if (options.auth.enabled) {\n envs['PL_NO_AUTH'] = 'false';\n } else {\n envs['PL_NO_AUTH'] = 'true';\n }\n if (options.auth.drivers) {\n for (const drv of options.auth.drivers) {\n if (drv.driver === 'htpasswd') {\n envs['PL_AUTH_HTPASSWD'] = path.resolve(drv.path);\n drv.path = '/etc/platforma/users.htpasswd';\n }\n }\n envs['PL_AUTH_DRIVERS'] = JSON.stringify(options.auth.drivers);\n }\n }\n\n // Process additional backend commands\n if (options?.backendCommands && options.backendCommands.length > 0) {\n this.logger.debug(`Adding backend commands: ${options.backendCommands.join(' ')}`);\n }\n\n state.setInstanceInfo(instanceName, {\n type: 'docker',\n upCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'up', '--detach', '--remove-orphans', '--pull=missing'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n downCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n cleanupCommands: [{\n cmd: 'docker',\n args: ['compose', `--file=${composeDstPath}`, 'down', '--volumes', '--remove-orphans'],\n envs: envs,\n runOpts: { stdio: 'inherit' },\n }],\n runInfo: {\n apiPort: options?.grpcPort,\n apiAddr: options?.grpcAddr,\n logPath: logFilePath,\n primary: primary,\n work: { type: 'FS', rootPath: workFSPath },\n library: library,\n dbPath: dbFSPath,\n },\n });\n\n return state.getInstanceInfo(instanceName);\n }\n\n public cleanupInstance(instanceName?: string) {\n const removeWarns: string[] = [];\n const instancesToDrop = new Map<string, instanceInfo>();\n let warnMessage: string = '';\n\n if (instanceName) {\n const instance = state.getInstanceInfo(instanceName);\n instancesToDrop.set(instanceName, instance);\n const iType = instance.type;\n switch (iType) {\n case 'docker':{\n removeWarns.push(`docker service 'pl-${instanceName}', including all its volumes and data in '${state.instanceDir(instanceName)}' will be destroyed`);\n break;\n }\n case 'process':{\n removeWarns.push(`directory '${state.instanceDir(instanceName)}' would be deleted`);\n if (instance.downCommands) {\n removeWarns.push(`associated docker service, including all volumes and data will be destroyed`);\n }\n break;\n }\n default:\n util.assertNever(iType);\n }\n\n if (instanceName === state.currentInstanceName) {\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n );\n }\n\n warnMessage = `\nYou are going to reset the state of platforma service '${instanceName}':\n - ${removeWarns.join('\\n - ')}\n`;\n } else {\n for (const iName of state.instanceList) {\n instancesToDrop.set(iName, state.getInstanceInfo(iName));\n }\n\n removeWarns.push(\n 'last command run cache (\\'pl-dev start\\' shorthand will stop working until next full start command call)',\n `all service configurations stored in: ${state.instanceDir()} (including all associated docker containers and volumes)`,\n );\n\n warnMessage = `\nYou are going to reset the state of all platforma services configured with pl-bootstrap package.\n - ${removeWarns.join('\\n - ')}\n`;\n }\n\n this.logger.warn(warnMessage);\n if (!util.askYN('Are you sure?')) {\n this.logger.info('Reset action was canceled');\n return;\n }\n\n for (const [name, instance] of instancesToDrop.entries()) {\n if (instance.cleanupCommands.length) {\n this.logger.info(`Wiping instance ${name} services`);\n const result = run.runCommands(this.logger, instance.cleanupCommands);\n checkRunError(result.executed, `failed to wipe instance ${name} services`);\n }\n\n this.logger.info(`Destroying instance '${name}' data directory`);\n fs.rmSync(state.instanceDir(name), { recursive: true, force: true });\n }\n\n if (!instanceName) {\n this.logger.info(`Destroying state dir '${state.path()}'`);\n fs.rmSync(state.path(), { recursive: true, force: true });\n }\n\n this.logger.info(\n `\\nIf you want to remove all downloaded platforma binaries, delete '${state.binaries()}' dir manually\\n`,\n );\n }\n\n public mergeLicenseEnvs(flags: { 'license'?: string; 'license-file'?: string }) {\n if (flags.license === undefined) {\n if ((process.env.MI_LICENSE ?? '') != '') flags.license = process.env.MI_LICENSE;\n else if ((process.env.PL_LICENSE ?? '') != '') flags.license = process.env.PL_LICENSE;\n }\n\n // set 'license-file' only if license is still undefined\n if (flags['license-file'] === undefined && flags.license === undefined) {\n if ((process.env.MI_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.MI_LICENSE_FILE;\n else if ((process.env.PL_LICENSE_FILE ?? '') != '') flags['license-file'] = process.env.PL_LICENSE_FILE;\n else if (fs.existsSync(path.resolve(os.homedir(), '.pl.license')))\n flags['license-file'] = path.resolve(os.homedir(), '.pl.license');\n }\n }\n\n public initAuthDriversList(\n flags: {\n 'auth-htpasswd-file'?: string;\n\n 'auth-ldap-server'?: string;\n 'auth-ldap-default-dn'?: string;\n },\n workdir: string,\n ): types.authDriver[] | undefined {\n const authDrivers: types.authDriver[] = [];\n if (flags['auth-htpasswd-file']) {\n authDrivers.push({\n driver: 'htpasswd',\n path: path.resolve(workdir, flags['auth-htpasswd-file']),\n });\n }\n\n if (Boolean(flags['auth-ldap-server']) !== Boolean(flags['auth-ldap-default-dn'])) {\n throw new Error('LDAP auth settings require both \\'server\\' and \\'default DN\\' options to be set');\n }\n\n if (flags['auth-ldap-server']) {\n authDrivers.push({\n driver: 'ldap',\n serverUrl: flags['auth-ldap-server'],\n defaultDN: flags['auth-ldap-default-dn']!,\n });\n }\n\n if (authDrivers.length === 0) {\n return undefined;\n }\n\n return [{ driver: 'jwt', key: this.getLastJwt() }, ...authDrivers] as types.authDriver[];\n }\n\n /** Gets the last stored JWT secret key or generates it and stores in a file. */\n public getLastJwt() {\n const jwtFile = state.path('auth.jwt');\n const encoding = 'utf-8';\n\n let lastJwt = '';\n if (fs.existsSync(jwtFile)) {\n lastJwt = fs.readFileSync(jwtFile, { encoding });\n }\n\n if (lastJwt == '') {\n lastJwt = util.randomStr(64);\n fs.writeFileSync(jwtFile, lastJwt, { encoding });\n }\n\n return lastJwt;\n }\n\n private checkLicense(value?: string, file?: string) {\n if (value !== undefined && value != '') return;\n\n if (file !== undefined && file != '') return;\n\n this.logger.error(`A license for Platforma Backend must be set.\n\nYou can provide the license directly using the '--license' flag\nor use the '--license-file' flag if the license is stored in a file.\n\nAlternatively, you can set it via the environment variables 'MI_LICENSE' or 'PL_LICENSE'.\n\nThe license file can also be set with the variables 'MI_LICENSE_FILE' or 'PL_LICENSE_FILE',\nor stored in '$HOME/.pl.license'.\n\nYou can obtain the license from \"https://platforma.bio/getlicense\".`);\n\n throw new Error(`The license was not provided.`);\n }\n\n private configureDockerStorage(storageID: string, storage: types.storageOptions): NodeJS.ProcessEnv {\n const envs: NodeJS.ProcessEnv = {};\n const sType = storage.type;\n storageID = storageID.toUpperCase();\n\n switch (sType) {\n case 'S3':\n switch (storageID) {\n case 'PRIMARY': {\n // Construct the S3 URL for primary storage\n if (storage.endpoint && storage.bucketName) {\n envs['PL_PRIMARY_STORAGE_S3'] = `${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs['PL_PRIMARY_STORAGE_S3_ENDPOINT'] = storage.endpoint;\n if (storage.presignEndpoint) envs['PL_PRIMARY_STORAGE_S3_EXTERNAL_ENDPOINT'] = storage.presignEndpoint;\n if (storage.region) envs['PL_PRIMARY_STORAGE_S3_REGION'] = storage.region;\n if (storage.key) envs['PL_PRIMARY_STORAGE_S3_KEY'] = storage.key;\n if (storage.secret) envs['PL_PRIMARY_STORAGE_S3_SECRET'] = storage.secret;\n break;\n }\n case 'LIBRARY': {\n // Construct the S3 URL for library storage\n if (storage.endpoint && storage.bucketName) {\n envs['PL_DATA_LIBRARY_S3_URL'] = `library=${storage.endpoint}${storage.bucketName}`;\n }\n if (storage.endpoint) envs['PL_DATA_LIBRARY_S3_ENDPOINT'] = `library=${storage.endpoint}`;\n if (storage.presignEndpoint) envs['PL_DATA_LIBRARY_S3_EXTERNAL_ENDPOINT'] = `library=${storage.presignEndpoint}`;\n if (storage.region) envs['PL_DATA_LIBRARY_S3_REGION'] = `library=${storage.region}`;\n if (storage.key) envs['PL_DATA_LIBRARY_S3_KEY'] = `library=${storage.key}`;\n if (storage.secret) envs['PL_DATA_LIBRARY_S3_SECRET'] = `library=${storage.secret}`;\n break;\n }\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n case 'FS':\n switch (storageID) {\n case 'PRIMARY':\n if (storage.rootPath) envs['PL_PRIMARY_STORAGE_FS'] = storage.rootPath;\n break;\n case 'LIBRARY':\n if (storage.rootPath) envs['PL_DATA_LIBRARY_FS_PATH'] = storage.rootPath;\n break;\n default:\n throw new Error(`Unknown storage ID: ${storageID}`);\n }\n return envs;\n\n default:\n util.assertNever(sType);\n }\n\n return {};\n }\n\n private renderRunInfo(\n runInfo: {\n configPath?: string;\n apiPort?: number;\n apiAddr?: string;\n logPath?: string;\n dbPath?: string;\n primary?: types.storageOptions;\n work?: types.fsStorageOptions;\n library?: types.storageOptions;\n },\n indent: number = 10,\n ) {\n const report: string[] = [];\n\n const column = (t: string) => t.padStart(indent, ' ');\n if (runInfo.configPath) {\n report.push(`${column('config')}: ${runInfo.configPath}`);\n }\n\n if (runInfo.apiAddr) {\n report.push(`${column('API')}: ${runInfo.apiAddr}`);\n } else if (runInfo.apiPort) {\n report.push(`${column('API')}: 127.0.0.1:${runInfo.apiPort.toString()}`);\n } else {\n report.push(`${column('API')}: 127.0.0.1:6345`);\n }\n\n if (runInfo.logPath) {\n report.push(`${column('log')}: ${runInfo.logPath}`);\n }\n\n const primaryType = runInfo.primary?.type;\n switch (primaryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('primary')}: ${runInfo.primary!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('primary')}: S3 at '${runInfo.primary!.endpoint ?? 'AWS'}', bucket '${runInfo.primary!.bucketName!}', prefix: '${runInfo.primary!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(primaryType);\n }\n\n const libraryType = runInfo.library?.type;\n switch (libraryType) {\n case undefined:\n break;\n\n case 'FS':\n report.push(`${column('library')}: ${runInfo.library!.rootPath!}`);\n break;\n\n case 'S3':\n report.push(\n `${column('library')}: S3 at '${runInfo.library!.endpoint ?? 'AWS'}', bucket '${runInfo.library!.bucketName!}', prefix: '${runInfo.library!.keyPrefix ?? ''}'`,\n );\n break;\n\n default:\n util.assertNever(libraryType);\n }\n\n if (runInfo.work) {\n report.push(`${column('workdirs')}: ${runInfo.work.rootPath}`);\n }\n\n if (runInfo.dbPath) {\n report.push(`${column('db')}: ${runInfo.dbPath}`);\n }\n\n return report.join('\\n');\n }\n}\n\nexport function checkRunError(result: SpawnSyncReturns<Buffer>[], message?: string) {\n for (const buffer of result) {\n if (buffer.error) {\n throw buffer.error;\n }\n\n const msg = message ?? 'failed to run command';\n\n if (buffer.status !== 0) {\n throw new Error(`${msg}, process exited with code '${buffer.status}'`);\n }\n }\n}\n\nexport type createLocalOptions = {\n version?: string;\n sourcesPath?: string;\n binaryPath?: string;\n configPath?: string;\n configOptions?: plCfg.plOptions;\n workdir?: string;\n\n primaryURL?: string;\n libraryURL?: string;\n\n backendCommands?: string[];\n};\n\nexport type createLocalFSOptions = createLocalOptions;\n\nexport type createLocalS3Options = createLocalOptions & {\n minioPort?: number;\n minioConsolePort?: number;\n};\n"],"names":["run.runCommands","util.assertNever","platforma.binaryPath","os","plCfg.storageSettingsFromURL","plCfg.loadDefaults","fs","pkg.assets","plCfg.render","composeCfg.render","util.ensureDir","pkg.plImageTag","util.askYN","util.randomStr"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@platforma-sdk/bootstrap",
3
- "version": "5.2.23",
3
+ "version": "5.2.25",
4
4
  "description": "MiLaboratories Platforma Backend bootstrap code: configuration generators, service run wrappers and so on",
5
5
  "bin": {
6
6
  "pl-dev": "./bin/run.js"
@@ -22,10 +22,10 @@
22
22
  "prettier": "^3.4.1",
23
23
  "ts-node": "^10.9.2",
24
24
  "typescript": "~5.6.3",
25
- "@milaboratories/build-configs": "1.0.8",
26
- "@milaboratories/ts-configs": "1.0.6",
27
- "@milaboratories/oclif-index": "1.1.1",
28
25
  "@milaboratories/eslint-config": "1.0.5",
26
+ "@milaboratories/oclif-index": "1.1.1",
27
+ "@milaboratories/ts-configs": "1.0.6",
28
+ "@milaboratories/build-configs": "1.0.8",
29
29
  "@milaboratories/ts-builder": "1.0.5"
30
30
  },
31
31
  "dependencies": {
@@ -37,7 +37,7 @@
37
37
  "winston": "^3.17.0",
38
38
  "yaml": "^2.8.0",
39
39
  "zod": "~3.23.8",
40
- "@milaboratories/pl-deployments": "2.12.4"
40
+ "@milaboratories/pl-deployments": "2.12.5"
41
41
  },
42
42
  "oclif": {
43
43
  "bin": "pl-dev",