@tinycloud/sdk-services 2.6.3 → 2.7.0-beta.4
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/BaseService-BwBU5CQ4.d.cts +158 -0
- package/dist/BaseService-CnPTKR5G.d.ts +158 -0
- package/dist/encryption/index.cjs +46 -6
- package/dist/encryption/index.cjs.map +1 -1
- package/dist/encryption/index.d.cts +9 -1
- package/dist/encryption/index.d.ts +9 -1
- package/dist/encryption/index.js +45 -6
- package/dist/encryption/index.js.map +1 -1
- package/dist/index.cjs +299 -21
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +58 -9
- package/dist/index.d.ts +58 -9
- package/dist/index.js +293 -18
- package/dist/index.js.map +1 -1
- package/dist/internal/decrypt-transport-response-error.cjs +38 -0
- package/dist/internal/decrypt-transport-response-error.cjs.map +1 -0
- package/dist/internal/decrypt-transport-response-error.d.cts +10 -0
- package/dist/internal/decrypt-transport-response-error.d.ts +10 -0
- package/dist/internal/decrypt-transport-response-error.js +13 -0
- package/dist/internal/decrypt-transport-response-error.js.map +1 -0
- package/dist/kv/index.cjs +46 -4
- package/dist/kv/index.cjs.map +1 -1
- package/dist/kv/index.d.cts +2 -1
- package/dist/kv/index.d.ts +2 -1
- package/dist/kv/index.js +46 -4
- package/dist/kv/index.js.map +1 -1
- package/dist/sql/index.cjs +6 -2
- package/dist/sql/index.cjs.map +1 -1
- package/dist/sql/index.d.cts +2 -1
- package/dist/sql/index.d.ts +2 -1
- package/dist/sql/index.js +6 -2
- package/dist/sql/index.js.map +1 -1
- package/dist/{BaseService-BdRvNm2s.d.cts → types-DAY1O1kW.d.cts} +14 -156
- package/dist/{BaseService-BdRvNm2s.d.ts → types-DAY1O1kW.d.ts} +14 -156
- package/package.json +11 -3
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/encryption/DecryptTransportResponseError.ts
|
|
21
|
+
var DecryptTransportResponseError_exports = {};
|
|
22
|
+
__export(DecryptTransportResponseError_exports, {
|
|
23
|
+
DecryptTransportResponseError: () => DecryptTransportResponseError
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(DecryptTransportResponseError_exports);
|
|
26
|
+
var DecryptTransportResponseError = class extends Error {
|
|
27
|
+
constructor(status, permissionHint) {
|
|
28
|
+
super("Node decrypt request failed");
|
|
29
|
+
this.status = status;
|
|
30
|
+
this.permissionHint = permissionHint;
|
|
31
|
+
this.name = "DecryptTransportResponseError";
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
35
|
+
0 && (module.exports = {
|
|
36
|
+
DecryptTransportResponseError
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=decrypt-transport-response-error.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/encryption/DecryptTransportResponseError.ts"],"sourcesContent":["import type { PermissionHint } from \"../types\";\n\n/** A reachable node returned an HTTP failure for a decrypt request. */\nexport class DecryptTransportResponseError extends Error {\n constructor(readonly status: number, readonly permissionHint?: PermissionHint) {\n super(\"Node decrypt request failed\");\n this.name = \"DecryptTransportResponseError\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,IAAM,gCAAN,cAA4C,MAAM;AAAA,EACvD,YAAqB,QAAyB,gBAAiC;AAC7E,UAAM,6BAA6B;AADhB;AAAyB;AAE5C,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { P as PermissionHint } from '../types-DAY1O1kW.cjs';
|
|
2
|
+
|
|
3
|
+
/** A reachable node returned an HTTP failure for a decrypt request. */
|
|
4
|
+
declare class DecryptTransportResponseError extends Error {
|
|
5
|
+
readonly status: number;
|
|
6
|
+
readonly permissionHint?: PermissionHint | undefined;
|
|
7
|
+
constructor(status: number, permissionHint?: PermissionHint | undefined);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { DecryptTransportResponseError };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { P as PermissionHint } from '../types-DAY1O1kW.js';
|
|
2
|
+
|
|
3
|
+
/** A reachable node returned an HTTP failure for a decrypt request. */
|
|
4
|
+
declare class DecryptTransportResponseError extends Error {
|
|
5
|
+
readonly status: number;
|
|
6
|
+
readonly permissionHint?: PermissionHint | undefined;
|
|
7
|
+
constructor(status: number, permissionHint?: PermissionHint | undefined);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export { DecryptTransportResponseError };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// src/encryption/DecryptTransportResponseError.ts
|
|
2
|
+
var DecryptTransportResponseError = class extends Error {
|
|
3
|
+
constructor(status, permissionHint) {
|
|
4
|
+
super("Node decrypt request failed");
|
|
5
|
+
this.status = status;
|
|
6
|
+
this.permissionHint = permissionHint;
|
|
7
|
+
this.name = "DecryptTransportResponseError";
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
export {
|
|
11
|
+
DecryptTransportResponseError
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=decrypt-transport-response-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/encryption/DecryptTransportResponseError.ts"],"sourcesContent":["import type { PermissionHint } from \"../types\";\n\n/** A reachable node returned an HTTP failure for a decrypt request. */\nexport class DecryptTransportResponseError extends Error {\n constructor(readonly status: number, readonly permissionHint?: PermissionHint) {\n super(\"Node decrypt request failed\");\n this.name = \"DecryptTransportResponseError\";\n }\n}\n"],"mappings":";AAGO,IAAM,gCAAN,cAA4C,MAAM;AAAA,EACvD,YAAqB,QAAyB,gBAAiC;AAC7E,UAAM,6BAA6B;AADhB;AAAyB;AAE5C,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
|
package/dist/kv/index.cjs
CHANGED
|
@@ -97,6 +97,42 @@ function serviceError(code, message, service, options) {
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
// src/errors.ts
|
|
100
|
+
function parsePermissionHint(value) {
|
|
101
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return void 0;
|
|
102
|
+
const candidate = value;
|
|
103
|
+
const keys = Object.keys(candidate).sort();
|
|
104
|
+
if (keys.some((key) => !["actions", "path", "service", "space"].includes(key))) return void 0;
|
|
105
|
+
if (candidate.service !== "tinycloud.kv" && candidate.service !== "tinycloud.encryption") return void 0;
|
|
106
|
+
if (typeof candidate.path !== "string" || candidate.path.length === 0 || candidate.path.includes("*")) return void 0;
|
|
107
|
+
if (candidate.service === "tinycloud.kv" && (typeof candidate.space !== "string" || candidate.space.length === 0 || !candidate.path.startsWith("vault/") || candidate.path.endsWith("/"))) {
|
|
108
|
+
return void 0;
|
|
109
|
+
}
|
|
110
|
+
if (candidate.service === "tinycloud.encryption" && (candidate.space !== void 0 || !candidate.path.startsWith("urn:tinycloud:encryption:") || candidate.path.endsWith(":"))) {
|
|
111
|
+
return void 0;
|
|
112
|
+
}
|
|
113
|
+
if (!Array.isArray(candidate.actions) || candidate.actions.length !== 1 || typeof candidate.actions[0] !== "string" || candidate.actions[0].includes("*")) return void 0;
|
|
114
|
+
const expectedAction = candidate.service === "tinycloud.kv" ? "tinycloud.kv/get" : "tinycloud.encryption/decrypt";
|
|
115
|
+
if (candidate.actions[0] !== expectedAction) return void 0;
|
|
116
|
+
const space = typeof candidate.space === "string" ? candidate.space : void 0;
|
|
117
|
+
return {
|
|
118
|
+
service: candidate.service,
|
|
119
|
+
...space === void 0 ? {} : { space },
|
|
120
|
+
path: candidate.path,
|
|
121
|
+
actions: [candidate.actions[0]]
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
function parsePermissionHintFromErrorText(text) {
|
|
125
|
+
try {
|
|
126
|
+
const parsed = JSON.parse(text);
|
|
127
|
+
if (typeof parsed !== "object" || parsed === null) return void 0;
|
|
128
|
+
const root = parsed;
|
|
129
|
+
const nested = root.error;
|
|
130
|
+
const nestedRecord = typeof nested === "object" && nested !== null ? nested : void 0;
|
|
131
|
+
return parsePermissionHint(root.permissionHint) ?? parsePermissionHint(nestedRecord?.permissionHint);
|
|
132
|
+
} catch {
|
|
133
|
+
return void 0;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
100
136
|
function authRequiredError(service) {
|
|
101
137
|
return {
|
|
102
138
|
code: ErrorCodes.AUTH_REQUIRED,
|
|
@@ -215,7 +251,7 @@ var BaseService = class {
|
|
|
215
251
|
* Combines the service-level abort with context-level abort.
|
|
216
252
|
*/
|
|
217
253
|
get abortSignal() {
|
|
218
|
-
return this.
|
|
254
|
+
return this.combineSignals();
|
|
219
255
|
}
|
|
220
256
|
/**
|
|
221
257
|
* Check if the service is authenticated.
|
|
@@ -331,7 +367,11 @@ var BaseService = class {
|
|
|
331
367
|
*/
|
|
332
368
|
combineSignals(...signals) {
|
|
333
369
|
const controller = new AbortController();
|
|
334
|
-
const allSignals = [
|
|
370
|
+
const allSignals = [
|
|
371
|
+
this.abortController.signal,
|
|
372
|
+
this.context?.abortSignal,
|
|
373
|
+
...signals.filter(Boolean)
|
|
374
|
+
].filter(Boolean);
|
|
335
375
|
for (const signal of allSignals) {
|
|
336
376
|
if (signal.aborted) {
|
|
337
377
|
controller.abort(signal.reason);
|
|
@@ -804,13 +844,15 @@ var KVService = class extends BaseService {
|
|
|
804
844
|
options?.signal
|
|
805
845
|
);
|
|
806
846
|
if (!response.ok) {
|
|
807
|
-
if (response.status === 401) {
|
|
847
|
+
if (response.status === 401 || response.status === 403) {
|
|
808
848
|
const errorText2 = await response.text();
|
|
809
849
|
const { resource, action } = parseAuthError(errorText2);
|
|
850
|
+
const permissionHint = parsePermissionHintFromErrorText(errorText2);
|
|
810
851
|
return err(authUnauthorizedError("kv", errorText2, {
|
|
811
852
|
status: response.status,
|
|
812
853
|
...action && { requiredAction: action },
|
|
813
|
-
...resource && { resource }
|
|
854
|
+
...resource && { resource },
|
|
855
|
+
...permissionHint === void 0 ? {} : { permissionHint }
|
|
814
856
|
}));
|
|
815
857
|
}
|
|
816
858
|
if (response.status === 404) {
|