@effect-app/infra 0.17.0 → 0.17.2

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/_cjs/api/routing.cjs +70 -64
  3. package/_cjs/api/routing.cjs.map +1 -1
  4. package/_cjs/api/setupRequest.cjs +22 -4
  5. package/_cjs/api/setupRequest.cjs.map +1 -1
  6. package/_cjs/services/QueueMaker/errors.cjs +54 -0
  7. package/_cjs/services/QueueMaker/errors.cjs.map +1 -0
  8. package/_cjs/services/QueueMaker/memQueue.cjs +79 -0
  9. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -0
  10. package/_cjs/services/QueueMaker/sbqueue.cjs +80 -0
  11. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -0
  12. package/_cjs/services/QueueMaker/service.cjs +9 -0
  13. package/_cjs/services/QueueMaker/service.cjs.map +1 -0
  14. package/_src/_global.ext.ts +4 -0
  15. package/_src/api/routing.ts +36 -29
  16. package/_src/api/setupRequest.ts +19 -0
  17. package/_src/services/QueueMaker/errors.ts +48 -0
  18. package/_src/services/QueueMaker/memQueue.ts +102 -0
  19. package/_src/services/QueueMaker/sbqueue.ts +118 -0
  20. package/_src/services/QueueMaker/service.ts +14 -0
  21. package/dist/_global.ext.d.ts +4 -0
  22. package/dist/_global.ext.d.ts.map +1 -1
  23. package/dist/api/routing.d.ts +4 -1
  24. package/dist/api/routing.d.ts.map +1 -1
  25. package/dist/api/routing.js +73 -71
  26. package/dist/api/setupRequest.d.ts +5 -0
  27. package/dist/api/setupRequest.d.ts.map +1 -1
  28. package/dist/api/setupRequest.js +20 -3
  29. package/dist/services/QueueMaker/errors.d.ts +24 -0
  30. package/dist/services/QueueMaker/errors.d.ts.map +1 -0
  31. package/dist/services/QueueMaker/errors.js +37 -0
  32. package/dist/services/QueueMaker/memQueue.d.ts +25 -0
  33. package/dist/services/QueueMaker/memQueue.d.ts.map +1 -0
  34. package/dist/services/QueueMaker/memQueue.js +60 -0
  35. package/dist/services/QueueMaker/sbqueue.d.ts +31 -0
  36. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -0
  37. package/dist/services/QueueMaker/sbqueue.js +61 -0
  38. package/dist/services/QueueMaker/service.d.ts +15 -0
  39. package/dist/services/QueueMaker/service.d.ts.map +1 -0
  40. package/dist/services/QueueMaker/service.js +2 -0
  41. package/package.json +43 -2
@@ -0,0 +1,61 @@
1
+ import * as tsplus_module_1 from "@effect/io/Effect";
2
+ import * as tsplus_module_2 from "@effect-app/core/Tag";
3
+ import * as tsplus_module_3 from "@effect-app/prelude/utils";
4
+ import * as tsplus_module_4 from "@effect-app/prelude/_ext/misc";
5
+ import * as tsplus_module_5 from "@effect-app/prelude/schema";
6
+ import * as tsplus_module_6 from "@effect-app/infra/api/setupRequest";
7
+ import * as tsplus_module_7 from "@effect-app/infra/RequestContext";
8
+ import * as tsplus_module_8 from "@effect-app/infra/services/QueueMaker/errors";
9
+ import * as tsplus_module_9 from "@effect/io/Layer";
10
+ import { LiveReceiver, LiveSender, LiveServiceBusClient, Receiver, Sender, subscribe } from "@effect-app/infra-adapters/ServiceBus";
11
+ import { captureException } from "@effect-app/infra/errorReporter";
12
+ import { RequestContext } from "@effect-app/infra/RequestContext";
13
+ import { reportQueueError } from "./errors.js";
14
+ /**
15
+ * @tsplus static QueueMaker.Ops makeServiceBus
16
+ */
17
+ export function makeServiceBusQueue(_queueName, queueDrainName, encoder, makeHandleEvent, provideContext, parseDrain) {
18
+ return tsplus_module_1.gen(function* ($) {
19
+ const s = yield* $(tsplus_module_1.service(Sender));
20
+ const receiver = yield* $(tsplus_module_1.service(Receiver));
21
+ const receiverLayer = tsplus_module_2.makeLayer(Receiver, receiver);
22
+ return {
23
+ drain: tsplus_module_1.gen(function* ($) {
24
+ const handleEvent = yield* $(makeHandleEvent);
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ function processMessage(messageBody) {
27
+ return tsplus_module_1.asUnit(tsplus_module_1.orDie(tsplus_module_6.setupReq3(tsplus_module_1.flatMap(tsplus_module_1.tapErrorCause(tsplus_module_1.orDie(tsplus_module_1.flatMap(tsplus_module_1.sync(() => JSON.parse(messageBody)), x => parseDrain(x))), report), ({ body, meta }) => provideContext(RequestContext.inherit(meta, {
28
+ id: body.id,
29
+ locale: "en",
30
+ name: tsplus_module_5.ReasonableString(body._tag)
31
+ }))(tsplus_module_1.tapErrorCause(tsplus_module_1.zipRight(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`)), handleEvent(body)), report))), "Queue.ReceiveMessage")));
32
+ }
33
+ return yield* $(tsplus_module_1.provideSomeLayer(subscribe({
34
+ processMessage: x => tsplus_module_1.uninterruptible(processMessage(x.body)),
35
+ processError: err => tsplus_module_1.sync(() => captureException(err.error))
36
+ }), receiverLayer));
37
+ }),
38
+ publish: (...messages) => tsplus_module_1.gen(function* ($) {
39
+ const requestContext = yield* $(tsplus_module_1.service(tsplus_module_7.tag));
40
+ return yield* $(tsplus_module_8.forkDaemonReportQueue(tsplus_module_1.promise(() => s.sendMessages(messages.map(x => ({
41
+ body: JSON.stringify(encoder({ body: x, meta: requestContext })),
42
+ messageId: x.id,
43
+ contentType: "application/json"
44
+ }))))));
45
+ })
46
+ };
47
+ });
48
+ }
49
+ /**
50
+ * @tsplus static QueueMaker.Ops makeServiceBusLayers
51
+ */
52
+ export function makeServiceBusLayers(url, queueName, queueDrainName) {
53
+ return tsplus_module_9.provide((tsplus_module_9.merge(LiveSender(queueName))(LiveReceiver(queueDrainName))))(LiveServiceBusClient(url));
54
+ }
55
+ function report(cause) {
56
+ return tsplus_module_1.gen(function* ($) {
57
+ const requestContext = yield* $(tsplus_module_1.service(tsplus_module_7.tag));
58
+ return reportQueueError(cause, { requestContext });
59
+ });
60
+ }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2JxdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvUXVldWVNYWtlci9zYnF1ZXVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLG9CQUFvQixFQUNwQixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLHVDQUF1QyxDQUFBO0FBRTlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFHOUM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBUWpDLFVBQWtCLEVBQ2xCLGNBQXNCLEVBQ3RCLE9BQXlELEVBQ3pELGVBQXdGLEVBQ3hGLGNBRXVDLEVBQ3ZDLFVBR21GO0lBRW5GLE9BQU8sb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLHlCQUFDLE1BQU0sRUFBUSxDQUFBO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMseUJBQUMsUUFBUSxFQUFRLENBQUE7UUFDMUMsTUFBTSxhQUFhLEdBQUcsMEJBQUEsUUFBUSxFQUFXLFFBQVEsQ0FBQyxDQUFBO1FBRWxELE9BQU87WUFDTCxLQUFLLEVBQUUsb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztnQkFDM0IsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFBO2dCQUM3Qyw4REFBOEQ7Z0JBQzlELFNBQVMsY0FBYyxDQUFDLFdBQWdCO29CQUN0QyxvREFBTywwQkFBQSx3QkFBQSxvREFBQSx3QkFBQSxxQkFBWSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQ3RDLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBRWIsTUFBTSxDQUFDLEVBQ2IsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBT3RCLGNBQWMsQ0FDWixjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTt3QkFDM0IsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNYLE1BQU0sRUFBRSxJQUFhO3dCQUNyQixJQUFJLEVBQUUsZ0JBQUEsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztxQkFDbEMsQ0FBQyxDQUNILENBWkwsOEJBQUEseUJBRVMsNkJBQW9CLEVBQUUsSUFBSSx1REFBRSxJQUFJLEVBQVUsRUFBRSxJQUFJLHVEQUFFLElBQUksRUFBVSxFQUFFLENBQUMsQ0FGNUUseUJBQ1ksT0FBTyxjQUFjLCtCQUErQixDQUFDLEdBRXJELFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNiLE1BQU0sQ0FBQyxDQVNyQixDQUNKLEVBQ3FCLHNCQUFzQixDQUFDLEdBRXRDO2dCQUNYLENBQUM7Z0JBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQ2IsaUNBQUEsU0FBUyxDQUFDO29CQUNSLGNBQWMsRUFBRSxDQUFDLENBQUMsRUFBRSxpQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFnQjtvQkFDM0QsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsMkJBQU8sZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN6RCxDQUFDLEVBQ2tCLGFBQWEsQ0FBQyxDQUNuQyxDQUFBO1lBQ0gsQ0FBQyxDQUFDO1lBRUYsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUN2QixvQkFBVyxRQUFRLENBQUMsRUFBQyxDQUFDO2dCQUNwQixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLDhDQUEyQixDQUFBO2dCQUMxRCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsdUNBQ2Isd0JBQWUsR0FBRyxFQUFFLENBQ2xCLENBQUMsQ0FBQyxZQUFZLENBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUNsQixPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUMzQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQ2YsV0FBVyxFQUFFLGtCQUFrQjtpQkFDaEMsQ0FBQyxDQUFDLENBQ0osQ0FDRixFQUVGLENBQUE7WUFDSCxDQUFDLENBQUM7U0FDNEIsQ0FBQTtJQUNwQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxHQUFXLEVBQUUsU0FBaUIsRUFBRSxjQUFzQjtJQUN6RiwrQkFDSyx1QkFBZ0MsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFwRCxZQUFZLENBQUMsY0FBYyxDQUFDLEVBQXlCLEVBRHBELG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxFQUMyQjtBQUM3RCxDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUksS0FBZTtJQUNoQyxPQUFPLG9CQUFXLFFBQVEsQ0FBQyxFQUFDLENBQUM7UUFDM0IsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyw4Q0FBMkIsQ0FBQTtRQUMxRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUE7SUFDcEQsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDIn0=
@@ -0,0 +1,15 @@
1
+ import { Effect } from "@effect/io/Effect";
2
+ import { Scope } from "@effect/io/Scope";
3
+ import { NonEmptyReadonlyArray } from "@fp-ts/core/ReadonlyArray";
4
+ import type { RequestContext } from "@effect-app/infra/RequestContext";
5
+ export interface QueueBase<RContext, Evt> {
6
+ drain: Effect<Scope | RContext, never, void>;
7
+ publish: (...messages: NonEmptyReadonlyArray<Evt>) => Effect<RequestContext, never, void>;
8
+ }
9
+ /**
10
+ * @tsplus type QueueMaker.Ops
11
+ */
12
+ export interface QueueMakerOps {
13
+ }
14
+ export declare const QueueMaker: QueueMakerOps;
15
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../_src/services/QueueMaker/service.ts"],"names":[],"mappings":";;;AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEtE,MAAM,WAAW,SAAS,CAAC,QAAQ,EAAE,GAAG;IACtC,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAC5C,OAAO,EAAE,CACP,GAAG,QAAQ,EAAE,qBAAqB,CAAC,GAAG,CAAC,KACpC,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;CAAG;AACjC,eAAO,MAAM,UAAU,EAAE,aAAkB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const QueueMaker = {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvUXVldWVNYWtlci9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBa0IsRUFBRSxDQUFBIn0=
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "0.17.0",
3
+ "version": "0.17.2",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
7
7
  "@azure/cosmos": "^3.17.2",
8
+ "@azure/service-bus": "^7.7.3",
8
9
  "@effect/io": "^0.1.2",
9
10
  "@fp-ts/core": "^0.1.1",
10
11
  "@fp-ts/data": "^0.1.0",
@@ -19,9 +20,9 @@
19
20
  "proper-lockfile": "^4.1.2",
20
21
  "pure-rand": "^6.0.0",
21
22
  "redlock": "^4.2.0",
22
- "@effect-app/core": "0.16.0",
23
23
  "@effect-app/prelude": "0.16.0",
24
24
  "@effect-app/infra-adapters": "0.14.0",
25
+ "@effect-app/core": "0.16.0",
25
26
  "@effect-app/schema": "0.14.0"
26
27
  },
27
28
  "devDependencies": {
@@ -452,6 +453,46 @@
452
453
  "default": "./_cjs/services/Operations/service.cjs"
453
454
  }
454
455
  },
456
+ "./services/QueueMaker/errors": {
457
+ "import": {
458
+ "types": "./dist/services/QueueMaker/errors.d.ts",
459
+ "default": "./dist/services/QueueMaker/errors.js"
460
+ },
461
+ "require": {
462
+ "types": "./dist/services/QueueMaker/errors.d.ts",
463
+ "default": "./_cjs/services/QueueMaker/errors.cjs"
464
+ }
465
+ },
466
+ "./services/QueueMaker/memQueue": {
467
+ "import": {
468
+ "types": "./dist/services/QueueMaker/memQueue.d.ts",
469
+ "default": "./dist/services/QueueMaker/memQueue.js"
470
+ },
471
+ "require": {
472
+ "types": "./dist/services/QueueMaker/memQueue.d.ts",
473
+ "default": "./_cjs/services/QueueMaker/memQueue.cjs"
474
+ }
475
+ },
476
+ "./services/QueueMaker/sbqueue": {
477
+ "import": {
478
+ "types": "./dist/services/QueueMaker/sbqueue.d.ts",
479
+ "default": "./dist/services/QueueMaker/sbqueue.js"
480
+ },
481
+ "require": {
482
+ "types": "./dist/services/QueueMaker/sbqueue.d.ts",
483
+ "default": "./_cjs/services/QueueMaker/sbqueue.cjs"
484
+ }
485
+ },
486
+ "./services/QueueMaker/service": {
487
+ "import": {
488
+ "types": "./dist/services/QueueMaker/service.d.ts",
489
+ "default": "./dist/services/QueueMaker/service.js"
490
+ },
491
+ "require": {
492
+ "types": "./dist/services/QueueMaker/service.d.ts",
493
+ "default": "./_cjs/services/QueueMaker/service.cjs"
494
+ }
495
+ },
455
496
  "./services/Repository": {
456
497
  "import": {
457
498
  "types": "./dist/services/Repository.d.ts",