@effect-app/infra 2.30.4 → 2.31.1

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 CHANGED
@@ -1,5 +1,26 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 2.31.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 750b46a: update packages
8
+ - e599644: fix: repeat SSE keep-alive
9
+ - Updated dependencies [750b46a]
10
+ - effect-app@2.19.3
11
+
12
+ ## 2.31.0
13
+
14
+ ### Minor Changes
15
+
16
+ - 2b39183: improve: Tighten Sendgrid types and enable isMultiple by default
17
+
18
+ ### Patch Changes
19
+
20
+ - 1bfc3d8: update packages
21
+ - Updated dependencies [1bfc3d8]
22
+ - effect-app@2.19.2
23
+
3
24
  ## 2.30.4
4
25
 
5
26
  ### Patch Changes
@@ -33,10 +33,15 @@ const makeSendgrid = ({
33
33
  const renderedMsg_ = render(msg);
34
34
  const renderedMsg = {
35
35
  ...renderedMsg_,
36
- subject: `${subjectPrefix}${renderedMsg_.subject}`
36
+ subject: `${subjectPrefix}${renderedMsg_.subject}`,
37
+ ...("content" in renderedMsg_ ? {
38
+ content: [...renderedMsg_.content]
39
+ } : {})
37
40
  };
38
41
  yield* _logger.InfraLogger.logDebug("Sending email").pipe(_effectApp.Effect.annotateLogs("msg", (0, _util.inspect)(renderedMsg, false, 5)));
39
- const ret = yield* _effectApp.Effect.async(cb => void _mail.default.send(renderedMsg, false, (err, result) => err ? cb(_effectApp.Effect.fail(err)) : cb(_effectApp.Effect.sync(() => result))));
42
+ const ret = yield* _effectApp.Effect.async(cb => void _mail.default.send(renderedMsg,
43
+ // sue me
44
+ msg.isMultiple ?? true, (err, result) => err ? cb(_effectApp.Effect.fail(err)) : cb(_effectApp.Effect.sync(() => result))));
40
45
  // const event = {
41
46
  // name: "EmailSent",
42
47
  // properties: {
@@ -1 +1 @@
1
- {"version":3,"file":"Sendgrid.cjs","names":["_mail","_interopRequireDefault","require","_effectApp","_utils","_util","_logger","_service","e","__esModule","default","makeSendgrid","apiKey","defaultFrom","defaultReplyTo","realMail","subjectPrefix","Effect","sync","sgMail","setApiKey","Redacted","value","Emailer","of","sendMail","msg_","gen","msg","dropUndefinedT","from","replyTo","undefined","render","renderMessage","renderedMsg_","renderedMsg","subject","InfraLogger","logDebug","pipe","annotateLogs","inspect","ret","async","cb","send","err","result","fail","Sendgrid","config","toLayer","forceFake","i","makeId","to","renderFake","cc","bcc","renderFakeIfTest","isTestAddress","toLowerCase","endsWith","email","addr","name","renderMailData","eq","Equivalence","mapInput","string","Array","isArray","dedupeWith","map","x","md","join"],"sources":["../../src/Emailer/Sendgrid.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Sendgrid.cjs","names":["_mail","_interopRequireDefault","require","_effectApp","_utils","_util","_logger","_service","e","__esModule","default","makeSendgrid","apiKey","defaultFrom","defaultReplyTo","realMail","subjectPrefix","Effect","sync","sgMail","setApiKey","Redacted","value","Emailer","of","sendMail","msg_","gen","msg","dropUndefinedT","from","replyTo","undefined","render","renderMessage","renderedMsg_","renderedMsg","subject","content","InfraLogger","logDebug","pipe","annotateLogs","inspect","ret","async","cb","send","isMultiple","err","result","fail","Sendgrid","config","toLayer","forceFake","i","makeId","to","renderFake","cc","bcc","renderFakeIfTest","isTestAddress","toLowerCase","endsWith","email","addr","name","renderMailData","eq","Equivalence","mapInput","string","Array","isArray","dedupeWith","map","x","md","join"],"sources":["../../src/Emailer/Sendgrid.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"service.cjs","names":["_effectApp","require","Emailer","Context","TagId","exports"],"sources":["../../src/Emailer/service.ts"],"sourcesContent":[null],"mappings":";;;;;;AAIA,IAAAA,UAAA,GAAAC,OAAA;AAGA;;;;AAIM,MAAOC,OAAQ,SAAQC,kBAAO,CAACC,KAAK,CAAC,oBAAoB,CAAC,EAE5D;AAAGC,OAAA,CAAAH,OAAA,GAAAA,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"service.cjs","names":["_effectApp","require","Emailer","Context","TagId","exports"],"sources":["../../src/Emailer/service.ts"],"sourcesContent":[null],"mappings":";;;;;;AAGA,IAAAA,UAAA,GAAAC,OAAA;AAGA;;;;AAIM,MAAOC,OAAQ,SAAQC,kBAAO,CAACC,KAAK,CAAC,oBAAoB,CAAC,EAE5D;AAAGC,OAAA,CAAAH,OAAA,GAAAA,OAAA","ignoreList":[]}
@@ -11,7 +11,7 @@ var _logger = require("../../logger.cjs");
11
11
  var _setupRequest = require("../setupRequest.cjs");
12
12
  // Tell the client to retry every 10 seconds if connectivity is lost
13
13
  const setRetry = _effectApp.Stream.succeed("retry: 10000");
14
- const keepAlive = _effectApp.Stream.schedule(_effectApp.Effect.succeed(":keep-alive"), _effectApp.Schedule.fixed(_effectApp.Duration.seconds(15)));
14
+ const keepAlive = _effectApp.Stream.repeat(_effectApp.Effect.succeed(":keep-alive"), _effectApp.Schedule.fixed(_effectApp.Duration.seconds(15)));
15
15
  const makeSSE = schema => events => _effectApp.Effect.gen(function* () {
16
16
  yield* _logger.InfraLogger.logInfo("$ start listening to events");
17
17
  const enc = new TextEncoder();
@@ -1 +1 @@
1
- {"version":3,"file":"events.cjs","names":["_effectApp","require","_http","_errorReporter","_logger","_setupRequest","setRetry","Stream","succeed","keepAlive","schedule","Effect","Schedule","fixed","Duration","seconds","makeSSE","schema","events","gen","InfraLogger","logInfo","enc","TextEncoder","encode","S","eventStream","flatMap","_","evt","pipe","andThen","id","JSON","stringify","stream","merge","map","ctx","context","res","HttpServerResponse","tapErrorCause","reportError","provideContext","contentType","headers","HttpHeaders","fromInput","setupRequestContextFromCurrent","exports"],"sources":["../../../src/api/internal/events.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAEA;AACA,MAAMK,QAAQ,GAAGC,iBAAM,CAACC,OAAO,CAAC,cAAc,CAAC;AAC/C,MAAMC,SAAS,GAAGF,iBAAM,CAACG,QAAQ,CAACC,iBAAM,CAACH,OAAO,CAAC,aAAa,CAAC,EAAEI,mBAAQ,CAACC,KAAK,CAACC,mBAAQ,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/F,MAAMC,OAAO,GAClBC,MAA2B,IAEtBC,MAA0D,IAC/DP,iBAAM,CACHQ,GAAG,CAAC,aAAS;EACZ,OAAOC,mBAAW,CAACC,OAAO,CAAC,6BAA6B,CAAC;EAEzD,MAAMC,GAAG,GAAG,IAAIC,WAAW,EAAE;EAE7B,MAAMC,MAAM,GAAGC,YAAC,CAACD,MAAM,CAACP,MAAM,CAAC;EAE/B,MAAMS,WAAW,GAAGnB,iBAAM,CAACoB,OAAO,CAChCT,MAAM,EACLU,CAAC,IACAJ,MAAM,CAACI,CAAC,CAACC,GAAG,CAAC,CACVC,IAAI,CAACnB,iBAAM,CAACoB,OAAO,CAAEF,GAAG,IAAK,OAAOD,CAAC,CAACC,GAAG,CAACG,EAAE,WAAWC,IAAI,CAACC,SAAS,CAACL,GAAG,CAAC,EAAE,CAAC,CAAC,CACpF;EAED,MAAMM,MAAM,GAAG,IAAAL,eAAI,EACjBxB,QAAQ,EACRC,iBAAM,CAAC6B,KAAK,CAAC3B,SAAS,CAAC,EACvBF,iBAAM,CAAC6B,KAAK,CAACV,WAAW,CAAC,EACzBnB,iBAAM,CAAC8B,GAAG,CAAET,CAAC,IAAKN,GAAG,CAACE,MAAM,CAACI,CAAC,GAAG,MAAM,CAAC,CAAC,CAC1C;EAED,MAAMU,GAAG,GAAG,OAAO3B,iBAAM,CAAC4B,OAAO,EAAU;EAC3C,MAAMC,GAAG,GAAGC,wBAAkB,CAACN,MAAM,CACnCA,MAAM,CACHL,IAAI,CACHvB,iBAAM,CAACmC,aAAa,CAAC,IAAAC,0BAAW,EAAC,SAAS,CAAC,CAAC,EAC5CpC,iBAAM,CAACqC,cAAc,CAACN,GAAG,CAAC,CAC3B,EACH;IACEO,WAAW,EAAE,mBAAmB;IAChCC,OAAO,EAAEC,iBAAW,CAACC,SAAS,CAAC;MAC7B,cAAc,EAAE,mBAAmB;MACnC,eAAe,EAAE,UAAU;MAC3B,mBAAmB,EAAE,IAAI;MACzB,YAAY,EAAE,YAAY,CAAC;KAC5B;GACF,CACF;EACD,OAAOR,GAAG;AACZ,CAAC,CAAC,CACDV,IAAI,CAACnB,iBAAM,CAAC+B,aAAa,CAAC,IAAAC,0BAAW,EAAC,SAAS,CAAC,CAAC,EAAE,IAAAM,4CAA8B,EAAC,QAAQ,CAAC,CAAC;AAAAC,OAAA,CAAAlC,OAAA,GAAAA,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"events.cjs","names":["_effectApp","require","_http","_errorReporter","_logger","_setupRequest","setRetry","Stream","succeed","keepAlive","repeat","Effect","Schedule","fixed","Duration","seconds","makeSSE","schema","events","gen","InfraLogger","logInfo","enc","TextEncoder","encode","S","eventStream","flatMap","_","evt","pipe","andThen","id","JSON","stringify","stream","merge","map","ctx","context","res","HttpServerResponse","tapErrorCause","reportError","provideContext","contentType","headers","HttpHeaders","fromInput","setupRequestContextFromCurrent","exports"],"sources":["../../../src/api/internal/events.ts"],"sourcesContent":[null],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AAEA;AACA,MAAMK,QAAQ,GAAGC,iBAAM,CAACC,OAAO,CAAC,cAAc,CAAC;AAC/C,MAAMC,SAAS,GAAGF,iBAAM,CAACG,MAAM,CAACC,iBAAM,CAACH,OAAO,CAAC,aAAa,CAAC,EAAEI,mBAAQ,CAACC,KAAK,CAACC,mBAAQ,CAACC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAE7F,MAAMC,OAAO,GAClBC,MAA2B,IAEtBC,MAA0D,IAC/DP,iBAAM,CACHQ,GAAG,CAAC,aAAS;EACZ,OAAOC,mBAAW,CAACC,OAAO,CAAC,6BAA6B,CAAC;EAEzD,MAAMC,GAAG,GAAG,IAAIC,WAAW,EAAE;EAE7B,MAAMC,MAAM,GAAGC,YAAC,CAACD,MAAM,CAACP,MAAM,CAAC;EAE/B,MAAMS,WAAW,GAAGnB,iBAAM,CAACoB,OAAO,CAChCT,MAAM,EACLU,CAAC,IACAJ,MAAM,CAACI,CAAC,CAACC,GAAG,CAAC,CACVC,IAAI,CAACnB,iBAAM,CAACoB,OAAO,CAAEF,GAAG,IAAK,OAAOD,CAAC,CAACC,GAAG,CAACG,EAAE,WAAWC,IAAI,CAACC,SAAS,CAACL,GAAG,CAAC,EAAE,CAAC,CAAC,CACpF;EAED,MAAMM,MAAM,GAAG,IAAAL,eAAI,EACjBxB,QAAQ,EACRC,iBAAM,CAAC6B,KAAK,CAAC3B,SAAS,CAAC,EACvBF,iBAAM,CAAC6B,KAAK,CAACV,WAAW,CAAC,EACzBnB,iBAAM,CAAC8B,GAAG,CAAET,CAAC,IAAKN,GAAG,CAACE,MAAM,CAACI,CAAC,GAAG,MAAM,CAAC,CAAC,CAC1C;EAED,MAAMU,GAAG,GAAG,OAAO3B,iBAAM,CAAC4B,OAAO,EAAU;EAC3C,MAAMC,GAAG,GAAGC,wBAAkB,CAACN,MAAM,CACnCA,MAAM,CACHL,IAAI,CACHvB,iBAAM,CAACmC,aAAa,CAAC,IAAAC,0BAAW,EAAC,SAAS,CAAC,CAAC,EAC5CpC,iBAAM,CAACqC,cAAc,CAACN,GAAG,CAAC,CAC3B,EACH;IACEO,WAAW,EAAE,mBAAmB;IAChCC,OAAO,EAAEC,iBAAW,CAACC,SAAS,CAAC;MAC7B,cAAc,EAAE,mBAAmB;MACnC,eAAe,EAAE,UAAU;MAC3B,mBAAmB,EAAE,IAAI;MACzB,YAAY,EAAE,YAAY,CAAC;KAC5B;GACF,CACF;EACD,OAAOR,GAAG;AACZ,CAAC,CAAC,CACDV,IAAI,CAACnB,iBAAM,CAAC+B,aAAa,CAAC,IAAAC,0BAAW,EAAC,SAAS,CAAC,CAAC,EAAE,IAAAM,4CAA8B,EAAC,QAAQ,CAAC,CAAC;AAAAC,OAAA,CAAAlC,OAAA,GAAAA,OAAA","ignoreList":[]}
@@ -1,4 +1,6 @@
1
1
  import type { EmailData } from "@sendgrid/helpers/classes/email-address.js";
2
+ import type { MailContent } from "@sendgrid/helpers/classes/mail.js";
3
+ import { Array } from "effect-app";
2
4
  import { Emailer } from "./service.js";
3
5
  import type { EmailMsg, SendgridConfig } from "./service.js";
4
6
  /**
@@ -12,13 +14,11 @@ export declare function renderMessage(forceFake: boolean): (msg: EmailMsg) => {
12
14
  to: EmailData | EmailData[];
13
15
  cc: EmailData | EmailData[];
14
16
  bcc: EmailData | EmailData[];
15
- from: EmailData;
16
17
  replyTo?: EmailData;
17
18
  sendAt?: number;
18
19
  subject?: string;
19
20
  text: string;
20
21
  html?: string;
21
- content?: import("@sendgrid/helpers/classes/mail.js").MailContent[];
22
22
  templateId?: string;
23
23
  personalizations?: import("@sendgrid/helpers/classes/personalization.js").PersonalizationData[];
24
24
  attachments?: import("@sendgrid/helpers/classes/attachment.js").AttachmentData[];
@@ -48,17 +48,16 @@ export declare function renderMessage(forceFake: boolean): (msg: EmailMsg) => {
48
48
  };
49
49
  hideWarnings?: boolean;
50
50
  replyToList?: import("@sendgrid/helpers/classes/email-address.js").EmailJSON | import("@sendgrid/helpers/classes/email-address.js").EmailJSON[];
51
+ from: import("./service.js").EmailData;
51
52
  } | {
52
53
  to: EmailData | EmailData[];
53
54
  cc: EmailData | EmailData[];
54
55
  bcc: EmailData | EmailData[];
55
- from: EmailData;
56
56
  replyTo?: EmailData;
57
57
  sendAt?: number;
58
58
  subject?: string;
59
59
  text?: string;
60
60
  html: string;
61
- content?: import("@sendgrid/helpers/classes/mail.js").MailContent[];
62
61
  templateId?: string;
63
62
  personalizations?: import("@sendgrid/helpers/classes/personalization.js").PersonalizationData[];
64
63
  attachments?: import("@sendgrid/helpers/classes/attachment.js").AttachmentData[];
@@ -88,17 +87,16 @@ export declare function renderMessage(forceFake: boolean): (msg: EmailMsg) => {
88
87
  };
89
88
  hideWarnings?: boolean;
90
89
  replyToList?: import("@sendgrid/helpers/classes/email-address.js").EmailJSON | import("@sendgrid/helpers/classes/email-address.js").EmailJSON[];
90
+ from: import("./service.js").EmailData;
91
91
  } | {
92
92
  to: EmailData | EmailData[];
93
93
  cc: EmailData | EmailData[];
94
94
  bcc: EmailData | EmailData[];
95
- from: EmailData;
96
95
  replyTo?: EmailData;
97
96
  sendAt?: number;
98
97
  subject?: string;
99
98
  text?: string;
100
99
  html?: string;
101
- content?: import("@sendgrid/helpers/classes/mail.js").MailContent[];
102
100
  templateId: string;
103
101
  personalizations?: import("@sendgrid/helpers/classes/personalization.js").PersonalizationData[];
104
102
  attachments?: import("@sendgrid/helpers/classes/attachment.js").AttachmentData[];
@@ -128,19 +126,16 @@ export declare function renderMessage(forceFake: boolean): (msg: EmailMsg) => {
128
126
  };
129
127
  hideWarnings?: boolean;
130
128
  replyToList?: import("@sendgrid/helpers/classes/email-address.js").EmailJSON | import("@sendgrid/helpers/classes/email-address.js").EmailJSON[];
129
+ from: import("./service.js").EmailData;
131
130
  } | {
132
131
  to: EmailData | EmailData[];
133
132
  cc: EmailData | EmailData[];
134
133
  bcc: EmailData | EmailData[];
135
- from: EmailData;
136
134
  replyTo?: EmailData;
137
135
  sendAt?: number;
138
136
  subject?: string;
139
137
  text?: string;
140
138
  html?: string;
141
- content: import("@sendgrid/helpers/classes/mail.js").MailContent[] & {
142
- 0: import("@sendgrid/helpers/classes/mail.js").MailContent;
143
- };
144
139
  templateId?: string;
145
140
  personalizations?: import("@sendgrid/helpers/classes/personalization.js").PersonalizationData[];
146
141
  attachments?: import("@sendgrid/helpers/classes/attachment.js").AttachmentData[];
@@ -170,6 +165,8 @@ export declare function renderMessage(forceFake: boolean): (msg: EmailMsg) => {
170
165
  };
171
166
  hideWarnings?: boolean;
172
167
  replyToList?: import("@sendgrid/helpers/classes/email-address.js").EmailJSON | import("@sendgrid/helpers/classes/email-address.js").EmailJSON[];
168
+ from: import("./service.js").EmailData;
169
+ content: Array.NonEmptyReadonlyArray<MailContent>;
173
170
  };
174
171
  /**
175
172
  * @hidden
@@ -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;AAM3E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAwB,cAAc,EAAE,MAAM,cAAc,CAAA;AA8ClF;;GAEG;AACH,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"}
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,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAwB,cAAc,EAAE,MAAM,cAAc,CAAA;AAwDlF;;GAEG;AACH,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"}
@@ -16,9 +16,16 @@ const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPr
16
16
  });
17
17
  const render = renderMessage(!realMail);
18
18
  const renderedMsg_ = render(msg);
19
- const renderedMsg = { ...renderedMsg_, subject: `${subjectPrefix}${renderedMsg_.subject}` };
19
+ const renderedMsg = {
20
+ ...renderedMsg_,
21
+ subject: `${subjectPrefix}${renderedMsg_.subject}`,
22
+ ..."content" in renderedMsg_
23
+ ? { content: [...renderedMsg_.content] }
24
+ : {}
25
+ };
20
26
  yield* InfraLogger.logDebug("Sending email").pipe(Effect.annotateLogs("msg", inspect(renderedMsg, false, 5)));
21
- const ret = yield* Effect.async((cb) => void sgMail.send(renderedMsg, false, (err, result) => err
27
+ const ret = yield* Effect.async((cb) => void sgMail.send(renderedMsg, // sue me
28
+ msg.isMultiple ?? true, (err, result) => err
22
29
  ? cb(Effect.fail(err))
23
30
  : cb(Effect.sync(() => result))));
24
31
  // const event = {
@@ -96,4 +103,4 @@ function renderMailData(md) {
96
103
  }
97
104
  return md.email;
98
105
  }
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VuZGdyaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRW1haWxlci9TZW5kZ3JpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUd0QyxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBa0IsRUFBRSxFQUFFLENBQ3hHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ2YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFeEMsT0FBTyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2hCLFFBQVEsQ0FBQyxJQUEwQjtZQUNqQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUN6QixNQUFNLEdBQUcsR0FBYSxjQUFjLENBQUM7b0JBQ25DLEdBQUcsSUFBSTtvQkFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxXQUFXO29CQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2lCQUNsRSxDQUFDLENBQUE7Z0JBQ0YsTUFBTSxNQUFNLEdB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
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VuZGdyaWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvRW1haWxlci9TZW5kZ3JpZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQTtBQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUd0QyxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBa0IsRUFBRSxFQUFFLENBQ3hHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ2YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFFeEMsT0FBTyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ2hCLFFBQVEsQ0FBQyxJQUEwQjtZQUNqQyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUN6QixNQUFNLEdBQUcsR0FBYSxjQUFjLENBQUM7b0JBQ25DLEdBQUcsSUFBSTtvQkFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxXQUFXO29CQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2lCQUNsRSxDQUFDLENBQUE7Z0JBQ0YsTUFBTSxNQUFNLEdB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
@@ -1,9 +1,8 @@
1
1
  import type { MailContent, MailData } from "@sendgrid/helpers/classes/mail.js";
2
2
  import type { ResponseError } from "@sendgrid/mail";
3
- import type sgMail from "@sendgrid/mail";
4
3
  import type { Effect, NonEmptyReadonlyArray, Redacted } from "effect-app";
5
4
  import { Context } from "effect-app";
6
- import type { Email, NonEmptyString255 } from "effect-app/Schema";
5
+ import type { Email } from "effect-app/Schema";
7
6
  declare const Emailer_base: (abstract new (service: {
8
7
  sendMail: (msg: EmailMsgOptionalFrom) => Effect<void, Error | ResponseError>;
9
8
  }) => Readonly<{
@@ -27,24 +26,33 @@ declare const Emailer_base: (abstract new (service: {
27
26
  */
28
27
  export declare class Emailer extends Emailer_base {
29
28
  }
29
+ export type EmailData = Email | {
30
+ name?: string;
31
+ email: Email;
32
+ };
30
33
  export interface SendgridConfig {
31
- defaultReplyTo?: Email | {
32
- name?: NonEmptyString255;
33
- email: Email;
34
- };
34
+ defaultReplyTo?: EmailData;
35
35
  subjectPrefix: string;
36
36
  realMail: boolean;
37
- defaultFrom: Email | {
38
- name?: NonEmptyString255;
39
- email: Email;
40
- };
37
+ defaultFrom: EmailData;
41
38
  apiKey: Redacted.Redacted<string>;
42
39
  }
43
- export type EmailMsg = sgMail.MailDataRequired;
44
40
  export type EmailTemplateMsg = MailData & {
45
41
  templateId: string;
46
42
  };
47
- export type EmailMsgOptionalFrom = Omit<MailData, "from"> & ({
43
+ export type EmailRecipients = EmailData | NonEmptyReadonlyArray<EmailData>;
44
+ export type EmailMsgBase = Omit<MailData, "from" | "to" | "bcc" | "cc" | "content"> & {
45
+ to: EmailData | NonEmptyReadonlyArray<EmailData>;
46
+ cc?: EmailData | NonEmptyReadonlyArray<EmailData>;
47
+ bcc?: EmailData | NonEmptyReadonlyArray<EmailData>;
48
+ from: EmailData;
49
+ /**
50
+ * should multiple `to` addresess be considered multiple emails?
51
+ * defaults to `true`, not to leak email addresses
52
+ */
53
+ isMultiple?: boolean;
54
+ };
55
+ export type EmailContent = {
48
56
  text: string;
49
57
  } | {
50
58
  html: string;
@@ -52,6 +60,8 @@ export type EmailMsgOptionalFrom = Omit<MailData, "from"> & ({
52
60
  templateId: string;
53
61
  } | {
54
62
  content: NonEmptyReadonlyArray<MailContent>;
55
- }) & Partial<Pick<EmailMsg, "from">>;
63
+ };
64
+ export type EmailMsg = EmailMsgBase & EmailContent;
65
+ export type EmailMsgOptionalFrom = Omit<EmailMsgBase, "from"> & Partial<Pick<EmailMsg, "from">> & EmailContent;
56
66
  export {};
57
67
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/Emailer/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAA;AACxC,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;;cAOrD,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;cAAlE,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;cAAlE,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;;;;;;;;kBAAlE,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;;AAL9E;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,YAEzB;CAAG;AAEP,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,KAAK,GAAG;QAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAA;IACnE,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,KAAK,GAAG;QAAE,IAAI,CAAC,EAAE,iBAAiB,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAA;IAC/D,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAClC;AACD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAA;AAC9C,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE,MAAM,MAAM,oBAAoB,GAC5B,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,GACtB,CACA;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAA;CAAE,CAC/G,GACC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/Emailer/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;;cAOlC,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;cAAlE,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;cAAlE,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;;;;;;;;kBAAlE,CAAC,GAAG,EAAE,oBAAoB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,CAAC;;;AAL9E;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,YAEzB;CAAG;AAEP,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,KAAK,CAAA;CACb,CAAA;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,EAAE,SAAS,CAAA;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,SAAS,CAAA;IACtB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAClC;AACD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhE,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;AAE1E,MAAM,MAAM,YAAY,GACpB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GACxD;IACA,EAAE,EAAE,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;IAChD,EAAE,CAAC,EAAE,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;IACjD,GAAG,CAAC,EAAE,SAAS,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAA;IAClD,IAAI,EAAE,SAAS,CAAA;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAEH,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG;IACxF,OAAO,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,QAAQ,GAChB,YAAY,GACZ,YAAY,CAAA;AAEhB,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,GAAG,YAAY,CAAA"}
@@ -5,4 +5,4 @@ import { Context } from "effect-app";
5
5
  */
6
6
  export class Emailer extends Context.TagId("effect-app/Emailer")() {
7
7
  }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FbWFpbGVyL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUdwQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sT0FBUSxTQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsRUFFNUQ7Q0FBRyJ9
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9FbWFpbGVyL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUdwQzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sT0FBUSxTQUFRLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsRUFFNUQ7Q0FBRyJ9
@@ -44,7 +44,7 @@ declare const MainFiberSet_base: (abstract new (service: {
44
44
  run: <R_1, XE extends never, XA extends unknown>(effect: Effect.Effect<XA, XE, R_1>) => Effect.Effect<Fiber.RuntimeFiber<XA, XE>, never, R_1>;
45
45
  add: (...fibers: Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
46
46
  addAll: (fibers: readonly Fiber.RuntimeFiber<never, never>[]) => Effect.Effect<void, never, never>;
47
- }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, R_4 | MainFiberSet> : Effect.Effect<X, never, MainFiberSet>;
47
+ }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, MainFiberSet | R_4> : Effect.Effect<X, never, MainFiberSet>;
48
48
  };
49
49
  /**
50
50
  * Whenever you fork long running (e.g worker) fibers via e.g `Effect.forkScoped` or `Effect.forkDaemon`
@@ -22,12 +22,12 @@ export declare function makeRepoInternal<Evt = never>(): <ItemType extends strin
22
22
  config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
23
23
  partitionValue?: (a: Encoded) => string;
24
24
  };
25
- }) => Effect.Effect<Repository<T, Encoded, Evt, ItemType, IdKey, Exclude<R, RCtx>, RPublish>, E, StoreMaker | R | RInitial>;
25
+ }) => Effect.Effect<Repository<T, Encoded, Evt, ItemType, IdKey, Exclude<R, RCtx>, RPublish>, E, R | RInitial | StoreMaker>;
26
26
  Q: Q.Query<Encoded>;
27
27
  };
28
28
  export declare function makeStore<Encoded extends FieldValues>(): <ItemType extends string, R, E, T, IdKey extends keyof Encoded>(name: ItemType, schema: S.Schema<T, E, R>, mapTo: (e: E, etag: string | undefined) => Encoded, idKey: IdKey) => <RInitial = never, EInitial = never>(makeInitial?: Effect<readonly T[], EInitial, RInitial>, config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
29
29
  partitionValue?: (a: Encoded) => string;
30
- }) => Effect.Effect<import("../../../Store.js").Store<IdKey, Encoded, PersistenceModelType<Encoded>>, EInitial, StoreMaker | R | RInitial>;
30
+ }) => Effect.Effect<import("../../../Store.js").Store<IdKey, Encoded, PersistenceModelType<Encoded>>, EInitial, R | RInitial | StoreMaker>;
31
31
  export interface Repos<T, Encoded extends {
32
32
  id: string;
33
33
  }, RSchema, Evt, ItemType extends string, IdKey extends keyof T, RPublish> {
@@ -15,7 +15,7 @@ export declare const toFilter: <TFieldValues extends FieldValues, A, R, TFieldVa
15
15
  key: import("../filter/types/path/eager.js").Path<TFieldValues>;
16
16
  direction: "ASC" | "DESC";
17
17
  }[]];
18
- ttype: "one" | "many" | "count";
18
+ ttype: "one" | "count" | "many";
19
19
  mode: "project" | "collect" | "transform";
20
20
  filter: FilterResult[];
21
21
  };
@@ -56,15 +56,15 @@ declare const Operations_base: (abstract new (service: {
56
56
  update: (id: OperationId, progress: OperationProgress) => Effect.Effect<void, never, never>;
57
57
  }>) & {
58
58
  toLayer: {
59
- (): Layer.Layer<Operations, never, RequestFiberSet | OperationsRepo>;
59
+ (): Layer.Layer<Operations, never, OperationsRepo | RequestFiberSet>;
60
60
  <E_1, R_1>(eff: Effect.Effect<Omit<Operations, keyof Context.TagClassShape<any, any>>, E_1, R_1>): Layer.Layer<Operations, E_1, R_1>;
61
61
  };
62
62
  toLayerScoped: {
63
- (): Layer.Layer<Operations, never, RequestFiberSet | OperationsRepo>;
63
+ (): Layer.Layer<Operations, never, OperationsRepo | RequestFiberSet>;
64
64
  <E_1, R_2>(eff: Effect.Effect<Context.TagClassShape<any, any>, E_1, R_2>): Layer.Layer<Operations, E_1, Exclude<R_2, Scope.Scope>>;
65
65
  };
66
66
  of: (service: Context.TagClassShape<any, any>) => Operations;
67
- make: Effect.Effect<Operations, never, RequestFiberSet | OperationsRepo>;
67
+ make: Effect.Effect<Operations, never, OperationsRepo | RequestFiberSet>;
68
68
  } & Context.Tag<Operations, Operations> & {
69
69
  cleanup: Effect.Effect<void[], never, Operations>;
70
70
  register: (title: S.NonEmptyString2k) => Effect.Effect<S.StringId, never, Scope.Scope | Operations>;
@@ -14,9 +14,9 @@ export declare function makeServiceBusQueue<Evt extends {
14
14
  }, EvtE, DrainEvtE>(queueName: string, queueDrainName: string, schema: S.Schema<Evt, EvtE>, drainSchema: S.Schema<DrainEvt, DrainEvtE>): Effect.Effect<{
15
15
  drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, import("effect/Scope").Scope | Exclude<Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, never>, Tracer.ParentSpan>, ServiceBusReceiverFactory>>;
16
16
  publish: (messages_0: Evt, ...messages: Evt[]) => Effect.Effect<void, never, never>;
17
- }, never, import("@azure/service-bus").ServiceBusSender | ServiceBusReceiverFactory>;
17
+ }, never, ServiceBusReceiverFactory | import("@azure/service-bus").ServiceBusSender>;
18
18
  /**
19
19
  * @tsplus static QueueMaker.Ops makeServiceBusLayers
20
20
  */
21
- export declare function makeServiceBusLayers(url: string, queueName: string, queueDrainName: string): Layer.Layer<import("@azure/service-bus").ServiceBusSender | ServiceBusReceiverFactory, never, never>;
21
+ export declare function makeServiceBusLayers(url: string, queueName: string, queueDrainName: string): Layer.Layer<ServiceBusReceiverFactory | import("@azure/service-bus").ServiceBusSender, never, never>;
22
22
  //# sourceMappingURL=sbqueue.d.ts.map
@@ -127,7 +127,7 @@ declare const ContextMap_base: (abstract new (service: {
127
127
  use: <X>(body: (_: {
128
128
  get: (id: string) => string | undefined;
129
129
  set: (id: string, eTag: string | undefined) => void;
130
- }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, ContextMap | R_4> : Effect.Effect<X, never, ContextMap>;
130
+ }) => X) => X extends Effect.Effect<infer A_1, infer E_2, infer R_4> ? Effect.Effect<A_1, E_2, R_4 | ContextMap> : Effect.Effect<X, never, ContextMap>;
131
131
  };
132
132
  /**
133
133
  * @tsplus type ContextMap
@@ -31,7 +31,7 @@ export declare class ServiceBusReceiverFactory extends ServiceBusReceiverFactory
31
31
  static readonly Live: (queueName: string) => Layer.Layer<ServiceBusReceiverFactory, never, ServiceBusClient>;
32
32
  }
33
33
  export declare function sendMessages(messages: ServiceBusMessage | ServiceBusMessage[] | ServiceBusMessageBatch, options?: OperationOptionsBase): Effect.Effect<void, never, ServiceBusSender>;
34
- export declare function subscribe<RMsg, RErr>(hndlr: MessageHandlers<RMsg, RErr>, sessionId?: string): Effect.Effect<void, never, Scope.Scope | ServiceBusReceiverFactory | RMsg | RErr>;
34
+ export declare function subscribe<RMsg, RErr>(hndlr: MessageHandlers<RMsg, RErr>, sessionId?: string): Effect.Effect<void, never, Scope.Scope | RMsg | RErr | ServiceBusReceiverFactory>;
35
35
  export interface MessageHandlers<RMsg, RErr> {
36
36
  /**
37
37
  * Handler that processes messages from service bus.
@@ -5,7 +5,7 @@ import { InfraLogger } from "../../logger.js";
5
5
  import { setupRequestContextFromCurrent } from "../setupRequest.js";
6
6
  // Tell the client to retry every 10 seconds if connectivity is lost
7
7
  const setRetry = Stream.succeed("retry: 10000");
8
- const keepAlive = Stream.schedule(Effect.succeed(":keep-alive"), Schedule.fixed(Duration.seconds(15)));
8
+ const keepAlive = Stream.repeat(Effect.succeed(":keep-alive"), Schedule.fixed(Duration.seconds(15)));
9
9
  export const makeSSE = (schema) => (events) => Effect
10
10
  .gen(function* () {
11
11
  yield* InfraLogger.logInfo("$ start listening to events");
@@ -28,4 +28,4 @@ export const makeSSE = (schema) => (events) => Effect
28
28
  return res;
29
29
  })
30
30
  .pipe(Effect.tapErrorCause(reportError("Request")), setupRequestContextFromCurrent("events"));
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9pbnRlcm5hbC9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRW5FLG9FQUFvRTtBQUNwRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBQy9DLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRXRHLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUNyQixNQUEyQixFQUMzQixFQUFFLENBQ0osQ0FBTyxNQUEwRCxFQUFFLEVBQUUsQ0FDbkUsTUFBTTtLQUNILEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDWixLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUE7SUFFekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQTtJQUU3QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRS9CLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQ2hDLE1BQU0sRUFDTixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDVixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNwRixDQUFBO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUNqQixRQUFRLEVBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FDMUMsQ0FBQTtJQUVELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQVUsQ0FBQTtJQUMzQyxNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQ25DLE1BQU07U0FDSCxJQUFJLENBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDNUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FDM0IsRUFDSDtRQUNFLFdBQVcsRUFBRSxtQkFBbUI7UUFDaEMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUM7WUFDN0IsY0FBYyxFQUFFLG1CQUFtQjtZQUNuQyxlQUFlLEVBQUUsVUFBVTtZQUMzQixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFlBQVksRUFBRSxZQUFZLENBQUMsaUNBQWlDO1NBQzdELENBQUM7S0FDSCxDQUNGLENBQUE7SUFDRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMsQ0FBQztLQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUEifQ==
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9pbnRlcm5hbC9ldmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRW5FLG9FQUFvRTtBQUNwRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBQy9DLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRXBHLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUNyQixNQUEyQixFQUMzQixFQUFFLENBQ0osQ0FBTyxNQUEwRCxFQUFFLEVBQUUsQ0FDbkUsTUFBTTtLQUNILEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDWixLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLENBQUE7SUFFekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQTtJQUU3QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRS9CLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQ2hDLE1BQU0sRUFDTixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDVixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNwRixDQUFBO0lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUNqQixRQUFRLEVBQ1IsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FDMUMsQ0FBQTtJQUVELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQVUsQ0FBQTtJQUMzQyxNQUFNLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQ25DLE1BQU07U0FDSCxJQUFJLENBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDNUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FDM0IsRUFDSDtRQUNFLFdBQVcsRUFBRSxtQkFBbUI7UUFDaEMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUM7WUFDN0IsY0FBYyxFQUFFLG1CQUFtQjtZQUNuQyxlQUFlLEVBQUUsVUFBVTtZQUMzQixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFlBQVksRUFBRSxZQUFZLENBQUMsaUNBQWlDO1NBQzdELENBQUM7S0FDSCxDQUNGLENBQUE7SUFDRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMsQ0FBQztLQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUEifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "2.30.4",
3
+ "version": "2.31.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -13,19 +13,19 @@
13
13
  "proper-lockfile": "^4.1.2",
14
14
  "pure-rand": "6.1.0",
15
15
  "query-string": "^9.1.1",
16
- "effect-app": "2.19.1"
16
+ "effect-app": "2.19.3"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@azure/cosmos": "^4.2.0",
20
20
  "@azure/service-bus": "^7.9.5",
21
- "@babel/cli": "^7.25.9",
21
+ "@babel/cli": "^7.26.4",
22
22
  "@sentry/node": "^8.42.0",
23
23
  "@types/express": "^5.0.0",
24
24
  "@types/node": "~22.10.1",
25
25
  "@types/proper-lockfile": "^4.1.4",
26
26
  "@types/redis": "^2.8.32",
27
27
  "@types/redlock": "^4.0.7",
28
- "express": "^4.21.1",
28
+ "express": "^4.21.2",
29
29
  "jwks-rsa": "2.1.4",
30
30
  "jwt-decode": "^4.0.0",
31
31
  "mongodb": "6.11.0",
@@ -38,18 +38,18 @@
38
38
  "peerDependencies": {
39
39
  "@azure/cosmos": "^4.2.0",
40
40
  "@azure/service-bus": "^7.9.5",
41
- "@effect/experimental": "^0.33.2",
42
- "@effect/platform": "^0.70.2",
43
- "@effect/rpc-http": "^0.43.2",
44
- "@effect/rpc": "^0.45.2",
45
- "@effect/sql": "^0.22.2",
46
- "@effect/vitest": "^0.14.2",
41
+ "@effect/experimental": "^0.33.4",
42
+ "@effect/platform": "^0.70.4",
43
+ "@effect/rpc-http": "^0.43.4",
44
+ "@effect/rpc": "^0.45.4",
45
+ "@effect/sql": "^0.22.4",
46
+ "@effect/vitest": "^0.14.3",
47
47
  "@sendgrid/helpers": "^8.0.0",
48
48
  "@sendgrid/mail": "^8.1.4",
49
49
  "redis": "^3.1.2",
50
50
  "redlock": "^4.2.0",
51
- "effect": "^3.11.2",
52
- "express": "^4.21.1"
51
+ "effect": "^3.11.3",
52
+ "express": "^4.21.2"
53
53
  },
54
54
  "typesVersions": {
55
55
  "*": {
@@ -1,4 +1,5 @@
1
1
  import type { EmailData } from "@sendgrid/helpers/classes/email-address.js"
2
+ import type { MailContent } from "@sendgrid/helpers/classes/mail.js"
2
3
  import sgMail from "@sendgrid/mail"
3
4
  import { Array, Effect, Equivalence, Redacted } from "effect-app"
4
5
  import { dropUndefinedT } from "effect-app/utils"
@@ -22,7 +23,13 @@ const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPr
22
23
  const render = renderMessage(!realMail)
23
24
 
24
25
  const renderedMsg_ = render(msg)
25
- const renderedMsg = { ...renderedMsg_, subject: `${subjectPrefix}${renderedMsg_.subject}` }
26
+ const renderedMsg = {
27
+ ...renderedMsg_ as Omit<typeof renderedMsg_, "content">,
28
+ subject: `${subjectPrefix}${renderedMsg_.subject}`,
29
+ ..."content" in renderedMsg_
30
+ ? { content: [...renderedMsg_.content] as [MailContent, ...MailContent[]] }
31
+ : {}
32
+ }
26
33
  yield* InfraLogger.logDebug("Sending email").pipe(Effect.annotateLogs("msg", inspect(renderedMsg, false, 5)))
27
34
 
28
35
  const ret = yield* Effect.async<
@@ -30,10 +37,14 @@ const makeSendgrid = ({ apiKey, defaultFrom, defaultReplyTo, realMail, subjectPr
30
37
  Error | sgMail.ResponseError
31
38
  >(
32
39
  (cb) =>
33
- void sgMail.send(renderedMsg, false, (err, result) =>
34
- err
35
- ? cb(Effect.fail(err))
36
- : cb(Effect.sync(() => result)))
40
+ void sgMail.send(
41
+ renderedMsg as any, // sue me
42
+ msg.isMultiple ?? true,
43
+ (err, result) =>
44
+ err
45
+ ? cb(Effect.fail(err))
46
+ : cb(Effect.sync(() => result))
47
+ )
37
48
  )
38
49
 
39
50
  // const event = {
@@ -93,7 +104,7 @@ export function isTestAddress(to: EmailData) {
93
104
  )
94
105
  }
95
106
 
96
- function renderFake(addr: EmailData | EmailData[], makeId: () => number) {
107
+ function renderFake(addr: EmailData | readonly EmailData[], makeId: () => number) {
97
108
  return {
98
109
  name: renderMailData(addr),
99
110
  email: `test+${makeId()}@nomizz.com`
@@ -106,7 +117,7 @@ const eq = Equivalence.mapInput(
106
117
 
107
118
  // TODO: should just not add any already added email address
108
119
  // https://stackoverflow.com/a/53603076/11595834
109
- function renderFakeIfTest(addr: EmailData | EmailData[], makeId: () => number) {
120
+ function renderFakeIfTest(addr: EmailData | readonly EmailData[], makeId: () => number) {
110
121
  return Array.isArray(addr)
111
122
  ? Array.dedupeWith(
112
123
  addr
@@ -118,7 +129,7 @@ function renderFakeIfTest(addr: EmailData | EmailData[], makeId: () => number) {
118
129
  : addr
119
130
  }
120
131
 
121
- function renderMailData(md: NonNullable<EmailMsg["to"]>): string {
132
+ function renderMailData(md: EmailData | readonly EmailData[]): string {
122
133
  if (Array.isArray(md)) {
123
134
  return md.map(renderMailData).join(", ")
124
135
  }
@@ -1,9 +1,8 @@
1
1
  import type { MailContent, MailData } from "@sendgrid/helpers/classes/mail.js"
2
2
  import type { ResponseError } from "@sendgrid/mail"
3
- import type sgMail from "@sendgrid/mail"
4
3
  import type { Effect, NonEmptyReadonlyArray, Redacted } from "effect-app"
5
4
  import { Context } from "effect-app"
6
- import type { Email, NonEmptyString255 } from "effect-app/Schema"
5
+ import type { Email } from "effect-app/Schema"
7
6
 
8
7
  /**
9
8
  * @tsplus type Emailer
@@ -13,19 +12,42 @@ export class Emailer extends Context.TagId("effect-app/Emailer")<Emailer, {
13
12
  sendMail: (msg: EmailMsgOptionalFrom) => Effect<void, Error | ResponseError>
14
13
  }>() {}
15
14
 
15
+ export type EmailData = Email | {
16
+ name?: string
17
+ email: Email
18
+ }
19
+
16
20
  export interface SendgridConfig {
17
- defaultReplyTo?: Email | { name?: NonEmptyString255; email: Email }
21
+ defaultReplyTo?: EmailData
18
22
  subjectPrefix: string
19
23
  realMail: boolean
20
- defaultFrom: Email | { name?: NonEmptyString255; email: Email }
24
+ defaultFrom: EmailData
21
25
  apiKey: Redacted.Redacted<string>
22
26
  }
23
- export type EmailMsg = sgMail.MailDataRequired
24
27
  export type EmailTemplateMsg = MailData & { templateId: string }
25
28
 
26
- export type EmailMsgOptionalFrom =
27
- & Omit<MailData, "from">
28
- & (
29
- { text: string } | { html: string } | { templateId: string } | { content: NonEmptyReadonlyArray<MailContent> }
30
- )
31
- & Partial<Pick<EmailMsg, "from">>
29
+ export type EmailRecipients = EmailData | NonEmptyReadonlyArray<EmailData>
30
+
31
+ export type EmailMsgBase =
32
+ & Omit<MailData, "from" | "to" | "bcc" | "cc" | "content">
33
+ & {
34
+ to: EmailData | NonEmptyReadonlyArray<EmailData>
35
+ cc?: EmailData | NonEmptyReadonlyArray<EmailData>
36
+ bcc?: EmailData | NonEmptyReadonlyArray<EmailData>
37
+ from: EmailData
38
+ /**
39
+ * should multiple `to` addresess be considered multiple emails?
40
+ * defaults to `true`, not to leak email addresses
41
+ */
42
+ isMultiple?: boolean
43
+ }
44
+
45
+ export type EmailContent = { text: string } | { html: string } | { templateId: string } | {
46
+ content: NonEmptyReadonlyArray<MailContent>
47
+ }
48
+
49
+ export type EmailMsg =
50
+ & EmailMsgBase
51
+ & EmailContent
52
+
53
+ export type EmailMsgOptionalFrom = Omit<EmailMsgBase, "from"> & Partial<Pick<EmailMsg, "from">> & EmailContent
@@ -6,7 +6,7 @@ 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")
9
- const keepAlive = Stream.schedule(Effect.succeed(":keep-alive"), Schedule.fixed(Duration.seconds(15)))
9
+ const keepAlive = Stream.repeat(Effect.succeed(":keep-alive"), Schedule.fixed(Duration.seconds(15)))
10
10
 
11
11
  export const makeSSE = <A extends { id: any }, SI, SR>(
12
12
  schema: S.Schema<A, SI, SR>