@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.
- package/CHANGELOG.md +12 -0
- package/_cjs/api/internal/RequestContextMiddleware.cjs +2 -3
- package/_cjs/api/internal/RequestContextMiddleware.cjs.map +1 -1
- package/_cjs/api/internal/events.cjs +2 -2
- package/_cjs/api/internal/events.cjs.map +1 -1
- package/_cjs/api/setupRequest.cjs +1 -1
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/fileUtil.cjs +48 -0
- package/_cjs/fileUtil.cjs.map +1 -0
- package/_cjs/logger/shared.cjs +2 -2
- package/_cjs/logger/shared.cjs.map +1 -1
- package/_cjs/services/CUPS.cjs +118 -0
- package/_cjs/services/CUPS.cjs.map +1 -0
- package/_cjs/services/QueueMaker/SQLQueue.cjs +1 -1
- package/_cjs/services/QueueMaker/SQLQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +1 -1
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +1 -1
- package/_cjs/services/adapters/SQL/Model.cjs +500 -0
- package/_cjs/services/adapters/SQL/Model.cjs.map +1 -0
- package/_cjs/services/adapters/SQL.cjs +11 -0
- package/_cjs/services/adapters/SQL.cjs.map +1 -0
- package/_cjs/services/adapters/ServiceBus.cjs +76 -0
- package/_cjs/services/adapters/ServiceBus.cjs.map +1 -0
- package/_cjs/services/adapters/cosmos-client.cjs +18 -0
- package/_cjs/services/adapters/cosmos-client.cjs.map +1 -0
- package/_cjs/services/adapters/index.cjs +6 -0
- package/_cjs/services/adapters/index.cjs.map +1 -0
- package/_cjs/services/adapters/logger.cjs +9 -0
- package/_cjs/services/adapters/logger.cjs.map +1 -0
- package/_cjs/services/adapters/memQueue.cjs +31 -0
- package/_cjs/services/adapters/memQueue.cjs.map +1 -0
- package/_cjs/services/adapters/mongo-client.cjs +20 -0
- package/_cjs/services/adapters/mongo-client.cjs.map +1 -0
- package/_cjs/services/adapters/redis-client.cjs +83 -0
- package/_cjs/services/adapters/redis-client.cjs.map +1 -0
- package/dist/api/internal/RequestContextMiddleware.d.ts.map +1 -1
- package/dist/api/internal/RequestContextMiddleware.js +3 -4
- package/dist/api/internal/events.d.ts.map +1 -1
- package/dist/api/internal/events.js +3 -3
- package/dist/api/setupRequest.d.ts +1 -2
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +3 -3
- package/dist/fileUtil.d.ts +23 -0
- package/dist/fileUtil.d.ts.map +1 -0
- package/dist/fileUtil.js +41 -0
- package/dist/logger/shared.d.ts.map +1 -1
- package/dist/logger/shared.js +2 -2
- package/dist/services/CUPS.d.ts +26 -0
- package/dist/services/CUPS.d.ts.map +1 -0
- package/dist/services/CUPS.js +111 -0
- package/dist/services/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/SQLQueue.js +2 -2
- package/dist/services/QueueMaker/memQueue.d.ts +1 -1
- package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/memQueue.js +2 -2
- package/dist/services/QueueMaker/sbqueue.d.ts +3 -3
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +2 -2
- package/dist/services/Store/Cosmos.d.ts.map +1 -1
- package/dist/services/Store/Cosmos.js +2 -2
- package/dist/services/Store/Disk.js +2 -2
- package/dist/services/adapters/SQL/Model.d.ts +538 -0
- package/dist/services/adapters/SQL/Model.d.ts.map +1 -0
- package/dist/services/adapters/SQL/Model.js +508 -0
- package/dist/services/adapters/SQL.d.ts +2 -0
- package/dist/services/adapters/SQL.d.ts.map +1 -0
- package/dist/services/adapters/SQL.js +2 -0
- package/dist/services/adapters/ServiceBus.d.ts +50 -0
- package/dist/services/adapters/ServiceBus.d.ts.map +1 -0
- package/dist/services/adapters/ServiceBus.js +73 -0
- package/dist/services/adapters/cosmos-client.d.ts +10 -0
- package/dist/services/adapters/cosmos-client.d.ts.map +1 -0
- package/dist/services/adapters/cosmos-client.js +8 -0
- package/dist/services/adapters/index.d.ts +2 -0
- package/dist/services/adapters/index.d.ts.map +1 -0
- package/dist/services/adapters/index.js +2 -0
- package/dist/services/adapters/logger.d.ts +8 -0
- package/dist/services/adapters/logger.d.ts.map +1 -0
- package/dist/services/adapters/logger.js +3 -0
- package/dist/services/adapters/memQueue.d.ts +34 -0
- package/dist/services/adapters/memQueue.d.ts.map +1 -0
- package/dist/services/adapters/memQueue.js +24 -0
- package/dist/services/adapters/mongo-client.d.ts +10 -0
- package/dist/services/adapters/mongo-client.d.ts.map +1 -0
- package/dist/services/adapters/mongo-client.js +12 -0
- package/dist/services/adapters/redis-client.d.ts +29 -0
- package/dist/services/adapters/redis-client.d.ts.map +1 -0
- package/dist/services/adapters/redis-client.js +93 -0
- package/package.json +128 -12
- package/src/api/internal/RequestContextMiddleware.ts +2 -3
- package/src/api/internal/events.ts +2 -2
- package/src/api/setupRequest.ts +2 -3
- package/src/fileUtil.ts +85 -0
- package/src/logger/shared.ts +2 -3
- package/src/services/CUPS.ts +151 -0
- package/src/services/QueueMaker/SQLQueue.ts +1 -1
- package/src/services/QueueMaker/memQueue.ts +1 -1
- package/src/services/QueueMaker/sbqueue.ts +7 -7
- package/src/services/Store/Cosmos.ts +1 -1
- package/src/services/Store/Disk.ts +1 -1
- package/src/services/adapters/SQL/Model.ts +939 -0
- package/src/services/adapters/SQL.ts +1 -0
- package/src/services/adapters/ServiceBus.ts +140 -0
- package/src/services/adapters/cosmos-client.ts +16 -0
- package/src/services/adapters/index.ts +0 -0
- package/src/services/adapters/logger.ts +3 -0
- package/src/services/adapters/memQueue.ts +26 -0
- package/src/services/adapters/mongo-client.ts +23 -0
- package/src/services/adapters/redis-client.ts +123 -0
- package/tsconfig.src.json +0 -3
- package/src/services/Store/Redis.ts.bak +0 -88
- package/src/services/simpledb/cosmosdb.ts.bak +0 -149
- package/src/services/simpledb/diskdb.ts.bak +0 -165
- package/src/services/simpledb/index.ts.bak +0 -6
- package/src/services/simpledb/memdb.ts.bak +0 -78
- package/src/services/simpledb/mongodb.ts.bak +0 -107
- package/src/services/simpledb/redisdb.ts.bak +0 -202
- package/src/services/simpledb/shared.ts.bak +0 -117
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/adapters/index.ts"],"names":[],"mappings":""}
|
|
@@ -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
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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:
|
|
28
|
-
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")
|
package/src/api/setupRequest.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
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.
|