@blamejs/core 0.7.18 → 0.7.19
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/CHANGELOG.md +425 -423
- package/README.md +150 -150
- package/bin/blamejs.js +0 -0
- package/index.js +310 -308
- package/lib/api-key.js +660 -660
- package/lib/api-snapshot.js +338 -338
- package/lib/app-shutdown.js +385 -385
- package/lib/app.js +365 -365
- package/lib/archive.js +250 -250
- package/lib/atomic-file.js +544 -544
- package/lib/audit-chain.js +177 -177
- package/lib/audit-sign.js +344 -344
- package/lib/audit-tools.js +677 -677
- package/lib/audit.js +766 -766
- package/lib/auth/jwt-external.js +365 -0
- package/lib/auth/jwt.js +337 -311
- package/lib/auth/lockout.js +436 -436
- package/lib/auth/oauth.js +721 -721
- package/lib/auth/passkey.js +181 -181
- package/lib/auth/password.js +628 -594
- package/lib/backup/bundle.js +217 -217
- package/lib/backup/crypto.js +176 -176
- package/lib/backup/index.js +515 -515
- package/lib/backup/manifest.js +282 -282
- package/lib/break-glass.js +1338 -1338
- package/lib/bundler.js +441 -441
- package/lib/cache-redis.js +256 -256
- package/lib/cache.js +1206 -1206
- package/lib/canonical-json.js +115 -115
- package/lib/chain-writer.js +234 -234
- package/lib/cli-helpers.js +206 -206
- package/lib/cli.js +2334 -2334
- package/lib/cluster-provider-db.js +317 -317
- package/lib/cluster-storage.js +226 -226
- package/lib/cluster.js +703 -703
- package/lib/config-drift.js +301 -301
- package/lib/consent.js +222 -222
- package/lib/constants.js +191 -191
- package/lib/cookies.js +315 -315
- package/lib/credential-hash.js +322 -322
- package/lib/crypto.js +266 -266
- package/lib/csv.js +275 -275
- package/lib/db-declare-row-policy.js +267 -267
- package/lib/db-declare-view.js +420 -420
- package/lib/db-query.js +406 -406
- package/lib/db-schema.js +319 -319
- package/lib/db.js +1288 -1288
- package/lib/deprecate.js +222 -222
- package/lib/dev.js +335 -335
- package/lib/dual-control.js +473 -473
- package/lib/error-page.js +420 -420
- package/lib/external-db-migrate.js +441 -441
- package/lib/external-db.js +1061 -1061
- package/lib/file-type.js +273 -273
- package/lib/forms.js +422 -422
- package/lib/framework-error.js +293 -293
- package/lib/framework-schema.js +717 -717
- package/lib/handlers.js +350 -350
- package/lib/http-client-cookie-jar.js +508 -508
- package/lib/http-client.js +1195 -1195
- package/lib/i18n.js +878 -878
- package/lib/jobs.js +185 -185
- package/lib/log-stream-cloudwatch.js +369 -369
- package/lib/log-stream-local.js +146 -146
- package/lib/log-stream-otlp-grpc.js +410 -410
- package/lib/log-stream-otlp.js +286 -286
- package/lib/log-stream-syslog.js +302 -302
- package/lib/log-stream-webhook.js +199 -199
- package/lib/log-stream.js +330 -330
- package/lib/log.js +500 -500
- package/lib/mail-bounce.js +528 -528
- package/lib/mail-dkim.js +369 -369
- package/lib/mail.js +981 -981
- package/lib/metrics.js +683 -683
- package/lib/middleware/api-encrypt.js +936 -936
- package/lib/middleware/attach-user.js +157 -157
- package/lib/middleware/bearer-auth.js +152 -0
- package/lib/middleware/body-parser.js +1170 -1170
- package/lib/middleware/bot-guard.js +178 -178
- package/lib/middleware/compression.js +452 -452
- package/lib/middleware/cors.js +314 -314
- package/lib/middleware/csp-nonce.js +348 -348
- package/lib/middleware/csrf-protect.js +316 -316
- package/lib/middleware/db-role-for.js +264 -264
- package/lib/middleware/health.js +392 -392
- package/lib/middleware/index.js +82 -79
- package/lib/middleware/rate-limit.js +358 -358
- package/lib/middleware/request-id.js +61 -61
- package/lib/middleware/request-log.js +168 -168
- package/lib/middleware/require-auth.js +104 -104
- package/lib/middleware/security-headers.js +116 -116
- package/lib/middleware/sse.js +166 -166
- package/lib/migrations.js +383 -383
- package/lib/mtls-ca.js +518 -518
- package/lib/mtls-engine-default.js +481 -481
- package/lib/network-dns.js +632 -632
- package/lib/network-heartbeat.js +290 -290
- package/lib/network-nts.js +574 -574
- package/lib/network-proxy.js +265 -265
- package/lib/network-tls.js +328 -328
- package/lib/network.js +233 -233
- package/lib/notify.js +612 -612
- package/lib/ntp-check.js +229 -229
- package/lib/numeric-bounds.js +111 -111
- package/lib/object-store/azure-blob-bucket-ops.js +349 -349
- package/lib/object-store/azure-blob.js +488 -488
- package/lib/object-store/gcs-bucket-ops.js +351 -351
- package/lib/object-store/gcs.js +519 -519
- package/lib/object-store/http-put.js +153 -153
- package/lib/object-store/index.js +197 -197
- package/lib/object-store/sigv4-bucket-ops.js +1092 -1092
- package/lib/object-store/sigv4.js +903 -903
- package/lib/observability.js +151 -151
- package/lib/otel-export.js +269 -269
- package/lib/pagination.js +464 -464
- package/lib/parsers/index.js +80 -80
- package/lib/parsers/safe-env.js +642 -642
- package/lib/parsers/safe-ini.js +292 -292
- package/lib/parsers/safe-toml.js +784 -784
- package/lib/parsers/safe-xml.js +390 -390
- package/lib/parsers/safe-yaml.js +1015 -1015
- package/lib/permissions.js +708 -708
- package/lib/pqc-agent.js +87 -87
- package/lib/pqc-gate.js +279 -279
- package/lib/protobuf-encoder.js +190 -190
- package/lib/protocol-dispatcher.js +161 -161
- package/lib/pubsub-redis.js +167 -167
- package/lib/pubsub.js +429 -429
- package/lib/queue-local.js +476 -476
- package/lib/queue-redis.js +745 -745
- package/lib/queue-sqs.js +319 -319
- package/lib/queue.js +695 -695
- package/lib/redis-client.js +519 -519
- package/lib/request-helpers.js +340 -340
- package/lib/restore-bundle.js +237 -237
- package/lib/restore-rollback.js +259 -259
- package/lib/restore.js +409 -409
- package/lib/retry.js +376 -376
- package/lib/router.js +748 -748
- package/lib/safe-async.js +735 -735
- package/lib/safe-buffer.js +237 -237
- package/lib/safe-json.js +541 -541
- package/lib/safe-schema.js +1266 -1266
- package/lib/safe-url.js +159 -159
- package/lib/scheduler.js +706 -706
- package/lib/security-assert.js +373 -373
- package/lib/seeders.js +618 -618
- package/lib/session.js +535 -478
- package/lib/slug.js +269 -269
- package/lib/ssrf-guard.js +401 -401
- package/lib/storage.js +471 -471
- package/lib/subject.js +281 -281
- package/lib/template.js +791 -791
- package/lib/testing.js +798 -798
- package/lib/time.js +310 -310
- package/lib/totp.js +302 -302
- package/lib/tracing.js +494 -494
- package/lib/uuid.js +132 -132
- package/lib/validate-opts.js +340 -340
- package/lib/vault/index.js +308 -308
- package/lib/vault/rotate.js +784 -784
- package/lib/vault/wrap.js +296 -296
- package/lib/vendor/noble-ciphers.cjs +9 -9
- package/lib/webhook.js +595 -595
- package/lib/websocket.js +1048 -1048
- package/package.json +77 -77
- package/sbom.cyclonedx.json +7 -7
|
@@ -1,153 +1,153 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Generic HTTP PUT/GET protocol adapter.
|
|
4
|
-
*
|
|
5
|
-
* For backends that aren't S3-compatible but expose a simple HTTP key-value
|
|
6
|
-
* surface: internal stores, NAS appliances with HTTP frontends, or custom
|
|
7
|
-
* services. Uses Node's native https / http; PQC TLS group preference is
|
|
8
|
-
* applied to outbound connections via constants.TLS_GROUP_CURVE_STR.
|
|
9
|
-
*
|
|
10
|
-
* Authentication options:
|
|
11
|
-
* { auth: 'none' } (no Authorization header)
|
|
12
|
-
* { auth: 'bearer', token: '...' } (Authorization: Bearer ...)
|
|
13
|
-
* { auth: 'basic', username: '...', password: '...' }
|
|
14
|
-
* { auth: 'header', headers: { 'X-Auth-Key': '...' } } (arbitrary headers)
|
|
15
|
-
*
|
|
16
|
-
* Errors are surfaced as object-store errors with statusCode set so the
|
|
17
|
-
* retry layer can classify retryable vs permanent.
|
|
18
|
-
*/
|
|
19
|
-
var { Readable } = require("stream");
|
|
20
|
-
var { ObjectStoreError } = require("../framework-error");
|
|
21
|
-
var safeUrl = require("../safe-url");
|
|
22
|
-
var sharedRequest = require("./http-request");
|
|
23
|
-
var authHeader = require("../auth-header");
|
|
24
|
-
|
|
25
|
-
var _err = ObjectStoreError.factory;
|
|
26
|
-
|
|
27
|
-
// Auth-header construction is delegated to lib/auth-header for the
|
|
28
|
-
// none/bearer/basic triple. The "header" mode (pass-through arbitrary
|
|
29
|
-
// headers) is just header merging; kept here because it's documented as
|
|
30
|
-
// a value of the same config.auth knob.
|
|
31
|
-
function _authHeaders(authConfig) {
|
|
32
|
-
if (authConfig && authConfig.auth === "header") {
|
|
33
|
-
return Object.assign({}, authConfig.headers || {});
|
|
34
|
-
}
|
|
35
|
-
return authHeader.fromConfig(authConfig);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function _request(method, url, body, headers, opts) {
|
|
39
|
-
return sharedRequest(method, url, headers, body, opts);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function _keyToUrl(baseUrl, key) {
|
|
43
|
-
// Append key to baseUrl, ensuring exactly one slash between them.
|
|
44
|
-
// Disallow ../ to prevent path traversal at the URL level.
|
|
45
|
-
if (key.includes("..") || key.includes("\0")) {
|
|
46
|
-
throw _err("INVALID_KEY", "invalid characters in key", true);
|
|
47
|
-
}
|
|
48
|
-
var b = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl;
|
|
49
|
-
var k = key.startsWith("/") ? key.slice(1) : key;
|
|
50
|
-
// URL-encode each path segment so reserved characters (?, #, %, space,
|
|
51
|
-
// unicode, etc.) round-trip safely and don't cross-pollute keys
|
|
52
|
-
// (e.g. `a%2Fb` and `a/b` would otherwise collide on the wire).
|
|
53
|
-
// Slashes between segments stay literal (operators use them as a
|
|
54
|
-
// namespace separator, matching S3 / GCS / Azure conventions).
|
|
55
|
-
var encoded = k.split("/").map(encodeURIComponent).join("/");
|
|
56
|
-
return b + "/" + encoded;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function create(config) {
|
|
60
|
-
if (!config || !config.baseUrl) {
|
|
61
|
-
throw new Error("http-put protocol requires { baseUrl }");
|
|
62
|
-
}
|
|
63
|
-
var baseUrl = config.baseUrl;
|
|
64
|
-
// Fail fast on misconfigured baseUrl — validate scheme + shape now, not
|
|
65
|
-
// at first put(). HTTPS-only by default; cleartext appliances opt in
|
|
66
|
-
// via config.allowedProtocols (safeUrl.ALLOW_HTTP_ALL).
|
|
67
|
-
var allowedProtocols = config.allowedProtocols || safeUrl.ALLOW_HTTP_TLS;
|
|
68
|
-
var allowInternal = config.allowInternal != null ? config.allowInternal : null;
|
|
69
|
-
safeUrl.parse(baseUrl, {
|
|
70
|
-
allowedProtocols: allowedProtocols,
|
|
71
|
-
errorClass: ObjectStoreError,
|
|
72
|
-
});
|
|
73
|
-
var headers = _authHeaders(config);
|
|
74
|
-
var timeoutMs = config.timeoutMs;
|
|
75
|
-
var reqOpts = { timeoutMs: timeoutMs, allowedProtocols: allowedProtocols };
|
|
76
|
-
if (allowInternal !== null) reqOpts.allowInternal = allowInternal;
|
|
77
|
-
|
|
78
|
-
function put(key, body, _opts) {
|
|
79
|
-
var url = _keyToUrl(baseUrl, key);
|
|
80
|
-
var h = Object.assign({ "Content-Type": "application/octet-stream" }, headers);
|
|
81
|
-
return _request("PUT", url, body, h, reqOpts).then(function (res) {
|
|
82
|
-
var size = Buffer.isBuffer(body) ? body.length : null;
|
|
83
|
-
return { size: size, etag: res.headers.etag };
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function get(key) {
|
|
88
|
-
var url = _keyToUrl(baseUrl, key);
|
|
89
|
-
return _request("GET", url, null, headers, reqOpts).then(function (res) {
|
|
90
|
-
return res.body;
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function getStream(key) {
|
|
95
|
-
// Generic HTTP PUT has no streaming ergonomic path through Node's
|
|
96
|
-
// https that doesn't buffer; return a Readable wrapping the buffered
|
|
97
|
-
// body. Backends that support chunked transfer (e.g. SigV4) implement
|
|
98
|
-
// a real streaming getStream in their own adapter.
|
|
99
|
-
return Readable.from(get(key));
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function head(key) {
|
|
103
|
-
var url = _keyToUrl(baseUrl, key);
|
|
104
|
-
return _request("HEAD", url, null, headers, reqOpts).then(function (res) {
|
|
105
|
-
return {
|
|
106
|
-
size: res.headers["content-length"] ? parseInt(res.headers["content-length"], 10) : null,
|
|
107
|
-
etag: res.headers.etag,
|
|
108
|
-
lastModified: res.headers["last-modified"] ? Date.parse(res.headers["last-modified"]) : null,
|
|
109
|
-
};
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function deleteKey(key) {
|
|
114
|
-
var url = _keyToUrl(baseUrl, key);
|
|
115
|
-
return _request("DELETE", url, null, headers, reqOpts).then(
|
|
116
|
-
function () { return true; },
|
|
117
|
-
function (e) {
|
|
118
|
-
if (e.statusCode === 404) return false;
|
|
119
|
-
throw e;
|
|
120
|
-
}
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
function list(_prefix, _opts) {
|
|
125
|
-
// Generic HTTP PUT protocol has no listing convention. SigV4 will.
|
|
126
|
-
return Promise.reject(_err("NOT_SUPPORTED", "list() not supported by http-put protocol", true));
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function _presignNotSupported(_opts) {
|
|
130
|
-
// Generic HTTP PUT has no signing convention; the receiver is whatever
|
|
131
|
-
// endpoint the operator points at, with whatever auth it chose. Use
|
|
132
|
-
// protocol: 'sigv4' for an S3-compatible presigning workflow.
|
|
133
|
-
throw _err("PRESIGN_NOT_SUPPORTED",
|
|
134
|
-
"http-put backend does not support presigned URLs — switch to " +
|
|
135
|
-
"protocol: 'sigv4' for an S3-compatible signing flow", true);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return {
|
|
139
|
-
protocol: "http-put",
|
|
140
|
-
baseUrl: baseUrl,
|
|
141
|
-
put: put,
|
|
142
|
-
get: get,
|
|
143
|
-
getStream: getStream,
|
|
144
|
-
head: head,
|
|
145
|
-
delete: deleteKey,
|
|
146
|
-
list: list,
|
|
147
|
-
presignedUploadUrl: _presignNotSupported,
|
|
148
|
-
presignedDownloadUrl: _presignNotSupported,
|
|
149
|
-
presignedUploadPolicy: _presignNotSupported,
|
|
150
|
-
};
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
module.exports = { create: create };
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Generic HTTP PUT/GET protocol adapter.
|
|
4
|
+
*
|
|
5
|
+
* For backends that aren't S3-compatible but expose a simple HTTP key-value
|
|
6
|
+
* surface: internal stores, NAS appliances with HTTP frontends, or custom
|
|
7
|
+
* services. Uses Node's native https / http; PQC TLS group preference is
|
|
8
|
+
* applied to outbound connections via constants.TLS_GROUP_CURVE_STR.
|
|
9
|
+
*
|
|
10
|
+
* Authentication options:
|
|
11
|
+
* { auth: 'none' } (no Authorization header)
|
|
12
|
+
* { auth: 'bearer', token: '...' } (Authorization: Bearer ...)
|
|
13
|
+
* { auth: 'basic', username: '...', password: '...' }
|
|
14
|
+
* { auth: 'header', headers: { 'X-Auth-Key': '...' } } (arbitrary headers)
|
|
15
|
+
*
|
|
16
|
+
* Errors are surfaced as object-store errors with statusCode set so the
|
|
17
|
+
* retry layer can classify retryable vs permanent.
|
|
18
|
+
*/
|
|
19
|
+
var { Readable } = require("stream");
|
|
20
|
+
var { ObjectStoreError } = require("../framework-error");
|
|
21
|
+
var safeUrl = require("../safe-url");
|
|
22
|
+
var sharedRequest = require("./http-request");
|
|
23
|
+
var authHeader = require("../auth-header");
|
|
24
|
+
|
|
25
|
+
var _err = ObjectStoreError.factory;
|
|
26
|
+
|
|
27
|
+
// Auth-header construction is delegated to lib/auth-header for the
|
|
28
|
+
// none/bearer/basic triple. The "header" mode (pass-through arbitrary
|
|
29
|
+
// headers) is just header merging; kept here because it's documented as
|
|
30
|
+
// a value of the same config.auth knob.
|
|
31
|
+
function _authHeaders(authConfig) {
|
|
32
|
+
if (authConfig && authConfig.auth === "header") {
|
|
33
|
+
return Object.assign({}, authConfig.headers || {});
|
|
34
|
+
}
|
|
35
|
+
return authHeader.fromConfig(authConfig);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function _request(method, url, body, headers, opts) {
|
|
39
|
+
return sharedRequest(method, url, headers, body, opts);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function _keyToUrl(baseUrl, key) {
|
|
43
|
+
// Append key to baseUrl, ensuring exactly one slash between them.
|
|
44
|
+
// Disallow ../ to prevent path traversal at the URL level.
|
|
45
|
+
if (key.includes("..") || key.includes("\0")) {
|
|
46
|
+
throw _err("INVALID_KEY", "invalid characters in key", true);
|
|
47
|
+
}
|
|
48
|
+
var b = baseUrl.endsWith("/") ? baseUrl.slice(0, -1) : baseUrl;
|
|
49
|
+
var k = key.startsWith("/") ? key.slice(1) : key;
|
|
50
|
+
// URL-encode each path segment so reserved characters (?, #, %, space,
|
|
51
|
+
// unicode, etc.) round-trip safely and don't cross-pollute keys
|
|
52
|
+
// (e.g. `a%2Fb` and `a/b` would otherwise collide on the wire).
|
|
53
|
+
// Slashes between segments stay literal (operators use them as a
|
|
54
|
+
// namespace separator, matching S3 / GCS / Azure conventions).
|
|
55
|
+
var encoded = k.split("/").map(encodeURIComponent).join("/");
|
|
56
|
+
return b + "/" + encoded;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function create(config) {
|
|
60
|
+
if (!config || !config.baseUrl) {
|
|
61
|
+
throw new Error("http-put protocol requires { baseUrl }");
|
|
62
|
+
}
|
|
63
|
+
var baseUrl = config.baseUrl;
|
|
64
|
+
// Fail fast on misconfigured baseUrl — validate scheme + shape now, not
|
|
65
|
+
// at first put(). HTTPS-only by default; cleartext appliances opt in
|
|
66
|
+
// via config.allowedProtocols (safeUrl.ALLOW_HTTP_ALL).
|
|
67
|
+
var allowedProtocols = config.allowedProtocols || safeUrl.ALLOW_HTTP_TLS;
|
|
68
|
+
var allowInternal = config.allowInternal != null ? config.allowInternal : null;
|
|
69
|
+
safeUrl.parse(baseUrl, {
|
|
70
|
+
allowedProtocols: allowedProtocols,
|
|
71
|
+
errorClass: ObjectStoreError,
|
|
72
|
+
});
|
|
73
|
+
var headers = _authHeaders(config);
|
|
74
|
+
var timeoutMs = config.timeoutMs;
|
|
75
|
+
var reqOpts = { timeoutMs: timeoutMs, allowedProtocols: allowedProtocols };
|
|
76
|
+
if (allowInternal !== null) reqOpts.allowInternal = allowInternal;
|
|
77
|
+
|
|
78
|
+
function put(key, body, _opts) {
|
|
79
|
+
var url = _keyToUrl(baseUrl, key);
|
|
80
|
+
var h = Object.assign({ "Content-Type": "application/octet-stream" }, headers);
|
|
81
|
+
return _request("PUT", url, body, h, reqOpts).then(function (res) {
|
|
82
|
+
var size = Buffer.isBuffer(body) ? body.length : null;
|
|
83
|
+
return { size: size, etag: res.headers.etag };
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function get(key) {
|
|
88
|
+
var url = _keyToUrl(baseUrl, key);
|
|
89
|
+
return _request("GET", url, null, headers, reqOpts).then(function (res) {
|
|
90
|
+
return res.body;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function getStream(key) {
|
|
95
|
+
// Generic HTTP PUT has no streaming ergonomic path through Node's
|
|
96
|
+
// https that doesn't buffer; return a Readable wrapping the buffered
|
|
97
|
+
// body. Backends that support chunked transfer (e.g. SigV4) implement
|
|
98
|
+
// a real streaming getStream in their own adapter.
|
|
99
|
+
return Readable.from(get(key));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function head(key) {
|
|
103
|
+
var url = _keyToUrl(baseUrl, key);
|
|
104
|
+
return _request("HEAD", url, null, headers, reqOpts).then(function (res) {
|
|
105
|
+
return {
|
|
106
|
+
size: res.headers["content-length"] ? parseInt(res.headers["content-length"], 10) : null,
|
|
107
|
+
etag: res.headers.etag,
|
|
108
|
+
lastModified: res.headers["last-modified"] ? Date.parse(res.headers["last-modified"]) : null,
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function deleteKey(key) {
|
|
114
|
+
var url = _keyToUrl(baseUrl, key);
|
|
115
|
+
return _request("DELETE", url, null, headers, reqOpts).then(
|
|
116
|
+
function () { return true; },
|
|
117
|
+
function (e) {
|
|
118
|
+
if (e.statusCode === 404) return false;
|
|
119
|
+
throw e;
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function list(_prefix, _opts) {
|
|
125
|
+
// Generic HTTP PUT protocol has no listing convention. SigV4 will.
|
|
126
|
+
return Promise.reject(_err("NOT_SUPPORTED", "list() not supported by http-put protocol", true));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function _presignNotSupported(_opts) {
|
|
130
|
+
// Generic HTTP PUT has no signing convention; the receiver is whatever
|
|
131
|
+
// endpoint the operator points at, with whatever auth it chose. Use
|
|
132
|
+
// protocol: 'sigv4' for an S3-compatible presigning workflow.
|
|
133
|
+
throw _err("PRESIGN_NOT_SUPPORTED",
|
|
134
|
+
"http-put backend does not support presigned URLs — switch to " +
|
|
135
|
+
"protocol: 'sigv4' for an S3-compatible signing flow", true);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
protocol: "http-put",
|
|
140
|
+
baseUrl: baseUrl,
|
|
141
|
+
put: put,
|
|
142
|
+
get: get,
|
|
143
|
+
getStream: getStream,
|
|
144
|
+
head: head,
|
|
145
|
+
delete: deleteKey,
|
|
146
|
+
list: list,
|
|
147
|
+
presignedUploadUrl: _presignNotSupported,
|
|
148
|
+
presignedDownloadUrl: _presignNotSupported,
|
|
149
|
+
presignedUploadPolicy: _presignNotSupported,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
module.exports = { create: create };
|