@milaboratories/pl-client 3.0.0 → 3.1.1
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/_virtual/_rolldown/runtime.cjs +12 -22
- package/dist/_virtual/_rolldown/runtime.js +6 -11
- package/dist/core/PromiseTracker.cjs +2 -3
- package/dist/core/PromiseTracker.cjs.map +1 -1
- package/dist/core/PromiseTracker.d.ts.map +1 -0
- package/dist/core/PromiseTracker.js +1 -2
- package/dist/core/PromiseTracker.js.map +1 -1
- package/dist/core/StatefulPromise.cjs +1 -2
- package/dist/core/StatefulPromise.cjs.map +1 -1
- package/dist/core/StatefulPromise.js +1 -1
- package/dist/core/StatefulPromise.js.map +1 -1
- package/dist/core/abstract_stream.d.ts.map +1 -0
- package/dist/core/advisory_locks.cjs +1 -2
- package/dist/core/advisory_locks.cjs.map +1 -1
- package/dist/core/advisory_locks.js +1 -1
- package/dist/core/advisory_locks.js.map +1 -1
- package/dist/core/auth.cjs +2 -3
- package/dist/core/auth.cjs.map +1 -1
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +1 -2
- package/dist/core/auth.js.map +1 -1
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/client.cjs +63 -36
- package/dist/core/client.cjs.map +1 -1
- package/dist/core/client.d.ts +3 -1
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +54 -27
- package/dist/core/client.js.map +1 -1
- package/dist/core/config.cjs +16 -17
- package/dist/core/config.cjs.map +1 -1
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +16 -16
- package/dist/core/config.js.map +1 -1
- package/dist/core/default_client.cjs +6 -7
- package/dist/core/default_client.cjs.map +1 -1
- package/dist/core/default_client.d.ts.map +1 -0
- package/dist/core/default_client.js +1 -2
- package/dist/core/default_client.js.map +1 -1
- package/dist/core/driver.cjs +1 -2
- package/dist/core/driver.cjs.map +1 -1
- package/dist/core/driver.d.ts.map +1 -0
- package/dist/core/driver.js +1 -1
- package/dist/core/error_resource.cjs +1 -2
- package/dist/core/error_resource.cjs.map +1 -1
- package/dist/core/error_resource.js +1 -1
- package/dist/core/errors.cjs +11 -4
- package/dist/core/errors.cjs.map +1 -1
- package/dist/core/errors.d.ts +2 -1
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +9 -3
- package/dist/core/errors.js.map +1 -1
- package/dist/core/final.cjs +3 -4
- package/dist/core/final.cjs.map +1 -1
- package/dist/core/final.d.ts.map +1 -0
- package/dist/core/final.js +1 -2
- package/dist/core/final.js.map +1 -1
- package/dist/core/ll_client.cjs +24 -13
- package/dist/core/ll_client.cjs.map +1 -1
- package/dist/core/ll_client.d.ts +6 -1
- package/dist/core/ll_client.d.ts.map +1 -0
- package/dist/core/ll_client.js +13 -2
- package/dist/core/ll_client.js.map +1 -1
- package/dist/core/ll_transaction.cjs +4 -5
- package/dist/core/ll_transaction.cjs.map +1 -1
- package/dist/core/ll_transaction.d.ts.map +1 -0
- package/dist/core/ll_transaction.js +1 -2
- package/dist/core/ll_transaction.js.map +1 -1
- package/dist/core/stat.cjs +1 -2
- package/dist/core/stat.cjs.map +1 -1
- package/dist/core/stat.d.ts.map +1 -0
- package/dist/core/stat.js +1 -1
- package/dist/core/transaction.cjs +30 -19
- package/dist/core/transaction.cjs.map +1 -1
- package/dist/core/transaction.d.ts.map +1 -0
- package/dist/core/transaction.js +21 -10
- package/dist/core/transaction.js.map +1 -1
- package/dist/core/type_conversion.cjs +7 -8
- package/dist/core/type_conversion.cjs.map +1 -1
- package/dist/core/type_conversion.js +3 -4
- package/dist/core/type_conversion.js.map +1 -1
- package/dist/core/types.cjs +3 -4
- package/dist/core/types.cjs.map +1 -1
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -3
- package/dist/core/types.js.map +1 -1
- package/dist/core/unauth_client.cjs +4 -5
- package/dist/core/unauth_client.cjs.map +1 -1
- package/dist/core/unauth_client.d.ts.map +1 -0
- package/dist/core/unauth_client.js +1 -2
- package/dist/core/unauth_client.js.map +1 -1
- package/dist/core/websocket_stream.cjs +4 -5
- package/dist/core/websocket_stream.cjs.map +1 -1
- package/dist/core/websocket_stream.js +1 -2
- package/dist/core/websocket_stream.js.map +1 -1
- package/dist/core/wire.d.ts.map +1 -0
- package/dist/helpers/pl.cjs +12 -14
- package/dist/helpers/pl.cjs.map +1 -1
- package/dist/helpers/pl.d.ts.map +1 -0
- package/dist/helpers/pl.js +5 -7
- package/dist/helpers/pl.js.map +1 -1
- package/dist/helpers/poll.cjs +3 -4
- package/dist/helpers/poll.cjs.map +1 -1
- package/dist/helpers/poll.d.ts.map +1 -0
- package/dist/helpers/poll.js +1 -2
- package/dist/helpers/poll.js.map +1 -1
- package/dist/helpers/retry_strategy.cjs +1 -2
- package/dist/helpers/retry_strategy.cjs.map +1 -1
- package/dist/helpers/retry_strategy.js +1 -1
- package/dist/helpers/retry_strategy.js.map +1 -1
- package/dist/helpers/tx_helpers.cjs +3 -4
- package/dist/helpers/tx_helpers.cjs.map +1 -1
- package/dist/helpers/tx_helpers.d.ts.map +1 -0
- package/dist/helpers/tx_helpers.js +1 -2
- package/dist/helpers/tx_helpers.js.map +1 -1
- package/dist/index.cjs +34 -34
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -3
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs +3 -4
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs.map +1 -1
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js +1 -2
- package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs +115 -421
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs +3 -4
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts +4 -4
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js +1 -2
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js +108 -414
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs +5 -6
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js +1 -2
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs +2 -3
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js +1 -2
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs +6 -16
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts.map +1 -0
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js +4 -14
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js.map +1 -1
- package/dist/proto-grpc/google/protobuf/any.cjs +2 -3
- package/dist/proto-grpc/google/protobuf/any.cjs.map +1 -1
- package/dist/proto-grpc/google/protobuf/any.d.ts.map +1 -0
- package/dist/proto-grpc/google/protobuf/any.js +1 -2
- package/dist/proto-grpc/google/protobuf/any.js.map +1 -1
- package/dist/proto-grpc/google/protobuf/duration.cjs +2 -3
- package/dist/proto-grpc/google/protobuf/duration.cjs.map +1 -1
- package/dist/proto-grpc/google/protobuf/duration.d.ts.map +1 -0
- package/dist/proto-grpc/google/protobuf/duration.js +1 -2
- package/dist/proto-grpc/google/protobuf/duration.js.map +1 -1
- package/dist/proto-grpc/google/protobuf/timestamp.cjs +2 -3
- package/dist/proto-grpc/google/protobuf/timestamp.cjs.map +1 -1
- package/dist/proto-grpc/google/protobuf/timestamp.d.ts.map +1 -0
- package/dist/proto-grpc/google/protobuf/timestamp.js +1 -2
- package/dist/proto-grpc/google/protobuf/timestamp.js.map +1 -1
- package/dist/proto-grpc/google/rpc/code.cjs +1 -2
- package/dist/proto-grpc/google/rpc/code.cjs.map +1 -1
- package/dist/proto-grpc/google/rpc/code.d.ts.map +1 -0
- package/dist/proto-grpc/google/rpc/code.js +1 -1
- package/dist/proto-grpc/google/rpc/code.js.map +1 -1
- package/dist/proto-rest/index.cjs +8 -9
- package/dist/proto-rest/index.cjs.map +1 -1
- package/dist/proto-rest/index.d.ts.map +1 -0
- package/dist/proto-rest/index.js +1 -2
- package/dist/proto-rest/index.js.map +1 -1
- package/dist/proto-rest/plapi.d.ts.map +1 -0
- package/dist/test/tcp-proxy.cjs +2 -3
- package/dist/test/tcp-proxy.cjs.map +1 -1
- package/dist/test/tcp-proxy.d.ts.map +1 -0
- package/dist/test/tcp-proxy.js +1 -2
- package/dist/test/tcp-proxy.js.map +1 -1
- package/dist/test/test_config.cjs +16 -19
- package/dist/test/test_config.cjs.map +1 -1
- package/dist/test/test_config.d.ts.map +1 -0
- package/dist/test/test_config.js +3 -6
- package/dist/test/test_config.js.map +1 -1
- package/dist/util/pl.cjs +1 -2
- package/dist/util/pl.cjs.map +1 -1
- package/dist/util/pl.js +1 -1
- package/dist/util/util.cjs +1 -2
- package/dist/util/util.cjs.map +1 -1
- package/dist/util/util.js +1 -1
- package/package.json +7 -7
- package/src/core/client.ts +80 -30
- package/src/core/errors.ts +11 -0
- package/src/core/ll_client.test.ts +15 -0
- package/src/core/ll_client.ts +22 -1
- package/src/core/ll_transaction.test.ts +12 -2
- package/src/core/transaction.ts +8 -2
- package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.ts +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default_client.js","names":[],"sources":["../../src/core/default_client.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport type { AuthInformation, PlClientConfig } from \"./config\";\nimport { plAddressToConfig } from \"./config\";\nimport canonicalize from \"canonicalize\";\nimport YAML from \"yaml\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { UnauthenticatedPlClient } from \"./unauth_client\";\nimport { PlClient } from \"./client\";\nimport { createHash } from \"node:crypto\";\nimport { inferAuthRefreshTime } from \"./auth\";\n\nconst CONFIG_FILE_LOCAL_JSON = \"pl.json\";\nconst CONFIG_FILE_USER_JSON = path.join(os.homedir(), \".pl.json\");\nconst CONFIG_FILE_LOCAL_YAML = \"pl.yaml\";\nconst CONFIG_FILE_USER_YAML = path.join(os.homedir(), \".pl.yaml\");\nconst CONF_FILE_SEQUENCE = [\n CONFIG_FILE_LOCAL_JSON,\n CONFIG_FILE_LOCAL_YAML,\n CONFIG_FILE_USER_JSON,\n CONFIG_FILE_USER_YAML,\n];\n\nconst AUTH_DATA_FILE = \".pl_auth.json\";\n\ntype FileConfigOverrideFields =\n | \"grpcProxy\"\n | \"httpProxy\"\n | \"user\"\n | \"password\"\n | \"alternativeRoot\"\n | \"defaultROTransactionTimeout\"\n | \"defaultRWTransactionTimeout\"\n | \"defaultRequestTimeout\"\n | \"authTTLSeconds\"\n | \"authMaxRefreshSeconds\";\nconst FILE_CONFIG_OVERRIDE_FIELDS: FileConfigOverrideFields[] = [\n \"grpcProxy\",\n \"httpProxy\",\n \"user\",\n \"password\",\n \"alternativeRoot\",\n \"defaultROTransactionTimeout\",\n \"defaultRWTransactionTimeout\",\n \"defaultRequestTimeout\",\n \"authTTLSeconds\",\n \"authMaxRefreshSeconds\",\n];\n\ntype PlConfigFile = {\n address: string;\n} & Partial<Pick<PlClientConfig, FileConfigOverrideFields>>;\n\ninterface AuthCache {\n /** To check if config changed */\n confHash: string;\n expiration: number;\n authInformation: AuthInformation;\n}\n\nexport function tryGetFileConfig(): [PlConfigFile, string] | undefined {\n for (const confPath of CONF_FILE_SEQUENCE)\n if (fs.existsSync(confPath)) {\n const fileContent = fs.readFileSync(confPath, { encoding: \"utf-8\" });\n if (confPath.endsWith(\"json\")) return [JSON.parse(fileContent) as PlConfigFile, confPath];\n else return [YAML.parse(fileContent) as PlConfigFile, confPath];\n }\n return undefined;\n}\n\nfunction saveAuthInfoCallback(\n confHash: string,\n authMaxRefreshSeconds: number,\n): (newAuthInfo: AuthInformation) => void {\n return (newAuthInfo) => {\n fs.writeFileSync(\n AUTH_DATA_FILE,\n Buffer.from(\n JSON.stringify({\n confHash,\n authInformation: newAuthInfo,\n expiration: inferAuthRefreshTime(newAuthInfo, authMaxRefreshSeconds),\n } as AuthCache),\n ),\n \"utf8\",\n );\n };\n}\n\nconst cleanAuthInfoCallback = () => {\n fs.rmSync(AUTH_DATA_FILE);\n};\n\n/** Uses default algorithm to construct a pl client from the environment */\nexport async function defaultPlClient(): Promise<PlClient> {\n let config: PlClientConfig | undefined = undefined;\n if (process.env.PL_ADDRESS !== undefined) {\n config = plAddressToConfig(process.env.PL_ADDRESS);\n } else {\n const fromFile = tryGetFileConfig();\n if (fromFile !== undefined) {\n const [fileConfig, configPath] = fromFile;\n const address = notEmpty(fileConfig.address, `no pl address in file: ${configPath}`);\n config = plAddressToConfig(address);\n // applying overrides\n for (const field of FILE_CONFIG_OVERRIDE_FIELDS)\n if (fileConfig[field] !== undefined) (config as any)[field] = fileConfig[field];\n }\n }\n\n if (config === undefined)\n throw new Error(\"Can't find configuration to create default platform client.\");\n\n if (process.env.PL_USER !== undefined) config.user = process.env.PL_USER;\n\n if (process.env.PL_PASSWORD !== undefined) config.user = process.env.PL_PASSWORD;\n\n const confHash = createHash(\"sha256\")\n .update(Buffer.from(canonicalize(config)!))\n .digest(\"base64\");\n\n let authInformation: AuthInformation | undefined = undefined;\n\n // try recover auth information from cache\n if (fs.existsSync(AUTH_DATA_FILE)) {\n const cache: AuthCache = JSON.parse(fs.readFileSync(AUTH_DATA_FILE, { encoding: \"utf-8\" }));\n if (cache.confHash === confHash && cache.expiration > Date.now())\n authInformation = cache.authInformation;\n }\n\n if (authInformation === undefined) {\n const client = await UnauthenticatedPlClient.build(config);\n\n if (await client.requireAuth()) {\n if (config.user === undefined || config.password === undefined)\n throw new Error(`No auth information for found to authenticate with PL server.`);\n authInformation = await client.login(config.user, config.password);\n } else {\n // No authorization is required\n authInformation = {};\n }\n\n // saving cache\n fs.writeFileSync(\n AUTH_DATA_FILE,\n Buffer.from(\n JSON.stringify({\n confHash,\n authInformation,\n expiration: inferAuthRefreshTime(authInformation, config.authMaxRefreshSeconds),\n } as AuthCache),\n ),\n \"utf8\",\n );\n }\n\n return await PlClient.init(config, {\n authInformation,\n onUpdate: (_newAuthInfo) => saveAuthInfoCallback(confHash, config.authMaxRefreshSeconds),\n onUpdateError: cleanAuthInfoCallback,\n onAuthError: cleanAuthInfoCallback,\n });\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"default_client.js","names":[],"sources":["../../src/core/default_client.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport type { AuthInformation, PlClientConfig } from \"./config\";\nimport { plAddressToConfig } from \"./config\";\nimport canonicalize from \"canonicalize\";\nimport YAML from \"yaml\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { notEmpty } from \"@milaboratories/ts-helpers\";\nimport { UnauthenticatedPlClient } from \"./unauth_client\";\nimport { PlClient } from \"./client\";\nimport { createHash } from \"node:crypto\";\nimport { inferAuthRefreshTime } from \"./auth\";\n\nconst CONFIG_FILE_LOCAL_JSON = \"pl.json\";\nconst CONFIG_FILE_USER_JSON = path.join(os.homedir(), \".pl.json\");\nconst CONFIG_FILE_LOCAL_YAML = \"pl.yaml\";\nconst CONFIG_FILE_USER_YAML = path.join(os.homedir(), \".pl.yaml\");\nconst CONF_FILE_SEQUENCE = [\n CONFIG_FILE_LOCAL_JSON,\n CONFIG_FILE_LOCAL_YAML,\n CONFIG_FILE_USER_JSON,\n CONFIG_FILE_USER_YAML,\n];\n\nconst AUTH_DATA_FILE = \".pl_auth.json\";\n\ntype FileConfigOverrideFields =\n | \"grpcProxy\"\n | \"httpProxy\"\n | \"user\"\n | \"password\"\n | \"alternativeRoot\"\n | \"defaultROTransactionTimeout\"\n | \"defaultRWTransactionTimeout\"\n | \"defaultRequestTimeout\"\n | \"authTTLSeconds\"\n | \"authMaxRefreshSeconds\";\nconst FILE_CONFIG_OVERRIDE_FIELDS: FileConfigOverrideFields[] = [\n \"grpcProxy\",\n \"httpProxy\",\n \"user\",\n \"password\",\n \"alternativeRoot\",\n \"defaultROTransactionTimeout\",\n \"defaultRWTransactionTimeout\",\n \"defaultRequestTimeout\",\n \"authTTLSeconds\",\n \"authMaxRefreshSeconds\",\n];\n\ntype PlConfigFile = {\n address: string;\n} & Partial<Pick<PlClientConfig, FileConfigOverrideFields>>;\n\ninterface AuthCache {\n /** To check if config changed */\n confHash: string;\n expiration: number;\n authInformation: AuthInformation;\n}\n\nexport function tryGetFileConfig(): [PlConfigFile, string] | undefined {\n for (const confPath of CONF_FILE_SEQUENCE)\n if (fs.existsSync(confPath)) {\n const fileContent = fs.readFileSync(confPath, { encoding: \"utf-8\" });\n if (confPath.endsWith(\"json\")) return [JSON.parse(fileContent) as PlConfigFile, confPath];\n else return [YAML.parse(fileContent) as PlConfigFile, confPath];\n }\n return undefined;\n}\n\nfunction saveAuthInfoCallback(\n confHash: string,\n authMaxRefreshSeconds: number,\n): (newAuthInfo: AuthInformation) => void {\n return (newAuthInfo) => {\n fs.writeFileSync(\n AUTH_DATA_FILE,\n Buffer.from(\n JSON.stringify({\n confHash,\n authInformation: newAuthInfo,\n expiration: inferAuthRefreshTime(newAuthInfo, authMaxRefreshSeconds),\n } as AuthCache),\n ),\n \"utf8\",\n );\n };\n}\n\nconst cleanAuthInfoCallback = () => {\n fs.rmSync(AUTH_DATA_FILE);\n};\n\n/** Uses default algorithm to construct a pl client from the environment */\nexport async function defaultPlClient(): Promise<PlClient> {\n let config: PlClientConfig | undefined = undefined;\n if (process.env.PL_ADDRESS !== undefined) {\n config = plAddressToConfig(process.env.PL_ADDRESS);\n } else {\n const fromFile = tryGetFileConfig();\n if (fromFile !== undefined) {\n const [fileConfig, configPath] = fromFile;\n const address = notEmpty(fileConfig.address, `no pl address in file: ${configPath}`);\n config = plAddressToConfig(address);\n // applying overrides\n for (const field of FILE_CONFIG_OVERRIDE_FIELDS)\n if (fileConfig[field] !== undefined) (config as any)[field] = fileConfig[field];\n }\n }\n\n if (config === undefined)\n throw new Error(\"Can't find configuration to create default platform client.\");\n\n if (process.env.PL_USER !== undefined) config.user = process.env.PL_USER;\n\n if (process.env.PL_PASSWORD !== undefined) config.user = process.env.PL_PASSWORD;\n\n const confHash = createHash(\"sha256\")\n .update(Buffer.from(canonicalize(config)!))\n .digest(\"base64\");\n\n let authInformation: AuthInformation | undefined = undefined;\n\n // try recover auth information from cache\n if (fs.existsSync(AUTH_DATA_FILE)) {\n const cache: AuthCache = JSON.parse(fs.readFileSync(AUTH_DATA_FILE, { encoding: \"utf-8\" }));\n if (cache.confHash === confHash && cache.expiration > Date.now())\n authInformation = cache.authInformation;\n }\n\n if (authInformation === undefined) {\n const client = await UnauthenticatedPlClient.build(config);\n\n if (await client.requireAuth()) {\n if (config.user === undefined || config.password === undefined)\n throw new Error(`No auth information for found to authenticate with PL server.`);\n authInformation = await client.login(config.user, config.password);\n } else {\n // No authorization is required\n authInformation = {};\n }\n\n // saving cache\n fs.writeFileSync(\n AUTH_DATA_FILE,\n Buffer.from(\n JSON.stringify({\n confHash,\n authInformation,\n expiration: inferAuthRefreshTime(authInformation, config.authMaxRefreshSeconds),\n } as AuthCache),\n ),\n \"utf8\",\n );\n }\n\n return await PlClient.init(config, {\n authInformation,\n onUpdate: (_newAuthInfo) => saveAuthInfoCallback(confHash, config.authMaxRefreshSeconds),\n onUpdateError: cleanAuthInfoCallback,\n onAuthError: cleanAuthInfoCallback,\n });\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,MAAM,qBAAqB;CAJI;CAEA;CADD,KAAK,KAAK,GAAG,SAAS,EAAE,WAAW;CAEnC,KAAK,KAAK,GAAG,SAAS,EAAE,WAAW;CAMhE;AAED,MAAM,iBAAiB;AAavB,MAAM,8BAA0D;CAC9D;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAaD,SAAgB,mBAAuD;AACrE,MAAK,MAAM,YAAY,mBACrB,KAAI,GAAG,WAAW,SAAS,EAAE;EAC3B,MAAM,cAAc,GAAG,aAAa,UAAU,EAAE,UAAU,SAAS,CAAC;AACpE,MAAI,SAAS,SAAS,OAAO,CAAE,QAAO,CAAC,KAAK,MAAM,YAAY,EAAkB,SAAS;MACpF,QAAO,CAAC,KAAK,MAAM,YAAY,EAAkB,SAAS;;;AAKrE,SAAS,qBACP,UACA,uBACwC;AACxC,SAAQ,gBAAgB;AACtB,KAAG,cACD,gBACA,OAAO,KACL,KAAK,UAAU;GACb;GACA,iBAAiB;GACjB,YAAY,qBAAqB,aAAa,sBAAsB;GACrE,CAAc,CAChB,EACD,OACD;;;AAIL,MAAM,8BAA8B;AAClC,IAAG,OAAO,eAAe;;;AAI3B,eAAsB,kBAAqC;CACzD,IAAI,SAAqC,KAAA;AACzC,KAAI,QAAQ,IAAI,eAAe,KAAA,EAC7B,UAAS,kBAAkB,QAAQ,IAAI,WAAW;MAC7C;EACL,MAAM,WAAW,kBAAkB;AACnC,MAAI,aAAa,KAAA,GAAW;GAC1B,MAAM,CAAC,YAAY,cAAc;AAEjC,YAAS,kBADO,SAAS,WAAW,SAAS,0BAA0B,aAAa,CACjD;AAEnC,QAAK,MAAM,SAAS,4BAClB,KAAI,WAAW,WAAW,KAAA,EAAY,QAAe,SAAS,WAAW;;;AAI/E,KAAI,WAAW,KAAA,EACb,OAAM,IAAI,MAAM,8DAA8D;AAEhF,KAAI,QAAQ,IAAI,YAAY,KAAA,EAAW,QAAO,OAAO,QAAQ,IAAI;AAEjE,KAAI,QAAQ,IAAI,gBAAgB,KAAA,EAAW,QAAO,OAAO,QAAQ,IAAI;CAErE,MAAM,WAAW,WAAW,SAAS,CAClC,OAAO,OAAO,KAAK,aAAa,OAAO,CAAE,CAAC,CAC1C,OAAO,SAAS;CAEnB,IAAI,kBAA+C,KAAA;AAGnD,KAAI,GAAG,WAAW,eAAe,EAAE;EACjC,MAAM,QAAmB,KAAK,MAAM,GAAG,aAAa,gBAAgB,EAAE,UAAU,SAAS,CAAC,CAAC;AAC3F,MAAI,MAAM,aAAa,YAAY,MAAM,aAAa,KAAK,KAAK,CAC9D,mBAAkB,MAAM;;AAG5B,KAAI,oBAAoB,KAAA,GAAW;EACjC,MAAM,SAAS,MAAM,wBAAwB,MAAM,OAAO;AAE1D,MAAI,MAAM,OAAO,aAAa,EAAE;AAC9B,OAAI,OAAO,SAAS,KAAA,KAAa,OAAO,aAAa,KAAA,EACnD,OAAM,IAAI,MAAM,gEAAgE;AAClF,qBAAkB,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,SAAS;QAGlE,mBAAkB,EAAE;AAItB,KAAG,cACD,gBACA,OAAO,KACL,KAAK,UAAU;GACb;GACA;GACA,YAAY,qBAAqB,iBAAiB,OAAO,sBAAsB;GAChF,CAAc,CAChB,EACD,OACD;;AAGH,QAAO,MAAM,SAAS,KAAK,QAAQ;EACjC;EACA,WAAW,iBAAiB,qBAAqB,UAAU,OAAO,sBAAsB;EACxF,eAAe;EACf,aAAa;EACd,CAAC"}
|
package/dist/core/driver.cjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
//#region src/core/driver.ts
|
|
3
2
|
function addRTypeToMetadata(rType, options) {
|
|
4
3
|
options = options ?? {};
|
|
@@ -14,8 +13,8 @@ function addRTypeToMetadata(rType, options) {
|
|
|
14
13
|
function createRTypeRoutingHeader(rType) {
|
|
15
14
|
return { resourceType: `${rType.name}:${rType.version}` };
|
|
16
15
|
}
|
|
17
|
-
|
|
18
16
|
//#endregion
|
|
19
17
|
exports.addRTypeToMetadata = addRTypeToMetadata;
|
|
20
18
|
exports.createRTypeRoutingHeader = createRTypeRoutingHeader;
|
|
19
|
+
|
|
21
20
|
//# sourceMappingURL=driver.cjs.map
|
package/dist/core/driver.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.cjs","names":[],"sources":["../../src/core/driver.ts"],"sourcesContent":["import type { PlClient } from \"./client\";\nimport type { RpcOptions } from \"@protobuf-ts/runtime-rpc\";\nimport type { Dispatcher } from \"undici\";\nimport type { ResourceType } from \"./types\";\nimport type { WireClientProviderFactory } from \"./wire\";\n\n/** Drivers must implement this interface */\nexport interface PlDriver {\n close(): void;\n}\n\n/** Definition to use driver via {@link PlClient} */\nexport interface PlDriverDefinition<Drv extends PlDriver> {\n /** Used as key to only once instantiate specific drivers */\n readonly name: string;\n\n /** Initialization routine, will be executed only once for each driver in a specific client */\n init(pl: PlClient, wireClientFactory: WireClientProviderFactory, httpDispatcher: Dispatcher): Drv;\n}\n\n// addRTypeToMetadata adds a metadata with resource type\n// for every RPC call. It is necessary for the platform core\n// to proxy the call to the proper controller.\nexport function addRTypeToMetadata(rType: ResourceType, options?: RpcOptions) {\n options = options ?? {};\n options.meta = options.meta ?? {};\n options.meta[\"resourceType\"] = `${rType.name}:${rType.version}`;\n\n return options;\n}\n\n/**\n * addRTypeToHeaders adds a header that helps to route request to the right resource and controller.\n * Without this header, API router on server side cannot route request to proper controller in internal\n * RPC proxy.\n */\nexport function createRTypeRoutingHeader(rType: ResourceType): Record<string, string> {\n return {\n resourceType: `${rType.name}:${rType.version}`,\n };\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"driver.cjs","names":[],"sources":["../../src/core/driver.ts"],"sourcesContent":["import type { PlClient } from \"./client\";\nimport type { RpcOptions } from \"@protobuf-ts/runtime-rpc\";\nimport type { Dispatcher } from \"undici\";\nimport type { ResourceType } from \"./types\";\nimport type { WireClientProviderFactory } from \"./wire\";\n\n/** Drivers must implement this interface */\nexport interface PlDriver {\n close(): void;\n}\n\n/** Definition to use driver via {@link PlClient} */\nexport interface PlDriverDefinition<Drv extends PlDriver> {\n /** Used as key to only once instantiate specific drivers */\n readonly name: string;\n\n /** Initialization routine, will be executed only once for each driver in a specific client */\n init(pl: PlClient, wireClientFactory: WireClientProviderFactory, httpDispatcher: Dispatcher): Drv;\n}\n\n// addRTypeToMetadata adds a metadata with resource type\n// for every RPC call. It is necessary for the platform core\n// to proxy the call to the proper controller.\nexport function addRTypeToMetadata(rType: ResourceType, options?: RpcOptions) {\n options = options ?? {};\n options.meta = options.meta ?? {};\n options.meta[\"resourceType\"] = `${rType.name}:${rType.version}`;\n\n return options;\n}\n\n/**\n * addRTypeToHeaders adds a header that helps to route request to the right resource and controller.\n * Without this header, API router on server side cannot route request to proper controller in internal\n * RPC proxy.\n */\nexport function createRTypeRoutingHeader(rType: ResourceType): Record<string, string> {\n return {\n resourceType: `${rType.name}:${rType.version}`,\n };\n}\n"],"mappings":";AAuBA,SAAgB,mBAAmB,OAAqB,SAAsB;AAC5E,WAAU,WAAW,EAAE;AACvB,SAAQ,OAAO,QAAQ,QAAQ,EAAE;AACjC,SAAQ,KAAK,kBAAkB,GAAG,MAAM,KAAK,GAAG,MAAM;AAEtD,QAAO;;;;;;;AAQT,SAAgB,yBAAyB,OAA6C;AACpF,QAAO,EACL,cAAc,GAAG,MAAM,KAAK,GAAG,MAAM,WACtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.d.ts","names":[],"sources":["../../src/core/driver.ts"],"mappings":";;;;;;;;UAOiB,QAAA;EACf,KAAA;AAAA;;UAIe,kBAAA,aAA+B,QAAA;EAJzC;EAAA,SAMI,IAAA;EAFwB;EAKjC,IAAA,CAAK,EAAA,EAAI,QAAA,EAAU,iBAAA,EAAmB,yBAAA,EAA2B,cAAA,EAAgB,UAAA,GAAa,GAAA;AAAA;AAAA,iBAMhF,kBAAA,CAAmB,KAAA,EAAO,YAAA,EAAc,OAAA,GAAU,UAAA,GAAU,UAAA;;;;;;iBAa5D,wBAAA,CAAyB,KAAA,EAAO,YAAA,GAAe,MAAA"}
|
package/dist/core/driver.js
CHANGED
|
@@ -13,7 +13,7 @@ function addRTypeToMetadata(rType, options) {
|
|
|
13
13
|
function createRTypeRoutingHeader(rType) {
|
|
14
14
|
return { resourceType: `${rType.name}:${rType.version}` };
|
|
15
15
|
}
|
|
16
|
-
|
|
17
16
|
//#endregion
|
|
18
17
|
export { addRTypeToMetadata, createRTypeRoutingHeader };
|
|
18
|
+
|
|
19
19
|
//# sourceMappingURL=driver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error_resource.cjs","names":[],"sources":["../../src/core/error_resource.ts"],"sourcesContent":["import type { ResourceType } from \"./types\";\n\nexport type ErrorResourceData = {\n message: string;\n};\n\nexport const ErrorResourceType: ResourceType = {\n name: \"json/resourceError\",\n version: \"1\",\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"error_resource.cjs","names":[],"sources":["../../src/core/error_resource.ts"],"sourcesContent":["import type { ResourceType } from \"./types\";\n\nexport type ErrorResourceData = {\n message: string;\n};\n\nexport const ErrorResourceType: ResourceType = {\n name: \"json/resourceError\",\n version: \"1\",\n};\n"],"mappings":";AAMA,MAAa,oBAAkC;CAC7C,MAAM;CACN,SAAS;CACV"}
|
package/dist/core/errors.cjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
const require_code = require(
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_code = require("../proto-grpc/google/rpc/code.cjs");
|
|
3
3
|
let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
|
|
4
|
-
|
|
5
4
|
//#region src/core/errors.ts
|
|
6
5
|
function isConnectionProblem(err, nested = false) {
|
|
7
6
|
if (err === void 0 || err === null) return false;
|
|
@@ -52,6 +51,13 @@ function isTimeoutOrCancelError(err, nested = false) {
|
|
|
52
51
|
if (err.cause !== void 0 && !nested) return isTimeoutOrCancelError(err.cause, true);
|
|
53
52
|
return false;
|
|
54
53
|
}
|
|
54
|
+
function isUnimplementedError(err, nested = false) {
|
|
55
|
+
if (err === void 0 || err === null) return false;
|
|
56
|
+
if (err.name == "RpcError" && err.code == "UNIMPLEMENTED") return true;
|
|
57
|
+
if (err.name == "RESTError" && err.status.code == require_code.Code.UNIMPLEMENTED) return true;
|
|
58
|
+
if (err.cause !== void 0 && !nested) return isUnimplementedError(err.cause, true);
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
55
61
|
function isNotFoundError(err, nested = false) {
|
|
56
62
|
if (err === void 0 || err === null) return false;
|
|
57
63
|
if (err.name == "RpcError" && err.code == "NOT_FOUND") return true;
|
|
@@ -119,7 +125,6 @@ function rethrowMeaningfulError(error, wrapIfUnknown = false) {
|
|
|
119
125
|
throw new Error(message, { cause: error });
|
|
120
126
|
} else throw error;
|
|
121
127
|
}
|
|
122
|
-
|
|
123
128
|
//#endregion
|
|
124
129
|
exports.DisconnectedError = DisconnectedError;
|
|
125
130
|
exports.PlError = PlError;
|
|
@@ -135,6 +140,8 @@ exports.isNotFoundError = isNotFoundError;
|
|
|
135
140
|
exports.isTimeoutError = isTimeoutError;
|
|
136
141
|
exports.isTimeoutOrCancelError = isTimeoutOrCancelError;
|
|
137
142
|
exports.isUnauthenticated = isUnauthenticated;
|
|
143
|
+
exports.isUnimplementedError = isUnimplementedError;
|
|
138
144
|
exports.rethrowMeaningfulError = rethrowMeaningfulError;
|
|
139
145
|
exports.throwPlNotFoundError = throwPlNotFoundError;
|
|
146
|
+
|
|
140
147
|
//# sourceMappingURL=errors.cjs.map
|
package/dist/core/errors.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","names":["Code","Aborted"],"sources":["../../src/core/errors.ts"],"sourcesContent":["import type { Status } from \"../proto-grpc/github.com/googleapis/googleapis/google/rpc/status\";\nimport { Aborted } from \"@milaboratories/ts-helpers\";\nimport { Code } from \"../proto-grpc/google/rpc/code\";\n\nexport function isConnectionProblem(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof DisconnectedError) return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"UNAVAILABLE\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.UNAVAILABLE) return true;\n if ((err as any).cause !== undefined && !nested)\n return isConnectionProblem((err as any).cause, true);\n return false;\n}\n\nexport function isUnauthenticated(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof UnauthenticatedError) return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"UNAUTHENTICATED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.UNAUTHENTICATED)\n return true;\n if ((err as any).cause !== undefined && !nested)\n return isUnauthenticated((err as any).cause, true);\n return false;\n}\n\nexport function isTimeoutError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"TimeoutError\") return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"DEADLINE_EXCEEDED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.DEADLINE_EXCEEDED)\n return true;\n if ((err as any).cause !== undefined && !nested) return isTimeoutError((err as any).cause, true);\n return false;\n}\n\nexport function isCancelError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"RpcError\" && (err as any).code == \"CANCELLED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.CANCELLED) return true;\n if ((err as any).cause !== undefined && !nested) return isCancelError((err as any).cause, true);\n return false;\n}\n\nexport function isAbortedError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof Aborted || (err as any).name == \"AbortError\") return true;\n if ((err as any).code == \"ABORT_ERR\") return true;\n if (err instanceof DOMException && err.code === DOMException.ABORT_ERR) return true; // WebSocket error\n if ((err as any).name == \"RpcError\" && (err as any).code == \"ABORTED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.ABORTED) return true;\n if ((err as any).cause !== undefined && !nested) return isAbortedError((err as any).cause, true);\n return false;\n}\n\nexport function isTimeoutOrCancelError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (isAbortedError(err, true)) return true;\n if (isTimeoutError(err, true)) return true;\n if (isCancelError(err, true)) return true;\n if ((err as any).cause !== undefined && !nested)\n return isTimeoutOrCancelError((err as any).cause, true);\n return false;\n}\n\nexport function isNotFoundError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"RpcError\" && (err as any).code == \"NOT_FOUND\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.NOT_FOUND) return true;\n if ((err as any).cause !== undefined && !nested) return isNotFoundError((err as any).cause, true);\n return err instanceof RecoverablePlError && err.status.code === PlErrorCodeNotFound;\n}\n\nexport const PlErrorCodeNotFound: number = Code.NOT_FOUND;\n\nexport class PlError extends Error {\n name = \"PlError\";\n constructor(\n public readonly status: Status,\n opts?: ErrorOptions,\n ) {\n super(`code=${status.code} ${status.message}`, opts);\n }\n}\n\nexport function throwPlNotFoundError(message: string): never {\n throw new RecoverablePlError({ code: PlErrorCodeNotFound, message, details: [] });\n}\n\nexport class RecoverablePlError extends PlError {\n name = \"RecoverablePlError\";\n constructor(status: Status) {\n super(status);\n }\n}\n\nexport class UnrecoverablePlError extends PlError {\n name = \"UnrecoverablePlError\";\n constructor(status: Status) {\n super(status);\n }\n}\n\nexport class UnauthenticatedError extends Error {\n name = \"UnauthenticatedError\";\n constructor(message: string) {\n super(\"LoginFailed: \" + message);\n }\n}\n\nexport class DisconnectedError extends Error {\n name = \"DisconnectedError\";\n constructor(message: string) {\n super(\"Disconnected: \" + message);\n }\n}\n\nexport class RESTError extends PlError {\n name = \"RESTError\";\n constructor(status: Status, opts?: ErrorOptions) {\n super(status, opts);\n }\n}\n\nexport function rethrowMeaningfulError(error: any, wrapIfUnknown: boolean = false): never {\n if (isUnauthenticated(error)) {\n if (error instanceof UnauthenticatedError) throw error;\n throw new UnauthenticatedError(error.message);\n }\n if (isConnectionProblem(error)) {\n if (error instanceof DisconnectedError) throw error;\n throw new DisconnectedError(error.message);\n }\n if (isTimeoutOrCancelError(error)) throw new Aborted(error);\n if (wrapIfUnknown) {\n const message = error.message || String(error) || \"Unknown error\";\n throw new Error(message, { cause: error });\n } else throw error;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.cjs","names":["Code","Aborted"],"sources":["../../src/core/errors.ts"],"sourcesContent":["import type { Status } from \"../proto-grpc/github.com/googleapis/googleapis/google/rpc/status\";\nimport { Aborted } from \"@milaboratories/ts-helpers\";\nimport { Code } from \"../proto-grpc/google/rpc/code\";\n\nexport function isConnectionProblem(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof DisconnectedError) return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"UNAVAILABLE\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.UNAVAILABLE) return true;\n if ((err as any).cause !== undefined && !nested)\n return isConnectionProblem((err as any).cause, true);\n return false;\n}\n\nexport function isUnauthenticated(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof UnauthenticatedError) return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"UNAUTHENTICATED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.UNAUTHENTICATED)\n return true;\n if ((err as any).cause !== undefined && !nested)\n return isUnauthenticated((err as any).cause, true);\n return false;\n}\n\nexport function isTimeoutError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"TimeoutError\") return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"DEADLINE_EXCEEDED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.DEADLINE_EXCEEDED)\n return true;\n if ((err as any).cause !== undefined && !nested) return isTimeoutError((err as any).cause, true);\n return false;\n}\n\nexport function isCancelError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"RpcError\" && (err as any).code == \"CANCELLED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.CANCELLED) return true;\n if ((err as any).cause !== undefined && !nested) return isCancelError((err as any).cause, true);\n return false;\n}\n\nexport function isAbortedError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof Aborted || (err as any).name == \"AbortError\") return true;\n if ((err as any).code == \"ABORT_ERR\") return true;\n if (err instanceof DOMException && err.code === DOMException.ABORT_ERR) return true; // WebSocket error\n if ((err as any).name == \"RpcError\" && (err as any).code == \"ABORTED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.ABORTED) return true;\n if ((err as any).cause !== undefined && !nested) return isAbortedError((err as any).cause, true);\n return false;\n}\n\nexport function isTimeoutOrCancelError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (isAbortedError(err, true)) return true;\n if (isTimeoutError(err, true)) return true;\n if (isCancelError(err, true)) return true;\n if ((err as any).cause !== undefined && !nested)\n return isTimeoutOrCancelError((err as any).cause, true);\n return false;\n}\n\nexport function isUnimplementedError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"RpcError\" && (err as any).code == \"UNIMPLEMENTED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.UNIMPLEMENTED)\n return true;\n if ((err as any).cause !== undefined && !nested)\n return isUnimplementedError((err as any).cause, true);\n return false;\n}\n\nexport function isNotFoundError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"RpcError\" && (err as any).code == \"NOT_FOUND\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.NOT_FOUND) return true;\n if ((err as any).cause !== undefined && !nested) return isNotFoundError((err as any).cause, true);\n return err instanceof RecoverablePlError && err.status.code === PlErrorCodeNotFound;\n}\n\nexport const PlErrorCodeNotFound: number = Code.NOT_FOUND;\n\nexport class PlError extends Error {\n name = \"PlError\";\n constructor(\n public readonly status: Status,\n opts?: ErrorOptions,\n ) {\n super(`code=${status.code} ${status.message}`, opts);\n }\n}\n\nexport function throwPlNotFoundError(message: string): never {\n throw new RecoverablePlError({ code: PlErrorCodeNotFound, message, details: [] });\n}\n\nexport class RecoverablePlError extends PlError {\n name = \"RecoverablePlError\";\n constructor(status: Status) {\n super(status);\n }\n}\n\nexport class UnrecoverablePlError extends PlError {\n name = \"UnrecoverablePlError\";\n constructor(status: Status) {\n super(status);\n }\n}\n\nexport class UnauthenticatedError extends Error {\n name = \"UnauthenticatedError\";\n constructor(message: string) {\n super(\"LoginFailed: \" + message);\n }\n}\n\nexport class DisconnectedError extends Error {\n name = \"DisconnectedError\";\n constructor(message: string) {\n super(\"Disconnected: \" + message);\n }\n}\n\nexport class RESTError extends PlError {\n name = \"RESTError\";\n constructor(status: Status, opts?: ErrorOptions) {\n super(status, opts);\n }\n}\n\nexport function rethrowMeaningfulError(error: any, wrapIfUnknown: boolean = false): never {\n if (isUnauthenticated(error)) {\n if (error instanceof UnauthenticatedError) throw error;\n throw new UnauthenticatedError(error.message);\n }\n if (isConnectionProblem(error)) {\n if (error instanceof DisconnectedError) throw error;\n throw new DisconnectedError(error.message);\n }\n if (isTimeoutOrCancelError(error)) throw new Aborted(error);\n if (wrapIfUnknown) {\n const message = error.message || String(error) || \"Unknown error\";\n throw new Error(message, { cause: error });\n } else throw error;\n}\n"],"mappings":"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"}
|
package/dist/core/errors.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ declare function isTimeoutError(err: unknown, nested?: boolean): boolean;
|
|
|
7
7
|
declare function isCancelError(err: unknown, nested?: boolean): boolean;
|
|
8
8
|
declare function isAbortedError(err: unknown, nested?: boolean): boolean;
|
|
9
9
|
declare function isTimeoutOrCancelError(err: unknown, nested?: boolean): boolean;
|
|
10
|
+
declare function isUnimplementedError(err: unknown, nested?: boolean): boolean;
|
|
10
11
|
declare function isNotFoundError(err: unknown, nested?: boolean): boolean;
|
|
11
12
|
declare const PlErrorCodeNotFound: number;
|
|
12
13
|
declare class PlError extends Error {
|
|
@@ -37,5 +38,5 @@ declare class RESTError extends PlError {
|
|
|
37
38
|
}
|
|
38
39
|
declare function rethrowMeaningfulError(error: any, wrapIfUnknown?: boolean): never;
|
|
39
40
|
//#endregion
|
|
40
|
-
export { DisconnectedError, PlError, PlErrorCodeNotFound, RESTError, RecoverablePlError, UnauthenticatedError, UnrecoverablePlError, isAbortedError, isCancelError, isConnectionProblem, isNotFoundError, isTimeoutError, isTimeoutOrCancelError, isUnauthenticated, rethrowMeaningfulError, throwPlNotFoundError };
|
|
41
|
+
export { DisconnectedError, PlError, PlErrorCodeNotFound, RESTError, RecoverablePlError, UnauthenticatedError, UnrecoverablePlError, isAbortedError, isCancelError, isConnectionProblem, isNotFoundError, isTimeoutError, isTimeoutOrCancelError, isUnauthenticated, isUnimplementedError, rethrowMeaningfulError, throwPlNotFoundError };
|
|
41
42
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","names":[],"sources":["../../src/core/errors.ts"],"mappings":";;;iBAIgB,mBAAA,CAAoB,GAAA,WAAc,MAAA;AAAA,iBAWlC,iBAAA,CAAkB,GAAA,WAAc,MAAA;AAAA,iBAYhC,cAAA,CAAe,GAAA,WAAc,MAAA;AAAA,iBAW7B,aAAA,CAAc,GAAA,WAAc,MAAA;AAAA,iBAS5B,cAAA,CAAe,GAAA,WAAc,MAAA;AAAA,iBAY7B,sBAAA,CAAuB,GAAA,WAAc,MAAA;AAAA,iBAWrC,oBAAA,CAAqB,GAAA,WAAc,MAAA;AAAA,iBAWnC,eAAA,CAAgB,GAAA,WAAc,MAAA;AAAA,cASjC,mBAAA;AAAA,cAEA,OAAA,SAAgB,KAAA;EAAA,SAGT,MAAA,EAAQ,MAAA;EAF1B,IAAA;cAEkB,MAAA,EAAQ,MAAA,EACxB,IAAA,GAAO,YAAA;AAAA;AAAA,iBAMK,oBAAA,CAAqB,OAAA;AAAA,cAIxB,kBAAA,SAA2B,OAAA;EACtC,IAAA;cACY,MAAA,EAAQ,MAAA;AAAA;AAAA,cAKT,oBAAA,SAA6B,OAAA;EACxC,IAAA;cACY,MAAA,EAAQ,MAAA;AAAA;AAAA,cAKT,oBAAA,SAA6B,KAAA;EACxC,IAAA;cACY,OAAA;AAAA;AAAA,cAKD,iBAAA,SAA0B,KAAA;EACrC,IAAA;cACY,OAAA;AAAA;AAAA,cAKD,SAAA,SAAkB,OAAA;EAC7B,IAAA;cACY,MAAA,EAAQ,MAAA,EAAQ,IAAA,GAAO,YAAA;AAAA;AAAA,iBAKrB,sBAAA,CAAuB,KAAA,OAAY,aAAA"}
|
package/dist/core/errors.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Code } from "../proto-grpc/google/rpc/code.js";
|
|
2
2
|
import { Aborted } from "@milaboratories/ts-helpers";
|
|
3
|
-
|
|
4
3
|
//#region src/core/errors.ts
|
|
5
4
|
function isConnectionProblem(err, nested = false) {
|
|
6
5
|
if (err === void 0 || err === null) return false;
|
|
@@ -51,6 +50,13 @@ function isTimeoutOrCancelError(err, nested = false) {
|
|
|
51
50
|
if (err.cause !== void 0 && !nested) return isTimeoutOrCancelError(err.cause, true);
|
|
52
51
|
return false;
|
|
53
52
|
}
|
|
53
|
+
function isUnimplementedError(err, nested = false) {
|
|
54
|
+
if (err === void 0 || err === null) return false;
|
|
55
|
+
if (err.name == "RpcError" && err.code == "UNIMPLEMENTED") return true;
|
|
56
|
+
if (err.name == "RESTError" && err.status.code == Code.UNIMPLEMENTED) return true;
|
|
57
|
+
if (err.cause !== void 0 && !nested) return isUnimplementedError(err.cause, true);
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
54
60
|
function isNotFoundError(err, nested = false) {
|
|
55
61
|
if (err === void 0 || err === null) return false;
|
|
56
62
|
if (err.name == "RpcError" && err.code == "NOT_FOUND") return true;
|
|
@@ -118,7 +124,7 @@ function rethrowMeaningfulError(error, wrapIfUnknown = false) {
|
|
|
118
124
|
throw new Error(message, { cause: error });
|
|
119
125
|
} else throw error;
|
|
120
126
|
}
|
|
121
|
-
|
|
122
127
|
//#endregion
|
|
123
|
-
export { DisconnectedError, PlError, PlErrorCodeNotFound, RESTError, RecoverablePlError, UnauthenticatedError, UnrecoverablePlError, isAbortedError, isCancelError, isConnectionProblem, isNotFoundError, isTimeoutError, isTimeoutOrCancelError, isUnauthenticated, rethrowMeaningfulError, throwPlNotFoundError };
|
|
128
|
+
export { DisconnectedError, PlError, PlErrorCodeNotFound, RESTError, RecoverablePlError, UnauthenticatedError, UnrecoverablePlError, isAbortedError, isCancelError, isConnectionProblem, isNotFoundError, isTimeoutError, isTimeoutOrCancelError, isUnauthenticated, isUnimplementedError, rethrowMeaningfulError, throwPlNotFoundError };
|
|
129
|
+
|
|
124
130
|
//# sourceMappingURL=errors.js.map
|
package/dist/core/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","names":[],"sources":["../../src/core/errors.ts"],"sourcesContent":["import type { Status } from \"../proto-grpc/github.com/googleapis/googleapis/google/rpc/status\";\nimport { Aborted } from \"@milaboratories/ts-helpers\";\nimport { Code } from \"../proto-grpc/google/rpc/code\";\n\nexport function isConnectionProblem(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof DisconnectedError) return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"UNAVAILABLE\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.UNAVAILABLE) return true;\n if ((err as any).cause !== undefined && !nested)\n return isConnectionProblem((err as any).cause, true);\n return false;\n}\n\nexport function isUnauthenticated(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof UnauthenticatedError) return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"UNAUTHENTICATED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.UNAUTHENTICATED)\n return true;\n if ((err as any).cause !== undefined && !nested)\n return isUnauthenticated((err as any).cause, true);\n return false;\n}\n\nexport function isTimeoutError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"TimeoutError\") return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"DEADLINE_EXCEEDED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.DEADLINE_EXCEEDED)\n return true;\n if ((err as any).cause !== undefined && !nested) return isTimeoutError((err as any).cause, true);\n return false;\n}\n\nexport function isCancelError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"RpcError\" && (err as any).code == \"CANCELLED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.CANCELLED) return true;\n if ((err as any).cause !== undefined && !nested) return isCancelError((err as any).cause, true);\n return false;\n}\n\nexport function isAbortedError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof Aborted || (err as any).name == \"AbortError\") return true;\n if ((err as any).code == \"ABORT_ERR\") return true;\n if (err instanceof DOMException && err.code === DOMException.ABORT_ERR) return true; // WebSocket error\n if ((err as any).name == \"RpcError\" && (err as any).code == \"ABORTED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.ABORTED) return true;\n if ((err as any).cause !== undefined && !nested) return isAbortedError((err as any).cause, true);\n return false;\n}\n\nexport function isTimeoutOrCancelError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (isAbortedError(err, true)) return true;\n if (isTimeoutError(err, true)) return true;\n if (isCancelError(err, true)) return true;\n if ((err as any).cause !== undefined && !nested)\n return isTimeoutOrCancelError((err as any).cause, true);\n return false;\n}\n\nexport function isNotFoundError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"RpcError\" && (err as any).code == \"NOT_FOUND\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.NOT_FOUND) return true;\n if ((err as any).cause !== undefined && !nested) return isNotFoundError((err as any).cause, true);\n return err instanceof RecoverablePlError && err.status.code === PlErrorCodeNotFound;\n}\n\nexport const PlErrorCodeNotFound: number = Code.NOT_FOUND;\n\nexport class PlError extends Error {\n name = \"PlError\";\n constructor(\n public readonly status: Status,\n opts?: ErrorOptions,\n ) {\n super(`code=${status.code} ${status.message}`, opts);\n }\n}\n\nexport function throwPlNotFoundError(message: string): never {\n throw new RecoverablePlError({ code: PlErrorCodeNotFound, message, details: [] });\n}\n\nexport class RecoverablePlError extends PlError {\n name = \"RecoverablePlError\";\n constructor(status: Status) {\n super(status);\n }\n}\n\nexport class UnrecoverablePlError extends PlError {\n name = \"UnrecoverablePlError\";\n constructor(status: Status) {\n super(status);\n }\n}\n\nexport class UnauthenticatedError extends Error {\n name = \"UnauthenticatedError\";\n constructor(message: string) {\n super(\"LoginFailed: \" + message);\n }\n}\n\nexport class DisconnectedError extends Error {\n name = \"DisconnectedError\";\n constructor(message: string) {\n super(\"Disconnected: \" + message);\n }\n}\n\nexport class RESTError extends PlError {\n name = \"RESTError\";\n constructor(status: Status, opts?: ErrorOptions) {\n super(status, opts);\n }\n}\n\nexport function rethrowMeaningfulError(error: any, wrapIfUnknown: boolean = false): never {\n if (isUnauthenticated(error)) {\n if (error instanceof UnauthenticatedError) throw error;\n throw new UnauthenticatedError(error.message);\n }\n if (isConnectionProblem(error)) {\n if (error instanceof DisconnectedError) throw error;\n throw new DisconnectedError(error.message);\n }\n if (isTimeoutOrCancelError(error)) throw new Aborted(error);\n if (wrapIfUnknown) {\n const message = error.message || String(error) || \"Unknown error\";\n throw new Error(message, { cause: error });\n } else throw error;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","names":[],"sources":["../../src/core/errors.ts"],"sourcesContent":["import type { Status } from \"../proto-grpc/github.com/googleapis/googleapis/google/rpc/status\";\nimport { Aborted } from \"@milaboratories/ts-helpers\";\nimport { Code } from \"../proto-grpc/google/rpc/code\";\n\nexport function isConnectionProblem(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof DisconnectedError) return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"UNAVAILABLE\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.UNAVAILABLE) return true;\n if ((err as any).cause !== undefined && !nested)\n return isConnectionProblem((err as any).cause, true);\n return false;\n}\n\nexport function isUnauthenticated(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof UnauthenticatedError) return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"UNAUTHENTICATED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.UNAUTHENTICATED)\n return true;\n if ((err as any).cause !== undefined && !nested)\n return isUnauthenticated((err as any).cause, true);\n return false;\n}\n\nexport function isTimeoutError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"TimeoutError\") return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"DEADLINE_EXCEEDED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.DEADLINE_EXCEEDED)\n return true;\n if ((err as any).cause !== undefined && !nested) return isTimeoutError((err as any).cause, true);\n return false;\n}\n\nexport function isCancelError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"RpcError\" && (err as any).code == \"CANCELLED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.CANCELLED) return true;\n if ((err as any).cause !== undefined && !nested) return isCancelError((err as any).cause, true);\n return false;\n}\n\nexport function isAbortedError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof Aborted || (err as any).name == \"AbortError\") return true;\n if ((err as any).code == \"ABORT_ERR\") return true;\n if (err instanceof DOMException && err.code === DOMException.ABORT_ERR) return true; // WebSocket error\n if ((err as any).name == \"RpcError\" && (err as any).code == \"ABORTED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.ABORTED) return true;\n if ((err as any).cause !== undefined && !nested) return isAbortedError((err as any).cause, true);\n return false;\n}\n\nexport function isTimeoutOrCancelError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (isAbortedError(err, true)) return true;\n if (isTimeoutError(err, true)) return true;\n if (isCancelError(err, true)) return true;\n if ((err as any).cause !== undefined && !nested)\n return isTimeoutOrCancelError((err as any).cause, true);\n return false;\n}\n\nexport function isUnimplementedError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"RpcError\" && (err as any).code == \"UNIMPLEMENTED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.UNIMPLEMENTED)\n return true;\n if ((err as any).cause !== undefined && !nested)\n return isUnimplementedError((err as any).cause, true);\n return false;\n}\n\nexport function isNotFoundError(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if ((err as any).name == \"RpcError\" && (err as any).code == \"NOT_FOUND\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.NOT_FOUND) return true;\n if ((err as any).cause !== undefined && !nested) return isNotFoundError((err as any).cause, true);\n return err instanceof RecoverablePlError && err.status.code === PlErrorCodeNotFound;\n}\n\nexport const PlErrorCodeNotFound: number = Code.NOT_FOUND;\n\nexport class PlError extends Error {\n name = \"PlError\";\n constructor(\n public readonly status: Status,\n opts?: ErrorOptions,\n ) {\n super(`code=${status.code} ${status.message}`, opts);\n }\n}\n\nexport function throwPlNotFoundError(message: string): never {\n throw new RecoverablePlError({ code: PlErrorCodeNotFound, message, details: [] });\n}\n\nexport class RecoverablePlError extends PlError {\n name = \"RecoverablePlError\";\n constructor(status: Status) {\n super(status);\n }\n}\n\nexport class UnrecoverablePlError extends PlError {\n name = \"UnrecoverablePlError\";\n constructor(status: Status) {\n super(status);\n }\n}\n\nexport class UnauthenticatedError extends Error {\n name = \"UnauthenticatedError\";\n constructor(message: string) {\n super(\"LoginFailed: \" + message);\n }\n}\n\nexport class DisconnectedError extends Error {\n name = \"DisconnectedError\";\n constructor(message: string) {\n super(\"Disconnected: \" + message);\n }\n}\n\nexport class RESTError extends PlError {\n name = \"RESTError\";\n constructor(status: Status, opts?: ErrorOptions) {\n super(status, opts);\n }\n}\n\nexport function rethrowMeaningfulError(error: any, wrapIfUnknown: boolean = false): never {\n if (isUnauthenticated(error)) {\n if (error instanceof UnauthenticatedError) throw error;\n throw new UnauthenticatedError(error.message);\n }\n if (isConnectionProblem(error)) {\n if (error instanceof DisconnectedError) throw error;\n throw new DisconnectedError(error.message);\n }\n if (isTimeoutOrCancelError(error)) throw new Aborted(error);\n if (wrapIfUnknown) {\n const message = error.message || String(error) || \"Unknown error\";\n throw new Error(message, { cause: error });\n } else throw error;\n}\n"],"mappings":"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"}
|
package/dist/core/final.cjs
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
const require_types = require(
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_types = require("./types.cjs");
|
|
3
3
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
4
|
-
|
|
5
4
|
//#region src/core/final.ts
|
|
6
5
|
function readyOrDuplicateOrError(r) {
|
|
7
6
|
return r.resourceReady || require_types.isNotNullResourceId(r.originalResourceId) || require_types.isNotNullResourceId(r.error);
|
|
@@ -69,7 +68,7 @@ const DefaultFinalResourceDataPredicate = (r) => {
|
|
|
69
68
|
}
|
|
70
69
|
return false;
|
|
71
70
|
};
|
|
72
|
-
|
|
73
71
|
//#endregion
|
|
74
72
|
exports.DefaultFinalResourceDataPredicate = DefaultFinalResourceDataPredicate;
|
|
73
|
+
|
|
75
74
|
//# sourceMappingURL=final.cjs.map
|
package/dist/core/final.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"final.cjs","names":["isNotNullResourceId","isNullResourceId","ResourceTypeName","getField","ResourceTypePrefix"],"sources":["../../src/core/final.ts"],"sourcesContent":["import type { Optional } from \"utility-types\";\nimport type { BasicResourceData, ResourceData } from \"./types\";\nimport { getField, isNotNullResourceId, isNullResourceId } from \"./types\";\nimport { ResourceTypeName, ResourceTypePrefix } from \"@milaboratories/pl-model-common\";\nexport { ResourceTypeName, ResourceTypePrefix };\n\n/**\n * Function is used to guide multiple layers of caching in pl-client and derived pl-tree.\n *\n * This function defines expected resource-specific state mutation behaviour,\n * if it returns true, system will expect that this data will never change as long as resource exist.\n *\n * If resource data contain information about fields, if should be taken into account, fields are undefined,\n * \"final\" state should be calculated for \"basic\" part of resource data only.\n */\nexport type FinalResourceDataPredicate = (\n resourceData: Optional<ResourceData, \"fields\">,\n) => boolean;\n\nfunction readyOrDuplicateOrError(r: ResourceData | BasicResourceData): boolean {\n return (\n r.resourceReady || isNotNullResourceId(r.originalResourceId) || isNotNullResourceId(r.error)\n );\n}\n\nfunction readyAndHasAllOutputsFilled(r: Optional<ResourceData, \"fields\">): boolean {\n if (!readyOrDuplicateOrError(r)) return false;\n if (!r.outputsLocked) return false;\n if (r.fields === undefined) return true; // if fields are not provided basic resource state is not expected to change in the future\n for (const f of r.fields)\n if (isNullResourceId(f.error) && (isNullResourceId(f.value) || !f.valueIsFinal)) return false;\n return true;\n}\n\n// solely for logging\nconst unknownResourceTypeNames = new Set<string>();\n\n/** Default implementation, defining behaviour for built-in resource types. */\nexport const DefaultFinalResourceDataPredicate: FinalResourceDataPredicate = (r): boolean => {\n switch (r.type.name) {\n case ResourceTypeName.StreamManager: {\n if (!readyOrDuplicateOrError(r)) return false;\n if (r.fields === undefined) return true; // if fields are not provided basic resource state is not expected to change in the future\n if (isNotNullResourceId(r.error)) return true;\n const downloadable = getField(r as ResourceData, \"downloadable\");\n const stream = getField(r as ResourceData, \"stream\");\n return stream.value === downloadable.value;\n }\n case ResourceTypeName.StdMap:\n case ResourceTypeName.StdMapSlash:\n case ResourceTypeName.EphStdMap:\n case ResourceTypeName.PFrame:\n case ResourceTypeName.ParquetChunk:\n case ResourceTypeName.BContext:\n case ResourceTypeName.BlockPackCustom:\n case ResourceTypeName.BinaryMap:\n case ResourceTypeName.BinaryValue:\n case ResourceTypeName.BlobMap:\n case ResourceTypeName.BResolveSingle:\n case ResourceTypeName.BResolveSingleNoResult:\n case ResourceTypeName.BQueryResult:\n case ResourceTypeName.TengoTemplate:\n case ResourceTypeName.TengoLib:\n case ResourceTypeName.SoftwareInfo:\n case ResourceTypeName.Dummy:\n return readyOrDuplicateOrError(r);\n case ResourceTypeName.JsonResourceError:\n return r.type.version === \"1\";\n case ResourceTypeName.JsonObject:\n case ResourceTypeName.JsonGzObject:\n case ResourceTypeName.JsonString:\n case ResourceTypeName.JsonArray:\n case ResourceTypeName.JsonNumber:\n case ResourceTypeName.BContextEnd:\n case ResourceTypeName.FrontendFromUrl:\n case ResourceTypeName.FrontendFromFolder:\n case ResourceTypeName.BObjectSpec:\n case ResourceTypeName.Blob:\n case ResourceTypeName.Null:\n case ResourceTypeName.Binary:\n case ResourceTypeName.LSProvider:\n return true;\n case ResourceTypeName.UserProject:\n case ResourceTypeName.Projects:\n case ResourceTypeName.ClientRoot:\n return false;\n default:\n if (r.type.name.startsWith(ResourceTypePrefix.Blob)) return true;\n else if (\n r.type.name.startsWith(ResourceTypePrefix.BlobUpload) ||\n r.type.name.startsWith(ResourceTypePrefix.BlobIndex)\n ) {\n return readyAndHasAllOutputsFilled(r);\n } else if (r.type.name.startsWith(ResourceTypePrefix.PColumnData)) {\n return readyOrDuplicateOrError(r);\n } else if (r.type.name.startsWith(ResourceTypePrefix.StreamWorkdir)) {\n return readyOrDuplicateOrError(r);\n } else {\n // Unknown resource type detected\n // Set used to log this message only once\n if (!unknownResourceTypeNames.has(r.type.name)) {\n console.log(\"UNKNOWN RESOURCE TYPE: \" + r.type.name);\n unknownResourceTypeNames.add(r.type.name);\n }\n }\n }\n return false;\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"final.cjs","names":["isNotNullResourceId","isNullResourceId","ResourceTypeName","getField","ResourceTypePrefix"],"sources":["../../src/core/final.ts"],"sourcesContent":["import type { Optional } from \"utility-types\";\nimport type { BasicResourceData, ResourceData } from \"./types\";\nimport { getField, isNotNullResourceId, isNullResourceId } from \"./types\";\nimport { ResourceTypeName, ResourceTypePrefix } from \"@milaboratories/pl-model-common\";\nexport { ResourceTypeName, ResourceTypePrefix };\n\n/**\n * Function is used to guide multiple layers of caching in pl-client and derived pl-tree.\n *\n * This function defines expected resource-specific state mutation behaviour,\n * if it returns true, system will expect that this data will never change as long as resource exist.\n *\n * If resource data contain information about fields, if should be taken into account, fields are undefined,\n * \"final\" state should be calculated for \"basic\" part of resource data only.\n */\nexport type FinalResourceDataPredicate = (\n resourceData: Optional<ResourceData, \"fields\">,\n) => boolean;\n\nfunction readyOrDuplicateOrError(r: ResourceData | BasicResourceData): boolean {\n return (\n r.resourceReady || isNotNullResourceId(r.originalResourceId) || isNotNullResourceId(r.error)\n );\n}\n\nfunction readyAndHasAllOutputsFilled(r: Optional<ResourceData, \"fields\">): boolean {\n if (!readyOrDuplicateOrError(r)) return false;\n if (!r.outputsLocked) return false;\n if (r.fields === undefined) return true; // if fields are not provided basic resource state is not expected to change in the future\n for (const f of r.fields)\n if (isNullResourceId(f.error) && (isNullResourceId(f.value) || !f.valueIsFinal)) return false;\n return true;\n}\n\n// solely for logging\nconst unknownResourceTypeNames = new Set<string>();\n\n/** Default implementation, defining behaviour for built-in resource types. */\nexport const DefaultFinalResourceDataPredicate: FinalResourceDataPredicate = (r): boolean => {\n switch (r.type.name) {\n case ResourceTypeName.StreamManager: {\n if (!readyOrDuplicateOrError(r)) return false;\n if (r.fields === undefined) return true; // if fields are not provided basic resource state is not expected to change in the future\n if (isNotNullResourceId(r.error)) return true;\n const downloadable = getField(r as ResourceData, \"downloadable\");\n const stream = getField(r as ResourceData, \"stream\");\n return stream.value === downloadable.value;\n }\n case ResourceTypeName.StdMap:\n case ResourceTypeName.StdMapSlash:\n case ResourceTypeName.EphStdMap:\n case ResourceTypeName.PFrame:\n case ResourceTypeName.ParquetChunk:\n case ResourceTypeName.BContext:\n case ResourceTypeName.BlockPackCustom:\n case ResourceTypeName.BinaryMap:\n case ResourceTypeName.BinaryValue:\n case ResourceTypeName.BlobMap:\n case ResourceTypeName.BResolveSingle:\n case ResourceTypeName.BResolveSingleNoResult:\n case ResourceTypeName.BQueryResult:\n case ResourceTypeName.TengoTemplate:\n case ResourceTypeName.TengoLib:\n case ResourceTypeName.SoftwareInfo:\n case ResourceTypeName.Dummy:\n return readyOrDuplicateOrError(r);\n case ResourceTypeName.JsonResourceError:\n return r.type.version === \"1\";\n case ResourceTypeName.JsonObject:\n case ResourceTypeName.JsonGzObject:\n case ResourceTypeName.JsonString:\n case ResourceTypeName.JsonArray:\n case ResourceTypeName.JsonNumber:\n case ResourceTypeName.BContextEnd:\n case ResourceTypeName.FrontendFromUrl:\n case ResourceTypeName.FrontendFromFolder:\n case ResourceTypeName.BObjectSpec:\n case ResourceTypeName.Blob:\n case ResourceTypeName.Null:\n case ResourceTypeName.Binary:\n case ResourceTypeName.LSProvider:\n return true;\n case ResourceTypeName.UserProject:\n case ResourceTypeName.Projects:\n case ResourceTypeName.ClientRoot:\n return false;\n default:\n if (r.type.name.startsWith(ResourceTypePrefix.Blob)) return true;\n else if (\n r.type.name.startsWith(ResourceTypePrefix.BlobUpload) ||\n r.type.name.startsWith(ResourceTypePrefix.BlobIndex)\n ) {\n return readyAndHasAllOutputsFilled(r);\n } else if (r.type.name.startsWith(ResourceTypePrefix.PColumnData)) {\n return readyOrDuplicateOrError(r);\n } else if (r.type.name.startsWith(ResourceTypePrefix.StreamWorkdir)) {\n return readyOrDuplicateOrError(r);\n } else {\n // Unknown resource type detected\n // Set used to log this message only once\n if (!unknownResourceTypeNames.has(r.type.name)) {\n console.log(\"UNKNOWN RESOURCE TYPE: \" + r.type.name);\n unknownResourceTypeNames.add(r.type.name);\n }\n }\n }\n return false;\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"final.d.ts","names":[],"sources":["../../src/core/final.ts"],"mappings":";;;;;;AAeA;;;;;;;;KAAY,0BAAA,IACV,YAAA,EAAc,QAAA,CAAS,YAAA;AAsBzB;AAAA,cAAa,iCAAA,EAAmC,0BAAA"}
|
package/dist/core/final.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { getField, isNotNullResourceId, isNullResourceId } from "./types.js";
|
|
2
2
|
import { ResourceTypeName, ResourceTypePrefix } from "@milaboratories/pl-model-common";
|
|
3
|
-
|
|
4
3
|
//#region src/core/final.ts
|
|
5
4
|
function readyOrDuplicateOrError(r) {
|
|
6
5
|
return r.resourceReady || isNotNullResourceId(r.originalResourceId) || isNotNullResourceId(r.error);
|
|
@@ -68,7 +67,7 @@ const DefaultFinalResourceDataPredicate = (r) => {
|
|
|
68
67
|
}
|
|
69
68
|
return false;
|
|
70
69
|
};
|
|
71
|
-
|
|
72
70
|
//#endregion
|
|
73
71
|
export { DefaultFinalResourceDataPredicate, ResourceTypeName, ResourceTypePrefix };
|
|
72
|
+
|
|
74
73
|
//# sourceMappingURL=final.js.map
|
package/dist/core/final.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"final.js","names":[],"sources":["../../src/core/final.ts"],"sourcesContent":["import type { Optional } from \"utility-types\";\nimport type { BasicResourceData, ResourceData } from \"./types\";\nimport { getField, isNotNullResourceId, isNullResourceId } from \"./types\";\nimport { ResourceTypeName, ResourceTypePrefix } from \"@milaboratories/pl-model-common\";\nexport { ResourceTypeName, ResourceTypePrefix };\n\n/**\n * Function is used to guide multiple layers of caching in pl-client and derived pl-tree.\n *\n * This function defines expected resource-specific state mutation behaviour,\n * if it returns true, system will expect that this data will never change as long as resource exist.\n *\n * If resource data contain information about fields, if should be taken into account, fields are undefined,\n * \"final\" state should be calculated for \"basic\" part of resource data only.\n */\nexport type FinalResourceDataPredicate = (\n resourceData: Optional<ResourceData, \"fields\">,\n) => boolean;\n\nfunction readyOrDuplicateOrError(r: ResourceData | BasicResourceData): boolean {\n return (\n r.resourceReady || isNotNullResourceId(r.originalResourceId) || isNotNullResourceId(r.error)\n );\n}\n\nfunction readyAndHasAllOutputsFilled(r: Optional<ResourceData, \"fields\">): boolean {\n if (!readyOrDuplicateOrError(r)) return false;\n if (!r.outputsLocked) return false;\n if (r.fields === undefined) return true; // if fields are not provided basic resource state is not expected to change in the future\n for (const f of r.fields)\n if (isNullResourceId(f.error) && (isNullResourceId(f.value) || !f.valueIsFinal)) return false;\n return true;\n}\n\n// solely for logging\nconst unknownResourceTypeNames = new Set<string>();\n\n/** Default implementation, defining behaviour for built-in resource types. */\nexport const DefaultFinalResourceDataPredicate: FinalResourceDataPredicate = (r): boolean => {\n switch (r.type.name) {\n case ResourceTypeName.StreamManager: {\n if (!readyOrDuplicateOrError(r)) return false;\n if (r.fields === undefined) return true; // if fields are not provided basic resource state is not expected to change in the future\n if (isNotNullResourceId(r.error)) return true;\n const downloadable = getField(r as ResourceData, \"downloadable\");\n const stream = getField(r as ResourceData, \"stream\");\n return stream.value === downloadable.value;\n }\n case ResourceTypeName.StdMap:\n case ResourceTypeName.StdMapSlash:\n case ResourceTypeName.EphStdMap:\n case ResourceTypeName.PFrame:\n case ResourceTypeName.ParquetChunk:\n case ResourceTypeName.BContext:\n case ResourceTypeName.BlockPackCustom:\n case ResourceTypeName.BinaryMap:\n case ResourceTypeName.BinaryValue:\n case ResourceTypeName.BlobMap:\n case ResourceTypeName.BResolveSingle:\n case ResourceTypeName.BResolveSingleNoResult:\n case ResourceTypeName.BQueryResult:\n case ResourceTypeName.TengoTemplate:\n case ResourceTypeName.TengoLib:\n case ResourceTypeName.SoftwareInfo:\n case ResourceTypeName.Dummy:\n return readyOrDuplicateOrError(r);\n case ResourceTypeName.JsonResourceError:\n return r.type.version === \"1\";\n case ResourceTypeName.JsonObject:\n case ResourceTypeName.JsonGzObject:\n case ResourceTypeName.JsonString:\n case ResourceTypeName.JsonArray:\n case ResourceTypeName.JsonNumber:\n case ResourceTypeName.BContextEnd:\n case ResourceTypeName.FrontendFromUrl:\n case ResourceTypeName.FrontendFromFolder:\n case ResourceTypeName.BObjectSpec:\n case ResourceTypeName.Blob:\n case ResourceTypeName.Null:\n case ResourceTypeName.Binary:\n case ResourceTypeName.LSProvider:\n return true;\n case ResourceTypeName.UserProject:\n case ResourceTypeName.Projects:\n case ResourceTypeName.ClientRoot:\n return false;\n default:\n if (r.type.name.startsWith(ResourceTypePrefix.Blob)) return true;\n else if (\n r.type.name.startsWith(ResourceTypePrefix.BlobUpload) ||\n r.type.name.startsWith(ResourceTypePrefix.BlobIndex)\n ) {\n return readyAndHasAllOutputsFilled(r);\n } else if (r.type.name.startsWith(ResourceTypePrefix.PColumnData)) {\n return readyOrDuplicateOrError(r);\n } else if (r.type.name.startsWith(ResourceTypePrefix.StreamWorkdir)) {\n return readyOrDuplicateOrError(r);\n } else {\n // Unknown resource type detected\n // Set used to log this message only once\n if (!unknownResourceTypeNames.has(r.type.name)) {\n console.log(\"UNKNOWN RESOURCE TYPE: \" + r.type.name);\n unknownResourceTypeNames.add(r.type.name);\n }\n }\n }\n return false;\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"final.js","names":[],"sources":["../../src/core/final.ts"],"sourcesContent":["import type { Optional } from \"utility-types\";\nimport type { BasicResourceData, ResourceData } from \"./types\";\nimport { getField, isNotNullResourceId, isNullResourceId } from \"./types\";\nimport { ResourceTypeName, ResourceTypePrefix } from \"@milaboratories/pl-model-common\";\nexport { ResourceTypeName, ResourceTypePrefix };\n\n/**\n * Function is used to guide multiple layers of caching in pl-client and derived pl-tree.\n *\n * This function defines expected resource-specific state mutation behaviour,\n * if it returns true, system will expect that this data will never change as long as resource exist.\n *\n * If resource data contain information about fields, if should be taken into account, fields are undefined,\n * \"final\" state should be calculated for \"basic\" part of resource data only.\n */\nexport type FinalResourceDataPredicate = (\n resourceData: Optional<ResourceData, \"fields\">,\n) => boolean;\n\nfunction readyOrDuplicateOrError(r: ResourceData | BasicResourceData): boolean {\n return (\n r.resourceReady || isNotNullResourceId(r.originalResourceId) || isNotNullResourceId(r.error)\n );\n}\n\nfunction readyAndHasAllOutputsFilled(r: Optional<ResourceData, \"fields\">): boolean {\n if (!readyOrDuplicateOrError(r)) return false;\n if (!r.outputsLocked) return false;\n if (r.fields === undefined) return true; // if fields are not provided basic resource state is not expected to change in the future\n for (const f of r.fields)\n if (isNullResourceId(f.error) && (isNullResourceId(f.value) || !f.valueIsFinal)) return false;\n return true;\n}\n\n// solely for logging\nconst unknownResourceTypeNames = new Set<string>();\n\n/** Default implementation, defining behaviour for built-in resource types. */\nexport const DefaultFinalResourceDataPredicate: FinalResourceDataPredicate = (r): boolean => {\n switch (r.type.name) {\n case ResourceTypeName.StreamManager: {\n if (!readyOrDuplicateOrError(r)) return false;\n if (r.fields === undefined) return true; // if fields are not provided basic resource state is not expected to change in the future\n if (isNotNullResourceId(r.error)) return true;\n const downloadable = getField(r as ResourceData, \"downloadable\");\n const stream = getField(r as ResourceData, \"stream\");\n return stream.value === downloadable.value;\n }\n case ResourceTypeName.StdMap:\n case ResourceTypeName.StdMapSlash:\n case ResourceTypeName.EphStdMap:\n case ResourceTypeName.PFrame:\n case ResourceTypeName.ParquetChunk:\n case ResourceTypeName.BContext:\n case ResourceTypeName.BlockPackCustom:\n case ResourceTypeName.BinaryMap:\n case ResourceTypeName.BinaryValue:\n case ResourceTypeName.BlobMap:\n case ResourceTypeName.BResolveSingle:\n case ResourceTypeName.BResolveSingleNoResult:\n case ResourceTypeName.BQueryResult:\n case ResourceTypeName.TengoTemplate:\n case ResourceTypeName.TengoLib:\n case ResourceTypeName.SoftwareInfo:\n case ResourceTypeName.Dummy:\n return readyOrDuplicateOrError(r);\n case ResourceTypeName.JsonResourceError:\n return r.type.version === \"1\";\n case ResourceTypeName.JsonObject:\n case ResourceTypeName.JsonGzObject:\n case ResourceTypeName.JsonString:\n case ResourceTypeName.JsonArray:\n case ResourceTypeName.JsonNumber:\n case ResourceTypeName.BContextEnd:\n case ResourceTypeName.FrontendFromUrl:\n case ResourceTypeName.FrontendFromFolder:\n case ResourceTypeName.BObjectSpec:\n case ResourceTypeName.Blob:\n case ResourceTypeName.Null:\n case ResourceTypeName.Binary:\n case ResourceTypeName.LSProvider:\n return true;\n case ResourceTypeName.UserProject:\n case ResourceTypeName.Projects:\n case ResourceTypeName.ClientRoot:\n return false;\n default:\n if (r.type.name.startsWith(ResourceTypePrefix.Blob)) return true;\n else if (\n r.type.name.startsWith(ResourceTypePrefix.BlobUpload) ||\n r.type.name.startsWith(ResourceTypePrefix.BlobIndex)\n ) {\n return readyAndHasAllOutputsFilled(r);\n } else if (r.type.name.startsWith(ResourceTypePrefix.PColumnData)) {\n return readyOrDuplicateOrError(r);\n } else if (r.type.name.startsWith(ResourceTypePrefix.StreamWorkdir)) {\n return readyOrDuplicateOrError(r);\n } else {\n // Unknown resource type detected\n // Set used to log this message only once\n if (!unknownResourceTypeNames.has(r.type.name)) {\n console.log(\"UNKNOWN RESOURCE TYPE: \" + r.type.name);\n unknownResourceTypeNames.add(r.type.name);\n }\n }\n }\n return false;\n};\n"],"mappings":";;;AAmBA,SAAS,wBAAwB,GAA8C;AAC7E,QACE,EAAE,iBAAiB,oBAAoB,EAAE,mBAAmB,IAAI,oBAAoB,EAAE,MAAM;;AAIhG,SAAS,4BAA4B,GAA8C;AACjF,KAAI,CAAC,wBAAwB,EAAE,CAAE,QAAO;AACxC,KAAI,CAAC,EAAE,cAAe,QAAO;AAC7B,KAAI,EAAE,WAAW,KAAA,EAAW,QAAO;AACnC,MAAK,MAAM,KAAK,EAAE,OAChB,KAAI,iBAAiB,EAAE,MAAM,KAAK,iBAAiB,EAAE,MAAM,IAAI,CAAC,EAAE,cAAe,QAAO;AAC1F,QAAO;;AAIT,MAAM,2CAA2B,IAAI,KAAa;;AAGlD,MAAa,qCAAiE,MAAe;AAC3F,SAAQ,EAAE,KAAK,MAAf;EACE,KAAK,iBAAiB,eAAe;AACnC,OAAI,CAAC,wBAAwB,EAAE,CAAE,QAAO;AACxC,OAAI,EAAE,WAAW,KAAA,EAAW,QAAO;AACnC,OAAI,oBAAoB,EAAE,MAAM,CAAE,QAAO;GACzC,MAAM,eAAe,SAAS,GAAmB,eAAe;AAEhE,UADe,SAAS,GAAmB,SAAS,CACtC,UAAU,aAAa;;EAEvC,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB,MACpB,QAAO,wBAAwB,EAAE;EACnC,KAAK,iBAAiB,kBACpB,QAAO,EAAE,KAAK,YAAY;EAC5B,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB,WACpB,QAAO;EACT,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB,WACpB,QAAO;EACT,QACE,KAAI,EAAE,KAAK,KAAK,WAAW,mBAAmB,KAAK,CAAE,QAAO;WAE1D,EAAE,KAAK,KAAK,WAAW,mBAAmB,WAAW,IACrD,EAAE,KAAK,KAAK,WAAW,mBAAmB,UAAU,CAEpD,QAAO,4BAA4B,EAAE;WAC5B,EAAE,KAAK,KAAK,WAAW,mBAAmB,YAAY,CAC/D,QAAO,wBAAwB,EAAE;WACxB,EAAE,KAAK,KAAK,WAAW,mBAAmB,cAAc,CACjE,QAAO,wBAAwB,EAAE;WAI7B,CAAC,yBAAyB,IAAI,EAAE,KAAK,KAAK,EAAE;AAC9C,WAAQ,IAAI,4BAA4B,EAAE,KAAK,KAAK;AACpD,4BAAyB,IAAI,EAAE,KAAK,KAAK;;;AAIjD,QAAO"}
|
package/dist/core/ll_client.cjs
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
const require_api = require(
|
|
3
|
-
const require_code = require(
|
|
4
|
-
const require_errors = require(
|
|
5
|
-
const require_config = require(
|
|
6
|
-
const require_api_client = require(
|
|
7
|
-
const require_ll_transaction = require(
|
|
8
|
-
const require_pl = require(
|
|
9
|
-
const require_auth = require(
|
|
10
|
-
const require_index = require(
|
|
11
|
-
const require_websocket_stream = require(
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_api = require("../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs");
|
|
3
|
+
const require_code = require("../proto-grpc/google/rpc/code.cjs");
|
|
4
|
+
const require_errors = require("./errors.cjs");
|
|
5
|
+
const require_config = require("./config.cjs");
|
|
6
|
+
const require_api_client = require("../proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs");
|
|
7
|
+
const require_ll_transaction = require("./ll_transaction.cjs");
|
|
8
|
+
const require_pl = require("../util/pl.cjs");
|
|
9
|
+
const require_auth = require("./auth.cjs");
|
|
10
|
+
const require_index = require("../proto-rest/index.cjs");
|
|
11
|
+
const require_websocket_stream = require("./websocket_stream.cjs");
|
|
12
12
|
let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
|
|
13
13
|
let _grpc_grpc_js = require("@grpc/grpc-js");
|
|
14
14
|
let _protobuf_ts_grpc_transport = require("@protobuf-ts/grpc-transport");
|
|
15
15
|
let undici = require("undici");
|
|
16
16
|
let _milaboratories_pl_http = require("@milaboratories/pl-http");
|
|
17
17
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
18
|
-
|
|
19
18
|
//#region src/core/ll_client.ts
|
|
20
19
|
var WireClientProviderImpl = class {
|
|
21
20
|
client = void 0;
|
|
@@ -379,6 +378,18 @@ var LLPlClient = class LLPlClient {
|
|
|
379
378
|
if (cl instanceof require_api_client.PlatformClient) return (await cl.authMethods({})).response;
|
|
380
379
|
else return (0, _milaboratories_ts_helpers.notEmpty)((await cl.GET("/v1/auth/methods")).data, "REST: empty response for auth methods request");
|
|
381
380
|
}
|
|
381
|
+
async listUserResources(opts = {}) {
|
|
382
|
+
const cl = this.clientProvider.get();
|
|
383
|
+
if (!(cl instanceof require_api_client.PlatformClient)) throw new Error("ListUserResources requires gRPC wire protocol; REST is not supported");
|
|
384
|
+
const call = cl.listUserResources({
|
|
385
|
+
login: opts.login ?? "",
|
|
386
|
+
startFrom: opts.startFrom ?? 0n,
|
|
387
|
+
limit: opts.limit ?? 0
|
|
388
|
+
});
|
|
389
|
+
const responses = [];
|
|
390
|
+
for await (const msg of call.responses) responses.push(msg);
|
|
391
|
+
return responses;
|
|
392
|
+
}
|
|
382
393
|
async txSync(txId) {
|
|
383
394
|
const cl = this.clientProvider.get();
|
|
384
395
|
if (cl instanceof require_api_client.PlatformClient) await cl.txSync({ txId: BigInt(txId) });
|
|
@@ -420,7 +431,7 @@ var LLPlClient = class LLPlClient {
|
|
|
420
431
|
await this.httpDispatcher.destroy();
|
|
421
432
|
}
|
|
422
433
|
};
|
|
423
|
-
|
|
424
434
|
//#endregion
|
|
425
435
|
exports.LLPlClient = LLPlClient;
|
|
436
|
+
|
|
426
437
|
//# sourceMappingURL=ll_client.cjs.map
|