@effect-app/infra 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/_cjs/api/internal/RequestContextMiddleware.cjs +2 -3
  3. package/_cjs/api/internal/RequestContextMiddleware.cjs.map +1 -1
  4. package/_cjs/api/internal/events.cjs +2 -2
  5. package/_cjs/api/internal/events.cjs.map +1 -1
  6. package/_cjs/api/setupRequest.cjs +1 -1
  7. package/_cjs/api/setupRequest.cjs.map +1 -1
  8. package/_cjs/fileUtil.cjs +48 -0
  9. package/_cjs/fileUtil.cjs.map +1 -0
  10. package/_cjs/logger/shared.cjs +2 -2
  11. package/_cjs/logger/shared.cjs.map +1 -1
  12. package/_cjs/services/CUPS.cjs +118 -0
  13. package/_cjs/services/CUPS.cjs.map +1 -0
  14. package/_cjs/services/QueueMaker/SQLQueue.cjs +1 -1
  15. package/_cjs/services/QueueMaker/SQLQueue.cjs.map +1 -1
  16. package/_cjs/services/QueueMaker/memQueue.cjs +1 -1
  17. package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
  18. package/_cjs/services/QueueMaker/sbqueue.cjs +1 -1
  19. package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
  20. package/_cjs/services/Store/Cosmos.cjs +1 -1
  21. package/_cjs/services/Store/Cosmos.cjs.map +1 -1
  22. package/_cjs/services/Store/Disk.cjs +1 -1
  23. package/_cjs/services/adapters/SQL/Model.cjs +500 -0
  24. package/_cjs/services/adapters/SQL/Model.cjs.map +1 -0
  25. package/_cjs/services/adapters/SQL.cjs +11 -0
  26. package/_cjs/services/adapters/SQL.cjs.map +1 -0
  27. package/_cjs/services/adapters/ServiceBus.cjs +76 -0
  28. package/_cjs/services/adapters/ServiceBus.cjs.map +1 -0
  29. package/_cjs/services/adapters/cosmos-client.cjs +18 -0
  30. package/_cjs/services/adapters/cosmos-client.cjs.map +1 -0
  31. package/_cjs/services/adapters/index.cjs +6 -0
  32. package/_cjs/services/adapters/index.cjs.map +1 -0
  33. package/_cjs/services/adapters/logger.cjs +9 -0
  34. package/_cjs/services/adapters/logger.cjs.map +1 -0
  35. package/_cjs/services/adapters/memQueue.cjs +31 -0
  36. package/_cjs/services/adapters/memQueue.cjs.map +1 -0
  37. package/_cjs/services/adapters/mongo-client.cjs +20 -0
  38. package/_cjs/services/adapters/mongo-client.cjs.map +1 -0
  39. package/_cjs/services/adapters/redis-client.cjs +83 -0
  40. package/_cjs/services/adapters/redis-client.cjs.map +1 -0
  41. package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
  42. package/dist/api/internal/RequestContextMiddleware.js +3 -4
  43. package/dist/api/internal/events.d.ts.map +1 -1
  44. package/dist/api/internal/events.js +3 -3
  45. package/dist/api/setupRequest.d.ts +1 -2
  46. package/dist/api/setupRequest.d.ts.map +1 -1
  47. package/dist/api/setupRequest.js +3 -3
  48. package/dist/fileUtil.d.ts +23 -0
  49. package/dist/fileUtil.d.ts.map +1 -0
  50. package/dist/fileUtil.js +41 -0
  51. package/dist/logger/shared.d.ts.map +1 -1
  52. package/dist/logger/shared.js +2 -2
  53. package/dist/services/CUPS.d.ts +26 -0
  54. package/dist/services/CUPS.d.ts.map +1 -0
  55. package/dist/services/CUPS.js +111 -0
  56. package/dist/services/QueueMaker/SQLQueue.d.ts.map +1 -1
  57. package/dist/services/QueueMaker/SQLQueue.js +2 -2
  58. package/dist/services/QueueMaker/memQueue.d.ts +1 -1
  59. package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
  60. package/dist/services/QueueMaker/memQueue.js +2 -2
  61. package/dist/services/QueueMaker/sbqueue.d.ts +3 -3
  62. package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
  63. package/dist/services/QueueMaker/sbqueue.js +2 -2
  64. package/dist/services/Store/Cosmos.d.ts.map +1 -1
  65. package/dist/services/Store/Cosmos.js +2 -2
  66. package/dist/services/Store/Disk.js +2 -2
  67. package/dist/services/adapters/SQL/Model.d.ts +538 -0
  68. package/dist/services/adapters/SQL/Model.d.ts.map +1 -0
  69. package/dist/services/adapters/SQL/Model.js +508 -0
  70. package/dist/services/adapters/SQL.d.ts +2 -0
  71. package/dist/services/adapters/SQL.d.ts.map +1 -0
  72. package/dist/services/adapters/SQL.js +2 -0
  73. package/dist/services/adapters/ServiceBus.d.ts +50 -0
  74. package/dist/services/adapters/ServiceBus.d.ts.map +1 -0
  75. package/dist/services/adapters/ServiceBus.js +73 -0
  76. package/dist/services/adapters/cosmos-client.d.ts +10 -0
  77. package/dist/services/adapters/cosmos-client.d.ts.map +1 -0
  78. package/dist/services/adapters/cosmos-client.js +8 -0
  79. package/dist/services/adapters/index.d.ts +2 -0
  80. package/dist/services/adapters/index.d.ts.map +1 -0
  81. package/dist/services/adapters/index.js +2 -0
  82. package/dist/services/adapters/logger.d.ts +8 -0
  83. package/dist/services/adapters/logger.d.ts.map +1 -0
  84. package/dist/services/adapters/logger.js +3 -0
  85. package/dist/services/adapters/memQueue.d.ts +34 -0
  86. package/dist/services/adapters/memQueue.d.ts.map +1 -0
  87. package/dist/services/adapters/memQueue.js +24 -0
  88. package/dist/services/adapters/mongo-client.d.ts +10 -0
  89. package/dist/services/adapters/mongo-client.d.ts.map +1 -0
  90. package/dist/services/adapters/mongo-client.js +12 -0
  91. package/dist/services/adapters/redis-client.d.ts +29 -0
  92. package/dist/services/adapters/redis-client.d.ts.map +1 -0
  93. package/dist/services/adapters/redis-client.js +93 -0
  94. package/package.json +128 -12
  95. package/src/api/internal/RequestContextMiddleware.ts +2 -3
  96. package/src/api/internal/events.ts +2 -2
  97. package/src/api/setupRequest.ts +2 -3
  98. package/src/fileUtil.ts +85 -0
  99. package/src/logger/shared.ts +2 -3
  100. package/src/services/CUPS.ts +151 -0
  101. package/src/services/QueueMaker/SQLQueue.ts +1 -1
  102. package/src/services/QueueMaker/memQueue.ts +1 -1
  103. package/src/services/QueueMaker/sbqueue.ts +7 -7
  104. package/src/services/Store/Cosmos.ts +1 -1
  105. package/src/services/Store/Disk.ts +1 -1
  106. package/src/services/adapters/SQL/Model.ts +939 -0
  107. package/src/services/adapters/SQL.ts +1 -0
  108. package/src/services/adapters/ServiceBus.ts +140 -0
  109. package/src/services/adapters/cosmos-client.ts +16 -0
  110. package/src/services/adapters/index.ts +0 -0
  111. package/src/services/adapters/logger.ts +3 -0
  112. package/src/services/adapters/memQueue.ts +26 -0
  113. package/src/services/adapters/mongo-client.ts +23 -0
  114. package/src/services/adapters/redis-client.ts +123 -0
  115. package/tsconfig.src.json +0 -3
  116. package/src/services/Store/Redis.ts.bak +0 -88
  117. package/src/services/simpledb/cosmosdb.ts.bak +0 -149
  118. package/src/services/simpledb/diskdb.ts.bak +0 -165
  119. package/src/services/simpledb/index.ts.bak +0 -6
  120. package/src/services/simpledb/memdb.ts.bak +0 -78
  121. package/src/services/simpledb/mongodb.ts.bak +0 -107
  122. package/src/services/simpledb/redisdb.ts.bak +0 -202
  123. package/src/services/simpledb/shared.ts.bak +0 -117
  124. package/src/services/simpledb/simpledb.ts.bak +0 -121
@@ -0,0 +1,73 @@
1
+ import { ServiceBusClient } from "@azure/service-bus";
2
+ import { Cause, Context, Effect, Exit, FiberSet, Layer } from "effect-app";
3
+ import { InfraLogger } from "./logger.js";
4
+ function makeClient(url) {
5
+ return Effect.acquireRelease(Effect.sync(() => new ServiceBusClient(url)), (client) => Effect.promise(() => client.close()));
6
+ }
7
+ const Client = Context.GenericTag("@services/Client");
8
+ export const LiveServiceBusClient = (url) => Layer.scoped(Client)(makeClient(url));
9
+ function makeSender(queueName) {
10
+ return Effect.gen(function* () {
11
+ const serviceBusClient = yield* Client;
12
+ return yield* Effect.acquireRelease(Effect.sync(() => serviceBusClient.createSender(queueName)), (subscription) => Effect.promise(() => subscription.close()));
13
+ });
14
+ }
15
+ export const Sender = Context.GenericTag("@services/Sender");
16
+ export function LiveSender(queueName) {
17
+ return Layer
18
+ .scoped(Sender, makeSender(queueName));
19
+ }
20
+ function makeReceiver(queueName, waitTillEmpty, sessionId) {
21
+ return Effect.gen(function* () {
22
+ const serviceBusClient = yield* Client;
23
+ return yield* Effect.acquireRelease(sessionId
24
+ ? Effect.promise(() => serviceBusClient.acceptSession(queueName, sessionId))
25
+ : Effect.sync(() => serviceBusClient.createReceiver(queueName)), (r) => waitTillEmpty.pipe(Effect.andThen(Effect.promise(() => r.close()))));
26
+ });
27
+ }
28
+ export class ServiceBusReceiverFactory extends Context.TagId("ServiceBusReceiverFactory")() {
29
+ static Live = (queueName) => this.toLayer(Client.pipe(Effect.andThen((cl) => ({
30
+ make: (waitTillEmpty) => makeReceiver(queueName, waitTillEmpty).pipe(Effect.provideService(Client, cl)),
31
+ makeSession: (sessionId, waitTillEmpty) => makeReceiver(queueName, waitTillEmpty, sessionId).pipe(Effect.provideService(Client, cl))
32
+ }))));
33
+ }
34
+ export function sendMessages(messages, options) {
35
+ return Effect.gen(function* () {
36
+ const s = yield* Sender;
37
+ return yield* Effect.promise(() => s.sendMessages(messages, options));
38
+ });
39
+ }
40
+ export function subscribe(hndlr, sessionId) {
41
+ return Effect.gen(function* () {
42
+ const rf = yield* ServiceBusReceiverFactory;
43
+ const fs = yield* FiberSet.make();
44
+ const fr = yield* FiberSet.runtime(fs)();
45
+ const wait = Effect.gen(function* () {
46
+ if ((yield* FiberSet.size(fs)) > 0) {
47
+ yield* InfraLogger.logDebug("Waiting ServiceBusFiberSet to be empty: " + (yield* FiberSet.size(fs)));
48
+ }
49
+ while ((yield* FiberSet.size(fs)) > 0)
50
+ yield* Effect.sleep("250 millis");
51
+ });
52
+ const r = yield* sessionId
53
+ ? rf.makeSession(sessionId, wait)
54
+ : rf.make(wait);
55
+ const runEffect = (effect) => new Promise((resolve, reject) => fr(effect)
56
+ .addObserver((exit) => {
57
+ if (Exit.isSuccess(exit)) {
58
+ resolve(exit.value);
59
+ }
60
+ else {
61
+ reject(Cause.pretty(exit.cause, { renderErrorCause: true }));
62
+ }
63
+ }));
64
+ yield* Effect.acquireRelease(Effect.sync(() => r.subscribe({
65
+ processError: (err) => runEffect(hndlr
66
+ .processError(err)
67
+ .pipe(Effect.catchAllCause((cause) => Effect.logError("ServiceBus Error", cause)))),
68
+ processMessage: (msg) => runEffect(hndlr.processMessage(msg))
69
+ // DO NOT CATCH ERRORS here as they should return to the queue!
70
+ })), (subscription) => Effect.promise(() => subscription.close()));
71
+ });
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmljZUJ1cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hZGFwdGVycy9TZXJ2aWNlQnVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRXJELE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRXpDLFNBQVMsVUFBVSxDQUFDLEdBQVc7SUFDN0IsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDNUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQ2pELENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBbUIsa0JBQWtCLENBQUMsQ0FBQTtBQUN2RSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUUxRixTQUFTLFVBQVUsQ0FBQyxTQUFpQjtJQUNuQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3pCLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBRXRDLE9BQU8sS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FDakMsTUFBTSxDQUFD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
@@ -0,0 +1,10 @@
1
+ import { Context, Effect, Layer } from "effect-app";
2
+ export declare const makeCosmosClient: (url: string, dbName: string) => Effect.Effect<{
3
+ db: import("@azure/cosmos").Database;
4
+ }, never, never>;
5
+ export interface CosmosClient extends Effect.Success<ReturnType<typeof makeCosmosClient>> {
6
+ }
7
+ export declare const CosmosClient: Context.Tag<CosmosClient, CosmosClient>;
8
+ export declare const db: Effect.Effect<import("@azure/cosmos").Database, never, CosmosClient>;
9
+ export declare const CosmosClientLayer: (cosmosUrl: string, dbName: string) => Layer.Layer<CosmosClient, never, never>;
10
+ //# sourceMappingURL=cosmos-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cosmos-client.d.ts","sourceRoot":"","sources":["../../../src/services/adapters/cosmos-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAInD,eAAO,MAAM,gBAAgB,QAAS,MAAM,UAAU,MAAM;;gBACM,CAAA;AAElE,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;CAAG;AAE5F,eAAO,MAAM,YAAY,yCAA6D,CAAA;AAEtF,eAAO,MAAM,EAAE,sEAAwC,CAAA;AAEvD,eAAO,MAAM,iBAAiB,cAAe,MAAM,UAAU,MAAM,4CACF,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { CosmosClient as ComosClient_ } from "@azure/cosmos";
2
+ import { Context, Effect, Layer } from "effect-app";
3
+ const withClient = (url) => Effect.sync(() => new ComosClient_(url));
4
+ export const makeCosmosClient = (url, dbName) => Effect.map(withClient(url), (x) => ({ db: x.database(dbName) }));
5
+ export const CosmosClient = Context.GenericTag("@services/CosmosClient");
6
+ export const db = Effect.map(CosmosClient, (_) => _.db);
7
+ export const CosmosClientLayer = (cosmosUrl, dbName) => Layer.effect(CosmosClient, makeCosmosClient(cosmosUrl, dbName));
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29zbW9zLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hZGFwdGVycy9jb3Ntb3MtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLElBQUksWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVuRCxNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBRTVFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxFQUFFLENBQzlELE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFJbEUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQWUsd0JBQXdCLENBQUMsQ0FBQTtBQUV0RixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUV2RCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFNBQWlCLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FDckUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUEifQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/adapters/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYWRhcHRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,8 @@
1
+ export declare const InfraLogger: {
2
+ logWarning: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
3
+ logError: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
4
+ logFatal: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
5
+ logInfo: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
6
+ logDebug: (...message: ReadonlyArray<any>) => import("effect/Effect").Effect<void, never, never>;
7
+ };
8
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/services/adapters/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW;iBAC0H,GAAG;eAAkF,GAAG;eAAkF,GAAG;cAAiF,GAAG;eAAkF,GAAG;CADza,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { makeLog } from "effect-app/utils/logger";
2
+ export const InfraLogger = makeLog("@effect-app/infra", "info");
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2FkYXB0ZXJzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFFakQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQSJ9
@@ -0,0 +1,34 @@
1
+ import { Context, Effect, type Queue } from "effect-app";
2
+ declare const MemQueue_base: (abstract new (service: {
3
+ getOrCreateQueue: (k: string) => Effect.Effect<Queue.Queue<string>, never, never>;
4
+ }) => Readonly<{
5
+ getOrCreateQueue: (k: string) => Effect.Effect<Queue.Queue<string>, never, never>;
6
+ }> & Context.TagClassShape<"effect-app/MemQueue", {
7
+ getOrCreateQueue: (k: string) => Effect.Effect<Queue.Queue<string>, never, never>;
8
+ }>) & {
9
+ toLayer: {
10
+ (): import("effect/Layer").Layer<MemQueue, never, never>;
11
+ <E_1, R_1>(eff: Effect.Effect<Omit<MemQueue, keyof Context.TagClassShape<any, any>>, E_1, R_1>): import("effect/Layer").Layer<MemQueue, E_1, R_1>;
12
+ };
13
+ toLayerScoped: {
14
+ (): import("effect/Layer").Layer<MemQueue, never, never>;
15
+ <E_1, R_2>(eff: Effect.Effect<Context.TagClassShape<any, any>, E_1, R_2>): import("effect/Layer").Layer<MemQueue, E_1, Exclude<R_2, import("effect/Scope").Scope>>;
16
+ };
17
+ of: (service: Context.TagClassShape<any, any>) => MemQueue;
18
+ make: Effect.Effect<MemQueue, never, never>;
19
+ } & Context.Tag<MemQueue, MemQueue> & {
20
+ getOrCreateQueue: (k: string) => Effect.Effect<Queue.Queue<string>, never, MemQueue>;
21
+ } & {
22
+ use: <X>(body: (_: {
23
+ getOrCreateQueue: (k: string) => Effect.Effect<Queue.Queue<string>, never, never>;
24
+ }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, R_4 | MemQueue> : Effect.Effect<X, never, MemQueue>;
25
+ };
26
+ /**
27
+ * @tsplus type MemQueue
28
+ * @tsplus companion MemQueue.Ops
29
+ */
30
+ export declare class MemQueue extends MemQueue_base {
31
+ static readonly Live: import("effect/Layer").Layer<MemQueue, never, never>;
32
+ }
33
+ export {};
34
+ //# sourceMappingURL=memQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memQueue.d.ts","sourceRoot":"","sources":["../../../src/services/adapters/memQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAA;;0BAQ5B,MAAM;;0BAAN,MAAM;;0BAAN,MAAM;;;;;;;;;;;;;;;;8BAAN,MAAM;;;AAWlC;;;GAGG;AACH,qBAAa,QAAS,SAAQ,aAA0D;IACtF,MAAM,CAAC,QAAQ,CAAC,IAAI,uDAAiB;CACtC"}
@@ -0,0 +1,24 @@
1
+ import { Context, Effect } from "effect-app";
2
+ import * as Q from "effect/Queue";
3
+ const make = Effect
4
+ .gen(function* () {
5
+ const store = yield* Effect.sync(() => new Map());
6
+ return {
7
+ getOrCreateQueue: (k) => Effect.gen(function* () {
8
+ const q = store.get(k);
9
+ if (q)
10
+ return q;
11
+ const newQ = yield* Q.unbounded();
12
+ store.set(k, newQ);
13
+ return newQ;
14
+ })
15
+ };
16
+ });
17
+ /**
18
+ * @tsplus type MemQueue
19
+ * @tsplus companion MemQueue.Ops
20
+ */
21
+ export class MemQueue extends Context.TagMakeId("effect-app/MemQueue", make)() {
22
+ static Live = this.toLayer();
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtUXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYWRhcHRlcnMvbWVtUXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQWMsTUFBTSxZQUFZLENBQUE7QUFDeEQsT0FBTyxLQUFLLENBQUMsTUFBTSxjQUFjLENBQUE7QUFFakMsTUFBTSxJQUFJLEdBQUcsTUFBTTtLQUNoQixHQUFHLENBQUMsUUFBUSxDQUFDO0lBQ1osTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBK0IsQ0FBQyxDQUFBO0lBRTlFLE9BQU87UUFDTCxnQkFBZ0IsRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFFLENBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDdEIsSUFBSSxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ2YsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBVSxDQUFBO1lBQ3pDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO1lBQ2xCLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQyxDQUFDO0tBQ0wsQ0FBQTtBQUNILENBQUMsQ0FBQyxDQUFBO0FBRUo7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFFBQVMsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxFQUFZO0lBQ3RGLE1BQU0sQ0FBVSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBIn0=
@@ -0,0 +1,10 @@
1
+ import { Context, Effect, Layer } from "effect-app";
2
+ declare const makeMongoClient: (url: string, dbName?: string) => Effect.Effect<{
3
+ db: import("mongodb").Db;
4
+ }, never, import("effect/Scope").Scope>;
5
+ export interface MongoClient extends Effect.Success<ReturnType<typeof makeMongoClient>> {
6
+ }
7
+ export declare const MongoClient: Context.Tag<MongoClient, MongoClient>;
8
+ export declare const MongoClientLive: (mongoUrl: string, dbName?: string) => Layer.Layer<MongoClient, never, never>;
9
+ export {};
10
+ //# sourceMappingURL=mongo-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongo-client.d.ts","sourceRoot":"","sources":["../../../src/services/adapters/mongo-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAenD,QAAA,MAAM,eAAe,QAAS,MAAM,WAAW,MAAM;;uCAA+D,CAAA;AAEpH,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;CAAG;AAE1F,eAAO,MAAM,WAAW,uCAA2D,CAAA;AAEnF,eAAO,MAAM,eAAe,aAAc,MAAM,WAAW,MAAM,2CACH,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { Context, Effect, Layer } from "effect-app";
2
+ import { MongoClient as MongoClient_ } from "mongodb";
3
+ // TODO: we should probably share a single client...
4
+ const withClient = (url) => Effect.acquireRelease(Effect
5
+ .promise(() => {
6
+ const client = new MongoClient_(url);
7
+ return client.connect();
8
+ }), (cl) => Effect.promise(() => cl.close()).pipe(Effect.uninterruptible, Effect.orDie));
9
+ const makeMongoClient = (url, dbName) => Effect.map(withClient(url), (x) => ({ db: x.db(dbName) }));
10
+ export const MongoClient = Context.GenericTag("@services/MongoClient");
11
+ export const MongoClientLive = (mongoUrl, dbName) => Layer.scoped(MongoClient, makeMongoClient(mongoUrl, dbName));
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ28tY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2FkYXB0ZXJzL21vbmdvLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDbkQsT0FBTyxFQUFFLFdBQVcsSUFBSSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFFckQsb0RBQW9EO0FBRXBELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDakMsTUFBTSxDQUFDLGNBQWMsQ0FDbkIsTUFBTTtLQUNILE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUN6QixDQUFDLENBQUMsRUFDSixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQ3BGLENBQUE7QUFFSCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQVcsRUFBRSxNQUFlLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7QUFJcEgsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQWMsdUJBQXVCLENBQUMsQ0FBQTtBQUVuRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFnQixFQUFFLE1BQWUsRUFBRSxFQUFFLENBQ25FLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQSJ9
@@ -0,0 +1,29 @@
1
+ import { Context, Effect, Layer, Option } from "effect-app";
2
+ import type { RedisClient as Client } from "redis";
3
+ import Redlock from "redlock";
4
+ declare const ConnectionException_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
5
+ readonly _tag: "ConnectionException";
6
+ } & Readonly<A>;
7
+ export declare class ConnectionException extends ConnectionException_base<{
8
+ cause: Error;
9
+ message: string;
10
+ }> {
11
+ constructor(cause: Error);
12
+ }
13
+ export declare const makeRedisClient: (makeClient: () => Client) => Effect.Effect<{
14
+ client: Client;
15
+ lock: Redlock;
16
+ get: (key: string) => Effect.Effect<Option<string>, ConnectionException, never>;
17
+ hget: (key: string, field: string) => Effect.Effect<Option<string>, ConnectionException, never>;
18
+ hset: (key: string, field: string, value: string) => Effect.Effect<void, ConnectionException, never>;
19
+ hmgetAll: (key: string) => Effect.Effect<Option<{
20
+ [key: string]: string;
21
+ }>, ConnectionException, never>;
22
+ set: (key: string, val: string) => Effect.Effect<void, ConnectionException, never>;
23
+ }, never, import("effect/Scope").Scope>;
24
+ export interface RedisClient extends Effect.Success<ReturnType<typeof makeRedisClient>> {
25
+ }
26
+ export declare const RedisClient: Context.Tag<RedisClient, RedisClient>;
27
+ export declare const RedisClientLayer: (storageUrl: string) => Layer.Layer<RedisClient, never, never>;
28
+ export {};
29
+ //# sourceMappingURL=redis-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-client.d.ts","sourceRoot":"","sources":["../../../src/services/adapters/redis-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,KAAK,EAAE,WAAW,IAAI,MAAM,EAAE,MAAM,OAAO,CAAA;AAClD,OAAO,OAAO,MAAM,SAAS,CAAA;;;;AAE7B,qBAAa,mBAAoB,SAAQ,yBAAwC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;gBACrG,KAAK,EAAE,KAAK;CAGzB;AAED,eAAO,MAAM,eAAe,eAAgB,MAAM,MAAM;;;eAO9B,MAAM;gBAiCL,MAAM,SAAS,MAAM;gBAXrB,MAAM,SAAS,MAAM,SAAS,MAAM;oBAqBhC,MAAM;;;eAhCX,MAAM,OAAO,MAAM;uCA8D1C,CAAA;AAEH,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;CAAG;AAE1F,eAAO,MAAM,WAAW,uCAA2D,CAAA;AAEnF,eAAO,MAAM,gBAAgB,eAAgB,MAAM,2CACgB,CAAA"}
@@ -0,0 +1,93 @@
1
+ import { Context, Data, Effect, Layer, Option } from "effect-app";
2
+ import Redlock from "redlock";
3
+ export class ConnectionException extends Data.TaggedError("ConnectionException") {
4
+ constructor(cause) {
5
+ super({ message: "A connection error ocurred", cause });
6
+ }
7
+ }
8
+ export const makeRedisClient = (makeClient) => Effect.acquireRelease(Effect
9
+ .sync(() => {
10
+ const client = createClient(makeClient);
11
+ const lock = new Redlock([client]);
12
+ function get(key) {
13
+ return Effect
14
+ .async((res) => {
15
+ client.get(key, (err, v) => err
16
+ ? res(new ConnectionException(err))
17
+ : res(Effect.sync(() => Option.fromNullable(v))));
18
+ })
19
+ .pipe(Effect.uninterruptible);
20
+ }
21
+ function set(key, val) {
22
+ return Effect
23
+ .async((res) => {
24
+ client.set(key, val, (err) => err
25
+ ? res(new ConnectionException(err))
26
+ : res(Effect.sync(() => void 0)));
27
+ })
28
+ .pipe(Effect.uninterruptible);
29
+ }
30
+ function hset(key, field, value) {
31
+ return Effect
32
+ .async((res) => {
33
+ client.hset(key, field, value, (err) => err
34
+ ? res(new ConnectionException(err))
35
+ : res(Effect.sync(() => void 0)));
36
+ })
37
+ .pipe(Effect.uninterruptible);
38
+ }
39
+ function hget(key, field) {
40
+ return Effect
41
+ .async((res) => {
42
+ client.hget(key, field, (err, v) => err
43
+ ? res(new ConnectionException(err))
44
+ : res(Effect.sync(() => Option.fromNullable(v))));
45
+ })
46
+ .pipe(Effect.uninterruptible);
47
+ }
48
+ function hmgetAll(key) {
49
+ return Effect
50
+ .async((res) => {
51
+ client.hgetall(key, (err, v) => err
52
+ ? res(new ConnectionException(err))
53
+ : res(Effect.sync(() => Option.fromNullable(v))));
54
+ })
55
+ .pipe(Effect.uninterruptible);
56
+ }
57
+ return {
58
+ client,
59
+ lock,
60
+ get,
61
+ hget,
62
+ hset,
63
+ hmgetAll,
64
+ set
65
+ };
66
+ }), (cl) => Effect
67
+ .async((res) => {
68
+ cl.client.quit((err) => res(err ? Effect.fail(err) : Effect.void));
69
+ })
70
+ .pipe(Effect.uninterruptible, Effect.orDie));
71
+ export const RedisClient = Context.GenericTag("@services/RedisClient");
72
+ export const RedisClientLayer = (storageUrl) => Layer.scoped(RedisClient, makeRedisClient(makeRedis(storageUrl)));
73
+ function createClient(makeClient) {
74
+ const client = makeClient();
75
+ client.on("error", (error) => {
76
+ console.error(error);
77
+ });
78
+ return client;
79
+ }
80
+ function makeRedis(storageUrl) {
81
+ const url = new URL(storageUrl);
82
+ const hostname = url.hostname;
83
+ const password = url.password;
84
+ return () => createClient(storageUrl === "redis://"
85
+ ? {
86
+ host: hostname,
87
+ port: 6380,
88
+ auth_pass: password,
89
+ tls: { servername: hostname }
90
+ }
91
+ : storageUrl);
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL2FkYXB0ZXJzL3JlZGlzLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVqRSxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUE7QUFFN0IsTUFBTSxPQUFPLG1CQUFvQixTQUFRLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQW9DO0lBQ2pILFlBQVksS0FBWTtRQUN0QixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxVQUF3QixFQUFFLEVBQUUsQ0FDMUQsTUFBTSxDQUFDLGNBQWMsQ0FDbkIsTUFBTTtLQUNILElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDVCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBRWxDLFNBQVMsR0FBRyxDQUFDLEdBQVc7UUFDdEIsT0FBTyxNQUFNO2FBQ1YsS0FBSyxDQUFzQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3pCLEdBQUc7Z0JBQ0QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxD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
package/package.json CHANGED
@@ -1,29 +1,24 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
7
- "@azure/cosmos": "^4.1.1",
8
- "@azure/service-bus": "^7.9.5",
9
- "@effect/rpc": "^0.44.2",
10
- "@effect/rpc-http": "^0.42.2",
11
- "express-oauth2-jwt-bearer": "^1.6.0",
12
7
  "@faker-js/faker": "^8.4.1",
13
- "@sendgrid/helpers": "^8.0.0",
14
- "@sendgrid/mail": "^8.1.4",
15
8
  "change-case": "^5.4.4",
16
9
  "cross-fetch": "^4.0.0",
10
+ "express-oauth2-jwt-bearer": "^1.6.0",
17
11
  "fast-check": "~3.22.0",
18
12
  "object-hash": "^3.0.0",
19
13
  "path-parser": "^6.1.0",
20
14
  "proper-lockfile": "^4.1.2",
21
15
  "pure-rand": "6.1.0",
22
- "redlock": "^4.2.0",
23
- "@effect-app/infra-adapters": "2.0.1",
16
+ "query-string": "^9.1.1",
24
17
  "effect-app": "2.0.1"
25
18
  },
26
19
  "devDependencies": {
20
+ "@azure/cosmos": "^4.1.1",
21
+ "@azure/service-bus": "^7.9.5",
27
22
  "@babel/cli": "^7.25.7",
28
23
  "@sentry/node": "^8.35.0",
29
24
  "@types/express": "^5.0.0",
@@ -36,15 +31,26 @@
36
31
  "jwt-decode": "^4.0.0",
37
32
  "mongodb": "6.10.0",
38
33
  "redis": "^3.1.2",
34
+ "redlock": "^4.2.0",
35
+ "strip-ansi": "^7.1.0",
39
36
  "typescript": "^5.6.3",
40
37
  "vitest": "^2.1.3"
41
38
  },
42
39
  "peerDependencies": {
43
- "express": "^4.21.1",
40
+ "@azure/cosmos": "^4.1.1",
41
+ "@azure/service-bus": "^7.9.5",
42
+ "@effect/experimental": "^0.30.3",
44
43
  "@effect/platform": "^0.69.2",
44
+ "@effect/rpc-http": "^0.42.2",
45
+ "@effect/rpc": "^0.44.2",
45
46
  "@effect/sql": "^0.18.3",
46
47
  "@effect/vitest": "^0.13.0",
47
- "effect": "^3.10.0"
48
+ "@sendgrid/helpers": "^8.0.0",
49
+ "@sendgrid/mail": "^8.1.4",
50
+ "redis": "^3.1.2",
51
+ "redlock": "^4.2.0",
52
+ "effect": "^3.10.0",
53
+ "express": "^4.21.1"
48
54
  },
49
55
  "typesVersions": {
50
56
  "*": {
@@ -204,6 +210,16 @@
204
210
  "default": "./_cjs/errors.cjs"
205
211
  }
206
212
  },
213
+ "./fileUtil": {
214
+ "import": {
215
+ "types": "./dist/fileUtil.d.ts",
216
+ "default": "./dist/fileUtil.js"
217
+ },
218
+ "require": {
219
+ "types": "./dist/fileUtil.d.ts",
220
+ "default": "./_cjs/fileUtil.cjs"
221
+ }
222
+ },
207
223
  "./filter/types": {
208
224
  "import": {
209
225
  "types": "./dist/filter/types.d.ts",
@@ -334,6 +350,16 @@
334
350
  "default": "./_cjs/rateLimit.cjs"
335
351
  }
336
352
  },
353
+ "./services/CUPS": {
354
+ "import": {
355
+ "types": "./dist/services/CUPS.d.ts",
356
+ "default": "./dist/services/CUPS.js"
357
+ },
358
+ "require": {
359
+ "types": "./dist/services/CUPS.d.ts",
360
+ "default": "./_cjs/services/CUPS.cjs"
361
+ }
362
+ },
337
363
  "./services/Emailer": {
338
364
  "import": {
339
365
  "types": "./dist/services/Emailer.d.ts",
@@ -624,6 +650,96 @@
624
650
  "default": "./_cjs/services/Store/utils.cjs"
625
651
  }
626
652
  },
653
+ "./services/adapters/SQL": {
654
+ "import": {
655
+ "types": "./dist/services/adapters/SQL.d.ts",
656
+ "default": "./dist/services/adapters/SQL.js"
657
+ },
658
+ "require": {
659
+ "types": "./dist/services/adapters/SQL.d.ts",
660
+ "default": "./_cjs/services/adapters/SQL.cjs"
661
+ }
662
+ },
663
+ "./services/adapters/SQL/Model": {
664
+ "import": {
665
+ "types": "./dist/services/adapters/SQL/Model.d.ts",
666
+ "default": "./dist/services/adapters/SQL/Model.js"
667
+ },
668
+ "require": {
669
+ "types": "./dist/services/adapters/SQL/Model.d.ts",
670
+ "default": "./_cjs/services/adapters/SQL/Model.cjs"
671
+ }
672
+ },
673
+ "./services/adapters/ServiceBus": {
674
+ "import": {
675
+ "types": "./dist/services/adapters/ServiceBus.d.ts",
676
+ "default": "./dist/services/adapters/ServiceBus.js"
677
+ },
678
+ "require": {
679
+ "types": "./dist/services/adapters/ServiceBus.d.ts",
680
+ "default": "./_cjs/services/adapters/ServiceBus.cjs"
681
+ }
682
+ },
683
+ "./services/adapters/cosmos-client": {
684
+ "import": {
685
+ "types": "./dist/services/adapters/cosmos-client.d.ts",
686
+ "default": "./dist/services/adapters/cosmos-client.js"
687
+ },
688
+ "require": {
689
+ "types": "./dist/services/adapters/cosmos-client.d.ts",
690
+ "default": "./_cjs/services/adapters/cosmos-client.cjs"
691
+ }
692
+ },
693
+ "./services/adapters/index": {
694
+ "import": {
695
+ "types": "./dist/services/adapters/index.d.ts",
696
+ "default": "./dist/services/adapters/index.js"
697
+ },
698
+ "require": {
699
+ "types": "./dist/services/adapters/index.d.ts",
700
+ "default": "./_cjs/services/adapters/index.cjs"
701
+ }
702
+ },
703
+ "./services/adapters/logger": {
704
+ "import": {
705
+ "types": "./dist/services/adapters/logger.d.ts",
706
+ "default": "./dist/services/adapters/logger.js"
707
+ },
708
+ "require": {
709
+ "types": "./dist/services/adapters/logger.d.ts",
710
+ "default": "./_cjs/services/adapters/logger.cjs"
711
+ }
712
+ },
713
+ "./services/adapters/memQueue": {
714
+ "import": {
715
+ "types": "./dist/services/adapters/memQueue.d.ts",
716
+ "default": "./dist/services/adapters/memQueue.js"
717
+ },
718
+ "require": {
719
+ "types": "./dist/services/adapters/memQueue.d.ts",
720
+ "default": "./_cjs/services/adapters/memQueue.cjs"
721
+ }
722
+ },
723
+ "./services/adapters/mongo-client": {
724
+ "import": {
725
+ "types": "./dist/services/adapters/mongo-client.d.ts",
726
+ "default": "./dist/services/adapters/mongo-client.js"
727
+ },
728
+ "require": {
729
+ "types": "./dist/services/adapters/mongo-client.d.ts",
730
+ "default": "./_cjs/services/adapters/mongo-client.cjs"
731
+ }
732
+ },
733
+ "./services/adapters/redis-client": {
734
+ "import": {
735
+ "types": "./dist/services/adapters/redis-client.d.ts",
736
+ "default": "./dist/services/adapters/redis-client.js"
737
+ },
738
+ "require": {
739
+ "types": "./dist/services/adapters/redis-client.d.ts",
740
+ "default": "./_cjs/services/adapters/redis-client.cjs"
741
+ }
742
+ },
627
743
  "./services/query": {
628
744
  "import": {
629
745
  "types": "./dist/services/query.d.ts",
@@ -1,6 +1,5 @@
1
1
  import { Effect } from "effect-app"
2
2
  import { HttpMiddleware, HttpServerRequest, HttpServerResponse } from "effect-app/http"
3
- import { RequestId } from "effect-app/ids"
4
3
  import { NonEmptyString255 } from "effect-app/Schema"
5
4
  import { Locale, RequestContext } from "../../RequestContext.js"
6
5
  import { setupRequestContext } from "../setupRequest.js"
@@ -24,8 +23,8 @@ export const RequestContextMiddleware = (defaultLocale: Locale = "en") =>
24
23
 
25
24
  const requestContext = new RequestContext({
26
25
  span: {
27
- traceId: RequestId(currentSpan.traceId),
28
- spanId: RequestId(currentSpan.spanId),
26
+ traceId: currentSpan.traceId,
27
+ spanId: currentSpan.spanId,
29
28
  sampled: currentSpan.sampled
30
29
  },
31
30
  name: NonEmptyString255(req.originalUrl), // set more detailed elsewhere
@@ -1,8 +1,8 @@
1
- import { setupRequestContextFromCurrent } from "@effect-app/infra/api/setupRequest"
2
- import { reportError } from "@effect-app/infra/errorReporter"
3
1
  import { Duration, Effect, pipe, S, Schedule, Stream } from "effect-app"
4
2
  import { HttpHeaders, HttpServerResponse } from "effect-app/http"
3
+ import { reportError } from "../../errorReporter.js"
5
4
  import { InfraLogger } from "../../logger.js"
5
+ import { setupRequestContextFromCurrent } from "../setupRequest.js"
6
6
 
7
7
  // Tell the client to retry every 10 seconds if connectivity is lost
8
8
  const setRetry = Stream.succeed("retry: 10000")
@@ -1,5 +1,4 @@
1
- import type { Tracer } from "effect-app"
2
- import { Effect, FiberRef, Layer } from "effect-app"
1
+ import { Effect, FiberRef, Layer, Tracer } from "effect-app"
3
2
  import { NonEmptyString255 } from "effect-app/Schema"
4
3
  import { LocaleRef, RequestContext, spanAttributes } from "../RequestContext.js"
5
4
  import { startContextMap } from "../services/Store/ContextMapContainer.js"
@@ -14,7 +13,7 @@ export const getRequestContext = Effect
14
13
  .pipe(
15
14
  Effect.map(({ locale, namespace, span }) =>
16
15
  new RequestContext({
17
- span,
16
+ span: Tracer.externalSpan(span),
18
17
  locale,
19
18
  namespace,
20
19
  // TODO: get through span context, or don't care at all.