fauxqs 1.13.0 → 2.0.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 +1532 -1474
- package/dist/app.d.ts +2 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +22 -0
- package/dist/app.js.map +1 -1
- package/dist/persistence.d.ts +53 -0
- package/dist/persistence.d.ts.map +1 -0
- package/dist/persistence.js +503 -0
- package/dist/persistence.js.map +1 -0
- package/dist/s3/s3Store.d.ts +6 -1
- package/dist/s3/s3Store.d.ts.map +1 -1
- package/dist/s3/s3Store.js +40 -6
- package/dist/s3/s3Store.js.map +1 -1
- package/dist/server.js +7 -1
- package/dist/server.js.map +1 -1
- package/dist/sns/actions/confirmSubscription.d.ts.map +1 -1
- package/dist/sns/actions/confirmSubscription.js +1 -0
- package/dist/sns/actions/confirmSubscription.js.map +1 -1
- package/dist/sns/actions/setSubscriptionAttributes.d.ts.map +1 -1
- package/dist/sns/actions/setSubscriptionAttributes.js +1 -0
- package/dist/sns/actions/setSubscriptionAttributes.js.map +1 -1
- package/dist/sns/actions/setTopicAttributes.d.ts.map +1 -1
- package/dist/sns/actions/setTopicAttributes.js +1 -0
- package/dist/sns/actions/setTopicAttributes.js.map +1 -1
- package/dist/sns/actions/tagResource.d.ts.map +1 -1
- package/dist/sns/actions/tagResource.js +2 -0
- package/dist/sns/actions/tagResource.js.map +1 -1
- package/dist/sns/snsStore.d.ts +2 -0
- 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/tagQueue.d.ts.map +1 -1
- package/dist/sqs/actions/tagQueue.js +1 -0
- package/dist/sqs/actions/tagQueue.js.map +1 -1
- package/dist/sqs/actions/untagQueue.d.ts.map +1 -1
- package/dist/sqs/actions/untagQueue.js +1 -0
- package/dist/sqs/actions/untagQueue.js.map +1 -1
- package/dist/sqs/sqsStore.d.ts +6 -0
- package/dist/sqs/sqsStore.d.ts.map +1 -1
- package/dist/sqs/sqsStore.js +40 -3
- package/dist/sqs/sqsStore.js.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { DatabaseSync } from "node:sqlite";
|
|
4
|
+
const SCHEMA = `
|
|
5
|
+
CREATE TABLE IF NOT EXISTS sqs_queues (
|
|
6
|
+
name TEXT PRIMARY KEY,
|
|
7
|
+
url TEXT NOT NULL,
|
|
8
|
+
arn TEXT NOT NULL,
|
|
9
|
+
attributes TEXT NOT NULL,
|
|
10
|
+
tags TEXT NOT NULL,
|
|
11
|
+
created_timestamp INTEGER NOT NULL,
|
|
12
|
+
last_modified_timestamp INTEGER NOT NULL,
|
|
13
|
+
sequence_counter INTEGER NOT NULL DEFAULT 0
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
CREATE TABLE IF NOT EXISTS sqs_messages (
|
|
17
|
+
message_id TEXT PRIMARY KEY,
|
|
18
|
+
queue_name TEXT NOT NULL REFERENCES sqs_queues(name) ON DELETE CASCADE,
|
|
19
|
+
body TEXT NOT NULL,
|
|
20
|
+
md5_of_body TEXT NOT NULL,
|
|
21
|
+
message_attributes TEXT NOT NULL,
|
|
22
|
+
md5_of_message_attributes TEXT NOT NULL,
|
|
23
|
+
sent_timestamp INTEGER NOT NULL,
|
|
24
|
+
approximate_receive_count INTEGER NOT NULL DEFAULT 0,
|
|
25
|
+
approximate_first_receive_timestamp INTEGER,
|
|
26
|
+
delay_until INTEGER,
|
|
27
|
+
message_group_id TEXT,
|
|
28
|
+
message_deduplication_id TEXT,
|
|
29
|
+
sequence_number TEXT,
|
|
30
|
+
receipt_handle TEXT,
|
|
31
|
+
visibility_deadline INTEGER
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
CREATE TABLE IF NOT EXISTS sns_topics (
|
|
35
|
+
arn TEXT PRIMARY KEY,
|
|
36
|
+
name TEXT NOT NULL,
|
|
37
|
+
attributes TEXT NOT NULL,
|
|
38
|
+
tags TEXT NOT NULL,
|
|
39
|
+
subscription_arns TEXT NOT NULL
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
CREATE TABLE IF NOT EXISTS sns_subscriptions (
|
|
43
|
+
arn TEXT PRIMARY KEY,
|
|
44
|
+
topic_arn TEXT NOT NULL,
|
|
45
|
+
protocol TEXT NOT NULL,
|
|
46
|
+
endpoint TEXT NOT NULL,
|
|
47
|
+
confirmed INTEGER NOT NULL DEFAULT 0,
|
|
48
|
+
attributes TEXT NOT NULL
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
CREATE TABLE IF NOT EXISTS s3_buckets (
|
|
52
|
+
name TEXT PRIMARY KEY,
|
|
53
|
+
creation_date TEXT NOT NULL,
|
|
54
|
+
type TEXT NOT NULL DEFAULT 'general-purpose'
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
CREATE TABLE IF NOT EXISTS s3_objects (
|
|
58
|
+
bucket TEXT NOT NULL,
|
|
59
|
+
key TEXT NOT NULL,
|
|
60
|
+
body BLOB NOT NULL,
|
|
61
|
+
content_type TEXT NOT NULL,
|
|
62
|
+
content_length INTEGER NOT NULL,
|
|
63
|
+
etag TEXT NOT NULL,
|
|
64
|
+
last_modified TEXT NOT NULL,
|
|
65
|
+
metadata TEXT NOT NULL,
|
|
66
|
+
content_language TEXT,
|
|
67
|
+
content_disposition TEXT,
|
|
68
|
+
cache_control TEXT,
|
|
69
|
+
content_encoding TEXT,
|
|
70
|
+
parts TEXT,
|
|
71
|
+
checksum_algorithm TEXT,
|
|
72
|
+
checksum_value TEXT,
|
|
73
|
+
checksum_type TEXT,
|
|
74
|
+
part_checksums TEXT,
|
|
75
|
+
PRIMARY KEY (bucket, key)
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
CREATE TABLE IF NOT EXISTS s3_multipart_uploads (
|
|
79
|
+
upload_id TEXT PRIMARY KEY,
|
|
80
|
+
bucket TEXT NOT NULL,
|
|
81
|
+
key TEXT NOT NULL,
|
|
82
|
+
content_type TEXT NOT NULL,
|
|
83
|
+
metadata TEXT NOT NULL,
|
|
84
|
+
initiated TEXT NOT NULL,
|
|
85
|
+
content_language TEXT,
|
|
86
|
+
content_disposition TEXT,
|
|
87
|
+
cache_control TEXT,
|
|
88
|
+
content_encoding TEXT,
|
|
89
|
+
checksum_algorithm TEXT
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
CREATE TABLE IF NOT EXISTS s3_multipart_parts (
|
|
93
|
+
upload_id TEXT NOT NULL REFERENCES s3_multipart_uploads(upload_id) ON DELETE CASCADE,
|
|
94
|
+
part_number INTEGER NOT NULL,
|
|
95
|
+
body BLOB NOT NULL,
|
|
96
|
+
etag TEXT NOT NULL,
|
|
97
|
+
last_modified TEXT NOT NULL,
|
|
98
|
+
checksum_value TEXT,
|
|
99
|
+
PRIMARY KEY (upload_id, part_number)
|
|
100
|
+
);
|
|
101
|
+
`;
|
|
102
|
+
export class PersistenceManager {
|
|
103
|
+
db;
|
|
104
|
+
stmts;
|
|
105
|
+
constructor(dataDir) {
|
|
106
|
+
mkdirSync(dataDir, { recursive: true });
|
|
107
|
+
const dbPath = join(dataDir, "fauxqs.db");
|
|
108
|
+
this.db = new DatabaseSync(dbPath, { enableForeignKeyConstraints: true });
|
|
109
|
+
this.db.exec("PRAGMA journal_mode = WAL");
|
|
110
|
+
this.db.exec(SCHEMA);
|
|
111
|
+
this.stmts = this.prepareStatements();
|
|
112
|
+
}
|
|
113
|
+
prepareStatements() {
|
|
114
|
+
return {
|
|
115
|
+
insertQueue: this.db.prepare(`
|
|
116
|
+
INSERT OR REPLACE INTO sqs_queues (name, url, arn, attributes, tags, created_timestamp, last_modified_timestamp, sequence_counter)
|
|
117
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
118
|
+
`),
|
|
119
|
+
deleteQueue: this.db.prepare("DELETE FROM sqs_queues WHERE name = ?"),
|
|
120
|
+
updateQueueAttributes: this.db.prepare("UPDATE sqs_queues SET attributes = ?, last_modified_timestamp = ? WHERE name = ?"),
|
|
121
|
+
updateQueueSequenceCounter: this.db.prepare("UPDATE sqs_queues SET sequence_counter = ? WHERE name = ?"),
|
|
122
|
+
loadQueues: this.db.prepare("SELECT * FROM sqs_queues"),
|
|
123
|
+
insertMessage: this.db.prepare(`
|
|
124
|
+
INSERT OR REPLACE INTO sqs_messages (
|
|
125
|
+
message_id, queue_name, body, md5_of_body, message_attributes, md5_of_message_attributes,
|
|
126
|
+
sent_timestamp, approximate_receive_count, approximate_first_receive_timestamp,
|
|
127
|
+
delay_until, message_group_id, message_deduplication_id, sequence_number,
|
|
128
|
+
receipt_handle, visibility_deadline
|
|
129
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
130
|
+
`),
|
|
131
|
+
deleteMessage: this.db.prepare("DELETE FROM sqs_messages WHERE message_id = ?"),
|
|
132
|
+
updateMessageInflight: this.db.prepare(`
|
|
133
|
+
UPDATE sqs_messages SET receipt_handle = ?, visibility_deadline = ?, approximate_receive_count = ?, approximate_first_receive_timestamp = ?
|
|
134
|
+
WHERE message_id = ?
|
|
135
|
+
`),
|
|
136
|
+
deleteQueueMessages: this.db.prepare("DELETE FROM sqs_messages WHERE queue_name = ?"),
|
|
137
|
+
loadMessages: this.db.prepare("SELECT * FROM sqs_messages WHERE queue_name = ?"),
|
|
138
|
+
deleteAllMessages: this.db.prepare("DELETE FROM sqs_messages"),
|
|
139
|
+
insertTopic: this.db.prepare(`
|
|
140
|
+
INSERT OR REPLACE INTO sns_topics (arn, name, attributes, tags, subscription_arns)
|
|
141
|
+
VALUES (?, ?, ?, ?, ?)
|
|
142
|
+
`),
|
|
143
|
+
deleteTopic: this.db.prepare("DELETE FROM sns_topics WHERE arn = ?"),
|
|
144
|
+
updateTopicAttributes: this.db.prepare("UPDATE sns_topics SET attributes = ? WHERE arn = ?"),
|
|
145
|
+
updateTopicSubscriptionArns: this.db.prepare("UPDATE sns_topics SET subscription_arns = ? WHERE arn = ?"),
|
|
146
|
+
loadTopics: this.db.prepare("SELECT * FROM sns_topics"),
|
|
147
|
+
insertSubscription: this.db.prepare(`
|
|
148
|
+
INSERT OR REPLACE INTO sns_subscriptions (arn, topic_arn, protocol, endpoint, confirmed, attributes)
|
|
149
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
150
|
+
`),
|
|
151
|
+
deleteSubscription: this.db.prepare("DELETE FROM sns_subscriptions WHERE arn = ?"),
|
|
152
|
+
updateSubscriptionAttributes: this.db.prepare("UPDATE sns_subscriptions SET attributes = ? WHERE arn = ?"),
|
|
153
|
+
loadSubscriptions: this.db.prepare("SELECT * FROM sns_subscriptions"),
|
|
154
|
+
insertBucket: this.db.prepare("INSERT OR REPLACE INTO s3_buckets (name, creation_date, type) VALUES (?, ?, ?)"),
|
|
155
|
+
deleteBucket: this.db.prepare("DELETE FROM s3_buckets WHERE name = ?"),
|
|
156
|
+
loadBuckets: this.db.prepare("SELECT * FROM s3_buckets"),
|
|
157
|
+
upsertObject: this.db.prepare(`
|
|
158
|
+
INSERT OR REPLACE INTO s3_objects (
|
|
159
|
+
bucket, key, body, content_type, content_length, etag, last_modified, metadata,
|
|
160
|
+
content_language, content_disposition, cache_control, content_encoding,
|
|
161
|
+
parts, checksum_algorithm, checksum_value, checksum_type, part_checksums
|
|
162
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
163
|
+
`),
|
|
164
|
+
deleteObject: this.db.prepare("DELETE FROM s3_objects WHERE bucket = ? AND key = ?"),
|
|
165
|
+
deleteObjectsByBucket: this.db.prepare("DELETE FROM s3_objects WHERE bucket = ?"),
|
|
166
|
+
deleteAllObjects: this.db.prepare("DELETE FROM s3_objects"),
|
|
167
|
+
loadObjects: this.db.prepare("SELECT * FROM s3_objects"),
|
|
168
|
+
insertMultipartUpload: this.db.prepare(`
|
|
169
|
+
INSERT OR REPLACE INTO s3_multipart_uploads (
|
|
170
|
+
upload_id, bucket, key, content_type, metadata, initiated,
|
|
171
|
+
content_language, content_disposition, cache_control, content_encoding, checksum_algorithm
|
|
172
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
173
|
+
`),
|
|
174
|
+
deleteMultipartUpload: this.db.prepare("DELETE FROM s3_multipart_uploads WHERE upload_id = ?"),
|
|
175
|
+
loadMultipartUploads: this.db.prepare("SELECT * FROM s3_multipart_uploads"),
|
|
176
|
+
upsertMultipartPart: this.db.prepare(`
|
|
177
|
+
INSERT OR REPLACE INTO s3_multipart_parts (upload_id, part_number, body, etag, last_modified, checksum_value)
|
|
178
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
179
|
+
`),
|
|
180
|
+
deleteMultipartParts: this.db.prepare("DELETE FROM s3_multipart_parts WHERE upload_id = ?"),
|
|
181
|
+
loadMultipartParts: this.db.prepare("SELECT * FROM s3_multipart_parts WHERE upload_id = ?"),
|
|
182
|
+
deleteAllMultipartParts: this.db.prepare("DELETE FROM s3_multipart_parts"),
|
|
183
|
+
deleteAllMultipartUploads: this.db.prepare("DELETE FROM s3_multipart_uploads"),
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
transaction(fn) {
|
|
187
|
+
this.db.exec("BEGIN");
|
|
188
|
+
try {
|
|
189
|
+
fn();
|
|
190
|
+
this.db.exec("COMMIT");
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
this.db.exec("ROLLBACK");
|
|
194
|
+
throw err;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// ── SQS Queue write-through ──
|
|
198
|
+
insertQueue(queue) {
|
|
199
|
+
this.stmts.insertQueue.run(queue.name, queue.url, queue.arn, JSON.stringify(queue.attributes), JSON.stringify(Object.fromEntries(queue.tags)), queue.createdTimestamp, queue.lastModifiedTimestamp, queue.sequenceCounter);
|
|
200
|
+
}
|
|
201
|
+
deleteQueue(name) {
|
|
202
|
+
this.stmts.deleteQueue.run(name);
|
|
203
|
+
}
|
|
204
|
+
updateQueueAttributes(name, attributes, lastModified) {
|
|
205
|
+
this.stmts.updateQueueAttributes.run(JSON.stringify(attributes), lastModified, name);
|
|
206
|
+
}
|
|
207
|
+
updateQueueSequenceCounter(name, counter) {
|
|
208
|
+
this.stmts.updateQueueSequenceCounter.run(counter, name);
|
|
209
|
+
}
|
|
210
|
+
// ── SQS Message write-through ──
|
|
211
|
+
insertMessage(queueName, msg) {
|
|
212
|
+
this.stmts.insertMessage.run(msg.messageId, queueName, msg.body, msg.md5OfBody, JSON.stringify(msg.messageAttributes), msg.md5OfMessageAttributes, msg.sentTimestamp, msg.approximateReceiveCount, msg.approximateFirstReceiveTimestamp ?? null, msg.delayUntil ?? null, msg.messageGroupId ?? null, msg.messageDeduplicationId ?? null, msg.sequenceNumber ?? null, null, null);
|
|
213
|
+
}
|
|
214
|
+
deleteMessage(messageId) {
|
|
215
|
+
this.stmts.deleteMessage.run(messageId);
|
|
216
|
+
}
|
|
217
|
+
updateMessageInflight(messageId, receiptHandle, visibilityDeadline, receiveCount, firstReceiveTimestamp) {
|
|
218
|
+
this.stmts.updateMessageInflight.run(receiptHandle, visibilityDeadline, receiveCount, firstReceiveTimestamp ?? null, messageId);
|
|
219
|
+
}
|
|
220
|
+
updateMessageReady(messageId) {
|
|
221
|
+
this.stmts.updateMessageInflight.run(null, null, null, null, messageId);
|
|
222
|
+
}
|
|
223
|
+
deleteQueueMessages(queueName) {
|
|
224
|
+
this.stmts.deleteQueueMessages.run(queueName);
|
|
225
|
+
}
|
|
226
|
+
deleteAllMessages() {
|
|
227
|
+
this.stmts.deleteAllMessages.run();
|
|
228
|
+
}
|
|
229
|
+
// ── SNS Topic write-through ──
|
|
230
|
+
insertTopic(topic) {
|
|
231
|
+
this.stmts.insertTopic.run(topic.arn, topic.name, JSON.stringify(topic.attributes), JSON.stringify(Object.fromEntries(topic.tags)), JSON.stringify(topic.subscriptionArns));
|
|
232
|
+
}
|
|
233
|
+
deleteTopic(arn) {
|
|
234
|
+
this.stmts.deleteTopic.run(arn);
|
|
235
|
+
}
|
|
236
|
+
updateTopicAttributes(arn, attributes) {
|
|
237
|
+
this.stmts.updateTopicAttributes.run(JSON.stringify(attributes), arn);
|
|
238
|
+
}
|
|
239
|
+
updateTopicSubscriptionArns(arn, arns) {
|
|
240
|
+
this.stmts.updateTopicSubscriptionArns.run(JSON.stringify(arns), arn);
|
|
241
|
+
}
|
|
242
|
+
// ── SNS Subscription write-through ──
|
|
243
|
+
insertSubscription(sub) {
|
|
244
|
+
this.stmts.insertSubscription.run(sub.arn, sub.topicArn, sub.protocol, sub.endpoint, sub.confirmed ? 1 : 0, JSON.stringify(sub.attributes));
|
|
245
|
+
}
|
|
246
|
+
deleteSubscription(arn) {
|
|
247
|
+
this.stmts.deleteSubscription.run(arn);
|
|
248
|
+
}
|
|
249
|
+
updateSubscriptionAttributes(arn, attributes) {
|
|
250
|
+
this.stmts.updateSubscriptionAttributes.run(JSON.stringify(attributes), arn);
|
|
251
|
+
}
|
|
252
|
+
// ── S3 Bucket write-through ──
|
|
253
|
+
insertBucket(name, creationDate, type) {
|
|
254
|
+
this.stmts.insertBucket.run(name, creationDate.toISOString(), type);
|
|
255
|
+
}
|
|
256
|
+
deleteBucket(name) {
|
|
257
|
+
this.stmts.deleteBucket.run(name);
|
|
258
|
+
}
|
|
259
|
+
// ── S3 Object write-through ──
|
|
260
|
+
upsertObject(bucket, obj) {
|
|
261
|
+
this.stmts.upsertObject.run(bucket, obj.key, obj.body, obj.contentType, obj.contentLength, obj.etag, obj.lastModified.toISOString(), JSON.stringify(obj.metadata), obj.contentLanguage ?? null, obj.contentDisposition ?? null, obj.cacheControl ?? null, obj.contentEncoding ?? null, obj.parts ? JSON.stringify(obj.parts) : null, obj.checksumAlgorithm ?? null, obj.checksumValue ?? null, obj.checksumType ?? null, obj.partChecksums ? JSON.stringify(obj.partChecksums) : null);
|
|
262
|
+
}
|
|
263
|
+
deleteObject(bucket, key) {
|
|
264
|
+
this.stmts.deleteObject.run(bucket, key);
|
|
265
|
+
}
|
|
266
|
+
deleteObjectsByBucket(bucket) {
|
|
267
|
+
this.stmts.deleteObjectsByBucket.run(bucket);
|
|
268
|
+
}
|
|
269
|
+
deleteAllObjects() {
|
|
270
|
+
this.stmts.deleteAllObjects.run();
|
|
271
|
+
}
|
|
272
|
+
renameObject(bucket, sourceKey, destKey) {
|
|
273
|
+
this.transaction(() => {
|
|
274
|
+
const row = this.db
|
|
275
|
+
.prepare("SELECT * FROM s3_objects WHERE bucket = ? AND key = ?")
|
|
276
|
+
.get(bucket, sourceKey);
|
|
277
|
+
if (!row)
|
|
278
|
+
return;
|
|
279
|
+
this.stmts.deleteObject.run(bucket, sourceKey);
|
|
280
|
+
const r = row;
|
|
281
|
+
this.stmts.upsertObject.run(bucket, destKey, r.body, r.content_type, r.content_length, r.etag, r.last_modified, r.metadata, r.content_language, r.content_disposition, r.cache_control, r.content_encoding, r.parts, r.checksum_algorithm, r.checksum_value, r.checksum_type, r.part_checksums);
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
// ── S3 Multipart Upload write-through ──
|
|
285
|
+
insertMultipartUpload(upload) {
|
|
286
|
+
this.stmts.insertMultipartUpload.run(upload.uploadId, upload.bucket, upload.key, upload.contentType, JSON.stringify(upload.metadata), upload.initiated.toISOString(), upload.contentLanguage ?? null, upload.contentDisposition ?? null, upload.cacheControl ?? null, upload.contentEncoding ?? null, upload.checksumAlgorithm ?? null);
|
|
287
|
+
}
|
|
288
|
+
upsertMultipartPart(uploadId, part) {
|
|
289
|
+
this.stmts.upsertMultipartPart.run(uploadId, part.partNumber, part.body, part.etag, part.lastModified.toISOString(), part.checksumValue ?? null);
|
|
290
|
+
}
|
|
291
|
+
deleteMultipartUpload(uploadId) {
|
|
292
|
+
this.stmts.deleteMultipartUpload.run(uploadId);
|
|
293
|
+
}
|
|
294
|
+
completeMultipartUpload(uploadId, bucket, obj) {
|
|
295
|
+
this.transaction(() => {
|
|
296
|
+
this.upsertObject(bucket, obj);
|
|
297
|
+
this.stmts.deleteMultipartUpload.run(uploadId);
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
// ── Bulk operations ──
|
|
301
|
+
clearMessagesAndObjects() {
|
|
302
|
+
this.transaction(() => {
|
|
303
|
+
this.stmts.deleteAllMessages.run();
|
|
304
|
+
this.stmts.deleteAllObjects.run();
|
|
305
|
+
this.stmts.deleteAllMultipartParts.run();
|
|
306
|
+
this.stmts.deleteAllMultipartUploads.run();
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
purgeAll() {
|
|
310
|
+
this.transaction(() => {
|
|
311
|
+
this.stmts.deleteAllMultipartParts.run();
|
|
312
|
+
this.stmts.deleteAllMultipartUploads.run();
|
|
313
|
+
this.stmts.deleteAllObjects.run();
|
|
314
|
+
this.stmts.deleteAllMessages.run();
|
|
315
|
+
this.db.prepare("DELETE FROM s3_buckets").run();
|
|
316
|
+
this.db.prepare("DELETE FROM sns_subscriptions").run();
|
|
317
|
+
this.db.prepare("DELETE FROM sns_topics").run();
|
|
318
|
+
this.db.prepare("DELETE FROM sqs_queues").run();
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
// ── Load on startup ──
|
|
322
|
+
load(sqsStore, snsStore, s3Store) {
|
|
323
|
+
this.loadSqsQueues(sqsStore);
|
|
324
|
+
this.loadSnsTopics(snsStore);
|
|
325
|
+
this.loadSnsSubscriptions(snsStore);
|
|
326
|
+
this.loadS3Buckets(s3Store);
|
|
327
|
+
this.loadS3Objects(s3Store);
|
|
328
|
+
this.loadS3MultipartUploads(s3Store);
|
|
329
|
+
}
|
|
330
|
+
loadSqsQueues(sqsStore) {
|
|
331
|
+
const rows = this.stmts.loadQueues.all();
|
|
332
|
+
for (const row of rows) {
|
|
333
|
+
const attributes = JSON.parse(row.attributes);
|
|
334
|
+
const tags = JSON.parse(row.tags);
|
|
335
|
+
const queue = sqsStore.createQueue(row.name, row.url, row.arn, attributes, tags);
|
|
336
|
+
// Restore timestamps and sequence counter (createQueue will have re-persisted,
|
|
337
|
+
// so overwrite in-memory values without triggering another write)
|
|
338
|
+
queue.createdTimestamp = row.created_timestamp;
|
|
339
|
+
queue.lastModifiedTimestamp = row.last_modified_timestamp;
|
|
340
|
+
queue.sequenceCounter = row.sequence_counter;
|
|
341
|
+
this.loadSqsMessages(queue);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
loadSqsMessages(queue) {
|
|
345
|
+
const now = Date.now();
|
|
346
|
+
const rows = this.stmts.loadMessages.all(queue.name);
|
|
347
|
+
for (const row of rows) {
|
|
348
|
+
const msg = {
|
|
349
|
+
messageId: row.message_id,
|
|
350
|
+
body: row.body,
|
|
351
|
+
md5OfBody: row.md5_of_body,
|
|
352
|
+
messageAttributes: JSON.parse(row.message_attributes),
|
|
353
|
+
md5OfMessageAttributes: row.md5_of_message_attributes,
|
|
354
|
+
sentTimestamp: row.sent_timestamp,
|
|
355
|
+
approximateReceiveCount: row.approximate_receive_count,
|
|
356
|
+
approximateFirstReceiveTimestamp: row.approximate_first_receive_timestamp ?? undefined,
|
|
357
|
+
delayUntil: row.delay_until ?? undefined,
|
|
358
|
+
messageGroupId: row.message_group_id ?? undefined,
|
|
359
|
+
messageDeduplicationId: row.message_deduplication_id ?? undefined,
|
|
360
|
+
sequenceNumber: row.sequence_number ?? undefined,
|
|
361
|
+
};
|
|
362
|
+
// Recalculate message state from persisted timestamps
|
|
363
|
+
if (row.receipt_handle && row.visibility_deadline) {
|
|
364
|
+
if (row.visibility_deadline > now) {
|
|
365
|
+
// Still inflight
|
|
366
|
+
queue.inflightMessages.set(row.receipt_handle, {
|
|
367
|
+
message: msg,
|
|
368
|
+
receiptHandle: row.receipt_handle,
|
|
369
|
+
visibilityDeadline: row.visibility_deadline,
|
|
370
|
+
});
|
|
371
|
+
if (msg.messageGroupId && queue.isFifo()) {
|
|
372
|
+
const count = queue.fifoLockedGroups.get(msg.messageGroupId) ?? 0;
|
|
373
|
+
queue.fifoLockedGroups.set(msg.messageGroupId, count + 1);
|
|
374
|
+
}
|
|
375
|
+
continue;
|
|
376
|
+
}
|
|
377
|
+
// Visibility expired — clear inflight state in DB
|
|
378
|
+
this.stmts.updateMessageInflight.run(null, null, row.approximate_receive_count, row.approximate_first_receive_timestamp, row.message_id);
|
|
379
|
+
}
|
|
380
|
+
// Place into ready or delayed
|
|
381
|
+
if (msg.delayUntil && msg.delayUntil > now) {
|
|
382
|
+
if (queue.isFifo()) {
|
|
383
|
+
const groupId = msg.messageGroupId ?? "__default";
|
|
384
|
+
const group = queue.fifoDelayed.get(groupId) ?? [];
|
|
385
|
+
group.push(msg);
|
|
386
|
+
queue.fifoDelayed.set(groupId, group);
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
queue.delayedMessages.push(msg);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
if (queue.isFifo()) {
|
|
394
|
+
const groupId = msg.messageGroupId ?? "__default";
|
|
395
|
+
const group = queue.fifoMessages.get(groupId) ?? [];
|
|
396
|
+
group.push(msg);
|
|
397
|
+
queue.fifoMessages.set(groupId, group);
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
queue.messages.push(msg);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
loadSnsTopics(snsStore) {
|
|
406
|
+
const rows = this.stmts.loadTopics.all();
|
|
407
|
+
for (const row of rows) {
|
|
408
|
+
const topic = {
|
|
409
|
+
arn: row.arn,
|
|
410
|
+
name: row.name,
|
|
411
|
+
attributes: JSON.parse(row.attributes),
|
|
412
|
+
tags: new Map(Object.entries(JSON.parse(row.tags))),
|
|
413
|
+
subscriptionArns: JSON.parse(row.subscription_arns),
|
|
414
|
+
};
|
|
415
|
+
snsStore.topics.set(row.arn, topic);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
loadSnsSubscriptions(snsStore) {
|
|
419
|
+
const rows = this.stmts.loadSubscriptions.all();
|
|
420
|
+
for (const row of rows) {
|
|
421
|
+
const sub = {
|
|
422
|
+
arn: row.arn,
|
|
423
|
+
topicArn: row.topic_arn,
|
|
424
|
+
protocol: row.protocol,
|
|
425
|
+
endpoint: row.endpoint,
|
|
426
|
+
confirmed: row.confirmed === 1,
|
|
427
|
+
attributes: JSON.parse(row.attributes),
|
|
428
|
+
};
|
|
429
|
+
snsStore.subscriptions.set(row.arn, sub);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
loadS3Buckets(s3Store) {
|
|
433
|
+
const rows = this.stmts.loadBuckets.all();
|
|
434
|
+
for (const row of rows) {
|
|
435
|
+
s3Store.createBucket(row.name, row.type);
|
|
436
|
+
s3Store.setBucketCreationDate(row.name, new Date(row.creation_date));
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
loadS3Objects(s3Store) {
|
|
440
|
+
const rows = this.stmts.loadObjects.all();
|
|
441
|
+
for (const row of rows) {
|
|
442
|
+
const obj = {
|
|
443
|
+
key: row.key,
|
|
444
|
+
body: Buffer.from(row.body),
|
|
445
|
+
contentType: row.content_type,
|
|
446
|
+
contentLength: row.content_length,
|
|
447
|
+
etag: row.etag,
|
|
448
|
+
lastModified: new Date(row.last_modified),
|
|
449
|
+
metadata: JSON.parse(row.metadata),
|
|
450
|
+
...(row.content_language && { contentLanguage: row.content_language }),
|
|
451
|
+
...(row.content_disposition && { contentDisposition: row.content_disposition }),
|
|
452
|
+
...(row.cache_control && { cacheControl: row.cache_control }),
|
|
453
|
+
...(row.content_encoding && { contentEncoding: row.content_encoding }),
|
|
454
|
+
...(row.parts && { parts: JSON.parse(row.parts) }),
|
|
455
|
+
...(row.checksum_algorithm && {
|
|
456
|
+
checksumAlgorithm: row.checksum_algorithm,
|
|
457
|
+
}),
|
|
458
|
+
...(row.checksum_value && { checksumValue: row.checksum_value }),
|
|
459
|
+
...(row.checksum_type && {
|
|
460
|
+
checksumType: row.checksum_type,
|
|
461
|
+
}),
|
|
462
|
+
...(row.part_checksums && { partChecksums: JSON.parse(row.part_checksums) }),
|
|
463
|
+
};
|
|
464
|
+
s3Store.restoreObject(row.bucket, obj);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
loadS3MultipartUploads(s3Store) {
|
|
468
|
+
const uploadRows = this.stmts.loadMultipartUploads.all();
|
|
469
|
+
for (const row of uploadRows) {
|
|
470
|
+
const upload = {
|
|
471
|
+
uploadId: row.upload_id,
|
|
472
|
+
bucket: row.bucket,
|
|
473
|
+
key: row.key,
|
|
474
|
+
contentType: row.content_type,
|
|
475
|
+
metadata: JSON.parse(row.metadata),
|
|
476
|
+
parts: new Map(),
|
|
477
|
+
initiated: new Date(row.initiated),
|
|
478
|
+
...(row.content_language && { contentLanguage: row.content_language }),
|
|
479
|
+
...(row.content_disposition && { contentDisposition: row.content_disposition }),
|
|
480
|
+
...(row.cache_control && { cacheControl: row.cache_control }),
|
|
481
|
+
...(row.content_encoding && { contentEncoding: row.content_encoding }),
|
|
482
|
+
...(row.checksum_algorithm && {
|
|
483
|
+
checksumAlgorithm: row.checksum_algorithm,
|
|
484
|
+
}),
|
|
485
|
+
};
|
|
486
|
+
const partRows = this.stmts.loadMultipartParts.all(row.upload_id);
|
|
487
|
+
for (const pRow of partRows) {
|
|
488
|
+
upload.parts.set(pRow.part_number, {
|
|
489
|
+
partNumber: pRow.part_number,
|
|
490
|
+
body: Buffer.from(pRow.body),
|
|
491
|
+
etag: pRow.etag,
|
|
492
|
+
lastModified: new Date(pRow.last_modified),
|
|
493
|
+
...(pRow.checksum_value && { checksumValue: pRow.checksum_value }),
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
s3Store.restoreMultipartUpload(upload);
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
close() {
|
|
500
|
+
this.db.close();
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"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"}
|
package/dist/s3/s3Store.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { MessageSpy } from "../spy.ts";
|
|
2
|
-
import type {
|
|
2
|
+
import type { PersistenceManager } from "../persistence.ts";
|
|
3
|
+
import type { S3Object, MultipartUpload, ChecksumAlgorithm } from "./s3Types.ts";
|
|
3
4
|
export type BucketType = "general-purpose" | "directory";
|
|
4
5
|
export declare class S3Store {
|
|
5
6
|
private buckets;
|
|
@@ -8,10 +9,14 @@ export declare class S3Store {
|
|
|
8
9
|
private multipartUploads;
|
|
9
10
|
private multipartUploadsByBucket;
|
|
10
11
|
spy?: MessageSpy;
|
|
12
|
+
persistence?: PersistenceManager;
|
|
11
13
|
relaxedRules?: {
|
|
12
14
|
disableMinCopySourceSize?: boolean;
|
|
13
15
|
};
|
|
14
16
|
createBucket(name: string, type?: BucketType): void;
|
|
17
|
+
setBucketCreationDate(name: string, date: Date): void;
|
|
18
|
+
restoreObject(bucket: string, obj: S3Object): void;
|
|
19
|
+
restoreMultipartUpload(upload: MultipartUpload): void;
|
|
15
20
|
getBucketType(name: string): BucketType | undefined;
|
|
16
21
|
private validateBucketName;
|
|
17
22
|
deleteBucket(name: string): void;
|
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,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"s3Store.d.ts","sourceRoot":"","sources":["../../src/s3/s3Store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGjF,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,WAAW,CAAC;AAEzD,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,wBAAwB,CAAkC;IAClE,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,YAAY,CAAC,EAAE;QAAE,wBAAwB,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAEtD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAYnD,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAIrD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI;IAOlD,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAUrD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAInD,OAAO,CAAC,kBAAkB;IAqB1B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAuBhC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIhC,WAAW,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,IAAI,CAAA;KAAE,EAAE;IAWrD,SAAS,CACP,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,cAAc,CAAC,EAAE;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,EACD,YAAY,CAAC,EAAE;QACb,SAAS,EAAE,iBAAiB,CAAC;QAC7B,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,aAAa,GAAG,WAAW,CAAC;QAClC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,GACA,QAAQ;IA6CX,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ;IAwBhD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAoB/C,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ;IAIjD,WAAW,CACT,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GACA;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE;IA0D1E,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IA4CtE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAWvD,qBAAqB,CACnB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,cAAc,CAAC,EAAE;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,EACD,iBAAiB,CAAC,EAAE,iBAAiB,GACpC,MAAM;IAmCT,UAAU,CACR,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,GACrB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;IAwB3C,uBAAuB,CACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,GAChD,QAAQ;IA+IX,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAe5C,mHAAmH;IACnH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAe/B,gGAAgG;IAChG,YAAY,IAAI,IAAI;IAQpB,QAAQ,IAAI,IAAI;CAOjB"}
|