@effect-app/infra 0.168.0 → 0.169.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 +15 -0
- package/_cjs/RequestContext.cjs +3 -4
- package/_cjs/RequestContext.cjs.map +1 -1
- package/_cjs/api/codec.cjs.map +1 -1
- package/_cjs/api/express/schema/jwt.cjs.map +1 -1
- package/_cjs/api/routing/base.cjs.map +1 -1
- package/_cjs/api/routing/defaultErrorHandler.cjs +2 -2
- package/_cjs/api/routing/defaultErrorHandler.cjs.map +1 -1
- package/_cjs/api/routing/makeRequestHandler.cjs.map +1 -1
- package/_cjs/api/routing/match.cjs +1 -1
- package/_cjs/api/routing/match.cjs.map +1 -1
- package/_cjs/logger/logFmtLogger.cjs.map +1 -1
- package/_cjs/services/Emailer/Sendgrid.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/_cjs/services/QueueMaker/memQueue.cjs.map +1 -1
- package/_cjs/services/QueueMaker/sbqueue.cjs.map +1 -1
- package/_cjs/services/Repository.cjs.map +1 -1
- package/_cjs/services/RepositoryBase.cjs.map +1 -1
- package/_cjs/services/RequestContextContainer.cjs +1 -1
- package/_cjs/services/RequestContextContainer.cjs.map +1 -1
- package/_cjs/services/Store/ContextMapContainer.cjs +1 -1
- package/_cjs/services/Store/ContextMapContainer.cjs.map +1 -1
- package/_cjs/services/Store/utils.cjs.map +1 -1
- package/_cjs/services/simpledb/cosmosdb.cjs +2 -2
- package/_cjs/services/simpledb/cosmosdb.cjs.map +1 -1
- package/_cjs/services/simpledb/redisdb.cjs.map +1 -1
- package/_cjs/services/simpledb/shared.cjs +5 -4
- package/_cjs/services/simpledb/shared.cjs.map +1 -1
- package/_cjs/services/simpledb/simpledb.cjs +1 -1
- package/_cjs/services/simpledb/simpledb.cjs.map +1 -1
- package/_src/RequestContext.ts +3 -3
- package/_src/api/codec.ts +1 -1
- package/_src/api/defaultErrorHandler.ts +2 -2
- package/_src/api/express/schema/jwt.ts +3 -3
- package/_src/api/express/schema/routing.ts +7 -7
- package/_src/api/reportError.ts +2 -2
- package/_src/api/routing/base.ts +19 -22
- package/_src/api/routing/defaultErrorHandler.ts +3 -3
- package/_src/api/routing/makeRequestHandler.ts +20 -28
- package/_src/api/routing/match.ts +4 -4
- package/_src/api/setupRequest.ts +3 -3
- package/_src/logger/logFmtLogger.ts +1 -1
- package/_src/rateLimit.ts +9 -9
- package/_src/services/Emailer/Sendgrid.ts +3 -7
- package/_src/services/Emailer/service.ts +1 -1
- package/_src/services/Operations/service.ts +9 -9
- package/_src/services/QueueMaker/errors.ts +5 -5
- package/_src/services/QueueMaker/memQueue.ts +5 -5
- package/_src/services/QueueMaker/sbqueue.ts +5 -5
- package/_src/services/QueueMaker/service.ts +3 -3
- package/_src/services/Repository.ts +90 -110
- package/_src/services/RepositoryBase.ts +29 -45
- package/_src/services/RequestContextContainer.ts +7 -9
- package/_src/services/Store/ContextMapContainer.ts +4 -4
- package/_src/services/Store/Cosmos.ts +3 -3
- package/_src/services/Store/Disk.ts +4 -4
- package/_src/services/Store/Memory.ts +2 -2
- package/_src/services/Store/Redis.ts +3 -3
- package/_src/services/Store/service.ts +10 -10
- package/_src/services/Store/utils.ts +2 -2
- package/_src/services/simpledb/cosmosdb.ts +3 -3
- package/_src/services/simpledb/diskdb.ts +3 -3
- package/_src/services/simpledb/memdb.ts +3 -3
- package/_src/services/simpledb/mongodb.ts +3 -3
- package/_src/services/simpledb/redisdb.ts +5 -5
- package/_src/services/simpledb/shared.ts +4 -3
- package/_src/services/simpledb/simpledb.ts +8 -8
- package/dist/RequestContext.d.ts +48 -48
- package/dist/RequestContext.js +4 -5
- package/dist/_ext/Array.d.ts +1 -1
- package/dist/api/codec.d.ts +1 -1
- package/dist/api/codec.d.ts.map +1 -1
- package/dist/api/codec.js +1 -1
- package/dist/api/defaultErrorHandler.d.ts +2 -2
- package/dist/api/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/express/schema/jwt.d.ts +1 -1
- package/dist/api/express/schema/jwt.js +1 -1
- package/dist/api/express/schema/routing.d.ts +6 -6
- package/dist/api/express/schema/routing.d.ts.map +1 -1
- package/dist/api/reportError.d.ts +2 -2
- package/dist/api/routing/base.d.ts +11 -10
- package/dist/api/routing/base.d.ts.map +1 -1
- package/dist/api/routing/base.js +1 -1
- package/dist/api/routing/defaultErrorHandler.d.ts +5 -5
- package/dist/api/routing/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/routing/defaultErrorHandler.js +3 -3
- package/dist/api/routing/makeRequestHandler.d.ts +2 -2
- package/dist/api/routing/makeRequestHandler.d.ts.map +1 -1
- package/dist/api/routing/makeRequestHandler.js +11 -15
- package/dist/api/routing/match.d.ts +1 -1
- package/dist/api/routing/match.d.ts.map +1 -1
- package/dist/api/routing/match.js +2 -2
- package/dist/api/setupRequest.d.ts +2 -2
- package/dist/errorReporter.d.ts +3 -3
- package/dist/logger/logFmtLogger.js +2 -2
- package/dist/rateLimit.d.ts +4 -4
- package/dist/rateLimit.js +1 -1
- 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 +1 -1
- package/dist/services/Emailer/fake.d.ts +1 -1
- package/dist/services/Emailer/service.d.ts +2 -2
- package/dist/services/Emailer/service.d.ts.map +1 -1
- package/dist/services/Operations/live.d.ts +1 -1
- package/dist/services/Operations/service.d.ts +12 -12
- package/dist/services/Operations/service.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.d.ts +5 -5
- package/dist/services/QueueMaker/errors.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +1 -1
- package/dist/services/QueueMaker/memQueue.d.ts +4 -4
- package/dist/services/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/memQueue.js +1 -1
- package/dist/services/QueueMaker/sbqueue.d.ts +5 -5
- package/dist/services/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/services/QueueMaker/sbqueue.js +1 -1
- package/dist/services/QueueMaker/service.d.ts +11 -11
- package/dist/services/QueueMaker/service.d.ts.map +1 -1
- package/dist/services/Repository.d.ts +67 -67
- package/dist/services/Repository.d.ts.map +1 -1
- package/dist/services/Repository.js +1 -1
- package/dist/services/RepositoryBase.d.ts +30 -30
- package/dist/services/RepositoryBase.d.ts.map +1 -1
- package/dist/services/RepositoryBase.js +1 -1
- package/dist/services/RequestContextContainer.d.ts +9 -9
- package/dist/services/RequestContextContainer.d.ts.map +1 -1
- package/dist/services/RequestContextContainer.js +11 -13
- package/dist/services/Store/ContextMapContainer.d.ts +7 -7
- package/dist/services/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/services/Store/ContextMapContainer.js +2 -2
- package/dist/services/Store/Cosmos/query.d.ts +1 -1
- package/dist/services/Store/Cosmos.d.ts +1 -1
- package/dist/services/Store/Cosmos.js +1 -1
- package/dist/services/Store/Disk.d.ts +4 -4
- package/dist/services/Store/Disk.d.ts.map +1 -1
- package/dist/services/Store/Disk.js +1 -1
- package/dist/services/Store/Memory.d.ts +4 -4
- package/dist/services/Store/Memory.d.ts.map +1 -1
- package/dist/services/Store/Redis.d.ts +1 -1
- package/dist/services/Store/Redis.js +1 -1
- package/dist/services/Store/index.d.ts +1 -1
- package/dist/services/Store/service.d.ts +14 -14
- package/dist/services/Store/service.d.ts.map +1 -1
- package/dist/services/Store/utils.d.ts +1 -1
- package/dist/services/Store/utils.d.ts.map +1 -1
- package/dist/services/Store/utils.js +1 -1
- package/dist/services/simpledb/cosmosdb.d.ts +6 -6
- package/dist/services/simpledb/cosmosdb.d.ts.map +1 -1
- package/dist/services/simpledb/cosmosdb.js +3 -3
- package/dist/services/simpledb/diskdb.d.ts +4 -4
- package/dist/services/simpledb/diskdb.d.ts.map +1 -1
- package/dist/services/simpledb/diskdb.js +1 -1
- package/dist/services/simpledb/memdb.d.ts +4 -4
- package/dist/services/simpledb/memdb.d.ts.map +1 -1
- package/dist/services/simpledb/memdb.js +1 -1
- package/dist/services/simpledb/mongodb.d.ts +5 -5
- package/dist/services/simpledb/mongodb.d.ts.map +1 -1
- package/dist/services/simpledb/mongodb.js +1 -1
- package/dist/services/simpledb/redisdb.d.ts +13 -13
- package/dist/services/simpledb/redisdb.d.ts.map +1 -1
- package/dist/services/simpledb/redisdb.js +1 -1
- package/dist/services/simpledb/shared.d.ts +19 -19
- package/dist/services/simpledb/shared.d.ts.map +1 -1
- package/dist/services/simpledb/shared.js +6 -5
- package/dist/services/simpledb/simpledb.d.ts +5 -5
- package/dist/services/simpledb/simpledb.d.ts.map +1 -1
- package/dist/services/simpledb/simpledb.js +2 -2
- package/package.json +12 -12
|
@@ -54,7 +54,7 @@ export type Middleware<
|
|
|
54
54
|
Context,
|
|
55
55
|
Config
|
|
56
56
|
>
|
|
57
|
-
makeRequestLayer: Layer<
|
|
57
|
+
makeRequestLayer: Layer<PR, MiddlewareE, R2>
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
export function makeRequestHandler<
|
|
@@ -92,20 +92,16 @@ export function makeRequestHandler<
|
|
|
92
92
|
errorHandler: <R>(
|
|
93
93
|
req: HttpServerRequest,
|
|
94
94
|
res: HttpServerResponse,
|
|
95
|
-
r2: Effect<
|
|
96
|
-
) => Effect<RErr | R
|
|
97
|
-
middlewareLayer?: Layer<
|
|
98
|
-
): Effect<
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
| R2,
|
|
106
|
-
HttpRequestError,
|
|
107
|
-
HttpServerResponse
|
|
108
|
-
> {
|
|
95
|
+
r2: Effect<HttpServerResponse, ValidationError | ResE | MiddlewareE, R>
|
|
96
|
+
) => Effect<HttpServerResponse, never, RErr | R>,
|
|
97
|
+
middlewareLayer?: Layer<PR, MiddlewareE, R2>
|
|
98
|
+
): Effect<HttpServerResponse, HttpRequestError, | HttpRouteContext
|
|
99
|
+
| HttpServerRequest
|
|
100
|
+
| RequestContextContainer
|
|
101
|
+
| ContextMapContainer
|
|
102
|
+
| RErr
|
|
103
|
+
| Exclude<Exclude<R, EnforceNonEmptyRecord<M>>, PR>
|
|
104
|
+
| R2> {
|
|
109
105
|
const { Request, Response, h: handle } = handler
|
|
110
106
|
|
|
111
107
|
const response: REST.ReqRes<any, any, any> = Response ? Response : Void
|
|
@@ -158,15 +154,13 @@ export function makeRequestHandler<
|
|
|
158
154
|
.annotateLogs({
|
|
159
155
|
method: req.method,
|
|
160
156
|
path: req.originalUrl,
|
|
161
|
-
...settings.verbose
|
|
162
|
-
? {
|
|
157
|
+
...(settings.verbose ? {
|
|
163
158
|
reqPath: pars.params.$$.pretty,
|
|
164
159
|
reqQuery: pars.query.$$.pretty,
|
|
165
160
|
reqBody: pretty(pars.body),
|
|
166
161
|
reqCookies: pretty(pars.cookies),
|
|
167
162
|
reqHeaders: pretty(pars.headers)
|
|
168
|
-
}
|
|
169
|
-
: undefined
|
|
163
|
+
} : undefined)
|
|
170
164
|
})
|
|
171
165
|
.andThen(
|
|
172
166
|
Effect.suspend(() => {
|
|
@@ -189,9 +183,9 @@ export function makeRequestHandler<
|
|
|
189
183
|
.setStatus(r === undefined ? 204 : 200)
|
|
190
184
|
)
|
|
191
185
|
) as Effect<
|
|
192
|
-
|
|
186
|
+
HttpServerResponse,
|
|
193
187
|
ValidationError | ResE,
|
|
194
|
-
|
|
188
|
+
Exclude<R, EnforceNonEmptyRecord<M>>
|
|
195
189
|
>
|
|
196
190
|
|
|
197
191
|
// Commands should not be interruptable.
|
|
@@ -200,9 +194,9 @@ export function makeRequestHandler<
|
|
|
200
194
|
? r.provide(middlewareLayer)
|
|
201
195
|
// PR is not relevant here
|
|
202
196
|
: (r as Effect<
|
|
203
|
-
|
|
197
|
+
HttpServerResponse,
|
|
204
198
|
ResE | MiddlewareE | ValidationError,
|
|
205
|
-
|
|
199
|
+
Exclude<Exclude<R, EnforceNonEmptyRecord<M>>, PR>
|
|
206
200
|
>)
|
|
207
201
|
return errorHandler(
|
|
208
202
|
req,
|
|
@@ -257,11 +251,9 @@ export function makeRequestHandler<
|
|
|
257
251
|
method: req.method,
|
|
258
252
|
path: req.originalUrl,
|
|
259
253
|
statusCode: res.status.toString(),
|
|
260
|
-
...settings.verbose
|
|
261
|
-
? {
|
|
254
|
+
...(settings.verbose ? {
|
|
262
255
|
resHeaders: pretty(res.headers)
|
|
263
|
-
}
|
|
264
|
-
: undefined
|
|
256
|
+
} : undefined)
|
|
265
257
|
})
|
|
266
258
|
)
|
|
267
259
|
|
|
@@ -273,5 +265,5 @@ export function makeRequestHandler<
|
|
|
273
265
|
handler.name
|
|
274
266
|
)
|
|
275
267
|
})
|
|
276
|
-
)
|
|
268
|
+
);
|
|
277
269
|
}
|
|
@@ -8,7 +8,7 @@ import type { RequestHandler } from "./base.js"
|
|
|
8
8
|
import { makeRequestHandler } from "./makeRequestHandler.js"
|
|
9
9
|
import type { Middleware } from "./makeRequestHandler.js"
|
|
10
10
|
|
|
11
|
-
export const RouteDescriptors =
|
|
11
|
+
export const RouteDescriptors = GenericTag<Ref<RouteDescriptorAny[]>>("@services/RouteDescriptors")
|
|
12
12
|
|
|
13
13
|
export function match<
|
|
14
14
|
R,
|
|
@@ -49,8 +49,8 @@ export function match<
|
|
|
49
49
|
errorHandler: <R>(
|
|
50
50
|
req: HttpServerRequest,
|
|
51
51
|
res: HttpServerResponse,
|
|
52
|
-
r2: Effect<
|
|
53
|
-
) => Effect<RErr | R
|
|
52
|
+
r2: Effect<HttpServerResponse, ValidationError | MiddlewareE | ResE, R>
|
|
53
|
+
) => Effect<HttpServerResponse, never, RErr | R>,
|
|
54
54
|
middleware?: Middleware<
|
|
55
55
|
R,
|
|
56
56
|
M,
|
|
@@ -71,7 +71,7 @@ export function match<
|
|
|
71
71
|
Config
|
|
72
72
|
>
|
|
73
73
|
) {
|
|
74
|
-
let middlewareLayer: Layer<
|
|
74
|
+
let middlewareLayer: Layer<PR, MiddlewareE, R2> | undefined = undefined
|
|
75
75
|
if (middleware) {
|
|
76
76
|
const { handler, makeRequestLayer } = middleware(requestHandler)
|
|
77
77
|
requestHandler = handler as any // todo
|
package/_src/api/setupRequest.ts
CHANGED
|
@@ -15,7 +15,7 @@ function makeInternalRequestContext(name: string) {
|
|
|
15
15
|
})
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
const withRequestSpan = <R, E, A>(f: Effect<
|
|
18
|
+
const withRequestSpan = <R, E, A>(f: Effect<A, E, R>) =>
|
|
19
19
|
RequestContextContainer
|
|
20
20
|
.get
|
|
21
21
|
.andThen((ctx) =>
|
|
@@ -50,7 +50,7 @@ const RequestContextStartLive = (requestContext: RequestContext | string) =>
|
|
|
50
50
|
/**
|
|
51
51
|
* @tsplus fluent effect/io/Effect setupRequestContext
|
|
52
52
|
*/
|
|
53
|
-
export function setupRequestContext<R, E, A>(self: Effect<
|
|
53
|
+
export function setupRequestContext<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext | string) {
|
|
54
54
|
return self
|
|
55
55
|
.pipe(withRequestSpan)
|
|
56
56
|
.provide(RequestContextStartLive(requestContext))
|
|
@@ -62,7 +62,7 @@ const UpdateRequestContextLive = (f: (rc: RequestContext) => RequestContext) =>
|
|
|
62
62
|
/**
|
|
63
63
|
* @tsplus fluent effect/io/Effect updateRequestContext
|
|
64
64
|
*/
|
|
65
|
-
export function updateRequestContext<R, E, A>(self: Effect<
|
|
65
|
+
export function updateRequestContext<R, E, A>(self: Effect<A, E, R>, f: (rc: RequestContext) => RequestContext) {
|
|
66
66
|
return self
|
|
67
67
|
// .provideServiceEffect(RequestContext.Tag, RequestContextContainer.get)
|
|
68
68
|
.provide(UpdateRequestContextLive(f))
|
|
@@ -14,7 +14,7 @@ export const logfmtLogger = Logger.make<unknown, void>(
|
|
|
14
14
|
"request.name": requestContext.name,
|
|
15
15
|
"request.namespace": requestContext.namespace,
|
|
16
16
|
"request.locale": requestContext.locale,
|
|
17
|
-
...requestContext.userProfile?.sub ? { "request.user.sub": requestContext.userProfile.sub } : {}
|
|
17
|
+
...(requestContext.userProfile?.sub ? { "request.user.sub": requestContext.userProfile.sub } : {})
|
|
18
18
|
}
|
|
19
19
|
.$$
|
|
20
20
|
.entries
|
package/_src/rateLimit.ts
CHANGED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
* @tsplus pipeable effect/io/Effect/Semaphore withPermitsDuration
|
|
34
34
|
*/
|
|
35
35
|
export function SEM_withPermitsDuration(permits: number, duration: Duration) {
|
|
36
|
-
return (self: Semaphore): <R, E, A>(effect: Effect<
|
|
36
|
+
return (self: Semaphore): <R, E, A>(effect: Effect<A, E, R>) => Effect<A, E, R> => {
|
|
37
37
|
return (effect) =>
|
|
38
38
|
Effect.uninterruptibleMask(
|
|
39
39
|
(restore) =>
|
|
@@ -47,7 +47,7 @@ export function SEM_withPermitsDuration(permits: number, duration: Duration) {
|
|
|
47
47
|
)
|
|
48
48
|
)
|
|
49
49
|
)
|
|
50
|
-
}
|
|
50
|
+
};
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/**
|
|
@@ -56,8 +56,8 @@ export function SEM_withPermitsDuration(permits: number, duration: Duration) {
|
|
|
56
56
|
*/
|
|
57
57
|
export function batchPar<R, E, A, R2, E2, A2, T>(
|
|
58
58
|
n: number,
|
|
59
|
-
forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect<
|
|
60
|
-
forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect<
|
|
59
|
+
forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect<A, E, R>,
|
|
60
|
+
forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect<A2, E2, R2>
|
|
61
61
|
) {
|
|
62
62
|
return (items: Iterable<T>) =>
|
|
63
63
|
items
|
|
@@ -77,8 +77,8 @@ export function batchPar<R, E, A, R2, E2, A2, T>(
|
|
|
77
77
|
*/
|
|
78
78
|
export function batch<R, E, A, R2, E2, A2, T>(
|
|
79
79
|
n: number,
|
|
80
|
-
forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect<
|
|
81
|
-
forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect<
|
|
80
|
+
forEachItem: (item: T, iWithinBatch: number, batchI: number) => Effect<A, E, R>,
|
|
81
|
+
forEachBatch: (a: NonEmptyArray<A>, i: number) => Effect<A2, E2, R2>
|
|
82
82
|
) {
|
|
83
83
|
return (items: Iterable<T>) =>
|
|
84
84
|
items
|
|
@@ -120,8 +120,8 @@ export function naiveRateLimit(
|
|
|
120
120
|
d: DUR
|
|
121
121
|
) {
|
|
122
122
|
return <T>(items: Iterable<T>) => (<R, E, A, R2, E2, A2>(
|
|
123
|
-
forEachItem: (i: T) => Effect<
|
|
124
|
-
forEachBatch: (a: A[]) => Effect<
|
|
123
|
+
forEachItem: (i: T) => Effect<A, E, R>,
|
|
124
|
+
forEachBatch: (a: A[]) => Effect<A2, E2, R2>
|
|
125
125
|
) =>
|
|
126
126
|
items
|
|
127
127
|
.chunk(n)
|
|
@@ -132,5 +132,5 @@ export function naiveRateLimit(
|
|
|
132
132
|
.forEachEffect(forEachItem, { concurrency: n })
|
|
133
133
|
.flatMap(forEachBatch)
|
|
134
134
|
)
|
|
135
|
-
))
|
|
135
|
+
));
|
|
136
136
|
}
|
|
@@ -24,11 +24,7 @@ const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPr
|
|
|
24
24
|
yield* $(Effect.logDebug("Sending email").annotateLogs("msg", inspect(renderedMsg, false, 5)))
|
|
25
25
|
|
|
26
26
|
const ret = yield* $(
|
|
27
|
-
Effect.async<
|
|
28
|
-
never,
|
|
29
|
-
Error | sgMail.ResponseError,
|
|
30
|
-
[sgMail.ClientResponse, Record<string, unknown>]
|
|
31
|
-
>(
|
|
27
|
+
Effect.async<[sgMail.ClientResponse, Record<string, unknown>], Error | sgMail.ResponseError>(
|
|
32
28
|
(cb) =>
|
|
33
29
|
void sgMail.send(renderedMsg, false, (err, result) =>
|
|
34
30
|
err
|
|
@@ -47,9 +43,9 @@ const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPr
|
|
|
47
43
|
// const { trackEvent } = yield* $(AiContextService)
|
|
48
44
|
// trackEvent(event)
|
|
49
45
|
return ret
|
|
50
|
-
})
|
|
46
|
+
});
|
|
51
47
|
}
|
|
52
|
-
}
|
|
48
|
+
};
|
|
53
49
|
})
|
|
54
50
|
|
|
55
51
|
/**
|
|
@@ -7,7 +7,7 @@ import type sgMail from "@sendgrid/mail"
|
|
|
7
7
|
* @tsplus companion Emailer.Ops
|
|
8
8
|
*/
|
|
9
9
|
export class Emailer extends TagClass<Emailer, {
|
|
10
|
-
sendMail: (msg: EmailMsgOptionalFrom) => Effect<
|
|
10
|
+
sendMail: (msg: EmailMsgOptionalFrom) => Effect<void, Error | ResponseError>
|
|
11
11
|
}>() {}
|
|
12
12
|
|
|
13
13
|
export interface SendgridConfig {
|
|
@@ -6,10 +6,10 @@ import * as Scope from "effect/Scope"
|
|
|
6
6
|
* @tsplus companion Operations.Ops
|
|
7
7
|
*/
|
|
8
8
|
export class Operations extends TagClass<Operations.Id, {
|
|
9
|
-
register: Effect<
|
|
10
|
-
update: (id: OperationId, progress: OperationProgress) => Effect<
|
|
11
|
-
find: (id: OperationId) => Effect<
|
|
12
|
-
cleanup: Effect<
|
|
9
|
+
register: Effect<OperationId, never, Scope.Scope>
|
|
10
|
+
update: (id: OperationId, progress: OperationProgress) => Effect<void>
|
|
11
|
+
find: (id: OperationId) => Effect<Option<Operation>>
|
|
12
|
+
cleanup: Effect<void>
|
|
13
13
|
}, Operations>() {}
|
|
14
14
|
export namespace Operations {
|
|
15
15
|
export interface Id {
|
|
@@ -20,7 +20,7 @@ export namespace Operations {
|
|
|
20
20
|
/**
|
|
21
21
|
* @tsplus getter effect/io/Effect forkOperation
|
|
22
22
|
*/
|
|
23
|
-
export function forkOperation<R, E, A>(self: Effect<
|
|
23
|
+
export function forkOperation<R, E, A>(self: Effect<A, E, R>) {
|
|
24
24
|
return Operations.flatMap(
|
|
25
25
|
(Operations) =>
|
|
26
26
|
Scope
|
|
@@ -37,14 +37,14 @@ export function forkOperation<R, E, A>(self: Effect<R, E, A>) {
|
|
|
37
37
|
/**
|
|
38
38
|
* @tsplus getter function forkOperation
|
|
39
39
|
*/
|
|
40
|
-
export function forkOperationFunction<R, E, A, Inp>(fnc: (inp: Inp) => Effect<
|
|
40
|
+
export function forkOperationFunction<R, E, A, Inp>(fnc: (inp: Inp) => Effect<A, E, R>) {
|
|
41
41
|
return (inp: Inp) => fnc(inp).forkOperation
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
45
|
* @tsplus static effect/io/Effect.Ops forkOperation
|
|
46
46
|
*/
|
|
47
|
-
export function forkOperation2<R, E, A>(self: (opId: OperationId) => Effect<
|
|
47
|
+
export function forkOperation2<R, E, A>(self: (opId: OperationId) => Effect<A, E, R>) {
|
|
48
48
|
return Operations.flatMap(
|
|
49
49
|
(Operations) =>
|
|
50
50
|
Scope
|
|
@@ -62,8 +62,8 @@ export function forkOperation2<R, E, A>(self: (opId: OperationId) => Effect<R, E
|
|
|
62
62
|
* @tsplus static effect/io/Effect.Ops forkOperationWithEffect
|
|
63
63
|
*/
|
|
64
64
|
export function forkOperationWithEffect<R, R2, E, E2, A, A2>(
|
|
65
|
-
self: (id: OperationId) => Effect<
|
|
66
|
-
fnc: (id: OperationId) => Effect<
|
|
65
|
+
self: (id: OperationId) => Effect<A, E, R>,
|
|
66
|
+
fnc: (id: OperationId) => Effect<A2, E2, R2>
|
|
67
67
|
) {
|
|
68
68
|
return Operations.flatMap(
|
|
69
69
|
(Operations) =>
|
|
@@ -14,7 +14,7 @@ export const reportQueueError = <E>(cause: Cause<E>, extras?: Record<string, unk
|
|
|
14
14
|
*
|
|
15
15
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
16
16
|
*/
|
|
17
|
-
export function forkDaemonReportQueue<R, E, A>(self: Effect<
|
|
17
|
+
export function forkDaemonReportQueue<R, E, A>(self: Effect<A, E, R>) {
|
|
18
18
|
return self.tapErrorCause(reportNonInterruptedFailureCause({})).fork.daemonChildren
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -24,19 +24,19 @@ export const reportFatalQueueError = reportError(
|
|
|
24
24
|
|
|
25
25
|
export function reportNonInterruptedFailure(context?: Record<string, unknown>) {
|
|
26
26
|
const report = reportNonInterruptedFailureCause(context)
|
|
27
|
-
return <R, E, A>(inp: Effect<
|
|
27
|
+
return <R, E, A>(inp: Effect<A, E, R>): Effect<Exit<A, E>, never, R> =>
|
|
28
28
|
inp
|
|
29
29
|
.exit
|
|
30
30
|
.flatMap((result) =>
|
|
31
31
|
result.match({ onFailure: (cause) => report(cause).map(() => result), onSuccess: () => Effect.sync(() => result) })
|
|
32
|
-
)
|
|
32
|
+
);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
export function reportNonInterruptedFailureCause(context?: Record<string, unknown>) {
|
|
36
|
-
return <E>(cause: Cause<E>): Effect<
|
|
36
|
+
return <E>(cause: Cause<E>): Effect<void> => {
|
|
37
37
|
if (cause.isInterrupted()) {
|
|
38
38
|
return (cause as Cause<never>).failCause
|
|
39
39
|
}
|
|
40
40
|
return reportQueueError(cause, context)
|
|
41
|
-
}
|
|
41
|
+
};
|
|
42
42
|
}
|
|
@@ -18,8 +18,8 @@ export function makeMemQueue<
|
|
|
18
18
|
>(
|
|
19
19
|
queueName: string,
|
|
20
20
|
queueDrainName: string,
|
|
21
|
-
schema: S.Schema<
|
|
22
|
-
drainSchema: S.Schema<
|
|
21
|
+
schema: S.Schema<Evt, EvtE>,
|
|
22
|
+
drainSchema: S.Schema<DrainEvt, DrainEvtE>
|
|
23
23
|
) {
|
|
24
24
|
return Effect.gen(function*($) {
|
|
25
25
|
const mem = yield* $(MemQueue)
|
|
@@ -53,7 +53,7 @@ export function makeMemQueue<
|
|
|
53
53
|
)
|
|
54
54
|
}),
|
|
55
55
|
makeDrain: <DrainE, DrainR>(
|
|
56
|
-
handleEvent: (ks: DrainEvt) => Effect<
|
|
56
|
+
handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>
|
|
57
57
|
) =>
|
|
58
58
|
Effect.gen(function*($) {
|
|
59
59
|
const silenceAndReportError = reportNonInterruptedFailure({ name: "MemQueue.drain." + queueDrainName })
|
|
@@ -92,6 +92,6 @@ export function makeMemQueue<
|
|
|
92
92
|
.forkScoped
|
|
93
93
|
)
|
|
94
94
|
})
|
|
95
|
-
} satisfies QueueBase<Evt, DrainEvt
|
|
96
|
-
})
|
|
95
|
+
} satisfies QueueBase<Evt, DrainEvt>;
|
|
96
|
+
});
|
|
97
97
|
}
|
|
@@ -28,8 +28,8 @@ export function makeServiceBusQueue<
|
|
|
28
28
|
>(
|
|
29
29
|
_queueName: string,
|
|
30
30
|
queueDrainName: string,
|
|
31
|
-
schema: S.Schema<
|
|
32
|
-
drainSchema: S.Schema<
|
|
31
|
+
schema: S.Schema<Evt, EvtE>,
|
|
32
|
+
drainSchema: S.Schema<DrainEvt, DrainEvtE>
|
|
33
33
|
) {
|
|
34
34
|
const wireSchema = struct({
|
|
35
35
|
body: schema,
|
|
@@ -48,7 +48,7 @@ export function makeServiceBusQueue<
|
|
|
48
48
|
|
|
49
49
|
return {
|
|
50
50
|
makeDrain: <DrainE, DrainR>(
|
|
51
|
-
handleEvent: (ks: DrainEvt) => Effect<
|
|
51
|
+
handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>
|
|
52
52
|
) =>
|
|
53
53
|
Effect.gen(function*($) {
|
|
54
54
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -111,8 +111,8 @@ export function makeServiceBusQueue<
|
|
|
111
111
|
.forkDaemonReportQueue
|
|
112
112
|
)
|
|
113
113
|
})
|
|
114
|
-
} satisfies QueueBase<Evt, DrainEvt
|
|
115
|
-
})
|
|
114
|
+
} satisfies QueueBase<Evt, DrainEvt>;
|
|
115
|
+
});
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
/**
|
|
@@ -4,11 +4,11 @@ import type { ContextMapContainer } from "../Store/ContextMapContainer.js"
|
|
|
4
4
|
|
|
5
5
|
export interface QueueBase<Evt, DrainEvt> {
|
|
6
6
|
makeDrain: <DrainE, DrainR>(
|
|
7
|
-
makeHandleEvent: (ks: DrainEvt) => Effect<
|
|
8
|
-
) => Effect<Scope | RequestContextContainer | ContextMapContainer | DrainR
|
|
7
|
+
makeHandleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>
|
|
8
|
+
) => Effect<void, never, Scope | RequestContextContainer | ContextMapContainer | DrainR>
|
|
9
9
|
publish: (
|
|
10
10
|
...messages: NonEmptyReadonlyArray<Evt>
|
|
11
|
-
) => Effect<
|
|
11
|
+
) => Effect<void>
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
/**
|