@milaboratories/pl-client 3.2.4 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/client.cjs +24 -56
- package/dist/core/client.cjs.map +1 -1
- package/dist/core/client.d.ts +12 -8
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +26 -58
- package/dist/core/client.js.map +1 -1
- package/dist/core/errors.cjs +20 -0
- package/dist/core/errors.cjs.map +1 -1
- package/dist/core/errors.d.ts +6 -1
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +19 -1
- package/dist/core/errors.js.map +1 -1
- package/dist/core/final.cjs +6 -5
- package/dist/core/final.cjs.map +1 -1
- package/dist/core/final.d.ts.map +1 -1
- package/dist/core/final.js +7 -6
- package/dist/core/final.js.map +1 -1
- package/dist/core/ll_client.cjs +18 -1
- package/dist/core/ll_client.cjs.map +1 -1
- package/dist/core/ll_client.d.ts +6 -2
- package/dist/core/ll_client.d.ts.map +1 -1
- package/dist/core/ll_client.js +19 -2
- package/dist/core/ll_client.js.map +1 -1
- package/dist/core/transaction.cjs +109 -75
- package/dist/core/transaction.cjs.map +1 -1
- package/dist/core/transaction.d.ts +30 -22
- package/dist/core/transaction.d.ts.map +1 -1
- package/dist/core/transaction.js +111 -76
- package/dist/core/transaction.js.map +1 -1
- package/dist/core/type_conversion.cjs +14 -6
- package/dist/core/type_conversion.cjs.map +1 -1
- package/dist/core/type_conversion.js +14 -6
- package/dist/core/type_conversion.js.map +1 -1
- package/dist/core/types.cjs +77 -17
- package/dist/core/types.cjs.map +1 -1
- package/dist/core/types.d.ts +49 -26
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +66 -14
- package/dist/core/types.js.map +1 -1
- package/dist/core/user_resources.cjs +181 -0
- package/dist/core/user_resources.cjs.map +1 -0
- package/dist/core/user_resources.d.ts +75 -0
- package/dist/core/user_resources.d.ts.map +1 -0
- package/dist/core/user_resources.js +180 -0
- package/dist/core/user_resources.js.map +1 -0
- package/dist/helpers/poll.cjs +4 -4
- package/dist/helpers/poll.cjs.map +1 -1
- package/dist/helpers/poll.d.ts +3 -3
- package/dist/helpers/poll.d.ts.map +1 -1
- package/dist/helpers/poll.js +5 -5
- package/dist/helpers/poll.js.map +1 -1
- package/dist/helpers/tx_helpers.cjs +1 -1
- package/dist/helpers/tx_helpers.cjs.map +1 -1
- package/dist/helpers/tx_helpers.d.ts +3 -3
- package/dist/helpers/tx_helpers.d.ts.map +1 -1
- package/dist/helpers/tx_helpers.js +2 -2
- package/dist/helpers/tx_helpers.js.map +1 -1
- package/dist/index.cjs +16 -5
- package/dist/index.d.ts +5 -4
- package/dist/index.js +5 -4
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs +724 -188
- 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 +34 -9
- 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 +37 -5
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js +34 -9
- 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 +326 -136
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js +724 -188
- 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 +18 -7
- 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 +11 -7
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js +18 -7
- 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 +57 -2
- 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 +26 -3
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts.map +1 -1
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js +57 -3
- package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js.map +1 -1
- package/dist/proto-rest/plapi.d.ts +421 -207
- package/dist/proto-rest/plapi.d.ts.map +1 -1
- package/dist/test/test_config.cjs +6 -3
- package/dist/test/test_config.cjs.map +1 -1
- package/dist/test/test_config.d.ts.map +1 -1
- package/dist/test/test_config.js +7 -4
- package/dist/test/test_config.js.map +1 -1
- package/package.json +5 -5
- package/src/core/client.ts +58 -103
- package/src/core/errors.ts +23 -0
- package/src/core/final.ts +16 -6
- package/src/core/ll_client.ts +39 -3
- package/src/core/ll_transaction.test.ts +41 -6
- package/src/core/transaction.ts +176 -86
- package/src/core/type_conversion.ts +24 -9
- package/src/core/types.ts +147 -41
- package/src/core/user_resources.ts +332 -0
- package/src/helpers/poll.ts +15 -8
- package/src/helpers/state_helpers.ts +2 -2
- package/src/helpers/tx_helpers.ts +5 -5
- package/src/index.ts +1 -0
- package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.ts +61 -14
- package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.ts +1045 -379
- package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.ts +33 -18
- package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.ts +75 -6
- package/src/proto-grpc/google/protobuf/descriptor.ts +5 -2
- package/src/proto-rest/plapi.ts +447 -225
- package/src/test/test_config.ts +8 -5
package/dist/core/errors.cjs
CHANGED
|
@@ -18,6 +18,14 @@ function isUnauthenticated(err, nested = false) {
|
|
|
18
18
|
if (err.cause !== void 0 && !nested) return isUnauthenticated(err.cause, true);
|
|
19
19
|
return false;
|
|
20
20
|
}
|
|
21
|
+
function isPermissionDenied(err, nested = false) {
|
|
22
|
+
if (err === void 0 || err === null) return false;
|
|
23
|
+
if (err instanceof PermissionDeniedError) return true;
|
|
24
|
+
if (err.name == "RpcError" && err.code == "PERMISSION_DENIED") return true;
|
|
25
|
+
if (err.name == "RESTError" && err.status.code == require_code.Code.PERMISSION_DENIED) return true;
|
|
26
|
+
if (err.cause !== void 0 && !nested) return isPermissionDenied(err.cause, true);
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
21
29
|
function isTimeoutError(err, nested = false) {
|
|
22
30
|
if (err === void 0 || err === null) return false;
|
|
23
31
|
if (err.name == "TimeoutError") return true;
|
|
@@ -98,6 +106,12 @@ var UnauthenticatedError = class extends Error {
|
|
|
98
106
|
super("LoginFailed: " + message);
|
|
99
107
|
}
|
|
100
108
|
};
|
|
109
|
+
var PermissionDeniedError = class extends Error {
|
|
110
|
+
name = "PermissionDeniedError";
|
|
111
|
+
constructor(message) {
|
|
112
|
+
super("PermissionDenied: " + message);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
101
115
|
var DisconnectedError = class extends Error {
|
|
102
116
|
name = "DisconnectedError";
|
|
103
117
|
constructor(message) {
|
|
@@ -115,6 +129,10 @@ function rethrowMeaningfulError(error, wrapIfUnknown = false) {
|
|
|
115
129
|
if (error instanceof UnauthenticatedError) throw error;
|
|
116
130
|
throw new UnauthenticatedError(error.message);
|
|
117
131
|
}
|
|
132
|
+
if (isPermissionDenied(error)) {
|
|
133
|
+
if (error instanceof PermissionDeniedError) throw error;
|
|
134
|
+
throw new PermissionDeniedError(error.message);
|
|
135
|
+
}
|
|
118
136
|
if (isConnectionProblem(error)) {
|
|
119
137
|
if (error instanceof DisconnectedError) throw error;
|
|
120
138
|
throw new DisconnectedError(error.message);
|
|
@@ -127,6 +145,7 @@ function rethrowMeaningfulError(error, wrapIfUnknown = false) {
|
|
|
127
145
|
}
|
|
128
146
|
//#endregion
|
|
129
147
|
exports.DisconnectedError = DisconnectedError;
|
|
148
|
+
exports.PermissionDeniedError = PermissionDeniedError;
|
|
130
149
|
exports.PlError = PlError;
|
|
131
150
|
exports.PlErrorCodeNotFound = PlErrorCodeNotFound;
|
|
132
151
|
exports.RESTError = RESTError;
|
|
@@ -137,6 +156,7 @@ exports.isAbortedError = isAbortedError;
|
|
|
137
156
|
exports.isCancelError = isCancelError;
|
|
138
157
|
exports.isConnectionProblem = isConnectionProblem;
|
|
139
158
|
exports.isNotFoundError = isNotFoundError;
|
|
159
|
+
exports.isPermissionDenied = isPermissionDenied;
|
|
140
160
|
exports.isTimeoutError = isTimeoutError;
|
|
141
161
|
exports.isTimeoutOrCancelError = isTimeoutOrCancelError;
|
|
142
162
|
exports.isUnauthenticated = isUnauthenticated;
|
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 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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"}
|
|
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 isPermissionDenied(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof PermissionDeniedError) return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"PERMISSION_DENIED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.PERMISSION_DENIED)\n return true;\n if ((err as any).cause !== undefined && !nested)\n return isPermissionDenied((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 PermissionDeniedError extends Error {\n name = \"PermissionDeniedError\";\n constructor(message: string) {\n super(\"PermissionDenied: \" + 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 (isPermissionDenied(error)) {\n if (error instanceof PermissionDeniedError) throw error;\n throw new PermissionDeniedError(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
|
@@ -3,6 +3,7 @@ import { Status } from "../proto-grpc/github.com/googleapis/googleapis/google/rp
|
|
|
3
3
|
//#region src/core/errors.d.ts
|
|
4
4
|
declare function isConnectionProblem(err: unknown, nested?: boolean): boolean;
|
|
5
5
|
declare function isUnauthenticated(err: unknown, nested?: boolean): boolean;
|
|
6
|
+
declare function isPermissionDenied(err: unknown, nested?: boolean): boolean;
|
|
6
7
|
declare function isTimeoutError(err: unknown, nested?: boolean): boolean;
|
|
7
8
|
declare function isCancelError(err: unknown, nested?: boolean): boolean;
|
|
8
9
|
declare function isAbortedError(err: unknown, nested?: boolean): boolean;
|
|
@@ -28,6 +29,10 @@ declare class UnauthenticatedError extends Error {
|
|
|
28
29
|
name: string;
|
|
29
30
|
constructor(message: string);
|
|
30
31
|
}
|
|
32
|
+
declare class PermissionDeniedError extends Error {
|
|
33
|
+
name: string;
|
|
34
|
+
constructor(message: string);
|
|
35
|
+
}
|
|
31
36
|
declare class DisconnectedError extends Error {
|
|
32
37
|
name: string;
|
|
33
38
|
constructor(message: string);
|
|
@@ -38,5 +43,5 @@ declare class RESTError extends PlError {
|
|
|
38
43
|
}
|
|
39
44
|
declare function rethrowMeaningfulError(error: any, wrapIfUnknown?: boolean): never;
|
|
40
45
|
//#endregion
|
|
41
|
-
export { DisconnectedError, PlError, PlErrorCodeNotFound, RESTError, RecoverablePlError, UnauthenticatedError, UnrecoverablePlError, isAbortedError, isCancelError, isConnectionProblem, isNotFoundError, isTimeoutError, isTimeoutOrCancelError, isUnauthenticated, isUnimplementedError, rethrowMeaningfulError, throwPlNotFoundError };
|
|
46
|
+
export { DisconnectedError, PermissionDeniedError, PlError, PlErrorCodeNotFound, RESTError, RecoverablePlError, UnauthenticatedError, UnrecoverablePlError, isAbortedError, isCancelError, isConnectionProblem, isNotFoundError, isPermissionDenied, isTimeoutError, isTimeoutOrCancelError, isUnauthenticated, isUnimplementedError, rethrowMeaningfulError, throwPlNotFoundError };
|
|
42
47
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +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"}
|
|
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,kBAAA,CAAmB,GAAA,WAAc,MAAA;AAAA,iBAYjC,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,qBAAA,SAA8B,KAAA;EACzC,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
|
@@ -17,6 +17,14 @@ function isUnauthenticated(err, nested = false) {
|
|
|
17
17
|
if (err.cause !== void 0 && !nested) return isUnauthenticated(err.cause, true);
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
|
+
function isPermissionDenied(err, nested = false) {
|
|
21
|
+
if (err === void 0 || err === null) return false;
|
|
22
|
+
if (err instanceof PermissionDeniedError) return true;
|
|
23
|
+
if (err.name == "RpcError" && err.code == "PERMISSION_DENIED") return true;
|
|
24
|
+
if (err.name == "RESTError" && err.status.code == Code.PERMISSION_DENIED) return true;
|
|
25
|
+
if (err.cause !== void 0 && !nested) return isPermissionDenied(err.cause, true);
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
20
28
|
function isTimeoutError(err, nested = false) {
|
|
21
29
|
if (err === void 0 || err === null) return false;
|
|
22
30
|
if (err.name == "TimeoutError") return true;
|
|
@@ -97,6 +105,12 @@ var UnauthenticatedError = class extends Error {
|
|
|
97
105
|
super("LoginFailed: " + message);
|
|
98
106
|
}
|
|
99
107
|
};
|
|
108
|
+
var PermissionDeniedError = class extends Error {
|
|
109
|
+
name = "PermissionDeniedError";
|
|
110
|
+
constructor(message) {
|
|
111
|
+
super("PermissionDenied: " + message);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
100
114
|
var DisconnectedError = class extends Error {
|
|
101
115
|
name = "DisconnectedError";
|
|
102
116
|
constructor(message) {
|
|
@@ -114,6 +128,10 @@ function rethrowMeaningfulError(error, wrapIfUnknown = false) {
|
|
|
114
128
|
if (error instanceof UnauthenticatedError) throw error;
|
|
115
129
|
throw new UnauthenticatedError(error.message);
|
|
116
130
|
}
|
|
131
|
+
if (isPermissionDenied(error)) {
|
|
132
|
+
if (error instanceof PermissionDeniedError) throw error;
|
|
133
|
+
throw new PermissionDeniedError(error.message);
|
|
134
|
+
}
|
|
117
135
|
if (isConnectionProblem(error)) {
|
|
118
136
|
if (error instanceof DisconnectedError) throw error;
|
|
119
137
|
throw new DisconnectedError(error.message);
|
|
@@ -125,6 +143,6 @@ function rethrowMeaningfulError(error, wrapIfUnknown = false) {
|
|
|
125
143
|
} else throw error;
|
|
126
144
|
}
|
|
127
145
|
//#endregion
|
|
128
|
-
export { DisconnectedError, PlError, PlErrorCodeNotFound, RESTError, RecoverablePlError, UnauthenticatedError, UnrecoverablePlError, isAbortedError, isCancelError, isConnectionProblem, isNotFoundError, isTimeoutError, isTimeoutOrCancelError, isUnauthenticated, isUnimplementedError, rethrowMeaningfulError, throwPlNotFoundError };
|
|
146
|
+
export { DisconnectedError, PermissionDeniedError, PlError, PlErrorCodeNotFound, RESTError, RecoverablePlError, UnauthenticatedError, UnrecoverablePlError, isAbortedError, isCancelError, isConnectionProblem, isNotFoundError, isPermissionDenied, isTimeoutError, isTimeoutOrCancelError, isUnauthenticated, isUnimplementedError, rethrowMeaningfulError, throwPlNotFoundError };
|
|
129
147
|
|
|
130
148
|
//# 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 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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"}
|
|
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 isPermissionDenied(err: unknown, nested: boolean = false): boolean {\n if (err === undefined || err === null) return false;\n\n if (err instanceof PermissionDeniedError) return true;\n if ((err as any).name == \"RpcError\" && (err as any).code == \"PERMISSION_DENIED\") return true;\n if ((err as any).name == \"RESTError\" && (err as any).status.code == Code.PERMISSION_DENIED)\n return true;\n if ((err as any).cause !== undefined && !nested)\n return isPermissionDenied((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 PermissionDeniedError extends Error {\n name = \"PermissionDeniedError\";\n constructor(message: string) {\n super(\"PermissionDenied: \" + 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 (isPermissionDenied(error)) {\n if (error instanceof PermissionDeniedError) throw error;\n throw new PermissionDeniedError(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":";;;AAIA,SAAgB,oBAAoB,KAAc,SAAkB,OAAgB;AAClF,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAM,QAAO;AAE9C,KAAI,eAAe,kBAAmB,QAAO;AAC7C,KAAK,IAAY,QAAQ,cAAe,IAAY,QAAQ,cAAe,QAAO;AAClF,KAAK,IAAY,QAAQ,eAAgB,IAAY,OAAO,QAAQ,KAAK,YAAa,QAAO;AAC7F,KAAK,IAAY,UAAU,KAAA,KAAa,CAAC,OACvC,QAAO,oBAAqB,IAAY,OAAO,KAAK;AACtD,QAAO;;AAGT,SAAgB,kBAAkB,KAAc,SAAkB,OAAgB;AAChF,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAM,QAAO;AAE9C,KAAI,eAAe,qBAAsB,QAAO;AAChD,KAAK,IAAY,QAAQ,cAAe,IAAY,QAAQ,kBAAmB,QAAO;AACtF,KAAK,IAAY,QAAQ,eAAgB,IAAY,OAAO,QAAQ,KAAK,gBACvE,QAAO;AACT,KAAK,IAAY,UAAU,KAAA,KAAa,CAAC,OACvC,QAAO,kBAAmB,IAAY,OAAO,KAAK;AACpD,QAAO;;AAGT,SAAgB,mBAAmB,KAAc,SAAkB,OAAgB;AACjF,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAM,QAAO;AAE9C,KAAI,eAAe,sBAAuB,QAAO;AACjD,KAAK,IAAY,QAAQ,cAAe,IAAY,QAAQ,oBAAqB,QAAO;AACxF,KAAK,IAAY,QAAQ,eAAgB,IAAY,OAAO,QAAQ,KAAK,kBACvE,QAAO;AACT,KAAK,IAAY,UAAU,KAAA,KAAa,CAAC,OACvC,QAAO,mBAAoB,IAAY,OAAO,KAAK;AACrD,QAAO;;AAGT,SAAgB,eAAe,KAAc,SAAkB,OAAgB;AAC7E,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAM,QAAO;AAE9C,KAAK,IAAY,QAAQ,eAAgB,QAAO;AAChD,KAAK,IAAY,QAAQ,cAAe,IAAY,QAAQ,oBAAqB,QAAO;AACxF,KAAK,IAAY,QAAQ,eAAgB,IAAY,OAAO,QAAQ,KAAK,kBACvE,QAAO;AACT,KAAK,IAAY,UAAU,KAAA,KAAa,CAAC,OAAQ,QAAO,eAAgB,IAAY,OAAO,KAAK;AAChG,QAAO;;AAGT,SAAgB,cAAc,KAAc,SAAkB,OAAgB;AAC5E,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAM,QAAO;AAE9C,KAAK,IAAY,QAAQ,cAAe,IAAY,QAAQ,YAAa,QAAO;AAChF,KAAK,IAAY,QAAQ,eAAgB,IAAY,OAAO,QAAQ,KAAK,UAAW,QAAO;AAC3F,KAAK,IAAY,UAAU,KAAA,KAAa,CAAC,OAAQ,QAAO,cAAe,IAAY,OAAO,KAAK;AAC/F,QAAO;;AAGT,SAAgB,eAAe,KAAc,SAAkB,OAAgB;AAC7E,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAM,QAAO;AAE9C,KAAI,eAAe,WAAY,IAAY,QAAQ,aAAc,QAAO;AACxE,KAAK,IAAY,QAAQ,YAAa,QAAO;AAC7C,KAAI,eAAe,gBAAgB,IAAI,SAAS,aAAa,UAAW,QAAO;AAC/E,KAAK,IAAY,QAAQ,cAAe,IAAY,QAAQ,UAAW,QAAO;AAC9E,KAAK,IAAY,QAAQ,eAAgB,IAAY,OAAO,QAAQ,KAAK,QAAS,QAAO;AACzF,KAAK,IAAY,UAAU,KAAA,KAAa,CAAC,OAAQ,QAAO,eAAgB,IAAY,OAAO,KAAK;AAChG,QAAO;;AAGT,SAAgB,uBAAuB,KAAc,SAAkB,OAAgB;AACrF,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAM,QAAO;AAE9C,KAAI,eAAe,KAAK,KAAK,CAAE,QAAO;AACtC,KAAI,eAAe,KAAK,KAAK,CAAE,QAAO;AACtC,KAAI,cAAc,KAAK,KAAK,CAAE,QAAO;AACrC,KAAK,IAAY,UAAU,KAAA,KAAa,CAAC,OACvC,QAAO,uBAAwB,IAAY,OAAO,KAAK;AACzD,QAAO;;AAGT,SAAgB,qBAAqB,KAAc,SAAkB,OAAgB;AACnF,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAM,QAAO;AAE9C,KAAK,IAAY,QAAQ,cAAe,IAAY,QAAQ,gBAAiB,QAAO;AACpF,KAAK,IAAY,QAAQ,eAAgB,IAAY,OAAO,QAAQ,KAAK,cACvE,QAAO;AACT,KAAK,IAAY,UAAU,KAAA,KAAa,CAAC,OACvC,QAAO,qBAAsB,IAAY,OAAO,KAAK;AACvD,QAAO;;AAGT,SAAgB,gBAAgB,KAAc,SAAkB,OAAgB;AAC9E,KAAI,QAAQ,KAAA,KAAa,QAAQ,KAAM,QAAO;AAE9C,KAAK,IAAY,QAAQ,cAAe,IAAY,QAAQ,YAAa,QAAO;AAChF,KAAK,IAAY,QAAQ,eAAgB,IAAY,OAAO,QAAQ,KAAK,UAAW,QAAO;AAC3F,KAAK,IAAY,UAAU,KAAA,KAAa,CAAC,OAAQ,QAAO,gBAAiB,IAAY,OAAO,KAAK;AACjG,QAAO,eAAe,sBAAsB,IAAI,OAAO,SAAS;;AAGlE,MAAa,sBAA8B,KAAK;AAEhD,IAAa,UAAb,cAA6B,MAAM;CACjC,OAAO;CACP,YACE,QACA,MACA;AACA,QAAM,QAAQ,OAAO,KAAK,GAAG,OAAO,WAAW,KAAK;AAHpC,OAAA,SAAA;;;AAOpB,SAAgB,qBAAqB,SAAwB;AAC3D,OAAM,IAAI,mBAAmB;EAAE,MAAM;EAAqB;EAAS,SAAS,EAAE;EAAE,CAAC;;AAGnF,IAAa,qBAAb,cAAwC,QAAQ;CAC9C,OAAO;CACP,YAAY,QAAgB;AAC1B,QAAM,OAAO;;;AAIjB,IAAa,uBAAb,cAA0C,QAAQ;CAChD,OAAO;CACP,YAAY,QAAgB;AAC1B,QAAM,OAAO;;;AAIjB,IAAa,uBAAb,cAA0C,MAAM;CAC9C,OAAO;CACP,YAAY,SAAiB;AAC3B,QAAM,kBAAkB,QAAQ;;;AAIpC,IAAa,wBAAb,cAA2C,MAAM;CAC/C,OAAO;CACP,YAAY,SAAiB;AAC3B,QAAM,uBAAuB,QAAQ;;;AAIzC,IAAa,oBAAb,cAAuC,MAAM;CAC3C,OAAO;CACP,YAAY,SAAiB;AAC3B,QAAM,mBAAmB,QAAQ;;;AAIrC,IAAa,YAAb,cAA+B,QAAQ;CACrC,OAAO;CACP,YAAY,QAAgB,MAAqB;AAC/C,QAAM,QAAQ,KAAK;;;AAIvB,SAAgB,uBAAuB,OAAY,gBAAyB,OAAc;AACxF,KAAI,kBAAkB,MAAM,EAAE;AAC5B,MAAI,iBAAiB,qBAAsB,OAAM;AACjD,QAAM,IAAI,qBAAqB,MAAM,QAAQ;;AAE/C,KAAI,mBAAmB,MAAM,EAAE;AAC7B,MAAI,iBAAiB,sBAAuB,OAAM;AAClD,QAAM,IAAI,sBAAsB,MAAM,QAAQ;;AAEhD,KAAI,oBAAoB,MAAM,EAAE;AAC9B,MAAI,iBAAiB,kBAAmB,OAAM;AAC9C,QAAM,IAAI,kBAAkB,MAAM,QAAQ;;AAE5C,KAAI,uBAAuB,MAAM,CAAE,OAAM,IAAI,QAAQ,MAAM;AAC3D,KAAI,eAAe;EACjB,MAAM,UAAU,MAAM,WAAW,OAAO,MAAM,IAAI;AAClD,QAAM,IAAI,MAAM,SAAS,EAAE,OAAO,OAAO,CAAC;OACrC,OAAM"}
|
package/dist/core/final.cjs
CHANGED
|
@@ -3,13 +3,13 @@ const require_types = require("./types.cjs");
|
|
|
3
3
|
let _milaboratories_pl_model_common = require("@milaboratories/pl-model-common");
|
|
4
4
|
//#region src/core/final.ts
|
|
5
5
|
function readyOrDuplicateOrError(r) {
|
|
6
|
-
return r.resourceReady || require_types.
|
|
6
|
+
return r.resourceReady || require_types.isNotNullSignedResourceId(r.originalResourceId) || require_types.isNotNullSignedResourceId(r.error);
|
|
7
7
|
}
|
|
8
8
|
function readyAndHasAllOutputsFilled(r) {
|
|
9
9
|
if (!readyOrDuplicateOrError(r)) return false;
|
|
10
10
|
if (!r.outputsLocked) return false;
|
|
11
11
|
if (r.fields === void 0) return true;
|
|
12
|
-
for (const f of r.fields) if (require_types.
|
|
12
|
+
for (const f of r.fields) if (require_types.isNullSignedResourceId(f.error) && (require_types.isNullSignedResourceId(f.value) || !f.valueIsFinal)) return false;
|
|
13
13
|
return true;
|
|
14
14
|
}
|
|
15
15
|
const unknownResourceTypeNames = /* @__PURE__ */ new Set();
|
|
@@ -19,7 +19,7 @@ const DefaultFinalResourceDataPredicate = (r) => {
|
|
|
19
19
|
case _milaboratories_pl_model_common.ResourceTypeName.StreamManager: {
|
|
20
20
|
if (!readyOrDuplicateOrError(r)) return false;
|
|
21
21
|
if (r.fields === void 0) return true;
|
|
22
|
-
if (require_types.
|
|
22
|
+
if (require_types.isNotNullSignedResourceId(r.error)) return true;
|
|
23
23
|
const downloadable = require_types.getField(r, "downloadable");
|
|
24
24
|
return require_types.getField(r, "stream").value === downloadable.value;
|
|
25
25
|
}
|
|
@@ -53,11 +53,12 @@ const DefaultFinalResourceDataPredicate = (r) => {
|
|
|
53
53
|
case _milaboratories_pl_model_common.ResourceTypeName.Blob:
|
|
54
54
|
case _milaboratories_pl_model_common.ResourceTypeName.Null:
|
|
55
55
|
case _milaboratories_pl_model_common.ResourceTypeName.Binary:
|
|
56
|
-
case _milaboratories_pl_model_common.ResourceTypeName.LSProvider:
|
|
56
|
+
case _milaboratories_pl_model_common.ResourceTypeName.LSProvider:
|
|
57
|
+
case _milaboratories_pl_model_common.ResourceTypeName.WorkingDirectory: return true;
|
|
57
58
|
case _milaboratories_pl_model_common.ResourceTypeName.UserProject:
|
|
58
59
|
case _milaboratories_pl_model_common.ResourceTypeName.Projects:
|
|
59
60
|
case _milaboratories_pl_model_common.ResourceTypeName.ClientRoot: return false;
|
|
60
|
-
default: if (r.type.name.startsWith(_milaboratories_pl_model_common.ResourceTypePrefix.Blob)) return true;
|
|
61
|
+
default: if (r.type.name.startsWith(_milaboratories_pl_model_common.ResourceTypePrefix.Blob) || r.type.name.startsWith(_milaboratories_pl_model_common.ResourceTypePrefix.LS) || r.type.name.startsWith(_milaboratories_pl_model_common.ResourceTypePrefix.WorkingDirectory) || r.type.name.startsWith(_milaboratories_pl_model_common.ResourceTypePrefix.StorageSpaceAllocation)) return true;
|
|
61
62
|
else if (r.type.name.startsWith(_milaboratories_pl_model_common.ResourceTypePrefix.BlobUpload) || r.type.name.startsWith(_milaboratories_pl_model_common.ResourceTypePrefix.BlobIndex)) return readyAndHasAllOutputsFilled(r);
|
|
62
63
|
else if (r.type.name.startsWith(_milaboratories_pl_model_common.ResourceTypePrefix.PColumnData)) return readyOrDuplicateOrError(r);
|
|
63
64
|
else if (r.type.name.startsWith(_milaboratories_pl_model_common.ResourceTypePrefix.StreamWorkdir)) return readyOrDuplicateOrError(r);
|
package/dist/core/final.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"final.cjs","names":["
|
|
1
|
+
{"version":3,"file":"final.cjs","names":["isNotNullSignedResourceId","isNullSignedResourceId","ResourceTypeName","getField","ResourceTypePrefix"],"sources":["../../src/core/final.ts"],"sourcesContent":["import type { Optional } from \"utility-types\";\nimport type { BasicResourceData, ResourceData } from \"./types\";\nimport { getField, isNotNullSignedResourceId, isNullSignedResourceId } 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 ||\n isNotNullSignedResourceId(r.originalResourceId) ||\n isNotNullSignedResourceId(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 (isNullSignedResourceId(f.error) && (isNullSignedResourceId(f.value) || !f.valueIsFinal))\n 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 (isNotNullSignedResourceId(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 case ResourceTypeName.WorkingDirectory:\n return true;\n case ResourceTypeName.UserProject:\n case ResourceTypeName.Projects:\n case ResourceTypeName.ClientRoot:\n return false;\n default:\n if (\n r.type.name.startsWith(ResourceTypePrefix.Blob) ||\n r.type.name.startsWith(ResourceTypePrefix.LS) ||\n r.type.name.startsWith(ResourceTypePrefix.WorkingDirectory) ||\n r.type.name.startsWith(ResourceTypePrefix.StorageSpaceAllocation)\n ) {\n 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,iBACFA,cAAAA,0BAA0B,EAAE,mBAAmB,IAC/CA,cAAAA,0BAA0B,EAAE,MAAM;;AAItC,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,KAAIC,cAAAA,uBAAuB,EAAE,MAAM,KAAKA,cAAAA,uBAAuB,EAAE,MAAM,IAAI,CAAC,EAAE,cAC5E,QAAO;AACX,QAAO;;AAIT,MAAM,2CAA2B,IAAI,KAAa;;AAGlD,MAAa,qCAAiE,MAAe;AAC3F,SAAQ,EAAE,KAAK,MAAf;EACE,KAAKC,gCAAAA,iBAAiB,eAAe;AACnC,OAAI,CAAC,wBAAwB,EAAE,CAAE,QAAO;AACxC,OAAI,EAAE,WAAW,KAAA,EAAW,QAAO;AACnC,OAAIF,cAAAA,0BAA0B,EAAE,MAAM,CAAE,QAAO;GAC/C,MAAM,eAAeG,cAAAA,SAAS,GAAmB,eAAe;AAEhE,UADeA,cAAAA,SAAS,GAAmB,SAAS,CACtC,UAAU,aAAa;;EAEvC,KAAKD,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB,MACpB,QAAO,wBAAwB,EAAE;EACnC,KAAKA,gCAAAA,iBAAiB,kBACpB,QAAO,EAAE,KAAK,YAAY;EAC5B,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB,iBACpB,QAAO;EACT,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB;EACtB,KAAKA,gCAAAA,iBAAiB,WACpB,QAAO;EACT,QACE,KACE,EAAE,KAAK,KAAK,WAAWE,gCAAAA,mBAAmB,KAAK,IAC/C,EAAE,KAAK,KAAK,WAAWA,gCAAAA,mBAAmB,GAAG,IAC7C,EAAE,KAAK,KAAK,WAAWA,gCAAAA,mBAAmB,iBAAiB,IAC3D,EAAE,KAAK,KAAK,WAAWA,gCAAAA,mBAAmB,uBAAuB,CAEjE,QAAO;WAEP,EAAE,KAAK,KAAK,WAAWA,gCAAAA,mBAAmB,WAAW,IACrD,EAAE,KAAK,KAAK,WAAWA,gCAAAA,mBAAmB,UAAU,CAEpD,QAAO,4BAA4B,EAAE;WAC5B,EAAE,KAAK,KAAK,WAAWA,gCAAAA,mBAAmB,YAAY,CAC/D,QAAO,wBAAwB,EAAE;WACxB,EAAE,KAAK,KAAK,WAAWA,gCAAAA,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/final.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"final.d.ts","names":[],"sources":["../../src/core/final.ts"],"mappings":";;;;;;AAeA;;;;;;;;KAAY,0BAAA,IACV,YAAA,EAAc,QAAA,CAAS,YAAA;
|
|
1
|
+
{"version":3,"file":"final.d.ts","names":[],"sources":["../../src/core/final.ts"],"mappings":";;;;;;AAeA;;;;;;;;KAAY,0BAAA,IACV,YAAA,EAAc,QAAA,CAAS,YAAA;AAyBzB;AAAA,cAAa,iCAAA,EAAmC,0BAAA"}
|
package/dist/core/final.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { getField,
|
|
1
|
+
import { getField, isNotNullSignedResourceId, isNullSignedResourceId } from "./types.js";
|
|
2
2
|
import { ResourceTypeName, ResourceTypePrefix } from "@milaboratories/pl-model-common";
|
|
3
3
|
//#region src/core/final.ts
|
|
4
4
|
function readyOrDuplicateOrError(r) {
|
|
5
|
-
return r.resourceReady ||
|
|
5
|
+
return r.resourceReady || isNotNullSignedResourceId(r.originalResourceId) || isNotNullSignedResourceId(r.error);
|
|
6
6
|
}
|
|
7
7
|
function readyAndHasAllOutputsFilled(r) {
|
|
8
8
|
if (!readyOrDuplicateOrError(r)) return false;
|
|
9
9
|
if (!r.outputsLocked) return false;
|
|
10
10
|
if (r.fields === void 0) return true;
|
|
11
|
-
for (const f of r.fields) if (
|
|
11
|
+
for (const f of r.fields) if (isNullSignedResourceId(f.error) && (isNullSignedResourceId(f.value) || !f.valueIsFinal)) return false;
|
|
12
12
|
return true;
|
|
13
13
|
}
|
|
14
14
|
const unknownResourceTypeNames = /* @__PURE__ */ new Set();
|
|
@@ -18,7 +18,7 @@ const DefaultFinalResourceDataPredicate = (r) => {
|
|
|
18
18
|
case ResourceTypeName.StreamManager: {
|
|
19
19
|
if (!readyOrDuplicateOrError(r)) return false;
|
|
20
20
|
if (r.fields === void 0) return true;
|
|
21
|
-
if (
|
|
21
|
+
if (isNotNullSignedResourceId(r.error)) return true;
|
|
22
22
|
const downloadable = getField(r, "downloadable");
|
|
23
23
|
return getField(r, "stream").value === downloadable.value;
|
|
24
24
|
}
|
|
@@ -52,11 +52,12 @@ const DefaultFinalResourceDataPredicate = (r) => {
|
|
|
52
52
|
case ResourceTypeName.Blob:
|
|
53
53
|
case ResourceTypeName.Null:
|
|
54
54
|
case ResourceTypeName.Binary:
|
|
55
|
-
case ResourceTypeName.LSProvider:
|
|
55
|
+
case ResourceTypeName.LSProvider:
|
|
56
|
+
case ResourceTypeName.WorkingDirectory: return true;
|
|
56
57
|
case ResourceTypeName.UserProject:
|
|
57
58
|
case ResourceTypeName.Projects:
|
|
58
59
|
case ResourceTypeName.ClientRoot: return false;
|
|
59
|
-
default: if (r.type.name.startsWith(ResourceTypePrefix.Blob)) return true;
|
|
60
|
+
default: if (r.type.name.startsWith(ResourceTypePrefix.Blob) || r.type.name.startsWith(ResourceTypePrefix.LS) || r.type.name.startsWith(ResourceTypePrefix.WorkingDirectory) || r.type.name.startsWith(ResourceTypePrefix.StorageSpaceAllocation)) return true;
|
|
60
61
|
else if (r.type.name.startsWith(ResourceTypePrefix.BlobUpload) || r.type.name.startsWith(ResourceTypePrefix.BlobIndex)) return readyAndHasAllOutputsFilled(r);
|
|
61
62
|
else if (r.type.name.startsWith(ResourceTypePrefix.PColumnData)) return readyOrDuplicateOrError(r);
|
|
62
63
|
else if (r.type.name.startsWith(ResourceTypePrefix.StreamWorkdir)) return readyOrDuplicateOrError(r);
|
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,
|
|
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, isNotNullSignedResourceId, isNullSignedResourceId } 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 ||\n isNotNullSignedResourceId(r.originalResourceId) ||\n isNotNullSignedResourceId(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 (isNullSignedResourceId(f.error) && (isNullSignedResourceId(f.value) || !f.valueIsFinal))\n 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 (isNotNullSignedResourceId(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 case ResourceTypeName.WorkingDirectory:\n return true;\n case ResourceTypeName.UserProject:\n case ResourceTypeName.Projects:\n case ResourceTypeName.ClientRoot:\n return false;\n default:\n if (\n r.type.name.startsWith(ResourceTypePrefix.Blob) ||\n r.type.name.startsWith(ResourceTypePrefix.LS) ||\n r.type.name.startsWith(ResourceTypePrefix.WorkingDirectory) ||\n r.type.name.startsWith(ResourceTypePrefix.StorageSpaceAllocation)\n ) {\n 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,iBACF,0BAA0B,EAAE,mBAAmB,IAC/C,0BAA0B,EAAE,MAAM;;AAItC,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,uBAAuB,EAAE,MAAM,KAAK,uBAAuB,EAAE,MAAM,IAAI,CAAC,EAAE,cAC5E,QAAO;AACX,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,0BAA0B,EAAE,MAAM,CAAE,QAAO;GAC/C,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;EACtB,KAAK,iBAAiB,iBACpB,QAAO;EACT,KAAK,iBAAiB;EACtB,KAAK,iBAAiB;EACtB,KAAK,iBAAiB,WACpB,QAAO;EACT,QACE,KACE,EAAE,KAAK,KAAK,WAAW,mBAAmB,KAAK,IAC/C,EAAE,KAAK,KAAK,WAAW,mBAAmB,GAAG,IAC7C,EAAE,KAAK,KAAK,WAAW,mBAAmB,iBAAiB,IAC3D,EAAE,KAAK,KAAK,WAAW,mBAAmB,uBAAuB,CAEjE,QAAO;WAEP,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
|
@@ -303,7 +303,7 @@ var LLPlClient = class LLPlClient {
|
|
|
303
303
|
}
|
|
304
304
|
async getJwtToken(ttlSeconds, options) {
|
|
305
305
|
const cl = this.clientProvider.get();
|
|
306
|
-
const role = options?.role ?? require_api.
|
|
306
|
+
const role = options?.role ?? require_api.AuthAPI_Role.UNSPECIFIED;
|
|
307
307
|
if (cl instanceof require_api_client.PlatformClient) {
|
|
308
308
|
const meta = {};
|
|
309
309
|
if (options?.authorization) meta.authorization = options.authorization;
|
|
@@ -379,6 +379,23 @@ var LLPlClient = class LLPlClient {
|
|
|
379
379
|
if (cl instanceof require_api_client.PlatformClient) return (await cl.authMethods({})).response;
|
|
380
380
|
else return (0, _milaboratories_ts_helpers.notEmpty)((await cl.GET("/v1/auth/methods")).data, "REST: empty response for auth methods request");
|
|
381
381
|
}
|
|
382
|
+
async getUserRoot(opts = {}) {
|
|
383
|
+
const cl = this.clientProvider.get();
|
|
384
|
+
if (cl instanceof require_api_client.PlatformClient) return (await cl.getUserRoot({
|
|
385
|
+
login: opts.login ?? "",
|
|
386
|
+
doNotCreate: opts.doNotCreate ?? false
|
|
387
|
+
})).response;
|
|
388
|
+
else {
|
|
389
|
+
const resp = (0, _milaboratories_ts_helpers.notEmpty)((await cl.POST("/v1/auth/user-root", { body: {
|
|
390
|
+
login: opts.login ?? "",
|
|
391
|
+
doNotCreate: opts.doNotCreate ?? false
|
|
392
|
+
} })).data, "REST: empty response for getUserRoot request");
|
|
393
|
+
return { userRoot: resp.userRoot ? {
|
|
394
|
+
resourceId: BigInt(resp.userRoot.resourceId),
|
|
395
|
+
resourceSignature: Uint8Array.from(Buffer.from(resp.userRoot.resourceSignature, "base64"))
|
|
396
|
+
} : void 0 };
|
|
397
|
+
}
|
|
398
|
+
}
|
|
382
399
|
async listUserResources(opts = {}) {
|
|
383
400
|
const cl = this.clientProvider.get();
|
|
384
401
|
if (!(cl instanceof require_api_client.PlatformClient)) throw new Error("ListUserResources requires gRPC wire protocol; REST is not supported");
|