@effect-app/infra 2.53.12 → 2.54.1
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 +17 -0
- package/dist/Model/Repository/ext.d.ts +3 -3
- package/dist/Model/query/new-kid-interpreter.d.ts +1 -1
- package/dist/QueueMaker/SQLQueue.d.ts +1 -1
- package/dist/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.js +12 -7
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +4 -2
- package/dist/Store/ContextMapContainer.d.ts +1 -1
- package/dist/api/internal/RequestContextMiddleware.d.ts +1 -1
- package/dist/api/setupRequest.d.ts +2 -2
- package/package.json +11 -11
- package/src/QueueMaker/memQueue.ts +22 -7
- package/src/QueueMaker/sbqueue.ts +3 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 2.54.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 4fd0b08: fix: error processing queue messages should return message to the queue
|
|
8
|
+
|
|
9
|
+
## 2.54.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 8cb33d5: update packages
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- Updated dependencies [8cb33d5]
|
|
18
|
+
- effect-app@2.40.0
|
|
19
|
+
|
|
3
20
|
## 2.53.12
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
|
@@ -9,8 +9,8 @@ export declare const extendRepo: <T, Encoded extends FieldValues, Evt, ItemType
|
|
|
9
9
|
get: (id: T[IdKey]) => Effect.Effect<T, NotFoundError<ItemType>, RSchema>;
|
|
10
10
|
log: (evt: Evt) => import("effect-app/Pure").PureLogT<any>;
|
|
11
11
|
removeById: (id: T[IdKey]) => Effect.Effect<void, NotFoundError<ItemType>, RSchema | RPublish>;
|
|
12
|
-
save: (items_0: T, ...items: T[]) => Effect<void,
|
|
13
|
-
saveWithEvents: (events: Iterable<Evt>) => (...items: NonEmptyArray<T>) => Effect<void,
|
|
12
|
+
save: (items_0: T, ...items: T[]) => Effect<void, OptimisticConcurrencyException | InvalidStateError, RSchema | RPublish>;
|
|
13
|
+
saveWithEvents: (events: Iterable<Evt>) => (...items: NonEmptyArray<T>) => Effect<void, OptimisticConcurrencyException | InvalidStateError, RSchema | RPublish>;
|
|
14
14
|
queryAndSavePure: {
|
|
15
15
|
<A, E2, R2, T2 extends T>(q: (q: Query<Encoded>) => QueryEnd<Encoded, "one">, pure: Effect<A, E2, FixEnv<R2, Evt, T, T2>>): Effect.Effect<A, InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E2, Exclude<R2, {
|
|
16
16
|
env: PureEnv<Evt, T, T2>;
|
|
@@ -33,7 +33,7 @@ export declare const extendRepo: <T, Encoded extends FieldValues, Evt, ItemType
|
|
|
33
33
|
byIdAndSaveWithPure: <R, A_2, E_2, S2_2 extends T>(id: T[IdKey], pure: Effect<A_2, E_2, FixEnv<R, Evt, T, S2_2>>) => Effect<A_2, InvalidStateError | OptimisticConcurrencyException | NotFoundError<ItemType> | E_2, RSchema | RPublish | Exclude<R, {
|
|
34
34
|
env: PureEnv<Evt, T, S2_2>;
|
|
35
35
|
}>>;
|
|
36
|
-
saveWithPure: <R, A_3, E_3, S1_2 extends T, S2_3 extends T>(item: S1_2, pure: Effect<A_3, E_3, FixEnv<R, Evt, S1_2, S2_3>>) => Effect.Effect<A_3,
|
|
36
|
+
saveWithPure: <R, A_3, E_3, S1_2 extends T, S2_3 extends T>(item: S1_2, pure: Effect<A_3, E_3, FixEnv<R, Evt, S1_2, S2_3>>) => Effect.Effect<A_3, OptimisticConcurrencyException | InvalidStateError | E_3, RSchema | RPublish | Exclude<R, {
|
|
37
37
|
env: PureEnv<Evt, S1_2, S2_3>;
|
|
38
38
|
}>>;
|
|
39
39
|
};
|
|
@@ -15,7 +15,7 @@ export declare const toFilter: <TFieldValues extends FieldValues, A, R, TFieldVa
|
|
|
15
15
|
key: import("../filter/types/path/eager.js").Path<TFieldValues>;
|
|
16
16
|
direction: "ASC" | "DESC";
|
|
17
17
|
}[]];
|
|
18
|
-
ttype: "one" | "
|
|
18
|
+
ttype: "one" | "many" | "count";
|
|
19
19
|
mode: "project" | "collect" | "transform";
|
|
20
20
|
filter: FilterResult[];
|
|
21
21
|
};
|
|
@@ -13,6 +13,6 @@ export declare function makeSQLQueue<Evt extends {
|
|
|
13
13
|
_tag: string;
|
|
14
14
|
}, EvtE, DrainEvtE>(queueName: NonEmptyString255, queueDrainName: NonEmptyString255, schema: S.Schema<Evt, EvtE>, drainSchema: S.Schema<DrainEvt, DrainEvtE>): Effect.Effect<{
|
|
15
15
|
publish: (messages_0: Evt, ...messages: Evt[]) => Effect.Effect<void, never, never>;
|
|
16
|
-
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, import("../RequestContext.js").LocaleRef | import("../Store/
|
|
16
|
+
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, import("../RequestContext.js").LocaleRef | import("../Store/ContextMapContainer.js").ContextMapContainer | import("../Store/Memory.js").storeId>, Tracer.ParentSpan>>;
|
|
17
17
|
}, never, SqlClient.SqlClient>;
|
|
18
18
|
//# sourceMappingURL=SQLQueue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memQueue.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/memQueue.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"memQueue.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/memQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAE,MAAM,EAAe,CAAC,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAMlD,wBAAgB,YAAY,CAC1B,GAAG,SAAS;IAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC5C,QAAQ,SAAS;IAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACjD,IAAI,EACJ,SAAS,EAET,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;;YAkC9B,MAAM,EAAE,MAAM,eACP,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,cAC/C,MAAM;oBA6EzB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Tracer } from "effect";
|
|
1
|
+
import { Cause, Tracer } from "effect";
|
|
2
2
|
import { Effect, Fiber, flow, S } from "effect-app";
|
|
3
3
|
import { pretty } from "effect-app/utils";
|
|
4
4
|
import { MemQueue } from "../adapters/memQueue.js";
|
|
5
5
|
import { getRequestContext, setupRequestContextWithCustomSpan } from "../api/setupRequest.js";
|
|
6
6
|
import { InfraLogger } from "../logger.js";
|
|
7
|
-
import { reportNonInterruptedFailure } from "./errors.js";
|
|
7
|
+
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause } from "./errors.js";
|
|
8
8
|
import { QueueMeta } from "./service.js";
|
|
9
9
|
export function makeMemQueue(queueName, queueDrainName, schema, drainSchema) {
|
|
10
10
|
return Effect.gen(function* () {
|
|
@@ -33,6 +33,7 @@ export function makeMemQueue(queueName, queueDrainName, schema, drainSchema) {
|
|
|
33
33
|
})),
|
|
34
34
|
drain: (handleEvent, sessionId) => Effect.gen(function* () {
|
|
35
35
|
const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName });
|
|
36
|
+
const reportError = reportNonInterruptedFailureCause({ name: "MemQueue.drain." + queueDrainName });
|
|
36
37
|
const processMessage = (msg) =>
|
|
37
38
|
// we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
38
39
|
Effect
|
|
@@ -57,10 +58,14 @@ export function makeMemQueue(queueName, queueDrainName, schema, drainSchema) {
|
|
|
57
58
|
}));
|
|
58
59
|
return yield* qDrain
|
|
59
60
|
.take
|
|
60
|
-
.pipe(Effect
|
|
61
|
-
|
|
62
|
-
//
|
|
63
|
-
|
|
61
|
+
.pipe(Effect
|
|
62
|
+
.flatMap((x) => processMessage(x).pipe(Effect.uninterruptible, Effect.fork, Effect.flatMap(Fiber.join),
|
|
63
|
+
// normally a failed item would be returned to the queue and retried up to X times.
|
|
64
|
+
Effect.flatMap((_) => _._tag === "Failure" && !Cause.isInterruptedOnly(_.cause)
|
|
65
|
+
? qDrain.offer(x).pipe(
|
|
66
|
+
// TODO: retry count tracking and max retries.
|
|
67
|
+
Effect.delay("5 seconds"), Effect.tapErrorCause(reportError), Effect.forkDaemon)
|
|
68
|
+
: Effect.void))), silenceAndReportError, Effect.withSpan(`queue.drain: ${queueDrainName}`, {
|
|
64
69
|
attributes: {
|
|
65
70
|
"queue.type": "mem",
|
|
66
71
|
"queue.name": queueDrainName,
|
|
@@ -71,4 +76,4 @@ export function makeMemQueue(queueName, queueDrainName, schema, drainSchema) {
|
|
|
71
76
|
};
|
|
72
77
|
});
|
|
73
78
|
}
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtUXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvUXVldWVNYWtlci9tZW1RdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlDQUFpQyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDM0YsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFeEQsTUFBTSxVQUFVLFlBQVksQ0FNMUIsU0FBaUIsRUFDakIsY0FBc0IsRUFDdEIsTUFBMkIsRUFDM0IsV0FBMEM7SUFFMUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN6QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFDM0IsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ2hELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUUxRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sbqueue.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/sbqueue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAS,MAAM,EAAQ,KAAK,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAA4C,yBAAyB,EAAa,MAAM,2BAA2B,CAAA;AAM1H,wBAAgB,mBAAmB,CACjC,GAAG,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1C,QAAQ,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC/C,IAAI,EACJ,SAAS,EAET,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;YAoB9B,MAAM,EAAE,MAAM,eACP,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,cAC/C,MAAM;;
|
|
1
|
+
{"version":3,"file":"sbqueue.d.ts","sourceRoot":"","sources":["../../src/QueueMaker/sbqueue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAS,MAAM,EAAQ,KAAK,EAAE,CAAC,EAAE,MAAM,YAAY,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,EAA4C,yBAAyB,EAAa,MAAM,2BAA2B,CAAA;AAM1H,wBAAgB,mBAAmB,CACjC,GAAG,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC1C,QAAQ,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC/C,IAAI,EACJ,SAAS,EAET,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,EAC3B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC;YAoB9B,MAAM,EAAE,MAAM,eACP,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,cAC/C,MAAM;;qFAoGzB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,wGAI1F"}
|
|
@@ -52,7 +52,9 @@ export function makeServiceBusQueue(queueName, queueDrainName, schema, drainSche
|
|
|
52
52
|
return effect;
|
|
53
53
|
}), Effect
|
|
54
54
|
// we reportError here, so that we report the error only, and keep flowing
|
|
55
|
-
.tapErrorCause(reportError)
|
|
55
|
+
.tapErrorCause(reportError),
|
|
56
|
+
// we still need to flatten the Exit.
|
|
57
|
+
Effect.flatMap((_) => _));
|
|
56
58
|
}
|
|
57
59
|
return yield* subscribe({
|
|
58
60
|
processMessage: (x) => processMessage(x.body).pipe(Effect.uninterruptible),
|
|
@@ -92,4 +94,4 @@ export function makeServiceBusQueue(queueName, queueDrainName, schema, drainSche
|
|
|
92
94
|
export function makeServiceBusLayers(url, queueName, queueDrainName) {
|
|
93
95
|
return Layer.merge(ServiceBusReceiverFactory.Live(queueDrainName), LiveSender(queueName)).pipe(Layer.provide(LiveServiceBusClient(url)));
|
|
94
96
|
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2JxdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9RdWV1ZU1ha2VyL3NicXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFDMUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlDQUFpQyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDN0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsZ0NBQWdDLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDN0csT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFeEQsTUFBTSxVQUFVLG1CQUFtQixDQU1qQyxTQUFpQixFQUNqQixjQUFzQixFQUN0QixNQUEyQixFQUMzQixXQUEwQztJQUUxQyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7SUFDL0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFD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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect-app";
|
|
2
2
|
import { ContextMap } from "./service.js";
|
|
3
|
-
declare const ContextMapContainer_base: Context.ReferenceClass<ContextMapContainer, "ContextMapContainer",
|
|
3
|
+
declare const ContextMapContainer_base: Context.ReferenceClass<ContextMapContainer, "ContextMapContainer", "root" | ContextMap>;
|
|
4
4
|
export declare class ContextMapContainer extends ContextMapContainer_base {
|
|
5
5
|
static readonly layer: Layer.Layer<ContextMapContainer, never, never>;
|
|
6
6
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect } from "effect-app";
|
|
2
2
|
import { HttpServerRequest, HttpServerResponse } from "effect-app/http";
|
|
3
3
|
import { Locale } from "../../RequestContext.js";
|
|
4
|
-
export declare const RequestContextMiddleware: (defaultLocale?: Locale) => <E, R>(app: import("@effect/platform/HttpApp").Default<E, R>) => Effect.Effect<HttpServerResponse.HttpServerResponse, E, HttpServerRequest.HttpServerRequest | Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, import("../../RequestContext.js").LocaleRef | import("../../Store/
|
|
4
|
+
export declare const RequestContextMiddleware: (defaultLocale?: Locale) => <E, R>(app: import("@effect/platform/HttpApp").Default<E, R>) => Effect.Effect<HttpServerResponse.HttpServerResponse, E, HttpServerRequest.HttpServerRequest | Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, import("../../RequestContext.js").LocaleRef | import("../../Store/ContextMapContainer.js").ContextMapContainer | import("../../Store/Memory.js").storeId>>;
|
|
5
5
|
//# sourceMappingURL=RequestContextMiddleware.d.ts.map
|
|
@@ -9,6 +9,6 @@ export declare const getRC: Effect.Effect<{
|
|
|
9
9
|
namespace: NonEmptyString255;
|
|
10
10
|
}, never, never>;
|
|
11
11
|
export declare const setupRequestContextFromCurrent: (name?: string, options?: Tracer.SpanOptions) => <R, E, A>(self: Effect<A, E, R>) => Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, ContextMapContainer>>;
|
|
12
|
-
export declare function setupRequestContext<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext): Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, LocaleRef |
|
|
13
|
-
export declare function setupRequestContextWithCustomSpan<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext, name: string, options?: Tracer.SpanOptions): Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, LocaleRef |
|
|
12
|
+
export declare function setupRequestContext<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext): Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, LocaleRef | ContextMapContainer | storeId>>;
|
|
13
|
+
export declare function setupRequestContextWithCustomSpan<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext, name: string, options?: Tracer.SpanOptions): Effect.Effect<A, E, Exclude<Exclude<R, Tracer.ParentSpan>, LocaleRef | ContextMapContainer | storeId>>;
|
|
14
14
|
//# sourceMappingURL=setupRequest.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.54.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
"proper-lockfile": "^4.1.2",
|
|
14
14
|
"pure-rand": "7.0.1",
|
|
15
15
|
"query-string": "^9.1.1",
|
|
16
|
-
"effect-app": "2.
|
|
16
|
+
"effect-app": "2.40.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@azure/cosmos": "^4.3.0",
|
|
20
20
|
"@azure/service-bus": "^7.9.5",
|
|
21
|
-
"@sentry/node": "^9.
|
|
21
|
+
"@sentry/node": "^9.14.0",
|
|
22
22
|
"@types/express": "^5.0.1",
|
|
23
23
|
"@types/node": "~22.14.1",
|
|
24
24
|
"@types/proper-lockfile": "^4.1.4",
|
|
@@ -27,27 +27,27 @@
|
|
|
27
27
|
"express": "^5.1.0",
|
|
28
28
|
"jwks-rsa": "2.1.4",
|
|
29
29
|
"jwt-decode": "^4.0.0",
|
|
30
|
-
"mongodb": "6.
|
|
30
|
+
"mongodb": "6.16.0",
|
|
31
31
|
"redis": "^3.1.2",
|
|
32
32
|
"redlock": "^4.2.0",
|
|
33
33
|
"strip-ansi": "^7.1.0",
|
|
34
34
|
"typescript": "^5.8.3",
|
|
35
|
-
"vitest": "^3.1.
|
|
35
|
+
"vitest": "^3.1.2"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"@azure/cosmos": "^4.3.0",
|
|
39
39
|
"@azure/service-bus": "^7.9.5",
|
|
40
|
-
"@effect/experimental": "^0.44.
|
|
41
|
-
"@effect/platform": "^0.80.
|
|
40
|
+
"@effect/experimental": "^0.44.14",
|
|
41
|
+
"@effect/platform": "^0.80.14",
|
|
42
42
|
"@effect/rpc-http": "^0.52.4",
|
|
43
|
-
"@effect/rpc": "^0.
|
|
44
|
-
"@effect/sql": "^0.33.
|
|
45
|
-
"@effect/vitest": "^0.20.
|
|
43
|
+
"@effect/rpc": "^0.56.2",
|
|
44
|
+
"@effect/sql": "^0.33.14",
|
|
45
|
+
"@effect/vitest": "^0.20.14",
|
|
46
46
|
"@sendgrid/helpers": "^8.0.0",
|
|
47
47
|
"@sendgrid/mail": "^8.1.5",
|
|
48
48
|
"redis": "^3.1.2",
|
|
49
49
|
"redlock": "^4.2.0",
|
|
50
|
-
"effect": "^3.14.
|
|
50
|
+
"effect": "^3.14.14",
|
|
51
51
|
"express": "^5.1.0"
|
|
52
52
|
},
|
|
53
53
|
"typesVersions": {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Tracer } from "effect"
|
|
1
|
+
import { Cause, Tracer } from "effect"
|
|
2
2
|
import { Effect, Fiber, flow, S } from "effect-app"
|
|
3
3
|
import { pretty } from "effect-app/utils"
|
|
4
4
|
import { MemQueue } from "../adapters/memQueue.js"
|
|
5
5
|
import { getRequestContext, setupRequestContextWithCustomSpan } from "../api/setupRequest.js"
|
|
6
6
|
import { InfraLogger } from "../logger.js"
|
|
7
|
-
import { reportNonInterruptedFailure } from "./errors.js"
|
|
7
|
+
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause } from "./errors.js"
|
|
8
8
|
import { type QueueBase, QueueMeta } from "./service.js"
|
|
9
9
|
|
|
10
10
|
export function makeMemQueue<
|
|
@@ -56,6 +56,7 @@ export function makeMemQueue<
|
|
|
56
56
|
) =>
|
|
57
57
|
Effect.gen(function*() {
|
|
58
58
|
const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName })
|
|
59
|
+
const reportError = reportNonInterruptedFailureCause({ name: "MemQueue.drain." + queueDrainName })
|
|
59
60
|
const processMessage = (msg: string) =>
|
|
60
61
|
// we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
61
62
|
Effect
|
|
@@ -96,11 +97,25 @@ export function makeMemQueue<
|
|
|
96
97
|
return yield* qDrain
|
|
97
98
|
.take
|
|
98
99
|
.pipe(
|
|
99
|
-
Effect
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
Effect
|
|
101
|
+
.flatMap((x) =>
|
|
102
|
+
processMessage(x).pipe(
|
|
103
|
+
Effect.uninterruptible,
|
|
104
|
+
Effect.fork,
|
|
105
|
+
Effect.flatMap(Fiber.join),
|
|
106
|
+
// normally a failed item would be returned to the queue and retried up to X times.
|
|
107
|
+
Effect.flatMap((_) =>
|
|
108
|
+
_._tag === "Failure" && !Cause.isInterruptedOnly(_.cause)
|
|
109
|
+
? qDrain.offer(x).pipe(
|
|
110
|
+
// TODO: retry count tracking and max retries.
|
|
111
|
+
Effect.delay("5 seconds"),
|
|
112
|
+
Effect.tapErrorCause(reportError),
|
|
113
|
+
Effect.forkDaemon
|
|
114
|
+
)
|
|
115
|
+
: Effect.void
|
|
116
|
+
)
|
|
117
|
+
)
|
|
118
|
+
),
|
|
104
119
|
silenceAndReportError,
|
|
105
120
|
Effect.withSpan(`queue.drain: ${queueDrainName}`, {
|
|
106
121
|
attributes: {
|
|
@@ -89,7 +89,9 @@ export function makeServiceBusQueue<
|
|
|
89
89
|
}),
|
|
90
90
|
Effect
|
|
91
91
|
// we reportError here, so that we report the error only, and keep flowing
|
|
92
|
-
.tapErrorCause(reportError)
|
|
92
|
+
.tapErrorCause(reportError),
|
|
93
|
+
// we still need to flatten the Exit.
|
|
94
|
+
Effect.flatMap((_) => _)
|
|
93
95
|
)
|
|
94
96
|
}
|
|
95
97
|
|