@dbx-tools/email 0.9.5 → 0.9.6
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/README.md +14 -14
- package/exports.ts +2 -0
- package/index.ts +2 -1
- package/lib/exports.d.ts +2 -0
- package/lib/exports.js +3 -0
- package/lib/index.d.ts +2 -1
- package/lib/index.js +3 -2
- package/lib/src/config.js +15 -14
- package/lib/src/email-html.d.ts +2 -2
- package/lib/src/email-html.js +3 -3
- package/lib/src/outbox.js +3 -3
- package/lib/src/plugin.d.ts +10 -17
- package/lib/src/plugin.js +14 -26
- package/lib/src/sender.js +6 -6
- package/lib/src/tool.js +3 -3
- package/lib/src/transport.js +6 -14
- package/package.json +7 -6
- package/src/config.ts +19 -13
- package/src/email-html.ts +2 -2
- package/src/outbox.ts +2 -2
- package/src/plugin.ts +12 -34
- package/src/sender.ts +5 -5
- package/src/tool.ts +2 -2
- package/src/transport.ts +5 -18
package/README.md
CHANGED
|
@@ -35,23 +35,23 @@ presentation lives in
|
|
|
35
35
|
|
|
36
36
|
```ts
|
|
37
37
|
import { createApp, lakebase, server } from "@databricks/appkit";
|
|
38
|
-
import {
|
|
39
|
-
import { agents,
|
|
38
|
+
import { email, emailTool } from "@dbx-tools/email";
|
|
39
|
+
import { agents, mastra } from "@dbx-tools/appkit-mastra";
|
|
40
40
|
|
|
41
41
|
const support = agents.createAgent({
|
|
42
42
|
instructions: "Draft emails, but wait for approval before sending.",
|
|
43
|
-
tools: () => ({ send_email: emailTool
|
|
43
|
+
tools: () => ({ send_email: emailTool() }),
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
await createApp({
|
|
47
47
|
plugins: [
|
|
48
48
|
server(),
|
|
49
49
|
lakebase(),
|
|
50
|
-
|
|
50
|
+
email({
|
|
51
51
|
smtp: { host: "smtp.example.com", user: "apikey", password: process.env.SMTP_KEY },
|
|
52
52
|
domain: "mail.example.com",
|
|
53
53
|
}),
|
|
54
|
-
|
|
54
|
+
mastra({ agents: support, storage: true }),
|
|
55
55
|
],
|
|
56
56
|
});
|
|
57
57
|
```
|
|
@@ -209,7 +209,7 @@ The plugin export is equivalent and resolves the sender for you when the caller
|
|
|
209
209
|
is a Databricks user:
|
|
210
210
|
|
|
211
211
|
```ts
|
|
212
|
-
const appkit = await createApp({ plugins: [server(),
|
|
212
|
+
const appkit = await createApp({ plugins: [server(), email()] });
|
|
213
213
|
await appkit.email.sendEmail(message, "reports@example.com");
|
|
214
214
|
```
|
|
215
215
|
|
|
@@ -267,13 +267,13 @@ only by wiring it explicitly.
|
|
|
267
267
|
|
|
268
268
|
| Tool | Runtime | Wiring |
|
|
269
269
|
| ------------ | ------- | ------------------------------------------------------------------------ |
|
|
270
|
-
| `send_email` | Mastra | `tools: () => ({ send_email: emailTool
|
|
270
|
+
| `send_email` | Mastra | `tools: () => ({ send_email: emailTool() })` |
|
|
271
271
|
| `email.send` | AppKit | `plugins.email.toolkit()` in code, or a `plugin:email` frontmatter entry |
|
|
272
272
|
|
|
273
273
|
```ts
|
|
274
274
|
import { createApp, server } from "@databricks/appkit";
|
|
275
275
|
import { agents, createAgent } from "@databricks/appkit/beta";
|
|
276
|
-
import {
|
|
276
|
+
import { email } from "@dbx-tools/email";
|
|
277
277
|
|
|
278
278
|
const support = createAgent({
|
|
279
279
|
instructions: "Draft emails, but wait for approval before sending.",
|
|
@@ -281,7 +281,7 @@ const support = createAgent({
|
|
|
281
281
|
});
|
|
282
282
|
|
|
283
283
|
await createApp({
|
|
284
|
-
plugins: [server(),
|
|
284
|
+
plugins: [server(), email(), agents({ agents: { support } })],
|
|
285
285
|
});
|
|
286
286
|
```
|
|
287
287
|
|
|
@@ -374,17 +374,17 @@ to the plugin or renderer only when the consuming application needs its own
|
|
|
374
374
|
identity.
|
|
375
375
|
|
|
376
376
|
```ts
|
|
377
|
-
import {
|
|
377
|
+
import { defaultEmailBrand, email, emailBrandFromContext } from "@dbx-tools/email";
|
|
378
378
|
|
|
379
379
|
// Explicitly select the same brand used by default:
|
|
380
|
-
|
|
380
|
+
email({ brand: defaultEmailBrand });
|
|
381
381
|
|
|
382
382
|
// Or derive from any shared BrandContext:
|
|
383
|
-
import {
|
|
384
|
-
|
|
383
|
+
import { brandUtils } from "@dbx-tools/shared-core";
|
|
384
|
+
email({ brand: emailBrandFromContext(brandUtils.defaultBrandContext) });
|
|
385
385
|
|
|
386
386
|
// Or hand-build the small email-safe slice:
|
|
387
|
-
|
|
387
|
+
email({
|
|
388
388
|
brand: {
|
|
389
389
|
accent: "#FF3621",
|
|
390
390
|
fontFamily: "Inter, ui-sans-serif, system-ui, sans-serif",
|
package/exports.ts
ADDED
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/email";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.6";
|
|
7
7
|
export * as brand from "./src/brand.ts";
|
|
8
8
|
export * as config from "./src/config.ts";
|
|
9
9
|
export * as defaults from "./src/defaults.ts";
|
|
@@ -26,3 +26,4 @@ export { SYSTEM_SENDER_LOCAL_PART } from "./src/sender.ts";
|
|
|
26
26
|
export { SEND_EMAIL_DESCRIPTION } from "./src/tool.ts";
|
|
27
27
|
export type { EmailToolOptions } from "./src/tool.ts";
|
|
28
28
|
export type { EmailExecutor, EmailRuntime, SendEmailOptions } from "./src/transport.ts";
|
|
29
|
+
export * from "./exports.ts";
|
package/lib/exports.d.ts
ADDED
package/lib/exports.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { defaultEmailBrand, emailBrandFromContext } from "./src/brand.js";
|
|
2
|
+
export { emailTool } from "./src/tool.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL2V4cG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHRFbWFpbEJyYW5kLCBlbWFpbEJyYW5kRnJvbUNvbnRleHQgfSBmcm9tIFwiLi9zcmMvYnJhbmQudHNcIjtcbmV4cG9ydCB7IGVtYWlsVG9vbCB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG4iXX0=
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/email";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.6";
|
|
3
3
|
export * as brand from "./src/brand.ts";
|
|
4
4
|
export * as config from "./src/config.ts";
|
|
5
5
|
export * as defaults from "./src/defaults.ts";
|
|
@@ -22,3 +22,4 @@ export { SYSTEM_SENDER_LOCAL_PART } from "./src/sender.ts";
|
|
|
22
22
|
export { SEND_EMAIL_DESCRIPTION } from "./src/tool.ts";
|
|
23
23
|
export type { EmailToolOptions } from "./src/tool.ts";
|
|
24
24
|
export type { EmailExecutor, EmailRuntime, SendEmailOptions } from "./src/transport.ts";
|
|
25
|
+
export * from "./exports.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/email";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.6";
|
|
6
6
|
export * as brand from "./src/brand.js";
|
|
7
7
|
export * as config from "./src/config.js";
|
|
8
8
|
export * as defaults from "./src/defaults.js";
|
|
@@ -20,4 +20,5 @@ export { normalizeMarkdown } from "./src/markdown.js";
|
|
|
20
20
|
export { EmailPlugin, email } from "./src/plugin.js";
|
|
21
21
|
export { SYSTEM_SENDER_LOCAL_PART } from "./src/sender.js";
|
|
22
22
|
export { SEND_EMAIL_DESCRIPTION } from "./src/tool.js";
|
|
23
|
-
|
|
23
|
+
export * from "./exports.js";
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpHLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLDJCQUEyQixFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJQLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd2RCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvZW1haWxcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS42XCI7XG5leHBvcnQgKiBhcyBicmFuZCBmcm9tIFwiLi9zcmMvYnJhbmQudHNcIjtcbmV4cG9ydCAqIGFzIGNvbmZpZyBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCAqIGFzIGVtYWlsSHRtbCBmcm9tIFwiLi9zcmMvZW1haWwtaHRtbC50c1wiO1xuZXhwb3J0ICogYXMgbWFya2Rvd24gZnJvbSBcIi4vc3JjL21hcmtkb3duLnRzXCI7XG5leHBvcnQgKiBhcyBvdXRib3ggZnJvbSBcIi4vc3JjL291dGJveC50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHNlbmRlciBmcm9tIFwiLi9zcmMvc2VuZGVyLnRzXCI7XG5leHBvcnQgKiBhcyB0b29sIGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG5leHBvcnQgKiBhcyB0cmFuc3BvcnQgZnJvbSBcIi4vc3JjL3RyYW5zcG9ydC50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9TTVRQX1BPUlQsIElNUExJQ0lUX1RMU19TTVRQX1BPUlQsIEVNQUlMX0NPTkZJR19TQ0hFTUEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNlbmRlclBvbGljeSwgU210cENvbmZpZywgRW1haWxQbHVnaW5Db25maWcsIFJlc29sdmVkU2VuZGVyLCBSZXNvbHZlZFNtdHBDb25maWcsIFJlc29sdmVkRmlsZUNvbmZpZywgUmVzb2x2ZWRFbWFpbENvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IFNFTkRfVElNRU9VVF9NUywgVkVSSUZZX1RJTUVPVVRfTVMsIFZFUklGWV9BVFRFTVBUUywgTUFYX0FUVEFDSE1FTlRfQllURVMsIE1BWF9BVFRBQ0hNRU5UU19UT1RBTF9CWVRFUywgTUFYX0FUVEFDSE1FTlRfQ09VTlQsIE1BWF9CT0RZX0NIQVJTLCBFTUFJTF9TRU5EX1NFVFRJTkdTLCBFTUFJTF9WRVJJRllfU0VUVElOR1MsIEVNQUlMX1NFTkRFUlNfU0VUVElOR1MgfSBmcm9tIFwiLi9zcmMvZGVmYXVsdHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgRW1haWxFeGVjdXRlQ29uZmlnLCBFbWFpbEV4ZWN1dGlvblNldHRpbmdzIH0gZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSBcIi4vc3JjL2VtYWlsLWh0bWwudHNcIjtcbmV4cG9ydCB0eXBlIHsgRW1haWxIdG1sT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9lbWFpbC1odG1sLnRzXCI7XG5leHBvcnQgeyBub3JtYWxpemVNYXJrZG93biB9IGZyb20gXCIuL3NyYy9tYXJrZG93bi50c1wiO1xuZXhwb3J0IHsgRW1haWxQbHVnaW4sIGVtYWlsIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHsgU1lTVEVNX1NFTkRFUl9MT0NBTF9QQVJUIH0gZnJvbSBcIi4vc3JjL3NlbmRlci50c1wiO1xuZXhwb3J0IHsgU0VORF9FTUFJTF9ERVNDUklQVElPTiB9IGZyb20gXCIuL3NyYy90b29sLnRzXCI7XG5leHBvcnQgdHlwZSB7IEVtYWlsVG9vbE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvdG9vbC50c1wiO1xuZXhwb3J0IHR5cGUgeyBFbWFpbEV4ZWN1dG9yLCBFbWFpbFJ1bnRpbWUsIFNlbmRFbWFpbE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leHBvcnRzLnRzXCI7XG4iXX0=
|
package/lib/src/config.js
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import { resolve } from "node:path";
|
|
28
28
|
import { ConfigurationError, ValidationError } from "@databricks/appkit";
|
|
29
|
-
import {
|
|
29
|
+
import { configUtils } from "@dbx-tools/core";
|
|
30
30
|
import { object } from "@dbx-tools/shared-core";
|
|
31
31
|
import { defaultEmailBrand } from "./brand.js";
|
|
32
32
|
import { isSenderAllowed, parseAllowedSenders, systemSenderAddress } from "./sender.js";
|
|
@@ -122,11 +122,12 @@ export const EMAIL_CONFIG_SCHEMA = {
|
|
|
122
122
|
};
|
|
123
123
|
/** Parse the `SMTP_SECURE` env / config flag, defaulting by port. */
|
|
124
124
|
function resolveSecure(flag, port) {
|
|
125
|
-
return (
|
|
125
|
+
return (configUtils.boolean(flag, "SMTP_SECURE", configUtils.ENV_ONLY) ??
|
|
126
|
+
port === IMPLICIT_TLS_SMTP_PORT);
|
|
126
127
|
}
|
|
127
128
|
/** Parse the `EMAIL_SENDER_POLICY` env / config value, defaulting to deny-by-default. */
|
|
128
129
|
function resolveSenderPolicy(policy) {
|
|
129
|
-
const raw = policy ??
|
|
130
|
+
const raw = policy ?? configUtils.text("EMAIL_SENDER_POLICY", configUtils.ENV_ONLY)?.toLowerCase();
|
|
130
131
|
if (raw === "unrestricted")
|
|
131
132
|
return "unrestricted";
|
|
132
133
|
if (raw === undefined || raw === "" || raw === "allowlist")
|
|
@@ -158,7 +159,7 @@ function impliedSenderPatterns(sender) {
|
|
|
158
159
|
}
|
|
159
160
|
/** Whether `EMAIL_OUTBOX_MODE` explicitly opts into the file/outbox fallback. */
|
|
160
161
|
function isOutboxModeEnabled() {
|
|
161
|
-
return
|
|
162
|
+
return configUtils.boolean(undefined, "EMAIL_OUTBOX_MODE", configUtils.ENV_ONLY) ?? false;
|
|
162
163
|
}
|
|
163
164
|
const SMTP_REQUIRED_FIELDS = ["SMTP_HOST", "SMTP_USER", "SMTP_PASSWORD"];
|
|
164
165
|
/** List env keys for SMTP fields that are unset in the resolved credential set. */
|
|
@@ -187,14 +188,14 @@ function missingSmtpFields(host, user, pass) {
|
|
|
187
188
|
*/
|
|
188
189
|
export function resolveEmailConfig(config = {}) {
|
|
189
190
|
const smtp = config.smtp ?? {};
|
|
190
|
-
const host =
|
|
191
|
-
const user =
|
|
192
|
-
const pass =
|
|
193
|
-
const domain =
|
|
194
|
-
const from =
|
|
195
|
-
const systemFrom =
|
|
191
|
+
const host = configUtils.string(smtp.host, "SMTP_HOST", configUtils.ENV_ONLY);
|
|
192
|
+
const user = configUtils.string(smtp.user, "SMTP_USER", configUtils.ENV_ONLY);
|
|
193
|
+
const pass = configUtils.string(smtp.password, "SMTP_PASSWORD", configUtils.ENV_ONLY);
|
|
194
|
+
const domain = configUtils.string(config.domain, "EMAIL_DOMAIN", configUtils.ENV_ONLY);
|
|
195
|
+
const from = configUtils.string(config.from, "EMAIL_FROM", configUtils.ENV_ONLY);
|
|
196
|
+
const systemFrom = configUtils.string(config.systemFrom, "EMAIL_SYSTEM_FROM", configUtils.ENV_ONLY);
|
|
196
197
|
const senderPolicy = resolveSenderPolicy(config.senderPolicy);
|
|
197
|
-
const configuredSenders = parseAllowedSenders(config.allowedSenders ??
|
|
198
|
+
const configuredSenders = parseAllowedSenders(config.allowedSenders ?? configUtils.text("EMAIL_ALLOWED_SENDERS", configUtils.ENV_ONLY));
|
|
198
199
|
const allowedSenders = configuredSenders.length > 0 || senderPolicy === "unrestricted"
|
|
199
200
|
? configuredSenders
|
|
200
201
|
: impliedSenderPatterns({ domain, from, systemFrom });
|
|
@@ -215,7 +216,7 @@ export function resolveEmailConfig(config = {}) {
|
|
|
215
216
|
if (!domain && !from && !systemFrom) {
|
|
216
217
|
throw ConfigurationError.resourceNotFound("Email sender source", "Set EMAIL_DOMAIN to derive <user-local-part>@<domain> (and no-reply@<domain> for system mail), or EMAIL_FROM for a fixed address.");
|
|
217
218
|
}
|
|
218
|
-
const port =
|
|
219
|
+
const port = configUtils.port(smtp.port, "SMTP_PORT", DEFAULT_SMTP_PORT, configUtils.ENV_ONLY);
|
|
219
220
|
return {
|
|
220
221
|
mode: "smtp",
|
|
221
222
|
host: host,
|
|
@@ -228,8 +229,8 @@ export function resolveEmailConfig(config = {}) {
|
|
|
228
229
|
if (!isOutboxModeEnabled()) {
|
|
229
230
|
throw ConfigurationError.invalidConnection("SMTP", `Set ${SMTP_REQUIRED_FIELDS.join(", ")}, or EMAIL_OUTBOX_MODE=1 to write messages to a local outbox instead.`);
|
|
230
231
|
}
|
|
231
|
-
const outDir = resolve(
|
|
232
|
+
const outDir = resolve(configUtils.string(config.outDir, "EMAIL_OUTBOX_DIR", configUtils.ENV_ONLY) ??
|
|
232
233
|
resolve(process.cwd(), "tmp"));
|
|
233
234
|
return { mode: "file", outDir, ...sender };
|
|
234
235
|
}
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsTUFBTSxJQUFJLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sWUFBWSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEYseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztBQUVyQywyRUFBMkU7QUFDM0UsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBMEkxQywrREFBK0Q7QUFDL0QsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQWdCO0lBQzlDLElBQUksRUFBRSxRQUFRO0lBQ2QsVUFBVSxFQUFFO1FBQ1YsSUFBSSxFQUFFO1lBQ0osSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsMERBQTBEO1lBQ3ZFLFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxtQ0FBbUMsRUFBRTtnQkFDMUUsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBRSxRQUFRO29CQUNkLFdBQVcsRUFBRSw2Q0FBNkMsaUJBQWlCLEdBQUc7aUJBQy9FO2dCQUNELE1BQU0sRUFBRTtvQkFDTixJQUFJLEVBQUUsU0FBUztvQkFDZixXQUFX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aEMsQ0FBQztJQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNNVFAgY29uZmlndXJhdGlvbiBmb3IgdGhlIGVtYWlsIHBsdWdpbjogdGhlIHR5cGVkXG4gKiB7QGxpbmsgRW1haWxQbHVnaW5Db25maWd9ICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0IGNvbmZpZyksIHRoZVxuICogSlNPTiBTY2hlbWEgdGhlIG1hbmlmZXN0IHB1Ymxpc2hlcyBmb3IgaXQsIGFuZCB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfVxuICogd2hpY2ggbGF5ZXJzIHRoYXQgY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGVcbiAqIHtAbGluayBSZXNvbHZlZEVtYWlsQ29uZmlnfSB0aGUgcnVudGltZSBuZWVkcy5cbiAqXG4gKiBUd28gbW9kZXMgZmFsbCBvdXQgb2YgdGhlIHJlc29sdXRpb24uIFdoZW4gU01UUCBjcmVkZW50aWFscyAoaG9zdCArXG4gKiB1c2VyICsgcGFzc3dvcmQpIGFyZSBhbGwgcHJlc2VudCBpdCByZXNvbHZlcyB0byBgbW9kZTogXCJzbXRwXCJgIGFuZFxuICogbWFpbCBpcyBzZW50IGZvciByZWFsLiBXaGVuIHRoZXkgYXJlIGFic2VudCBhbmQgYEVNQUlMX09VVEJPWF9NT0RFYFxuICogaXMgZXhwbGljaXRseSBlbmFibGVkIGl0IHJlc29sdmVzIHRvIGBtb2RlOiBcImZpbGVcImAgKGFuIFwib3V0Ym94XCIpXG4gKiBhbmQgZWFjaCBtZXNzYWdlIGlzIHdyaXR0ZW4gdG8gZGlzayBhcyBIVE1MIGluc3RlYWQgb2Ygc2VudC4gQW55XG4gKiBwYXJ0aWFsIFNNVFAgY29uZmlndXJhdGlvbiBvciBhIHNlbmQgYXR0ZW1wdCB3aXRoIG5vIGNyZWRlbnRpYWxzIGFuZFxuICogbm8gb3V0Ym94IG9wdC1pbiB0aHJvd3MuXG4gKlxuICogUHJlY2VkZW5jZSBwZXIgZmllbGQ6IGV4cGxpY2l0IHBsdWdpbiBjb25maWcgd2lucywgdGhlbiB0aGUgbWF0Y2hpbmdcbiAqIGVudmlyb25tZW50IHZhcmlhYmxlLiBFbnYgbmFtZXMgYXJlIHVucHJlZml4ZWQgYmVjYXVzZSB0aGUgYXBwIHRhbGtzXG4gKiB0byBhIHNpbmdsZSBTTVRQIHNlcnZlciAoZS5nLiBTTVRQMkdPKTogYFNNVFBfSE9TVGAsIGBTTVRQX1BPUlRgLFxuICogYFNNVFBfU0VDVVJFYCwgYFNNVFBfVVNFUmAsIGBTTVRQX1BBU1NXT1JEYCwgcGx1cyBgRU1BSUxfRE9NQUlOYCBmb3JcbiAqIHRoZSBkZXJpdmVkIHNlbmRlcidzIGRvbWFpbiwgYEVNQUlMX0ZST01gIGZvciBhbiBleHBsaWNpdCBvdmVycmlkZSxcbiAqIGBFTUFJTF9TWVNURU1fRlJPTWAgZm9yIHRoZSBkby1ub3QtcmVwbHkgYWRkcmVzcyBzeXN0ZW0gbWFpbCBzZW5kcyBmcm9tLFxuICogYEVNQUlMX1NFTkRFUl9QT0xJQ1lgIGZvciB0aGUgc2VuZGVyIHJlc3RyaWN0aW9uIG1vZGUsIGFuZFxuICogYEVNQUlMX09VVEJPWF9ESVJgIGZvciB0aGUgb3V0Ym94IGRpcmVjdG9yeS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY29uZmlnIGFzIGNvcmVDb25maWcgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNyB9IGZyb20gXCJqc29uLXNjaGVtYVwiO1xuaW1wb3J0IHsgZGVmYXVsdEVtYWlsQnJhbmQsIHR5cGUgRW1haWxCcmFuZCB9IGZyb20gXCIuL2JyYW5kLnRzXCI7XG5pbXBvcnQgeyBpc1NlbmRlckFsbG93ZWQsIHBhcnNlQWxsb3dlZFNlbmRlcnMsIHN5c3RlbVNlbmRlckFkZHJlc3MgfSBmcm9tIFwiLi9zZW5kZXIudHNcIjtcblxuLyoqIFNNVFAgc3VibWlzc2lvbiBwb3J0IHVzZWQgd2hlbiBub25lIGlzIGNvbmZpZ3VyZWQuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TTVRQX1BPUlQgPSA1ODc7XG5cbi8qKiBTTVRQIHBvcnQgdGhhdCBpbXBsaWVzIGEgVExTLW9uLWNvbm5lY3Qgc29ja2V0IHJhdGhlciB0aGFuIFNUQVJUVExTLiAqL1xuZXhwb3J0IGNvbnN0IElNUExJQ0lUX1RMU19TTVRQX1BPUlQgPSA0NjU7XG5cbi8qKlxuICogSG93IHRoZSBzZW5kZXIgKGBGcm9tYCkgYWRkcmVzcyBpcyByZXN0cmljdGVkLlxuICpcbiAqIGBcImFsbG93bGlzdFwiYCBpcyB0aGUgZGVmYXVsdCBhbmQgdGhlIGRlbnktYnktZGVmYXVsdCBwb3N0dXJlOiBhIHNlbmQgaXNcbiAqIHBlcm1pdHRlZCBvbmx5IGZyb20gYW4gYWRkcmVzcyB0aGUgY29uZmlndXJhdGlvbiBuYW1lcywgZWl0aGVyIHRocm91Z2hcbiAqIHtAbGluayBFbWFpbFBsdWdpbkNvbmZpZy5hbGxvd2VkU2VuZGVyc30gb3IsIHdoZW4gdGhhdCBpcyBlbXB0eSwgdGhyb3VnaFxuICogdGhlIGNvbmZpZ3VyZWQgc2VuZGVyIHNvdXJjZSAoe0BsaW5rIEVtYWlsUGx1Z2luQ29uZmlnLmZyb219IGFzIGFuIGV4YWN0XG4gKiBhZGRyZXNzLCB7QGxpbmsgRW1haWxQbHVnaW5Db25maWcuZG9tYWlufSBhcyBhIGAqQGRvbWFpbmAgd2lsZGNhcmQpLlxuICpcbiAqIGBcInVucmVzdHJpY3RlZFwiYCBpcyB0aGUgZXhwbGljaXQgb3B0LW91dDogYW55IGBGcm9tYCBhIGNhbGxlciBzdXBwbGllcyBpc1xuICogYWNjZXB0ZWQuIE9ubHkgcmVhY2ggZm9yIGl0IHdoZW4gYW4gdXBzdHJlYW0gc3lzdGVtIGFscmVhZHkgdmV0cyB0aGVcbiAqIHNlbmRlci5cbiAqL1xuZXhwb3J0IHR5cGUgU2VuZGVyUG9saWN5ID0gXCJhbGxvd2xpc3RcIiB8IFwidW5yZXN0cmljdGVkXCI7XG5cbi8qKiBTTVRQIGNvbm5lY3Rpb24gKyBjcmVkZW50aWFscy4gQWxsIGZpZWxkcyBmYWxsIGJhY2sgdG8gZW52IHdoZW4gdW5zZXQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNtdHBDb25maWcge1xuICAvKiogU01UUCBzZXJ2ZXIgaG9zdG5hbWUgKGBTTVRQX0hPU1RgKS4gKi9cbiAgaG9zdD86IHN0cmluZztcbiAgLyoqIFNNVFAgc2VydmVyIHBvcnQgKGBTTVRQX1BPUlRgKS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfU01UUF9QT1JUfS4gKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFVzZSBhIFRMUy1vbi1jb25uZWN0IHNvY2tldCAoYFNNVFBfU0VDVVJFYCkuIERlZmF1bHRzIHRvXG4gICAqIGBwb3J0ID09PSBgIHtAbGluayBJTVBMSUNJVF9UTFNfU01UUF9QT1JUfS5cbiAgICovXG4gIHNlY3VyZT86IGJvb2xlYW47XG4gIC8qKiBTTVRQIGF1dGggdXNlcm5hbWUgKGBTTVRQX1VTRVJgKS4gKi9cbiAgdXNlcj86IHN0cmluZztcbiAgLyoqIFNNVFAgYXV0aCBwYXNzd29yZCAvIEFQSSBrZXkgKGBTTVRQX1BBU1NXT1JEYCkuICovXG4gIHBhc3N3b3JkPzogc3RyaW5nO1xufVxuXG4vKiogQXBwS2l0IGNvbmZpZyBhY2NlcHRlZCBieSB0aGUgZW1haWwgcGx1Z2luLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFBsdWdpbkNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcge1xuICAvKiogU01UUCBjb25uZWN0aW9uICsgY3JlZGVudGlhbHMuIE9taXQgdG8gcnVuIGluIGZpbGUvb3V0Ym94IG1vZGUuICovXG4gIHNtdHA/OiBTbXRwQ29uZmlnO1xuICAvKipcbiAgICogRG9tYWluIHVzZWQgdG8gYnVpbGQgdGhlIHNlbmRlciBhZGRyZXNzIGZyb20gdGhlIG9uLWJlaGFsZi1vZiB1c2VyXG4gICAqIChgPGxvY2FsLXBhcnQ+QDxkb21haW4+YCkuIEZhbGxzIGJhY2sgdG8gYEVNQUlMX0RPTUFJTmAuIFJlcXVpcmVkIGluXG4gICAqIFNNVFAgbW9kZSB1bmxlc3Mge0BsaW5rIGZyb219IGlzIHNldDsgb3B0aW9uYWwgaW4gZmlsZSBtb2RlICh0aGVcbiAgICogb3V0Ym94IGZhbGxzIGJhY2sgdG8gdGhlIHVzZXIncyBvd24gZW1haWwgYWRkcmVzcykuXG4gICAqL1xuICBkb21haW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHBsaWNpdCBgRnJvbWAgYWRkcmVzcywgT1BUSU9OQUwuIFdoZW4gc2V0LCB0aGUgc2VuZGVyIGlzIHVzZWQgdmVyYmF0aW1cbiAgICogYW5kIHRoZSBwZXItdXNlciBkZXJpdmF0aW9uIGlzIHNraXBwZWQuIEZhbGxzIGJhY2sgdG8gYEVNQUlMX0ZST01gLlxuICAgKlxuICAgKiBMZWF2ZSBpdCB1bnNldCBpbiBtb3N0IGRlcGxveW1lbnRzOiB7QGxpbmsgZG9tYWlufSBhbG9uZSBpcyBlbm91Z2gsIGFuZFxuICAgKiBtYWlsIHRoZW4gY29tZXMgZnJvbSB0aGUgYWRkcmVzcyBvZiB0aGUgcGVyc29uIHdobyBjYXVzZWQgaXQsIHdoaWNoIGlzIHdoYXRcbiAgICogYSByZWNpcGllbnQgZXhwZWN0cyB0byBiZSBhYmxlIHRvIHJlcGx5IHRvLlxuICAgKi9cbiAgZnJvbT86IHN0cmluZztcbiAgLyoqXG4gICAqIGBGcm9tYCBmb3IgU1lTVEVNIG1haWwgLSBhIHNlbmQgd2l0aCBubyBvbi1iZWhhbGYtb2YgdXNlciwgc3VjaCBhcyBhXG4gICAqIHNpZ24taW4gY29kZSBvciBhIHBhc3N3b3JkIHJlc2V0LiBGYWxscyBiYWNrIHRvIGBFTUFJTF9TWVNURU1fRlJPTWAsIHRoZW5cbiAgICogdG8gYG5vLXJlcGx5QDxkb21haW4+YCwgdGhlbiB0byB7QGxpbmsgZnJvbX0uXG4gICAqXG4gICAqIE1hY2hpbmUgbWFpbCBnZXRzIGEgZG8tbm90LXJlcGx5IGFkZHJlc3MgYnkgZGVmYXVsdCBiZWNhdXNlIGEgcmVwbHkgdG8gaXRcbiAgICogcmVhY2hlcyBub2JvZHkuIFNldCB0aGlzIHRvIHJvdXRlIHRob3NlIHJlcGxpZXMgc29tZXdoZXJlIHJlYWwgKGEgbW9uaXRvcmVkXG4gICAqIGBzdXBwb3J0QGApIG9yIHRvIHNwZWxsIHRoZSBsb2NhbCBwYXJ0IGRpZmZlcmVudGx5IChgZG9ub3RyZXBseUBgKS5cbiAgICovXG4gIHN5c3RlbUZyb20/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgZm9yIHRoZSBmaWxlL291dGJveCBmYWxsYmFjay4gRmFsbHMgYmFjayB0b1xuICAgKiBgRU1BSUxfT1VUQk9YX0RJUmAsIHRoZW4gYDxjd2Q+L3RtcGAuIE9ubHkgdXNlZCB3aGVuIFNNVFBcbiAgICogY3JlZGVudGlhbHMgYXJlIGFic2VudC5cbiAgICovXG4gIG91dERpcj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFsbG93LWxpc3QgcmVzdHJpY3RpbmcgdGhlIHNlbmRlciAoYEZyb21gKSBhZGRyZXNzLiBFYWNoIGVudHJ5IGlzIGFuXG4gICAqIGV4YWN0IGFkZHJlc3MgKGB1c2VyQGRvbWFpbi5jb21gKSwgYSBkb21haW4gd2lsZGNhcmQgKGAqQGRvbWFpbi5jb21gXG4gICAqIG9yIHRoZSBiYXJlIGBkb21haW4uY29tYCwgbWF0Y2hpbmcgYW55IGxvY2FsIHBhcnQgb24gdGhhdCBkb21haW4pLCBvclxuICAgKiBgKmAgKGFueSkuIEEgcmVzb2x2ZWQgLyBjaG9zZW4gc2VuZGVyIHRoYXQgbWF0Y2hlcyBubyBlbnRyeSBpc1xuICAgKiByZWplY3RlZCBhdCBzZW5kIHRpbWUuIEFjY2VwdHMgYSBgc3RyaW5nW11gIG9yIGEgc2luZ2xlIGNvbW1hLSAvXG4gICAqIHdoaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZzsgZmFsbHMgYmFjayB0byBgRU1BSUxfQUxMT1dFRF9TRU5ERVJTYC5cbiAgICogV2hlbiBlbXB0eSwgdGhlIHtAbGluayBzZW5kZXJQb2xpY3l9IGRlY2lkZXMgd2hhdCBpcyBwZXJtaXR0ZWQuXG4gICAqL1xuICBhbGxvd2VkU2VuZGVycz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAvKipcbiAgICogSG93IHRoZSBzZW5kZXIgYWRkcmVzcyBpcyByZXN0cmljdGVkIHdoZW4ge0BsaW5rIGFsbG93ZWRTZW5kZXJzfSBpc1xuICAgKiBlbXB0eSAoYEVNQUlMX1NFTkRFUl9QT0xJQ1lgKS4gRGVmYXVsdHMgdG8gYFwiYWxsb3dsaXN0XCJgLCB3aGljaFxuICAgKiBuYXJyb3dzIHNlbmRzIHRvIHRoZSBjb25maWd1cmVkIHNlbmRlciBzb3VyY2UuIFNlZVxuICAgKiB7QGxpbmsgU2VuZGVyUG9saWN5fS5cbiAgICovXG4gIHNlbmRlclBvbGljeT86IFNlbmRlclBvbGljeTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJyYW5kIHN0eWxpbmcgYXBwbGllZCB0byBldmVyeSByZW5kZXJlZCBtZXNzYWdlLiBPbWl0IHRvIHVzZSB0aGVcbiAgICogcmVwb3NpdG9yeSdzIGRieC10b29scyBicmFuZC4gUGFzcyB7QGxpbmsgZW1haWxCcmFuZEZyb21Db250ZXh0fSB0byBkZXJpdmVcbiAgICogYSBjdXN0b20gdmFsdWUgZnJvbSBhIHNoYXJlZCBgQnJhbmRDb250ZXh0YC5cbiAgICovXG4gIGJyYW5kPzogRW1haWxCcmFuZDtcbn1cblxuLyoqIENvbmZpZyBzaGFyZWQgYnkgYm90aCByZXNvbHZlZCBtb2Rlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTZW5kZXIge1xuICAvKiogU2VuZGVyIGRvbWFpbjsgcHJlc2VudCB3aGVuZXZlciB7QGxpbmsgZnJvbX0gaXMgYWJzZW50LiAqL1xuICBkb21haW4/OiBzdHJpbmc7XG4gIC8qKiBFeHBsaWNpdCBzZW5kZXIgb3ZlcnJpZGU7IHByZXNlbnQgc2tpcHMgcGVyLXVzZXIgZGVyaXZhdGlvbi4gKi9cbiAgZnJvbT86IHN0cmluZztcbiAgLyoqXG4gICAqIEV4cGxpY2l0IGRvLW5vdC1yZXBseSBzZW5kZXIgZm9yIHN5c3RlbSBtYWlsLiBBYnNlbnQgbWVhbnMgaXQgaXMgZGVyaXZlZCAtXG4gICAqIHNlZSB7QGxpbmsgc3lzdGVtU2VuZGVyQWRkcmVzc30uXG4gICAqL1xuICBzeXN0ZW1Gcm9tPzogc3RyaW5nO1xuICAvKipcbiAgICogRWZmZWN0aXZlIHNlbmRlciBhbGxvdy1saXN0OiB0aGUgY29uZmlndXJlZCBwYXR0ZXJucyB3aGVuIGFueSB3ZXJlXG4gICAqIGdpdmVuLCBlbHNlIHRoZSBwYXR0ZXJucyBpbXBsaWVkIGJ5IHRoZSBzZW5kZXIgc291cmNlIHVuZGVyIGFuXG4gICAqIGBcImFsbG93bGlzdFwiYCBwb2xpY3kuIEVtcHR5IG1lYW5zIHVuZW5mb3JjZWFibGUgKGFuIGBcInVucmVzdHJpY3RlZFwiYFxuICAgKiBwb2xpY3ksIG9yIGFuIG91dGJveCB3aXRoIG5vIHNlbmRlciBzb3VyY2UgdG8gbmFycm93IHRvKS5cbiAgICovXG4gIGFsbG93ZWRTZW5kZXJzOiBzdHJpbmdbXTtcbiAgLyoqIFRoZSByZXN0cmljdGlvbiBtb2RlIHRoZSBhbGxvdy1saXN0IHdhcyByZXNvbHZlZCB1bmRlci4gKi9cbiAgc2VuZGVyUG9saWN5OiBTZW5kZXJQb2xpY3k7XG4gIC8qKiBCcmFuZCBzdHlsaW5nIGFwcGxpZWQgdG8gcmVuZGVyZWQgSFRNTC4gKi9cbiAgYnJhbmQ6IEVtYWlsQnJhbmQ7XG59XG5cbi8qKiBSZXNvbHZlZCBjb25maWcgZm9yIHJlYWwgU01UUCBkZWxpdmVyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTbXRwQ29uZmlnIGV4dGVuZHMgUmVzb2x2ZWRTZW5kZXIge1xuICBtb2RlOiBcInNtdHBcIjtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG4gIHNlY3VyZTogYm9vbGVhbjtcbiAgYXV0aDogeyB1c2VyOiBzdHJpbmc7IHBhc3M6IHN0cmluZyB9O1xufVxuXG4vKiogUmVzb2x2ZWQgY29uZmlnIGZvciB0aGUgZmlsZS9vdXRib3ggZmFsbGJhY2sgKG5vIFNNVFAgY3JlZGVudGlhbHMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZEZpbGVDb25maWcgZXh0ZW5kcyBSZXNvbHZlZFNlbmRlciB7XG4gIG1vZGU6IFwiZmlsZVwiO1xuICAvKiogQWJzb2x1dGUgZGlyZWN0b3J5IG1lc3NhZ2VzIGFyZSB3cml0dGVuIHVuZGVyLiAqL1xuICBvdXREaXI6IHN0cmluZztcbn1cblxuLyoqIENvbmNyZXRlLCB2YWxpZGF0ZWQgY29uZmlnIHRoZSBydW50aW1lIGRpc3BhdGNoZXMgdGhyb3VnaC4gKi9cbmV4cG9ydCB0eXBlIFJlc29sdmVkRW1haWxDb25maWcgPSBSZXNvbHZlZFNtdHBDb25maWcgfCBSZXNvbHZlZEZpbGVDb25maWc7XG5cbi8qKiBKU09OIFNjaGVtYSBwdWJsaXNoZWQgb24gdGhlIG1hbmlmZXN0J3MgYGNvbmZpZy5zY2hlbWFgLiAqL1xuZXhwb3J0IGNvbnN0IEVNQUlMX0NPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgc210cDoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNNVFAgY29ubmVjdGlvbiBhbmQgY3JlZGVudGlhbHMgKGVudiBmYWxsYmFja3M6IFNNVFBfKikuXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGhvc3Q6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiU01UUCBzZXJ2ZXIgaG9zdG5hbWUgKFNNVFBfSE9TVCkuXCIgfSxcbiAgICAgICAgcG9ydDoge1xuICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBTTVRQIHNlcnZlciBwb3J0IChTTVRQX1BPUlQpLiBEZWZhdWx0cyB0byAke0RFRkFVTFRfU01UUF9QT1JUfS5gLFxuICAgICAgICB9LFxuICAgICAgICBzZWN1cmU6IHtcbiAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYFRMUy1vbi1jb25uZWN0IHNvY2tldCAoU01UUF9TRUNVUkUpLiBEZWZhdWx0cyB0byBwb3J0ID09PSAke0lNUExJQ0lUX1RMU19TTVRQX1BPUlR9LmAsXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXI6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiU01UUCBhdXRoIHVzZXJuYW1lIChTTVRQX1VTRVIpLlwiIH0sXG4gICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTTVRQIGF1dGggcGFzc3dvcmQgLyBBUEkga2V5IChTTVRQX1BBU1NXT1JEKS5cIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkb21haW46IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEb21haW4gZm9yIHRoZSBkZXJpdmVkIHNlbmRlciBhZGRyZXNzICg8dXNlci1sb2NhbC1wYXJ0PkA8ZG9tYWluPikuIEZhbGxzIGJhY2sgdG8gRU1BSUxfRE9NQUlOLlwiLFxuICAgIH0sXG4gICAgZnJvbToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk9wdGlvbmFsIGV4cGxpY2l0IEZyb20gYWRkcmVzczsgc2tpcHMgcGVyLXVzZXIgZGVyaXZhdGlvbi4gRmFsbHMgYmFjayB0byBFTUFJTF9GUk9NLlwiLFxuICAgIH0sXG4gICAgc3lzdGVtRnJvbToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkZyb20gZm9yIHN5c3RlbSBtYWlsIChubyBvbi1iZWhhbGYtb2YgdXNlciwgZS5nLiBhIHNpZ24taW4gY29kZSkuIEZhbGxzIGJhY2sgdG8gRU1BSUxfU1lTVEVNX0ZST00sIHRoZW4gbm8tcmVwbHlAPGRvbWFpbj4sIHRoZW4gZnJvbS5cIixcbiAgICB9LFxuICAgIG91dERpcjoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRpcmVjdG9yeSBmb3IgdGhlIGZpbGUvb3V0Ym94IGZhbGxiYWNrIHdoZW4gU01UUCBpcyB1bmNvbmZpZ3VyZWQuIEZhbGxzIGJhY2sgdG8gRU1BSUxfT1VUQk9YX0RJUiwgdGhlbiA8Y3dkPi90bXAuXCIsXG4gICAgfSxcbiAgICBhbGxvd2VkU2VuZGVyczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdBbGxvdy1saXN0IG9mIHBlcm1pdHRlZCBzZW5kZXIgKEZyb20pIHBhdHRlcm5zOiBleGFjdCBhZGRyZXNzZXMgKFwidXNlckBkb21haW4uY29tXCIpLCBkb21haW4gd2lsZGNhcmRzIChcIipAZG9tYWluLmNvbVwiKSwgb3IgXCIqXCIuIEFsc28gYWNjZXB0cyBhIGNvbW1hL3NwYWNlLXNlcGFyYXRlZCBzdHJpbmcuIEZhbGxzIGJhY2sgdG8gRU1BSUxfQUxMT1dFRF9TRU5ERVJTLiBXaGVuIGVtcHR5LCBzZW5kZXJQb2xpY3kgZGVjaWRlcy4nLFxuICAgIH0sXG4gICAgc2VuZGVyUG9saWN5OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZW51bTogW1wiYWxsb3dsaXN0XCIsIFwidW5yZXN0cmljdGVkXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdIb3cgdGhlIHNlbmRlciBpcyByZXN0cmljdGVkIHdoZW4gYWxsb3dlZFNlbmRlcnMgaXMgZW1wdHkgKEVNQUlMX1NFTkRFUl9QT0xJQ1kpLiBcImFsbG93bGlzdFwiIChkZWZhdWx0KSBuYXJyb3dzIHNlbmRzIHRvIHRoZSBjb25maWd1cmVkIHNlbmRlciBzb3VyY2U7IFwidW5yZXN0cmljdGVkXCIgYWNjZXB0cyBhbnkgRnJvbS4nLFxuICAgIH0sXG4gICAgYnJhbmQ6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJCcmFuZCBzdHlsaW5nIGFwcGxpZWQgdG8gZXZlcnkgUmVhY3QgRW1haWwgbWVzc2FnZS4gT21pdCB0byB1c2UgdGhlIGRieC10b29scyBicmFuZC5cIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWNjZW50OiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0hlYWRlci1iYW5kIGJhY2tncm91bmQgYW5kIGJvZHkgbGluayBjb2xvciAoZS5nLiBcIiNGRjM2MjFcIikuJyxcbiAgICAgICAgfSxcbiAgICAgICAgb25BY2NlbnQ6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRleHQgYW5kIGxvZ28gY29sb3IgcmVuZGVyZWQgb24gdGhlIGFjY2VudCBiYW5kLiBEZWZhdWx0cyB0byB3aGl0ZS5cIixcbiAgICAgICAgfSxcbiAgICAgICAgZm9udEZhbWlseToge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdCb2R5IGZvbnQgc3RhY2sgKGUuZy4gXCJJbnRlciwgdWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmXCIpLicsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlByb2R1Y3QgLyBkaXNwbGF5IG5hbWUgdXNlZCBhcyB0aGUgaGVhZGVyIHRleHQgYW5kIHRoZSBsb2dvIGFsdCB0ZXh0LlwiLFxuICAgICAgICB9LFxuICAgICAgICBsb2dvVXJsOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIFwiTG9nbyBpbWFnZSBmb3IgdGhlIGhlYWRlciBiYW5kLiBPbmx5IGFuIGh0dHAocyk6IG9yIGRhdGE6IFVSTCByZW5kZXJzOyBvdGhlciB2YWx1ZXMgYXJlIGRyb3BwZWQgYmVjYXVzZSBhIG1haWwgY2xpZW50IGNhbm5vdCBsb2FkIHRoZW0uXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJhY2tncm91bmQ6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiSW5ib3ggY2FudmFzIGNvbG9yLlwiIH0sXG4gICAgICAgIHN1cmZhY2U6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiTWVzc2FnZS1jYXJkIGNvbG9yLlwiIH0sXG4gICAgICAgIGZvcmVncm91bmQ6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiUHJpbWFyeSB0ZXh0IGNvbG9yLlwiIH0sXG4gICAgICAgIG11dGVkOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIlNlY29uZGFyeSB0ZXh0IGNvbG9yLlwiIH0sXG4gICAgICAgIGJvcmRlcjogeyB0eXBlOiBcInN0cmluZ1wiLCBkZXNjcmlwdGlvbjogXCJCb3JkZXIgYW5kIGRpdmlkZXIgY29sb3IuXCIgfSxcbiAgICAgICAgdGFnbGluZTogeyB0eXBlOiBcInN0cmluZ1wiLCBkZXNjcmlwdGlvbjogXCJGb290ZXIgcHJvZHVjdCBsaW5lLlwiIH0sXG4gICAgICAgIHdlYnNpdGU6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiT3B0aW9uYWwgZm9vdGVyIHdlYnNpdGUgVVJMLlwiIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFtcImFjY2VudFwiLCBcImZvbnRGYW1pbHlcIl0sXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKiBQYXJzZSB0aGUgYFNNVFBfU0VDVVJFYCBlbnYgLyBjb25maWcgZmxhZywgZGVmYXVsdGluZyBieSBwb3J0LiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNlY3VyZShmbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkLCBwb3J0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBjb3JlQ29uZmlnLmJvb2xlYW4oZmxhZywgXCJTTVRQX1NFQ1VSRVwiLCBjb3JlQ29uZmlnLkVOVl9PTkxZKSA/PyBwb3J0ID09PSBJTVBMSUNJVF9UTFNfU01UUF9QT1JUXG4gICk7XG59XG5cbi8qKiBQYXJzZSB0aGUgYEVNQUlMX1NFTkRFUl9QT0xJQ1lgIGVudiAvIGNvbmZpZyB2YWx1ZSwgZGVmYXVsdGluZyB0byBkZW55LWJ5LWRlZmF1bHQuICovXG5mdW5jdGlvbiByZXNvbHZlU2VuZGVyUG9saWN5KHBvbGljeTogU2VuZGVyUG9saWN5IHwgdW5kZWZpbmVkKTogU2VuZGVyUG9saWN5IHtcbiAgY29uc3QgcmF3ID0gcG9saWN5ID8/IGNvcmVDb25maWcudGV4dChcIkVNQUlMX1NFTkRFUl9QT0xJQ1lcIiwgY29yZUNvbmZpZy5FTlZfT05MWSk/LnRvTG93ZXJDYXNlKCk7XG4gIGlmIChyYXcgPT09IFwidW5yZXN0cmljdGVkXCIpIHJldHVybiBcInVucmVzdHJpY3RlZFwiO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQgfHwgcmF3ID09PSBcIlwiIHx8IHJhdyA9PT0gXCJhbGxvd2xpc3RcIikgcmV0dXJuIFwiYWxsb3dsaXN0XCI7XG4gIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXCJzZW5kZXJQb2xpY3lcIiwgcmF3LCAnXCJhbGxvd2xpc3RcIiBvciBcInVucmVzdHJpY3RlZFwiJyk7XG59XG5cbi8qKlxuICogRWZmZWN0aXZlIGFsbG93LWxpc3QgZm9yIGFuIGBcImFsbG93bGlzdFwiYCBwb2xpY3kgd2l0aCBubyBleHBsaWNpdCBwYXR0ZXJuczpcbiAqIHRoZSBzZW5kZXIgc291cmNlIGl0c2VsZiwgc28gYSBjb25maWd1cmVkIGRvbWFpbiBvciBmaXhlZCBhZGRyZXNzIGlzIHRoZVxuICogYm91bmRhcnkgcmF0aGVyIHRoYW4gXCJhbnl0aGluZyBnb2VzXCIuIFlpZWxkcyBub3RoaW5nIHdoZW4gbmVpdGhlciBpcyBzZXQsXG4gKiB3aGljaCBvbmx5IGhhcHBlbnMgaW4gb3V0Ym94IG1vZGUgKHdoZXJlIHRoZSBzZW5kZXIgZmFsbHMgYmFjayB0byB0aGVcbiAqIG9uLWJlaGFsZi1vZiB1c2VyJ3Mgb3duIGFkZHJlc3MgYW5kIGNhbm5vdCBiZSBlbnVtZXJhdGVkIHVwIGZyb250KS5cbiAqL1xuZnVuY3Rpb24gaW1wbGllZFNlbmRlclBhdHRlcm5zKHNlbmRlcjoge1xuICBkb21haW4/OiBzdHJpbmc7XG4gIGZyb20/OiBzdHJpbmc7XG4gIHN5c3RlbUZyb20/OiBzdHJpbmc7XG59KTogc3RyaW5nW10ge1xuICBjb25zdCBwYXR0ZXJuczogc3RyaW5nW10gPSBbXTtcbiAgaWYgKHNlbmRlci5mcm9tKSBwYXR0ZXJucy5wdXNoKHNlbmRlci5mcm9tLnRyaW0oKS50b0xvd2VyQ2FzZSgpKTtcbiAgaWYgKHNlbmRlci5kb21haW4pIHBhdHRlcm5zLnB1c2goYCpAJHtzZW5kZXIuZG9tYWluLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWApO1xuICAvLyBUaGUgc3lzdGVtIHNlbmRlciB0b28sIHdoZW4gdGhlIHBhdHRlcm5zIGFib3ZlIGRvIG5vdCBhbHJlYWR5IGNvdmVyIGl0OiBpdFxuICAvLyBpcyBhbiBhZGRyZXNzIHRoaXMgYXBwIFNFTkRTIGZyb20sIHNvIGEgbGlzdCBkZXJpdmVkIGZyb20gdGhlIHNlbmRlciBzb3VyY2VcbiAgLy8gaGFzIHRvIHBlcm1pdCBpdCwgb3IgdGhlIHZlcnkgcG9saWN5IG1lYW50IHRvIGRlc2NyaWJlIHRoZSBhcHAncyBvd24gc2VuZGVyc1xuICAvLyBkZW5pZXMgaXRzIHNpZ24taW4gbWFpbC4gVXN1YWxseSByZWR1bmRhbnQgKGAqQGRvbWFpbmAgYWxyZWFkeSBtYXRjaGVzXG4gIC8vIGBuby1yZXBseUBkb21haW5gKSAtIGl0IG1hdHRlcnMgZm9yIGEgYHN5c3RlbUZyb21gIG9uIGFub3RoZXIgZG9tYWluLlxuICBjb25zdCBzeXN0ZW0gPSBzeXN0ZW1TZW5kZXJBZGRyZXNzKHNlbmRlcik/LnRvTG93ZXJDYXNlKCk7XG4gIGlmIChzeXN0ZW0gJiYgIWlzU2VuZGVyQWxsb3dlZChzeXN0ZW0sIHBhdHRlcm5zKSkgcGF0dGVybnMucHVzaChzeXN0ZW0pO1xuICByZXR1cm4gcGF0dGVybnM7XG59XG5cbi8qKiBXaGV0aGVyIGBFTUFJTF9PVVRCT1hfTU9ERWAgZXhwbGljaXRseSBvcHRzIGludG8gdGhlIGZpbGUvb3V0Ym94IGZhbGxiYWNrLiAqL1xuZnVuY3Rpb24gaXNPdXRib3hNb2RlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvcmVDb25maWcuYm9vbGVhbih1bmRlZmluZWQsIFwiRU1BSUxfT1VUQk9YX01PREVcIiwgY29yZUNvbmZpZy5FTlZfT05MWSkgPz8gZmFsc2U7XG59XG5cbmNvbnN0IFNNVFBfUkVRVUlSRURfRklFTERTID0gW1wiU01UUF9IT1NUXCIsIFwiU01UUF9VU0VSXCIsIFwiU01UUF9QQVNTV09SRFwiXSBhcyBjb25zdDtcblxuLyoqIExpc3QgZW52IGtleXMgZm9yIFNNVFAgZmllbGRzIHRoYXQgYXJlIHVuc2V0IGluIHRoZSByZXNvbHZlZCBjcmVkZW50aWFsIHNldC4gKi9cbmZ1bmN0aW9uIG1pc3NpbmdTbXRwRmllbGRzKFxuICBob3N0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHVzZXI6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcGFzczogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCB2YWx1ZXMgPSBbaG9zdCwgdXNlciwgcGFzc10gYXMgY29uc3Q7XG4gIHJldHVybiBTTVRQX1JFUVVJUkVEX0ZJRUxEUy5maWx0ZXIoKF8sIGluZGV4KSA9PiAhdmFsdWVzW2luZGV4XSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBwbHVnaW4gY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMuXG4gKlxuICogV2hlbiBTTVRQIGhvc3QgKyB1c2VyICsgcGFzc3dvcmQgYXJlIGFsbCBwcmVzZW50LCByZXR1cm5zIGBtb2RlOlxuICogXCJzbXRwXCJgIGZvciByZWFsIGRlbGl2ZXJ5IChhbmQgdGhyb3dzIGlmIG5vIHNlbmRlciBzb3VyY2UgLSBkb21haW4sXG4gKiBmcm9tLCBvciBzeXN0ZW1Gcm9tIC0gaXMgY29uZmlndXJlZCwgc2luY2UgU01UUCBjYW4ndCBkZXJpdmUgb25lIGZyb21cbiAqIG5vdGhpbmc7IGBkb21haW5gIGFsb25lIGlzIHRoZSBpbnRlbmRlZCBtaW5pbXVtKS5cbiAqIFdoZW4gYWxsIHRocmVlIGFyZSBhYnNlbnQgYW5kIGBFTUFJTF9PVVRCT1hfTU9ERWAgaXMgZW5hYmxlZCwgcmV0dXJuc1xuICogYG1vZGU6IFwiZmlsZVwiYCBzbyB0aGUgcnVudGltZSB3cml0ZXMgbWVzc2FnZXMgdG8gdGhlIG91dGJveCBkaXJlY3RvcnlcbiAqIGZvciBsb2NhbCB0ZXN0aW5nOyBpbiB0aGF0IG1vZGUgYSBzZW5kZXIgc291cmNlIGlzIG9wdGlvbmFsICh0aGVcbiAqIG91dGJveCBmYWxscyBiYWNrIHRvIHRoZSBPQk8gdXNlcidzIG93biBhZGRyZXNzKS4gUGFydGlhbCBTTVRQXG4gKiBjb25maWd1cmF0aW9uIG9yIGEgc2VuZCB3aXRoIG5vIGNyZWRlbnRpYWxzIGFuZCBubyBvdXRib3ggb3B0LWluXG4gKiB0aHJvd3MuXG4gKlxuICogVGhlIHNlbmRlciBhbGxvdy1saXN0IGlzIHJlc29sdmVkIGhlcmUgdG9vOiB1bmRlciB0aGUgZGVmYXVsdFxuICogYFwiYWxsb3dsaXN0XCJgIHBvbGljeSBhbiBlbXB0eSBsaXN0IGlzIGZpbGxlZCBpbiBmcm9tIHRoZSBzZW5kZXIgc291cmNlLFxuICogc28gYSBkZXBsb3ltZW50IHRoYXQgb25seSBzZXRzIGBFTUFJTF9ET01BSU5gIHN0aWxsIHJlamVjdHMgYSBgRnJvbWAgb25cbiAqIGFueSBvdGhlciBkb21haW4uIFNlZSB7QGxpbmsgU2VuZGVyUG9saWN5fS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbWFpbENvbmZpZyhjb25maWc6IEVtYWlsUGx1Z2luQ29uZmlnID0ge30pOiBSZXNvbHZlZEVtYWlsQ29uZmlnIHtcbiAgY29uc3Qgc210cCA9IGNvbmZpZy5zbXRwID8/IHt9O1xuICBjb25zdCBob3N0ID0gY29yZUNvbmZpZy5zdHJpbmcoc210cC5ob3N0LCBcIlNNVFBfSE9TVFwiLCBjb3JlQ29uZmlnLkVOVl9PTkxZKTtcbiAgY29uc3QgdXNlciA9IGNvcmVDb25maWcuc3RyaW5nKHNtdHAudXNlciwgXCJTTVRQX1VTRVJcIiwgY29yZUNvbmZpZy5FTlZfT05MWSk7XG4gIGNvbnN0IHBhc3MgPSBjb3JlQ29uZmlnLnN0cmluZyhzbXRwLnBhc3N3b3JkLCBcIlNNVFBfUEFTU1dPUkRcIiwgY29yZUNvbmZpZy5FTlZfT05MWSk7XG4gIGNvbnN0IGRvbWFpbiA9IGNvcmVDb25maWcuc3RyaW5nKGNvbmZpZy5kb21haW4sIFwiRU1BSUxfRE9NQUlOXCIsIGNvcmVDb25maWcuRU5WX09OTFkpO1xuICBjb25zdCBmcm9tID0gY29yZUNvbmZpZy5zdHJpbmcoY29uZmlnLmZyb20sIFwiRU1BSUxfRlJPTVwiLCBjb3JlQ29uZmlnLkVOVl9PTkxZKTtcbiAgY29uc3Qgc3lzdGVtRnJvbSA9IGNvcmVDb25maWcuc3RyaW5nKGNvbmZpZy5zeXN0ZW1Gcm9tLCBcIkVNQUlMX1NZU1RFTV9GUk9NXCIsIGNvcmVDb25maWcuRU5WX09OTFkpO1xuICBjb25zdCBzZW5kZXJQb2xpY3kgPSByZXNvbHZlU2VuZGVyUG9saWN5KGNvbmZpZy5zZW5kZXJQb2xpY3kpO1xuICBjb25zdCBjb25maWd1cmVkU2VuZGVycyA9IHBhcnNlQWxsb3dlZFNlbmRlcnMoXG4gICAgY29uZmlnLmFsbG93ZWRTZW5kZXJzID8/IGNvcmVDb25maWcudGV4dChcIkVNQUlMX0FMTE9XRURfU0VOREVSU1wiLCBjb3JlQ29uZmlnLkVOVl9PTkxZKSxcbiAgKTtcbiAgY29uc3QgYWxsb3dlZFNlbmRlcnMgPVxuICAgIGNvbmZpZ3VyZWRTZW5kZXJzLmxlbmd0aCA+IDAgfHwgc2VuZGVyUG9saWN5ID09PSBcInVucmVzdHJpY3RlZFwiXG4gICAgICA/IGNvbmZpZ3VyZWRTZW5kZXJzXG4gICAgICA6IGltcGxpZWRTZW5kZXJQYXR0ZXJucyh7IGRvbWFpbiwgZnJvbSwgc3lzdGVtRnJvbSB9KTtcbiAgY29uc3Qgc2VuZGVyOiBSZXNvbHZlZFNlbmRlciA9IHtcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXCJkb21haW5cIiwgZG9tYWluKSxcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXCJmcm9tXCIsIGZyb20pLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcInN5c3RlbUZyb21cIiwgc3lzdGVtRnJvbSksXG4gICAgYWxsb3dlZFNlbmRlcnMsXG4gICAgc2VuZGVyUG9saWN5LFxuICAgIGJyYW5kOiBjb25maWcuYnJhbmQgPz8gZGVmYXVsdEVtYWlsQnJhbmQsXG4gIH07XG5cbiAgY29uc3QgaGFzQWxsU210cCA9IEJvb2xlYW4oaG9zdCAmJiB1c2VyICYmIHBhc3MpO1xuICBjb25zdCBoYXNBbnlTbXRwID0gQm9vbGVhbihob3N0IHx8IHVzZXIgfHwgcGFzcyk7XG5cbiAgaWYgKGhhc0FueVNtdHAgJiYgIWhhc0FsbFNtdHApIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IubWlzc2luZ0VudlZhcnMobWlzc2luZ1NtdHBGaWVsZHMoaG9zdCwgdXNlciwgcGFzcykpO1xuICB9XG5cbiAgaWYgKGhhc0FsbFNtdHApIHtcbiAgICBpZiAoIWRvbWFpbiAmJiAhZnJvbSAmJiAhc3lzdGVtRnJvbSkge1xuICAgICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICAgIFwiRW1haWwgc2VuZGVyIHNvdXJjZVwiLFxuICAgICAgICBcIlNldCBFTUFJTF9ET01BSU4gdG8gZGVyaXZlIDx1c2VyLWxvY2FsLXBhcnQ+QDxkb21haW4+IChhbmQgbm8tcmVwbHlAPGRvbWFpbj4gZm9yIHN5c3RlbSBtYWlsKSwgb3IgRU1BSUxfRlJPTSBmb3IgYSBmaXhlZCBhZGRyZXNzLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcG9ydCA9IGNvcmVDb25maWcucG9ydChzbXRwLnBvcnQsIFwiU01UUF9QT1JUXCIsIERFRkFVTFRfU01UUF9QT1JULCBjb3JlQ29uZmlnLkVOVl9PTkxZKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJzbXRwXCIsXG4gICAgICBob3N0OiBob3N0ISxcbiAgICAgIHBvcnQsXG4gICAgICBzZWN1cmU6IHJlc29sdmVTZWN1cmUoc210cC5zZWN1cmUsIHBvcnQpLFxuICAgICAgYXV0aDogeyB1c2VyOiB1c2VyISwgcGFzczogcGFzcyEgfSxcbiAgICAgIC4uLnNlbmRlcixcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFpc091dGJveE1vZGVFbmFibGVkKCkpIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICBcIlNNVFBcIixcbiAgICAgIGBTZXQgJHtTTVRQX1JFUVVJUkVEX0ZJRUxEUy5qb2luKFwiLCBcIil9LCBvciBFTUFJTF9PVVRCT1hfTU9ERT0xIHRvIHdyaXRlIG1lc3NhZ2VzIHRvIGEgbG9jYWwgb3V0Ym94IGluc3RlYWQuYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgb3V0RGlyID0gcmVzb2x2ZShcbiAgICBjb3JlQ29uZmlnLnN0cmluZyhjb25maWcub3V0RGlyLCBcIkVNQUlMX09VVEJPWF9ESVJcIiwgY29yZUNvbmZpZy5FTlZfT05MWSkgPz9cbiAgICAgIHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgXCJ0bXBcIiksXG4gICk7XG4gIHJldHVybiB7IG1vZGU6IFwiZmlsZVwiLCBvdXREaXIsIC4uLnNlbmRlciB9O1xufVxuIl19
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBeUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxZQUFZLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV4Rix5REFBeUQ7QUFDekQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDO0FBRXJDLDJFQUEyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUEwSTFDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBZ0I7SUFDOUMsSUFBSSxFQUFFLFFBQVE7SUFDZCxVQUFVLEVBQUU7UUFDVixJQUFJLEVBQUU7WUFDSixJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFBRSwwREFBMEQ7WUFDdkUsVUFBVSxFQUFFO2dCQUNWLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLG1DQUFtQyxFQUFFO2dCQUMxRSxJQUFJLEVBQUU7b0JBQ0osSUFBSSxFQUFFLFFBQVE7b0JBQ2QsV0FBVyxFQUFFLDZDQUE2QyxpQkFBaUIsR0FBRztpQkFDL0U7Z0JBQ0QsTUFBTSxFQUFFO29CQUNOLElBQUksRUFBRSxTQUFTO29CQUNmLFdBQVcsRUFBRSw2REFB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QztJQUNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNNVFAgY29uZmlndXJhdGlvbiBmb3IgdGhlIGVtYWlsIHBsdWdpbjogdGhlIHR5cGVkXG4gKiB7QGxpbmsgRW1haWxQbHVnaW5Db25maWd9ICh0aGUgcGx1Z2luJ3Mgc2xpY2Ugb2YgQXBwS2l0IGNvbmZpZyksIHRoZVxuICogSlNPTiBTY2hlbWEgdGhlIG1hbmlmZXN0IHB1Ymxpc2hlcyBmb3IgaXQsIGFuZCB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfVxuICogd2hpY2ggbGF5ZXJzIHRoYXQgY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGVcbiAqIHtAbGluayBSZXNvbHZlZEVtYWlsQ29uZmlnfSB0aGUgcnVudGltZSBuZWVkcy5cbiAqXG4gKiBUd28gbW9kZXMgZmFsbCBvdXQgb2YgdGhlIHJlc29sdXRpb24uIFdoZW4gU01UUCBjcmVkZW50aWFscyAoaG9zdCArXG4gKiB1c2VyICsgcGFzc3dvcmQpIGFyZSBhbGwgcHJlc2VudCBpdCByZXNvbHZlcyB0byBgbW9kZTogXCJzbXRwXCJgIGFuZFxuICogbWFpbCBpcyBzZW50IGZvciByZWFsLiBXaGVuIHRoZXkgYXJlIGFic2VudCBhbmQgYEVNQUlMX09VVEJPWF9NT0RFYFxuICogaXMgZXhwbGljaXRseSBlbmFibGVkIGl0IHJlc29sdmVzIHRvIGBtb2RlOiBcImZpbGVcImAgKGFuIFwib3V0Ym94XCIpXG4gKiBhbmQgZWFjaCBtZXNzYWdlIGlzIHdyaXR0ZW4gdG8gZGlzayBhcyBIVE1MIGluc3RlYWQgb2Ygc2VudC4gQW55XG4gKiBwYXJ0aWFsIFNNVFAgY29uZmlndXJhdGlvbiBvciBhIHNlbmQgYXR0ZW1wdCB3aXRoIG5vIGNyZWRlbnRpYWxzIGFuZFxuICogbm8gb3V0Ym94IG9wdC1pbiB0aHJvd3MuXG4gKlxuICogUHJlY2VkZW5jZSBwZXIgZmllbGQ6IGV4cGxpY2l0IHBsdWdpbiBjb25maWcgd2lucywgdGhlbiB0aGUgbWF0Y2hpbmdcbiAqIGVudmlyb25tZW50IHZhcmlhYmxlLiBFbnYgbmFtZXMgYXJlIHVucHJlZml4ZWQgYmVjYXVzZSB0aGUgYXBwIHRhbGtzXG4gKiB0byBhIHNpbmdsZSBTTVRQIHNlcnZlciAoZS5nLiBTTVRQMkdPKTogYFNNVFBfSE9TVGAsIGBTTVRQX1BPUlRgLFxuICogYFNNVFBfU0VDVVJFYCwgYFNNVFBfVVNFUmAsIGBTTVRQX1BBU1NXT1JEYCwgcGx1cyBgRU1BSUxfRE9NQUlOYCBmb3JcbiAqIHRoZSBkZXJpdmVkIHNlbmRlcidzIGRvbWFpbiwgYEVNQUlMX0ZST01gIGZvciBhbiBleHBsaWNpdCBvdmVycmlkZSxcbiAqIGBFTUFJTF9TWVNURU1fRlJPTWAgZm9yIHRoZSBkby1ub3QtcmVwbHkgYWRkcmVzcyBzeXN0ZW0gbWFpbCBzZW5kcyBmcm9tLFxuICogYEVNQUlMX1NFTkRFUl9QT0xJQ1lgIGZvciB0aGUgc2VuZGVyIHJlc3RyaWN0aW9uIG1vZGUsIGFuZFxuICogYEVNQUlMX09VVEJPWF9ESVJgIGZvciB0aGUgb3V0Ym94IGRpcmVjdG9yeS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciwgdHlwZSBCYXNlUGx1Z2luQ29uZmlnIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY29uZmlnVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBKU09OU2NoZW1hNyB9IGZyb20gXCJqc29uLXNjaGVtYVwiO1xuaW1wb3J0IHsgZGVmYXVsdEVtYWlsQnJhbmQsIHR5cGUgRW1haWxCcmFuZCB9IGZyb20gXCIuL2JyYW5kLnRzXCI7XG5pbXBvcnQgeyBpc1NlbmRlckFsbG93ZWQsIHBhcnNlQWxsb3dlZFNlbmRlcnMsIHN5c3RlbVNlbmRlckFkZHJlc3MgfSBmcm9tIFwiLi9zZW5kZXIudHNcIjtcblxuLyoqIFNNVFAgc3VibWlzc2lvbiBwb3J0IHVzZWQgd2hlbiBub25lIGlzIGNvbmZpZ3VyZWQuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TTVRQX1BPUlQgPSA1ODc7XG5cbi8qKiBTTVRQIHBvcnQgdGhhdCBpbXBsaWVzIGEgVExTLW9uLWNvbm5lY3Qgc29ja2V0IHJhdGhlciB0aGFuIFNUQVJUVExTLiAqL1xuZXhwb3J0IGNvbnN0IElNUExJQ0lUX1RMU19TTVRQX1BPUlQgPSA0NjU7XG5cbi8qKlxuICogSG93IHRoZSBzZW5kZXIgKGBGcm9tYCkgYWRkcmVzcyBpcyByZXN0cmljdGVkLlxuICpcbiAqIGBcImFsbG93bGlzdFwiYCBpcyB0aGUgZGVmYXVsdCBhbmQgdGhlIGRlbnktYnktZGVmYXVsdCBwb3N0dXJlOiBhIHNlbmQgaXNcbiAqIHBlcm1pdHRlZCBvbmx5IGZyb20gYW4gYWRkcmVzcyB0aGUgY29uZmlndXJhdGlvbiBuYW1lcywgZWl0aGVyIHRocm91Z2hcbiAqIHtAbGluayBFbWFpbFBsdWdpbkNvbmZpZy5hbGxvd2VkU2VuZGVyc30gb3IsIHdoZW4gdGhhdCBpcyBlbXB0eSwgdGhyb3VnaFxuICogdGhlIGNvbmZpZ3VyZWQgc2VuZGVyIHNvdXJjZSAoe0BsaW5rIEVtYWlsUGx1Z2luQ29uZmlnLmZyb219IGFzIGFuIGV4YWN0XG4gKiBhZGRyZXNzLCB7QGxpbmsgRW1haWxQbHVnaW5Db25maWcuZG9tYWlufSBhcyBhIGAqQGRvbWFpbmAgd2lsZGNhcmQpLlxuICpcbiAqIGBcInVucmVzdHJpY3RlZFwiYCBpcyB0aGUgZXhwbGljaXQgb3B0LW91dDogYW55IGBGcm9tYCBhIGNhbGxlciBzdXBwbGllcyBpc1xuICogYWNjZXB0ZWQuIE9ubHkgcmVhY2ggZm9yIGl0IHdoZW4gYW4gdXBzdHJlYW0gc3lzdGVtIGFscmVhZHkgdmV0cyB0aGVcbiAqIHNlbmRlci5cbiAqL1xuZXhwb3J0IHR5cGUgU2VuZGVyUG9saWN5ID0gXCJhbGxvd2xpc3RcIiB8IFwidW5yZXN0cmljdGVkXCI7XG5cbi8qKiBTTVRQIGNvbm5lY3Rpb24gKyBjcmVkZW50aWFscy4gQWxsIGZpZWxkcyBmYWxsIGJhY2sgdG8gZW52IHdoZW4gdW5zZXQuICovXG5leHBvcnQgaW50ZXJmYWNlIFNtdHBDb25maWcge1xuICAvKiogU01UUCBzZXJ2ZXIgaG9zdG5hbWUgKGBTTVRQX0hPU1RgKS4gKi9cbiAgaG9zdD86IHN0cmluZztcbiAgLyoqIFNNVFAgc2VydmVyIHBvcnQgKGBTTVRQX1BPUlRgKS4gRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfU01UUF9QT1JUfS4gKi9cbiAgcG9ydD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFVzZSBhIFRMUy1vbi1jb25uZWN0IHNvY2tldCAoYFNNVFBfU0VDVVJFYCkuIERlZmF1bHRzIHRvXG4gICAqIGBwb3J0ID09PSBgIHtAbGluayBJTVBMSUNJVF9UTFNfU01UUF9QT1JUfS5cbiAgICovXG4gIHNlY3VyZT86IGJvb2xlYW47XG4gIC8qKiBTTVRQIGF1dGggdXNlcm5hbWUgKGBTTVRQX1VTRVJgKS4gKi9cbiAgdXNlcj86IHN0cmluZztcbiAgLyoqIFNNVFAgYXV0aCBwYXNzd29yZCAvIEFQSSBrZXkgKGBTTVRQX1BBU1NXT1JEYCkuICovXG4gIHBhc3N3b3JkPzogc3RyaW5nO1xufVxuXG4vKiogQXBwS2l0IGNvbmZpZyBhY2NlcHRlZCBieSB0aGUgZW1haWwgcGx1Z2luLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFBsdWdpbkNvbmZpZyBleHRlbmRzIEJhc2VQbHVnaW5Db25maWcge1xuICAvKiogU01UUCBjb25uZWN0aW9uICsgY3JlZGVudGlhbHMuIE9taXQgdG8gcnVuIGluIGZpbGUvb3V0Ym94IG1vZGUuICovXG4gIHNtdHA/OiBTbXRwQ29uZmlnO1xuICAvKipcbiAgICogRG9tYWluIHVzZWQgdG8gYnVpbGQgdGhlIHNlbmRlciBhZGRyZXNzIGZyb20gdGhlIG9uLWJlaGFsZi1vZiB1c2VyXG4gICAqIChgPGxvY2FsLXBhcnQ+QDxkb21haW4+YCkuIEZhbGxzIGJhY2sgdG8gYEVNQUlMX0RPTUFJTmAuIFJlcXVpcmVkIGluXG4gICAqIFNNVFAgbW9kZSB1bmxlc3Mge0BsaW5rIGZyb219IGlzIHNldDsgb3B0aW9uYWwgaW4gZmlsZSBtb2RlICh0aGVcbiAgICogb3V0Ym94IGZhbGxzIGJhY2sgdG8gdGhlIHVzZXIncyBvd24gZW1haWwgYWRkcmVzcykuXG4gICAqL1xuICBkb21haW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHBsaWNpdCBgRnJvbWAgYWRkcmVzcywgT1BUSU9OQUwuIFdoZW4gc2V0LCB0aGUgc2VuZGVyIGlzIHVzZWQgdmVyYmF0aW1cbiAgICogYW5kIHRoZSBwZXItdXNlciBkZXJpdmF0aW9uIGlzIHNraXBwZWQuIEZhbGxzIGJhY2sgdG8gYEVNQUlMX0ZST01gLlxuICAgKlxuICAgKiBMZWF2ZSBpdCB1bnNldCBpbiBtb3N0IGRlcGxveW1lbnRzOiB7QGxpbmsgZG9tYWlufSBhbG9uZSBpcyBlbm91Z2gsIGFuZFxuICAgKiBtYWlsIHRoZW4gY29tZXMgZnJvbSB0aGUgYWRkcmVzcyBvZiB0aGUgcGVyc29uIHdobyBjYXVzZWQgaXQsIHdoaWNoIGlzIHdoYXRcbiAgICogYSByZWNpcGllbnQgZXhwZWN0cyB0byBiZSBhYmxlIHRvIHJlcGx5IHRvLlxuICAgKi9cbiAgZnJvbT86IHN0cmluZztcbiAgLyoqXG4gICAqIGBGcm9tYCBmb3IgU1lTVEVNIG1haWwgLSBhIHNlbmQgd2l0aCBubyBvbi1iZWhhbGYtb2YgdXNlciwgc3VjaCBhcyBhXG4gICAqIHNpZ24taW4gY29kZSBvciBhIHBhc3N3b3JkIHJlc2V0LiBGYWxscyBiYWNrIHRvIGBFTUFJTF9TWVNURU1fRlJPTWAsIHRoZW5cbiAgICogdG8gYG5vLXJlcGx5QDxkb21haW4+YCwgdGhlbiB0byB7QGxpbmsgZnJvbX0uXG4gICAqXG4gICAqIE1hY2hpbmUgbWFpbCBnZXRzIGEgZG8tbm90LXJlcGx5IGFkZHJlc3MgYnkgZGVmYXVsdCBiZWNhdXNlIGEgcmVwbHkgdG8gaXRcbiAgICogcmVhY2hlcyBub2JvZHkuIFNldCB0aGlzIHRvIHJvdXRlIHRob3NlIHJlcGxpZXMgc29tZXdoZXJlIHJlYWwgKGEgbW9uaXRvcmVkXG4gICAqIGBzdXBwb3J0QGApIG9yIHRvIHNwZWxsIHRoZSBsb2NhbCBwYXJ0IGRpZmZlcmVudGx5IChgZG9ub3RyZXBseUBgKS5cbiAgICovXG4gIHN5c3RlbUZyb20/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgZm9yIHRoZSBmaWxlL291dGJveCBmYWxsYmFjay4gRmFsbHMgYmFjayB0b1xuICAgKiBgRU1BSUxfT1VUQk9YX0RJUmAsIHRoZW4gYDxjd2Q+L3RtcGAuIE9ubHkgdXNlZCB3aGVuIFNNVFBcbiAgICogY3JlZGVudGlhbHMgYXJlIGFic2VudC5cbiAgICovXG4gIG91dERpcj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFsbG93LWxpc3QgcmVzdHJpY3RpbmcgdGhlIHNlbmRlciAoYEZyb21gKSBhZGRyZXNzLiBFYWNoIGVudHJ5IGlzIGFuXG4gICAqIGV4YWN0IGFkZHJlc3MgKGB1c2VyQGRvbWFpbi5jb21gKSwgYSBkb21haW4gd2lsZGNhcmQgKGAqQGRvbWFpbi5jb21gXG4gICAqIG9yIHRoZSBiYXJlIGBkb21haW4uY29tYCwgbWF0Y2hpbmcgYW55IGxvY2FsIHBhcnQgb24gdGhhdCBkb21haW4pLCBvclxuICAgKiBgKmAgKGFueSkuIEEgcmVzb2x2ZWQgLyBjaG9zZW4gc2VuZGVyIHRoYXQgbWF0Y2hlcyBubyBlbnRyeSBpc1xuICAgKiByZWplY3RlZCBhdCBzZW5kIHRpbWUuIEFjY2VwdHMgYSBgc3RyaW5nW11gIG9yIGEgc2luZ2xlIGNvbW1hLSAvXG4gICAqIHdoaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZzsgZmFsbHMgYmFjayB0byBgRU1BSUxfQUxMT1dFRF9TRU5ERVJTYC5cbiAgICogV2hlbiBlbXB0eSwgdGhlIHtAbGluayBzZW5kZXJQb2xpY3l9IGRlY2lkZXMgd2hhdCBpcyBwZXJtaXR0ZWQuXG4gICAqL1xuICBhbGxvd2VkU2VuZGVycz86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAvKipcbiAgICogSG93IHRoZSBzZW5kZXIgYWRkcmVzcyBpcyByZXN0cmljdGVkIHdoZW4ge0BsaW5rIGFsbG93ZWRTZW5kZXJzfSBpc1xuICAgKiBlbXB0eSAoYEVNQUlMX1NFTkRFUl9QT0xJQ1lgKS4gRGVmYXVsdHMgdG8gYFwiYWxsb3dsaXN0XCJgLCB3aGljaFxuICAgKiBuYXJyb3dzIHNlbmRzIHRvIHRoZSBjb25maWd1cmVkIHNlbmRlciBzb3VyY2UuIFNlZVxuICAgKiB7QGxpbmsgU2VuZGVyUG9saWN5fS5cbiAgICovXG4gIHNlbmRlclBvbGljeT86IFNlbmRlclBvbGljeTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGJyYW5kIHN0eWxpbmcgYXBwbGllZCB0byBldmVyeSByZW5kZXJlZCBtZXNzYWdlLiBPbWl0IHRvIHVzZSB0aGVcbiAgICogcmVwb3NpdG9yeSdzIGRieC10b29scyBicmFuZC4gUGFzcyB7QGxpbmsgZW1haWxCcmFuZEZyb21Db250ZXh0fSB0byBkZXJpdmVcbiAgICogYSBjdXN0b20gdmFsdWUgZnJvbSBhIHNoYXJlZCBgQnJhbmRDb250ZXh0YC5cbiAgICovXG4gIGJyYW5kPzogRW1haWxCcmFuZDtcbn1cblxuLyoqIENvbmZpZyBzaGFyZWQgYnkgYm90aCByZXNvbHZlZCBtb2Rlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTZW5kZXIge1xuICAvKiogU2VuZGVyIGRvbWFpbjsgcHJlc2VudCB3aGVuZXZlciB7QGxpbmsgZnJvbX0gaXMgYWJzZW50LiAqL1xuICBkb21haW4/OiBzdHJpbmc7XG4gIC8qKiBFeHBsaWNpdCBzZW5kZXIgb3ZlcnJpZGU7IHByZXNlbnQgc2tpcHMgcGVyLXVzZXIgZGVyaXZhdGlvbi4gKi9cbiAgZnJvbT86IHN0cmluZztcbiAgLyoqXG4gICAqIEV4cGxpY2l0IGRvLW5vdC1yZXBseSBzZW5kZXIgZm9yIHN5c3RlbSBtYWlsLiBBYnNlbnQgbWVhbnMgaXQgaXMgZGVyaXZlZCAtXG4gICAqIHNlZSB7QGxpbmsgc3lzdGVtU2VuZGVyQWRkcmVzc30uXG4gICAqL1xuICBzeXN0ZW1Gcm9tPzogc3RyaW5nO1xuICAvKipcbiAgICogRWZmZWN0aXZlIHNlbmRlciBhbGxvdy1saXN0OiB0aGUgY29uZmlndXJlZCBwYXR0ZXJucyB3aGVuIGFueSB3ZXJlXG4gICAqIGdpdmVuLCBlbHNlIHRoZSBwYXR0ZXJucyBpbXBsaWVkIGJ5IHRoZSBzZW5kZXIgc291cmNlIHVuZGVyIGFuXG4gICAqIGBcImFsbG93bGlzdFwiYCBwb2xpY3kuIEVtcHR5IG1lYW5zIHVuZW5mb3JjZWFibGUgKGFuIGBcInVucmVzdHJpY3RlZFwiYFxuICAgKiBwb2xpY3ksIG9yIGFuIG91dGJveCB3aXRoIG5vIHNlbmRlciBzb3VyY2UgdG8gbmFycm93IHRvKS5cbiAgICovXG4gIGFsbG93ZWRTZW5kZXJzOiBzdHJpbmdbXTtcbiAgLyoqIFRoZSByZXN0cmljdGlvbiBtb2RlIHRoZSBhbGxvdy1saXN0IHdhcyByZXNvbHZlZCB1bmRlci4gKi9cbiAgc2VuZGVyUG9saWN5OiBTZW5kZXJQb2xpY3k7XG4gIC8qKiBCcmFuZCBzdHlsaW5nIGFwcGxpZWQgdG8gcmVuZGVyZWQgSFRNTC4gKi9cbiAgYnJhbmQ6IEVtYWlsQnJhbmQ7XG59XG5cbi8qKiBSZXNvbHZlZCBjb25maWcgZm9yIHJlYWwgU01UUCBkZWxpdmVyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTbXRwQ29uZmlnIGV4dGVuZHMgUmVzb2x2ZWRTZW5kZXIge1xuICBtb2RlOiBcInNtdHBcIjtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG4gIHNlY3VyZTogYm9vbGVhbjtcbiAgYXV0aDogeyB1c2VyOiBzdHJpbmc7IHBhc3M6IHN0cmluZyB9O1xufVxuXG4vKiogUmVzb2x2ZWQgY29uZmlnIGZvciB0aGUgZmlsZS9vdXRib3ggZmFsbGJhY2sgKG5vIFNNVFAgY3JlZGVudGlhbHMpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZEZpbGVDb25maWcgZXh0ZW5kcyBSZXNvbHZlZFNlbmRlciB7XG4gIG1vZGU6IFwiZmlsZVwiO1xuICAvKiogQWJzb2x1dGUgZGlyZWN0b3J5IG1lc3NhZ2VzIGFyZSB3cml0dGVuIHVuZGVyLiAqL1xuICBvdXREaXI6IHN0cmluZztcbn1cblxuLyoqIENvbmNyZXRlLCB2YWxpZGF0ZWQgY29uZmlnIHRoZSBydW50aW1lIGRpc3BhdGNoZXMgdGhyb3VnaC4gKi9cbmV4cG9ydCB0eXBlIFJlc29sdmVkRW1haWxDb25maWcgPSBSZXNvbHZlZFNtdHBDb25maWcgfCBSZXNvbHZlZEZpbGVDb25maWc7XG5cbi8qKiBKU09OIFNjaGVtYSBwdWJsaXNoZWQgb24gdGhlIG1hbmlmZXN0J3MgYGNvbmZpZy5zY2hlbWFgLiAqL1xuZXhwb3J0IGNvbnN0IEVNQUlMX0NPTkZJR19TQ0hFTUE6IEpTT05TY2hlbWE3ID0ge1xuICB0eXBlOiBcIm9iamVjdFwiLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgc210cDoge1xuICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNNVFAgY29ubmVjdGlvbiBhbmQgY3JlZGVudGlhbHMgKGVudiBmYWxsYmFja3M6IFNNVFBfKikuXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGhvc3Q6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiU01UUCBzZXJ2ZXIgaG9zdG5hbWUgKFNNVFBfSE9TVCkuXCIgfSxcbiAgICAgICAgcG9ydDoge1xuICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBTTVRQIHNlcnZlciBwb3J0IChTTVRQX1BPUlQpLiBEZWZhdWx0cyB0byAke0RFRkFVTFRfU01UUF9QT1JUfS5gLFxuICAgICAgICB9LFxuICAgICAgICBzZWN1cmU6IHtcbiAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYFRMUy1vbi1jb25uZWN0IHNvY2tldCAoU01UUF9TRUNVUkUpLiBEZWZhdWx0cyB0byBwb3J0ID09PSAke0lNUExJQ0lUX1RMU19TTVRQX1BPUlR9LmAsXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXI6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiU01UUCBhdXRoIHVzZXJuYW1lIChTTVRQX1VTRVIpLlwiIH0sXG4gICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTTVRQIGF1dGggcGFzc3dvcmQgLyBBUEkga2V5IChTTVRQX1BBU1NXT1JEKS5cIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkb21haW46IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEb21haW4gZm9yIHRoZSBkZXJpdmVkIHNlbmRlciBhZGRyZXNzICg8dXNlci1sb2NhbC1wYXJ0PkA8ZG9tYWluPikuIEZhbGxzIGJhY2sgdG8gRU1BSUxfRE9NQUlOLlwiLFxuICAgIH0sXG4gICAgZnJvbToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk9wdGlvbmFsIGV4cGxpY2l0IEZyb20gYWRkcmVzczsgc2tpcHMgcGVyLXVzZXIgZGVyaXZhdGlvbi4gRmFsbHMgYmFjayB0byBFTUFJTF9GUk9NLlwiLFxuICAgIH0sXG4gICAgc3lzdGVtRnJvbToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkZyb20gZm9yIHN5c3RlbSBtYWlsIChubyBvbi1iZWhhbGYtb2YgdXNlciwgZS5nLiBhIHNpZ24taW4gY29kZSkuIEZhbGxzIGJhY2sgdG8gRU1BSUxfU1lTVEVNX0ZST00sIHRoZW4gbm8tcmVwbHlAPGRvbWFpbj4sIHRoZW4gZnJvbS5cIixcbiAgICB9LFxuICAgIG91dERpcjoge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRpcmVjdG9yeSBmb3IgdGhlIGZpbGUvb3V0Ym94IGZhbGxiYWNrIHdoZW4gU01UUCBpcyB1bmNvbmZpZ3VyZWQuIEZhbGxzIGJhY2sgdG8gRU1BSUxfT1VUQk9YX0RJUiwgdGhlbiA8Y3dkPi90bXAuXCIsXG4gICAgfSxcbiAgICBhbGxvd2VkU2VuZGVyczoge1xuICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgaXRlbXM6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdBbGxvdy1saXN0IG9mIHBlcm1pdHRlZCBzZW5kZXIgKEZyb20pIHBhdHRlcm5zOiBleGFjdCBhZGRyZXNzZXMgKFwidXNlckBkb21haW4uY29tXCIpLCBkb21haW4gd2lsZGNhcmRzIChcIipAZG9tYWluLmNvbVwiKSwgb3IgXCIqXCIuIEFsc28gYWNjZXB0cyBhIGNvbW1hL3NwYWNlLXNlcGFyYXRlZCBzdHJpbmcuIEZhbGxzIGJhY2sgdG8gRU1BSUxfQUxMT1dFRF9TRU5ERVJTLiBXaGVuIGVtcHR5LCBzZW5kZXJQb2xpY3kgZGVjaWRlcy4nLFxuICAgIH0sXG4gICAgc2VuZGVyUG9saWN5OiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZW51bTogW1wiYWxsb3dsaXN0XCIsIFwidW5yZXN0cmljdGVkXCJdLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICdIb3cgdGhlIHNlbmRlciBpcyByZXN0cmljdGVkIHdoZW4gYWxsb3dlZFNlbmRlcnMgaXMgZW1wdHkgKEVNQUlMX1NFTkRFUl9QT0xJQ1kpLiBcImFsbG93bGlzdFwiIChkZWZhdWx0KSBuYXJyb3dzIHNlbmRzIHRvIHRoZSBjb25maWd1cmVkIHNlbmRlciBzb3VyY2U7IFwidW5yZXN0cmljdGVkXCIgYWNjZXB0cyBhbnkgRnJvbS4nLFxuICAgIH0sXG4gICAgYnJhbmQ6IHtcbiAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJCcmFuZCBzdHlsaW5nIGFwcGxpZWQgdG8gZXZlcnkgUmVhY3QgRW1haWwgbWVzc2FnZS4gT21pdCB0byB1c2UgdGhlIGRieC10b29scyBicmFuZC5cIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWNjZW50OiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0hlYWRlci1iYW5kIGJhY2tncm91bmQgYW5kIGJvZHkgbGluayBjb2xvciAoZS5nLiBcIiNGRjM2MjFcIikuJyxcbiAgICAgICAgfSxcbiAgICAgICAgb25BY2NlbnQ6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRleHQgYW5kIGxvZ28gY29sb3IgcmVuZGVyZWQgb24gdGhlIGFjY2VudCBiYW5kLiBEZWZhdWx0cyB0byB3aGl0ZS5cIixcbiAgICAgICAgfSxcbiAgICAgICAgZm9udEZhbWlseToge1xuICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdCb2R5IGZvbnQgc3RhY2sgKGUuZy4gXCJJbnRlciwgdWktc2Fucy1zZXJpZiwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmXCIpLicsXG4gICAgICAgIH0sXG4gICAgICAgIG5hbWU6IHtcbiAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlByb2R1Y3QgLyBkaXNwbGF5IG5hbWUgdXNlZCBhcyB0aGUgaGVhZGVyIHRleHQgYW5kIHRoZSBsb2dvIGFsdCB0ZXh0LlwiLFxuICAgICAgICB9LFxuICAgICAgICBsb2dvVXJsOiB7XG4gICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgIFwiTG9nbyBpbWFnZSBmb3IgdGhlIGhlYWRlciBiYW5kLiBPbmx5IGFuIGh0dHAocyk6IG9yIGRhdGE6IFVSTCByZW5kZXJzOyBvdGhlciB2YWx1ZXMgYXJlIGRyb3BwZWQgYmVjYXVzZSBhIG1haWwgY2xpZW50IGNhbm5vdCBsb2FkIHRoZW0uXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJhY2tncm91bmQ6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiSW5ib3ggY2FudmFzIGNvbG9yLlwiIH0sXG4gICAgICAgIHN1cmZhY2U6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiTWVzc2FnZS1jYXJkIGNvbG9yLlwiIH0sXG4gICAgICAgIGZvcmVncm91bmQ6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiUHJpbWFyeSB0ZXh0IGNvbG9yLlwiIH0sXG4gICAgICAgIG11dGVkOiB7IHR5cGU6IFwic3RyaW5nXCIsIGRlc2NyaXB0aW9uOiBcIlNlY29uZGFyeSB0ZXh0IGNvbG9yLlwiIH0sXG4gICAgICAgIGJvcmRlcjogeyB0eXBlOiBcInN0cmluZ1wiLCBkZXNjcmlwdGlvbjogXCJCb3JkZXIgYW5kIGRpdmlkZXIgY29sb3IuXCIgfSxcbiAgICAgICAgdGFnbGluZTogeyB0eXBlOiBcInN0cmluZ1wiLCBkZXNjcmlwdGlvbjogXCJGb290ZXIgcHJvZHVjdCBsaW5lLlwiIH0sXG4gICAgICAgIHdlYnNpdGU6IHsgdHlwZTogXCJzdHJpbmdcIiwgZGVzY3JpcHRpb246IFwiT3B0aW9uYWwgZm9vdGVyIHdlYnNpdGUgVVJMLlwiIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFtcImFjY2VudFwiLCBcImZvbnRGYW1pbHlcIl0sXG4gICAgfSxcbiAgfSxcbn07XG5cbi8qKiBQYXJzZSB0aGUgYFNNVFBfU0VDVVJFYCBlbnYgLyBjb25maWcgZmxhZywgZGVmYXVsdGluZyBieSBwb3J0LiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNlY3VyZShmbGFnOiBib29sZWFuIHwgdW5kZWZpbmVkLCBwb3J0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBjb25maWdVdGlscy5ib29sZWFuKGZsYWcsIFwiU01UUF9TRUNVUkVcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpID8/XG4gICAgcG9ydCA9PT0gSU1QTElDSVRfVExTX1NNVFBfUE9SVFxuICApO1xufVxuXG4vKiogUGFyc2UgdGhlIGBFTUFJTF9TRU5ERVJfUE9MSUNZYCBlbnYgLyBjb25maWcgdmFsdWUsIGRlZmF1bHRpbmcgdG8gZGVueS1ieS1kZWZhdWx0LiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNlbmRlclBvbGljeShwb2xpY3k6IFNlbmRlclBvbGljeSB8IHVuZGVmaW5lZCk6IFNlbmRlclBvbGljeSB7XG4gIGNvbnN0IHJhdyA9XG4gICAgcG9saWN5ID8/IGNvbmZpZ1V0aWxzLnRleHQoXCJFTUFJTF9TRU5ERVJfUE9MSUNZXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKHJhdyA9PT0gXCJ1bnJlc3RyaWN0ZWRcIikgcmV0dXJuIFwidW5yZXN0cmljdGVkXCI7XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09IFwiXCIgfHwgcmF3ID09PSBcImFsbG93bGlzdFwiKSByZXR1cm4gXCJhbGxvd2xpc3RcIjtcbiAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcInNlbmRlclBvbGljeVwiLCByYXcsICdcImFsbG93bGlzdFwiIG9yIFwidW5yZXN0cmljdGVkXCInKTtcbn1cblxuLyoqXG4gKiBFZmZlY3RpdmUgYWxsb3ctbGlzdCBmb3IgYW4gYFwiYWxsb3dsaXN0XCJgIHBvbGljeSB3aXRoIG5vIGV4cGxpY2l0IHBhdHRlcm5zOlxuICogdGhlIHNlbmRlciBzb3VyY2UgaXRzZWxmLCBzbyBhIGNvbmZpZ3VyZWQgZG9tYWluIG9yIGZpeGVkIGFkZHJlc3MgaXMgdGhlXG4gKiBib3VuZGFyeSByYXRoZXIgdGhhbiBcImFueXRoaW5nIGdvZXNcIi4gWWllbGRzIG5vdGhpbmcgd2hlbiBuZWl0aGVyIGlzIHNldCxcbiAqIHdoaWNoIG9ubHkgaGFwcGVucyBpbiBvdXRib3ggbW9kZSAod2hlcmUgdGhlIHNlbmRlciBmYWxscyBiYWNrIHRvIHRoZVxuICogb24tYmVoYWxmLW9mIHVzZXIncyBvd24gYWRkcmVzcyBhbmQgY2Fubm90IGJlIGVudW1lcmF0ZWQgdXAgZnJvbnQpLlxuICovXG5mdW5jdGlvbiBpbXBsaWVkU2VuZGVyUGF0dGVybnMoc2VuZGVyOiB7XG4gIGRvbWFpbj86IHN0cmluZztcbiAgZnJvbT86IHN0cmluZztcbiAgc3lzdGVtRnJvbT86IHN0cmluZztcbn0pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhdHRlcm5zOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoc2VuZGVyLmZyb20pIHBhdHRlcm5zLnB1c2goc2VuZGVyLmZyb20udHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xuICBpZiAoc2VuZGVyLmRvbWFpbikgcGF0dGVybnMucHVzaChgKkAke3NlbmRlci5kb21haW4udHJpbSgpLnRvTG93ZXJDYXNlKCl9YCk7XG4gIC8vIFRoZSBzeXN0ZW0gc2VuZGVyIHRvbywgd2hlbiB0aGUgcGF0dGVybnMgYWJvdmUgZG8gbm90IGFscmVhZHkgY292ZXIgaXQ6IGl0XG4gIC8vIGlzIGFuIGFkZHJlc3MgdGhpcyBhcHAgU0VORFMgZnJvbSwgc28gYSBsaXN0IGRlcml2ZWQgZnJvbSB0aGUgc2VuZGVyIHNvdXJjZVxuICAvLyBoYXMgdG8gcGVybWl0IGl0LCBvciB0aGUgdmVyeSBwb2xpY3kgbWVhbnQgdG8gZGVzY3JpYmUgdGhlIGFwcCdzIG93biBzZW5kZXJzXG4gIC8vIGRlbmllcyBpdHMgc2lnbi1pbiBtYWlsLiBVc3VhbGx5IHJlZHVuZGFudCAoYCpAZG9tYWluYCBhbHJlYWR5IG1hdGNoZXNcbiAgLy8gYG5vLXJlcGx5QGRvbWFpbmApIC0gaXQgbWF0dGVycyBmb3IgYSBgc3lzdGVtRnJvbWAgb24gYW5vdGhlciBkb21haW4uXG4gIGNvbnN0IHN5c3RlbSA9IHN5c3RlbVNlbmRlckFkZHJlc3Moc2VuZGVyKT8udG9Mb3dlckNhc2UoKTtcbiAgaWYgKHN5c3RlbSAmJiAhaXNTZW5kZXJBbGxvd2VkKHN5c3RlbSwgcGF0dGVybnMpKSBwYXR0ZXJucy5wdXNoKHN5c3RlbSk7XG4gIHJldHVybiBwYXR0ZXJucztcbn1cblxuLyoqIFdoZXRoZXIgYEVNQUlMX09VVEJPWF9NT0RFYCBleHBsaWNpdGx5IG9wdHMgaW50byB0aGUgZmlsZS9vdXRib3ggZmFsbGJhY2suICovXG5mdW5jdGlvbiBpc091dGJveE1vZGVFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY29uZmlnVXRpbHMuYm9vbGVhbih1bmRlZmluZWQsIFwiRU1BSUxfT1VUQk9YX01PREVcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpID8/IGZhbHNlO1xufVxuXG5jb25zdCBTTVRQX1JFUVVJUkVEX0ZJRUxEUyA9IFtcIlNNVFBfSE9TVFwiLCBcIlNNVFBfVVNFUlwiLCBcIlNNVFBfUEFTU1dPUkRcIl0gYXMgY29uc3Q7XG5cbi8qKiBMaXN0IGVudiBrZXlzIGZvciBTTVRQIGZpZWxkcyB0aGF0IGFyZSB1bnNldCBpbiB0aGUgcmVzb2x2ZWQgY3JlZGVudGlhbCBzZXQuICovXG5mdW5jdGlvbiBtaXNzaW5nU210cEZpZWxkcyhcbiAgaG9zdDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB1c2VyOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBhc3M6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgdmFsdWVzID0gW2hvc3QsIHVzZXIsIHBhc3NdIGFzIGNvbnN0O1xuICByZXR1cm4gU01UUF9SRVFVSVJFRF9GSUVMRFMuZmlsdGVyKChfLCBpbmRleCkgPT4gIXZhbHVlc1tpbmRleF0pO1xufVxuXG4vKipcbiAqIFJlc29sdmUgcGx1Z2luIGNvbmZpZyBvdmVyIGVudmlyb25tZW50IGRlZmF1bHRzLlxuICpcbiAqIFdoZW4gU01UUCBob3N0ICsgdXNlciArIHBhc3N3b3JkIGFyZSBhbGwgcHJlc2VudCwgcmV0dXJucyBgbW9kZTpcbiAqIFwic210cFwiYCBmb3IgcmVhbCBkZWxpdmVyeSAoYW5kIHRocm93cyBpZiBubyBzZW5kZXIgc291cmNlIC0gZG9tYWluLFxuICogZnJvbSwgb3Igc3lzdGVtRnJvbSAtIGlzIGNvbmZpZ3VyZWQsIHNpbmNlIFNNVFAgY2FuJ3QgZGVyaXZlIG9uZSBmcm9tXG4gKiBub3RoaW5nOyBgZG9tYWluYCBhbG9uZSBpcyB0aGUgaW50ZW5kZWQgbWluaW11bSkuXG4gKiBXaGVuIGFsbCB0aHJlZSBhcmUgYWJzZW50IGFuZCBgRU1BSUxfT1VUQk9YX01PREVgIGlzIGVuYWJsZWQsIHJldHVybnNcbiAqIGBtb2RlOiBcImZpbGVcImAgc28gdGhlIHJ1bnRpbWUgd3JpdGVzIG1lc3NhZ2VzIHRvIHRoZSBvdXRib3ggZGlyZWN0b3J5XG4gKiBmb3IgbG9jYWwgdGVzdGluZzsgaW4gdGhhdCBtb2RlIGEgc2VuZGVyIHNvdXJjZSBpcyBvcHRpb25hbCAodGhlXG4gKiBvdXRib3ggZmFsbHMgYmFjayB0byB0aGUgT0JPIHVzZXIncyBvd24gYWRkcmVzcykuIFBhcnRpYWwgU01UUFxuICogY29uZmlndXJhdGlvbiBvciBhIHNlbmQgd2l0aCBubyBjcmVkZW50aWFscyBhbmQgbm8gb3V0Ym94IG9wdC1pblxuICogdGhyb3dzLlxuICpcbiAqIFRoZSBzZW5kZXIgYWxsb3ctbGlzdCBpcyByZXNvbHZlZCBoZXJlIHRvbzogdW5kZXIgdGhlIGRlZmF1bHRcbiAqIGBcImFsbG93bGlzdFwiYCBwb2xpY3kgYW4gZW1wdHkgbGlzdCBpcyBmaWxsZWQgaW4gZnJvbSB0aGUgc2VuZGVyIHNvdXJjZSxcbiAqIHNvIGEgZGVwbG95bWVudCB0aGF0IG9ubHkgc2V0cyBgRU1BSUxfRE9NQUlOYCBzdGlsbCByZWplY3RzIGEgYEZyb21gIG9uXG4gKiBhbnkgb3RoZXIgZG9tYWluLiBTZWUge0BsaW5rIFNlbmRlclBvbGljeX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRW1haWxDb25maWcoY29uZmlnOiBFbWFpbFBsdWdpbkNvbmZpZyA9IHt9KTogUmVzb2x2ZWRFbWFpbENvbmZpZyB7XG4gIGNvbnN0IHNtdHAgPSBjb25maWcuc210cCA/PyB7fTtcbiAgY29uc3QgaG9zdCA9IGNvbmZpZ1V0aWxzLnN0cmluZyhzbXRwLmhvc3QsIFwiU01UUF9IT1NUXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKTtcbiAgY29uc3QgdXNlciA9IGNvbmZpZ1V0aWxzLnN0cmluZyhzbXRwLnVzZXIsIFwiU01UUF9VU0VSXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKTtcbiAgY29uc3QgcGFzcyA9IGNvbmZpZ1V0aWxzLnN0cmluZyhzbXRwLnBhc3N3b3JkLCBcIlNNVFBfUEFTU1dPUkRcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBjb25zdCBkb21haW4gPSBjb25maWdVdGlscy5zdHJpbmcoY29uZmlnLmRvbWFpbiwgXCJFTUFJTF9ET01BSU5cIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBjb25zdCBmcm9tID0gY29uZmlnVXRpbHMuc3RyaW5nKGNvbmZpZy5mcm9tLCBcIkVNQUlMX0ZST01cIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICBjb25zdCBzeXN0ZW1Gcm9tID0gY29uZmlnVXRpbHMuc3RyaW5nKFxuICAgIGNvbmZpZy5zeXN0ZW1Gcm9tLFxuICAgIFwiRU1BSUxfU1lTVEVNX0ZST01cIixcbiAgICBjb25maWdVdGlscy5FTlZfT05MWSxcbiAgKTtcbiAgY29uc3Qgc2VuZGVyUG9saWN5ID0gcmVzb2x2ZVNlbmRlclBvbGljeShjb25maWcuc2VuZGVyUG9saWN5KTtcbiAgY29uc3QgY29uZmlndXJlZFNlbmRlcnMgPSBwYXJzZUFsbG93ZWRTZW5kZXJzKFxuICAgIGNvbmZpZy5hbGxvd2VkU2VuZGVycyA/PyBjb25maWdVdGlscy50ZXh0KFwiRU1BSUxfQUxMT1dFRF9TRU5ERVJTXCIsIGNvbmZpZ1V0aWxzLkVOVl9PTkxZKSxcbiAgKTtcbiAgY29uc3QgYWxsb3dlZFNlbmRlcnMgPVxuICAgIGNvbmZpZ3VyZWRTZW5kZXJzLmxlbmd0aCA+IDAgfHwgc2VuZGVyUG9saWN5ID09PSBcInVucmVzdHJpY3RlZFwiXG4gICAgICA/IGNvbmZpZ3VyZWRTZW5kZXJzXG4gICAgICA6IGltcGxpZWRTZW5kZXJQYXR0ZXJucyh7IGRvbWFpbiwgZnJvbSwgc3lzdGVtRnJvbSB9KTtcbiAgY29uc3Qgc2VuZGVyOiBSZXNvbHZlZFNlbmRlciA9IHtcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXCJkb21haW5cIiwgZG9tYWluKSxcbiAgICAuLi5vYmplY3Qub3B0aW9uYWwoXCJmcm9tXCIsIGZyb20pLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcInN5c3RlbUZyb21cIiwgc3lzdGVtRnJvbSksXG4gICAgYWxsb3dlZFNlbmRlcnMsXG4gICAgc2VuZGVyUG9saWN5LFxuICAgIGJyYW5kOiBjb25maWcuYnJhbmQgPz8gZGVmYXVsdEVtYWlsQnJhbmQsXG4gIH07XG5cbiAgY29uc3QgaGFzQWxsU210cCA9IEJvb2xlYW4oaG9zdCAmJiB1c2VyICYmIHBhc3MpO1xuICBjb25zdCBoYXNBbnlTbXRwID0gQm9vbGVhbihob3N0IHx8IHVzZXIgfHwgcGFzcyk7XG5cbiAgaWYgKGhhc0FueVNtdHAgJiYgIWhhc0FsbFNtdHApIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IubWlzc2luZ0VudlZhcnMobWlzc2luZ1NtdHBGaWVsZHMoaG9zdCwgdXNlciwgcGFzcykpO1xuICB9XG5cbiAgaWYgKGhhc0FsbFNtdHApIHtcbiAgICBpZiAoIWRvbWFpbiAmJiAhZnJvbSAmJiAhc3lzdGVtRnJvbSkge1xuICAgICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICAgIFwiRW1haWwgc2VuZGVyIHNvdXJjZVwiLFxuICAgICAgICBcIlNldCBFTUFJTF9ET01BSU4gdG8gZGVyaXZlIDx1c2VyLWxvY2FsLXBhcnQ+QDxkb21haW4+IChhbmQgbm8tcmVwbHlAPGRvbWFpbj4gZm9yIHN5c3RlbSBtYWlsKSwgb3IgRU1BSUxfRlJPTSBmb3IgYSBmaXhlZCBhZGRyZXNzLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcG9ydCA9IGNvbmZpZ1V0aWxzLnBvcnQoc210cC5wb3J0LCBcIlNNVFBfUE9SVFwiLCBERUZBVUxUX1NNVFBfUE9SVCwgY29uZmlnVXRpbHMuRU5WX09OTFkpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcInNtdHBcIixcbiAgICAgIGhvc3Q6IGhvc3QhLFxuICAgICAgcG9ydCxcbiAgICAgIHNlY3VyZTogcmVzb2x2ZVNlY3VyZShzbXRwLnNlY3VyZSwgcG9ydCksXG4gICAgICBhdXRoOiB7IHVzZXI6IHVzZXIhLCBwYXNzOiBwYXNzISB9LFxuICAgICAgLi4uc2VuZGVyLFxuICAgIH07XG4gIH1cblxuICBpZiAoIWlzT3V0Ym94TW9kZUVuYWJsZWQoKSkge1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgIFwiU01UUFwiLFxuICAgICAgYFNldCAke1NNVFBfUkVRVUlSRURfRklFTERTLmpvaW4oXCIsIFwiKX0sIG9yIEVNQUlMX09VVEJPWF9NT0RFPTEgdG8gd3JpdGUgbWVzc2FnZXMgdG8gYSBsb2NhbCBvdXRib3ggaW5zdGVhZC5gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBvdXREaXIgPSByZXNvbHZlKFxuICAgIGNvbmZpZ1V0aWxzLnN0cmluZyhjb25maWcub3V0RGlyLCBcIkVNQUlMX09VVEJPWF9ESVJcIiwgY29uZmlnVXRpbHMuRU5WX09OTFkpID8/XG4gICAgICByZXNvbHZlKHByb2Nlc3MuY3dkKCksIFwidG1wXCIpLFxuICApO1xuICByZXR1cm4geyBtb2RlOiBcImZpbGVcIiwgb3V0RGlyLCAuLi5zZW5kZXIgfTtcbn1cbiJdfQ==
|
package/lib/src/email-html.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/** Node rendering adapters for the shared React Email document. @module */
|
|
2
|
-
import {
|
|
2
|
+
import { stringUtils } from "@dbx-tools/shared-core";
|
|
3
3
|
import { type EmailDocumentProps } from "@dbx-tools/shared-email-template";
|
|
4
4
|
/** Escape HTML-significant characters (re-exported from shared-core). */
|
|
5
|
-
export declare const escapeHtml: typeof
|
|
5
|
+
export declare const escapeHtml: typeof stringUtils.escapeHtml;
|
|
6
6
|
/** Options accepted by the shared React Email document. */
|
|
7
7
|
export type EmailHtmlOptions = EmailDocumentProps;
|
|
8
8
|
/** Render a complete responsive React Email document. */
|
package/lib/src/email-html.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/** Node rendering adapters for the shared React Email document. @module */
|
|
2
|
-
import {
|
|
2
|
+
import { stringUtils } from "@dbx-tools/shared-core";
|
|
3
3
|
import { EmailDocument } from "@dbx-tools/shared-email-template";
|
|
4
4
|
import { render } from "@react-email/render";
|
|
5
5
|
import { createElement } from "react";
|
|
6
6
|
/** Escape HTML-significant characters (re-exported from shared-core). */
|
|
7
|
-
export const escapeHtml =
|
|
7
|
+
export const escapeHtml = stringUtils.escapeHtml;
|
|
8
8
|
/** Render a complete responsive React Email document. */
|
|
9
9
|
export async function renderEmailHtml(options) {
|
|
10
10
|
return render(createElement(EmailDocument, options), { pretty: true });
|
|
@@ -22,4 +22,4 @@ export async function renderEmail(options) {
|
|
|
22
22
|
]);
|
|
23
23
|
return { html, text };
|
|
24
24
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbWFpbC1odG1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRTtBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBMkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUV0Qyx5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7QUFLakQseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLE9BQXlCO0lBQzdELE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLE9BQXlCO0lBQzdELE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsZ0ZBQWdGO0FBQ2hGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUMvQixPQUF5QjtJQUV6QixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUNyQyxDQUFDLENBQUM7SUFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogTm9kZSByZW5kZXJpbmcgYWRhcHRlcnMgZm9yIHRoZSBzaGFyZWQgUmVhY3QgRW1haWwgZG9jdW1lbnQuIEBtb2R1bGUgKi9cbmltcG9ydCB7IHN0cmluZ1V0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IEVtYWlsRG9jdW1lbnQsIHR5cGUgRW1haWxEb2N1bWVudFByb3BzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsLXRlbXBsYXRlXCI7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwiQHJlYWN0LWVtYWlsL3JlbmRlclwiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuXG4vKiogRXNjYXBlIEhUTUwtc2lnbmlmaWNhbnQgY2hhcmFjdGVycyAocmUtZXhwb3J0ZWQgZnJvbSBzaGFyZWQtY29yZSkuICovXG5leHBvcnQgY29uc3QgZXNjYXBlSHRtbCA9IHN0cmluZ1V0aWxzLmVzY2FwZUh0bWw7XG5cbi8qKiBPcHRpb25zIGFjY2VwdGVkIGJ5IHRoZSBzaGFyZWQgUmVhY3QgRW1haWwgZG9jdW1lbnQuICovXG5leHBvcnQgdHlwZSBFbWFpbEh0bWxPcHRpb25zID0gRW1haWxEb2N1bWVudFByb3BzO1xuXG4vKiogUmVuZGVyIGEgY29tcGxldGUgcmVzcG9uc2l2ZSBSZWFjdCBFbWFpbCBkb2N1bWVudC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW5kZXJFbWFpbEh0bWwob3B0aW9uczogRW1haWxIdG1sT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZW5kZXIoY3JlYXRlRWxlbWVudChFbWFpbERvY3VtZW50LCBvcHRpb25zKSwgeyBwcmV0dHk6IHRydWUgfSk7XG59XG5cbi8qKiBSZW5kZXIgdGhlIHNhbWUgUmVhY3QgRW1haWwgZG9jdW1lbnQgYXMgaXRzIHBsYWluLXRleHQgYWx0ZXJuYXRpdmUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuZGVyRW1haWxUZXh0KG9wdGlvbnM6IEVtYWlsSHRtbE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcmVuZGVyKGNyZWF0ZUVsZW1lbnQoRW1haWxEb2N1bWVudCwgb3B0aW9ucyksIHsgcGxhaW5UZXh0OiB0cnVlIH0pO1xufVxuXG4vKiogUmVuZGVyIGJvdGggTUlNRSBhbHRlcm5hdGl2ZXMgZnJvbSBvbmUgc2hhcmVkIFJlYWN0IEVtYWlsIGNvbXBvbmVudCB0cmVlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlckVtYWlsKFxuICBvcHRpb25zOiBFbWFpbEh0bWxPcHRpb25zLFxuKTogUHJvbWlzZTx7IGh0bWw6IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+IHtcbiAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoRW1haWxEb2N1bWVudCwgb3B0aW9ucyk7XG4gIGNvbnN0IFtodG1sLCB0ZXh0XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICByZW5kZXIoZWxlbWVudCwgeyBwcmV0dHk6IHRydWUgfSksXG4gICAgcmVuZGVyKGVsZW1lbnQsIHsgcGxhaW5UZXh0OiB0cnVlIH0pLFxuICBdKTtcbiAgcmV0dXJuIHsgaHRtbCwgdGV4dCB9O1xufVxuIl19
|
package/lib/src/outbox.js
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
16
16
|
import { join, resolve } from "node:path";
|
|
17
|
-
import {
|
|
17
|
+
import { stringUtils } from "@dbx-tools/shared-core";
|
|
18
18
|
import { renderEmailHtml } from "./email-html.js";
|
|
19
19
|
/**
|
|
20
20
|
* Longest subject slug kept in an outbox file name, leaving room for the
|
|
@@ -23,7 +23,7 @@ import { renderEmailHtml } from "./email-html.js";
|
|
|
23
23
|
const SUBJECT_SLUG_MAX_LENGTH = 48;
|
|
24
24
|
/** Filesystem-safe slug of the subject for the file name. */
|
|
25
25
|
function subjectSlug(subject) {
|
|
26
|
-
return
|
|
26
|
+
return stringUtils.toSlugWithOptions({ maxLength: SUBJECT_SLUG_MAX_LENGTH }, subject) || "email";
|
|
27
27
|
}
|
|
28
28
|
/** The envelope rows shown above the body in the preview file. */
|
|
29
29
|
function headerRows(message, from) {
|
|
@@ -59,4 +59,4 @@ export async function writeOutboxEmail(message, from, dir, brand, presentation)
|
|
|
59
59
|
await writeFile(path, html, "utf8");
|
|
60
60
|
return path;
|
|
61
61
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym94LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL291dGJveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHckQsT0FBTyxFQUFFLGVBQWUsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RTs7O0dBR0c7QUFDSCxNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUVuQyw2REFBNkQ7QUFDN0QsU0FBUyxXQUFXLENBQUMsT0FBZTtJQUNsQyxPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQztBQUNuRyxDQUFDO0FBRUQsa0VBQWtFO0FBQ2xFLFNBQVMsVUFBVSxDQUFDLE9BQXFCLEVBQUUsSUFBWTtJQUNyRCxNQUFNLElBQUksR0FBaUQ7UUFDekQsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQ2QsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ25DLENBQUM7SUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQTJCLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLE9BQXFCLEVBQ3JCLElBQVksRUFDWixHQUFXLEVBQ1gsS0FBa0IsRUFDbEIsWUFBNEQ7SUFFNUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sSUFBSSxHQUFHLE1BQU0sZUFBZSxDQUFDO1FBQ2pDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7UUFDbEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLE1BQU0sRUFBRSxvRkFBb0Y7UUFDNUYsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakYsR0FBRyxDQUFDLFlBQVksRUFBRSxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNsRixDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlsZXN5c3RlbSBvdXRib3ggZm9yIHRoZSBuby1TTVRQIGZhbGxiYWNrOiB7QGxpbmsgd3JpdGVPdXRib3hFbWFpbH1cbiAqIHBlcnNpc3RzIG9uZSBkcmFmdGVkIG1lc3NhZ2UgYXMgYSBzdGFuZGFsb25lIEhUTUwgZmlsZSB1bmRlclxuICogYDxkaXI+Lzxmcm9tPi88dGltZXN0YW1wPi08c3ViamVjdC1zbHVnPi5odG1sYCBpbnN0ZWFkIG9mIHNlbmRpbmcgaXQuXG4gKiBUaGlzIGxldHMgdGhlIGFwcHJvdmFsIGZsb3cgYW5kIGFnZW50cyBiZSBleGVyY2lzZWQgZW5kLXRvLWVuZCB3aXRoXG4gKiB6ZXJvIGVtYWlsIGNvbmZpZ3VyYXRpb24gLSBvcGVuIHRoZSBmaWxlIGluIGEgYnJvd3NlciB0byBzZWUgZXhhY3RseVxuICogd2hhdCB3b3VsZCBoYXZlIGdvbmUgb3V0ICh0aGUgSFRNTCBtYXRjaGVzIHRoZSBTTVRQIHNlbmQsIGhlYWRlcnNcbiAqIHRhYmxlIGFzaWRlKS4gVGhlIGJvZHkgaXMgcmVuZGVyZWQgKyBzdHlsZS1pbmxpbmVkIGJ5XG4gKiB7QGxpbmsgcmVuZGVyRW1haWxIdG1sfS4gQXR0YWNobWVudHMgYXJlIGxpc3RlZCBieSBmaWxlbmFtZSBpbiB0aGVcbiAqIGhlYWRlciB0YWJsZSBidXQgbm90IHdyaXR0ZW4gdG8gZGlzayAtIHRoZSBvdXRib3ggcHJldmlld3MgdGhlXG4gKiBlbnZlbG9wZSwgaXQgZG9lc24ndCByZXByb2R1Y2UgdGhlIHdpcmUgcGF5bG9hZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgc3RyaW5nVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBFbWFpbE1lc3NhZ2UgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZW1haWxcIjtcbmltcG9ydCB0eXBlIHsgRW1haWxCcmFuZCB9IGZyb20gXCIuL2JyYW5kLnRzXCI7XG5pbXBvcnQgeyByZW5kZXJFbWFpbEh0bWwsIHR5cGUgRW1haWxIdG1sT3B0aW9ucyB9IGZyb20gXCIuL2VtYWlsLWh0bWwudHNcIjtcblxuLyoqXG4gKiBMb25nZXN0IHN1YmplY3Qgc2x1ZyBrZXB0IGluIGFuIG91dGJveCBmaWxlIG5hbWUsIGxlYXZpbmcgcm9vbSBmb3IgdGhlXG4gKiB0aW1lc3RhbXAgcHJlZml4IGFuZCBleHRlbnNpb24gaW5zaWRlIGNvbW1vbiBmaWxlc3lzdGVtIG5hbWUgbGltaXRzLlxuICovXG5jb25zdCBTVUJKRUNUX1NMVUdfTUFYX0xFTkdUSCA9IDQ4O1xuXG4vKiogRmlsZXN5c3RlbS1zYWZlIHNsdWcgb2YgdGhlIHN1YmplY3QgZm9yIHRoZSBmaWxlIG5hbWUuICovXG5mdW5jdGlvbiBzdWJqZWN0U2x1ZyhzdWJqZWN0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5nVXRpbHMudG9TbHVnV2l0aE9wdGlvbnMoeyBtYXhMZW5ndGg6IFNVQkpFQ1RfU0xVR19NQVhfTEVOR1RIIH0sIHN1YmplY3QpIHx8IFwiZW1haWxcIjtcbn1cblxuLyoqIFRoZSBlbnZlbG9wZSByb3dzIHNob3duIGFib3ZlIHRoZSBib2R5IGluIHRoZSBwcmV2aWV3IGZpbGUuICovXG5mdW5jdGlvbiBoZWFkZXJSb3dzKG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSwgZnJvbTogc3RyaW5nKTogQXJyYXk8cmVhZG9ubHkgW3N0cmluZywgc3RyaW5nXT4ge1xuICBjb25zdCByb3dzOiBBcnJheTxyZWFkb25seSBbc3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWRdPiA9IFtcbiAgICBbXCJGcm9tXCIsIGZyb21dLFxuICAgIFtcIlRvXCIsIG1lc3NhZ2UudG8uam9pbihcIiwgXCIpXSxcbiAgICBbXCJDY1wiLCBtZXNzYWdlLmNjPy5qb2luKFwiLCBcIildLFxuICAgIFtcIkJjY1wiLCBtZXNzYWdlLmJjYz8uam9pbihcIiwgXCIpXSxcbiAgICBbXCJTdWJqZWN0XCIsIG1lc3NhZ2Uuc3ViamVjdF0sXG4gICAgW1wiQXR0YWNobWVudHNcIiwgbWVzc2FnZS5hdHRhY2htZW50cz8ubWFwKChhdHQpID0+IGF0dC5maWxlbmFtZSkuam9pbihcIiwgXCIpXSxcbiAgICBbXCJEYXRlXCIsIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKV0sXG4gIF07XG4gIHJldHVybiByb3dzLmZpbHRlcigocm93KTogcm93IGlzIFtzdHJpbmcsIHN0cmluZ10gPT4gQm9vbGVhbihyb3dbMV0pKTtcbn1cblxuLyoqXG4gKiBXcml0ZSBvbmUgbWVzc2FnZSBhcyBIVE1MIHVuZGVyIGA8ZGlyPi88ZnJvbT4vYCBhbmQgcmV0dXJuIHRoZVxuICogYWJzb2x1dGUgcGF0aC4gVGhlIHBlci1zZW5kZXIgZm9sZGVyIG1pcnJvcnMgdGhlIFNNVFAgYEZyb21gLCBzbyB0ZXN0XG4gKiBvdXRwdXQgZ3JvdXBzIGJ5IHdobyB0aGUgbWVzc2FnZSB3b3VsZCBoYXZlIGJlZW4gc2VudCBhcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlT3V0Ym94RW1haWwoXG4gIG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSxcbiAgZnJvbTogc3RyaW5nLFxuICBkaXI6IHN0cmluZyxcbiAgYnJhbmQ/OiBFbWFpbEJyYW5kLFxuICBwcmVzZW50YXRpb24/OiBQaWNrPEVtYWlsSHRtbE9wdGlvbnMsIFwiaGVhZGluZ1wiIHwgXCJwcmV2aWV3XCI+LFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZm9sZGVyID0gcmVzb2x2ZShkaXIsIGZyb20pO1xuICBhd2FpdCBta2Rpcihmb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBwYXRoID0gam9pbihmb2xkZXIsIGAke0RhdGUubm93KCl9LSR7c3ViamVjdFNsdWcobWVzc2FnZS5zdWJqZWN0KX0uaHRtbGApO1xuICBjb25zdCBodG1sID0gYXdhaXQgcmVuZGVyRW1haWxIdG1sKHtcbiAgICBzdWJqZWN0OiBtZXNzYWdlLnN1YmplY3QsXG4gICAgaGVhZGVyczogaGVhZGVyUm93cyhtZXNzYWdlLCBmcm9tKSxcbiAgICBib2R5OiBtZXNzYWdlLmJvZHksXG4gICAgZm9vdGVyOiBcIkxvY2FsIG91dGJveCBwcmV2aWV3IC0gd3JpdHRlbiB0byBkaXNrLCBub3Qgc2VudCAobm8gU01UUCBjcmVkZW50aWFscyBjb25maWd1cmVkKS5cIixcbiAgICAuLi4oYnJhbmQgPyB7IGJyYW5kIH0gOiB7fSksXG4gICAgLi4uKHByZXNlbnRhdGlvbj8uaGVhZGluZyAhPT0gdW5kZWZpbmVkID8geyBoZWFkaW5nOiBwcmVzZW50YXRpb24uaGVhZGluZyB9IDoge30pLFxuICAgIC4uLihwcmVzZW50YXRpb24/LnByZXZpZXcgIT09IHVuZGVmaW5lZCA/IHsgcHJldmlldzogcHJlc2VudGF0aW9uLnByZXZpZXcgfSA6IHt9KSxcbiAgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZShwYXRoLCBodG1sLCBcInV0ZjhcIik7XG4gIHJldHVybiBwYXRoO1xufVxuIl19
|
package/lib/src/plugin.d.ts
CHANGED
|
@@ -22,8 +22,9 @@
|
|
|
22
22
|
*
|
|
23
23
|
* @module
|
|
24
24
|
*/
|
|
25
|
-
import {
|
|
26
|
-
import { type
|
|
25
|
+
import { type IAppRouter } from "@databricks/appkit";
|
|
26
|
+
import { type ToolRegistry } from "@databricks/appkit/beta";
|
|
27
|
+
import { ToolRegistryPlugin } from "@dbx-tools/appkit";
|
|
27
28
|
import { type EmailMessage, type EmailResult, type EmailSenders } from "@dbx-tools/shared-email";
|
|
28
29
|
import { type EmailPluginConfig } from "./config.ts";
|
|
29
30
|
import { type SendEmailOptions } from "./transport.ts";
|
|
@@ -34,12 +35,12 @@ import { type SendEmailOptions } from "./transport.ts";
|
|
|
34
35
|
* @example
|
|
35
36
|
* ```ts
|
|
36
37
|
* import { createApp, server } from "@databricks/appkit";
|
|
37
|
-
* import {
|
|
38
|
+
* import { email } from "@dbx-tools/email";
|
|
38
39
|
*
|
|
39
40
|
* await createApp({
|
|
40
41
|
* plugins: [
|
|
41
42
|
* server(),
|
|
42
|
-
*
|
|
43
|
+
* email({
|
|
43
44
|
* smtp: { host: "smtp.example.com", user: "apikey", password: process.env.SMTP_KEY },
|
|
44
45
|
* domain: "mail.example.com",
|
|
45
46
|
* }),
|
|
@@ -47,7 +48,7 @@ import { type SendEmailOptions } from "./transport.ts";
|
|
|
47
48
|
* });
|
|
48
49
|
* ```
|
|
49
50
|
*/
|
|
50
|
-
export declare class EmailPlugin extends
|
|
51
|
+
export declare class EmailPlugin extends ToolRegistryPlugin<EmailPluginConfig> {
|
|
51
52
|
static manifest: {
|
|
52
53
|
name: "email";
|
|
53
54
|
displayName: string;
|
|
@@ -72,7 +73,7 @@ export declare class EmailPlugin extends Plugin<EmailPluginConfig> implements To
|
|
|
72
73
|
* against the same schema first, but re-parsing is what gives the body typed
|
|
73
74
|
* arguments instead of `unknown`.
|
|
74
75
|
*/
|
|
75
|
-
|
|
76
|
+
protected readonly toolRegistry: ToolRegistry;
|
|
76
77
|
/**
|
|
77
78
|
* Prime the shared runtime from this plugin's config (over env), route the
|
|
78
79
|
* tools' sends through this plugin's interceptor chain, and log the
|
|
@@ -129,14 +130,6 @@ export declare class EmailPlugin extends Plugin<EmailPluginConfig> implements To
|
|
|
129
130
|
*/
|
|
130
131
|
listSenders: () => Promise<EmailSenders>;
|
|
131
132
|
};
|
|
132
|
-
/** AppKit `ToolProvider`: the tool definitions offered to an agent. */
|
|
133
|
-
getAgentTools(): AgentToolDefinition[];
|
|
134
|
-
/**
|
|
135
|
-
* AppKit `ToolProvider`: run one tool call. Arguments are validated against
|
|
136
|
-
* the tool's schema first, and a validation failure comes back as an
|
|
137
|
-
* LLM-friendly string so the model can correct itself on the next turn.
|
|
138
|
-
*/
|
|
139
|
-
executeAgentTool(name: string, args: unknown, signal?: AbortSignal): Promise<unknown>;
|
|
140
133
|
/**
|
|
141
134
|
* Send one message, resolving the sender for the caller in scope when
|
|
142
135
|
* `from` is not pinned. The interceptor chain is applied inside
|
|
@@ -163,15 +156,15 @@ export declare class EmailPlugin extends Plugin<EmailPluginConfig> implements To
|
|
|
163
156
|
* @example
|
|
164
157
|
* ```ts
|
|
165
158
|
* import { createApp, server } from "@databricks/appkit";
|
|
166
|
-
* import {
|
|
159
|
+
* import { defaultEmailBrand, email } from "@dbx-tools/email";
|
|
167
160
|
*
|
|
168
161
|
* await createApp({
|
|
169
162
|
* plugins: [
|
|
170
163
|
* server(),
|
|
171
|
-
*
|
|
164
|
+
* email({
|
|
172
165
|
* domain: "mail.example.com",
|
|
173
166
|
* allowedSenders: ["*@mail.example.com"],
|
|
174
|
-
* brand:
|
|
167
|
+
* brand: defaultEmailBrand,
|
|
175
168
|
* }),
|
|
176
169
|
* ],
|
|
177
170
|
* });
|