@effect-app/infra 0.85.0-next.4 → 0.85.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 +3 -36
- package/_cjs/_ext/Array.cjs +2 -3
- package/_cjs/_ext/Array.cjs.map +1 -1
- package/_cjs/api/defaultErrorHandler.cjs +10 -11
- package/_cjs/api/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.cjs +2 -3
- package/_cjs/api/express/makeJsonSchema.cjs.map +1 -1
- package/_cjs/api/express/makeJsonSchema.test.cjs +2 -2
- package/_cjs/api/express/makeJsonSchema.test.cjs.map +1 -1
- package/_cjs/api/express/makeOpenApiSpecs.cjs +4 -6
- package/_cjs/api/express/makeOpenApiSpecs.cjs.map +1 -1
- package/_cjs/api/express/schema/routing.cjs +22 -23
- package/_cjs/api/express/schema/routing.cjs.map +1 -1
- package/_cjs/api/reportError.cjs +2 -2
- package/_cjs/api/setupRequest.cjs +4 -5
- package/_cjs/api/setupRequest.cjs.map +1 -1
- package/_cjs/api/writeDocs.cjs +4 -6
- package/_cjs/api/writeDocs.cjs.map +1 -1
- package/_cjs/errorReporter.cjs +11 -12
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/errors.cjs +8 -8
- package/_cjs/errors.cjs.map +1 -1
- package/_cjs/instrument.cjs +1 -2
- package/_cjs/instrument.cjs.map +1 -1
- package/_cjs/logger/jsonLogger.cjs +10 -11
- package/_cjs/logger/jsonLogger.cjs.map +1 -1
- package/_cjs/logger/logFmtLogger.cjs +5 -5
- package/_cjs/logger/logFmtLogger.cjs.map +1 -1
- package/_cjs/logger/shared.cjs +4 -4
- package/_cjs/logger/shared.cjs.map +1 -1
- package/_cjs/rateLimit.cjs +7 -8
- package/_cjs/rateLimit.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs +12 -14
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/Emailer/fake.cjs +4 -5
- package/_cjs/services/Emailer/fake.cjs.map +1 -1
- package/_cjs/services/Operations/live.cjs +29 -31
- package/_cjs/services/Operations/live.cjs.map +1 -1
- package/_cjs/services/Operations/service.cjs +5 -6
- package/_cjs/services/Operations/service.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +6 -7
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs +17 -18
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs +15 -16
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/Repository.cjs +16 -17
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/RepositoryBase.cjs +33 -35
- package/_cjs/services/RepositoryBase.cjs.map +1 -1
- package/_cjs/services/RequestContextContainer.cjs +20 -15
- package/_cjs/services/RequestContextContainer.cjs.map +1 -1
- package/_cjs/services/Store/Cosmos.cjs +46 -49
- package/_cjs/services/Store/Cosmos.cjs.map +1 -1
- package/_cjs/services/Store/Disk.cjs +18 -19
- package/_cjs/services/Store/Disk.cjs.map +1 -1
- package/_cjs/services/Store/Memory.cjs +39 -43
- package/_cjs/services/Store/Memory.cjs.map +1 -1
- package/_cjs/services/Store/Redis.cjs +14 -16
- package/_cjs/services/Store/Redis.cjs.map +1 -1
- package/_cjs/services/Store/codeFilter.test.cjs +1 -1
- package/_cjs/services/Store/index.cjs +6 -7
- package/_cjs/services/Store/index.cjs.map +1 -1
- package/_cjs/services/Store/service.cjs +1 -1
- package/_cjs/services/Store/service.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs +13 -13
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +17 -19
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/diskdb.cjs +8 -9
- package/_cjs/services/simpledb/diskdb.cjs.map +1 -1
- package/_cjs/services/simpledb/memdb.cjs +9 -11
- package/_cjs/services/simpledb/memdb.cjs.map +1 -1
- package/_cjs/services/simpledb/mongodb.cjs +18 -20
- package/_cjs/services/simpledb/mongodb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs +10 -11
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/shared.cjs +5 -5
- package/_cjs/services/simpledb/shared.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +17 -18
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/api/authorization.jwt.ts +1 -1
- package/_src/api/defaultErrorHandler.ts +2 -2
- package/_src/api/express/routing.ts.bak +8 -8
- package/_src/api/express/schema/routing.ts +59 -37
- package/_src/api/setupRequest.ts +11 -10
- package/_src/errorReporter.ts +1 -1
- package/_src/services/Emailer/Sendgrid.ts +1 -1
- package/_src/services/Operations/live.ts +5 -5
- package/_src/services/QueueMaker/errors.ts +1 -1
- package/_src/services/QueueMaker/memQueue.ts +2 -2
- package/_src/services/QueueMaker/sbqueue.ts +1 -1
- package/_src/services/Repository.ts +9 -9
- package/_src/services/RepositoryBase.ts +6 -8
- package/_src/services/RequestContextContainer.ts +12 -7
- package/_src/services/Store/Cosmos.ts +12 -17
- package/_src/services/Store/Disk.ts +4 -4
- package/_src/services/Store/Memory.ts +4 -4
- package/_src/services/Store/Redis.ts +1 -1
- package/_src/services/Store/index.test.ts.bak +5 -5
- package/_src/services/Store/index.ts +1 -1
- package/_src/services/Store/utils.ts +16 -16
- package/_src/services/simpledb/diskdb.ts +1 -1
- package/_src/services/simpledb/memdb.ts +1 -1
- package/_src/services/simpledb/redisdb.ts +1 -1
- package/_src/services/simpledb/shared.ts +1 -1
- package/_src/services/simpledb/simpledb.ts +3 -3
- package/dist/RequestContext.d.ts +4 -4
- package/dist/_ext/Array.d.ts +1 -1
- package/dist/_ext/Array.d.ts.map +1 -1
- package/dist/_ext/Array.js +3 -4
- package/dist/api/codec.d.ts +1 -1
- package/dist/api/codec.d.ts.map +1 -1
- package/dist/api/defaultErrorHandler.d.ts +2 -2
- package/dist/api/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/defaultErrorHandler.js +11 -13
- package/dist/api/express/makeJsonSchema.d.ts +2 -2
- package/dist/api/express/makeJsonSchema.d.ts.map +1 -1
- package/dist/api/express/makeJsonSchema.js +3 -4
- package/dist/api/express/makeOpenApiSpecs.d.ts +1 -1
- package/dist/api/express/makeOpenApiSpecs.js +5 -7
- package/dist/api/express/schema/routing.d.ts +22 -7
- package/dist/api/express/schema/routing.d.ts.map +1 -1
- package/dist/api/express/schema/routing.js +23 -24
- package/dist/api/reportError.d.ts +5 -5
- package/dist/api/reportError.d.ts.map +1 -1
- package/dist/api/reportError.js +2 -2
- package/dist/api/setupRequest.d.ts +2 -2
- package/dist/api/setupRequest.d.ts.map +1 -1
- package/dist/api/setupRequest.js +7 -7
- package/dist/api/writeDocs.d.ts +1 -1
- package/dist/api/writeDocs.d.ts.map +1 -1
- package/dist/api/writeDocs.js +5 -7
- package/dist/errorReporter.d.ts +3 -3
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +12 -13
- package/dist/errors.d.ts +7 -7
- package/dist/errors.js +9 -9
- package/dist/instrument.d.ts +1 -1
- package/dist/instrument.d.ts.map +1 -1
- package/dist/instrument.js +2 -3
- package/dist/logger/jsonLogger.d.ts +2 -2
- package/dist/logger/jsonLogger.d.ts.map +1 -1
- package/dist/logger/jsonLogger.js +11 -12
- package/dist/logger/logFmtLogger.d.ts +2 -2
- package/dist/logger/logFmtLogger.d.ts.map +1 -1
- package/dist/logger/logFmtLogger.js +6 -6
- package/dist/logger/shared.d.ts +1 -1
- package/dist/logger/shared.d.ts.map +1 -1
- package/dist/logger/shared.js +5 -5
- package/dist/rateLimit.d.ts +3 -3
- package/dist/rateLimit.d.ts.map +1 -1
- package/dist/rateLimit.js +8 -9
- package/dist/services/Emailer/Sendgrid.d.ts +1 -1
- package/dist/services/Emailer/Sendgrid.d.ts.map +1 -1
- package/dist/services/Emailer/Sendgrid.js +15 -17
- package/dist/services/Emailer/fake.d.ts +1 -1
- package/dist/services/Emailer/fake.d.ts.map +1 -1
- package/dist/services/Emailer/fake.js +5 -6
- package/dist/services/Emailer/service.d.ts +3 -3
- package/dist/services/Operations/live.d.ts +1 -1
- package/dist/services/Operations/live.d.ts.map +1 -1
- package/dist/services/Operations/live.js +37 -39
- package/dist/services/Operations/service.d.ts +8 -8
- package/dist/services/Operations/service.d.ts.map +1 -1
- package/dist/services/Operations/service.js +12 -13
- package/dist/services/QueueMaker/errors.d.ts +3 -3
- package/dist/services/QueueMaker/errors.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +6 -7
- package/dist/services/QueueMaker/memQueue.d.ts +3 -3
- package/dist/services/QueueMaker/memQueue.js +16 -17
- package/dist/services/QueueMaker/sbqueue.d.ts +4 -4
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +15 -16
- package/dist/services/Repository.d.ts +42 -42
- package/dist/services/Repository.d.ts.map +1 -1
- package/dist/services/Repository.js +17 -18
- package/dist/services/RepositoryBase.d.ts +12 -11
- package/dist/services/RepositoryBase.d.ts.map +1 -1
- package/dist/services/RepositoryBase.js +35 -37
- package/dist/services/RequestContextContainer.d.ts +14 -11
- package/dist/services/RequestContextContainer.d.ts.map +1 -1
- package/dist/services/RequestContextContainer.js +19 -18
- package/dist/services/Store/Cosmos.d.ts +3 -3
- package/dist/services/Store/Cosmos.d.ts.map +1 -1
- package/dist/services/Store/Cosmos.js +51 -54
- package/dist/services/Store/Disk.d.ts +3 -3
- package/dist/services/Store/Disk.d.ts.map +1 -1
- package/dist/services/Store/Disk.js +19 -20
- package/dist/services/Store/Memory.d.ts +5 -5
- package/dist/services/Store/Memory.d.ts.map +1 -1
- package/dist/services/Store/Memory.js +41 -45
- package/dist/services/Store/Redis.d.ts +3 -3
- package/dist/services/Store/Redis.d.ts.map +1 -1
- package/dist/services/Store/Redis.js +15 -17
- package/dist/services/Store/index.d.ts +1 -1
- package/dist/services/Store/index.d.ts.map +1 -1
- package/dist/services/Store/index.js +7 -8
- package/dist/services/Store/service.d.ts +8 -8
- package/dist/services/Store/service.d.ts.map +1 -1
- package/dist/services/Store/service.js +2 -2
- package/dist/services/Store/utils.d.ts +2 -2
- package/dist/services/Store/utils.d.ts.map +1 -1
- package/dist/services/Store/utils.js +21 -21
- package/dist/services/simpledb/cosmosdb.d.ts +5 -5
- package/dist/services/simpledb/cosmosdb.js +17 -19
- package/dist/services/simpledb/diskdb.d.ts +4 -4
- package/dist/services/simpledb/diskdb.js +9 -10
- package/dist/services/simpledb/memdb.d.ts +4 -4
- package/dist/services/simpledb/memdb.js +11 -13
- package/dist/services/simpledb/mongodb.d.ts +5 -5
- package/dist/services/simpledb/mongodb.js +14 -16
- package/dist/services/simpledb/redisdb.d.ts +4 -4
- package/dist/services/simpledb/redisdb.js +11 -12
- package/dist/services/simpledb/shared.d.ts +4 -4
- package/dist/services/simpledb/shared.js +6 -6
- package/dist/services/simpledb/simpledb.d.ts +6 -6
- package/dist/services/simpledb/simpledb.d.ts.map +1 -1
- package/dist/services/simpledb/simpledb.js +15 -16
- package/package.json +5 -25
- package/_cjs/api/express/schema/requestHandler.cjs +0 -172
- package/_cjs/api/express/schema/requestHandler.cjs.map +0 -1
- package/_cjs/api/routing.cjs +0 -278
- package/_cjs/api/routing.cjs.map +0 -1
- package/_src/api/express/schema/requestHandler.ts +0 -372
- package/_src/api/routing.ts +0 -660
- package/dist/api/express/schema/requestHandler.d.ts +0 -71
- package/dist/api/express/schema/requestHandler.d.ts.map +0 -1
- package/dist/api/express/schema/requestHandler.js +0 -140
- package/dist/api/routing.d.ts +0 -103
- package/dist/api/routing.d.ts.map +0 -1
- package/dist/api/routing.js +0 -265
package/dist/instrument.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "@effect-app/prelude/utils";
|
|
2
2
|
import * as tsplus_module_2 from "effect/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "effect/impl/Effect";
|
|
4
3
|
/**
|
|
5
4
|
* @tsplus fluent effect/io/Effect instrument
|
|
6
5
|
*/
|
|
7
6
|
export function instr(self, name, properties) {
|
|
8
|
-
return
|
|
7
|
+
return tsplus_module_2.withLogSpan(tsplus_module_2.withSpan(tsplus_module_2.tap(self, () => tsplus_module_2.annotateLogs(tsplus_module_2.logDebug(`instrumented`), "properties", tsplus_module_1.RecordPretty(tsplus_module_1.object$((properties || {}))))), name), name);
|
|
9
8
|
// trackMetric(name, time, properties))
|
|
10
9
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL19zcmMvaW5zdHJ1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBVSxJQUFxQixFQUFFLElBQVksRUFBRSxVQUFtQztJQUNyRyxPQUFPLDRCQUFBLHlCQUFBLG9CQUFBLElBQUksRUFDSixHQUFHLEVBQUUsQ0FBQyw2QkFBQSx5QkFBZ0IsY0FBYyxDQUFDLEVBQWMsWUFBWSx1REFBRSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsR0FBVyxDQUFDLEVBQzFGLElBQUksQ0FBQyxFQUNGLElBQUksQ0FBQyxDQUFBO0lBRXBCLHVDQUF1QztBQUN6QyxDQUFDIn0=
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const jsonLogger: import("effect").Logger<unknown, void>;
|
|
2
|
-
export declare const logJson: import("effect").Layer<never, never, never>;
|
|
1
|
+
export declare const jsonLogger: import("effect/Logger").Logger<unknown, void>;
|
|
2
|
+
export declare const logJson: import("effect/Layer").Layer<never, never, never>;
|
|
3
3
|
//# sourceMappingURL=jsonLogger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonLogger.d.ts","sourceRoot":"","sources":["../../_src/logger/jsonLogger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"jsonLogger.d.ts","sourceRoot":"","sources":["../../_src/logger/jsonLogger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,+CAyBtB,CAAA;AAED,eAAO,MAAM,OAAO,mDAAmD,CAAA"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "effect/
|
|
2
|
-
import * as tsplus_module_2 from "@effect-app/core/
|
|
1
|
+
import * as tsplus_module_1 from "effect/FiberId";
|
|
2
|
+
import * as tsplus_module_2 from "@effect-app/core/Option";
|
|
3
3
|
import * as tsplus_module_3 from "effect/Cause";
|
|
4
|
-
import * as tsplus_module_4 from "effect/
|
|
5
|
-
import * as tsplus_module_5 from "effect/
|
|
6
|
-
import * as tsplus_module_6 from "effect/
|
|
7
|
-
import * as tsplus_module_7 from "effect/Logger";
|
|
4
|
+
import * as tsplus_module_4 from "effect/List";
|
|
5
|
+
import * as tsplus_module_5 from "effect/HashMap";
|
|
6
|
+
import * as tsplus_module_6 from "effect/Logger";
|
|
8
7
|
import { getRequestContext } from "./shared.js";
|
|
9
|
-
export const jsonLogger =
|
|
8
|
+
export const jsonLogger = tsplus_module_6.make(({ annotations, cause, context, fiberId, logLevel, message, spans }) => {
|
|
10
9
|
const now = new Date();
|
|
11
10
|
const nowMillis = now.getTime();
|
|
12
11
|
const c = getRequestContext(context);
|
|
@@ -16,9 +15,9 @@ export const jsonLogger = tsplus_module_7.Logger.make(({ annotations, cause, con
|
|
|
16
15
|
fiber: tsplus_module_1.threadName(fiberId),
|
|
17
16
|
message,
|
|
18
17
|
request: tsplus_module_2.getOrUndefined(c),
|
|
19
|
-
cause: cause != null && cause != tsplus_module_3.
|
|
20
|
-
spans:
|
|
21
|
-
annotations:
|
|
18
|
+
cause: cause != null && cause != tsplus_module_3.empty ? tsplus_module_3.pretty(cause) : undefined,
|
|
19
|
+
spans: tsplus_module_4.toReadonlyArray(tsplus_module_4.map(spans, (_) => ({ label: _.label, timing: nowMillis - _.startTime }))),
|
|
20
|
+
annotations: tsplus_module_5.size(annotations) > 0
|
|
22
21
|
? [...annotations].reduce((prev, [k, v]) => {
|
|
23
22
|
prev[k] = v;
|
|
24
23
|
return prev;
|
|
@@ -27,5 +26,5 @@ export const jsonLogger = tsplus_module_7.Logger.make(({ annotations, cause, con
|
|
|
27
26
|
};
|
|
28
27
|
globalThis.console.log(JSON.stringify(data));
|
|
29
28
|
});
|
|
30
|
-
export const logJson =
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
export const logJson = tsplus_module_6.replace(tsplus_module_6.defaultLogger, jsonLogger);
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkxvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL19zcmMvbG9nZ2VyL2pzb25Mb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFBO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxxQkFDeEIsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7SUFDckUsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQTtJQUN0QixNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUE7SUFFL0IsTUFBTSxDQUFDLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFcEMsTUFBTSxJQUFJLEdBQUc7UUFDWCxTQUFTLEVBQUUsR0FBRztRQUNkLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztRQUNyQixLQUFLLDZCQUFFLE9BQU8sQ0FBVztRQUN6QixPQUFPO1FBQ1AsT0FBTyxpQ0FBRSxDQUFDLENBQU07UUFDaEIsS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyx5QkFBZSxDQUFDLENBQUMsd0JBQUMsS0FBSyxFQUFRLENBQUMsQ0FBQyxTQUFTO1FBQ3ZFLEtBQUssa0NBQUUsb0JBQUEsS0FBSyxFQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFnQjtRQUM5RixXQUFXLEVBQUUscUJBQUEsV0FBVyxJQUFRLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDWCxPQUFPLElBQUksQ0FBQTtZQUNiLENBQUMsRUFBRSxFQUE2QixDQUFDO1lBQ2pDLENBQUMsQ0FBQyxTQUFTO0tBQ2QsQ0FBQTtJQUVELFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtBQUM5QyxDQUFDLENBQ0YsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyx1REFBcUMsVUFBVSxDQUFDLENBQUEifQ==
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export declare const logfmtLogger: import("effect").Logger<unknown, void>;
|
|
2
|
-
export declare const logFmt: import("effect").Layer<never, never, never>;
|
|
1
|
+
export declare const logfmtLogger: import("effect/Logger").Logger<unknown, void>;
|
|
2
|
+
export declare const logFmt: import("effect/Layer").Layer<never, never, never>;
|
|
3
3
|
//# sourceMappingURL=logFmtLogger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logFmtLogger.d.ts","sourceRoot":"","sources":["../../_src/logger/logFmtLogger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,
|
|
1
|
+
{"version":3,"file":"logFmtLogger.d.ts","sourceRoot":"","sources":["../../_src/logger/logFmtLogger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,+CAqBxB,CAAA;AAED,eAAO,MAAM,MAAM,mDAAqD,CAAA"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "@effect-app/core/
|
|
1
|
+
import * as tsplus_module_1 from "@effect-app/core/Option";
|
|
2
2
|
import * as tsplus_module_2 from "@effect-app/prelude/utils";
|
|
3
3
|
import * as tsplus_module_3 from "effect/HashMap";
|
|
4
4
|
import * as tsplus_module_4 from "effect/Logger";
|
|
5
5
|
import { getRequestContext } from "./shared.js";
|
|
6
|
-
export const logfmtLogger = tsplus_module_4.
|
|
6
|
+
export const logfmtLogger = tsplus_module_4.make((_) => {
|
|
7
7
|
let { annotations } = _;
|
|
8
8
|
const c = getRequestContext(_.context);
|
|
9
9
|
const requestContext = tsplus_module_1.getOrUndefined(c);
|
|
10
10
|
if (requestContext) {
|
|
11
|
-
annotations = tsplus_module_3.
|
|
11
|
+
annotations = tsplus_module_3.make(...[
|
|
12
12
|
...annotations,
|
|
13
13
|
...tsplus_module_2.RecordEntries(tsplus_module_2.object$({
|
|
14
14
|
requestRootId: requestContext.rootId,
|
|
@@ -18,8 +18,8 @@ export const logfmtLogger = tsplus_module_4.Logger.make((_) => {
|
|
|
18
18
|
}))
|
|
19
19
|
]);
|
|
20
20
|
}
|
|
21
|
-
const formatted = tsplus_module_4.
|
|
21
|
+
const formatted = tsplus_module_4.logfmtLogger.log(_);
|
|
22
22
|
globalThis.console.log(formatted);
|
|
23
23
|
});
|
|
24
|
-
export const logFmt = tsplus_module_4.
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
export const logFmt = tsplus_module_4.replace(tsplus_module_4.defaultLogger, logfmtLogger);
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nRm10TG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vX3NyYy9sb2dnZXIvbG9nRm10TG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFL0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLHFCQUMxQixDQUFDLENBQUMsRUFBRSxFQUFFO0lBQ0osSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUN2QixNQUFNLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDdEMsTUFBTSxjQUFjLGtDQUFHLENBQUMsQ0FBTSxDQUFBO0lBQzlCLElBQUksY0FBYyxFQUFFLENBQUM7UUFDbkIsV0FBVyxHQUFHLHFCQUFhLEdBQUc7WUFDNUIsR0FBRyxXQUFXO1lBQ2QseURBQUc7Z0JBQ0QsYUFBYSxFQUFFLGNBQWMsQ0FBQyxNQUFNO2dCQUNwQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUU7Z0JBQzVCLFdBQVcsRUFBRSxjQUFjLENBQUMsSUFBSTtnQkFDaEMsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUM3RixFQUVTO1NBQ1gsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLDZCQUFvQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDbkMsQ0FBQyxDQUNGLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsdURBQXFDLFlBQVksQ0FBQyxDQUFBIn0=
|
package/dist/logger/shared.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import * as FiberRefs from "effect/FiberRefs";
|
|
2
|
-
export declare function getRequestContext(context: FiberRefs.FiberRefs): import("effect").Option<import("../RequestContext.js").RequestContext>;
|
|
2
|
+
export declare function getRequestContext(context: FiberRefs.FiberRefs): import("effect/Option").Option<import("../RequestContext.js").RequestContext>;
|
|
3
3
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../_src/logger/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAG7C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../_src/logger/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAG7C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,iFAM7D"}
|
package/dist/logger/shared.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "effect/FiberRef";
|
|
2
|
-
import * as tsplus_module_2 from "effect/
|
|
3
|
-
import * as tsplus_module_3 from "effect/
|
|
4
|
-
import * as tsplus_module_4 from "effect/
|
|
2
|
+
import * as tsplus_module_2 from "effect/Context";
|
|
3
|
+
import * as tsplus_module_3 from "effect/Effect";
|
|
4
|
+
import * as tsplus_module_4 from "effect/Option";
|
|
5
5
|
import * as FiberRefs from "effect/FiberRefs";
|
|
6
6
|
import { RequestContextContainer } from "../services/RequestContextContainer.js";
|
|
7
7
|
export function getRequestContext(context) {
|
|
8
|
-
const ctx = FiberRefs.getOrDefault(context, tsplus_module_1.
|
|
8
|
+
const ctx = FiberRefs.getOrDefault(context, tsplus_module_1.currentContext);
|
|
9
9
|
// TODO: use `RequestContext.Tag` once switched?
|
|
10
10
|
const a = tsplus_module_2.getOption(ctx, RequestContextContainer);
|
|
11
11
|
const c = tsplus_module_4.map(a, (_) => tsplus_module_3.runSync(_.requestContext));
|
|
12
12
|
return c;
|
|
13
13
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vX3NyYy9sb2dnZXIvc2hhcmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEtBQUssU0FBUyxNQUFNLGtCQUFrQixDQUFBO0FBQzdDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBRWhGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUE0QjtJQUM1RCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8saUNBQTBCLENBQUE7SUFDcEUsZ0RBQWdEO0lBQ2hELE1BQU0sQ0FBQyxHQUFHLDBCQUFBLEdBQUcsRUFBVyx1QkFBdUIsQ0FBQyxDQUFBO0lBQ2hELE1BQU0sQ0FBQyxHQUFHLG9CQUFBLENBQUMsRUFBSyxDQUFDLENBQUMsRUFBRSxFQUFFLHlCQUFDLENBQUMsQ0FBQyxjQUFjLENBQVEsQ0FBQyxDQUFBO0lBQ2hELE9BQU8sQ0FBQyxDQUFBO0FBQ1YsQ0FBQyJ9
|
package/dist/rateLimit.d.ts
CHANGED
|
@@ -16,17 +16,17 @@ export declare function SEM_withPermitsDuration(permits: number, duration: Durat
|
|
|
16
16
|
* @tsplus static Collection.Ops batchPar
|
|
17
17
|
* @tsplus location "@effect-app/infra/rateLimit"
|
|
18
18
|
*/
|
|
19
|
-
export declare function batchPar<R, E, A, R2, E2, A2, T>(n: number, forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect<R, E, A>, forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect<R2, E2, A2>): (items: Iterable<T>) => import("effect").Effect<R | R2, E | E2, A2[]>;
|
|
19
|
+
export declare function batchPar<R, E, A, R2, E2, A2, T>(n: number, forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect<R, E, A>, forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect<R2, E2, A2>): (items: Iterable<T>) => import("effect/Effect").Effect<R | R2, E | E2, A2[]>;
|
|
20
20
|
/**
|
|
21
21
|
* @tsplus pipeable Iterable batch
|
|
22
22
|
* @tsplus static Collection.Ops batch
|
|
23
23
|
* @tsplus location "@effect-app/infra/rateLimit"
|
|
24
24
|
*/
|
|
25
|
-
export declare function batch<R, E, A, R2, E2, A2, T>(n: number, forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect<R, E, A>, forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect<R2, E2, A2>): (items: Iterable<T>) => import("effect").Effect<R | R2, E | E2, A2[]>;
|
|
25
|
+
export declare function batch<R, E, A, R2, E2, A2, T>(n: number, forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect<R, E, A>, forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect<R2, E2, A2>): (items: Iterable<T>) => import("effect/Effect").Effect<R | R2, E | E2, A2[]>;
|
|
26
26
|
/**
|
|
27
27
|
* @tsplus pipeable Iterable naiveRateLimit
|
|
28
28
|
* @tsplus static Collection.Ops naiveRateLimit
|
|
29
29
|
* @tsplus location "@effect-app/infra/rateLimit"
|
|
30
30
|
*/
|
|
31
|
-
export declare function naiveRateLimit(n: number, d: DUR): <T>(items: Iterable<T>) => <R, E, A, R2, E2, A2>(forEachItem: (i: T) => Effect<R, E, A>, forEachBatch: (a: A[]) => Effect<R2, E2, A2>) => import("effect").Effect<R | R2, E | E2, A2[]>;
|
|
31
|
+
export declare function naiveRateLimit(n: number, d: DUR): <T>(items: Iterable<T>) => <R, E, A, R2, E2, A2>(forEachItem: (i: T) => Effect<R, E, A>, forEachBatch: (a: A[]) => Effect<R2, E2, A2>) => import("effect/Effect").Effect<R | R2, E | E2, A2[]>;
|
|
32
32
|
//# sourceMappingURL=rateLimit.d.ts.map
|
package/dist/rateLimit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../_src/rateLimit.ts"],"names":[],"mappings":";;;;;;;;;;;;AAkCA,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,UAC3D,SAAS,uBAAqB,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAahF;;;;;;AAMD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC7C,CAAC,EAAE,MAAM,EACT,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/E,YAAY,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,WAErD,SAAS,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../_src/rateLimit.ts"],"names":[],"mappings":";;;;;;;;;;;;AAkCA,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,UAC3D,SAAS,uBAAqB,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAahF;;;;;;AAMD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC7C,CAAC,EAAE,MAAM,EACT,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/E,YAAY,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,WAErD,SAAS,CAAC,CAAC,0DAU3B;;;;;;AAMD,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAC1C,CAAC,EAAE,MAAM,EACT,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/E,YAAY,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,WAErD,SAAS,CAAC,CAAC,0DAQ3B;;;;;;AA2BD,wBAAgB,cAAc,CAC5B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,GAAG,cAEY,SAAS,CAAC,CAAC,4CACV,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,oBACpB,CAAC,EAAE,KAAK,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,0DAY/C"}
|
package/dist/rateLimit.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "effect/
|
|
2
|
-
import * as tsplus_module_2 from "effect/
|
|
3
|
-
import * as tsplus_module_3 from "@effect-app/core/
|
|
4
|
-
import * as tsplus_module_4 from "@effect-app/core/Array";
|
|
1
|
+
import * as tsplus_module_1 from "effect/Effect";
|
|
2
|
+
import * as tsplus_module_2 from "@effect-app/core/_ext/Iterable";
|
|
3
|
+
import * as tsplus_module_3 from "@effect-app/core/Array";
|
|
5
4
|
// /**
|
|
6
5
|
// * Executes the specified effect, acquiring the specified number of permits
|
|
7
6
|
// * immediately before the effect begins execution and releasing them
|
|
@@ -37,7 +36,7 @@ import * as tsplus_module_4 from "@effect-app/core/Array";
|
|
|
37
36
|
*/
|
|
38
37
|
export function SEM_withPermitsDuration(permits, duration) {
|
|
39
38
|
return (self) => {
|
|
40
|
-
return (effect) =>
|
|
39
|
+
return (effect) => tsplus_module_1.uninterruptibleMask((restore) => tsplus_module_1.zipRight(tsplus_module_1.ensuring(restore(effect), tsplus_module_1.delay(self
|
|
41
40
|
.release(permits), duration)))(restore(self.take(permits))));
|
|
42
41
|
};
|
|
43
42
|
}
|
|
@@ -46,14 +45,14 @@ export function SEM_withPermitsDuration(permits, duration) {
|
|
|
46
45
|
* @tsplus static Collection.Ops batchPar
|
|
47
46
|
*/
|
|
48
47
|
export function batchPar(n, forEachItem, forEachBatch) {
|
|
49
|
-
return (items) =>
|
|
48
|
+
return (items) => tsplus_module_2.ext_forEach(tsplus_module_3.chunk_(items, n), (_, i) => tsplus_module_1.flatMap(tsplus_module_2.ext_forEach(_, (_, j) => forEachItem(_, j, i), { concurrency: "inherit" }), (_) => forEachBatch(_, i)), { concurrency: "inherit" });
|
|
50
49
|
}
|
|
51
50
|
/**
|
|
52
51
|
* @tsplus pipeable Iterable batch
|
|
53
52
|
* @tsplus static Collection.Ops batch
|
|
54
53
|
*/
|
|
55
54
|
export function batch(n, forEachItem, forEachBatch) {
|
|
56
|
-
return (items) =>
|
|
55
|
+
return (items) => tsplus_module_2.ext_forEach(tsplus_module_3.chunk_(items, n), (_, i) => tsplus_module_1.flatMap(tsplus_module_2.ext_forEach(_, (_, j) => forEachItem(_, j, i), { concurrency: "inherit" }), (_) => forEachBatch(_, i)));
|
|
57
56
|
}
|
|
58
57
|
// /**
|
|
59
58
|
// * @tsplus pipeable Iterable rateLimit
|
|
@@ -79,6 +78,6 @@ export function batch(n, forEachItem, forEachBatch) {
|
|
|
79
78
|
* @tsplus static Collection.Ops naiveRateLimit
|
|
80
79
|
*/
|
|
81
80
|
export function naiveRateLimit(n, d) {
|
|
82
|
-
return (items) => ((forEachItem, forEachBatch) =>
|
|
81
|
+
return (items) => ((forEachItem, forEachBatch) => tsplus_module_2.ext_forEach(tsplus_module_3.chunk_(items, n), (batch, i) => tsplus_module_1.zipRight(((i === 0) ? tsplus_module_1.unit : tsplus_module_1.sleep(d)), tsplus_module_1.flatMap(tsplus_module_2.ext_forEach(batch, forEachItem, { concurrency: n }), forEachBatch))));
|
|
83
82
|
}
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZUxpbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vX3NyYy9yYXRlTGltaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBTTtBQUNOLDhFQUE4RTtBQUM5RSx1RUFBdUU7QUFDdkUsbUZBQW1GO0FBQ25GLCtCQUErQjtBQUMvQixLQUFLO0FBQ0wsa0VBQWtFO0FBQ2xFLGdFQUFnRTtBQUNoRSxNQUFNO0FBQ04sNkVBQTZFO0FBQzdFLDBGQUEwRjtBQUMxRix1QkFBdUI7QUFDdkIsb0NBQW9DO0FBQ3BDLHFCQUFxQjtBQUNyQixtREFBbUQ7QUFDbkQsZ0NBQWdDO0FBQ2hDLDJCQUEyQjtBQUMzQix5Q0FBeUM7QUFDekMsNEJBQTRCO0FBQzVCLHFDQUFxQztBQUNyQyxrQkFBa0I7QUFDbEIsVUFBVTtBQUNWLE1BQU07QUFDTixJQUFJO0FBRUo7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsT0FBZSxFQUFFLFFBQWtCO0lBQ3pFLE9BQU8sQ0FBQyxJQUFlLEVBQXlELEVBQUU7UUFDaEYsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2hCLG9DQUNFLENBQUMsT0FBTyxFQUFFLEVBQUUsMEJBRU4seUJBQUEsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUViLHNCQUFBLElBQUk7YUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQ1YsUUFBUSxDQUFDLENBQ25CLEVBTkwsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FNdEIsQ0FDUixDQUFBO0lBQ0wsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3RCLENBQVMsRUFDVCxXQUErRSxFQUMvRSxZQUFvRTtJQUVwRSxPQUFPLENBQUMsS0FBa0IsRUFBRSxFQUFFLENBQzVCLDRCQUFBLHVCQUFBLEtBQUssRUFDSSxDQUFDLENBQUMsRUFFUCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUNQLHdCQUFBLDRCQUFBLENBQUMsRUFDZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUNqRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDM0QsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLENBQzNCLENBQUE7QUFDUCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FDbkIsQ0FBUyxFQUNULFdBQStFLEVBQy9FLFlBQW9FO0lBRXBFLE9BQU8sQ0FBQyxLQUFrQixFQUFFLEVBQUUsQ0FDNUIsNEJBQUEsdUJBQUEsS0FBSyxFQUNJLENBQUMsQ0FBQyxFQUNNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3RCLHdCQUFBLDRCQUFBLENBQUMsRUFDZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUNqRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDMUQsQ0FBQTtBQUNQLENBQUM7QUFFRCxNQUFNO0FBQ04seUNBQXlDO0FBQ3pDLDZDQUE2QztBQUM3QyxNQUFNO0FBQ04sNkJBQTZCO0FBQzdCLGVBQWU7QUFDZixXQUFXO0FBQ1gsTUFBTTtBQUNOLHNDQUFzQztBQUN0Qyw2QkFBNkI7QUFDN0IsZ0RBQWdEO0FBQ2hELDBEQUEwRDtBQUMxRCxXQUFXO0FBQ1gscUNBQXFDO0FBQ3JDLHNCQUFzQjtBQUN0Qix3Q0FBd0M7QUFDeEMsbUZBQW1GO0FBQ25GLHNCQUFzQjtBQUN0QixJQUFJO0FBRUo7OztHQUdHO0FBRUgsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsQ0FBUyxFQUNULENBQU07SUFFTixPQUFPLENBQUksS0FBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUNqQyxXQUFzQyxFQUN0QyxZQUE0QyxFQUM1QyxFQUFFLENBQ0YsNEJBQUEsdUJBQUEsS0FBSyxFQUNJLENBQUMsQ0FBQyxFQUNNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQzFCLHlCQUFBLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBYSxDQUFDLENBQUMsc0JBQWEsQ0FBQyxDQUFDLENBQUMsRUFFdkMsd0JBQUEsNEJBQUEsS0FBSyxFQUNZLFdBQVcsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUN0QyxZQUFZLENBQUMsQ0FDekIsQ0FDSixDQUFDLENBQUE7QUFDUixDQUFDIn0=
|
|
@@ -6,7 +6,7 @@ import type { EmailMsg, SendgridConfig } from "./service.js";
|
|
|
6
6
|
* @tsplus static Emailer.Ops LiveSendgrid
|
|
7
7
|
* @tsplus location "@effect-app/infra/services/Emailer/Sendgrid"
|
|
8
8
|
*/
|
|
9
|
-
export declare function LiveSendgrid(config: Config<SendgridConfig>): import("effect").Layer<never, import("effect").ConfigError, Emailer>;
|
|
9
|
+
export declare function LiveSendgrid(config: Config<SendgridConfig>): import("effect/Layer").Layer<never, import("effect/ConfigError").ConfigError, Emailer>;
|
|
10
10
|
/**
|
|
11
11
|
* @hidden
|
|
12
12
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sendgrid.d.ts","sourceRoot":"","sources":["../../../_src/services/Emailer/Sendgrid.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAA;AAG3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAwB,cAAc,EAAE,MAAM,cAAc,CAAA;;;;;AAoDlF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"Sendgrid.d.ts","sourceRoot":"","sources":["../../../_src/services/Emailer/Sendgrid.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAA;AAG3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAwB,cAAc,EAAE,MAAM,cAAc,CAAA;;;;;AAoDlF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,0FAK1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,OAAO,SAUpC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMnB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,WAO1C"}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import * as tsplus_module_1 from "effect/
|
|
1
|
+
import * as tsplus_module_1 from "effect/ConfigSecret";
|
|
2
2
|
import * as tsplus_module_2 from "effect/Effect";
|
|
3
|
-
import * as tsplus_module_3 from "effect/
|
|
4
|
-
import * as tsplus_module_4 from "effect/
|
|
5
|
-
import * as tsplus_module_5 from "effect/
|
|
6
|
-
import * as tsplus_module_6 from "effect/
|
|
7
|
-
import * as tsplus_module_7 from "@effect-app/core/_ext/ord.ext";
|
|
8
|
-
import * as tsplus_module_8 from "@effect-app/core/Array";
|
|
3
|
+
import * as tsplus_module_3 from "effect/Layer";
|
|
4
|
+
import * as tsplus_module_4 from "effect/Equivalence";
|
|
5
|
+
import * as tsplus_module_5 from "@effect-app/core/_ext/ord.ext";
|
|
6
|
+
import * as tsplus_module_6 from "@effect-app/core/Array";
|
|
9
7
|
import sgMail from "@sendgrid/mail";
|
|
10
8
|
import { inspect } from "util";
|
|
11
9
|
import { Emailer } from "./service.js";
|
|
12
|
-
const makeLiveSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPrefix }) => tsplus_module_2.
|
|
10
|
+
const makeLiveSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPrefix }) => tsplus_module_2.sync(() => {
|
|
13
11
|
sgMail.setApiKey(tsplus_module_1.value(apiKey));
|
|
14
12
|
return {
|
|
15
13
|
sendMail(msg_) {
|
|
16
|
-
return tsplus_module_2.
|
|
14
|
+
return tsplus_module_2.gen(function* ($) {
|
|
17
15
|
const msg = {
|
|
18
16
|
...msg_,
|
|
19
17
|
from: msg_.from ?? defaultFrom,
|
|
@@ -22,10 +20,10 @@ const makeLiveSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subje
|
|
|
22
20
|
const render = renderMessage(!realMail);
|
|
23
21
|
const renderedMsg_ = render(msg);
|
|
24
22
|
const renderedMsg = { ...renderedMsg_, subject: `${subjectPrefix}${renderedMsg_.subject}` };
|
|
25
|
-
yield* $(
|
|
26
|
-
const ret = yield* $(tsplus_module_2.
|
|
27
|
-
? cb(tsplus_module_2.
|
|
28
|
-
: cb(tsplus_module_2.
|
|
23
|
+
yield* $(tsplus_module_2.annotateLogs(tsplus_module_2.logDebug("Sending email"), "msg", inspect(renderedMsg, false, 5)));
|
|
24
|
+
const ret = yield* $(tsplus_module_2.async((cb) => void sgMail.send(renderedMsg, false, (err, result) => err
|
|
25
|
+
? cb(tsplus_module_2.fail(err))
|
|
26
|
+
: cb(tsplus_module_2.sync(() => result)))));
|
|
29
27
|
// const event = {
|
|
30
28
|
// name: "EmailSent",
|
|
31
29
|
// properties: {
|
|
@@ -44,7 +42,7 @@ const makeLiveSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subje
|
|
|
44
42
|
* @tsplus static Emailer.Ops LiveSendgrid
|
|
45
43
|
*/
|
|
46
44
|
export function LiveSendgrid(config) {
|
|
47
|
-
return
|
|
45
|
+
return tsplus_module_3.effect(Emailer)(tsplus_module_2.flatMap(tsplus_module_2.config(config), makeLiveSendgrid));
|
|
48
46
|
}
|
|
49
47
|
/**
|
|
50
48
|
* @hidden
|
|
@@ -81,12 +79,12 @@ function renderFake(addr, makeId) {
|
|
|
81
79
|
email: `test+${makeId()}@nomizz.com`
|
|
82
80
|
};
|
|
83
81
|
}
|
|
84
|
-
const eq =
|
|
82
|
+
const eq = tsplus_module_4.mapInput(tsplus_module_4.string, (to) => typeof to === "string" ? to.toLowerCase() : to.email.toLowerCase());
|
|
85
83
|
// TODO: should just not add any already added email address
|
|
86
84
|
// https://stackoverflow.com/a/53603076/11595834
|
|
87
85
|
function renderFakeIfTest(addr, makeId) {
|
|
88
86
|
return Array.isArray(addr)
|
|
89
|
-
?
|
|
87
|
+
? tsplus_module_6.iterableToArray(tsplus_module_5.uniqArray(eq)(addr
|
|
90
88
|
.map((x) => (isTestAddress(x) ? renderFake(x, makeId) : x)))) : isTestAddress(addr)
|
|
91
89
|
? renderFake(addr, makeId)
|
|
92
90
|
: addr;
|
|
@@ -100,4 +98,4 @@ function renderMailData(md) {
|
|
|
100
98
|
}
|
|
101
99
|
return md.email;
|
|
102
100
|
}
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VuZGdyaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9fc3JjL3NlcnZpY2VzL0VtYWlsZXIvU2VuZGdyaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsT0FBTyxNQUFNLE1BQU0sZ0JBQWdCLENBQUE7QUFDbkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM5QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBR3RDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQWtCLEVBQUUsRUFBRSxDQUM1RyxxQkFBWSxHQUFHLEVBQUU7SUFDZixNQUFNLENBQUMsU0FBUyx1QkFBQyxNQUFNLEVBQU8sQ0FBQTtJQUU5QixPQUFPO1FBQ0wsUUFBUSxDQUFDLElBQTBCO1lBQ2pDLE9BQU8sb0JBQVcsUUFBUSxDQUFDLEVBQUMsQ0FBQztnQkFDM0IsTUFBTSxHQUFHLEdBQWE7b0JBQ3BCLEdBQUcsSUFBSTtvQkFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxXQUFXO29CQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2lCQUNsRSxDQUFBO2dCQUNELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFBO2dCQUV2QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7Z0JBQ2hDLE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsYUFBYSxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFBO2dCQUMzRixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsNkJB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
|
|
@@ -3,5 +3,5 @@ import { Emailer } from "./service.js";
|
|
|
3
3
|
* @tsplus static Emailer.Ops Fake
|
|
4
4
|
* @tsplus location "@effect-app/infra/services/Emailer/fake"
|
|
5
5
|
*/
|
|
6
|
-
export declare const FakeSendgrid: import("effect").Layer<never, never, Emailer>;
|
|
6
|
+
export declare const FakeSendgrid: import("effect/Layer").Layer<never, never, Emailer>;
|
|
7
7
|
//# sourceMappingURL=fake.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../../../_src/services/Emailer/fake.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;;;;;AAatC,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../../../_src/services/Emailer/fake.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;;;;;AAatC,eAAO,MAAM,YAAY,qDAA4B,CAAA"}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "effect/Effect";
|
|
2
|
-
import * as tsplus_module_2 from "effect/
|
|
3
|
-
import * as tsplus_module_3 from "effect/impl/Layer";
|
|
2
|
+
import * as tsplus_module_2 from "effect/Layer";
|
|
4
3
|
import { pretty } from "@effect-app/prelude/utils";
|
|
5
4
|
import { Emailer } from "./service.js";
|
|
6
|
-
const makeFake =
|
|
5
|
+
const makeFake = tsplus_module_1.map(tsplus_module_1.logDebug("FAKE Emailer Service enabled"), () => ({
|
|
7
6
|
sendMail(msg) {
|
|
8
|
-
return
|
|
7
|
+
return tsplus_module_1.annotateLogs(tsplus_module_1.logDebug(`Fake send mail`), "msg", pretty(msg));
|
|
9
8
|
}
|
|
10
9
|
}));
|
|
11
10
|
/**
|
|
12
11
|
* @tsplus static Emailer.Ops Fake
|
|
13
12
|
*/
|
|
14
|
-
export const FakeSendgrid =
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
export const FakeSendgrid = tsplus_module_2.effect(Emailer)(makeFake);
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvRW1haWxlci9mYWtlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFdEMsTUFBTSxRQUFRLEdBQUcsb0JBQUEseUJBQ0wsOEJBQThCLENBQUMsRUFDcEMsR0FBWSxFQUFFLENBQUMsQ0FBQztJQUNuQixRQUFRLENBQUMsR0FBRztRQUNWLE9BQU8sNkJBQUEseUJBQWdCLGdCQUFnQixDQUFDLEVBQWMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzNFLENBQUM7Q0FDRixDQUFDLENBQUMsQ0FBQTtBQUVMOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLHVCQUFpQixPQUFPLEVBQXhCLFFBQVEsQ0FBaUIsQ0FBQSJ9
|
|
@@ -8,9 +8,9 @@ import type { ResponseError } from "@sendgrid/mail";
|
|
|
8
8
|
import type sgMail from "@sendgrid/mail";
|
|
9
9
|
import type { RequestContextContainer } from "../RequestContextContainer.js";
|
|
10
10
|
declare const Emailer_base: (abstract new () => {}) & {
|
|
11
|
-
flatMap<R1, E1, B>(f: (a: Emailer) => import("effect").Effect<R1, E1, B>): import("effect").Effect<Emailer | R1, E1, B>;
|
|
12
|
-
map<B_1>(f: (a: Emailer) => B_1): import("effect").Effect<Emailer, never, B_1>;
|
|
13
|
-
makeLayer(svc: Emailer): import("effect").Layer<never, never, Emailer>;
|
|
11
|
+
flatMap<R1, E1, B>(f: (a: Emailer) => import("effect/Effect").Effect<R1, E1, B>): import("effect/Effect").Effect<Emailer | R1, E1, B>;
|
|
12
|
+
map<B_1>(f: (a: Emailer) => B_1): import("effect/Effect").Effect<Emailer, never, B_1>;
|
|
13
|
+
makeLayer(svc: Emailer): import("effect/Layer").Layer<never, never, Emailer>;
|
|
14
14
|
} & import("effect/Context").Tag<Emailer, Emailer>;
|
|
15
15
|
/**
|
|
16
16
|
* @tsplus type Emailer
|
|
@@ -3,5 +3,5 @@ import { Exit } from "effect/Exit";
|
|
|
3
3
|
* @tsplus static Operations.Ops Live
|
|
4
4
|
* @tsplus location "@effect-app/infra/services/Operations/live"
|
|
5
5
|
*/
|
|
6
|
-
export declare const Live: import("effect").Layer<never, never, import("./service.js").OperationsId>;
|
|
6
|
+
export declare const Live: import("effect/Layer").Layer<never, never, import("./service.js").OperationsId>;
|
|
7
7
|
//# sourceMappingURL=live.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../../_src/services/Operations/live.ts"],"names":[],"mappings":";;;;;AAwGA,eAAO,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../../_src/services/Operations/live.ts"],"names":[],"mappings":";;;;;AAwGA,eAAO,MAAM,IAAI,iFAEQ,CAAA"}
|
|
@@ -1,70 +1,68 @@
|
|
|
1
1
|
import * as tsplus_module_1 from "effect/Effect";
|
|
2
2
|
import * as tsplus_module_2 from "@effect-app/prelude/_ext/date";
|
|
3
3
|
import * as tsplus_module_3 from "effect/Option";
|
|
4
|
-
import * as tsplus_module_4 from "effect/
|
|
5
|
-
import * as tsplus_module_5 from "
|
|
6
|
-
import * as tsplus_module_6 from "effect/
|
|
7
|
-
import * as tsplus_module_7 from "effect/
|
|
8
|
-
import * as tsplus_module_8 from "effect/
|
|
9
|
-
import * as tsplus_module_9 from "@effect-app/
|
|
10
|
-
import * as tsplus_module_10 from "@effect-app/
|
|
11
|
-
import * as tsplus_module_11 from "effect/
|
|
12
|
-
import * as tsplus_module_12 from "
|
|
13
|
-
import * as tsplus_module_13 from "effect/
|
|
14
|
-
import * as tsplus_module_14 from "effect/Schedule";
|
|
15
|
-
import * as tsplus_module_15 from "effect/impl/Layer";
|
|
4
|
+
import * as tsplus_module_4 from "@effect-app/core/Array";
|
|
5
|
+
import * as tsplus_module_5 from "effect/Chunk";
|
|
6
|
+
import * as tsplus_module_6 from "effect/Exit";
|
|
7
|
+
import * as tsplus_module_7 from "effect/Cause";
|
|
8
|
+
import * as tsplus_module_8 from "@effect-app/prelude/schema";
|
|
9
|
+
import * as tsplus_module_9 from "@effect-app/core/Option";
|
|
10
|
+
import * as tsplus_module_10 from "@effect-app/prelude/_ext/misc";
|
|
11
|
+
import * as tsplus_module_11 from "effect/Duration";
|
|
12
|
+
import * as tsplus_module_12 from "effect/Schedule";
|
|
13
|
+
import * as tsplus_module_13 from "effect/Layer";
|
|
16
14
|
import { RequestException } from "@effect-app/infra/api/reportError";
|
|
17
15
|
import { reportError } from "@effect-app/infra/errorReporter";
|
|
18
16
|
import { Failure, Operation, OperationId, Success } from "@effect-app/prelude/Operations";
|
|
19
17
|
import { Operations } from "./service.js";
|
|
20
18
|
const reportAppError = reportError((cause) => new RequestException(cause));
|
|
21
|
-
const make = tsplus_module_1.
|
|
19
|
+
const make = tsplus_module_1.sync(() => {
|
|
22
20
|
const ops = new Map();
|
|
23
|
-
const makeOp = tsplus_module_1.
|
|
24
|
-
const cleanup = tsplus_module_1.
|
|
21
|
+
const makeOp = tsplus_module_1.sync(() => OperationId.make());
|
|
22
|
+
const cleanup = tsplus_module_1.sync(() => {
|
|
25
23
|
const before = tsplus_module_2.DateSubHours(new Date(), 1);
|
|
26
|
-
|
|
24
|
+
tsplus_module_5.forEach(tsplus_module_4.ext_itToChunk(ops
|
|
27
25
|
.entries()), ([id, op]) => {
|
|
28
|
-
const lastChanged =
|
|
26
|
+
const lastChanged = tsplus_module_3.getOrElse(tsplus_module_3.fromNullable(op.updatedAt), () => op.createdAt);
|
|
29
27
|
if (lastChanged < before) {
|
|
30
28
|
ops.delete(id);
|
|
31
29
|
}
|
|
32
30
|
});
|
|
33
31
|
});
|
|
34
32
|
function addOp(id) {
|
|
35
|
-
return tsplus_module_1.
|
|
33
|
+
return tsplus_module_1.sync(() => {
|
|
36
34
|
ops.set(id, new Operation({ id }));
|
|
37
35
|
});
|
|
38
36
|
}
|
|
39
37
|
function findOp(id) {
|
|
40
|
-
return tsplus_module_1.
|
|
38
|
+
return tsplus_module_1.sync(() => tsplus_module_3.fromNullable(ops.get(id)));
|
|
41
39
|
}
|
|
42
40
|
function finishOp(id, exit) {
|
|
43
|
-
return
|
|
44
|
-
if (
|
|
41
|
+
return tsplus_module_1.flatMap(findOp(id), (_) => tsplus_module_1.sync(() => {
|
|
42
|
+
if (tsplus_module_3.isNone(_)) {
|
|
45
43
|
throw new Error("Not found");
|
|
46
44
|
}
|
|
47
45
|
ops.set(id, {
|
|
48
46
|
..._.value,
|
|
49
47
|
updatedAt: new Date(),
|
|
50
|
-
result:
|
|
48
|
+
result: tsplus_module_6.isSuccess(exit)
|
|
51
49
|
? new Success()
|
|
52
50
|
: new Failure({
|
|
53
|
-
message:
|
|
54
|
-
?
|
|
55
|
-
:
|
|
56
|
-
?
|
|
57
|
-
:
|
|
58
|
-
.cause), (_) => typeof _ === "object" && _ !== null && "message" in _ &&
|
|
59
|
-
? tsplus_module_3.
|
|
60
|
-
:
|
|
51
|
+
message: tsplus_module_7.isInterrupted(exit.cause)
|
|
52
|
+
? tsplus_module_8.LongString("Interrupted")
|
|
53
|
+
: tsplus_module_7.isDie(exit.cause)
|
|
54
|
+
? tsplus_module_8.LongString("Unknown error")
|
|
55
|
+
: tsplus_module_9.getOrUndefined(tsplus_module_3.flatMap(tsplus_module_7.failureOption(exit
|
|
56
|
+
.cause), (_) => typeof _ === "object" && _ !== null && "message" in _ && tsplus_module_8.LongString.Guard(_.message)
|
|
57
|
+
? tsplus_module_3.some(_.message)
|
|
58
|
+
: tsplus_module_9.none)) ?? null
|
|
61
59
|
})
|
|
62
60
|
});
|
|
63
61
|
}));
|
|
64
62
|
}
|
|
65
63
|
function update(id, progress) {
|
|
66
|
-
return
|
|
67
|
-
if (
|
|
64
|
+
return tsplus_module_1.flatMap(findOp(id), (_) => tsplus_module_1.sync(() => {
|
|
65
|
+
if (tsplus_module_3.isNone(_)) {
|
|
68
66
|
throw new Error("Not found");
|
|
69
67
|
}
|
|
70
68
|
ops.set(id, { ..._.value, updatedAt: new Date(), progress });
|
|
@@ -72,22 +70,22 @@ const make = tsplus_module_1.Effect.sync(() => {
|
|
|
72
70
|
}
|
|
73
71
|
return {
|
|
74
72
|
cleanup,
|
|
75
|
-
register:
|
|
73
|
+
register: tsplus_module_1.tap(makeOp, (id) => tsplus_module_1.zipRight(tsplus_module_1.acquireRelease(addOp(id), (_, exit) => finishOp(id, exit)))(tsplus_module_10.annotateLogscoped("operationId", id))),
|
|
76
74
|
find: findOp,
|
|
77
75
|
update
|
|
78
76
|
};
|
|
79
77
|
});
|
|
80
|
-
const cleanupLoop =
|
|
78
|
+
const cleanupLoop = tsplus_module_1.forkScoped(tsplus_module_1.schedule(tsplus_module_1.flatMap(tsplus_module_1.exit(Operations
|
|
81
79
|
.flatMap((_) => _.cleanup)), (_) => {
|
|
82
|
-
if (
|
|
83
|
-
return tsplus_module_1.
|
|
80
|
+
if (tsplus_module_6.isSuccess(_)) {
|
|
81
|
+
return tsplus_module_1.unit;
|
|
84
82
|
}
|
|
85
83
|
else {
|
|
86
84
|
return reportAppError(_.cause);
|
|
87
85
|
}
|
|
88
|
-
}),
|
|
86
|
+
}), tsplus_module_12.fixed(tsplus_module_11.minutes(1))));
|
|
89
87
|
/**
|
|
90
88
|
* @tsplus static Operations.Ops Live
|
|
91
89
|
*/
|
|
92
|
-
export const Live =
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
export const Live = tsplus_module_13.provideMerge(tsplus_module_13.scopedDiscard(cleanupLoop))(tsplus_module_13.effect(Operations)(make));
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL19zcmMvc2VydmljZXMvT3BlcmF0aW9ucy9saXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFFN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQ3pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFekMsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFFMUUsTUFBTSxJQUFJLEdBQUcscUJBQVksR0FBZSxFQUFFO0lBQ3hDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFBO0lBQzdDLE1BQU0sTUFBTSxHQUFHLDJCQUFPLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRXpDLE1BQU0sT0FBTyxHQUFHLHFCQUFZLEdBQUcsRUFBRTtRQUMvQixNQUFNLE1BQU0sR0FBRyw2QkFBQSxJQUFJLElBQUksRUFBRSxFQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLHNEQUFBLEdBQUc7YUFDQSxPQUFPLEVBQUUsR0FFRCxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxXQUFXLEdBQUcsMEJBQUEsNkJBQW9CLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBVyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDbkYsSUFBSSxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLEdBQUcsQ0FBQyxNQUFN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
|