@pikku/lambda 0.9.2 → 0.9.3
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 +8 -0
- package/dist/queue/sqs-worker.js +20 -6
- package/dist/queue/sqs-worker.js.map +1 -1
- package/package.json +2 -2
- package/src/queue/sqs-worker.ts +26 -8
package/CHANGELOG.md
CHANGED
package/dist/queue/sqs-worker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { runQueueJob } from '@pikku/core/queue';
|
|
1
|
+
import { runQueueJob, QueueJobFailedError, QueueJobDiscardedError, } from '@pikku/core/queue';
|
|
2
2
|
export function mapSQSRecordToQueueJob(record, maxAttempts) {
|
|
3
3
|
let data;
|
|
4
4
|
try {
|
|
@@ -36,11 +36,25 @@ export function mapSQSRecordToQueueJob(record, maxAttempts) {
|
|
|
36
36
|
export const runSQSQueueWorker = async (singletonServices, createSessionServices, event) => {
|
|
37
37
|
console.log(JSON.stringify(event, null, 2));
|
|
38
38
|
const jobs = event.Records.map(mapSQSRecordToQueueJob);
|
|
39
|
-
const results = await Promise.allSettled(jobs.map((job) =>
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
const results = await Promise.allSettled(jobs.map(async (job) => {
|
|
40
|
+
try {
|
|
41
|
+
return await runQueueJob({
|
|
42
|
+
singletonServices,
|
|
43
|
+
createSessionServices,
|
|
44
|
+
job,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (error instanceof QueueJobFailedError) {
|
|
49
|
+
throw error;
|
|
50
|
+
}
|
|
51
|
+
else if (error instanceof QueueJobDiscardedError) {
|
|
52
|
+
singletonServices.logger.info(`SQS job ${job.id} discarded: ${error.message}`);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
44
58
|
results.forEach((result, index) => {
|
|
45
59
|
if (result.status === 'rejected') {
|
|
46
60
|
singletonServices.logger.error(`Failed to process SQS message ${jobs[index].id}:`, result.reason);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqs-worker.js","sourceRoot":"","sources":["../../src/queue/sqs-worker.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"sqs-worker.js","sourceRoot":"","sources":["../../src/queue/sqs-worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pikku/lambda",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "yasser.fadl@gmail.com",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@aws-sdk/client-apigatewaymanagementapi": "^3.713.0",
|
|
27
|
-
"@pikku/core": "^0.9.
|
|
27
|
+
"@pikku/core": "^0.9.4",
|
|
28
28
|
"@types/aws-lambda": "^8.10.146"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
package/src/queue/sqs-worker.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { SQSBatchResponse, SQSEvent, SQSRecord } from 'aws-lambda'
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
runQueueJob,
|
|
4
|
+
QueueJobFailedError,
|
|
5
|
+
QueueJobDiscardedError,
|
|
6
|
+
} from '@pikku/core/queue'
|
|
3
7
|
import type {
|
|
4
8
|
CoreSingletonServices,
|
|
5
9
|
CreateSessionServices,
|
|
@@ -66,13 +70,27 @@ export const runSQSQueueWorker = async (
|
|
|
66
70
|
|
|
67
71
|
// Process all jobs in parallel
|
|
68
72
|
const results = await Promise.allSettled(
|
|
69
|
-
jobs.map((job) =>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
jobs.map(async (job) => {
|
|
74
|
+
try {
|
|
75
|
+
return await runQueueJob({
|
|
76
|
+
singletonServices,
|
|
77
|
+
createSessionServices,
|
|
78
|
+
job,
|
|
79
|
+
})
|
|
80
|
+
} catch (error: unknown) {
|
|
81
|
+
if (error instanceof QueueJobFailedError) {
|
|
82
|
+
// Let SQS handle this as a failed job (will go to retry or DLQ)
|
|
83
|
+
throw error
|
|
84
|
+
} else if (error instanceof QueueJobDiscardedError) {
|
|
85
|
+
// For SQS, discarding means completing successfully (no retry)
|
|
86
|
+
singletonServices.logger.info(
|
|
87
|
+
`SQS job ${job.id} discarded: ${error.message}`
|
|
88
|
+
)
|
|
89
|
+
return // Successfully "completed" by discarding
|
|
90
|
+
}
|
|
91
|
+
throw error
|
|
92
|
+
}
|
|
93
|
+
})
|
|
76
94
|
)
|
|
77
95
|
|
|
78
96
|
// Log any failures but don't throw (SQS will handle retries)
|