@tinycloud/sdk-services 3.0.0-beta.8 → 3.1.0-beta.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/encryption/index.cjs.map +1 -1
- package/dist/encryption/index.js.map +1 -1
- package/dist/index.cjs +111 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +19 -1
- package/dist/index.d.ts +19 -1
- package/dist/index.js +110 -69
- package/dist/index.js.map +1 -1
- package/dist/kv/index.cjs +73 -68
- package/dist/kv/index.cjs.map +1 -1
- package/dist/kv/index.d.cts +8 -0
- package/dist/kv/index.d.ts +8 -0
- package/dist/kv/index.js +73 -68
- package/dist/kv/index.js.map +1 -1
- package/dist/sql/index.cjs.map +1 -1
- package/dist/sql/index.js.map +1 -1
- package/package.json +1 -1
package/dist/kv/index.cjs
CHANGED
|
@@ -592,7 +592,7 @@ var KVService = class extends BaseService {
|
|
|
592
592
|
return err(
|
|
593
593
|
storageQuotaExceededError(
|
|
594
594
|
"kv",
|
|
595
|
-
`Storage quota exceeded for key
|
|
595
|
+
`Storage quota exceeded for key ${JSON.stringify(key)}: ${errorText}`,
|
|
596
596
|
{
|
|
597
597
|
status: response.status,
|
|
598
598
|
...quotaInfo ? { usedBytes: quotaInfo.usedBytes, limitBytes: quotaInfo.limitBytes } : {}
|
|
@@ -605,7 +605,7 @@ var KVService = class extends BaseService {
|
|
|
605
605
|
return err(
|
|
606
606
|
storageLimitReachedError(
|
|
607
607
|
"kv",
|
|
608
|
-
`Storage limit reached for key
|
|
608
|
+
`Storage limit reached for key ${JSON.stringify(key)}: ${errorText}`,
|
|
609
609
|
{
|
|
610
610
|
status: response.status,
|
|
611
611
|
...quotaInfo ? { usedBytes: quotaInfo.usedBytes, limitBytes: quotaInfo.limitBytes } : {}
|
|
@@ -649,7 +649,7 @@ var KVService = class extends BaseService {
|
|
|
649
649
|
*/
|
|
650
650
|
getFullPath(key, prefixOverride) {
|
|
651
651
|
const prefix = prefixOverride ?? this._config.prefix ?? "";
|
|
652
|
-
return prefix ? `${prefix}/${key}` : key;
|
|
652
|
+
return prefix ? key === "" ? prefix : `${prefix}/${key}` : key;
|
|
653
653
|
}
|
|
654
654
|
/**
|
|
655
655
|
* Get the host URL.
|
|
@@ -891,12 +891,11 @@ var KVService = class extends BaseService {
|
|
|
891
891
|
if (!response.ok) {
|
|
892
892
|
const errorText = await response.text();
|
|
893
893
|
if (response.status === 401 || response.status === 403) {
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
}));
|
|
894
|
+
return this.authorizationFailure(
|
|
895
|
+
`Failed to batch read ${keys.length} key(s)`,
|
|
896
|
+
response,
|
|
897
|
+
errorText
|
|
898
|
+
);
|
|
900
899
|
}
|
|
901
900
|
if (response.status === 413) {
|
|
902
901
|
return err(serviceError(
|
|
@@ -995,23 +994,39 @@ var KVService = class extends BaseService {
|
|
|
995
994
|
} catch {
|
|
996
995
|
}
|
|
997
996
|
if (response.status === 401 || response.status === 403) {
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
}));
|
|
997
|
+
return this.authorizationFailure(
|
|
998
|
+
`Failed to create signed read URL for key ${JSON.stringify(key)}`,
|
|
999
|
+
response,
|
|
1000
|
+
errorText
|
|
1001
|
+
);
|
|
1004
1002
|
}
|
|
1005
1003
|
const code = response.status === 400 ? ErrorCodes.INVALID_INPUT : ErrorCodes.NETWORK_ERROR;
|
|
1006
1004
|
return err(
|
|
1007
1005
|
serviceError(
|
|
1008
1006
|
code,
|
|
1009
|
-
`Failed to create signed read URL for key
|
|
1007
|
+
`Failed to create signed read URL for key ${JSON.stringify(key)}: ${response.status} - ${errorText}`,
|
|
1010
1008
|
"kv",
|
|
1011
1009
|
{ meta: { status: response.status, statusText: response.statusText } }
|
|
1012
1010
|
)
|
|
1013
1011
|
);
|
|
1014
1012
|
}
|
|
1013
|
+
/**
|
|
1014
|
+
* AUTH_UNAUTHORIZED for a 401/403 response. The message keeps the HTTP
|
|
1015
|
+
* status and the server text (`<context>: <status> - <text>`, the same
|
|
1016
|
+
* shape as every other KV failure) so callers that rethrow only the message
|
|
1017
|
+
* still see the status; `meta.status` carries it for typed callers.
|
|
1018
|
+
* Resource/ability hints are parsed from the raw body, never the message.
|
|
1019
|
+
*/
|
|
1020
|
+
authorizationFailure(context, response, errorText, extraMeta = {}) {
|
|
1021
|
+
const { resource, action } = parseAuthError(errorText);
|
|
1022
|
+
const detail = errorText.trim().length > 0 ? errorText : response.statusText || "authorization failed";
|
|
1023
|
+
return err(authUnauthorizedError("kv", `${context}: ${response.status} - ${detail}`, {
|
|
1024
|
+
status: response.status,
|
|
1025
|
+
...action && { requiredAction: action },
|
|
1026
|
+
...resource && { resource },
|
|
1027
|
+
...extraMeta
|
|
1028
|
+
}));
|
|
1029
|
+
}
|
|
1015
1030
|
normalizeSignedReadUrlResponse(data) {
|
|
1016
1031
|
if (!data || typeof data !== "object") {
|
|
1017
1032
|
return void 0;
|
|
@@ -1054,14 +1069,13 @@ var KVService = class extends BaseService {
|
|
|
1054
1069
|
if (!response.ok) {
|
|
1055
1070
|
if (response.status === 401 || response.status === 403) {
|
|
1056
1071
|
const errorText2 = await response.text();
|
|
1057
|
-
const { resource, action } = parseAuthError(errorText2);
|
|
1058
1072
|
const permissionHint = parsePermissionHintFromErrorText(errorText2);
|
|
1059
|
-
return
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1073
|
+
return this.authorizationFailure(
|
|
1074
|
+
`Failed to get key ${JSON.stringify(key)}`,
|
|
1075
|
+
response,
|
|
1076
|
+
errorText2,
|
|
1077
|
+
permissionHint === void 0 ? {} : { permissionHint }
|
|
1078
|
+
);
|
|
1065
1079
|
}
|
|
1066
1080
|
if (response.status === 404) {
|
|
1067
1081
|
return this.classifyNotFound(response, key);
|
|
@@ -1070,7 +1084,7 @@ var KVService = class extends BaseService {
|
|
|
1070
1084
|
if (response.status === 413) {
|
|
1071
1085
|
return err(serviceError(
|
|
1072
1086
|
ErrorCodes.KV_RESPONSE_TOO_LARGE,
|
|
1073
|
-
`KV value at key
|
|
1087
|
+
`KV value at key ${JSON.stringify(key)} exceeds the requested response limit`,
|
|
1074
1088
|
"kv",
|
|
1075
1089
|
{ meta: { status: response.status, statusText: response.statusText } }
|
|
1076
1090
|
));
|
|
@@ -1078,7 +1092,7 @@ var KVService = class extends BaseService {
|
|
|
1078
1092
|
return err(
|
|
1079
1093
|
serviceError(
|
|
1080
1094
|
ErrorCodes.NETWORK_ERROR,
|
|
1081
|
-
`Failed to get key
|
|
1095
|
+
`Failed to get key ${JSON.stringify(key)}: ${response.status} - ${errorText}`,
|
|
1082
1096
|
"kv",
|
|
1083
1097
|
{ meta: { status: response.status, statusText: response.statusText } }
|
|
1084
1098
|
)
|
|
@@ -1133,21 +1147,19 @@ var KVService = class extends BaseService {
|
|
|
1133
1147
|
...options?.ifNoneMatch === void 0 ? {} : { "if-none-match": options.ifNoneMatch }
|
|
1134
1148
|
}
|
|
1135
1149
|
);
|
|
1150
|
+
if (response.status === 401 || response.status === 403) {
|
|
1151
|
+
return this.authorizationFailure(
|
|
1152
|
+
`Failed to put key ${JSON.stringify(key)}`,
|
|
1153
|
+
response,
|
|
1154
|
+
await response.text()
|
|
1155
|
+
);
|
|
1156
|
+
}
|
|
1136
1157
|
if (!response.ok) {
|
|
1137
|
-
if (response.status === 401) {
|
|
1138
|
-
const errorText2 = await response.text();
|
|
1139
|
-
const { resource, action } = parseAuthError(errorText2);
|
|
1140
|
-
return err(authUnauthorizedError("kv", errorText2, {
|
|
1141
|
-
status: response.status,
|
|
1142
|
-
...action && { requiredAction: action },
|
|
1143
|
-
...resource && { resource }
|
|
1144
|
-
}));
|
|
1145
|
-
}
|
|
1146
1158
|
const errorText = await response.text();
|
|
1147
1159
|
if (response.status === 412) {
|
|
1148
1160
|
return err(serviceError(
|
|
1149
1161
|
ErrorCodes.KV_PRECONDITION_FAILED,
|
|
1150
|
-
`KV precondition failed for key
|
|
1162
|
+
`KV precondition failed for key ${JSON.stringify(key)}`,
|
|
1151
1163
|
"kv",
|
|
1152
1164
|
{ meta: { status: response.status, statusText: response.statusText } }
|
|
1153
1165
|
));
|
|
@@ -1155,7 +1167,7 @@ var KVService = class extends BaseService {
|
|
|
1155
1167
|
if (response.status === 503 && (options?.ifMatch !== void 0 || options?.ifNoneMatch !== void 0)) {
|
|
1156
1168
|
return err(serviceError(
|
|
1157
1169
|
ErrorCodes.KV_CONFLICT,
|
|
1158
|
-
`Concurrent KV update conflicted for key
|
|
1170
|
+
`Concurrent KV update conflicted for key ${JSON.stringify(key)}`,
|
|
1159
1171
|
"kv",
|
|
1160
1172
|
{ meta: { status: response.status, statusText: response.statusText } }
|
|
1161
1173
|
));
|
|
@@ -1171,7 +1183,7 @@ var KVService = class extends BaseService {
|
|
|
1171
1183
|
return err(
|
|
1172
1184
|
serviceError(
|
|
1173
1185
|
ErrorCodes.KV_WRITE_FAILED,
|
|
1174
|
-
`Failed to put key
|
|
1186
|
+
`Failed to put key ${JSON.stringify(key)}: ${response.status} - ${errorText}`,
|
|
1175
1187
|
"kv",
|
|
1176
1188
|
{ meta: { status: response.status, statusText: response.statusText } }
|
|
1177
1189
|
)
|
|
@@ -1265,12 +1277,11 @@ var KVService = class extends BaseService {
|
|
|
1265
1277
|
);
|
|
1266
1278
|
}
|
|
1267
1279
|
if (response.status === 401 || response.status === 403) {
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
}));
|
|
1280
|
+
return this.authorizationFailure(
|
|
1281
|
+
`Failed to batch put ${items.length} key(s)`,
|
|
1282
|
+
response,
|
|
1283
|
+
errorText
|
|
1284
|
+
);
|
|
1274
1285
|
}
|
|
1275
1286
|
const quotaError = this.handleQuotaErrorResponse(
|
|
1276
1287
|
response,
|
|
@@ -1391,13 +1402,11 @@ var KVService = class extends BaseService {
|
|
|
1391
1402
|
);
|
|
1392
1403
|
if (!response.ok) {
|
|
1393
1404
|
if (response.status === 401) {
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
...resource && { resource }
|
|
1400
|
-
}));
|
|
1405
|
+
return this.authorizationFailure(
|
|
1406
|
+
"Failed to list keys",
|
|
1407
|
+
response,
|
|
1408
|
+
await response.text()
|
|
1409
|
+
);
|
|
1401
1410
|
}
|
|
1402
1411
|
const errorText = await response.text();
|
|
1403
1412
|
return err(
|
|
@@ -1446,13 +1455,11 @@ var KVService = class extends BaseService {
|
|
|
1446
1455
|
);
|
|
1447
1456
|
if (!response.ok) {
|
|
1448
1457
|
if (response.status === 401) {
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
...resource && { resource }
|
|
1455
|
-
}));
|
|
1458
|
+
return this.authorizationFailure(
|
|
1459
|
+
`Failed to delete key ${JSON.stringify(key)}`,
|
|
1460
|
+
response,
|
|
1461
|
+
await response.text()
|
|
1462
|
+
);
|
|
1456
1463
|
}
|
|
1457
1464
|
if (response.status === 404) {
|
|
1458
1465
|
return this.classifyNotFound(response, key);
|
|
@@ -1461,7 +1468,7 @@ var KVService = class extends BaseService {
|
|
|
1461
1468
|
if (response.status === 412) {
|
|
1462
1469
|
return err(serviceError(
|
|
1463
1470
|
ErrorCodes.KV_PRECONDITION_FAILED,
|
|
1464
|
-
`KV precondition failed for key
|
|
1471
|
+
`KV precondition failed for key ${JSON.stringify(key)}`,
|
|
1465
1472
|
"kv",
|
|
1466
1473
|
{ meta: { status: response.status, statusText: response.statusText } }
|
|
1467
1474
|
));
|
|
@@ -1469,7 +1476,7 @@ var KVService = class extends BaseService {
|
|
|
1469
1476
|
if (response.status === 503 && options?.ifMatch !== void 0) {
|
|
1470
1477
|
return err(serviceError(
|
|
1471
1478
|
ErrorCodes.KV_CONFLICT,
|
|
1472
|
-
`Concurrent KV delete conflicted for key
|
|
1479
|
+
`Concurrent KV delete conflicted for key ${JSON.stringify(key)}`,
|
|
1473
1480
|
"kv",
|
|
1474
1481
|
{ meta: { status: response.status, statusText: response.statusText } }
|
|
1475
1482
|
));
|
|
@@ -1477,7 +1484,7 @@ var KVService = class extends BaseService {
|
|
|
1477
1484
|
return err(
|
|
1478
1485
|
serviceError(
|
|
1479
1486
|
ErrorCodes.NETWORK_ERROR,
|
|
1480
|
-
`Failed to delete key
|
|
1487
|
+
`Failed to delete key ${JSON.stringify(key)}: ${response.status} - ${errorText}`,
|
|
1481
1488
|
"kv",
|
|
1482
1489
|
{ meta: { status: response.status, statusText: response.statusText } }
|
|
1483
1490
|
)
|
|
@@ -1510,13 +1517,11 @@ var KVService = class extends BaseService {
|
|
|
1510
1517
|
);
|
|
1511
1518
|
if (!response.ok) {
|
|
1512
1519
|
if (response.status === 401) {
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
...resource && { resource }
|
|
1519
|
-
}));
|
|
1520
|
+
return this.authorizationFailure(
|
|
1521
|
+
`Failed to get metadata for key ${JSON.stringify(key)}`,
|
|
1522
|
+
response,
|
|
1523
|
+
await response.text()
|
|
1524
|
+
);
|
|
1520
1525
|
}
|
|
1521
1526
|
if (response.status === 404) {
|
|
1522
1527
|
return this.classifyNotFound(response, key);
|
|
@@ -1525,7 +1530,7 @@ var KVService = class extends BaseService {
|
|
|
1525
1530
|
return err(
|
|
1526
1531
|
serviceError(
|
|
1527
1532
|
ErrorCodes.NETWORK_ERROR,
|
|
1528
|
-
`Failed to get metadata for key
|
|
1533
|
+
`Failed to get metadata for key ${JSON.stringify(key)}: ${response.status} - ${errorText}`,
|
|
1529
1534
|
"kv",
|
|
1530
1535
|
{ meta: { status: response.status, statusText: response.statusText } }
|
|
1531
1536
|
)
|