fauxqs 1.0.1 → 1.1.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/README.md +26 -0
- package/dist/s3/actions/deleteObjects.d.ts.map +1 -1
- package/dist/s3/actions/deleteObjects.js +11 -3
- package/dist/s3/actions/deleteObjects.js.map +1 -1
- package/dist/s3/actions/getObject.d.ts.map +1 -1
- package/dist/s3/actions/getObject.js +3 -0
- package/dist/s3/actions/getObject.js.map +1 -1
- package/dist/s3/actions/headObject.d.ts.map +1 -1
- package/dist/s3/actions/headObject.js +3 -0
- package/dist/s3/actions/headObject.js.map +1 -1
- package/dist/s3/actions/listObjects.d.ts.map +1 -1
- package/dist/s3/actions/listObjects.js +102 -10
- package/dist/s3/actions/listObjects.js.map +1 -1
- package/dist/s3/actions/putObject.d.ts.map +1 -1
- package/dist/s3/actions/putObject.js +38 -1
- package/dist/s3/actions/putObject.js.map +1 -1
- package/dist/s3/s3Router.d.ts.map +1 -1
- package/dist/s3/s3Router.js +2 -0
- package/dist/s3/s3Router.js.map +1 -1
- package/dist/s3/s3Store.d.ts +13 -2
- package/dist/s3/s3Store.d.ts.map +1 -1
- package/dist/s3/s3Store.js +61 -7
- package/dist/s3/s3Store.js.map +1 -1
- package/dist/s3/s3Types.d.ts +1 -0
- package/dist/s3/s3Types.d.ts.map +1 -1
- package/dist/sns/actions/listSubscriptions.js +6 -6
- package/dist/sns/actions/publish.d.ts.map +1 -1
- package/dist/sns/actions/publish.js +50 -11
- package/dist/sns/actions/publish.js.map +1 -1
- package/dist/sns/actions/setSubscriptionAttributes.d.ts.map +1 -1
- package/dist/sns/actions/setSubscriptionAttributes.js +11 -0
- package/dist/sns/actions/setSubscriptionAttributes.js.map +1 -1
- package/dist/sns/filter.d.ts +5 -0
- package/dist/sns/filter.d.ts.map +1 -1
- package/dist/sns/filter.js +99 -15
- package/dist/sns/filter.js.map +1 -1
- package/dist/sns/snsStore.d.ts.map +1 -1
- package/dist/sns/snsStore.js +8 -0
- package/dist/sns/snsStore.js.map +1 -1
- package/dist/sqs/actions/createQueue.d.ts.map +1 -1
- package/dist/sqs/actions/createQueue.js +3 -1
- package/dist/sqs/actions/createQueue.js.map +1 -1
- package/dist/sqs/actions/receiveMessage.d.ts.map +1 -1
- package/dist/sqs/actions/receiveMessage.js +3 -0
- package/dist/sqs/actions/receiveMessage.js.map +1 -1
- package/dist/sqs/actions/sendMessage.d.ts.map +1 -1
- package/dist/sqs/actions/sendMessage.js +9 -7
- package/dist/sqs/actions/sendMessage.js.map +1 -1
- package/dist/sqs/actions/sendMessageBatch.d.ts.map +1 -1
- package/dist/sqs/actions/sendMessageBatch.js +20 -6
- package/dist/sqs/actions/sendMessageBatch.js.map +1 -1
- package/dist/sqs/actions/setQueueAttributes.d.ts.map +1 -1
- package/dist/sqs/actions/setQueueAttributes.js +3 -1
- package/dist/sqs/actions/setQueueAttributes.js.map +1 -1
- package/dist/sqs/sqsStore.d.ts +3 -1
- package/dist/sqs/sqsStore.d.ts.map +1 -1
- package/dist/sqs/sqsStore.js +5 -4
- package/dist/sqs/sqsStore.js.map +1 -1
- package/dist/sqs/sqsTypes.d.ts +10 -0
- package/dist/sqs/sqsTypes.d.ts.map +1 -1
- package/dist/sqs/sqsTypes.js +40 -1
- package/dist/sqs/sqsTypes.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -28,6 +28,32 @@ FAUXQS_PORT=3000 npx fauxqs
|
|
|
28
28
|
|
|
29
29
|
A health check is available at `GET /health`.
|
|
30
30
|
|
|
31
|
+
### Running in the background
|
|
32
|
+
|
|
33
|
+
To keep fauxqs running while you work on your app or run tests repeatedly, start it as a background process:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx fauxqs &
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Or in a separate terminal:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npx fauxqs
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
All state accumulates in memory across requests, so queues, topics, and objects persist until the server is stopped.
|
|
46
|
+
|
|
47
|
+
To stop the server:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# If backgrounded in the same shell
|
|
51
|
+
kill %1
|
|
52
|
+
|
|
53
|
+
# Cross-platform, by port
|
|
54
|
+
npx cross-port-killer 4566
|
|
55
|
+
```
|
|
56
|
+
|
|
31
57
|
### Configuring AWS SDK clients
|
|
32
58
|
|
|
33
59
|
Point your SDK clients at the local server:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteObjects.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/deleteObjects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"deleteObjects.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/deleteObjects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAW7C,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,CAAC;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,EACvD,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,CA+BN"}
|
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
import { escapeXml } from "../../common/xml.js";
|
|
2
|
+
function unescapeXml(str) {
|
|
3
|
+
return str
|
|
4
|
+
.replace(/&/g, "&")
|
|
5
|
+
.replace(/</g, "<")
|
|
6
|
+
.replace(/>/g, ">")
|
|
7
|
+
.replace(/"/g, '"')
|
|
8
|
+
.replace(/'/g, "'");
|
|
9
|
+
}
|
|
2
10
|
export function deleteObjects(request, reply, store) {
|
|
3
11
|
const bucket = request.params.bucket;
|
|
4
12
|
const body = Buffer.isBuffer(request.body)
|
|
5
13
|
? request.body.toString("utf-8")
|
|
6
14
|
: request.body;
|
|
7
|
-
// Parse <Key> elements from XML body
|
|
15
|
+
// Parse <Key> elements from XML body with proper entity unescaping
|
|
8
16
|
const keys = [];
|
|
9
|
-
const keyRegex = /<Key>([
|
|
17
|
+
const keyRegex = /<Key>([\s\S]*?)<\/Key>/g;
|
|
10
18
|
let match;
|
|
11
19
|
while ((match = keyRegex.exec(body)) !== null) {
|
|
12
|
-
keys.push(match[1]);
|
|
20
|
+
keys.push(unescapeXml(match[1]));
|
|
13
21
|
}
|
|
14
22
|
const deleted = store.deleteObjects(bucket, keys);
|
|
15
23
|
const deletedXml = deleted
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deleteObjects.js","sourceRoot":"","sources":["../../../src/s3/actions/deleteObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,MAAM,UAAU,aAAa,CAC3B,OAAuD,EACvD,KAAmB,EACnB,KAAc;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QACxC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAChC,CAAC,CAAE,OAAO,CAAC,IAAe,CAAC;IAE7B,
|
|
1
|
+
{"version":3,"file":"deleteObjects.js","sourceRoot":"","sources":["../../../src/s3/actions/deleteObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG;SACP,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAuD,EACvD,KAAmB,EACnB,KAAc;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QACxC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAChC,CAAC,CAAE,OAAO,CAAC,IAAe,CAAC;IAE7B,mEAAmE;IACnE,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,yBAAyB,CAAC;IAC3C,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAElD,MAAM,UAAU,GAAG,OAAO;SACvB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;SAC/D,IAAI,CAAC,QAAQ,CAAC,CAAC;IAElB,MAAM,GAAG,GAAG;QACV,wCAAwC;QACxC,gEAAgE;QAChE,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE;QACnC,iBAAiB;KAClB;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAChD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getObject.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/getObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,SAAS,CACvB,OAAO,EAAE,cAAc,CAAC;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,EACpE,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,
|
|
1
|
+
{"version":3,"file":"getObject.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/getObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,SAAS,CACvB,OAAO,EAAE,cAAc,CAAC;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,EACpE,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,CAcN"}
|
|
@@ -6,6 +6,9 @@ export function getObject(request, reply, store) {
|
|
|
6
6
|
reply.header("content-length", obj.contentLength);
|
|
7
7
|
reply.header("etag", obj.etag);
|
|
8
8
|
reply.header("last-modified", obj.lastModified.toUTCString());
|
|
9
|
+
for (const [metaKey, metaValue] of Object.entries(obj.metadata)) {
|
|
10
|
+
reply.header(`x-amz-meta-${metaKey}`, metaValue);
|
|
11
|
+
}
|
|
9
12
|
reply.status(200).send(obj.body);
|
|
10
13
|
}
|
|
11
14
|
//# sourceMappingURL=getObject.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getObject.js","sourceRoot":"","sources":["../../../src/s3/actions/getObject.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,SAAS,CACvB,OAAoE,EACpE,KAAmB,EACnB,KAAc;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEzC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IAClD,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"getObject.js","sourceRoot":"","sources":["../../../src/s3/actions/getObject.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,SAAS,CACvB,OAAoE,EACpE,KAAmB,EACnB,KAAc;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEzC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IAClD,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,KAAK,CAAC,MAAM,CAAC,cAAc,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headObject.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/headObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,UAAU,CACxB,OAAO,EAAE,cAAc,CAAC;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,EACpE,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,
|
|
1
|
+
{"version":3,"file":"headObject.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/headObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,UAAU,CACxB,OAAO,EAAE,cAAc,CAAC;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,EACpE,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,CAcN"}
|
|
@@ -6,6 +6,9 @@ export function headObject(request, reply, store) {
|
|
|
6
6
|
reply.header("content-length", obj.contentLength);
|
|
7
7
|
reply.header("etag", obj.etag);
|
|
8
8
|
reply.header("last-modified", obj.lastModified.toUTCString());
|
|
9
|
+
for (const [metaKey, metaValue] of Object.entries(obj.metadata)) {
|
|
10
|
+
reply.header(`x-amz-meta-${metaKey}`, metaValue);
|
|
11
|
+
}
|
|
9
12
|
reply.status(200).send();
|
|
10
13
|
}
|
|
11
14
|
//# sourceMappingURL=headObject.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headObject.js","sourceRoot":"","sources":["../../../src/s3/actions/headObject.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,UAAU,CACxB,OAAoE,EACpE,KAAmB,EACnB,KAAc;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1C,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IAClD,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"headObject.js","sourceRoot":"","sources":["../../../src/s3/actions/headObject.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,UAAU,CACxB,OAAoE,EACpE,KAAmB,EACnB,KAAc;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE1C,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9C,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IAClD,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9D,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,KAAK,CAAC,MAAM,CAAC,cAAc,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listObjects.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/listObjects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,CAAC;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,EACvD,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,
|
|
1
|
+
{"version":3,"file":"listObjects.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/listObjects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,CAAC;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,EACvD,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,CAeN"}
|
|
@@ -1,26 +1,118 @@
|
|
|
1
1
|
import { escapeXml } from "../../common/xml.js";
|
|
2
2
|
export function listObjects(request, reply, store) {
|
|
3
3
|
const bucket = request.params.bucket;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const query = (request.query ?? {});
|
|
5
|
+
const listType = query["list-type"];
|
|
6
|
+
const prefix = query["prefix"] ?? "";
|
|
7
|
+
const delimiter = query["delimiter"];
|
|
8
|
+
const maxKeysStr = query["max-keys"];
|
|
9
|
+
const maxKeys = maxKeysStr ? parseInt(maxKeysStr, 10) : 1000;
|
|
10
|
+
if (listType === "2") {
|
|
11
|
+
listObjectsV2(bucket, prefix, delimiter, maxKeys, query, reply, store);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
listObjectsV1(bucket, prefix, delimiter, maxKeys, query, reply, store);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function listObjectsV1(bucket, prefix, delimiter, maxKeys, query, reply, store) {
|
|
18
|
+
const marker = query["marker"] ?? "";
|
|
19
|
+
const { objects, commonPrefixes, isTruncated } = store.listObjects(bucket, {
|
|
20
|
+
prefix,
|
|
21
|
+
delimiter,
|
|
22
|
+
maxKeys,
|
|
23
|
+
marker,
|
|
24
|
+
});
|
|
25
|
+
const contentsXml = objects
|
|
6
26
|
.map((obj) => `<Contents>` +
|
|
7
27
|
`<Key>${escapeXml(obj.key)}</Key>` +
|
|
8
28
|
`<Size>${obj.contentLength}</Size>` +
|
|
9
29
|
`<ETag>${escapeXml(obj.etag)}</ETag>` +
|
|
10
30
|
`<LastModified>${obj.lastModified.toISOString()}</LastModified>` +
|
|
31
|
+
`<StorageClass>STANDARD</StorageClass>` +
|
|
11
32
|
`</Contents>`)
|
|
12
33
|
.join("\n ");
|
|
13
|
-
const
|
|
34
|
+
const commonPrefixesXml = commonPrefixes
|
|
35
|
+
.map((p) => `<CommonPrefixes><Prefix>${escapeXml(p)}</Prefix></CommonPrefixes>`)
|
|
36
|
+
.join("\n ");
|
|
37
|
+
const nextMarker = isTruncated && objects.length > 0 ? objects[objects.length - 1].key : "";
|
|
38
|
+
const parts = [
|
|
39
|
+
`<?xml version="1.0" encoding="UTF-8"?>`,
|
|
40
|
+
`<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">`,
|
|
41
|
+
` <Name>${escapeXml(bucket)}</Name>`,
|
|
42
|
+
` <Prefix>${escapeXml(prefix)}</Prefix>`,
|
|
43
|
+
` <Marker>${escapeXml(marker)}</Marker>`,
|
|
44
|
+
` <MaxKeys>${maxKeys}</MaxKeys>`,
|
|
45
|
+
` <IsTruncated>${isTruncated}</IsTruncated>`,
|
|
46
|
+
];
|
|
47
|
+
if (isTruncated && nextMarker) {
|
|
48
|
+
parts.push(` <NextMarker>${escapeXml(nextMarker)}</NextMarker>`);
|
|
49
|
+
}
|
|
50
|
+
if (delimiter) {
|
|
51
|
+
parts.push(` <Delimiter>${escapeXml(delimiter)}</Delimiter>`);
|
|
52
|
+
}
|
|
53
|
+
if (contentsXml)
|
|
54
|
+
parts.push(` ${contentsXml}`);
|
|
55
|
+
if (commonPrefixesXml)
|
|
56
|
+
parts.push(` ${commonPrefixesXml}`);
|
|
57
|
+
parts.push(`</ListBucketResult>`);
|
|
58
|
+
reply.header("content-type", "application/xml");
|
|
59
|
+
reply.status(200).send(parts.join("\n"));
|
|
60
|
+
}
|
|
61
|
+
function listObjectsV2(bucket, prefix, delimiter, maxKeys, query, reply, store) {
|
|
62
|
+
const startAfter = query["start-after"] ?? "";
|
|
63
|
+
const continuationToken = query["continuation-token"];
|
|
64
|
+
// Use continuation-token as the start-after if provided (it encodes the last key)
|
|
65
|
+
const effectiveStartAfter = continuationToken
|
|
66
|
+
? Buffer.from(continuationToken, "base64").toString("utf-8")
|
|
67
|
+
: startAfter;
|
|
68
|
+
const { objects, commonPrefixes, isTruncated } = store.listObjects(bucket, {
|
|
69
|
+
prefix,
|
|
70
|
+
delimiter,
|
|
71
|
+
maxKeys,
|
|
72
|
+
startAfter: effectiveStartAfter,
|
|
73
|
+
});
|
|
74
|
+
const keyCount = objects.length + commonPrefixes.length;
|
|
75
|
+
const contentsXml = objects
|
|
76
|
+
.map((obj) => `<Contents>` +
|
|
77
|
+
`<Key>${escapeXml(obj.key)}</Key>` +
|
|
78
|
+
`<Size>${obj.contentLength}</Size>` +
|
|
79
|
+
`<ETag>${escapeXml(obj.etag)}</ETag>` +
|
|
80
|
+
`<LastModified>${obj.lastModified.toISOString()}</LastModified>` +
|
|
81
|
+
`<StorageClass>STANDARD</StorageClass>` +
|
|
82
|
+
`</Contents>`)
|
|
83
|
+
.join("\n ");
|
|
84
|
+
const commonPrefixesXml = commonPrefixes
|
|
85
|
+
.map((p) => `<CommonPrefixes><Prefix>${escapeXml(p)}</Prefix></CommonPrefixes>`)
|
|
86
|
+
.join("\n ");
|
|
87
|
+
const parts = [
|
|
14
88
|
`<?xml version="1.0" encoding="UTF-8"?>`,
|
|
15
89
|
`<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">`,
|
|
16
90
|
` <Name>${escapeXml(bucket)}</Name>`,
|
|
17
|
-
` <
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
91
|
+
` <Prefix>${escapeXml(prefix)}</Prefix>`,
|
|
92
|
+
` <KeyCount>${keyCount}</KeyCount>`,
|
|
93
|
+
` <MaxKeys>${maxKeys}</MaxKeys>`,
|
|
94
|
+
` <IsTruncated>${isTruncated}</IsTruncated>`,
|
|
95
|
+
];
|
|
96
|
+
if (startAfter) {
|
|
97
|
+
parts.push(` <StartAfter>${escapeXml(startAfter)}</StartAfter>`);
|
|
98
|
+
}
|
|
99
|
+
if (continuationToken) {
|
|
100
|
+
parts.push(` <ContinuationToken>${escapeXml(continuationToken)}</ContinuationToken>`);
|
|
101
|
+
}
|
|
102
|
+
if (isTruncated && objects.length > 0) {
|
|
103
|
+
const lastKey = objects[objects.length - 1].key;
|
|
104
|
+
const nextToken = Buffer.from(lastKey, "utf-8").toString("base64");
|
|
105
|
+
parts.push(` <NextContinuationToken>${escapeXml(nextToken)}</NextContinuationToken>`);
|
|
106
|
+
}
|
|
107
|
+
if (delimiter) {
|
|
108
|
+
parts.push(` <Delimiter>${escapeXml(delimiter)}</Delimiter>`);
|
|
109
|
+
}
|
|
110
|
+
if (contentsXml)
|
|
111
|
+
parts.push(` ${contentsXml}`);
|
|
112
|
+
if (commonPrefixesXml)
|
|
113
|
+
parts.push(` ${commonPrefixesXml}`);
|
|
114
|
+
parts.push(`</ListBucketResult>`);
|
|
23
115
|
reply.header("content-type", "application/xml");
|
|
24
|
-
reply.status(200).send(
|
|
116
|
+
reply.status(200).send(parts.join("\n"));
|
|
25
117
|
}
|
|
26
118
|
//# sourceMappingURL=listObjects.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listObjects.js","sourceRoot":"","sources":["../../../src/s3/actions/listObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhD,MAAM,UAAU,WAAW,CACzB,OAAuD,EACvD,KAAmB,EACnB,KAAc;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"listObjects.js","sourceRoot":"","sources":["../../../src/s3/actions/listObjects.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"putObject.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/putObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"putObject.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/putObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAwC7C,wBAAgB,SAAS,CACvB,OAAO,EAAE,cAAc,CAAC;IAAE,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC,EACpE,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,OAAO,GACb,IAAI,CAiDN"}
|
|
@@ -21,17 +21,54 @@ function decodeAwsChunked(buf) {
|
|
|
21
21
|
}
|
|
22
22
|
return Buffer.concat(chunks);
|
|
23
23
|
}
|
|
24
|
+
function extractMetadata(headers) {
|
|
25
|
+
const metadata = {};
|
|
26
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
27
|
+
if (key.toLowerCase().startsWith("x-amz-meta-") && value) {
|
|
28
|
+
const metaKey = key.toLowerCase().slice("x-amz-meta-".length);
|
|
29
|
+
metadata[metaKey] = Array.isArray(value) ? value[0] : value;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return metadata;
|
|
33
|
+
}
|
|
24
34
|
export function putObject(request, reply, store) {
|
|
25
35
|
const bucket = request.params.bucket;
|
|
26
36
|
const key = request.params["*"];
|
|
27
37
|
const contentType = request.headers["content-type"] ?? "application/octet-stream";
|
|
38
|
+
const copySource = request.headers["x-amz-copy-source"];
|
|
39
|
+
if (copySource) {
|
|
40
|
+
// CopyObject: copy from source bucket/key
|
|
41
|
+
const decoded = decodeURIComponent(copySource).replace(/^\//, "");
|
|
42
|
+
const slashIdx = decoded.indexOf("/");
|
|
43
|
+
if (slashIdx === -1) {
|
|
44
|
+
reply.status(400).send();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const srcBucket = decoded.substring(0, slashIdx);
|
|
48
|
+
const srcKey = decoded.substring(slashIdx + 1);
|
|
49
|
+
const srcObj = store.getObject(srcBucket, srcKey);
|
|
50
|
+
const metadata = extractMetadata(request.headers);
|
|
51
|
+
const hasMetadata = Object.keys(metadata).length > 0;
|
|
52
|
+
const obj = store.putObject(bucket, key, srcObj.body, srcObj.contentType, hasMetadata ? metadata : srcObj.metadata);
|
|
53
|
+
const xml = [
|
|
54
|
+
`<?xml version="1.0" encoding="UTF-8"?>`,
|
|
55
|
+
`<CopyObjectResult>`,
|
|
56
|
+
` <ETag>${obj.etag}</ETag>`,
|
|
57
|
+
` <LastModified>${obj.lastModified.toISOString()}</LastModified>`,
|
|
58
|
+
`</CopyObjectResult>`,
|
|
59
|
+
].join("\n");
|
|
60
|
+
reply.header("content-type", "application/xml");
|
|
61
|
+
reply.status(200).send(xml);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
28
64
|
let body = Buffer.isBuffer(request.body) ? request.body : Buffer.from(request.body);
|
|
29
65
|
// Decode aws-chunked encoding if present
|
|
30
66
|
const contentEncoding = request.headers["content-encoding"];
|
|
31
67
|
if (contentEncoding && contentEncoding.includes("aws-chunked")) {
|
|
32
68
|
body = decodeAwsChunked(body);
|
|
33
69
|
}
|
|
34
|
-
const
|
|
70
|
+
const metadata = extractMetadata(request.headers);
|
|
71
|
+
const obj = store.putObject(bucket, key, body, contentType, metadata);
|
|
35
72
|
reply.header("etag", obj.etag);
|
|
36
73
|
reply.status(200).send();
|
|
37
74
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"putObject.js","sourceRoot":"","sources":["../../../src/s3/actions/putObject.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC3B,sCAAsC;QACtC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,SAAS,KAAK,CAAC,CAAC;YAAE,MAAM;QAE5B,uFAAuF;QACvF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEvD,IAAI,SAAS,KAAK,CAAC;YAAE,MAAM,CAAC,cAAc;QAE1C,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;QAC5D,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,mBAAmB;IACzD,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,OAAoE,EACpE,KAAmB,EACnB,KAAc;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"putObject.js","sourceRoot":"","sources":["../../../src/s3/actions/putObject.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3Router.d.ts","sourceRoot":"","sources":["../../src/s3/s3Router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAU5C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"s3Router.d.ts","sourceRoot":"","sources":["../../src/s3/s3Router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAU5C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAyH3E"}
|
package/dist/s3/s3Router.js
CHANGED
|
@@ -99,6 +99,8 @@ export function registerS3Routes(app, store) {
|
|
|
99
99
|
app.delete("/:bucket/*", async (request, reply) => {
|
|
100
100
|
try {
|
|
101
101
|
if (!getKey(request.params)) {
|
|
102
|
+
const bucket = request.params.bucket;
|
|
103
|
+
store.deleteBucket(bucket);
|
|
102
104
|
reply.status(204).send();
|
|
103
105
|
}
|
|
104
106
|
else {
|
package/dist/s3/s3Router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3Router.js","sourceRoot":"","sources":["../../src/s3/s3Router.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"s3Router.js","sourceRoot":"","sources":["../../src/s3/s3Router.ts"],"names":[],"mappings":"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"}
|
package/dist/s3/s3Store.d.ts
CHANGED
|
@@ -2,12 +2,23 @@ import type { S3Object } from "./s3Types.ts";
|
|
|
2
2
|
export declare class S3Store {
|
|
3
3
|
private buckets;
|
|
4
4
|
createBucket(name: string): void;
|
|
5
|
+
deleteBucket(name: string): void;
|
|
5
6
|
hasBucket(name: string): boolean;
|
|
6
|
-
putObject(bucket: string, key: string, body: Buffer, contentType?: string): S3Object;
|
|
7
|
+
putObject(bucket: string, key: string, body: Buffer, contentType?: string, metadata?: Record<string, string>): S3Object;
|
|
7
8
|
getObject(bucket: string, key: string): S3Object;
|
|
8
9
|
deleteObject(bucket: string, key: string): void;
|
|
9
10
|
headObject(bucket: string, key: string): S3Object;
|
|
10
|
-
listObjects(bucket: string
|
|
11
|
+
listObjects(bucket: string, options?: {
|
|
12
|
+
prefix?: string;
|
|
13
|
+
delimiter?: string;
|
|
14
|
+
maxKeys?: number;
|
|
15
|
+
startAfter?: string;
|
|
16
|
+
marker?: string;
|
|
17
|
+
}): {
|
|
18
|
+
objects: S3Object[];
|
|
19
|
+
commonPrefixes: string[];
|
|
20
|
+
isTruncated: boolean;
|
|
21
|
+
};
|
|
11
22
|
deleteObjects(bucket: string, keys: string[]): string[];
|
|
12
23
|
}
|
|
13
24
|
//# sourceMappingURL=s3Store.d.ts.map
|
package/dist/s3/s3Store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3Store.d.ts","sourceRoot":"","sources":["../../src/s3/s3Store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAA4C;IAE3D,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMhC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ;
|
|
1
|
+
{"version":3,"file":"s3Store.d.ts","sourceRoot":"","sources":["../../src/s3/s3Store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAA4C;IAE3D,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMhC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWhC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,QAAQ;IAqBvH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ;IAchD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQ/C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ;IAIjD,WAAW,CACT,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GACxG;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;IAwD1E,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;CAQxD"}
|
package/dist/s3/s3Store.js
CHANGED
|
@@ -7,10 +7,20 @@ export class S3Store {
|
|
|
7
7
|
this.buckets.set(name, new Map());
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
|
+
deleteBucket(name) {
|
|
11
|
+
const objects = this.buckets.get(name);
|
|
12
|
+
if (!objects) {
|
|
13
|
+
throw new S3Error("NoSuchBucket", `The specified bucket does not exist: ${name}`, 404);
|
|
14
|
+
}
|
|
15
|
+
if (objects.size > 0) {
|
|
16
|
+
throw new S3Error("BucketNotEmpty", "The bucket you tried to delete is not empty.", 409);
|
|
17
|
+
}
|
|
18
|
+
this.buckets.delete(name);
|
|
19
|
+
}
|
|
10
20
|
hasBucket(name) {
|
|
11
21
|
return this.buckets.has(name);
|
|
12
22
|
}
|
|
13
|
-
putObject(bucket, key, body, contentType) {
|
|
23
|
+
putObject(bucket, key, body, contentType, metadata) {
|
|
14
24
|
const objects = this.buckets.get(bucket);
|
|
15
25
|
if (!objects) {
|
|
16
26
|
throw new S3Error("NoSuchBucket", `The specified bucket does not exist: ${bucket}`, 404);
|
|
@@ -23,6 +33,7 @@ export class S3Store {
|
|
|
23
33
|
contentLength: body.length,
|
|
24
34
|
etag,
|
|
25
35
|
lastModified: new Date(),
|
|
36
|
+
metadata: metadata ?? {},
|
|
26
37
|
};
|
|
27
38
|
objects.set(key, obj);
|
|
28
39
|
return obj;
|
|
@@ -40,19 +51,62 @@ export class S3Store {
|
|
|
40
51
|
}
|
|
41
52
|
deleteObject(bucket, key) {
|
|
42
53
|
const objects = this.buckets.get(bucket);
|
|
43
|
-
if (objects) {
|
|
44
|
-
|
|
54
|
+
if (!objects) {
|
|
55
|
+
throw new S3Error("NoSuchBucket", `The specified bucket does not exist: ${bucket}`, 404);
|
|
45
56
|
}
|
|
57
|
+
objects.delete(key);
|
|
46
58
|
}
|
|
47
59
|
headObject(bucket, key) {
|
|
48
60
|
return this.getObject(bucket, key);
|
|
49
61
|
}
|
|
50
|
-
listObjects(bucket) {
|
|
51
|
-
const
|
|
52
|
-
if (!
|
|
62
|
+
listObjects(bucket, options) {
|
|
63
|
+
const objectsMap = this.buckets.get(bucket);
|
|
64
|
+
if (!objectsMap) {
|
|
53
65
|
throw new S3Error("NoSuchBucket", `The specified bucket does not exist: ${bucket}`, 404);
|
|
54
66
|
}
|
|
55
|
-
|
|
67
|
+
const prefix = options?.prefix ?? "";
|
|
68
|
+
const delimiter = options?.delimiter;
|
|
69
|
+
const maxKeys = options?.maxKeys ?? 1000;
|
|
70
|
+
const startAfter = options?.startAfter ?? options?.marker ?? "";
|
|
71
|
+
// Get all keys sorted lexicographically
|
|
72
|
+
const allObjects = Array.from(objectsMap.values())
|
|
73
|
+
.filter((obj) => obj.key.startsWith(prefix))
|
|
74
|
+
.sort((a, b) => a.key.localeCompare(b.key));
|
|
75
|
+
const result = [];
|
|
76
|
+
const commonPrefixSet = new Set();
|
|
77
|
+
let count = 0;
|
|
78
|
+
let isTruncated = false;
|
|
79
|
+
for (const obj of allObjects) {
|
|
80
|
+
if (startAfter && obj.key <= startAfter)
|
|
81
|
+
continue;
|
|
82
|
+
if (delimiter) {
|
|
83
|
+
const rest = obj.key.slice(prefix.length);
|
|
84
|
+
const delimIdx = rest.indexOf(delimiter);
|
|
85
|
+
if (delimIdx >= 0) {
|
|
86
|
+
const commonPrefix = prefix + rest.slice(0, delimIdx + delimiter.length);
|
|
87
|
+
if (!commonPrefixSet.has(commonPrefix)) {
|
|
88
|
+
if (count >= maxKeys) {
|
|
89
|
+
isTruncated = true;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
commonPrefixSet.add(commonPrefix);
|
|
93
|
+
count++;
|
|
94
|
+
}
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (count >= maxKeys) {
|
|
99
|
+
isTruncated = true;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
result.push(obj);
|
|
103
|
+
count++;
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
objects: result,
|
|
107
|
+
commonPrefixes: Array.from(commonPrefixSet).sort(),
|
|
108
|
+
isTruncated,
|
|
109
|
+
};
|
|
56
110
|
}
|
|
57
111
|
deleteObjects(bucket, keys) {
|
|
58
112
|
const deleted = [];
|
package/dist/s3/s3Store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3Store.js","sourceRoot":"","sources":["../../src/s3/s3Store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,OAAO,OAAO;IACV,OAAO,GAAG,IAAI,GAAG,EAAiC,CAAC;IAE3D,YAAY,CAAC,IAAY;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,GAAW,EAAE,IAAY,EAAE,WAAoB;
|
|
1
|
+
{"version":3,"file":"s3Store.js","sourceRoot":"","sources":["../../src/s3/s3Store.ts"],"names":[],"mappings":"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"}
|
package/dist/s3/s3Types.d.ts
CHANGED
package/dist/s3/s3Types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3Types.d.ts","sourceRoot":"","sources":["../../src/s3/s3Types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"s3Types.d.ts","sourceRoot":"","sources":["../../src/s3/s3Types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC"}
|
|
@@ -10,12 +10,12 @@ export function listSubscriptionsByTopic(params, snsStore) {
|
|
|
10
10
|
}
|
|
11
11
|
function formatSubscriptionList(action, subscriptions) {
|
|
12
12
|
const membersXml = subscriptions
|
|
13
|
-
.map((s) => `<member>
|
|
14
|
-
<SubscriptionArn>${escapeXml(s.arn)}</SubscriptionArn>
|
|
15
|
-
<TopicArn>${escapeXml(s.topicArn)}</TopicArn>
|
|
16
|
-
<Protocol>${escapeXml(s.protocol)}</Protocol>
|
|
17
|
-
<Endpoint>${escapeXml(s.endpoint)}</Endpoint>
|
|
18
|
-
<Owner>000000000000</Owner>
|
|
13
|
+
.map((s) => `<member>
|
|
14
|
+
<SubscriptionArn>${escapeXml(s.arn)}</SubscriptionArn>
|
|
15
|
+
<TopicArn>${escapeXml(s.topicArn)}</TopicArn>
|
|
16
|
+
<Protocol>${escapeXml(s.protocol)}</Protocol>
|
|
17
|
+
<Endpoint>${escapeXml(s.endpoint)}</Endpoint>
|
|
18
|
+
<Owner>000000000000</Owner>
|
|
19
19
|
</member>`)
|
|
20
20
|
.join("\n ");
|
|
21
21
|
return snsSuccessResponse(action, `<Subscriptions>${membersXml}</Subscriptions>`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/sns/actions/publish.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMtD,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GACjB,MAAM,
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/sns/actions/publish.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMtD,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GACjB,MAAM,CAsIR;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,GACjB,MAAM,CA8HR"}
|