@siglo/sqs 1.1.0 → 1.2.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 +20 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -38,6 +38,7 @@ npm install --save-dev @types/aws-lambda
|
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
Peer dependency matrix:
|
|
41
|
+
|
|
41
42
|
- `Siglo`: `*` (v1.0.0+)
|
|
42
43
|
- `@aws-sdk/client-sqs`: `^3.0.0` (optional if running in AWS Lambda runtime)
|
|
43
44
|
|
|
@@ -52,7 +53,7 @@ Creates an AWS Lambda-compliant batch processor function:
|
|
|
52
53
|
```typescript
|
|
53
54
|
function createSqsBatchHandler<TInput = any, TOutput = any>(
|
|
54
55
|
workflow: Flow<TInput, TOutput>,
|
|
55
|
-
options?: SigloSqsOptions<TInput, TOutput
|
|
56
|
+
options?: SigloSqsOptions<TInput, TOutput>,
|
|
56
57
|
): (event: SigloSqsEvent) => Promise<SqsBatchResponse>;
|
|
57
58
|
```
|
|
58
59
|
|
|
@@ -81,31 +82,32 @@ export interface SqsBatchResponse {
|
|
|
81
82
|
|
|
82
83
|
## 4. Configuration Options (`SigloSqsOptions`)
|
|
83
84
|
|
|
84
|
-
| Option
|
|
85
|
-
|
|
|
86
|
-
| `input`
|
|
87
|
-
| `output`
|
|
88
|
-
| `idempotencyStore` | `IdempotencyStore`
|
|
89
|
-
| `idempotencyTtlMs` | `number`
|
|
90
|
-
| `timeout`
|
|
91
|
-
| `namespace`
|
|
85
|
+
| Option | Type | Default | Description |
|
|
86
|
+
| :----------------- | :--------------------------------------------------------------------- | :----------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
87
|
+
| `input` | `(record: SigloSqsRecord) => Promise<TInput> \| TInput` | `JSON.parse(record.body)` | Custom mapper transforming an SQS record into workflow parameters. |
|
|
88
|
+
| `output` | `(result: any, record: SigloSqsRecord) => Promise<TOutput> \| TOutput` | `result` | Custom post-processor for step result. |
|
|
89
|
+
| `idempotencyStore` | `IdempotencyStore` | `undefined` | Distributed store to deduplicate across re-deliveries. |
|
|
90
|
+
| `idempotencyTtlMs` | `number` | `undefined` | Time-to-live for idempotency lock in milliseconds. Passed through to store (Redis/Postgres default: 24h; InMemory has no default expiration unless specified). |
|
|
91
|
+
| `timeout` | `number` | `undefined` | SLA execution timeout per record in milliseconds. |
|
|
92
|
+
| `namespace` | `string \| ((record: SigloSqsRecord) => string \| undefined)` | `record.messageAttributes.namespace` | Namespace extractor for multi-tenant isolation. |
|
|
92
93
|
|
|
93
94
|
---
|
|
94
95
|
|
|
95
96
|
## 5. AWS Lambda Configuration: `ReportBatchItemFailures`
|
|
96
97
|
|
|
97
98
|
To enable partial batch responses in AWS Lambda:
|
|
99
|
+
|
|
98
100
|
1. In the AWS Lambda Console, navigate to your SQS Trigger configuration.
|
|
99
101
|
2. Under **Additional settings**, check the option: **Report batch item failures**.
|
|
100
102
|
3. In AWS SAM / CloudFormation / Serverless Framework / CDK:
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
```yaml
|
|
104
|
+
FunctionEventSource:
|
|
105
|
+
Type: SQS
|
|
106
|
+
Properties:
|
|
107
|
+
Queue: !GetAtt MyQueue.Arn
|
|
108
|
+
FunctionResponseTypes:
|
|
109
|
+
- ReportBatchItemFailures
|
|
110
|
+
```
|
|
109
111
|
|
|
110
112
|
When this is enabled, returning `{ batchItemFailures: [{ itemIdentifier: 'msg-01' }] }` tells AWS SQS to delete all successful messages in the batch from the queue, while leaving only `msg-01` in the queue to be retried or routed to the Dead Letter Queue (DLQ).
|
|
111
113
|
|
|
@@ -150,7 +152,7 @@ const notificationFlow = flow(formatNotification, dispatchEmail);
|
|
|
150
152
|
const sqsHandler = createSqsBatchHandler(notificationFlow, {
|
|
151
153
|
idempotencyStore,
|
|
152
154
|
timeout: 10000, // 10-second deadline per message
|
|
153
|
-
namespace:
|
|
155
|
+
namespace: record => record.messageAttributes?.tenantId?.stringValue,
|
|
154
156
|
});
|
|
155
157
|
|
|
156
158
|
// 4. Export AWS Lambda Handler
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IACxD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC7E,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC;CACzE;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoB,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IACxD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC7D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC7E,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC;CACzE;AAwBD,MAAM,WAAW,gBAAgB;IAC7B,iBAAiB,EAAE,KAAK,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,EAC7D,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,GAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAM,WAEzB,aAAa,KAAG,OAAO,CAAC,gBAAgB,CAAC,CA+DjE;AAED,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC;AAC9C,MAAM,MAAM,eAAe,GAAG,aAAa,CAAC;AAC5C,MAAM,MAAM,iBAAiB,CAAC,MAAM,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,13 @@ function unwrapContext(obj) {
|
|
|
10
10
|
if (key.startsWith('$')) {
|
|
11
11
|
continue;
|
|
12
12
|
}
|
|
13
|
-
const val = typeof obj[key] === 'function'
|
|
13
|
+
const val = typeof obj[key] === 'function'
|
|
14
|
+
? obj[key].val !== undefined
|
|
15
|
+
? obj[key].val
|
|
16
|
+
: obj[key].length === 0
|
|
17
|
+
? obj[key]()
|
|
18
|
+
: obj[key]
|
|
19
|
+
: obj[key];
|
|
14
20
|
clean[key] = val;
|
|
15
21
|
}
|
|
16
22
|
return clean;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED