fauxqs 1.1.0 → 1.3.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 +179 -34
- package/dist/app.d.ts +30 -2
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +62 -8
- package/dist/app.js.map +1 -1
- package/dist/initConfig.d.ts +28 -0
- package/dist/initConfig.d.ts.map +1 -0
- package/dist/initConfig.js +46 -0
- package/dist/initConfig.js.map +1 -0
- package/dist/s3/actions/abortMultipartUpload.d.ts +9 -0
- package/dist/s3/actions/abortMultipartUpload.d.ts.map +1 -0
- package/dist/s3/actions/abortMultipartUpload.js +7 -0
- package/dist/s3/actions/abortMultipartUpload.js.map +1 -0
- package/dist/s3/actions/completeMultipartUpload.d.ts +9 -0
- package/dist/s3/actions/completeMultipartUpload.d.ts.map +1 -0
- package/dist/s3/actions/completeMultipartUpload.js +53 -0
- package/dist/s3/actions/completeMultipartUpload.js.map +1 -0
- package/dist/s3/actions/createMultipartUpload.d.ts +9 -0
- package/dist/s3/actions/createMultipartUpload.d.ts.map +1 -0
- package/dist/s3/actions/createMultipartUpload.js +29 -0
- package/dist/s3/actions/createMultipartUpload.js.map +1 -0
- package/dist/s3/actions/deleteBucket.d.ts +8 -0
- package/dist/s3/actions/deleteBucket.d.ts.map +1 -0
- package/dist/s3/actions/deleteBucket.js +6 -0
- package/dist/s3/actions/deleteBucket.js.map +1 -0
- package/dist/s3/actions/listBuckets.d.ts +4 -0
- package/dist/s3/actions/listBuckets.d.ts.map +1 -0
- package/dist/s3/actions/listBuckets.js +27 -0
- package/dist/s3/actions/listBuckets.js.map +1 -0
- package/dist/s3/actions/putObject.d.ts.map +1 -1
- package/dist/s3/actions/putObject.js.map +1 -1
- package/dist/s3/actions/uploadPart.d.ts +9 -0
- package/dist/s3/actions/uploadPart.d.ts.map +1 -0
- package/dist/s3/actions/uploadPart.js +32 -0
- package/dist/s3/actions/uploadPart.js.map +1 -0
- package/dist/s3/s3Router.d.ts.map +1 -1
- package/dist/s3/s3Router.js +59 -6
- package/dist/s3/s3Router.js.map +1 -1
- package/dist/s3/s3Store.d.ts +14 -0
- package/dist/s3/s3Store.d.ts.map +1 -1
- package/dist/s3/s3Store.js +114 -1
- package/dist/s3/s3Store.js.map +1 -1
- package/dist/s3/s3Types.d.ts +15 -0
- package/dist/s3/s3Types.d.ts.map +1 -1
- package/dist/sns/actions/listSubscriptions.js +6 -6
- package/dist/sns/actions/publish.js +8 -1
- package/dist/sns/actions/publish.js.map +1 -1
- package/dist/sns/snsStore.d.ts +1 -0
- package/dist/sns/snsStore.d.ts.map +1 -1
- package/dist/sns/snsStore.js +4 -0
- package/dist/sns/snsStore.js.map +1 -1
- package/dist/sqs/actions/sendMessageBatch.d.ts.map +1 -1
- package/dist/sqs/actions/sendMessageBatch.js +1 -1
- package/dist/sqs/actions/sendMessageBatch.js.map +1 -1
- package/dist/sqs/sqsStore.d.ts +1 -0
- package/dist/sqs/sqsStore.d.ts.map +1 -1
- package/dist/sqs/sqsStore.js +11 -1
- package/dist/sqs/sqsStore.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -20,10 +20,18 @@ npx fauxqs
|
|
|
20
20
|
|
|
21
21
|
The server starts on port `4566` and handles SQS, SNS, and S3 on a single endpoint.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
#### Environment variables
|
|
24
|
+
|
|
25
|
+
| Variable | Description | Default |
|
|
26
|
+
|----------|-------------|---------|
|
|
27
|
+
| `FAUXQS_PORT` | Port to listen on | `4566` |
|
|
28
|
+
| `FAUXQS_HOST` | Host for queue URLs (enables `sqs.<region>.<host>` format) | (none) |
|
|
29
|
+
| `FAUXQS_DEFAULT_REGION` | Fallback region for ARNs and URLs | `us-east-1` |
|
|
30
|
+
| `FAUXQS_LOGGER` | Enable request logging (`true`/`false`) | `true` |
|
|
31
|
+
| `FAUXQS_INIT` | Path to a JSON init config file (see [Init config file](#init-config-file)) | (none) |
|
|
24
32
|
|
|
25
33
|
```bash
|
|
26
|
-
FAUXQS_PORT=3000 npx fauxqs
|
|
34
|
+
FAUXQS_PORT=3000 FAUXQS_INIT=init.json npx fauxqs
|
|
27
35
|
```
|
|
28
36
|
|
|
29
37
|
A health check is available at `GET /health`.
|
|
@@ -62,6 +70,7 @@ Point your SDK clients at the local server:
|
|
|
62
70
|
import { SQSClient } from "@aws-sdk/client-sqs";
|
|
63
71
|
import { SNSClient } from "@aws-sdk/client-sns";
|
|
64
72
|
import { S3Client } from "@aws-sdk/client-s3";
|
|
73
|
+
import { createLocalhostHandler } from "fauxqs";
|
|
65
74
|
|
|
66
75
|
const sqsClient = new SQSClient({
|
|
67
76
|
endpoint: "http://localhost:4566",
|
|
@@ -76,10 +85,10 @@ const snsClient = new SNSClient({
|
|
|
76
85
|
});
|
|
77
86
|
|
|
78
87
|
const s3Client = new S3Client({
|
|
79
|
-
endpoint: "http://localhost:4566",
|
|
88
|
+
endpoint: "http://s3.localhost:4566",
|
|
80
89
|
region: "us-east-1",
|
|
81
90
|
credentials: { accessKeyId: "test", secretAccessKey: "test" },
|
|
82
|
-
|
|
91
|
+
requestHandler: createLocalhostHandler(),
|
|
83
92
|
});
|
|
84
93
|
```
|
|
85
94
|
|
|
@@ -105,6 +114,76 @@ await server.stop();
|
|
|
105
114
|
|
|
106
115
|
Pass `port: 0` to let the OS assign a random available port (useful in tests).
|
|
107
116
|
|
|
117
|
+
#### Programmatic state setup
|
|
118
|
+
|
|
119
|
+
The server object exposes methods for pre-creating resources without going through the SDK:
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
const server = await startFauxqs({ port: 0, logger: false });
|
|
123
|
+
|
|
124
|
+
// Create individual resources
|
|
125
|
+
server.createQueue("my-queue");
|
|
126
|
+
server.createQueue("my-dlq", {
|
|
127
|
+
attributes: { VisibilityTimeout: "60" },
|
|
128
|
+
tags: { env: "test" },
|
|
129
|
+
});
|
|
130
|
+
server.createTopic("my-topic");
|
|
131
|
+
server.subscribe({ topic: "my-topic", queue: "my-queue" });
|
|
132
|
+
server.createBucket("my-bucket");
|
|
133
|
+
|
|
134
|
+
// Or create everything at once
|
|
135
|
+
server.setup({
|
|
136
|
+
queues: [
|
|
137
|
+
{ name: "orders" },
|
|
138
|
+
{ name: "notifications", attributes: { DelaySeconds: "5" } },
|
|
139
|
+
],
|
|
140
|
+
topics: [{ name: "events" }],
|
|
141
|
+
subscriptions: [
|
|
142
|
+
{ topic: "events", queue: "orders" },
|
|
143
|
+
{ topic: "events", queue: "notifications" },
|
|
144
|
+
],
|
|
145
|
+
buckets: ["uploads", "exports"],
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// Reset all state between tests
|
|
149
|
+
server.purgeAll();
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
#### Init config file
|
|
153
|
+
|
|
154
|
+
Create a JSON file to pre-create resources on startup:
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"queues": [
|
|
159
|
+
{ "name": "orders" },
|
|
160
|
+
{ "name": "orders-dlq" },
|
|
161
|
+
{ "name": "orders.fifo", "attributes": { "FifoQueue": "true", "ContentBasedDeduplication": "true" } }
|
|
162
|
+
],
|
|
163
|
+
"topics": [
|
|
164
|
+
{ "name": "events" }
|
|
165
|
+
],
|
|
166
|
+
"subscriptions": [
|
|
167
|
+
{ "topic": "events", "queue": "orders" }
|
|
168
|
+
],
|
|
169
|
+
"buckets": ["uploads", "exports"]
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Pass it via the `FAUXQS_INIT` environment variable or the `init` option:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
FAUXQS_INIT=init.json npx fauxqs
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
const server = await startFauxqs({ init: "init.json" });
|
|
181
|
+
// or inline:
|
|
182
|
+
const server = await startFauxqs({
|
|
183
|
+
init: { queues: [{ name: "my-queue" }], buckets: ["my-bucket"] },
|
|
184
|
+
});
|
|
185
|
+
```
|
|
186
|
+
|
|
108
187
|
### Configurable queue URL host
|
|
109
188
|
|
|
110
189
|
By default, queue URLs use the request's `Host` header (e.g., `http://127.0.0.1:4566/000000000000/myQueue`). To match the AWS-style `sqs.<region>.<host>` format, pass the `host` option:
|
|
@@ -157,6 +236,12 @@ const server = await startFauxqs({ defaultRegion: "eu-west-1" });
|
|
|
157
236
|
| TagQueue | Yes |
|
|
158
237
|
| UntagQueue | Yes |
|
|
159
238
|
| ListQueueTags | Yes |
|
|
239
|
+
| AddPermission | No |
|
|
240
|
+
| RemovePermission | No |
|
|
241
|
+
| ListDeadLetterSourceQueues | No |
|
|
242
|
+
| StartMessageMoveTask | No |
|
|
243
|
+
| CancelMessageMoveTask | No |
|
|
244
|
+
| ListMessageMoveTasks | No |
|
|
160
245
|
|
|
161
246
|
### SNS
|
|
162
247
|
|
|
@@ -179,6 +264,12 @@ const server = await startFauxqs({ defaultRegion: "eu-west-1" });
|
|
|
179
264
|
| TagResource | Yes |
|
|
180
265
|
| UntagResource | Yes |
|
|
181
266
|
| ListTagsForResource | Yes |
|
|
267
|
+
| AddPermission | No |
|
|
268
|
+
| RemovePermission | No |
|
|
269
|
+
| GetDataProtectionPolicy | No |
|
|
270
|
+
| PutDataProtectionPolicy | No |
|
|
271
|
+
|
|
272
|
+
Platform application, SMS, and phone number actions are not supported.
|
|
182
273
|
|
|
183
274
|
### S3
|
|
184
275
|
|
|
@@ -187,19 +278,34 @@ const server = await startFauxqs({ defaultRegion: "eu-west-1" });
|
|
|
187
278
|
| CreateBucket | Yes |
|
|
188
279
|
| HeadBucket | Yes |
|
|
189
280
|
| ListObjects | Yes |
|
|
281
|
+
| ListObjectsV2 | Yes |
|
|
282
|
+
| CopyObject | Yes |
|
|
190
283
|
| PutObject | Yes |
|
|
191
284
|
| GetObject | Yes |
|
|
192
285
|
| DeleteObject | Yes |
|
|
193
286
|
| HeadObject | Yes |
|
|
194
287
|
| DeleteObjects | Yes |
|
|
288
|
+
| DeleteBucket | Yes |
|
|
289
|
+
| ListBuckets | Yes |
|
|
290
|
+
| CreateMultipartUpload | Yes |
|
|
291
|
+
| UploadPart | Yes |
|
|
292
|
+
| CompleteMultipartUpload | Yes |
|
|
293
|
+
| AbortMultipartUpload | Yes |
|
|
294
|
+
| ListObjectVersions | No |
|
|
295
|
+
| GetBucketLocation | No |
|
|
296
|
+
|
|
297
|
+
Bucket configuration (CORS, lifecycle, encryption, replication, etc.), ACLs, versioning, tagging, and other management actions are not supported.
|
|
195
298
|
|
|
196
299
|
### STS
|
|
197
300
|
|
|
198
301
|
| Action | Supported |
|
|
199
302
|
|--------|-----------|
|
|
200
303
|
| GetCallerIdentity | Yes |
|
|
304
|
+
| AssumeRole | No |
|
|
305
|
+
| GetSessionToken | No |
|
|
306
|
+
| GetFederationToken | No |
|
|
201
307
|
|
|
202
|
-
Returns a mock identity with account `000000000000` and ARN `arn:aws:iam::000000000000:root`. This allows tools like Terraform and the AWS CLI that call `sts:GetCallerIdentity` on startup to work without errors.
|
|
308
|
+
Returns a mock identity with account `000000000000` and ARN `arn:aws:iam::000000000000:root`. This allows tools like Terraform and the AWS CLI that call `sts:GetCallerIdentity` on startup to work without errors. Other STS actions are not supported.
|
|
203
309
|
|
|
204
310
|
## SQS Features
|
|
205
311
|
|
|
@@ -208,7 +314,8 @@ Returns a mock identity with account `000000000000` and ARN `arn:aws:iam::000000
|
|
|
208
314
|
- **Delay queues** — per-queue default delay and per-message delay overrides
|
|
209
315
|
- **Long polling** — `WaitTimeSeconds` on ReceiveMessage blocks until messages arrive or timeout
|
|
210
316
|
- **Dead letter queues** — messages exceeding `maxReceiveCount` are moved to the configured DLQ
|
|
211
|
-
- **Batch operations** — SendMessageBatch, DeleteMessageBatch, ChangeMessageVisibilityBatch
|
|
317
|
+
- **Batch operations** — SendMessageBatch, DeleteMessageBatch, ChangeMessageVisibilityBatch with entry ID validation (`InvalidBatchEntryId`) and total batch size validation (`BatchRequestTooLong`)
|
|
318
|
+
- **Queue attribute range validation** — validates `VisibilityTimeout`, `DelaySeconds`, `ReceiveMessageWaitTimeSeconds`, `MaximumMessageSize`, and `MessageRetentionPeriod` on both CreateQueue and SetQueueAttributes
|
|
212
319
|
- **Message size validation** — rejects messages exceeding 1 MiB (1,048,576 bytes)
|
|
213
320
|
- **Unicode character validation** — rejects messages with characters outside the AWS-allowed set
|
|
214
321
|
- **KMS attributes** — `KmsMasterKeyId` and `KmsDataKeyReusePeriodSeconds` are accepted and stored (no actual encryption)
|
|
@@ -218,45 +325,36 @@ Returns a mock identity with account `000000000000` and ARN `arn:aws:iam::000000
|
|
|
218
325
|
## SNS Features
|
|
219
326
|
|
|
220
327
|
- **SNS-to-SQS fan-out** — publish to a topic and messages are delivered to all confirmed SQS subscriptions
|
|
221
|
-
- **Filter policies** — both `MessageAttributes` and `MessageBody` scope, supporting exact match, prefix, suffix, anything-but, numeric ranges, and
|
|
328
|
+
- **Filter policies** — both `MessageAttributes` and `MessageBody` scope, supporting exact match, prefix, suffix, anything-but (including anything-but with suffix), numeric ranges, exists, null conditions, and `$or` top-level grouping. MessageBody scope supports nested key matching
|
|
222
329
|
- **Raw message delivery** — configurable per subscription
|
|
223
330
|
- **Message size validation** — rejects messages exceeding 256 KB (262,144 bytes)
|
|
224
|
-
- **Topic idempotency with conflict detection** — `CreateTopic` returns the existing topic when called with the same name and tags, but throws when tags differ
|
|
331
|
+
- **Topic idempotency with conflict detection** — `CreateTopic` returns the existing topic when called with the same name, attributes, and tags, but throws when attributes or tags differ
|
|
225
332
|
- **Subscription idempotency with conflict detection** — `Subscribe` returns the existing subscription when the same (topic, protocol, endpoint) combination is used with matching attributes, but throws when attributes differ
|
|
333
|
+
- **Subscription attribute validation** — `SetSubscriptionAttributes` validates attribute names and rejects unknown or read-only attributes
|
|
226
334
|
- **Topic and subscription tags**
|
|
227
335
|
- **FIFO topics** — `.fifo` suffix enforcement, `MessageGroupId` and `MessageDeduplicationId` passthrough to SQS subscriptions, content-based deduplication
|
|
228
336
|
- **Batch publish**
|
|
229
337
|
|
|
230
338
|
## S3 Features
|
|
231
339
|
|
|
232
|
-
- **Bucket management** — CreateBucket (idempotent), HeadBucket, ListObjects
|
|
233
|
-
- **Object operations** — PutObject, GetObject, DeleteObject, HeadObject with ETag, Content-Type, and Last-Modified headers
|
|
234
|
-
- **
|
|
340
|
+
- **Bucket management** — CreateBucket (idempotent), DeleteBucket (rejects non-empty), HeadBucket, ListBuckets, ListObjects (V1 and V2)
|
|
341
|
+
- **Object operations** — PutObject, GetObject, DeleteObject, HeadObject, CopyObject with ETag, Content-Type, and Last-Modified headers
|
|
342
|
+
- **Multipart uploads** — CreateMultipartUpload, UploadPart, CompleteMultipartUpload, AbortMultipartUpload with correct multipart ETag calculation (`MD5-of-part-digests-partCount`), metadata preservation, and part overwrite support
|
|
343
|
+
- **ListObjects V2** — prefix filtering, delimiter-based virtual directories, MaxKeys, continuation tokens, StartAfter
|
|
344
|
+
- **CopyObject** — same-bucket and cross-bucket copy via `x-amz-copy-source` header, with metadata preservation
|
|
345
|
+
- **User metadata** — `x-amz-meta-*` headers are stored and returned on GetObject and HeadObject
|
|
346
|
+
- **Bulk delete** — DeleteObjects for batch key deletion with proper XML entity handling
|
|
235
347
|
- **Keys with slashes** — full support for slash-delimited keys (e.g., `path/to/file.txt`)
|
|
236
348
|
- **Stream uploads** — handles AWS chunked transfer encoding (`Content-Encoding: aws-chunked`) for stream bodies
|
|
237
349
|
- **Path-style and virtual-hosted-style** — both S3 URL styles are supported (see below)
|
|
238
350
|
|
|
239
351
|
### S3 URL styles
|
|
240
352
|
|
|
241
|
-
|
|
353
|
+
The AWS SDK sends S3 requests using virtual-hosted-style URLs by default (e.g., `my-bucket.s3.localhost:4566`). This requires `*.localhost` to resolve to `127.0.0.1`. fauxqs provides helpers for this, plus a simple fallback.
|
|
242
354
|
|
|
243
|
-
|
|
244
|
-
const s3 = new S3Client({
|
|
245
|
-
endpoint: "http://localhost:4566",
|
|
246
|
-
forcePathStyle: true,
|
|
247
|
-
// ...
|
|
248
|
-
});
|
|
249
|
-
```
|
|
355
|
+
#### Option 1: `createLocalhostHandler()` (recommended)
|
|
250
356
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
The server automatically extracts the bucket name from the `Host` header when it contains subdomains (e.g., `my-bucket.s3.localhost:4566`). This is useful for compatibility with libraries that don't set `forcePathStyle: true`.
|
|
254
|
-
|
|
255
|
-
Virtual-hosted-style requires `*.localhost` to resolve to `127.0.0.1`. fauxqs provides two helpers for this — pick whichever fits your use case:
|
|
256
|
-
|
|
257
|
-
#### Option 1: `createLocalhostHandler()` (per-client, no side effects)
|
|
258
|
-
|
|
259
|
-
Creates an HTTP request handler that resolves all hostnames to `127.0.0.1`. Scoped to a single client instance.
|
|
357
|
+
Creates an HTTP request handler that resolves all hostnames to `127.0.0.1`. Scoped to a single client instance — no side effects.
|
|
260
358
|
|
|
261
359
|
```typescript
|
|
262
360
|
import { S3Client } from "@aws-sdk/client-s3";
|
|
@@ -267,13 +365,10 @@ const s3 = new S3Client({
|
|
|
267
365
|
region: "us-east-1",
|
|
268
366
|
credentials: { accessKeyId: "test", secretAccessKey: "test" },
|
|
269
367
|
requestHandler: createLocalhostHandler(),
|
|
270
|
-
// no forcePathStyle needed
|
|
271
368
|
});
|
|
272
369
|
```
|
|
273
370
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
#### Option 2: `interceptLocalhostDns()` (global, fully transparent)
|
|
371
|
+
#### Option 2: `interceptLocalhostDns()` (global, for test suites)
|
|
277
372
|
|
|
278
373
|
Patches Node.js `dns.lookup` so that any hostname ending in `.localhost` resolves to `127.0.0.1`. No client changes needed.
|
|
279
374
|
|
|
@@ -282,7 +377,6 @@ import { interceptLocalhostDns } from "fauxqs";
|
|
|
282
377
|
|
|
283
378
|
const restore = interceptLocalhostDns();
|
|
284
379
|
|
|
285
|
-
// S3 clients work without forcePathStyle or custom requestHandler
|
|
286
380
|
const s3 = new S3Client({
|
|
287
381
|
endpoint: "http://s3.localhost:4566",
|
|
288
382
|
region: "us-east-1",
|
|
@@ -295,8 +389,59 @@ restore();
|
|
|
295
389
|
|
|
296
390
|
The suffix is configurable: `interceptLocalhostDns("myhost.test")` matches `*.myhost.test`.
|
|
297
391
|
|
|
298
|
-
**Tradeoffs:** Affects all DNS lookups in the process. Best suited for test suites (`beforeAll` / `afterAll`).
|
|
392
|
+
**Tradeoffs:** Affects all DNS lookups in the process. Best suited for test suites (`beforeAll` / `afterAll`).
|
|
393
|
+
|
|
394
|
+
#### Option 3: `forcePathStyle` (simplest fallback)
|
|
395
|
+
|
|
396
|
+
Forces the SDK to use path-style URLs (`http://localhost:4566/my-bucket/key`) instead of virtual-hosted-style. No DNS or handler changes needed, but affects how the SDK resolves S3 URLs at runtime.
|
|
397
|
+
|
|
398
|
+
```typescript
|
|
399
|
+
const s3 = new S3Client({
|
|
400
|
+
endpoint: "http://localhost:4566",
|
|
401
|
+
forcePathStyle: true,
|
|
402
|
+
// ...
|
|
403
|
+
});
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
### Using with AWS CLI
|
|
299
408
|
|
|
409
|
+
fauxqs is wire-compatible with the standard AWS CLI. Point it at the fauxqs endpoint:
|
|
410
|
+
|
|
411
|
+
#### SQS
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
aws --endpoint-url http://localhost:4566 sqs create-queue --queue-name my-queue
|
|
415
|
+
aws --endpoint-url http://localhost:4566 sqs create-queue \
|
|
416
|
+
--queue-name my-queue.fifo \
|
|
417
|
+
--attributes FifoQueue=true,ContentBasedDeduplication=true
|
|
418
|
+
aws --endpoint-url http://localhost:4566 sqs send-message \
|
|
419
|
+
--queue-url http://localhost:4566/000000000000/my-queue \
|
|
420
|
+
--message-body "hello"
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
#### SNS
|
|
424
|
+
|
|
425
|
+
```bash
|
|
426
|
+
aws --endpoint-url http://localhost:4566 sns create-topic --name my-topic
|
|
427
|
+
aws --endpoint-url http://localhost:4566 sns subscribe \
|
|
428
|
+
--topic-arn arn:aws:sns:us-east-1:000000000000:my-topic \
|
|
429
|
+
--protocol sqs \
|
|
430
|
+
--notification-endpoint arn:aws:sqs:us-east-1:000000000000:my-queue
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
#### S3
|
|
434
|
+
|
|
435
|
+
```bash
|
|
436
|
+
aws --endpoint-url http://localhost:4566 s3 mb s3://my-bucket
|
|
437
|
+
aws --endpoint-url http://localhost:4566 s3 cp file.txt s3://my-bucket/file.txt
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
If the AWS CLI uses virtual-hosted-style S3 URLs by default, configure path-style:
|
|
441
|
+
|
|
442
|
+
```bash
|
|
443
|
+
aws configure set default.s3.addressing_style path
|
|
444
|
+
```
|
|
300
445
|
|
|
301
446
|
## Conventions
|
|
302
447
|
|
package/dist/app.d.ts
CHANGED
|
@@ -1,16 +1,42 @@
|
|
|
1
1
|
import Fastify from "fastify";
|
|
2
|
+
import { SqsStore } from "./sqs/sqsStore.ts";
|
|
3
|
+
import { SnsStore } from "./sns/snsStore.ts";
|
|
4
|
+
import { S3Store } from "./s3/s3Store.ts";
|
|
5
|
+
export type { FauxqsInitConfig } from "./initConfig.ts";
|
|
2
6
|
export { createLocalhostHandler, interceptLocalhostDns } from "./localhost.ts";
|
|
3
|
-
export
|
|
7
|
+
export interface BuildAppOptions {
|
|
4
8
|
logger?: boolean;
|
|
5
9
|
host?: string;
|
|
6
10
|
defaultRegion?: string;
|
|
7
|
-
|
|
11
|
+
stores?: {
|
|
12
|
+
sqsStore: SqsStore;
|
|
13
|
+
snsStore: SnsStore;
|
|
14
|
+
s3Store: S3Store;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare function buildApp(options?: BuildAppOptions): Fastify.FastifyInstance<import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>, import("node:http").IncomingMessage, import("node:http").ServerResponse<import("node:http").IncomingMessage>, Fastify.FastifyBaseLogger, Fastify.FastifyTypeProviderDefault> & PromiseLike<Fastify.FastifyInstance<import("node:http").Server<typeof import("node:http").IncomingMessage, typeof import("node:http").ServerResponse>, import("node:http").IncomingMessage, import("node:http").ServerResponse<import("node:http").IncomingMessage>, Fastify.FastifyBaseLogger, Fastify.FastifyTypeProviderDefault>> & {
|
|
8
18
|
__linterBrands: "SafePromiseLike";
|
|
9
19
|
};
|
|
10
20
|
export interface FauxqsServer {
|
|
11
21
|
readonly port: number;
|
|
12
22
|
readonly address: string;
|
|
13
23
|
stop(): Promise<void>;
|
|
24
|
+
createQueue(name: string, options?: {
|
|
25
|
+
attributes?: Record<string, string>;
|
|
26
|
+
tags?: Record<string, string>;
|
|
27
|
+
}): void;
|
|
28
|
+
createTopic(name: string, options?: {
|
|
29
|
+
attributes?: Record<string, string>;
|
|
30
|
+
tags?: Record<string, string>;
|
|
31
|
+
}): void;
|
|
32
|
+
subscribe(options: {
|
|
33
|
+
topic: string;
|
|
34
|
+
queue: string;
|
|
35
|
+
attributes?: Record<string, string>;
|
|
36
|
+
}): void;
|
|
37
|
+
createBucket(name: string): void;
|
|
38
|
+
setup(config: import("./initConfig.ts").FauxqsInitConfig): void;
|
|
39
|
+
purgeAll(): void;
|
|
14
40
|
}
|
|
15
41
|
export declare function startFauxqs(options?: {
|
|
16
42
|
port?: number;
|
|
@@ -18,5 +44,7 @@ export declare function startFauxqs(options?: {
|
|
|
18
44
|
host?: string;
|
|
19
45
|
/** Fallback region used only when the region cannot be resolved from request Authorization headers. Defaults to "us-east-1". */
|
|
20
46
|
defaultRegion?: string;
|
|
47
|
+
/** Path to a JSON init config file, or an inline config object. Resources are created after the server starts. */
|
|
48
|
+
init?: string | import("./initConfig.ts").FauxqsInitConfig;
|
|
21
49
|
}): Promise<FauxqsServer>;
|
|
22
50
|
//# sourceMappingURL=app.d.ts.map
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAgC7C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAM1C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACvE;AAED,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe;;EAyIjD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAC/E,IAAI,CAAC;IACR,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAC/E,IAAI,CAAC;IACR,SAAS,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IAChG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,MAAM,EAAE,OAAO,iBAAiB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChE,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gIAAgI;IAChI,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kHAAkH;IAClH,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,iBAAiB,EAAE,gBAAgB,CAAC;CAC5D,GAAG,OAAO,CAAC,YAAY,CAAC,CA8ExB"}
|
package/dist/app.js
CHANGED
|
@@ -36,6 +36,9 @@ import { tagResource, untagResource, listTagsForResource } from "./sns/actions/t
|
|
|
36
36
|
import { S3Store } from "./s3/s3Store.js";
|
|
37
37
|
import { registerS3Routes } from "./s3/s3Router.js";
|
|
38
38
|
import { getCallerIdentity } from "./sts/getCallerIdentity.js";
|
|
39
|
+
import { sqsQueueArn, snsTopicArn } from "./common/arnHelper.js";
|
|
40
|
+
import { DEFAULT_ACCOUNT_ID, DEFAULT_REGION } from "./common/types.js";
|
|
41
|
+
import { loadInitConfig, applyInitConfig } from "./initConfig.js";
|
|
39
42
|
export { createLocalhostHandler, interceptLocalhostDns } from "./localhost.js";
|
|
40
43
|
export function buildApp(options) {
|
|
41
44
|
const app = Fastify({
|
|
@@ -56,14 +59,14 @@ export function buildApp(options) {
|
|
|
56
59
|
return `/${bucket}${req.url ?? "/"}`;
|
|
57
60
|
},
|
|
58
61
|
});
|
|
59
|
-
const sqsStore = new SqsStore();
|
|
62
|
+
const sqsStore = options?.stores?.sqsStore ?? new SqsStore();
|
|
60
63
|
if (options?.host) {
|
|
61
64
|
sqsStore.host = options.host;
|
|
62
65
|
}
|
|
63
66
|
if (options?.defaultRegion) {
|
|
64
67
|
sqsStore.region = options.defaultRegion;
|
|
65
68
|
}
|
|
66
|
-
const snsStore = new SnsStore();
|
|
69
|
+
const snsStore = options?.stores?.snsStore ?? new SnsStore();
|
|
67
70
|
if (options?.defaultRegion) {
|
|
68
71
|
snsStore.region = options.defaultRegion;
|
|
69
72
|
}
|
|
@@ -129,7 +132,7 @@ export function buildApp(options) {
|
|
|
129
132
|
app.addContentTypeParser("*", { parseAs: "buffer" }, (_req, body, done) => {
|
|
130
133
|
done(null, body);
|
|
131
134
|
});
|
|
132
|
-
const s3Store = new S3Store();
|
|
135
|
+
const s3Store = options?.stores?.s3Store ?? new S3Store();
|
|
133
136
|
registerS3Routes(app, s3Store);
|
|
134
137
|
app.addHook("preClose", () => {
|
|
135
138
|
sqsStore.shutdown();
|
|
@@ -157,16 +160,33 @@ export function buildApp(options) {
|
|
|
157
160
|
}
|
|
158
161
|
export async function startFauxqs(options) {
|
|
159
162
|
const port = options?.port ?? parseInt(process.env.FAUXQS_PORT ?? "4566");
|
|
163
|
+
const host = options?.host ?? process.env.FAUXQS_HOST;
|
|
164
|
+
const defaultRegion = options?.defaultRegion ?? process.env.FAUXQS_DEFAULT_REGION;
|
|
165
|
+
const loggerEnv = process.env.FAUXQS_LOGGER;
|
|
166
|
+
const logger = options?.logger ?? (loggerEnv !== undefined ? loggerEnv !== "false" : true);
|
|
167
|
+
const init = options?.init ?? process.env.FAUXQS_INIT;
|
|
168
|
+
const sqsStore = new SqsStore();
|
|
169
|
+
const snsStore = new SnsStore();
|
|
170
|
+
const s3Store = new S3Store();
|
|
160
171
|
const app = buildApp({
|
|
161
|
-
logger
|
|
162
|
-
host
|
|
163
|
-
defaultRegion
|
|
172
|
+
logger,
|
|
173
|
+
host,
|
|
174
|
+
defaultRegion,
|
|
175
|
+
stores: { sqsStore, snsStore, s3Store },
|
|
164
176
|
});
|
|
165
177
|
const listenAddress = await app.listen({ port, host: "127.0.0.1" });
|
|
166
178
|
const url = new URL(listenAddress);
|
|
167
|
-
|
|
179
|
+
const actualPort = parseInt(url.port);
|
|
180
|
+
const region = defaultRegion ?? DEFAULT_REGION;
|
|
181
|
+
function makeQueueUrl(name) {
|
|
182
|
+
if (host) {
|
|
183
|
+
return `http://sqs.${region}.${host}:${actualPort}/${DEFAULT_ACCOUNT_ID}/${name}`;
|
|
184
|
+
}
|
|
185
|
+
return `http://127.0.0.1:${actualPort}/${DEFAULT_ACCOUNT_ID}/${name}`;
|
|
186
|
+
}
|
|
187
|
+
const server = {
|
|
168
188
|
get port() {
|
|
169
|
-
return
|
|
189
|
+
return actualPort;
|
|
170
190
|
},
|
|
171
191
|
get address() {
|
|
172
192
|
return listenAddress;
|
|
@@ -174,6 +194,40 @@ export async function startFauxqs(options) {
|
|
|
174
194
|
stop() {
|
|
175
195
|
return app.close();
|
|
176
196
|
},
|
|
197
|
+
createQueue(name, opts) {
|
|
198
|
+
const arn = sqsQueueArn(name, region);
|
|
199
|
+
const queueUrl = makeQueueUrl(name);
|
|
200
|
+
sqsStore.createQueue(name, queueUrl, arn, opts?.attributes, opts?.tags);
|
|
201
|
+
},
|
|
202
|
+
createTopic(name, opts) {
|
|
203
|
+
snsStore.createTopic(name, opts?.attributes, opts?.tags);
|
|
204
|
+
},
|
|
205
|
+
subscribe(opts) {
|
|
206
|
+
const topicArn = snsTopicArn(opts.topic, region);
|
|
207
|
+
const queueArn = sqsQueueArn(opts.queue, region);
|
|
208
|
+
snsStore.subscribe(topicArn, "sqs", queueArn, opts.attributes);
|
|
209
|
+
},
|
|
210
|
+
createBucket(name) {
|
|
211
|
+
s3Store.createBucket(name);
|
|
212
|
+
},
|
|
213
|
+
setup(config) {
|
|
214
|
+
applyInitConfig(config, sqsStore, snsStore, s3Store, {
|
|
215
|
+
host,
|
|
216
|
+
port: actualPort,
|
|
217
|
+
region,
|
|
218
|
+
});
|
|
219
|
+
},
|
|
220
|
+
purgeAll() {
|
|
221
|
+
sqsStore.purgeAll();
|
|
222
|
+
snsStore.purgeAll();
|
|
223
|
+
s3Store.purgeAll();
|
|
224
|
+
},
|
|
177
225
|
};
|
|
226
|
+
// Apply init config if provided
|
|
227
|
+
if (init) {
|
|
228
|
+
const config = typeof init === "string" ? loadInitConfig(init) : init;
|
|
229
|
+
server.setup(config);
|
|
230
|
+
}
|
|
231
|
+
return server;
|
|
178
232
|
}
|
|
179
233
|
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,4BAA4B,EAAE,MAAM,+CAA+C,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAC/F,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SqsStore } from "./sqs/sqsStore.ts";
|
|
2
|
+
import type { SnsStore } from "./sns/snsStore.ts";
|
|
3
|
+
import type { S3Store } from "./s3/s3Store.ts";
|
|
4
|
+
export interface FauxqsInitConfig {
|
|
5
|
+
queues?: Array<{
|
|
6
|
+
name: string;
|
|
7
|
+
attributes?: Record<string, string>;
|
|
8
|
+
tags?: Record<string, string>;
|
|
9
|
+
}>;
|
|
10
|
+
topics?: Array<{
|
|
11
|
+
name: string;
|
|
12
|
+
attributes?: Record<string, string>;
|
|
13
|
+
tags?: Record<string, string>;
|
|
14
|
+
}>;
|
|
15
|
+
subscriptions?: Array<{
|
|
16
|
+
topic: string;
|
|
17
|
+
queue: string;
|
|
18
|
+
attributes?: Record<string, string>;
|
|
19
|
+
}>;
|
|
20
|
+
buckets?: string[];
|
|
21
|
+
}
|
|
22
|
+
export declare function loadInitConfig(path: string): FauxqsInitConfig;
|
|
23
|
+
export declare function applyInitConfig(config: FauxqsInitConfig, sqsStore: SqsStore, snsStore: SnsStore, s3Store: S3Store, context: {
|
|
24
|
+
host?: string;
|
|
25
|
+
port: number;
|
|
26
|
+
region: string;
|
|
27
|
+
}): void;
|
|
28
|
+
//# sourceMappingURL=initConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initConfig.d.ts","sourceRoot":"","sources":["../src/initConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC,CAAC;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,CAAC,CAAC;IACH,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACrC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAG7D;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvD,IAAI,CAuCN"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { sqsQueueArn } from "./common/arnHelper.js";
|
|
3
|
+
import { snsTopicArn } from "./common/arnHelper.js";
|
|
4
|
+
import { DEFAULT_ACCOUNT_ID } from "./common/types.js";
|
|
5
|
+
export function loadInitConfig(path) {
|
|
6
|
+
const content = readFileSync(path, "utf-8");
|
|
7
|
+
return JSON.parse(content);
|
|
8
|
+
}
|
|
9
|
+
export function applyInitConfig(config, sqsStore, snsStore, s3Store, context) {
|
|
10
|
+
const { host, port, region } = context;
|
|
11
|
+
// Create queues first (subscriptions depend on queue ARNs)
|
|
12
|
+
if (config.queues) {
|
|
13
|
+
for (const q of config.queues) {
|
|
14
|
+
const arn = sqsQueueArn(q.name, region);
|
|
15
|
+
let url;
|
|
16
|
+
if (host) {
|
|
17
|
+
url = `http://sqs.${region}.${host}:${port}/${DEFAULT_ACCOUNT_ID}/${q.name}`;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
url = `http://127.0.0.1:${port}/${DEFAULT_ACCOUNT_ID}/${q.name}`;
|
|
21
|
+
}
|
|
22
|
+
sqsStore.createQueue(q.name, url, arn, q.attributes, q.tags);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Create topics next
|
|
26
|
+
if (config.topics) {
|
|
27
|
+
for (const t of config.topics) {
|
|
28
|
+
snsStore.createTopic(t.name, t.attributes, t.tags);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Create subscriptions last (depends on both topic ARN and queue ARN)
|
|
32
|
+
if (config.subscriptions) {
|
|
33
|
+
for (const s of config.subscriptions) {
|
|
34
|
+
const topicArn = snsTopicArn(s.topic, region);
|
|
35
|
+
const queueArn = sqsQueueArn(s.queue, region);
|
|
36
|
+
snsStore.subscribe(topicArn, "sqs", queueArn, s.attributes);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Create buckets (independent)
|
|
40
|
+
if (config.buckets) {
|
|
41
|
+
for (const name of config.buckets) {
|
|
42
|
+
s3Store.createBucket(name);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=initConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initConfig.js","sourceRoot":"","sources":["../src/initConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAwBvD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAqB,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAAwB,EACxB,QAAkB,EAClB,QAAkB,EAClB,OAAgB,EAChB,OAAwD;IAExD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEvC,2DAA2D;IAC3D,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACxC,IAAI,GAAW,CAAC;YAChB,IAAI,IAAI,EAAE,CAAC;gBACT,GAAG,GAAG,cAAc,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,kBAAkB,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,oBAAoB,IAAI,IAAI,kBAAkB,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACnE,CAAC;YACD,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC9B,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9C,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAClC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FastifyRequest, FastifyReply } from "fastify";
|
|
2
|
+
import type { S3Store } from "../s3Store.ts";
|
|
3
|
+
export declare function abortMultipartUpload(request: FastifyRequest<{
|
|
4
|
+
Params: {
|
|
5
|
+
bucket: string;
|
|
6
|
+
"*": string;
|
|
7
|
+
};
|
|
8
|
+
}>, reply: FastifyReply, store: S3Store): void;
|
|
9
|
+
//# sourceMappingURL=abortMultipartUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abortMultipartUpload.d.ts","sourceRoot":"","sources":["../../../src/s3/actions/abortMultipartUpload.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,oBAAoB,CAClC,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,CAON"}
|