@effect-app/infra 2.53.1 → 2.53.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/Emailer/Sendgrid.d.ts.map +1 -1
- package/dist/Emailer/Sendgrid.js +33 -35
- package/dist/Emailer/fake.js +4 -6
- package/package.json +11 -11
- package/src/Emailer/Sendgrid.ts +43 -45
- package/src/Emailer/fake.ts +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sendgrid.d.ts","sourceRoot":"","sources":["../../src/Emailer/Sendgrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAEpE,OAAO,EAAE,KAAK,EAAiC,MAAM,YAAY,CAAA;AAIjE,OAAO,EAAE,OAAO,EAAE,KAAK,QAAQ,EAA6B,KAAK,cAAc,EAAiB,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"Sendgrid.d.ts","sourceRoot":"","sources":["../../src/Emailer/Sendgrid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4CAA4C,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAEpE,OAAO,EAAE,KAAK,EAAiC,MAAM,YAAY,CAAA;AAIjE,OAAO,EAAE,OAAO,EAAE,KAAK,QAAQ,EAA6B,KAAK,cAAc,EAAiB,MAAM,cAAc,CAAA;AAwDpH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,uDAE9C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,OAAO,SAWpC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,WAO1C"}
|
package/dist/Emailer/Sendgrid.js
CHANGED
|
@@ -7,41 +7,39 @@ import { Emailer, SendMailError } from "./service.js";
|
|
|
7
7
|
const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPrefix }) => Effect.sync(() => {
|
|
8
8
|
sgMail.setApiKey(Redacted.value(apiKey));
|
|
9
9
|
return Emailer.of({
|
|
10
|
-
sendMail(msg_) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
replyTo: msg_.replyTo ?? (msg_.from ? undefined : defaultReplyTo)
|
|
16
|
-
});
|
|
17
|
-
const render = renderMessage(!realMail);
|
|
18
|
-
const renderedMsg_ = render(msg);
|
|
19
|
-
const renderedMsg = {
|
|
20
|
-
...renderedMsg_,
|
|
21
|
-
subject: `${subjectPrefix}${renderedMsg_.subject}`,
|
|
22
|
-
..."content" in renderedMsg_
|
|
23
|
-
? { content: [...renderedMsg_.content] }
|
|
24
|
-
: {}
|
|
25
|
-
};
|
|
26
|
-
yield* InfraLogger.logDebug("Sending email").pipe(Effect.annotateLogs("msg", inspect(renderedMsg, false, 5)));
|
|
27
|
-
const ret = yield* Effect
|
|
28
|
-
.async((cb) => void sgMail.send(renderedMsg, // sue me
|
|
29
|
-
msg.isMultiple ?? true, (err, result) => err
|
|
30
|
-
? cb(Effect.fail(err))
|
|
31
|
-
: cb(Effect.sync(() => result))))
|
|
32
|
-
.pipe(Effect.mapError((raw) => new SendMailError({ raw })));
|
|
33
|
-
// const event = {
|
|
34
|
-
// name: "EmailSent",
|
|
35
|
-
// properties: {
|
|
36
|
-
// templateId: msg.templateId
|
|
37
|
-
// }
|
|
38
|
-
// }
|
|
39
|
-
// yield* InfraLogger.logDebug("Tracking email event").annotateLogs("event", event.$$.pretty)
|
|
40
|
-
// const { trackEvent } = yield* AiContextService
|
|
41
|
-
// trackEvent(event)
|
|
42
|
-
return ret;
|
|
10
|
+
sendMail: Effect.fn("Sendgrid.sendMail")(function* (msg_) {
|
|
11
|
+
const msg = dropUndefinedT({
|
|
12
|
+
...msg_,
|
|
13
|
+
from: msg_.from ?? defaultFrom,
|
|
14
|
+
replyTo: msg_.replyTo ?? (msg_.from ? undefined : defaultReplyTo)
|
|
43
15
|
});
|
|
44
|
-
|
|
16
|
+
const render = renderMessage(!realMail);
|
|
17
|
+
const renderedMsg_ = render(msg);
|
|
18
|
+
const renderedMsg = {
|
|
19
|
+
...renderedMsg_,
|
|
20
|
+
subject: `${subjectPrefix}${renderedMsg_.subject}`,
|
|
21
|
+
..."content" in renderedMsg_
|
|
22
|
+
? { content: [...renderedMsg_.content] }
|
|
23
|
+
: {}
|
|
24
|
+
};
|
|
25
|
+
yield* InfraLogger.logDebug("Sending email").pipe(Effect.annotateLogs("msg", inspect(renderedMsg, false, 5)));
|
|
26
|
+
const ret = yield* Effect
|
|
27
|
+
.async((cb) => void sgMail.send(renderedMsg, // sue me
|
|
28
|
+
msg.isMultiple ?? true, (err, result) => err
|
|
29
|
+
? cb(Effect.fail(err))
|
|
30
|
+
: cb(Effect.sync(() => result))))
|
|
31
|
+
.pipe(Effect.mapError((raw) => new SendMailError({ raw })));
|
|
32
|
+
// const event = {
|
|
33
|
+
// name: "EmailSent",
|
|
34
|
+
// properties: {
|
|
35
|
+
// templateId: msg.templateId
|
|
36
|
+
// }
|
|
37
|
+
// }
|
|
38
|
+
// yield* InfraLogger.logDebug("Tracking email event").annotateLogs("event", event.$$.pretty)
|
|
39
|
+
// const { trackEvent } = yield* AiContextService
|
|
40
|
+
// trackEvent(event)
|
|
41
|
+
return ret;
|
|
42
|
+
})
|
|
45
43
|
});
|
|
46
44
|
});
|
|
47
45
|
export function Sendgrid(config) {
|
|
@@ -102,4 +100,4 @@ function renderMailData(md) {
|
|
|
102
100
|
}
|
|
103
101
|
return md.email;
|
|
104
102
|
}
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VuZGdyaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRW1haWxlci9TZW5kZ3JpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBaUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXBILE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFrQixFQUFFLEVBQUUsQ0FDeEcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDZixNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUV4QyxPQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDaEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBQyxJQUEwQjtZQUMzRSxNQUFNLEdBQUcsR0FBYSxjQUFjLENBQUM7Z0JBQ25DLEdBQUcsSUFBSTtnQkFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxXQUFXO2dCQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2FBQ2xFLENBQUMsQ0FB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
|
package/dist/Emailer/fake.js
CHANGED
|
@@ -5,11 +5,9 @@ import { Emailer } from "./service.js";
|
|
|
5
5
|
const makeFake = InfraLogger
|
|
6
6
|
.logInfo("FAKE Emailer Service enabled")
|
|
7
7
|
.pipe(Effect.map(() => Emailer.of({
|
|
8
|
-
sendMail(msg)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
.pipe(Effect.annotateLogs("msg", pretty(msg)));
|
|
12
|
-
}
|
|
8
|
+
sendMail: Effect.fn("Fake.sendMail")((msg) => InfraLogger
|
|
9
|
+
.logDebug(`Fake send mail`)
|
|
10
|
+
.pipe(Effect.annotateLogs("msg", pretty(msg))))
|
|
13
11
|
})));
|
|
14
12
|
export const FakeSendgrid = Emailer.toLayer(makeFake);
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFrZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FbWFpbGVyL2Zha2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXRDLE1BQU0sUUFBUSxHQUFHLFdBQVc7S0FDekIsT0FBTyxDQUFDLDhCQUE4QixDQUFDO0tBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUNwQixPQUFPLENBQUMsRUFBRSxDQUFDO0lBQ1QsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUMzQyxXQUFXO1NBQ1IsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1NBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNqRDtDQUNGLENBQUMsQ0FDSCxDQUFDLENBQUE7QUFFSixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQSJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "2.53.
|
|
3
|
+
"version": "2.53.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -8,17 +8,17 @@
|
|
|
8
8
|
"change-case": "^5.4.4",
|
|
9
9
|
"cross-fetch": "^4.1.0",
|
|
10
10
|
"express-oauth2-jwt-bearer": "^1.6.1",
|
|
11
|
-
"fast-check": "~4.1.
|
|
11
|
+
"fast-check": "~4.1.1",
|
|
12
12
|
"path-parser": "^6.1.0",
|
|
13
13
|
"proper-lockfile": "^4.1.2",
|
|
14
14
|
"pure-rand": "7.0.1",
|
|
15
15
|
"query-string": "^9.1.1",
|
|
16
|
-
"effect-app": "2.38.
|
|
16
|
+
"effect-app": "2.38.5"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@azure/cosmos": "^4.3.0",
|
|
20
20
|
"@azure/service-bus": "^7.9.5",
|
|
21
|
-
"@sentry/node": "^9.
|
|
21
|
+
"@sentry/node": "^9.12.0",
|
|
22
22
|
"@types/express": "^5.0.1",
|
|
23
23
|
"@types/node": "~22.14.0",
|
|
24
24
|
"@types/proper-lockfile": "^4.1.4",
|
|
@@ -37,17 +37,17 @@
|
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"@azure/cosmos": "^4.3.0",
|
|
39
39
|
"@azure/service-bus": "^7.9.5",
|
|
40
|
-
"@effect/experimental": "^0.44.
|
|
41
|
-
"@effect/platform": "^0.80.
|
|
40
|
+
"@effect/experimental": "^0.44.7",
|
|
41
|
+
"@effect/platform": "^0.80.7",
|
|
42
42
|
"@effect/rpc-http": "^0.52.4",
|
|
43
|
-
"@effect/rpc": "^0.55.
|
|
44
|
-
"@effect/sql": "^0.33.
|
|
45
|
-
"@effect/vitest": "^0.20.
|
|
43
|
+
"@effect/rpc": "^0.55.10",
|
|
44
|
+
"@effect/sql": "^0.33.7",
|
|
45
|
+
"@effect/vitest": "^0.20.7",
|
|
46
46
|
"@sendgrid/helpers": "^8.0.0",
|
|
47
|
-
"@sendgrid/mail": "^8.1.
|
|
47
|
+
"@sendgrid/mail": "^8.1.5",
|
|
48
48
|
"redis": "^3.1.2",
|
|
49
49
|
"redlock": "^4.2.0",
|
|
50
|
-
"effect": "^3.14.
|
|
50
|
+
"effect": "^3.14.7",
|
|
51
51
|
"express": "^5.1.0"
|
|
52
52
|
},
|
|
53
53
|
"typesVersions": {
|
package/src/Emailer/Sendgrid.ts
CHANGED
|
@@ -12,54 +12,52 @@ const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPr
|
|
|
12
12
|
sgMail.setApiKey(Redacted.value(apiKey))
|
|
13
13
|
|
|
14
14
|
return Emailer.of({
|
|
15
|
-
sendMail(msg_: EmailMsgOptionalFrom) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const render = renderMessage(!realMail)
|
|
15
|
+
sendMail: Effect.fn("Sendgrid.sendMail")(function*(msg_: EmailMsgOptionalFrom) {
|
|
16
|
+
const msg: EmailMsg = dropUndefinedT({
|
|
17
|
+
...msg_,
|
|
18
|
+
from: msg_.from ?? defaultFrom,
|
|
19
|
+
replyTo: msg_.replyTo ?? (msg_.from ? undefined : defaultReplyTo)
|
|
20
|
+
})
|
|
21
|
+
const render = renderMessage(!realMail)
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
const renderedMsg_ = render(msg)
|
|
24
|
+
const renderedMsg = {
|
|
25
|
+
...renderedMsg_ as Omit<typeof renderedMsg_, "content">,
|
|
26
|
+
subject: `${subjectPrefix}${renderedMsg_.subject}`,
|
|
27
|
+
..."content" in renderedMsg_
|
|
28
|
+
? { content: [...renderedMsg_.content] as [MailContent, ...MailContent[]] }
|
|
29
|
+
: {}
|
|
30
|
+
}
|
|
31
|
+
yield* InfraLogger.logDebug("Sending email").pipe(Effect.annotateLogs("msg", inspect(renderedMsg, false, 5)))
|
|
33
32
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
33
|
+
const ret = yield* Effect
|
|
34
|
+
.async<
|
|
35
|
+
[sgMail.ClientResponse, Record<string, unknown>],
|
|
36
|
+
Error | sgMail.ResponseError
|
|
37
|
+
>(
|
|
38
|
+
(cb) =>
|
|
39
|
+
void sgMail.send(
|
|
40
|
+
renderedMsg as any, // sue me
|
|
41
|
+
msg.isMultiple ?? true,
|
|
42
|
+
(err, result) =>
|
|
43
|
+
err
|
|
44
|
+
? cb(Effect.fail(err))
|
|
45
|
+
: cb(Effect.sync(() => result))
|
|
46
|
+
)
|
|
47
|
+
)
|
|
48
|
+
.pipe(Effect.mapError((raw) => new SendMailError({ raw })))
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
50
|
+
// const event = {
|
|
51
|
+
// name: "EmailSent",
|
|
52
|
+
// properties: {
|
|
53
|
+
// templateId: msg.templateId
|
|
54
|
+
// }
|
|
55
|
+
// }
|
|
56
|
+
// yield* InfraLogger.logDebug("Tracking email event").annotateLogs("event", event.$$.pretty)
|
|
57
|
+
// const { trackEvent } = yield* AiContextService
|
|
58
|
+
// trackEvent(event)
|
|
59
|
+
return ret
|
|
60
|
+
})
|
|
63
61
|
})
|
|
64
62
|
})
|
|
65
63
|
|
package/src/Emailer/fake.ts
CHANGED
|
@@ -7,11 +7,11 @@ const makeFake = InfraLogger
|
|
|
7
7
|
.logInfo("FAKE Emailer Service enabled")
|
|
8
8
|
.pipe(Effect.map(() =>
|
|
9
9
|
Emailer.of({
|
|
10
|
-
sendMail(msg)
|
|
11
|
-
|
|
10
|
+
sendMail: Effect.fn("Fake.sendMail")((msg) =>
|
|
11
|
+
InfraLogger
|
|
12
12
|
.logDebug(`Fake send mail`)
|
|
13
13
|
.pipe(Effect.annotateLogs("msg", pretty(msg)))
|
|
14
|
-
|
|
14
|
+
)
|
|
15
15
|
})
|
|
16
16
|
))
|
|
17
17
|
|