local-serverless-stack 0.6.0 → 0.9.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/CHANGELOG.md +104 -0
- package/README.md +261 -583
- package/bin/cli.js +31 -3
- package/dist/client/types.d.ts +4 -0
- package/dist/client/types.d.ts.map +1 -1
- package/dist/server/engine/aoss-sidecar.d.ts +13 -0
- package/dist/server/engine/aoss-sidecar.d.ts.map +1 -0
- package/dist/server/engine/aoss-sidecar.js +93 -0
- package/dist/server/engine/aoss-sidecar.js.map +1 -0
- package/dist/server/engine/backends/localstack-backend.d.ts +25 -0
- package/dist/server/engine/backends/localstack-backend.d.ts.map +1 -0
- package/dist/server/engine/backends/localstack-backend.js +199 -0
- package/dist/server/engine/backends/localstack-backend.js.map +1 -0
- package/dist/server/engine/backends/self-backend.d.ts +32 -0
- package/dist/server/engine/backends/self-backend.d.ts.map +1 -0
- package/dist/server/engine/backends/self-backend.js +207 -0
- package/dist/server/engine/backends/self-backend.js.map +1 -0
- package/dist/server/engine/bus.d.ts +10 -0
- package/dist/server/engine/bus.d.ts.map +1 -0
- package/dist/server/engine/bus.js +24 -0
- package/dist/server/engine/bus.js.map +1 -0
- package/dist/server/engine/dispatch/dispatcher.d.ts +46 -0
- package/dist/server/engine/dispatch/dispatcher.d.ts.map +1 -0
- package/dist/server/engine/dispatch/dispatcher.js +312 -0
- package/dist/server/engine/dispatch/dispatcher.js.map +1 -0
- package/dist/server/engine/dispatch/scheduler.d.ts +47 -0
- package/dist/server/engine/dispatch/scheduler.d.ts.map +1 -0
- package/dist/server/engine/dispatch/scheduler.js +328 -0
- package/dist/server/engine/dispatch/scheduler.js.map +1 -0
- package/dist/server/engine/dispatch/sqs-poller.d.ts +25 -0
- package/dist/server/engine/dispatch/sqs-poller.d.ts.map +1 -0
- package/dist/server/engine/dispatch/sqs-poller.js +242 -0
- package/dist/server/engine/dispatch/sqs-poller.js.map +1 -0
- package/dist/server/engine/dispatch/stream-tailer.d.ts +22 -0
- package/dist/server/engine/dispatch/stream-tailer.d.ts.map +1 -0
- package/dist/server/engine/dispatch/stream-tailer.js +205 -0
- package/dist/server/engine/dispatch/stream-tailer.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/decimal.d.ts +5 -0
- package/dist/server/engine/emulators/dynamodb/expressions/decimal.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/decimal.js +91 -0
- package/dist/server/engine/emulators/dynamodb/expressions/decimal.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/evaluate.d.ts +24 -0
- package/dist/server/engine/emulators/dynamodb/expressions/evaluate.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/evaluate.js +183 -0
- package/dist/server/engine/emulators/dynamodb/expressions/evaluate.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/expression-types.d.ts +29 -0
- package/dist/server/engine/emulators/dynamodb/expressions/expression-types.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/expression-types.js +12 -0
- package/dist/server/engine/emulators/dynamodb/expressions/expression-types.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/index.d.ts +13 -0
- package/dist/server/engine/emulators/dynamodb/expressions/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/index.js +244 -0
- package/dist/server/engine/emulators/dynamodb/expressions/index.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/lexer.d.ts +11 -0
- package/dist/server/engine/emulators/dynamodb/expressions/lexer.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/lexer.js +109 -0
- package/dist/server/engine/emulators/dynamodb/expressions/lexer.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/parser.d.ts +23 -0
- package/dist/server/engine/emulators/dynamodb/expressions/parser.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/expressions/parser.js +541 -0
- package/dist/server/engine/emulators/dynamodb/expressions/parser.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/index.d.ts +46 -0
- package/dist/server/engine/emulators/dynamodb/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/index.js +572 -0
- package/dist/server/engine/emulators/dynamodb/index.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/query.d.ts +12 -0
- package/dist/server/engine/emulators/dynamodb/query.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/query.js +237 -0
- package/dist/server/engine/emulators/dynamodb/query.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/schema.d.ts +58 -0
- package/dist/server/engine/emulators/dynamodb/schema.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/schema.js +284 -0
- package/dist/server/engine/emulators/dynamodb/schema.js.map +1 -0
- package/dist/server/engine/emulators/dynamodb/streams.d.ts +28 -0
- package/dist/server/engine/emulators/dynamodb/streams.d.ts.map +1 -0
- package/dist/server/engine/emulators/dynamodb/streams.js +100 -0
- package/dist/server/engine/emulators/dynamodb/streams.js.map +1 -0
- package/dist/server/engine/emulators/events/index.d.ts +53 -0
- package/dist/server/engine/emulators/events/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/events/index.js +417 -0
- package/dist/server/engine/emulators/events/index.js.map +1 -0
- package/dist/server/engine/emulators/events/pattern.d.ts +3 -0
- package/dist/server/engine/emulators/events/pattern.d.ts.map +1 -0
- package/dist/server/engine/emulators/events/pattern.js +125 -0
- package/dist/server/engine/emulators/events/pattern.js.map +1 -0
- package/dist/server/engine/emulators/lambda-ctl/index.d.ts +55 -0
- package/dist/server/engine/emulators/lambda-ctl/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/lambda-ctl/index.js +461 -0
- package/dist/server/engine/emulators/lambda-ctl/index.js.map +1 -0
- package/dist/server/engine/emulators/opensearch/index.d.ts +67 -0
- package/dist/server/engine/emulators/opensearch/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/opensearch/index.js +811 -0
- package/dist/server/engine/emulators/opensearch/index.js.map +1 -0
- package/dist/server/engine/emulators/opensearch/search.d.ts +17 -0
- package/dist/server/engine/emulators/opensearch/search.d.ts.map +1 -0
- package/dist/server/engine/emulators/opensearch/search.js +434 -0
- package/dist/server/engine/emulators/opensearch/search.js.map +1 -0
- package/dist/server/engine/emulators/s3/index.d.ts +45 -0
- package/dist/server/engine/emulators/s3/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/s3/index.js +591 -0
- package/dist/server/engine/emulators/s3/index.js.map +1 -0
- package/dist/server/engine/emulators/sns/index.d.ts +22 -0
- package/dist/server/engine/emulators/sns/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/sns/index.js +135 -0
- package/dist/server/engine/emulators/sns/index.js.map +1 -0
- package/dist/server/engine/emulators/sqs/index.d.ts +66 -0
- package/dist/server/engine/emulators/sqs/index.d.ts.map +1 -0
- package/dist/server/engine/emulators/sqs/index.js +552 -0
- package/dist/server/engine/emulators/sqs/index.js.map +1 -0
- package/dist/server/engine/emulators/sqs/md5.d.ts +8 -0
- package/dist/server/engine/emulators/sqs/md5.d.ts.map +1 -0
- package/dist/server/engine/emulators/sqs/md5.js +36 -0
- package/dist/server/engine/emulators/sqs/md5.js.map +1 -0
- package/dist/server/engine/emulators/sqs/queue.d.ts +105 -0
- package/dist/server/engine/emulators/sqs/queue.d.ts.map +1 -0
- package/dist/server/engine/emulators/sqs/queue.js +371 -0
- package/dist/server/engine/emulators/sqs/queue.js.map +1 -0
- package/dist/server/engine/emulators/sts.d.ts +8 -0
- package/dist/server/engine/emulators/sts.d.ts.map +1 -0
- package/dist/server/engine/emulators/sts.js +23 -0
- package/dist/server/engine/emulators/sts.js.map +1 -0
- package/dist/server/engine/engine-backend.d.ts +17 -0
- package/dist/server/engine/engine-backend.d.ts.map +1 -0
- package/dist/server/engine/engine-backend.js +7 -0
- package/dist/server/engine/engine-backend.js.map +1 -0
- package/dist/server/engine/engine-manager.d.ts +22 -0
- package/dist/server/engine/engine-manager.d.ts.map +1 -0
- package/dist/server/engine/engine-manager.js +74 -0
- package/dist/server/engine/engine-manager.js.map +1 -0
- package/dist/server/engine/http/aws-chunked.d.ts +3 -0
- package/dist/server/engine/http/aws-chunked.d.ts.map +1 -0
- package/dist/server/engine/http/aws-chunked.js +50 -0
- package/dist/server/engine/http/aws-chunked.js.map +1 -0
- package/dist/server/engine/http/errors.d.ts +20 -0
- package/dist/server/engine/http/errors.d.ts.map +1 -0
- package/dist/server/engine/http/errors.js +43 -0
- package/dist/server/engine/http/errors.js.map +1 -0
- package/dist/server/engine/http/protocols/aws-json.d.ts +8 -0
- package/dist/server/engine/http/protocols/aws-json.d.ts.map +1 -0
- package/dist/server/engine/http/protocols/aws-json.js +42 -0
- package/dist/server/engine/http/protocols/aws-json.js.map +1 -0
- package/dist/server/engine/http/protocols/query-xml.d.ts +7 -0
- package/dist/server/engine/http/protocols/query-xml.d.ts.map +1 -0
- package/dist/server/engine/http/protocols/query-xml.js +35 -0
- package/dist/server/engine/http/protocols/query-xml.js.map +1 -0
- package/dist/server/engine/http/router.d.ts +8 -0
- package/dist/server/engine/http/router.d.ts.map +1 -0
- package/dist/server/engine/http/router.js +402 -0
- package/dist/server/engine/http/router.js.map +1 -0
- package/dist/server/engine/http/sigv4.d.ts +9 -0
- package/dist/server/engine/http/sigv4.d.ts.map +1 -0
- package/dist/server/engine/http/sigv4.js +33 -0
- package/dist/server/engine/http/sigv4.js.map +1 -0
- package/dist/server/engine/http/xml.d.ts +16 -0
- package/dist/server/engine/http/xml.d.ts.map +1 -0
- package/dist/server/engine/http/xml.js +92 -0
- package/dist/server/engine/http/xml.js.map +1 -0
- package/dist/server/engine/store/atomic.d.ts +4 -0
- package/dist/server/engine/store/atomic.d.ts.map +1 -0
- package/dist/server/engine/store/atomic.js +35 -0
- package/dist/server/engine/store/atomic.js.map +1 -0
- package/dist/server/engine/store/engine-store.d.ts +9 -0
- package/dist/server/engine/store/engine-store.d.ts.map +1 -0
- package/dist/server/engine/store/engine-store.js +218 -0
- package/dist/server/engine/store/engine-store.js.map +1 -0
- package/dist/server/engine/store/store-types.d.ts +37 -0
- package/dist/server/engine/store/store-types.d.ts.map +1 -0
- package/dist/server/engine/store/store-types.js +17 -0
- package/dist/server/engine/store/store-types.js.map +1 -0
- package/dist/server/engine/store/wal.d.ts +49 -0
- package/dist/server/engine/store/wal.d.ts.map +1 -0
- package/dist/server/engine/store/wal.js +328 -0
- package/dist/server/engine/store/wal.js.map +1 -0
- package/dist/server/engine/types.d.ts +137 -0
- package/dist/server/engine/types.d.ts.map +1 -0
- package/dist/server/engine/types.js +8 -0
- package/dist/server/engine/types.js.map +1 -0
- package/dist/server/index.js +43 -9
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/config.d.ts.map +1 -1
- package/dist/server/routes/config.js +16 -0
- package/dist/server/routes/config.js.map +1 -1
- package/dist/server/routes/opensearch.d.ts +3 -0
- package/dist/server/routes/opensearch.d.ts.map +1 -0
- package/dist/server/routes/opensearch.js +69 -0
- package/dist/server/routes/opensearch.js.map +1 -0
- package/dist/server/routes/resources.d.ts.map +1 -1
- package/dist/server/routes/resources.js +4 -1
- package/dist/server/routes/resources.js.map +1 -1
- package/dist/server/routes/services.d.ts.map +1 -1
- package/dist/server/routes/services.js +3 -0
- package/dist/server/routes/services.js.map +1 -1
- package/dist/server/services/cache-manager.d.ts +2 -1
- package/dist/server/services/cache-manager.d.ts.map +1 -1
- package/dist/server/services/cache-manager.js +22 -2
- package/dist/server/services/cache-manager.js.map +1 -1
- package/dist/server/services/cloudformation-parser.d.ts +35 -2
- package/dist/server/services/cloudformation-parser.d.ts.map +1 -1
- package/dist/server/services/cloudformation-parser.js +88 -3
- package/dist/server/services/cloudformation-parser.js.map +1 -1
- package/dist/server/services/config-manager.d.ts +82 -0
- package/dist/server/services/config-manager.d.ts.map +1 -1
- package/dist/server/services/config-manager.js +151 -7
- package/dist/server/services/config-manager.js.map +1 -1
- package/dist/server/services/gateway-manager.d.ts +2 -0
- package/dist/server/services/gateway-manager.d.ts.map +1 -1
- package/dist/server/services/gateway-manager.js +44 -6
- package/dist/server/services/gateway-manager.js.map +1 -1
- package/dist/server/services/localstack-manager.d.ts +0 -7
- package/dist/server/services/localstack-manager.d.ts.map +1 -1
- package/dist/server/services/localstack-manager.js +11 -173
- package/dist/server/services/localstack-manager.js.map +1 -1
- package/dist/server/services/opensearch-explorer.d.ts +37 -0
- package/dist/server/services/opensearch-explorer.d.ts.map +1 -0
- package/dist/server/services/opensearch-explorer.js +124 -0
- package/dist/server/services/opensearch-explorer.js.map +1 -0
- package/dist/server/services/resource-provisioner.d.ts +13 -0
- package/dist/server/services/resource-provisioner.d.ts.map +1 -1
- package/dist/server/services/resource-provisioner.js +257 -11
- package/dist/server/services/resource-provisioner.js.map +1 -1
- package/dist/server/services/service-registrar.d.ts +1 -0
- package/dist/server/services/service-registrar.d.ts.map +1 -1
- package/dist/server/services/service-registrar.js +19 -4
- package/dist/server/services/service-registrar.js.map +1 -1
- package/dist/ui/assets/ApisPage-C0xaNFQW.js +1 -0
- package/dist/ui/assets/BucketDetailPage-Bnny8S04.js +1 -0
- package/dist/ui/assets/BucketsPage-Dd3Y4-gU.js +1 -0
- package/dist/ui/assets/{DynamoPage-B1__Rjr2.js → DynamoPage-JzSF-4VI.js} +1 -1
- package/dist/ui/assets/DynamoTablePage-uM0DXGCo.js +3 -0
- package/dist/ui/assets/LambdaDetailPage-CoR9ZXdb.js +4 -0
- package/dist/ui/assets/LambdasPage-CNMX_O5P.js +1 -0
- package/dist/ui/assets/OpenSearchCollectionPage-D5FaSCF1.js +1 -0
- package/dist/ui/assets/OpenSearchPage-FEzLxaej.js +1 -0
- package/dist/ui/assets/OverviewPage-0xvjT7Q0.js +1 -0
- package/dist/ui/assets/OverviewPage-qEl0a-0B.css +1 -0
- package/dist/ui/assets/QueueDetailPage-B2GaNLLe.js +1 -0
- package/dist/ui/assets/QueuesPage-Ch5kGwrp.js +1 -0
- package/dist/ui/assets/ServiceDetailPage-DKiz21oo.js +2 -0
- package/dist/ui/assets/ServicesPage-Cmi3UIfM.js +2 -0
- package/dist/ui/assets/index-DH7RTkRh.css +1 -0
- package/dist/ui/assets/index-MF9fVrsr.js +37 -0
- package/dist/ui/index.html +2 -2
- package/package.json +3 -1
- package/dist/ui/assets/ApisPage-DdgKjEdS.js +0 -1
- package/dist/ui/assets/BucketDetailPage-DZQGxm0y.js +0 -1
- package/dist/ui/assets/BucketsPage-xYXzxCvd.js +0 -1
- package/dist/ui/assets/DynamoTablePage-BCoxPdXW.js +0 -3
- package/dist/ui/assets/LambdaDetailPage-B85CA8tb.js +0 -4
- package/dist/ui/assets/LambdasPage-_TtxQMT_.js +0 -1
- package/dist/ui/assets/OverviewPage-6jDXV1jr.css +0 -1
- package/dist/ui/assets/OverviewPage-CqTKTY64.js +0 -1
- package/dist/ui/assets/QueueDetailPage-BOr_sImA.js +0 -1
- package/dist/ui/assets/QueuesPage-DpByfcM5.js +0 -1
- package/dist/ui/assets/ServiceDetailPage-DsWgV-ad.js +0 -2
- package/dist/ui/assets/ServicesPage-CGlpsj98.js +0 -2
- package/dist/ui/assets/index-BWlB542w.js +0 -36
- package/dist/ui/assets/index-EYnsoJOq.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/engine/emulators/sns/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAOlG,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,WAAY,YAAW,aAAa;IAC/C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAS;IAE5C,OAAO,CAAC,GAAG,CAAgB;IAG3B,OAAO,CAAC,aAAa,CAA6B;gBAEtC,GAAG,EAAE,aAAa;IAIxB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAY9F,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;YAIxB,WAAW;YAYX,UAAU;YAQV,WAAW;YASX,kBAAkB;YAalB,OAAO;YAkBP,MAAM;YAMN,YAAY;IAS1B,OAAO,CAAC,QAAQ;CAGjB"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// SNS emulator (Query protocol — SNS never migrated to JSON). Minimal v1
|
|
2
|
+
// surface: topics as catalog metadata plus Publish as a logged no-op with an
|
|
3
|
+
// in-memory counter; no subscriptions or fan-out (PRD §RF-scope). handle()
|
|
4
|
+
// returns the complete XML document; the router only sets headers.
|
|
5
|
+
//
|
|
6
|
+
// Fidelity anchors: resource-provisioner.ts createSNSTopic (idempotent by
|
|
7
|
+
// "already exists" message) and deleteSNSTopic (ListTopics then match ARN by
|
|
8
|
+
// endsWith(':' + name), tolerates "NotFound").
|
|
9
|
+
import { randomUUID } from 'crypto';
|
|
10
|
+
import { AwsError, notImplemented } from '../../http/errors.js';
|
|
11
|
+
import { tag, xmlDocument } from '../../http/xml.js';
|
|
12
|
+
const SNS_XMLNS = 'http://sns.amazonaws.com/doc/2010-03-31/';
|
|
13
|
+
export class SnsEmulator {
|
|
14
|
+
service = 'sns';
|
|
15
|
+
ctx;
|
|
16
|
+
// Messages published per topic ARN since boot — dashboard/testing surface;
|
|
17
|
+
// deliberately not persisted (Publish stores nothing in v1).
|
|
18
|
+
publishCounts = new Map();
|
|
19
|
+
constructor(ctx) {
|
|
20
|
+
this.ctx = ctx;
|
|
21
|
+
}
|
|
22
|
+
async handle(action, params, req) {
|
|
23
|
+
const region = req.region;
|
|
24
|
+
switch (action) {
|
|
25
|
+
case 'CreateTopic': return this.createTopic(region, params);
|
|
26
|
+
case 'ListTopics': return this.listTopics(region);
|
|
27
|
+
case 'DeleteTopic': return this.deleteTopic(region, params);
|
|
28
|
+
case 'GetTopicAttributes': return this.getTopicAttributes(region, params);
|
|
29
|
+
case 'Publish': return this.publish(region, params);
|
|
30
|
+
default: throw notImplemented('sns', action);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
publishCount(topicArn) {
|
|
34
|
+
return this.publishCounts.get(topicArn) ?? 0;
|
|
35
|
+
}
|
|
36
|
+
async createTopic(region, params) {
|
|
37
|
+
const name = requireParam(params, 'Name');
|
|
38
|
+
const topics = await this.topics(region);
|
|
39
|
+
// Idempotent by name, like AWS when attributes are equal (we keep none
|
|
40
|
+
// that could conflict).
|
|
41
|
+
if (!topics.get(name)) {
|
|
42
|
+
const attributes = entryMap(params, 'Attributes.entry');
|
|
43
|
+
topics.set(name, { name, displayName: attributes.DisplayName ?? '' });
|
|
44
|
+
}
|
|
45
|
+
return response('CreateTopic', tag('TopicArn', this.topicArn(region, name)));
|
|
46
|
+
}
|
|
47
|
+
async listTopics(region) {
|
|
48
|
+
const topics = await this.topics(region);
|
|
49
|
+
const members = topics.values()
|
|
50
|
+
.map(topic => tag('member', tag('TopicArn', this.topicArn(region, topic.name)), { escape: false }))
|
|
51
|
+
.join('');
|
|
52
|
+
return response('ListTopics', tag('Topics', members, { escape: false }));
|
|
53
|
+
}
|
|
54
|
+
async deleteTopic(region, params) {
|
|
55
|
+
const arn = requireParam(params, 'TopicArn');
|
|
56
|
+
const topics = await this.topics(region);
|
|
57
|
+
// Idempotent like AWS: deleting an absent topic succeeds.
|
|
58
|
+
topics.delete(topicNameFromArn(arn));
|
|
59
|
+
this.publishCounts.delete(arn);
|
|
60
|
+
return response('DeleteTopic');
|
|
61
|
+
}
|
|
62
|
+
async getTopicAttributes(region, params) {
|
|
63
|
+
const arn = requireParam(params, 'TopicArn');
|
|
64
|
+
const topic = await this.requireTopic(region, arn);
|
|
65
|
+
const entries = [
|
|
66
|
+
['TopicArn', this.topicArn(region, topic.name)],
|
|
67
|
+
['DisplayName', topic.displayName],
|
|
68
|
+
];
|
|
69
|
+
const attributes = entries
|
|
70
|
+
.map(([key, value]) => tag('entry', tag('key', key) + tag('value', value), { escape: false }))
|
|
71
|
+
.join('');
|
|
72
|
+
return response('GetTopicAttributes', tag('Attributes', attributes, { escape: false }));
|
|
73
|
+
}
|
|
74
|
+
async publish(region, params) {
|
|
75
|
+
// Publish addresses the topic via TopicArn or TargetArn.
|
|
76
|
+
const arn = params.TopicArn || params.TargetArn;
|
|
77
|
+
if (!arn) {
|
|
78
|
+
throw new AwsError('InvalidParameter', 'Invalid parameter: TopicArn Reason: no value given');
|
|
79
|
+
}
|
|
80
|
+
const message = params.Message;
|
|
81
|
+
if (message === undefined || message === '') {
|
|
82
|
+
throw new AwsError('InvalidParameter', 'Invalid parameter: Empty message');
|
|
83
|
+
}
|
|
84
|
+
const topic = await this.requireTopic(region, arn);
|
|
85
|
+
const messageId = randomUUID();
|
|
86
|
+
const count = (this.publishCounts.get(arn) ?? 0) + 1;
|
|
87
|
+
this.publishCounts.set(arn, count);
|
|
88
|
+
console.log(`[engine:sns] Publish #${count} to ${topic.name}: ${messageId} (${message.length} bytes, no subscribers in v1)`);
|
|
89
|
+
return response('Publish', tag('MessageId', messageId));
|
|
90
|
+
}
|
|
91
|
+
async topics(region) {
|
|
92
|
+
const catalog = this.ctx.store.catalog(`sns/${region}/topics`);
|
|
93
|
+
await catalog.load();
|
|
94
|
+
return catalog;
|
|
95
|
+
}
|
|
96
|
+
async requireTopic(region, arn) {
|
|
97
|
+
const topics = await this.topics(region);
|
|
98
|
+
const topic = topics.get(topicNameFromArn(arn));
|
|
99
|
+
if (!topic) {
|
|
100
|
+
throw new AwsError('NotFound', 'Topic does not exist', { status: 404, fault: 'Sender' });
|
|
101
|
+
}
|
|
102
|
+
return topic;
|
|
103
|
+
}
|
|
104
|
+
topicArn(region, name) {
|
|
105
|
+
return `arn:aws:sns:${region}:${this.ctx.config.account}:${name}`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function topicNameFromArn(arn) {
|
|
109
|
+
return arn.slice(arn.lastIndexOf(':') + 1);
|
|
110
|
+
}
|
|
111
|
+
// <ActionResponse xmlns=…><ActionResult>…</ActionResult><ResponseMetadata>
|
|
112
|
+
// <RequestId>…</RequestId></ResponseMetadata></ActionResponse>. Actions
|
|
113
|
+
// without a result shape (DeleteTopic) skip the Result element, like AWS.
|
|
114
|
+
function response(action, resultXml) {
|
|
115
|
+
const result = resultXml === undefined ? '' : tag(`${action}Result`, resultXml, { escape: false });
|
|
116
|
+
const metadata = tag('ResponseMetadata', tag('RequestId', randomUUID()), { escape: false });
|
|
117
|
+
return xmlDocument(tag(`${action}Response`, result + metadata, { attrs: { xmlns: SNS_XMLNS }, escape: false }));
|
|
118
|
+
}
|
|
119
|
+
function requireParam(params, name) {
|
|
120
|
+
const value = params[name];
|
|
121
|
+
if (value === undefined || value === '') {
|
|
122
|
+
throw new AwsError('InvalidParameter', `Invalid parameter: ${name} Reason: no value given`);
|
|
123
|
+
}
|
|
124
|
+
return value;
|
|
125
|
+
}
|
|
126
|
+
// Query-protocol collections arrive flattened ("Attributes.entry.1.key",
|
|
127
|
+
// "Attributes.entry.1.value", …); rebuild the map.
|
|
128
|
+
function entryMap(params, prefix) {
|
|
129
|
+
const map = {};
|
|
130
|
+
for (let index = 1; params[`${prefix}.${index}.key`] !== undefined; index++) {
|
|
131
|
+
map[params[`${prefix}.${index}.key`]] = params[`${prefix}.${index}.value`] ?? '';
|
|
132
|
+
}
|
|
133
|
+
return map;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/server/engine/emulators/sns/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { AwsRequest, EngineContext, EngineServiceName, TargetEmulator } from '../../types.js';
|
|
2
|
+
import type { SerializedQueueMessages } from './queue.js';
|
|
3
|
+
import type { SqsMessageAttributeValue } from './md5.js';
|
|
4
|
+
export interface DeliveredMessage {
|
|
5
|
+
messageId: string;
|
|
6
|
+
receiptHandle: string;
|
|
7
|
+
body: string;
|
|
8
|
+
attributes: Record<string, string>;
|
|
9
|
+
messageAttributes: Record<string, SqsMessageAttributeValue>;
|
|
10
|
+
md5OfBody: string;
|
|
11
|
+
md5OfMessageAttributes?: string;
|
|
12
|
+
sentTimestamp: number;
|
|
13
|
+
approximateReceiveCount: number;
|
|
14
|
+
messageGroupId?: string;
|
|
15
|
+
sequenceNumber?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface SqsMessagesSnapshot {
|
|
18
|
+
queues: Array<{
|
|
19
|
+
region: string;
|
|
20
|
+
queueName: string;
|
|
21
|
+
state: SerializedQueueMessages;
|
|
22
|
+
}>;
|
|
23
|
+
}
|
|
24
|
+
export declare function queueNameFromArn(arn: string): string;
|
|
25
|
+
export declare class SqsEmulator implements TargetEmulator {
|
|
26
|
+
readonly service: EngineServiceName;
|
|
27
|
+
readonly targetPrefix = "AmazonSQS";
|
|
28
|
+
readonly jsonVersion: "1.0";
|
|
29
|
+
private readonly ctx;
|
|
30
|
+
private readonly catalogs;
|
|
31
|
+
private readonly runtimes;
|
|
32
|
+
constructor(ctx: EngineContext);
|
|
33
|
+
handle(operation: string, input: Record<string, unknown>, req: AwsRequest): Promise<object>;
|
|
34
|
+
queueExists(region: string, queueName: string): boolean;
|
|
35
|
+
hasVisibleMessages(region: string, queueName: string): boolean;
|
|
36
|
+
receiveForDelivery(region: string, queueName: string, max: number): DeliveredMessage[];
|
|
37
|
+
deleteDelivered(region: string, queueName: string, receiptHandles: string[]): void;
|
|
38
|
+
ensureRegionLoaded(region: string): Promise<void>;
|
|
39
|
+
serializeMessages(): SqsMessagesSnapshot;
|
|
40
|
+
restoreMessages(snapshot: SqsMessagesSnapshot): void;
|
|
41
|
+
private createQueue;
|
|
42
|
+
private getQueueUrl;
|
|
43
|
+
private getQueueAttributes;
|
|
44
|
+
private setQueueAttributes;
|
|
45
|
+
private listQueues;
|
|
46
|
+
private deleteQueue;
|
|
47
|
+
private sendMessage;
|
|
48
|
+
private sendMessageBatch;
|
|
49
|
+
private sendOne;
|
|
50
|
+
private receiveMessage;
|
|
51
|
+
private deleteMessage;
|
|
52
|
+
private deleteMessageBatch;
|
|
53
|
+
private purgeQueue;
|
|
54
|
+
private changeMessageVisibility;
|
|
55
|
+
private catalogFor;
|
|
56
|
+
private runtimeFor;
|
|
57
|
+
private newRuntime;
|
|
58
|
+
private requireQueue;
|
|
59
|
+
private queueUrl;
|
|
60
|
+
private queueArn;
|
|
61
|
+
private attrInt;
|
|
62
|
+
private attrMs;
|
|
63
|
+
private systemAttributes;
|
|
64
|
+
private shapeMessage;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/server/engine/emulators/sqs/index.ts"],"names":[],"mappings":"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"}
|