@effect-app/infra 0.25.7 → 0.25.8
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 +6 -0
- package/_cjs/services/QueueMaker/errors.cjs +24 -12
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +10 -25
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +19 -20
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_src/services/QueueMaker/errors.ts +22 -11
- package/_src/services/QueueMaker/memQueue.ts +18 -31
- package/_src/services/QueueMaker/sbqueue.ts +27 -32
- package/dist/services/QueueMaker/errors.d.ts +6 -4
- package/dist/services/QueueMaker/errors.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +19 -9
- package/dist/services/QueueMaker/memQueue.d.ts +1 -3
- package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/memQueue.js +9 -23
- package/dist/services/QueueMaker/sbqueue.d.ts +1 -2
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +15 -18
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -5,11 +5,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.MessageException = exports.FatalQueueException = void 0;
|
|
7
7
|
exports.forkDaemonReportQueue = forkDaemonReportQueue;
|
|
8
|
-
exports.
|
|
9
|
-
exports.
|
|
10
|
-
|
|
8
|
+
exports.reportFatalQueueError = void 0;
|
|
9
|
+
exports.reportNonInterruptedFailure = reportNonInterruptedFailure;
|
|
10
|
+
exports.reportNonInterruptedFailureCause = reportNonInterruptedFailureCause;
|
|
11
|
+
exports.reportQueueError = void 0;
|
|
12
|
+
var tsplus_module_1 = _interopRequireWildcard(require("@effect-app/core/Option"));
|
|
11
13
|
var tsplus_module_2 = _interopRequireWildcard(require("@effect-app/infra/RequestContext"));
|
|
12
|
-
var tsplus_module_3 = _interopRequireWildcard(require("@effect
|
|
14
|
+
var tsplus_module_3 = _interopRequireWildcard(require("@effect/data/Context"));
|
|
15
|
+
var tsplus_module_4 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
16
|
+
var tsplus_module_5 = _interopRequireWildcard(require("@effect/io/Exit"));
|
|
17
|
+
var tsplus_module_6 = _interopRequireWildcard(require("@effect/io/Cause"));
|
|
13
18
|
var _errorReporter = require("@effect-app/infra/errorReporter");
|
|
14
19
|
var _errors = require("@effect-app/infra/errors");
|
|
15
20
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -27,10 +32,10 @@ class FatalQueueException extends _errors.CauseException {
|
|
|
27
32
|
}
|
|
28
33
|
exports.FatalQueueException = FatalQueueException;
|
|
29
34
|
const reportQueueError_ = (0, _errorReporter.reportError)(cause => new MessageException(cause));
|
|
30
|
-
const reportQueueError = (cause, context) =>
|
|
31
|
-
requestContext,
|
|
35
|
+
const reportQueueError = (cause, context) => tsplus_module_4.flatMap(tsplus_module_4.contextWith(_ => tsplus_module_3.getOption(_, tsplus_module_2.tag)), requestContext => reportQueueError_(cause, {
|
|
36
|
+
requestContext: tsplus_module_1.getOrUndefined(requestContext),
|
|
32
37
|
...context
|
|
33
|
-
}))
|
|
38
|
+
}));
|
|
34
39
|
/**
|
|
35
40
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
36
41
|
* new fiber is attached to the global scope, when the fiber executing the
|
|
@@ -42,13 +47,20 @@ const reportQueueError = (cause, context) => tsplus_module_1.serviceWithEffect(t
|
|
|
42
47
|
*/
|
|
43
48
|
exports.reportQueueError = reportQueueError;
|
|
44
49
|
function forkDaemonReportQueue(self) {
|
|
45
|
-
return
|
|
50
|
+
return tsplus_module_4.daemonChildren(tsplus_module_4.fork(tsplus_module_4.tapErrorCause(self, reportNonInterruptedFailureCause({}))));
|
|
46
51
|
}
|
|
47
52
|
const reportFatalQueueError = (0, _errorReporter.reportError)(cause => new FatalQueueException(cause));
|
|
48
53
|
exports.reportFatalQueueError = reportFatalQueueError;
|
|
49
|
-
function
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
function reportNonInterruptedFailure(context) {
|
|
55
|
+
const report = reportNonInterruptedFailureCause(context);
|
|
56
|
+
return inp => tsplus_module_4.flatMap(tsplus_module_4.exit(inp), result => tsplus_module_5.match(result, cause => tsplus_module_4.map(report(cause), () => result), () => tsplus_module_4.sync(() => result)));
|
|
57
|
+
}
|
|
58
|
+
function reportNonInterruptedFailureCause(context) {
|
|
59
|
+
return cause => {
|
|
60
|
+
if (tsplus_module_6.isInterrupted(cause)) {
|
|
61
|
+
return tsplus_module_4.failCause(cause);
|
|
62
|
+
}
|
|
63
|
+
return reportQueueError(cause, context);
|
|
64
|
+
};
|
|
53
65
|
}
|
|
54
66
|
//# sourceMappingURL=errors.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","mappings":"
|
|
1
|
+
{"version":3,"file":"errors.cjs","mappings":";;;;;;;;;;;;;;;;;AAAA;AACA;AAAyD;AAAA;AAGnD,MAAOA,gBAAoB,SAAQC,sBAAiB;EACxDC,YAAYC,KAAe;IACzB,KAAK,CAACA,KAAK,EAAE,SAAS,CAAC;EACzB;;AACD;AAEK,MAAOC,mBAAuB,SAAQH,sBAAiB;EAC3DC,YAAYC,KAAe;IACzB,KAAK,CAACA,KAAK,EAAE,SAAS,CAAC;EACzB;;AACD;AAED,MAAME,iBAAiB,GAAG,8BAAW,EAACF,KAAK,IAAI,IAAIH,gBAAgB,CAACG,KAAK,CAAC,CAAC;AAEpE,MAAMG,gBAAgB,GAAG,CAAIH,KAAe,EAAEI,OAA6C,KAChGC,oDAAoBC,CAAiB,IAAKC,0BAAkBD,CAAC,sBAAqB,CAAC,EACxEE,cAAc,IAAIN,iBAAiB,CAACF,KAAK,EAAE;EAAEQ,cAAc,iCAAEA,cAAc,CAAM;EAAE,GAAGJ;AAAO,CAAE,CAAC,CAAC;AAE9G;;;;;;;;;AAAA;AASM,SAAUK,qBAAqB,CAAUC,IAAqB;EAClE,2DAAOL,kCAAI,EAAeM,gCAAgC,CAAC,EAAE,CAAC,CAAC;AACjE;AAEO,MAAMC,qBAAqB,GAAG,8BAAW,EAC9CZ,KAAK,IAAI,IAAIC,mBAAmB,CAACD,KAAK,CAAC,CACxC;AAAA;AAEK,SAAUa,2BAA2B,CAACT,OAAiC;EAC3E,MAAMU,MAAM,GAAGH,gCAAgC,CAACP,OAAO,CAAC;EACxD,OAAiBW,GAAoB,IACnCV,gDAAG,GACQW,MAAM,IACbC,4BAAM,EACJjB,KAAK,IAAIK,0BAAM,CAACL,KAAK,CAAC,EAAK,MAAMgB,MAAM,CAAC,EACxC,MAAMX,2BAAOW,MAAM,CAAC,CACrB,CACF;AACP;AAEM,SAAUL,gCAAgC,CAACP,OAAiC;EAChF,OAAWJ,KAAe,IAAgC;IACxD,IAAIkB,mCAAK,CAAgB,EAAE;MACzB,iCAAQlB,KAAsB;;IAEhC,OAAOG,gBAAgB,CAACH,KAAK,EAAEI,OAAO,CAAC;EACzC,CAAC;AACH","names":["MessageException","CauseException","constructor","cause","FatalQueueException","reportQueueError_","reportQueueError","context","tsplus_module_4","_","tsplus_module_3","requestContext","forkDaemonReportQueue","self","reportNonInterruptedFailureCause","reportFatalQueueError","reportNonInterruptedFailure","report","inp","result","tsplus_module_5","tsplus_module_6"],"sourceRoot":"","sources":["../../../_src/services/QueueMaker/errors.ts"],"sourcesContent":[null]}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.makeMemQueue = makeMemQueue;
|
|
7
|
-
exports.silence = silence;
|
|
8
7
|
var tsplus_module_1 = _interopRequireWildcard(require("@effect/io/Effect"));
|
|
9
8
|
var tsplus_module_2 = _interopRequireWildcard(require("@effect-app/infra/RequestContext"));
|
|
10
9
|
var tsplus_module_3 = _interopRequireWildcard(require("@effect-app/core/_ext/Iterable"));
|
|
@@ -13,10 +12,6 @@ var tsplus_module_5 = _interopRequireWildcard(require("@effect-app/prelude/utils
|
|
|
13
12
|
var tsplus_module_6 = _interopRequireWildcard(require("@effect-app/prelude/_ext/misc"));
|
|
14
13
|
var tsplus_module_7 = _interopRequireWildcard(require("@effect-app/prelude/schema"));
|
|
15
14
|
var tsplus_module_8 = _interopRequireWildcard(require("@effect/io/Fiber"));
|
|
16
|
-
var tsplus_module_9 = _interopRequireWildcard(require("@effect-app/infra/api/setupRequest"));
|
|
17
|
-
var tsplus_module_10 = _interopRequireWildcard(require("@effect/io/Cause"));
|
|
18
|
-
var tsplus_module_11 = _interopRequireWildcard(require("@effect-app/core/Effect"));
|
|
19
|
-
var tsplus_module_12 = _interopRequireWildcard(require("@effect/io/Exit"));
|
|
20
15
|
var _memQueue = require("@effect-app/infra-adapters/memQueue");
|
|
21
16
|
var _Memory = require("../Store/Memory.cjs");
|
|
22
17
|
var _errors2 = require("./errors.cjs");
|
|
@@ -29,7 +24,7 @@ function makeMemQueue(queueName, queueDrainName, encoder, makeHandleEvent, provi
|
|
|
29
24
|
return tsplus_module_1.gen(function* ($) {
|
|
30
25
|
const mem = yield* $(tsplus_module_1.service(_memQueue.MemQueue));
|
|
31
26
|
const q = yield* $(mem.getOrCreateQueue(queueName));
|
|
32
|
-
const
|
|
27
|
+
const qDrain = yield* $(mem.getOrCreateQueue(queueDrainName));
|
|
33
28
|
return {
|
|
34
29
|
publish: (...messages) => tsplus_module_1.gen(function* ($) {
|
|
35
30
|
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_2.tag));
|
|
@@ -44,6 +39,9 @@ function makeMemQueue(queueName, queueDrainName, encoder, makeHandleEvent, provi
|
|
|
44
39
|
}),
|
|
45
40
|
drain: tsplus_module_1.gen(function* ($) {
|
|
46
41
|
const handleEvent = yield* $(makeHandleEvent);
|
|
42
|
+
const silenceAndReportError = (0, _errors2.reportNonInterruptedFailure)({
|
|
43
|
+
name: "MemQueue.drain." + queueDrainName
|
|
44
|
+
});
|
|
47
45
|
const processMessage = msg =>
|
|
48
46
|
// we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
49
47
|
tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.flatMap(tsplus_module_1.sync(() => JSON.parse(msg)), parseDrain)), ({
|
|
@@ -53,29 +51,16 @@ function makeMemQueue(queueName, queueDrainName, encoder, makeHandleEvent, provi
|
|
|
53
51
|
id: body.id,
|
|
54
52
|
locale: "en",
|
|
55
53
|
name: tsplus_module_7.ReasonableString(body._tag)
|
|
56
|
-
}))(tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_6.logAnnotates({
|
|
54
|
+
}))(silenceAndReportError(tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_6.logAnnotates({
|
|
57
55
|
body: tsplus_module_5.RecordPretty(tsplus_module_5.object$(body)),
|
|
58
56
|
meta: tsplus_module_5.RecordPretty(tsplus_module_5.object$(meta))
|
|
59
|
-
})(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), () => _Memory.restoreFromRequestContext),
|
|
60
|
-
return yield* $(tsplus_module_1.forkScoped(tsplus_module_1.forever(
|
|
57
|
+
})(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), () => _Memory.restoreFromRequestContext), handleEvent(body)))));
|
|
58
|
+
return yield* $(tsplus_module_1.forkScoped(tsplus_module_1.forever(silenceAndReportError(tsplus_module_1.flatMap(qDrain.take(), x => tsplus_module_1.flatMap(tsplus_module_1.fork(tsplus_module_1.uninterruptible(processMessage(x))), _ => tsplus_module_8.join(_)))
|
|
59
|
+
// TODO: normally a failed item would be returned to the queue and retried up to X times.
|
|
60
|
+
// .flatMap(_ => _._tag === "Failure" && !isInterrupted ? qDrain.offer(x) : Effect.unit) // TODO: retry count tracking and max retries.
|
|
61
|
+
))));
|
|
61
62
|
})
|
|
62
63
|
};
|
|
63
64
|
});
|
|
64
65
|
}
|
|
65
|
-
// We want the Queue to continue processing even on errors per messages
|
|
66
|
-
// must make sure that the errors are processed/handled beforehand.
|
|
67
|
-
function silence(inp) {
|
|
68
|
-
return tsplus_module_1.flatMap(tsplus_module_1.exit(inp), result => tsplus_module_1.gen(function* ($) {
|
|
69
|
-
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_2.tag));
|
|
70
|
-
return yield* $(tsplus_module_12.match(result, cause => {
|
|
71
|
-
if (tsplus_module_10.isInterrupted(cause)) {
|
|
72
|
-
return tsplus_module_1.failCause(cause);
|
|
73
|
-
}
|
|
74
|
-
(0, _errors2.reportQueueError)(cause, {
|
|
75
|
-
requestContext
|
|
76
|
-
});
|
|
77
|
-
return tsplus_module_11.unit;
|
|
78
|
-
}, () => tsplus_module_11.unit));
|
|
79
|
-
}));
|
|
80
|
-
}
|
|
81
66
|
//# sourceMappingURL=memQueue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memQueue.cjs","mappings":"
|
|
1
|
+
{"version":3,"file":"memQueue.cjs","mappings":";;;;;;;;;;;;;;AAAA;AAGA;AACA;AAAyD;AAAA;AAGzD;;;AAGM,SAAUA,YAAY,CAQ1BC,SAAiB,EACjBC,cAAsB,EACtBC,OAAyD,EACzDC,eAAwF,EACxFC,cAEwD,EACxDC,UAGmF;EAEnF,OAAOC,oBAAW,WAAUC,CAAC;IAC3B,MAAMC,GAAG,GAAG,OAAOD,CAAC,yBAACE,kBAAQ,EAAQ;IACrC,MAAMC,CAAC,GAAG,OAAOH,CAAC,CAACC,GAAG,CAACG,gBAAgB,CAACX,SAAS,CAAC,CAAC;IACnD,MAAMY,MAAM,GAAG,OAAOL,CAAC,CAACC,GAAG,CAACG,gBAAgB,CAACV,cAAc,CAAC,CAAC;IAE7D,OAAO;MACLY,OAAO,EAAE,CAAC,GAAGC,QAAQ,KACnBR,oBAAW,WAAUC,CAAC;QACpB,MAAMQ,cAAc,GAAG,OAAOR,CAAC,8CAA2B;QAC1D,OAAO,OAAOA,CAAC,uCACbS,oCAAQ,EAAeC,CAAC,IAAGX;QACzB;QACAA,mDACEY,IAAI,CAACC,SAAS,CACZjB,OAAO,CAAC;UAAEkB,IAAI,EAAEH,CAAC;UAAEI,IAAI,EAAEN;QAAc,CAAE,CAAC,CAC3C;QAED;QAAA,EACSO,CAAC,IAAIZ,CAAC,CAACa,KAAK,CAACD,CAAC,CAAC,CAAC,CAClB,CACV,EAEF;MACH,CAAC,CAAC;MACJE,KAAK,EAAElB,oBAAW,WAAUC,CAAC;QAC3B,MAAMkB,WAAW,GAAG,OAAOlB,CAAC,CAACJ,eAAe,CAAC;QAC7C,MAAMuB,qBAAqB,GAAG,wCAA2B,EAAC;UAAEC,IAAI,EAAE,iBAAiB,GAAG1B;QAAc,CAAE,CAAC;QACvG,MAAM2B,cAAc,GAAIC,GAAW;QACjC;QACAvB,iGAAOY,IAAI,CAACY,KAAK,CAACD,GAAG,CAAC,CAAC,EACZxB,UAAU,CAAC,GAEX,CAAC;UAAEe,IAAI;UAAEC;QAAI,CAAE,KAQlBjB,cAAc,CACZ2B,8BAAc,CAACC,OAAO,CAACX,IAAI,EAAE;UAC3BY,EAAE,EAAEb,IAAI,CAACa,EAAE;UACXC,MAAM,EAAE,IAAa;UACrBP,IAAI,EAAEQ,gCAAgB,CAACf,IAAI,CAACgB,IAAI;SACjC,CAAC,CACH,CARIV,qBAAqB,CAL9BpB,6CAES+B,6BAAoB;UAAEjB,IAAI,uDAAEA,IAAI,EAAU;UAAEC,IAAI,uDAAEA,IAAI;QAAU,CAAE,CAAC,CAF5Ef,yBACY,OAAOL,cAAc,+BAA+B,CAAC,GAE1D,MAAMqC,iCAAyB,CAAC,EAC3Bb,WAAW,CAACL,IAAI,CAAC,CAAC,EAU3B,CACJ;QACL,OAAO,OAAOb,CAAC,oDAKJmB,qBAAqB,CAJ9BpB,8BAAM,CAACiC,IAAI,EAAE,EACFC,CAAC,IAAIlC,2FAAc,CAACkC,CAAC,CAAC,IAA8BlB,CAAC,IAAGmB,qBAACnB,CAAC,CAAK,CAAC;QACzE;QACA;QAAA,IAIH;MACH,CAAC;KAC+B;EACpC,CAAC,CAAC;AACJ","names":["makeMemQueue","queueName","queueDrainName","encoder","makeHandleEvent","provideContext","parseDrain","tsplus_module_1","$","mem","MemQueue","q","getOrCreateQueue","qDrain","publish","messages","requestContext","tsplus_module_3","m","JSON","stringify","body","meta","_","offer","drain","handleEvent","silenceAndReportError","name","processMessage","msg","parse","RequestContext","inherit","id","locale","tsplus_module_7","_tag","tsplus_module_6","restoreFromRequestContext","take","x","tsplus_module_8"],"sourceRoot":"","sources":["../../../_src/services/QueueMaker/memQueue.ts"],"sourcesContent":[null]}
|
|
@@ -10,10 +10,9 @@ var tsplus_module_2 = _interopRequireWildcard(require("@effect-app/core/Tag"));
|
|
|
10
10
|
var tsplus_module_3 = _interopRequireWildcard(require("@effect-app/prelude/utils"));
|
|
11
11
|
var tsplus_module_4 = _interopRequireWildcard(require("@effect-app/prelude/_ext/misc"));
|
|
12
12
|
var tsplus_module_5 = _interopRequireWildcard(require("@effect-app/prelude/schema"));
|
|
13
|
-
var tsplus_module_6 = _interopRequireWildcard(require("@effect-app/infra/
|
|
14
|
-
var tsplus_module_7 = _interopRequireWildcard(require("@effect-app/infra/
|
|
15
|
-
var tsplus_module_8 = _interopRequireWildcard(require("@effect
|
|
16
|
-
var tsplus_module_9 = _interopRequireWildcard(require("@effect/io/Layer"));
|
|
13
|
+
var tsplus_module_6 = _interopRequireWildcard(require("@effect-app/infra/RequestContext"));
|
|
14
|
+
var tsplus_module_7 = _interopRequireWildcard(require("@effect-app/infra/services/QueueMaker/errors"));
|
|
15
|
+
var tsplus_module_8 = _interopRequireWildcard(require("@effect/io/Layer"));
|
|
17
16
|
var _ServiceBus = require("@effect-app/infra-adapters/ServiceBus");
|
|
18
17
|
var _errorReporter = require("@effect-app/infra/errorReporter");
|
|
19
18
|
var _Memory = require("../Store/Memory.cjs");
|
|
@@ -28,31 +27,39 @@ function makeServiceBusQueue(_queueName, queueDrainName, encoder, makeHandleEven
|
|
|
28
27
|
const s = yield* $(tsplus_module_1.service(_ServiceBus.Sender));
|
|
29
28
|
const receiver = yield* $(tsplus_module_1.service(_ServiceBus.Receiver));
|
|
30
29
|
const receiverLayer = tsplus_module_2.makeLayer(_ServiceBus.Receiver, receiver);
|
|
30
|
+
const silenceAndReportError = (0, _errors2.reportNonInterruptedFailure)({
|
|
31
|
+
name: "ServiceBusQueue.drain." + queueDrainName
|
|
32
|
+
});
|
|
33
|
+
const reportError = (0, _errors2.reportNonInterruptedFailureCause)({
|
|
34
|
+
name: "ServiceBusQueue.drain." + queueDrainName
|
|
35
|
+
});
|
|
31
36
|
return {
|
|
32
37
|
drain: tsplus_module_1.gen(function* ($) {
|
|
33
38
|
const handleEvent = yield* $(makeHandleEvent);
|
|
34
39
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
35
40
|
function processMessage(messageBody) {
|
|
36
|
-
return tsplus_module_1.
|
|
41
|
+
return tsplus_module_1.tapErrorCause(tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.flatMap(tsplus_module_1.sync(() => JSON.parse(messageBody)), x => parseDrain(x))), ({
|
|
37
42
|
body,
|
|
38
43
|
meta
|
|
39
|
-
}) => provideContext(
|
|
44
|
+
}) => provideContext(tsplus_module_6.RequestContext.inherit(meta, {
|
|
40
45
|
id: body.id,
|
|
41
46
|
locale: "en",
|
|
42
47
|
name: tsplus_module_5.ReasonableString(body._tag)
|
|
43
|
-
}))(tsplus_module_1.
|
|
48
|
+
}))(silenceAndReportError(tsplus_module_1.orDie(tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_4.logAnnotates({
|
|
44
49
|
body: tsplus_module_3.RecordPretty(tsplus_module_3.object$(body)),
|
|
45
50
|
meta: tsplus_module_3.RecordPretty(tsplus_module_3.object$(meta))
|
|
46
|
-
})(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), () => _Memory.restoreFromRequestContext), handleEvent(body))
|
|
51
|
+
})(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), () => _Memory.restoreFromRequestContext), handleEvent(body))))))
|
|
52
|
+
// we reportError here, so that we report the error only, and keep flowing
|
|
53
|
+
, reportError);
|
|
47
54
|
}
|
|
48
55
|
return yield* $(tsplus_module_1.provideSomeLayer((0, _ServiceBus.subscribe)({
|
|
49
|
-
processMessage: x => tsplus_module_1.uninterruptible(processMessage(x.body)),
|
|
56
|
+
processMessage: x => tsplus_module_1.flatMap(tsplus_module_1.uninterruptible(processMessage(x.body)), _ => tsplus_module_1.done(_)),
|
|
50
57
|
processError: err => tsplus_module_1.sync(() => (0, _errorReporter.captureException)(err.error))
|
|
51
58
|
}), receiverLayer));
|
|
52
59
|
}),
|
|
53
60
|
publish: (...messages) => tsplus_module_1.gen(function* ($) {
|
|
54
|
-
const requestContext = yield* $(tsplus_module_1.service(
|
|
55
|
-
return yield* $(
|
|
61
|
+
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_6.tag));
|
|
62
|
+
return yield* $(tsplus_module_7.forkDaemonReportQueue(tsplus_module_1.promise(() => s.sendMessages(messages.map(x => ({
|
|
56
63
|
body: JSON.stringify(encoder({
|
|
57
64
|
body: x,
|
|
58
65
|
meta: requestContext
|
|
@@ -68,14 +75,6 @@ function makeServiceBusQueue(_queueName, queueDrainName, encoder, makeHandleEven
|
|
|
68
75
|
* @tsplus static QueueMaker.Ops makeServiceBusLayers
|
|
69
76
|
*/
|
|
70
77
|
function makeServiceBusLayers(url, queueName, queueDrainName) {
|
|
71
|
-
return
|
|
72
|
-
}
|
|
73
|
-
function report(cause) {
|
|
74
|
-
return tsplus_module_1.gen(function* ($) {
|
|
75
|
-
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_7.tag));
|
|
76
|
-
return (0, _errors2.reportQueueError)(cause, {
|
|
77
|
-
requestContext
|
|
78
|
-
});
|
|
79
|
-
});
|
|
78
|
+
return tsplus_module_8.provide(tsplus_module_8.merge((0, _ServiceBus.LiveSender)(queueName))((0, _ServiceBus.LiveReceiver)(queueDrainName)))((0, _ServiceBus.LiveServiceBusClient)(url));
|
|
80
79
|
}
|
|
81
80
|
//# sourceMappingURL=sbqueue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sbqueue.cjs","mappings":"
|
|
1
|
+
{"version":3,"file":"sbqueue.cjs","mappings":"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","names":["makeServiceBusQueue","_queueName","queueDrainName","encoder","makeHandleEvent","provideContext","parseDrain","tsplus_module_1","$","s","Sender","receiver","Receiver","receiverLayer","tsplus_module_2","silenceAndReportError","name","reportError","drain","handleEvent","processMessage","messageBody","JSON","parse","x","body","meta","RequestContext","inherit","id","locale","tsplus_module_5","_tag","tsplus_module_4","restoreFromRequestContext","_","processError","err","error","publish","messages","requestContext","sendMessages","map","stringify","messageId","contentType","makeServiceBusLayers","url","queueName","tsplus_module_8"],"sourceRoot":"","sources":["../../../_src/services/QueueMaker/sbqueue.ts"],"sourcesContent":[null]}
|
|
@@ -17,9 +17,8 @@ export class FatalQueueException<E> extends CauseException<E> {
|
|
|
17
17
|
const reportQueueError_ = reportError(cause => new MessageException(cause))
|
|
18
18
|
|
|
19
19
|
export const reportQueueError = <E>(cause: Cause<E>, context?: Record<string, unknown> | undefined) =>
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
)
|
|
20
|
+
Effect.contextWith((_: Context<never>) => Context.getOption(_, RequestContext.Tag))
|
|
21
|
+
.flatMap(requestContext => reportQueueError_(cause, { requestContext: requestContext.value, ...context }))
|
|
23
22
|
|
|
24
23
|
/**
|
|
25
24
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
@@ -31,18 +30,30 @@ export const reportQueueError = <E>(cause: Cause<E>, context?: Record<string, un
|
|
|
31
30
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
32
31
|
*/
|
|
33
32
|
export function forkDaemonReportQueue<R, E, A>(self: Effect<R, E, A>) {
|
|
34
|
-
return self.tapErrorCause(
|
|
33
|
+
return self.tapErrorCause(reportNonInterruptedFailureCause({})).fork.daemonChildren
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
export const reportFatalQueueError = reportError(
|
|
38
37
|
cause => new FatalQueueException(cause)
|
|
39
38
|
)
|
|
40
39
|
|
|
41
|
-
export function
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
export function reportNonInterruptedFailure(context?: Record<string, unknown>) {
|
|
41
|
+
const report = reportNonInterruptedFailureCause(context)
|
|
42
|
+
return <R, E, A>(inp: Effect<R, E, A>): Effect<R, never, Exit<E, A>> =>
|
|
43
|
+
inp.exit
|
|
44
|
+
.flatMap(result =>
|
|
45
|
+
result.match(
|
|
46
|
+
cause => report(cause).map(() => result),
|
|
47
|
+
() => Effect(result)
|
|
48
|
+
)
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export function reportNonInterruptedFailureCause(context?: Record<string, unknown>) {
|
|
53
|
+
return <E>(cause: Cause<E>): Effect<never, never, void> => {
|
|
54
|
+
if (cause.isInterrupted()) {
|
|
55
|
+
return (cause as Cause<never>).failCause
|
|
56
|
+
}
|
|
57
|
+
return reportQueueError(cause, context)
|
|
58
|
+
}
|
|
48
59
|
}
|
|
@@ -2,20 +2,27 @@ import { MemQueue } from "@effect-app/infra-adapters/memQueue"
|
|
|
2
2
|
import { RequestContext } from "@effect-app/infra/RequestContext"
|
|
3
3
|
import type { CustomSchemaException } from "@effect-app/prelude/schema"
|
|
4
4
|
import { restoreFromRequestContext } from "../Store/Memory.js"
|
|
5
|
-
import {
|
|
5
|
+
import { reportNonInterruptedFailure } from "./errors.js"
|
|
6
6
|
import type { QueueBase } from "./service.js"
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* @tsplus static QueueMaker.Ops makeMem
|
|
10
10
|
*/
|
|
11
|
-
export function makeMemQueue<
|
|
11
|
+
export function makeMemQueue<
|
|
12
|
+
DrainR,
|
|
13
|
+
Evt,
|
|
14
|
+
DrainEvt extends { id: StringId; _tag: string },
|
|
15
|
+
RContext,
|
|
16
|
+
EvtE,
|
|
17
|
+
DrainE
|
|
18
|
+
>(
|
|
12
19
|
queueName: string,
|
|
13
20
|
queueDrainName: string,
|
|
14
21
|
encoder: (e: { body: Evt; meta: RequestContext }) => EvtE,
|
|
15
22
|
makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>,
|
|
16
23
|
provideContext: (context: RequestContext) => <R, E, A>(
|
|
17
24
|
eff: Effect<RContext | R, E, A>
|
|
18
|
-
) => Effect<Exclude<R, RContext>, E, A>,
|
|
25
|
+
) => Effect<Exclude<R, RContext | RequestContext>, E, A>,
|
|
19
26
|
parseDrain: (
|
|
20
27
|
a: unknown,
|
|
21
28
|
env?: Parser.ParserEnv | undefined
|
|
@@ -24,7 +31,7 @@ export function makeMemQueue<DrainR, Evt, DrainEvt extends { id: StringId; _tag:
|
|
|
24
31
|
return Effect.gen(function*($) {
|
|
25
32
|
const mem = yield* $(MemQueue.access)
|
|
26
33
|
const q = yield* $(mem.getOrCreateQueue(queueName))
|
|
27
|
-
const
|
|
34
|
+
const qDrain = yield* $(mem.getOrCreateQueue(queueDrainName))
|
|
28
35
|
|
|
29
36
|
return {
|
|
30
37
|
publish: (...messages) =>
|
|
@@ -47,6 +54,7 @@ export function makeMemQueue<DrainR, Evt, DrainEvt extends { id: StringId; _tag:
|
|
|
47
54
|
}),
|
|
48
55
|
drain: Effect.gen(function*($) {
|
|
49
56
|
const handleEvent = yield* $(makeHandleEvent)
|
|
57
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName })
|
|
50
58
|
const processMessage = (msg: string) =>
|
|
51
59
|
// we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
52
60
|
Effect(JSON.parse(msg))
|
|
@@ -57,7 +65,8 @@ export function makeMemQueue<DrainR, Evt, DrainEvt extends { id: StringId; _tag:
|
|
|
57
65
|
.logDebug(`$$ [${queueDrainName}] Processing incoming message`)
|
|
58
66
|
.apply(Effect.logAnnotates({ body: body.$$.pretty, meta: meta.$$.pretty }))
|
|
59
67
|
.tap(() => restoreFromRequestContext)
|
|
60
|
-
.zipRight(
|
|
68
|
+
.zipRight(handleEvent(body))
|
|
69
|
+
.apply(silenceAndReportError)
|
|
61
70
|
.apply(
|
|
62
71
|
provideContext(
|
|
63
72
|
RequestContext.inherit(meta, {
|
|
@@ -69,11 +78,11 @@ export function makeMemQueue<DrainR, Evt, DrainEvt extends { id: StringId; _tag:
|
|
|
69
78
|
)
|
|
70
79
|
)
|
|
71
80
|
return yield* $(
|
|
72
|
-
|
|
81
|
+
qDrain.take()
|
|
73
82
|
.flatMap(x => processMessage(x).uninterruptible.fork.flatMap(_ => _.join))
|
|
74
|
-
.
|
|
75
|
-
//
|
|
76
|
-
.
|
|
83
|
+
// TODO: normally a failed item would be returned to the queue and retried up to X times.
|
|
84
|
+
// .flatMap(_ => _._tag === "Failure" && !isInterrupted ? qDrain.offer(x) : Effect.unit) // TODO: retry count tracking and max retries.
|
|
85
|
+
.apply(silenceAndReportError)
|
|
77
86
|
.forever
|
|
78
87
|
.forkScoped
|
|
79
88
|
)
|
|
@@ -81,25 +90,3 @@ export function makeMemQueue<DrainR, Evt, DrainEvt extends { id: StringId; _tag:
|
|
|
81
90
|
} satisfies QueueBase<DrainR, Evt>
|
|
82
91
|
})
|
|
83
92
|
}
|
|
84
|
-
|
|
85
|
-
// We want the Queue to continue processing even on errors per messages
|
|
86
|
-
// must make sure that the errors are processed/handled beforehand.
|
|
87
|
-
export function silence<R, E, A>(inp: Effect<R, E, A>) {
|
|
88
|
-
return inp.exit.flatMap(result =>
|
|
89
|
-
Effect.gen(function*($) {
|
|
90
|
-
const requestContext = yield* $(RequestContext.Tag.access)
|
|
91
|
-
return yield* $(
|
|
92
|
-
result.match(
|
|
93
|
-
cause => {
|
|
94
|
-
if (cause.isInterrupted()) {
|
|
95
|
-
return (cause as Cause<never>).failCause
|
|
96
|
-
}
|
|
97
|
-
reportQueueError(cause, { requestContext })
|
|
98
|
-
return Effect.unit
|
|
99
|
-
},
|
|
100
|
-
() => Effect.unit
|
|
101
|
-
)
|
|
102
|
-
)
|
|
103
|
-
})
|
|
104
|
-
)
|
|
105
|
-
}
|
|
@@ -11,7 +11,7 @@ import { captureException } from "@effect-app/infra/errorReporter"
|
|
|
11
11
|
import { RequestContext } from "@effect-app/infra/RequestContext"
|
|
12
12
|
import type { CustomSchemaException } from "@effect-app/prelude/schema"
|
|
13
13
|
import { restoreFromRequestContext } from "../Store/Memory.js"
|
|
14
|
-
import {
|
|
14
|
+
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause } from "./errors.js"
|
|
15
15
|
import type { QueueBase } from "./service.js"
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -31,7 +31,7 @@ export function makeServiceBusQueue<
|
|
|
31
31
|
makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>,
|
|
32
32
|
provideContext: (context: RequestContext) => <R, E, A>(
|
|
33
33
|
eff: Effect<RContext | R, E, A>
|
|
34
|
-
) => Effect<Exclude<R, RContext>, E, A>,
|
|
34
|
+
) => Effect<Exclude<R, RContext | RequestContext>, E, A>,
|
|
35
35
|
parseDrain: (
|
|
36
36
|
a: unknown,
|
|
37
37
|
env?: Parser.ParserEnv | undefined
|
|
@@ -41,6 +41,8 @@ export function makeServiceBusQueue<
|
|
|
41
41
|
const s = yield* $(Sender.access)
|
|
42
42
|
const receiver = yield* $(Receiver.access)
|
|
43
43
|
const receiverLayer = Receiver.makeLayer(receiver)
|
|
44
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "ServiceBusQueue.drain." + queueDrainName })
|
|
45
|
+
const reportError = reportNonInterruptedFailureCause({ name: "ServiceBusQueue.drain." + queueDrainName })
|
|
44
46
|
|
|
45
47
|
return {
|
|
46
48
|
drain: Effect.gen(function*($) {
|
|
@@ -48,34 +50,34 @@ export function makeServiceBusQueue<
|
|
|
48
50
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
49
51
|
function processMessage(messageBody: any) {
|
|
50
52
|
return Effect.sync(() => JSON.parse(messageBody))
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
53
|
+
.flatMap(x => parseDrain(x))
|
|
54
|
+
.orDie
|
|
55
|
+
.flatMap(({ body, meta }) =>
|
|
56
|
+
Effect
|
|
57
|
+
.logDebug(`$$ [${queueDrainName}] Processing incoming message`)
|
|
58
|
+
.apply(Effect.logAnnotates({ body: body.$$.pretty, meta: meta.$$.pretty }))
|
|
59
|
+
.tap(() => restoreFromRequestContext)
|
|
60
|
+
.zipRight(handleEvent(body))
|
|
61
|
+
.orDie
|
|
62
|
+
// we silenceAndReportError here, so that the error is reported, and moves into the Exit.
|
|
63
|
+
.apply(silenceAndReportError)
|
|
64
|
+
.apply(
|
|
65
|
+
provideContext(
|
|
66
|
+
RequestContext.inherit(meta, {
|
|
67
|
+
id: body.id,
|
|
68
|
+
locale: "en" as const,
|
|
69
|
+
name: ReasonableString(body._tag)
|
|
70
|
+
})
|
|
71
|
+
)
|
|
72
|
+
)
|
|
69
73
|
)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
.orDie
|
|
73
|
-
.asUnit
|
|
74
|
+
// we reportError here, so that we report the error only, and keep flowing
|
|
75
|
+
.tapErrorCause(reportError)
|
|
74
76
|
}
|
|
75
77
|
|
|
76
78
|
return yield* $(
|
|
77
79
|
subscribe({
|
|
78
|
-
processMessage: x => processMessage(x.body).uninterruptible,
|
|
80
|
+
processMessage: x => processMessage(x.body).uninterruptible.flatMap(_ => _.done),
|
|
79
81
|
processError: err => Effect(captureException(err.error))
|
|
80
82
|
})
|
|
81
83
|
.provideSomeLayer(receiverLayer)
|
|
@@ -111,10 +113,3 @@ export function makeServiceBusLayers(url: string, queueName: string, queueDrainN
|
|
|
111
113
|
return LiveServiceBusClient(url)
|
|
112
114
|
>> (LiveReceiver(queueDrainName) + LiveSender(queueName))
|
|
113
115
|
}
|
|
114
|
-
|
|
115
|
-
function report<E>(cause: Cause<E>) {
|
|
116
|
-
return Effect.gen(function*($) {
|
|
117
|
-
const requestContext = yield* $(RequestContext.Tag.access)
|
|
118
|
-
return reportQueueError(cause, { requestContext })
|
|
119
|
-
})
|
|
120
|
-
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { Cause } from "@effect/io/Cause";
|
|
2
|
+
import { Context } from "@effect/data/Context";
|
|
2
3
|
import { Effect } from "@effect/io/Effect";
|
|
4
|
+
import { Exit } from "@effect/io/Exit";
|
|
3
5
|
import { CauseException } from "@effect-app/infra/errors";
|
|
4
|
-
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
5
6
|
export declare class MessageException<E> extends CauseException<E> {
|
|
6
7
|
constructor(cause: Cause<E>);
|
|
7
8
|
}
|
|
8
9
|
export declare class FatalQueueException<E> extends CauseException<E> {
|
|
9
10
|
constructor(cause: Cause<E>);
|
|
10
11
|
}
|
|
11
|
-
export declare const reportQueueError: <E>(cause: import("@effect/io/Cause").Cause<E>, context?: Record<string, unknown> | undefined) => import("@effect/io/Effect").Effect<
|
|
12
|
+
export declare const reportQueueError: <E>(cause: import("@effect/io/Cause").Cause<E>, context?: Record<string, unknown> | undefined) => import("@effect/io/Effect").Effect<never, never, void>;
|
|
12
13
|
/**
|
|
13
14
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
14
15
|
* new fiber is attached to the global scope, when the fiber executing the
|
|
@@ -18,7 +19,8 @@ export declare const reportQueueError: <E>(cause: import("@effect/io/Cause").Cau
|
|
|
18
19
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
19
20
|
* @tsplus location "@effect-app/infra/services/QueueMaker/errors"
|
|
20
21
|
*/
|
|
21
|
-
export declare function forkDaemonReportQueue<R, E, A>(self: Effect<R, E, A>): import("@effect/io/Effect").Effect<
|
|
22
|
+
export declare function forkDaemonReportQueue<R, E, A>(self: Effect<R, E, A>): import("@effect/io/Effect").Effect<R, never, import("@effect/io/Fiber").RuntimeFiber<E, A>>;
|
|
22
23
|
export declare const reportFatalQueueError: (cause: import("@effect/io/Cause").Cause<unknown>, context?: Record<string, unknown> | undefined) => import("@effect/io/Effect").Effect<never, never, void>;
|
|
23
|
-
export declare function
|
|
24
|
+
export declare function reportNonInterruptedFailure(context?: Record<string, unknown>): <R, E, A>(inp: import("@effect/io/Effect").Effect<R, E, A>) => import("@effect/io/Effect").Effect<R, never, import("@effect/io/Exit").Exit<E, A>>;
|
|
25
|
+
export declare function reportNonInterruptedFailureCause(context?: Record<string, unknown>): <E>(cause: import("@effect/io/Cause").Cause<E>) => Effect<never, never, void>;
|
|
24
26
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/errors.ts"],"names":[],"mappings":";;;;AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAGzD,qBAAa,gBAAgB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;gBAC5C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;CAG5B;AAED,qBAAa,mBAAmB,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;gBAC/C,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;CAG5B;AAID,eAAO,MAAM,gBAAgB,4DAAkC,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,2DAEY,CAAA;;;;;;;;;;AAW9G,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,+FAEnE;AAED,eAAO,MAAM,qBAAqB,6JAEjC,CAAA;AAED,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,qJAU5E;AAED,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,sDACnD,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAMxD"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "@effect/
|
|
1
|
+
import * as tsplus_module_1 from "@effect-app/core/Option";
|
|
2
2
|
import * as tsplus_module_2 from "@effect-app/infra/RequestContext";
|
|
3
|
-
import * as tsplus_module_3 from "@effect
|
|
3
|
+
import * as tsplus_module_3 from "@effect/data/Context";
|
|
4
|
+
import * as tsplus_module_4 from "@effect/io/Effect";
|
|
5
|
+
import * as tsplus_module_5 from "@effect/io/Exit";
|
|
6
|
+
import * as tsplus_module_6 from "@effect/io/Cause";
|
|
4
7
|
import { reportError } from "@effect-app/infra/errorReporter";
|
|
5
8
|
import { CauseException } from "@effect-app/infra/errors";
|
|
6
9
|
import "@effect-app/infra/RequestContext";
|
|
@@ -15,7 +18,7 @@ export class FatalQueueException extends CauseException {
|
|
|
15
18
|
}
|
|
16
19
|
}
|
|
17
20
|
const reportQueueError_ = reportError(cause => new MessageException(cause));
|
|
18
|
-
export const reportQueueError = (cause, context) =>
|
|
21
|
+
export const reportQueueError = (cause, context) => tsplus_module_4.flatMap(tsplus_module_4.contextWith((_) => tsplus_module_3.getOption(_, tsplus_module_2.tag)), requestContext => reportQueueError_(cause, { requestContext: tsplus_module_1.getOrUndefined(requestContext), ...context }));
|
|
19
22
|
/**
|
|
20
23
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
21
24
|
* new fiber is attached to the global scope, when the fiber executing the
|
|
@@ -26,12 +29,19 @@ export const reportQueueError = (cause, context) => tsplus_module_1.serviceWithE
|
|
|
26
29
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
27
30
|
*/
|
|
28
31
|
export function forkDaemonReportQueue(self) {
|
|
29
|
-
return
|
|
32
|
+
return tsplus_module_4.daemonChildren(tsplus_module_4.fork(tsplus_module_4.tapErrorCause(self, reportNonInterruptedFailureCause({}))));
|
|
30
33
|
}
|
|
31
34
|
export const reportFatalQueueError = reportError(cause => new FatalQueueException(cause));
|
|
32
|
-
export function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
: tsplus_module_3.unit);
|
|
35
|
+
export function reportNonInterruptedFailure(context) {
|
|
36
|
+
const report = reportNonInterruptedFailureCause(context);
|
|
37
|
+
return (inp) => tsplus_module_4.flatMap(tsplus_module_4.exit(inp), result => tsplus_module_5.match(result, cause => tsplus_module_4.map(report(cause), () => result), () => tsplus_module_4.sync(() => result)));
|
|
36
38
|
}
|
|
37
|
-
|
|
39
|
+
export function reportNonInterruptedFailureCause(context) {
|
|
40
|
+
return (cause) => {
|
|
41
|
+
if (tsplus_module_6.isInterrupted(cause)) {
|
|
42
|
+
return tsplus_module_4.failCause(cause);
|
|
43
|
+
}
|
|
44
|
+
return reportQueueError(cause, context);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vX3NyYy9zZXJ2aWNlcy9RdWV1ZU1ha2VyL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQ3pELE9BQStCLGtDQUFrQyxDQUFBO0FBRWpFLE1BQU0sT0FBTyxnQkFBb0IsU0FBUSxjQUFpQjtJQUN4RCxZQUFZLEtBQWU7UUFDekIsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUN6QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sbUJBQXVCLFNBQVEsY0FBaUI7SUFDM0QsWUFBWSxLQUFlO1FBQ3pCLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDekIsQ0FBQztDQUNGO0FBRUQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFFM0UsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBSSxLQUFlLEVBQUUsT0FBNkMsRUFBRSxFQUFFLENBQ3BHLHdCQUFBLDRCQUFtQixDQUFDLENBQWlCLEVBQUUsRUFBRSxDQUFDLDBCQUFrQixDQUFDLHNCQUFxQixDQUFDLEVBQ3hFLGNBQWMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxpQ0FBRSxjQUFjLENBQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUU5Rzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBVSxJQUFxQjtJQUNsRSwyREFBTyw4QkFBQSxJQUFJLEVBQWUsZ0NBQWdDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBb0I7QUFDckYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFdBQVcsQ0FDOUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUN4QyxDQUFBO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE9BQWlDO0lBQzNFLE1BQU0sTUFBTSxHQUFHLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3hELE9BQU8sQ0FBVSxHQUFvQixFQUFnQyxFQUFFLENBQ3JFLDZDQUFBLEdBQUcsR0FDUSxNQUFNLENBQUMsRUFBRSxDQUNoQixzQkFBQSxNQUFNLEVBQ0osS0FBSyxDQUFDLEVBQUUsQ0FBQyxvQkFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUssR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQ3hDLEdBQUcsRUFBRSxDQUFDLDJCQUFPLE1BQU0sQ0FBQyxDQUNyQixDQUNGLENBQUE7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLE9BQWlDO0lBQ2hGLE9BQU8sQ0FBSSxLQUFlLEVBQThCLEVBQUU7UUFDeEQsSUFBSSw4QkFBQSxLQUFLLENBQWdCLEVBQUU7WUFDekIsaUNBQVEsS0FBc0IsRUFBVTtTQUN6QztRQUNELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQTtBQUNILENBQUMifQ==
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { StringId, Parser } from "@effect-app/prelude/schema";
|
|
2
2
|
import { Effect } from "@effect/io/Effect";
|
|
3
|
-
import { Cause } from "@effect/io/Cause";
|
|
4
3
|
import { MemQueue } from "@effect-app/infra-adapters/memQueue";
|
|
5
4
|
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
6
5
|
import type { CustomSchemaException } from "@effect-app/prelude/schema";
|
|
@@ -14,12 +13,11 @@ export declare function makeMemQueue<DrainR, Evt, DrainEvt extends {
|
|
|
14
13
|
}, RContext, EvtE, DrainE>(queueName: string, queueDrainName: string, encoder: (e: {
|
|
15
14
|
body: Evt;
|
|
16
15
|
meta: RequestContext;
|
|
17
|
-
}) => EvtE, makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>, provideContext: (context: RequestContext) => <R, E, A>(eff: Effect<RContext | R, E, A>) => Effect<Exclude<R, RContext>, E, A>, parseDrain: (a: unknown, env?: Parser.ParserEnv | undefined) => Effect<never, CustomSchemaException, {
|
|
16
|
+
}) => EvtE, makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>, provideContext: (context: RequestContext) => <R, E, A>(eff: Effect<RContext | R, E, A>) => Effect<Exclude<R, RContext | RequestContext>, E, A>, parseDrain: (a: unknown, env?: Parser.ParserEnv | undefined) => Effect<never, CustomSchemaException, {
|
|
18
17
|
body: DrainEvt;
|
|
19
18
|
meta: RequestContext;
|
|
20
19
|
}>): import("@effect/io/Effect").Effect<MemQueue, never, {
|
|
21
20
|
publish: (messages_0: Evt, ...messages_1: Evt[]) => import("@effect/io/Effect").Effect<RequestContext, never, import("@effect/io/Fiber").RuntimeFiber<never, import("@effect/data/Chunk").Chunk<void>>>;
|
|
22
21
|
drain: import("@effect/io/Effect").Effect<import("@effect/io/Scope").Scope | DrainR, never, import("@effect/io/Fiber").RuntimeFiber<never, never>>;
|
|
23
22
|
}>;
|
|
24
|
-
export declare function silence<R, E, A>(inp: Effect<R, E, A>): import("@effect/io/Effect").Effect<RequestContext | R, never, void>;
|
|
25
23
|
//# sourceMappingURL=memQueue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memQueue.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/memQueue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memQueue.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/memQueue.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;;;;;AAQvE,wBAAgB,YAAY,CAC1B,MAAM,EACN,GAAG,EACH,QAAQ,SAAS;IAAE,EAAE,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC/C,QAAQ,EACR,IAAI,EACJ,MAAM,EAEN,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,KAAK,IAAI,EACzD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EACxF,cAAc,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,GAAG,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACxD,UAAU,EAAE,CACV,CAAC,EAAE,OAAO,EACV,GAAG,CAAC,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,KAC/B,MAAM,CAAC,KAAK,EAAE,qBAAqB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;;;GA+DpF"}
|
|
@@ -6,14 +6,10 @@ import * as tsplus_module_5 from "@effect-app/prelude/utils";
|
|
|
6
6
|
import * as tsplus_module_6 from "@effect-app/prelude/_ext/misc";
|
|
7
7
|
import * as tsplus_module_7 from "@effect-app/prelude/schema";
|
|
8
8
|
import * as tsplus_module_8 from "@effect/io/Fiber";
|
|
9
|
-
import * as tsplus_module_9 from "@effect-app/infra/api/setupRequest";
|
|
10
|
-
import * as tsplus_module_10 from "@effect/io/Cause";
|
|
11
|
-
import * as tsplus_module_11 from "@effect-app/core/Effect";
|
|
12
|
-
import * as tsplus_module_12 from "@effect/io/Exit";
|
|
13
9
|
import { MemQueue } from "@effect-app/infra-adapters/memQueue";
|
|
14
10
|
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
15
11
|
import { restoreFromRequestContext } from "../Store/Memory.js";
|
|
16
|
-
import {
|
|
12
|
+
import { reportNonInterruptedFailure } from "./errors.js";
|
|
17
13
|
/**
|
|
18
14
|
* @tsplus static QueueMaker.Ops makeMem
|
|
19
15
|
*/
|
|
@@ -21,7 +17,7 @@ export function makeMemQueue(queueName, queueDrainName, encoder, makeHandleEvent
|
|
|
21
17
|
return tsplus_module_1.gen(function* ($) {
|
|
22
18
|
const mem = yield* $(tsplus_module_1.service(MemQueue));
|
|
23
19
|
const q = yield* $(mem.getOrCreateQueue(queueName));
|
|
24
|
-
const
|
|
20
|
+
const qDrain = yield* $(mem.getOrCreateQueue(queueDrainName));
|
|
25
21
|
return {
|
|
26
22
|
publish: (...messages) => tsplus_module_1.gen(function* ($) {
|
|
27
23
|
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_2.tag));
|
|
@@ -33,30 +29,20 @@ export function makeMemQueue(queueName, queueDrainName, encoder, makeHandleEvent
|
|
|
33
29
|
}),
|
|
34
30
|
drain: tsplus_module_1.gen(function* ($) {
|
|
35
31
|
const handleEvent = yield* $(makeHandleEvent);
|
|
32
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName });
|
|
36
33
|
const processMessage = (msg) =>
|
|
37
34
|
// we JSON parse, because that is what the wire also does, and it reveals holes in e.g unknown encoders (Date->String)
|
|
38
35
|
tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.flatMap(tsplus_module_1.sync(() => JSON.parse(msg)), parseDrain)), ({ body, meta }) => provideContext(RequestContext.inherit(meta, {
|
|
39
36
|
id: body.id,
|
|
40
37
|
locale: "en",
|
|
41
38
|
name: tsplus_module_7.ReasonableString(body._tag)
|
|
42
|
-
}))(tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_6.logAnnotates({ body: tsplus_module_5.RecordPretty(tsplus_module_5.object$(body)), meta: tsplus_module_5.RecordPretty(tsplus_module_5.object$(meta)) })(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), () => restoreFromRequestContext),
|
|
43
|
-
return yield* $(tsplus_module_1.forkScoped(tsplus_module_1.forever(
|
|
39
|
+
}))(silenceAndReportError(tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_6.logAnnotates({ body: tsplus_module_5.RecordPretty(tsplus_module_5.object$(body)), meta: tsplus_module_5.RecordPretty(tsplus_module_5.object$(meta)) })(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), () => restoreFromRequestContext), handleEvent(body)))));
|
|
40
|
+
return yield* $(tsplus_module_1.forkScoped(tsplus_module_1.forever(silenceAndReportError(tsplus_module_1.flatMap(qDrain.take(), x => tsplus_module_1.flatMap(tsplus_module_1.fork(tsplus_module_1.uninterruptible(processMessage(x))), _ => tsplus_module_8.join(_)))
|
|
41
|
+
// TODO: normally a failed item would be returned to the queue and retried up to X times.
|
|
42
|
+
// .flatMap(_ => _._tag === "Failure" && !isInterrupted ? qDrain.offer(x) : Effect.unit) // TODO: retry count tracking and max retries.
|
|
43
|
+
))));
|
|
44
44
|
})
|
|
45
45
|
};
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
// must make sure that the errors are processed/handled beforehand.
|
|
50
|
-
export function silence(inp) {
|
|
51
|
-
return tsplus_module_1.flatMap(tsplus_module_1.exit(inp), result => tsplus_module_1.gen(function* ($) {
|
|
52
|
-
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_2.tag));
|
|
53
|
-
return yield* $(tsplus_module_12.match(result, cause => {
|
|
54
|
-
if (tsplus_module_10.isInterrupted(cause)) {
|
|
55
|
-
return tsplus_module_1.failCause(cause);
|
|
56
|
-
}
|
|
57
|
-
reportQueueError(cause, { requestContext });
|
|
58
|
-
return tsplus_module_11.unit;
|
|
59
|
-
}, () => tsplus_module_11.unit));
|
|
60
|
-
}));
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtUXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL1F1ZXVlTWFrZXIvbWVtUXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUVqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRzdEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsU0FBaUIsRUFDakIsY0FBc0IsRUFDdEIsT0FBeUQsRUFDekQsZUFBd0YsRUFDeEYsY0FFdUMsRUFDdkMsVUFHbUY7SUFFbkYsT0FBTyxvQkFBVyxRQUFRLENBQUMsRUFBQyxDQUFDO1FBQzNCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMseUJBQUMsUUFBUSxFQUFRLENBQUE7UUFDckMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1FBQ25ELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQTtRQUU3RCxPQUFPO1lBQ0wsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUN2QixvQkFBVyxRQUFRLENBQUMsRUFBQyxDQUFDO2dCQUNwQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLDhDQUEyQixDQUFBO2dCQUMxRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsdUNBQ2IsNEJBQUEsUUFBUSxFQUFlLENB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
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtUXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL1F1ZXVlTWFrZXIvbWVtUXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUE7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBRWpFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzlELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUd6RDs7R0FFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBUTFCLFNBQWlCLEVBQ2pCLGNBQXNCLEVBQ3RCLE9BQXlELEVBQ3pELGVBQXdGLEVBQ3hGLGNBRXdELEVBQ3hELFVBR21GO0lBRW5GLE9BQU8sb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztRQUMzQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlCQUFDLFFBQVEsRUFBUSxDQUFBO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUNuRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUE7UUFFN0QsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FDdkIsb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztnQkFDcEIsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyw4Q0FBMkIsQ0FBQTtnQkFDMUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLHVDQUNiLDRCQUFBLFFBQVEsRUFBZSxDQUFDLENBQUMsRUFBRTtnQkFDekIsdUhBQXVIO2dCQUN2SCx3QkFBQSwyQkFDRSxJQUFJLENBQUMsU0FBUyxDQUNaLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQzNDLENBQ0Y7Z0JBQ0MsdUVBQXVFO2tCQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbEIsQ0FDVixFQUVGLENBQUE7WUFDSCxDQUFDLENBQUM7WUFDSixLQUFLLEVBQUUsb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztnQkFDM0IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFBO2dCQUM3QyxNQUFNLHFCQUFxQixHQUFHLDJCQUEyQixDQUFDLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUE7Z0JBQ3ZHLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7Z0JBQ3JDLHNIQUFzSDtnQkFDdEgsOENBQUEsd0JBQUEsMkJBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUNaLFVBQVUsQ0FBQyxHQUVYLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQVF0QixjQUFjLENBQ1osY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQzNCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtvQkFDWCxNQUFNLEVBQUUsSUFBYTtvQkFDckIsSUFBSSxFQUFFLGdCQUFBLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ2xDLENBQUMsQ0FDSCxDQVJJLHFCQUFxQixDQUw5Qix5QkFBQSxvQkFFUyw2QkFBb0IsRUFBRSxJQUFJLHVEQUFFLElBQUksRUFBVSxFQUFFLElBQUksdURBQUUsSUFBSSxFQUFVLEVBQUUsQ0FBQyxDQUY1RSx5QkFDWSxPQUFPLGNBQWMsK0JBQStCLENBQUMsR0FFMUQsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUMsRUFDM0IsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBVTNCLENBQ0osQ0FBQTtnQkFDTCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsb0RBS0oscUJBQXFCLENBSjlCLHdCQUFBLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFDRixDQUFDLENBQUMsRUFBRSxDQUFDLDZFQUFBLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBOEIsQ0FBQyxDQUFDLEVBQUUsc0JBQUMsQ0FBQyxDQUFLLENBQUMsQ0FBQztnQkFDMUUseUZBQXlGO2dCQUN6Rix1SUFBdUk7b0JBSTFJLENBQUE7WUFDSCxDQUFDLENBQUM7U0FDOEIsQ0FBQTtJQUNwQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMifQ==
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { StringId, Parser } from "@effect-app/prelude/schema";
|
|
2
2
|
import { Effect } from "@effect/io/Effect";
|
|
3
|
-
import { Cause } from "@effect/io/Cause";
|
|
4
3
|
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
5
4
|
import type { CustomSchemaException } from "@effect-app/prelude/schema";
|
|
6
5
|
/**
|
|
@@ -16,7 +15,7 @@ export declare function makeServiceBusQueue<DrainR, Evt extends {
|
|
|
16
15
|
}, RContext, EvtE, DrainE>(_queueName: string, queueDrainName: string, encoder: (e: {
|
|
17
16
|
body: Evt;
|
|
18
17
|
meta: RequestContext;
|
|
19
|
-
}) => EvtE, makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>, provideContext: (context: RequestContext) => <R, E, A>(eff: Effect<RContext | R, E, A>) => Effect<Exclude<R, RContext>, E, A>, parseDrain: (a: unknown, env?: Parser.ParserEnv | undefined) => Effect<never, CustomSchemaException, {
|
|
18
|
+
}) => EvtE, makeHandleEvent: Effect<DrainR, never, (ks: DrainEvt) => Effect<RContext, DrainE, void>>, provideContext: (context: RequestContext) => <R, E, A>(eff: Effect<RContext | R, E, A>) => Effect<Exclude<R, RContext | RequestContext>, E, A>, parseDrain: (a: unknown, env?: Parser.ParserEnv | undefined) => Effect<never, CustomSchemaException, {
|
|
20
19
|
body: DrainEvt;
|
|
21
20
|
meta: RequestContext;
|
|
22
21
|
}>): import("@effect/io/Effect").Effect<import("@azure/service-bus").ServiceBusReceiver | import("@azure/service-bus").ServiceBusSender, never, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sbqueue.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/sbqueue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sbqueue.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/sbqueue.ts"],"names":[],"mappings":";;AAUA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;;;;;AAQvE,wBAAgB,mBAAmB,CACjC,MAAM,EACN,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,QAAQ,EACR,IAAI,EACJ,MAAM,EAEN,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,CAAC,CAAC,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,KAAK,IAAI,EACzD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EACxF,cAAc,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACnD,GAAG,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACxD,UAAU,EAAE,CACV,CAAC,EAAE,OAAO,EACV,GAAG,CAAC,EAAE,MAAM,CAAC,SAAS,GAAG,SAAS,KAC/B,MAAM,CAAC,KAAK,EAAE,qBAAqB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;;;GAqEpF;;;;;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mJAG1F"}
|
|
@@ -3,15 +3,14 @@ import * as tsplus_module_2 from "@effect-app/core/Tag";
|
|
|
3
3
|
import * as tsplus_module_3 from "@effect-app/prelude/utils";
|
|
4
4
|
import * as tsplus_module_4 from "@effect-app/prelude/_ext/misc";
|
|
5
5
|
import * as tsplus_module_5 from "@effect-app/prelude/schema";
|
|
6
|
-
import * as tsplus_module_6 from "@effect-app/infra/
|
|
7
|
-
import * as tsplus_module_7 from "@effect-app/infra/
|
|
8
|
-
import * as tsplus_module_8 from "@effect
|
|
9
|
-
import * as tsplus_module_9 from "@effect/io/Layer";
|
|
6
|
+
import * as tsplus_module_6 from "@effect-app/infra/RequestContext";
|
|
7
|
+
import * as tsplus_module_7 from "@effect-app/infra/services/QueueMaker/errors";
|
|
8
|
+
import * as tsplus_module_8 from "@effect/io/Layer";
|
|
10
9
|
import { LiveReceiver, LiveSender, LiveServiceBusClient, Receiver, Sender, subscribe } from "@effect-app/infra-adapters/ServiceBus";
|
|
11
10
|
import { captureException } from "@effect-app/infra/errorReporter";
|
|
12
11
|
import { RequestContext } from "@effect-app/infra/RequestContext";
|
|
13
12
|
import { restoreFromRequestContext } from "../Store/Memory.js";
|
|
14
|
-
import {
|
|
13
|
+
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause } from "./errors.js";
|
|
15
14
|
/**
|
|
16
15
|
* @tsplus static QueueMaker.Ops makeServiceBus
|
|
17
16
|
*/
|
|
@@ -20,25 +19,29 @@ export function makeServiceBusQueue(_queueName, queueDrainName, encoder, makeHan
|
|
|
20
19
|
const s = yield* $(tsplus_module_1.service(Sender));
|
|
21
20
|
const receiver = yield* $(tsplus_module_1.service(Receiver));
|
|
22
21
|
const receiverLayer = tsplus_module_2.makeLayer(Receiver, receiver);
|
|
22
|
+
const silenceAndReportError = reportNonInterruptedFailure({ name: "ServiceBusQueue.drain." + queueDrainName });
|
|
23
|
+
const reportError = reportNonInterruptedFailureCause({ name: "ServiceBusQueue.drain." + queueDrainName });
|
|
23
24
|
return {
|
|
24
25
|
drain: tsplus_module_1.gen(function* ($) {
|
|
25
26
|
const handleEvent = yield* $(makeHandleEvent);
|
|
26
27
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
28
|
function processMessage(messageBody) {
|
|
28
|
-
return tsplus_module_1.
|
|
29
|
+
return tsplus_module_1.tapErrorCause(tsplus_module_1.flatMap(tsplus_module_1.orDie(tsplus_module_1.flatMap(tsplus_module_1.sync(() => JSON.parse(messageBody)), x => parseDrain(x))), ({ body, meta }) => provideContext(RequestContext.inherit(meta, {
|
|
29
30
|
id: body.id,
|
|
30
31
|
locale: "en",
|
|
31
32
|
name: tsplus_module_5.ReasonableString(body._tag)
|
|
32
|
-
}))(tsplus_module_1.
|
|
33
|
+
}))(silenceAndReportError(tsplus_module_1.orDie(tsplus_module_1.zipRight(tsplus_module_1.tap(tsplus_module_4.logAnnotates({ body: tsplus_module_3.RecordPretty(tsplus_module_3.object$(body)), meta: tsplus_module_3.RecordPretty(tsplus_module_3.object$(meta)) })(tsplus_module_1.logDebug(`$$ [${queueDrainName}] Processing incoming message`)), () => restoreFromRequestContext), handleEvent(body))))))
|
|
34
|
+
// we reportError here, so that we report the error only, and keep flowing
|
|
35
|
+
, reportError);
|
|
33
36
|
}
|
|
34
37
|
return yield* $(tsplus_module_1.provideSomeLayer(subscribe({
|
|
35
|
-
processMessage: x => tsplus_module_1.uninterruptible(processMessage(x.body)),
|
|
38
|
+
processMessage: x => tsplus_module_1.flatMap(tsplus_module_1.uninterruptible(processMessage(x.body)), _ => tsplus_module_1.done(_)),
|
|
36
39
|
processError: err => tsplus_module_1.sync(() => captureException(err.error))
|
|
37
40
|
}), receiverLayer));
|
|
38
41
|
}),
|
|
39
42
|
publish: (...messages) => tsplus_module_1.gen(function* ($) {
|
|
40
|
-
const requestContext = yield* $(tsplus_module_1.service(
|
|
41
|
-
return yield* $(
|
|
43
|
+
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_6.tag));
|
|
44
|
+
return yield* $(tsplus_module_7.forkDaemonReportQueue(tsplus_module_1.promise(() => s.sendMessages(messages.map(x => ({
|
|
42
45
|
body: JSON.stringify(encoder({ body: x, meta: requestContext })),
|
|
43
46
|
messageId: x.id,
|
|
44
47
|
contentType: "application/json"
|
|
@@ -51,12 +54,6 @@ export function makeServiceBusQueue(_queueName, queueDrainName, encoder, makeHan
|
|
|
51
54
|
* @tsplus static QueueMaker.Ops makeServiceBusLayers
|
|
52
55
|
*/
|
|
53
56
|
export function makeServiceBusLayers(url, queueName, queueDrainName) {
|
|
54
|
-
return
|
|
57
|
+
return tsplus_module_8.provide((tsplus_module_8.merge(LiveSender(queueName))(LiveReceiver(queueDrainName))))(LiveServiceBusClient(url));
|
|
55
58
|
}
|
|
56
|
-
|
|
57
|
-
return tsplus_module_1.gen(function* ($) {
|
|
58
|
-
const requestContext = yield* $(tsplus_module_1.service(tsplus_module_7.tag));
|
|
59
|
-
return reportQueueError(cause, { requestContext });
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2JxdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvUXVldWVNYWtlci9zYnF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLG9CQUFvQixFQUNwQixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLHVDQUF1QyxDQUFBO0FBRTlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUVqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFHOUM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBUWpDLFVBQWtCLEVBQ2xCLGNBQXNCLEVBQ3RCLE9BQXlELEVBQ3pELGVBQXdGLEVBQ3hGLGNBRXVDLEVBQ3ZDLFVBR21GO0lBRW5GLE9BQU8sb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlCQUFDLE1BQU0sRUFBUSxDQUFBO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMseUJBQUMsUUFBUSxFQUFRLENBQUE7UUFDMUMsTUFBTSxhQUFhLEdBQUcsMEJBQUEsUUFBUSxFQUFXLFFBQVEsQ0FBQyxDQUFBO1FBRWxELE9BQU87WUFDTCxLQUFLLEVBQUUsb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztnQkFDM0IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFBO2dCQUM3Qyw4REFBOEQ7Z0JBQzlELFNBQVMsY0FBYyxDQUFDLFdBQWdCO29CQUN0QyxvREFBTyww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
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2JxdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvUXVldWVNYWtlci9zYnF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1Ysb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNWLE1BQU0sdUNBQXVDLENBQUE7QUFFOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBRWpFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBQzlELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUczRjs7R0FFRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FRakMsVUFBa0IsRUFDbEIsY0FBc0IsRUFDdEIsT0FBeUQsRUFDekQsZUFBd0YsRUFDeEYsY0FFd0QsRUFDeEQsVUFHbUY7SUFFbkYsT0FBTyxvQkFBVyxRQUFRLENBQUMsRUFBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMseUJBQUMsTUFBTSxFQUFRLENBQUE7UUFDakMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyx5QkFBQyxRQUFRLEVBQVEsQ0FBQTtRQUMxQyxNQUFNLGFBQWEsR0FBRywwQkFBQSxRQUFRLEVBQVcsUUFBUSxDQUFDLENBQUE7UUFDbEQsTUFBTSxxQkFBcUIsR0FBRywyQkFBMkIsQ0FBQyxFQUFFLElBQUksRUFBRSx3QkFBd0IsR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFBO1FBQzlHLE1BQU0sV0FBVyxHQUFHLGdDQUFnQyxDQUFDLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixHQUFHLGNBQWMsRUFBRSxDQUFDLENB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.8",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -20,10 +20,10 @@
|
|
|
20
20
|
"proper-lockfile": "^4.1.2",
|
|
21
21
|
"pure-rand": "^6.0.0",
|
|
22
22
|
"redlock": "^4.2.0",
|
|
23
|
+
"@effect-app/prelude": "0.21.4",
|
|
23
24
|
"@effect-app/core": "0.23.0",
|
|
24
25
|
"@effect-app/infra-adapters": "0.20.4",
|
|
25
|
-
"@effect-app/schema": "0.18.3"
|
|
26
|
-
"@effect-app/prelude": "0.21.4"
|
|
26
|
+
"@effect-app/schema": "0.18.3"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
29
|
"@babel/cli": "^7.20.7",
|