@dbx-tools/email 0.6.46 → 0.6.49
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 +43 -25
- package/index.ts +1 -2
- package/lib/index.d.ts +1 -2
- package/lib/index.js +2 -2
- package/lib/src/brand.d.ts +5 -42
- package/lib/src/brand.js +5 -39
- package/lib/src/config.d.ts +6 -7
- package/lib/src/config.js +25 -20
- package/lib/src/defaults.d.ts +1 -1
- package/lib/src/defaults.js +2 -2
- package/lib/src/email-html.d.ts +14 -49
- package/lib/src/email-html.js +20 -141
- package/lib/src/markdown.d.ts +4 -22
- package/lib/src/markdown.js +11 -79
- package/lib/src/outbox.js +2 -2
- package/lib/src/plugin.d.ts +14 -0
- package/lib/src/plugin.js +19 -3
- package/lib/src/tool.d.ts +1 -1
- package/lib/src/tool.js +5 -7
- package/lib/src/transport.d.ts +2 -2
- package/lib/src/transport.js +30 -36
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -6
- package/src/brand.ts +9 -59
- package/src/config.ts +29 -25
- package/src/defaults.ts +1 -1
- package/src/email-html.ts +23 -164
- package/src/markdown.ts +12 -92
- package/src/outbox.ts +1 -1
- package/src/plugin.ts +18 -2
- package/src/tool.ts +4 -6
- package/src/transport.ts +28 -35
- package/src/juice.d.ts +0 -17
package/lib/src/plugin.js
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { AuthenticationError, ConfigurationError, ConnectionError, ExecutionError, getExecutionContext, Plugin, toPlugin, ValidationError, } from "@databricks/appkit";
|
|
26
26
|
import { defineTool, executeFromRegistry, toolsFromRegistry, } from "@databricks/appkit/beta";
|
|
27
|
-
import { log } from "@dbx-tools/shared-core";
|
|
27
|
+
import { log, string, token } from "@dbx-tools/shared-core";
|
|
28
28
|
import { email as emailWire, } from "@dbx-tools/shared-email";
|
|
29
29
|
import { EMAIL_CONFIG_SCHEMA } from "./config.js";
|
|
30
30
|
import { EMAIL_SENDERS_SETTINGS, EMAIL_VERIFY_SETTINGS } from "./defaults.js";
|
|
@@ -154,6 +154,20 @@ export class EmailPlugin extends Plugin {
|
|
|
154
154
|
* plugin base path, i.e. `GET /api/email/senders`. Runs in the OBO
|
|
155
155
|
* user scope so domain wildcards resolve against the caller's own
|
|
156
156
|
* local part.
|
|
157
|
+
*
|
|
158
|
+
* OBO is used only WHEN the request can support it. `asUser(req)` throws
|
|
159
|
+
* `AuthenticationError` outside `NODE_ENV=development` if the request carries
|
|
160
|
+
* no forwarded OBO token, and AppKit does not catch a rejection raised inside
|
|
161
|
+
* a handler - so unconditionally wrapping this route takes the process down
|
|
162
|
+
* for a caller that authenticated some other way (a `@dbx-tools/cli-tunnel`
|
|
163
|
+
* OTP session, a health probe, a local `curl`). The user context is only ever
|
|
164
|
+
* an ENRICHMENT here: without it, wildcard senders simply expand against no
|
|
165
|
+
* local part. Degrading to the service context therefore answers correctly
|
|
166
|
+
* instead of failing, and a front-door request is unchanged.
|
|
167
|
+
*
|
|
168
|
+
* This is the same rule `@dbx-tools/appkit`'s `identity` module applies in
|
|
169
|
+
* `"auto"` mode; the header check is inlined rather than taking a dependency
|
|
170
|
+
* on that package for one predicate.
|
|
157
171
|
*/
|
|
158
172
|
injectRoutes(router) {
|
|
159
173
|
this.route(router, {
|
|
@@ -161,7 +175,9 @@ export class EmailPlugin extends Plugin {
|
|
|
161
175
|
method: "get",
|
|
162
176
|
path: SENDERS_ROUTE,
|
|
163
177
|
handler: async (req, res) => {
|
|
164
|
-
const
|
|
178
|
+
const oboToken = string.trimToNull(req.header(token.ACCESS_TOKEN_HEADER));
|
|
179
|
+
const scoped = oboToken === null ? this : this.asUser(req);
|
|
180
|
+
const result = await scoped.executeListSenders();
|
|
165
181
|
if (!result.ok) {
|
|
166
182
|
res.status(result.status).json({ error: result.message });
|
|
167
183
|
return;
|
|
@@ -291,4 +307,4 @@ function unwrap(result) {
|
|
|
291
307
|
* ```
|
|
292
308
|
*/
|
|
293
309
|
export const email = toPlugin(EmailPlugin);
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixNQUFNLEVBQ04sUUFBUSxFQUNSLGVBQWUsR0FLaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixpQkFBaUIsR0FJbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0MsT0FBTyxFQUNMLEtBQUssSUFBSSxTQUFTLEdBSW5CLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLG1CQUFtQixFQUEwQixNQUFNLGFBQWEsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUNMLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGdCQUFnQixFQUNoQixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QiwrRUFBK0U7QUFDL0UsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDO0FBRWpDLDRFQUE0RTtBQUM1RSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFFekIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUVuQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztB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QUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVELElBQUksTUFBTSxLQUFLLEdBQUc7UUFBRSxPQUFPLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELE9BQU8sSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsTUFBTSxDQUFJLE1BQTBCO0lBQzNDLElBQUksTUFBTSxDQUFDLEVBQUU7UUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDbEMsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwS2l0IHBsdWdpbiAocmVnaXN0ZXJlZCBuYW1lOiBgZW1haWxgKSB0aGF0IG93bnMgdGhlIFNNVFAgcnVudGltZVxuICogZm9yIG91dGJvdW5kIG1haWwuIFJlZ2lzdGVyaW5nIGl0IHZhbGlkYXRlcyB0aGUgU01UUCBjb25maWd1cmF0aW9uXG4gKiBhbmQgdmVyaWZpZXMgY29ubmVjdGl2aXR5IGF0IHN0YXJ0dXAsIHNvIGEgYmFkIGhvc3QgLyBjcmVkZW50aWFsXG4gKiBzdXJmYWNlcyBpbiB0aGUgYm9vdCBsb2dzIGluc3RlYWQgb2Ygb24gdGhlIGZpcnN0IGFwcHJvdmVkIHNlbmQsIGFuZFxuICogaW5zdGFsbHMgdGhpcyBwbHVnaW4ncyBgZXhlY3V0ZSgpYCBhcyB0aGUgcnVudGltZSdzIGV4ZWN1dG9yIHNvIGV2ZXJ5XG4gKiBzZW5kIHBpY2tzIHVwIEFwcEtpdCdzIHJldHJ5IC8gdGltZW91dCAvIHRlbGVtZXRyeSBjaGFpbi5cbiAqXG4gKiBUaGUgcGx1Z2luIGlzIGFsc28gYSBgVG9vbFByb3ZpZGVyYCwgc28gYW4gQXBwS2l0IGFnZW50IGNhbiByZWFjaCBhblxuICogYGVtYWlsLnNlbmRgIHRvb2wgZGlyZWN0bHk7IHRoZSB7QGxpbmsgZW1haWxUb29sfSBleHBvcnQgaXMgdGhlIHNhbWVcbiAqIGNhcGFiaWxpdHkgZm9yIGEgTWFzdHJhIGFnZW50LiBCb3RoIHNoYXJlIHRoZSB0cmFuc3BvcnQgcHJpbWVkIGhlcmUsXG4gKiBhbmQge0BsaW5rIHNlbmRFbWFpbH0gaXMgYXZhaWxhYmxlIHRvIG5vbi1hZ2VudCBjYWxsZXJzLlxuICpcbiAqIENvbmZpZ3VyYXRpb24gaXMgdGhlIG1hbmlmZXN0LXB1Ymxpc2hlZCB7QGxpbmsgRW1haWxQbHVnaW5Db25maWd9XG4gKiAoU01UUCBob3N0L3BvcnQvY3JlZGVudGlhbHMsIHNlbmRlciBkb21haW4gb3IgZXhwbGljaXQgYGZyb21gLCB0aGVcbiAqIHNlbmRlciBwb2xpY3ksIGFuZCBhbiBvcHRpb25hbCBgYWxsb3dlZFNlbmRlcnNgIHJlc3RyaWN0aW9uKSwgd2l0aFxuICogdW5wcmVmaXhlZCBgU01UUF8qYCAvIGBFTUFJTF8qYCBlbnZpcm9ubWVudCBmYWxsYmFja3MuXG4gKlxuICogVGhlIHBsdWdpbiBtb3VudHMgb25lIHJvdXRlIHVuZGVyIGl0cyBiYXNlIHBhdGggKGAvYXBpL2VtYWlsYCk6XG4gKiBgR0VUIC9zZW5kZXJzYCByZXR1cm5zIHRoZSBwZXJtaXR0ZWQgYEZyb21gIG9wdGlvbnMgZm9yIHRoZSBjYWxsaW5nXG4gKiB1c2VyLCBzbyBhIGNvbXBvc2UgVUkgY2FuIG9mZmVyIHRoZW0gaW4gYSBkcm9wZG93bi5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgQXV0aGVudGljYXRpb25FcnJvcixcbiAgQ29uZmlndXJhdGlvbkVycm9yLFxuICBDb25uZWN0aW9uRXJyb3IsXG4gIEV4ZWN1dGlvbkVycm9yLFxuICBnZXRFeGVjdXRpb25Db250ZXh0LFxuICBQbHVnaW4sXG4gIHRvUGx1Z2luLFxuICBWYWxpZGF0aW9uRXJyb3IsXG4gIHR5cGUgQXBwS2l0RXJyb3IsXG4gIHR5cGUgRXhlY3V0aW9uUmVzdWx0LFxuICB0eXBlIElBcHBSb3V0ZXIsXG4gIHR5cGUgUGx1Z2luTWFuaWZlc3QsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7XG4gIGRlZmluZVRvb2wsXG4gIGV4ZWN1dGVGcm9tUmVnaXN0cnksXG4gIHRvb2xzRnJvbVJlZ2lzdHJ5LFxuICB0eXBlIEFnZW50VG9vbERlZmluaXRpb24sXG4gIHR5cGUgVG9vbFByb3ZpZGVyLFxuICB0eXBlIFRvb2xSZWdpc3RyeSxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9iZXRhXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgZW1haWwgYXMgZW1haWxXaXJlLFxuICB0eXBlIEVtYWlsTWVzc2FnZSxcbiAgdHlwZSBFbWFpbFJlc3VsdCxcbiAgdHlwZSBFbWFpbFNlbmRlcnMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1lbWFpbFwiO1xuaW1wb3J0IHsgRU1BSUxfQ09ORklHX1NDSEVNQSwgdHlwZSBFbWFpbFBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgRU1BSUxfU0VOREVSU19TRVRUSU5HUywgRU1BSUxfVkVSSUZZX1NFVFRJTkdTIH0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcbmltcG9ydCB7IGlzU2VuZGVyQWxsb3dlZCwgbGlzdFNlbmRlck9wdGlvbnMsIHJlc29sdmVTZW5kZXJBZGRyZXNzIH0gZnJvbSBcIi4vc2VuZGVyLnRzXCI7XG5pbXBvcnQgeyBTRU5EX0VNQUlMX0RFU0NSSVBUSU9OIH0gZnJvbSBcIi4vdG9vbC50c1wiO1xuaW1wb3J0IHtcbiAgZ2V0RW1haWxSdW50aW1lLFxuICByZXNldEVtYWlsUnVudGltZSxcbiAgc2VuZEVtYWlsLFxuICBzZXRFbWFpbEV4ZWN1dG9yLFxuICB2ZXJpZnlFbWFpbFRyYW5zcG9ydCxcbn0gZnJvbSBcIi4vdHJhbnNwb3J0LnRzXCI7XG5cbi8qKiBNb3VudC1yZWxhdGl2ZSByb3V0ZSAodW5kZXIgYC9hcGkvZW1haWxgKSBmb3IgdGhlIHNlbmRlci1vcHRpb25zIGxvb2t1cC4gKi9cbmNvbnN0IFNFTkRFUlNfUk9VVEUgPSBcIi9zZW5kZXJzXCI7XG5cbi8qKiBSZWdpc3RyeSBrZXkgb2YgdGhlIGFnZW50IHRvb2wsIHdoaWNoIGFnZW50cyBhZGRyZXNzIGFzIGBlbWFpbC5zZW5kYC4gKi9cbmNvbnN0IFNFTkRfVE9PTCA9IFwic2VuZFwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZW1haWxcIik7XG5cbi8qKlxuICogQXBwS2l0IHBsdWdpbiB0aGF0IGNvbmZpZ3VyZXMgYW5kIHZlcmlmaWVzIHRoZSBTTVRQIHRyYW5zcG9ydCB1c2VkIGJ5XG4gKiB0aGUgYHNlbmRfZW1haWxgIHRvb2wsIGFuZCBleHBvc2VzIHNlbmRpbmcgYXMgYW4gQXBwS2l0IGFnZW50IHRvb2wuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IHBsdWdpbiBhcyBlbWFpbFBsdWdpbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2VtYWlsXCI7XG4gKlxuICogYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW1xuICogICAgIHNlcnZlcigpLFxuICogICAgIGVtYWlsUGx1Z2luLmVtYWlsKHtcbiAqICAgICAgIHNtdHA6IHsgaG9zdDogXCJzbXRwLmV4YW1wbGUuY29tXCIsIHVzZXI6IFwiYXBpa2V5XCIsIHBhc3N3b3JkOiBwcm9jZXNzLmVudi5TTVRQX0tFWSB9LFxuICogICAgICAgZG9tYWluOiBcIm1haWwuZXhhbXBsZS5jb21cIixcbiAqICAgICB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBFbWFpbFBsdWdpbiBleHRlbmRzIFBsdWdpbjxFbWFpbFBsdWdpbkNvbmZpZz4gaW1wbGVtZW50cyBUb29sUHJvdmlkZXIge1xuICBzdGF0aWMgbWFuaWZlc3QgPSB7XG4gICAgbmFtZTogXCJlbWFpbFwiLFxuICAgIGRpc3BsYXlOYW1lOiBcIkVtYWlsXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlNlbmRzIGFwcHJvdmFsLWdhdGVkIGVtYWlsIG92ZXIgU01UUCwgd2l0aCB0aGUgc2VuZGVyIGRlcml2ZWQgZnJvbSBcIiArXG4gICAgICBcInRoZSBvbi1iZWhhbGYtb2YgdXNlcidzIGFkZHJlc3Mgb24gYSBjb25maWd1cmVkIGRvbWFpbi5cIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIHJlc291cmNlczoge1xuICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgb3B0aW9uYWw6IFtdLFxuICAgIH0sXG4gICAgY29uZmlnOiB7IHNjaGVtYTogRU1BSUxfQ09ORklHX1NDSEVNQSB9LFxuICB9IHNhdGlzZmllcyBQbHVnaW5NYW5pZmVzdDxcImVtYWlsXCI+O1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbCB0aGlzIHBsdWdpbiBvZmZlcnMgdG8gYW4gQXBwS2l0IGFnZW50LlxuICAgKlxuICAgKiBOb3QgYGF1dG9Jbmhlcml0YWJsZWA6IGEgc2VuZCBpcyBpcnJldmVyc2libGUgYW5kIGxlYXZlcyB0aGUgd29ya3NwYWNlLFxuICAgKiBzbyBpdCBtdXN0IG9ubHkgYXBwZWFyIGluIGFuIGFnZW50IHRoYXQgYXNrZWQgZm9yIGl0IGFuZCBhY2NlcHRlZCB0aGVcbiAgICogc2VuZGVyIHBvbGljeSB0aGF0IGNvbWVzIHdpdGggaXQuXG4gICAqXG4gICAqIGBleGVjdXRlYCByZS1wYXJzZXMgaXRzIGFyZ3VtZW50cyB3aXRoIHRoZSBsb2NhbCBzY2hlbWE6IEFwcEtpdCB2YWxpZGF0ZXNcbiAgICogYWdhaW5zdCB0aGUgc2FtZSBzY2hlbWEgZmlyc3QsIGJ1dCByZS1wYXJzaW5nIGlzIHdoYXQgZ2l2ZXMgdGhlIGJvZHkgdHlwZWRcbiAgICogYXJndW1lbnRzIGluc3RlYWQgb2YgYHVua25vd25gLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0b29sczogVG9vbFJlZ2lzdHJ5ID0ge1xuICAgIFtTRU5EX1RPT0xdOiBkZWZpbmVUb29sKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBTRU5EX0VNQUlMX0RFU0NSSVBUSU9OLFxuICAgICAgc2NoZW1hOiBlbWFpbFdpcmUuZW1haWxNZXNzYWdlU2NoZW1hLFxuICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcIndyaXRlXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnNlbmQoZW1haWxXaXJlLmVtYWlsTWVzc2FnZVNjaGVtYS5wYXJzZShhcmdzKSwgdW5kZWZpbmVkLCBzaWduYWwpLFxuICAgIH0pLFxuICB9O1xuXG4gIC8qKlxuICAgKiBQcmltZSB0aGUgc2hhcmVkIHJ1bnRpbWUgZnJvbSB0aGlzIHBsdWdpbidzIGNvbmZpZyAob3ZlciBlbnYpLCByb3V0ZSB0aGVcbiAgICogdG9vbHMnIHNlbmRzIHRocm91Z2ggdGhpcyBwbHVnaW4ncyBpbnRlcmNlcHRvciBjaGFpbiwgYW5kIGxvZyB0aGVcbiAgICogZWZmZWN0aXZlIHNlbmRlciBwb2xpY3kgc28gYW4gYWN0aXZlIHJlc3RyaWN0aW9uIGlzIG9idmlvdXMgYXQgYm9vdC4gSW5cbiAgICogU01UUCBtb2RlLCBmYWlsIHNldHVwIHdoZW4gdGhlIHRyYW5zcG9ydCBjYW5ub3QgYmUgdmVyaWZpZWQ6IGEgYmFkIGhvc3RcbiAgICogb3IgY3JlZGVudGlhbCBpcyBhIGRlcGxveS10aW1lIG1pc3Rha2UgYW5kIHNob3VsZCBzdG9wIHRoZSBhcHAgcmF0aGVyXG4gICAqIHRoYW4gd2FpdCBmb3IgYSB1c2VyIHRvIGFwcHJvdmUgYSBzZW5kIHRoYXQgY2Fubm90IHdvcmsuIFdpdGggbm8gU01UUFxuICAgKiBjcmVkZW50aWFscyB0aGUgcnVudGltZSBpcyBpbiBmaWxlL291dGJveCBtb2RlIChvbmx5IHdoZW5cbiAgICogYEVNQUlMX09VVEJPWF9NT0RFYCBpcyBzZXQpLCBsb2dnZWQgbG91ZGx5IGhlcmUgc28gaXQgaXMgb2J2aW91cyBtYWlsXG4gICAqIGlzIGJlaW5nIHdyaXR0ZW4gdG8gZGlzayByYXRoZXIgdGhhbiBzZW50LlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgc2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB0cmFuc3BvcnRlciwgY29uZmlnIH0gPSBnZXRFbWFpbFJ1bnRpbWUodGhpcy5jb25maWcpO1xuICAgIHNldEVtYWlsRXhlY3V0b3IoKGZuLCBzZXR0aW5ncykgPT4gdGhpcy5leGVjdXRlKGZuLCBzZXR0aW5ncykpO1xuICAgIGNvbnN0IHBvbGljeSA9IHtcbiAgICAgIG1vZGU6IGNvbmZpZy5tb2RlLFxuICAgICAgc2VuZGVyUG9saWN5OiBjb25maWcuc2VuZGVyUG9saWN5LFxuICAgICAgcmVzdHJpY3RlZDogY29uZmlnLmFsbG93ZWRTZW5kZXJzLmxlbmd0aCA+IDAsXG4gICAgICAuLi4oY29uZmlnLmFsbG93ZWRTZW5kZXJzLmxlbmd0aCA+IDAgPyB7IGFsbG93ZWRTZW5kZXJzOiBjb25maWcuYWxsb3dlZFNlbmRlcnMgfSA6IHt9KSxcbiAgICB9O1xuICAgIGlmIChjb25maWcubW9kZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwib3V0Ym94OmVuYWJsZWRcIiwge1xuICAgICAgICBkaXI6IGNvbmZpZy5vdXREaXIsXG4gICAgICAgIHJlYXNvbjogXCJubyBTTVRQIGNyZWRlbnRpYWxzIGNvbmZpZ3VyZWQ7IGVtYWlscyBhcmUgd3JpdHRlbiB0byBkaXNrIGluc3RlYWQgb2Ygc2VudFwiLFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHBvbGljeSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHZlcmlmaWVkID0gYXdhaXQgdGhpcy5leGVjdXRlKFxuICAgICAgYXN5bmMgKHNpZ25hbCkgPT4gdmVyaWZ5RW1haWxUcmFuc3BvcnQodHJhbnNwb3J0ZXIsIHNpZ25hbCksXG4gICAgICBFTUFJTF9WRVJJRllfU0VUVElOR1MsXG4gICAgKTtcbiAgICBpZiAoIXZlcmlmaWVkLm9rKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJzbXRwOnVudmVyaWZpZWRcIiwge1xuICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICAgIHN0YXR1czogdmVyaWZpZWQuc3RhdHVzLFxuICAgICAgICBlcnJvcjogdmVyaWZpZWQubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgICBcIlNNVFBcIixcbiAgICAgICAgYENvdWxkIG5vdCB2ZXJpZnkgJHtjb25maWcuaG9zdH06JHtjb25maWcucG9ydH0uIENoZWNrIFNNVFBfSE9TVCwgU01UUF9QT1JULCBTTVRQX1NFQ1VSRSwgYW5kIHRoZSBjcmVkZW50aWFscywgb3Igc2V0IEVNQUlMX09VVEJPWF9NT0RFPTEgZm9yIGxvY2FsIG91dGJveCB0ZXN0aW5nLmAsXG4gICAgICApO1xuICAgIH1cbiAgICBsb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIC4uLnBvbGljeSxcbiAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxuICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICBzZWN1cmU6IGNvbmZpZy5zZWN1cmUsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQ2xvc2UgdGhlIFNNVFAgY29ubmVjdGlvbiBwb29sLiBJZGVtcG90ZW50LiAqL1xuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXNldEVtYWlsUnVudGltZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFib3J0IGluLWZsaWdodCB3b3JrLiBBcHBLaXQncyBncmFjZWZ1bCBzaHV0ZG93biBvbmx5IGludm9rZXMgdGhpcyBob29rIC1cbiAgICogaXQgbmV2ZXIgY2FsbHMge0BsaW5rIHNodXRkb3dufSAtIHNvIHRoZSBTTVRQIHBvb2wgaXMgY2xvc2VkIGZyb20gaGVyZSBvclxuICAgKiBpdCBsZWFrcyBhdCBTSUdURVJNLiBUaGUgdGVhcmRvd24gaXMgc3luY2hyb25vdXMgYW5kIGlkZW1wb3RlbnQsIHNvIHRoZVxuICAgKiB1bi1hd2FpdGVkIGNhbGwgY29zdHMgbm90aGluZy5cbiAgICovXG4gIG92ZXJyaWRlIGFib3J0QWN0aXZlT3BlcmF0aW9ucygpOiB2b2lkIHtcbiAgICBzdXBlci5hYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTtcbiAgICB2b2lkIHRoaXMuc2h1dGRvd24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvc2UgdGhlIHNlbmRlci1vcHRpb25zIGxvb2t1cCBzbyBVSSBjb21wb3NlIHZpZXdzIGNhbiBwb3B1bGF0ZSBhXG4gICAqIGBGcm9tYCBkcm9wZG93biBmcm9tIHRoZSBjb25maWd1cmVkIGFsbG93LWxpc3QuIE1vdW50ZWQgdW5kZXIgdGhlXG4gICAqIHBsdWdpbiBiYXNlIHBhdGgsIGkuZS4gYEdFVCAvYXBpL2VtYWlsL3NlbmRlcnNgLiBSdW5zIGluIHRoZSBPQk9cbiAgICogdXNlciBzY29wZSBzbyBkb21haW4gd2lsZGNhcmRzIHJlc29sdmUgYWdhaW5zdCB0aGUgY2FsbGVyJ3Mgb3duXG4gICAqIGxvY2FsIHBhcnQuXG4gICAqL1xuICBvdmVycmlkZSBpbmplY3RSb3V0ZXMocm91dGVyOiBJQXBwUm91dGVyKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwibGlzdFNlbmRlcnNcIixcbiAgICAgIG1ldGhvZDogXCJnZXRcIixcbiAgICAgIHBhdGg6IFNFTkRFUlNfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hc1VzZXIocmVxKS5leGVjdXRlTGlzdFNlbmRlcnMoKTtcbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5qc29uKHJlc3VsdC5kYXRhKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBleHBvcnRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIFNlbmQgYSBtZXNzYWdlIGltbWVkaWF0ZWx5IGZyb20gYGZyb21gIHRocm91Z2ggdGhlIHNoYXJlZFxuICAgICAgICogdHJhbnNwb3J0LCBieXBhc3NpbmcgdGhlIGFwcHJvdmFsIGZsb3cuIEZvciBhZ2VudC1kcml2ZW4gc2VuZHNcbiAgICAgICAqIHVzZSB7QGxpbmsgZW1haWxUb29sfSBpbnN0ZWFkLlxuICAgICAgICovXG4gICAgICBzZW5kRW1haWw6IChcbiAgICAgICAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICAgICAgICBmcm9tOiBzdHJpbmcsXG4gICAgICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICAgICAgKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4gPT4gdGhpcy5zZW5kKG1lc3NhZ2UsIGZyb20sIHNpZ25hbCksXG4gICAgICAvKipcbiAgICAgICAqIFNlbmRlciBvcHRpb25zIGZvciB0aGUgY3VycmVudCB1c2VyICh0aGUgYEdFVCAvc2VuZGVyc2AgcGF5bG9hZCkuXG4gICAgICAgKiBBcHBLaXQgd3JhcHMgdGhpcyB3aXRoIGBhc1VzZXIocmVxKWAgZm9yIE9CTyBzY29waW5nLlxuICAgICAgICovXG4gICAgICBsaXN0U2VuZGVyczogYXN5bmMgKCk6IFByb21pc2U8RW1haWxTZW5kZXJzPiA9PiB1bndyYXAoYXdhaXQgdGhpcy5leGVjdXRlTGlzdFNlbmRlcnMoKSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBBcHBLaXQgYFRvb2xQcm92aWRlcmA6IHRoZSB0b29sIGRlZmluaXRpb25zIG9mZmVyZWQgdG8gYW4gYWdlbnQuICovXG4gIGdldEFnZW50VG9vbHMoKTogQWdlbnRUb29sRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdG9vbHNGcm9tUmVnaXN0cnkodGhpcy50b29scyk7XG4gIH1cblxuICAvKipcbiAgICogQXBwS2l0IGBUb29sUHJvdmlkZXJgOiBydW4gb25lIHRvb2wgY2FsbC4gQXJndW1lbnRzIGFyZSB2YWxpZGF0ZWQgYWdhaW5zdFxuICAgKiB0aGUgdG9vbCdzIHNjaGVtYSBmaXJzdCwgYW5kIGEgdmFsaWRhdGlvbiBmYWlsdXJlIGNvbWVzIGJhY2sgYXMgYW5cbiAgICogTExNLWZyaWVuZGx5IHN0cmluZyBzbyB0aGUgbW9kZWwgY2FuIGNvcnJlY3QgaXRzZWxmIG9uIHRoZSBuZXh0IHR1cm4uXG4gICAqL1xuICBhc3luYyBleGVjdXRlQWdlbnRUb29sKG5hbWU6IHN0cmluZywgYXJnczogdW5rbm93biwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gZXhlY3V0ZUZyb21SZWdpc3RyeSh0aGlzLnRvb2xzLCBuYW1lLCBhcmdzLCBzaWduYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgb25lIG1lc3NhZ2UsIHJlc29sdmluZyB0aGUgc2VuZGVyIGZvciB0aGUgY2FsbGVyIGluIHNjb3BlIHdoZW5cbiAgICogYGZyb21gIGlzIG5vdCBwaW5uZWQuIFRoZSBpbnRlcmNlcHRvciBjaGFpbiBpcyBhcHBsaWVkIGluc2lkZVxuICAgKiB7QGxpbmsgc2VuZEVtYWlsfSB0aHJvdWdoIHRoZSBleGVjdXRvciBpbnN0YWxsZWQgYXQgc2V0dXAsIHNvIHRoaXMgbXVzdFxuICAgKiBub3Qgd3JhcCBpdCBhZ2Fpbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VuZChcbiAgICBtZXNzYWdlOiBFbWFpbE1lc3NhZ2UsXG4gICAgZnJvbTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICApOiBQcm9taXNlPEVtYWlsUmVzdWx0PiB7XG4gICAgcmV0dXJuIHNlbmRFbWFpbChtZXNzYWdlLCBmcm9tID8/IHRoaXMucmVzb2x2ZVNlbmRlcigpLCBzaWduYWwpO1xuICB9XG5cbiAgLyoqIFJ1biB0aGUgc2VuZGVyLW9wdGlvbnMgbG9va3VwIHRocm91Z2ggdGhlIHBsdWdpbidzIGludGVyY2VwdG9yIGNoYWluLiAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVMaXN0U2VuZGVycygpOiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdDxFbWFpbFNlbmRlcnM+PiB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShhc3luYyAoKSA9PiB0aGlzLmxpc3RTZW5kZXJzKCksIEVNQUlMX1NFTkRFUlNfU0VUVElOR1MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGBGcm9tYCBvcHRpb25zIG9mZmVyZWQgdG8gdGhlIGN1cnJlbnQgdXNlcjogdGhlIGNvbmNyZXRlXG4gICAqIGFkZHJlc3NlcyB0aGUgZWZmZWN0aXZlIGFsbG93LWxpc3QgcGVybWl0cyAoZG9tYWluIHdpbGRjYXJkcyBleHBhbmRlZFxuICAgKiBhZ2FpbnN0IHRoZSBPQk8gdXNlcidzIGxvY2FsIHBhcnQpLCB0aGUgZGVmYXVsdCBhbW9uZyB0aGVtLCBhbmRcbiAgICogd2hldGhlciB0aGUgbGlzdCBpcyBhbiBlbmZvcmNlZCByZXN0cmljdGlvbi4gU2VlXG4gICAqIHtAbGluayBsaXN0U2VuZGVyT3B0aW9uc30uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxpc3RTZW5kZXJzKCk6IFByb21pc2U8RW1haWxTZW5kZXJzPiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IGdldEVtYWlsUnVudGltZSgpO1xuICAgIGNvbnN0IHNlbmRlcnMgPSBsaXN0U2VuZGVyT3B0aW9ucyhjb25maWcsIGN1cnJlbnRVc2VyRW1haWwoKSk7XG4gICAgLy8gUHJlZmVyIHRoZSBhZGRyZXNzIGEgc2VuZCB3b3VsZCBhY3R1YWxseSBkZWZhdWx0IHRvOyBmYWxsIGJhY2sgdG9cbiAgICAvLyB0aGUgZmlyc3Qgb2ZmZXJlZCBvcHRpb24gd2hlbiB0aGF0IGNhbid0IGJlIHJlc29sdmVkIC8gcGVybWl0dGVkLlxuICAgIGxldCBkZWZhdWx0U2VuZGVyID0gc2VuZGVyc1swXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmVTZW5kZXIoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKGlzU2VuZGVyQWxsb3dlZChyZXNvbHZlZCwgY29uZmlnLmFsbG93ZWRTZW5kZXJzKSkgZGVmYXVsdFNlbmRlciA9IHJlc29sdmVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gS2VlcCB0aGUgZmlyc3Qgb2ZmZXJlZCBvcHRpb24gKG9yIG5vbmUpIGFzIHRoZSBkZWZhdWx0LlxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc2VuZGVycyxcbiAgICAgIC4uLihkZWZhdWx0U2VuZGVyID8geyBkZWZhdWx0U2VuZGVyIH0gOiB7fSksXG4gICAgICByZXN0cmljdGVkOiBjb25maWcuYWxsb3dlZFNlbmRlcnMubGVuZ3RoID4gMCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFRoZSBgRnJvbWAgYSBzZW5kIGRlZmF1bHRzIHRvIGZvciB0aGUgY2FsbGVyIGluIHNjb3BlLiAqL1xuICBwcml2YXRlIHJlc29sdmVTZW5kZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZVNlbmRlckFkZHJlc3MoZ2V0RW1haWxSdW50aW1lKCkuY29uZmlnLCBjdXJyZW50VXNlckVtYWlsKCkpO1xuICB9XG59XG5cbi8qKiBUaGUgT0JPIHVzZXIncyBhZGRyZXNzLCBvciB1bmRlZmluZWQgb3V0c2lkZSBhIHVzZXIgY29udGV4dC4gKi9cbmZ1bmN0aW9uIGN1cnJlbnRVc2VyRW1haWwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY3R4ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICByZXR1cm4gXCJpc1VzZXJDb250ZXh0XCIgaW4gY3R4ID8gY3R4LnVzZXJFbWFpbCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZS1yYWlzZSBhIGZhaWxlZCBleGVjdXRpb24gYXMgdGhlIEFwcEtpdCBlcnJvciBjbGFzcyB0aGF0IGFscmVhZHkgY2Fycmllc1xuICogdGhlIHN0YXR1cyBBcHBLaXQgcmVzb2x2ZWQsIHNvIGEgcHJvZ3JhbW1hdGljIGNhbGxlciBzZWVzIHRoZSBzYW1lIDQwMCAvXG4gKiA0MDEgLyA1MDMgYW4gSFRUUCBjYWxsZXIgd291bGQuXG4gKi9cbmZ1bmN0aW9uIHRvQXBwS2l0RXJyb3Ioc3RhdHVzOiBudW1iZXIsIG1lc3NhZ2U6IHN0cmluZyk6IEFwcEtpdEVycm9yIHtcbiAgaWYgKHN0YXR1cyA9PT0gNDAwKSByZXR1cm4gbmV3IFZhbGlkYXRpb25FcnJvcihtZXNzYWdlKTtcbiAgaWYgKHN0YXR1cyA9PT0gNDAxKSByZXR1cm4gbmV3IEF1dGhlbnRpY2F0aW9uRXJyb3IobWVzc2FnZSk7XG4gIGlmIChzdGF0dXMgPT09IDUwMykgcmV0dXJuIG5ldyBDb25uZWN0aW9uRXJyb3IobWVzc2FnZSk7XG4gIHJldHVybiBuZXcgRXhlY3V0aW9uRXJyb3IobWVzc2FnZSk7XG59XG5cbi8qKlxuICogU3VyZmFjZSBhIGZhaWxlZCB7QGxpbmsgRXhlY3V0aW9uUmVzdWx0fSB0byBhIHByb2dyYW1tYXRpYyBjYWxsZXIgYXMgYVxuICogdGhyb3cuIEhUVFAgaGFuZGxlcnMgbWFwIGBzdGF0dXNgIG9udG8gdGhlIHJlc3BvbnNlIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIHVud3JhcDxUPihyZXN1bHQ6IEV4ZWN1dGlvblJlc3VsdDxUPik6IFQge1xuICBpZiAocmVzdWx0Lm9rKSByZXR1cm4gcmVzdWx0LmRhdGE7XG4gIHRocm93IHRvQXBwS2l0RXJyb3IocmVzdWx0LnN0YXR1cywgcmVzdWx0Lm1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBlbWFpbCBwbHVnaW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IGJyYW5kLCBwbHVnaW4gYXMgZW1haWxQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9lbWFpbFwiO1xuICpcbiAqIGF3YWl0IGNyZWF0ZUFwcCh7XG4gKiAgIHBsdWdpbnM6IFtcbiAqICAgICBzZXJ2ZXIoKSxcbiAqICAgICBlbWFpbFBsdWdpbi5lbWFpbCh7XG4gKiAgICAgICBkb21haW46IFwibWFpbC5leGFtcGxlLmNvbVwiLFxuICogICAgICAgYWxsb3dlZFNlbmRlcnM6IFtcIipAbWFpbC5leGFtcGxlLmNvbVwiXSxcbiAqICAgICAgIGJyYW5kOiBicmFuZC5kZWZhdWx0RW1haWxCcmFuZCxcbiAqICAgICB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHRvUGx1Z2luKEVtYWlsUGx1Z2luKTtcbiJdfQ==
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixNQUFNLEVBQ04sUUFBUSxFQUNSLGVBQWUsR0FLaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixpQkFBaUIsR0FJbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsS0FBSyxJQUFJLFNBQVMsR0FJbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLCtFQUErRTtBQUMvRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFFakMsNEVBQTRFO0FBQzVFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUV6QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBRW5DOzs7Ozs7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RyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzVELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxhQUFhLENBQUMsTUFBYyxFQUFFLE9BQWU7SUFDcEQsSUFBSSxNQUFNLEtBQUssR0FBRztRQUFFLE9BQU8sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsSUFBSSxNQUFNLEtBQUssR0FBRztRQUFFLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RCxJQUFJLE1BQU0sS0FBSyxHQUFHO1FBQUUsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4RCxPQUFPLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLE1BQU0sQ0FBSSxNQUEwQjtJQUMzQyxJQUFJLE1BQU0sQ0FBQyxFQUFFO1FBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2xDLE1BQU0sYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcEtpdCBwbHVnaW4gKHJlZ2lzdGVyZWQgbmFtZTogYGVtYWlsYCkgdGhhdCBvd25zIHRoZSBTTVRQIHJ1bnRpbWVcbiAqIGZvciBvdXRib3VuZCBtYWlsLiBSZWdpc3RlcmluZyBpdCB2YWxpZGF0ZXMgdGhlIFNNVFAgY29uZmlndXJhdGlvblxuICogYW5kIHZlcmlmaWVzIGNvbm5lY3Rpdml0eSBhdCBzdGFydHVwLCBzbyBhIGJhZCBob3N0IC8gY3JlZGVudGlhbFxuICogc3VyZmFjZXMgaW4gdGhlIGJvb3QgbG9ncyBpbnN0ZWFkIG9mIG9uIHRoZSBmaXJzdCBhcHByb3ZlZCBzZW5kLCBhbmRcbiAqIGluc3RhbGxzIHRoaXMgcGx1Z2luJ3MgYGV4ZWN1dGUoKWAgYXMgdGhlIHJ1bnRpbWUncyBleGVjdXRvciBzbyBldmVyeVxuICogc2VuZCBwaWNrcyB1cCBBcHBLaXQncyByZXRyeSAvIHRpbWVvdXQgLyB0ZWxlbWV0cnkgY2hhaW4uXG4gKlxuICogVGhlIHBsdWdpbiBpcyBhbHNvIGEgYFRvb2xQcm92aWRlcmAsIHNvIGFuIEFwcEtpdCBhZ2VudCBjYW4gcmVhY2ggYW5cbiAqIGBlbWFpbC5zZW5kYCB0b29sIGRpcmVjdGx5OyB0aGUge0BsaW5rIGVtYWlsVG9vbH0gZXhwb3J0IGlzIHRoZSBzYW1lXG4gKiBjYXBhYmlsaXR5IGZvciBhIE1hc3RyYSBhZ2VudC4gQm90aCBzaGFyZSB0aGUgdHJhbnNwb3J0IHByaW1lZCBoZXJlLFxuICogYW5kIHtAbGluayBzZW5kRW1haWx9IGlzIGF2YWlsYWJsZSB0byBub24tYWdlbnQgY2FsbGVycy5cbiAqXG4gKiBDb25maWd1cmF0aW9uIGlzIHRoZSBtYW5pZmVzdC1wdWJsaXNoZWQge0BsaW5rIEVtYWlsUGx1Z2luQ29uZmlnfVxuICogKFNNVFAgaG9zdC9wb3J0L2NyZWRlbnRpYWxzLCBzZW5kZXIgZG9tYWluIG9yIGV4cGxpY2l0IGBmcm9tYCwgdGhlXG4gKiBzZW5kZXIgcG9saWN5LCBhbmQgYW4gb3B0aW9uYWwgYGFsbG93ZWRTZW5kZXJzYCByZXN0cmljdGlvbiksIHdpdGhcbiAqIHVucHJlZml4ZWQgYFNNVFBfKmAgLyBgRU1BSUxfKmAgZW52aXJvbm1lbnQgZmFsbGJhY2tzLlxuICpcbiAqIFRoZSBwbHVnaW4gbW91bnRzIG9uZSByb3V0ZSB1bmRlciBpdHMgYmFzZSBwYXRoIChgL2FwaS9lbWFpbGApOlxuICogYEdFVCAvc2VuZGVyc2AgcmV0dXJucyB0aGUgcGVybWl0dGVkIGBGcm9tYCBvcHRpb25zIGZvciB0aGUgY2FsbGluZ1xuICogdXNlciwgc28gYSBjb21wb3NlIFVJIGNhbiBvZmZlciB0aGVtIGluIGEgZHJvcGRvd24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIEF1dGhlbnRpY2F0aW9uRXJyb3IsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBFeGVjdXRpb25FcnJvcixcbiAgZ2V0RXhlY3V0aW9uQ29udGV4dCxcbiAgUGx1Z2luLFxuICB0b1BsdWdpbixcbiAgVmFsaWRhdGlvbkVycm9yLFxuICB0eXBlIEFwcEtpdEVycm9yLFxuICB0eXBlIEV4ZWN1dGlvblJlc3VsdCxcbiAgdHlwZSBJQXBwUm91dGVyLFxuICB0eXBlIFBsdWdpbk1hbmlmZXN0LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQge1xuICBkZWZpbmVUb29sLFxuICBleGVjdXRlRnJvbVJlZ2lzdHJ5LFxuICB0b29sc0Zyb21SZWdpc3RyeSxcbiAgdHlwZSBBZ2VudFRvb2xEZWZpbml0aW9uLFxuICB0eXBlIFRvb2xQcm92aWRlcixcbiAgdHlwZSBUb29sUmVnaXN0cnksXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXQvYmV0YVwiO1xuaW1wb3J0IHsgbG9nLCBzdHJpbmcsIHRva2VuIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIGVtYWlsIGFzIGVtYWlsV2lyZSxcbiAgdHlwZSBFbWFpbE1lc3NhZ2UsXG4gIHR5cGUgRW1haWxSZXN1bHQsXG4gIHR5cGUgRW1haWxTZW5kZXJzLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZW1haWxcIjtcbmltcG9ydCB7IEVNQUlMX0NPTkZJR19TQ0hFTUEsIHR5cGUgRW1haWxQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7IEVNQUlMX1NFTkRFUlNfU0VUVElOR1MsIEVNQUlMX1ZFUklGWV9TRVRUSU5HUyB9IGZyb20gXCIuL2RlZmF1bHRzLnRzXCI7XG5pbXBvcnQgeyBpc1NlbmRlckFsbG93ZWQsIGxpc3RTZW5kZXJPcHRpb25zLCByZXNvbHZlU2VuZGVyQWRkcmVzcyB9IGZyb20gXCIuL3NlbmRlci50c1wiO1xuaW1wb3J0IHsgU0VORF9FTUFJTF9ERVNDUklQVElPTiB9IGZyb20gXCIuL3Rvb2wudHNcIjtcbmltcG9ydCB7XG4gIGdldEVtYWlsUnVudGltZSxcbiAgcmVzZXRFbWFpbFJ1bnRpbWUsXG4gIHNlbmRFbWFpbCxcbiAgc2V0RW1haWxFeGVjdXRvcixcbiAgdmVyaWZ5RW1haWxUcmFuc3BvcnQsXG59IGZyb20gXCIuL3RyYW5zcG9ydC50c1wiO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgKHVuZGVyIGAvYXBpL2VtYWlsYCkgZm9yIHRoZSBzZW5kZXItb3B0aW9ucyBsb29rdXAuICovXG5jb25zdCBTRU5ERVJTX1JPVVRFID0gXCIvc2VuZGVyc1wiO1xuXG4vKiogUmVnaXN0cnkga2V5IG9mIHRoZSBhZ2VudCB0b29sLCB3aGljaCBhZ2VudHMgYWRkcmVzcyBhcyBgZW1haWwuc2VuZGAuICovXG5jb25zdCBTRU5EX1RPT0wgPSBcInNlbmRcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImVtYWlsXCIpO1xuXG4vKipcbiAqIEFwcEtpdCBwbHVnaW4gdGhhdCBjb25maWd1cmVzIGFuZCB2ZXJpZmllcyB0aGUgU01UUCB0cmFuc3BvcnQgdXNlZCBieVxuICogdGhlIGBzZW5kX2VtYWlsYCB0b29sLCBhbmQgZXhwb3NlcyBzZW5kaW5nIGFzIGFuIEFwcEtpdCBhZ2VudCB0b29sLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBwbHVnaW4gYXMgZW1haWxQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy9lbWFpbFwiO1xuICpcbiAqIGF3YWl0IGNyZWF0ZUFwcCh7XG4gKiAgIHBsdWdpbnM6IFtcbiAqICAgICBzZXJ2ZXIoKSxcbiAqICAgICBlbWFpbFBsdWdpbi5lbWFpbCh7XG4gKiAgICAgICBzbXRwOiB7IGhvc3Q6IFwic210cC5leGFtcGxlLmNvbVwiLCB1c2VyOiBcImFwaWtleVwiLCBwYXNzd29yZDogcHJvY2Vzcy5lbnYuU01UUF9LRVkgfSxcbiAqICAgICAgIGRvbWFpbjogXCJtYWlsLmV4YW1wbGUuY29tXCIsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRW1haWxQbHVnaW4gZXh0ZW5kcyBQbHVnaW48RW1haWxQbHVnaW5Db25maWc+IGltcGxlbWVudHMgVG9vbFByb3ZpZGVyIHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwiZW1haWxcIixcbiAgICBkaXNwbGF5TmFtZTogXCJFbWFpbFwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJTZW5kcyBhcHByb3ZhbC1nYXRlZCBlbWFpbCBvdmVyIFNNVFAsIHdpdGggdGhlIHNlbmRlciBkZXJpdmVkIGZyb20gXCIgK1xuICAgICAgXCJ0aGUgb24tYmVoYWxmLW9mIHVzZXIncyBhZGRyZXNzIG9uIGEgY29uZmlndXJlZCBkb21haW4uXCIsXG4gICAgc3RhYmlsaXR5OiBcImJldGFcIixcbiAgICByZXNvdXJjZXM6IHtcbiAgICAgIHJlcXVpcmVkOiBbXSxcbiAgICAgIG9wdGlvbmFsOiBbXSxcbiAgICB9LFxuICAgIGNvbmZpZzogeyBzY2hlbWE6IEVNQUlMX0NPTkZJR19TQ0hFTUEgfSxcbiAgfSBzYXRpc2ZpZXMgUGx1Z2luTWFuaWZlc3Q8XCJlbWFpbFwiPjtcblxuICAvKipcbiAgICogVGhlIHRvb2wgdGhpcyBwbHVnaW4gb2ZmZXJzIHRvIGFuIEFwcEtpdCBhZ2VudC5cbiAgICpcbiAgICogTm90IGBhdXRvSW5oZXJpdGFibGVgOiBhIHNlbmQgaXMgaXJyZXZlcnNpYmxlIGFuZCBsZWF2ZXMgdGhlIHdvcmtzcGFjZSxcbiAgICogc28gaXQgbXVzdCBvbmx5IGFwcGVhciBpbiBhbiBhZ2VudCB0aGF0IGFza2VkIGZvciBpdCBhbmQgYWNjZXB0ZWQgdGhlXG4gICAqIHNlbmRlciBwb2xpY3kgdGhhdCBjb21lcyB3aXRoIGl0LlxuICAgKlxuICAgKiBgZXhlY3V0ZWAgcmUtcGFyc2VzIGl0cyBhcmd1bWVudHMgd2l0aCB0aGUgbG9jYWwgc2NoZW1hOiBBcHBLaXQgdmFsaWRhdGVzXG4gICAqIGFnYWluc3QgdGhlIHNhbWUgc2NoZW1hIGZpcnN0LCBidXQgcmUtcGFyc2luZyBpcyB3aGF0IGdpdmVzIHRoZSBib2R5IHR5cGVkXG4gICAqIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGB1bmtub3duYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbHM6IFRvb2xSZWdpc3RyeSA9IHtcbiAgICBbU0VORF9UT09MXTogZGVmaW5lVG9vbCh7XG4gICAgICBkZXNjcmlwdGlvbjogU0VORF9FTUFJTF9ERVNDUklQVElPTixcbiAgICAgIHNjaGVtYTogZW1haWxXaXJlLmVtYWlsTWVzc2FnZVNjaGVtYSxcbiAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJ3cml0ZVwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MsIHNpZ25hbCkgPT5cbiAgICAgICAgdGhpcy5zZW5kKGVtYWlsV2lyZS5lbWFpbE1lc3NhZ2VTY2hlbWEucGFyc2UoYXJncyksIHVuZGVmaW5lZCwgc2lnbmFsKSxcbiAgICB9KSxcbiAgfTtcblxuICAvKipcbiAgICogUHJpbWUgdGhlIHNoYXJlZCBydW50aW1lIGZyb20gdGhpcyBwbHVnaW4ncyBjb25maWcgKG92ZXIgZW52KSwgcm91dGUgdGhlXG4gICAqIHRvb2xzJyBzZW5kcyB0aHJvdWdoIHRoaXMgcGx1Z2luJ3MgaW50ZXJjZXB0b3IgY2hhaW4sIGFuZCBsb2cgdGhlXG4gICAqIGVmZmVjdGl2ZSBzZW5kZXIgcG9saWN5IHNvIGFuIGFjdGl2ZSByZXN0cmljdGlvbiBpcyBvYnZpb3VzIGF0IGJvb3QuIEluXG4gICAqIFNNVFAgbW9kZSwgZmFpbCBzZXR1cCB3aGVuIHRoZSB0cmFuc3BvcnQgY2Fubm90IGJlIHZlcmlmaWVkOiBhIGJhZCBob3N0XG4gICAqIG9yIGNyZWRlbnRpYWwgaXMgYSBkZXBsb3ktdGltZSBtaXN0YWtlIGFuZCBzaG91bGQgc3RvcCB0aGUgYXBwIHJhdGhlclxuICAgKiB0aGFuIHdhaXQgZm9yIGEgdXNlciB0byBhcHByb3ZlIGEgc2VuZCB0aGF0IGNhbm5vdCB3b3JrLiBXaXRoIG5vIFNNVFBcbiAgICogY3JlZGVudGlhbHMgdGhlIHJ1bnRpbWUgaXMgaW4gZmlsZS9vdXRib3ggbW9kZSAob25seSB3aGVuXG4gICAqIGBFTUFJTF9PVVRCT1hfTU9ERWAgaXMgc2V0KSwgbG9nZ2VkIGxvdWRseSBoZXJlIHNvIGl0IGlzIG9idmlvdXMgbWFpbFxuICAgKiBpcyBiZWluZyB3cml0dGVuIHRvIGRpc2sgcmF0aGVyIHRoYW4gc2VudC5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdHJhbnNwb3J0ZXIsIGNvbmZpZyB9ID0gZ2V0RW1haWxSdW50aW1lKHRoaXMuY29uZmlnKTtcbiAgICBzZXRFbWFpbEV4ZWN1dG9yKChmbiwgc2V0dGluZ3MpID0+IHRoaXMuZXhlY3V0ZShmbiwgc2V0dGluZ3MpKTtcbiAgICBjb25zdCBwb2xpY3kgPSB7XG4gICAgICBtb2RlOiBjb25maWcubW9kZSxcbiAgICAgIHNlbmRlclBvbGljeTogY29uZmlnLnNlbmRlclBvbGljeSxcbiAgICAgIHJlc3RyaWN0ZWQ6IGNvbmZpZy5hbGxvd2VkU2VuZGVycy5sZW5ndGggPiAwLFxuICAgICAgLi4uKGNvbmZpZy5hbGxvd2VkU2VuZGVycy5sZW5ndGggPiAwID8geyBhbGxvd2VkU2VuZGVyczogY29uZmlnLmFsbG93ZWRTZW5kZXJzIH0gOiB7fSksXG4gICAgfTtcbiAgICBpZiAoY29uZmlnLm1vZGUgPT09IFwiZmlsZVwiKSB7XG4gICAgICBsb2dnZXIud2FybihcIm91dGJveDplbmFibGVkXCIsIHtcbiAgICAgICAgZGlyOiBjb25maWcub3V0RGlyLFxuICAgICAgICByZWFzb246IFwibm8gU01UUCBjcmVkZW50aWFscyBjb25maWd1cmVkOyBlbWFpbHMgYXJlIHdyaXR0ZW4gdG8gZGlzayBpbnN0ZWFkIG9mIHNlbnRcIixcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCBwb2xpY3kpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2ZXJpZmllZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZShcbiAgICAgIGFzeW5jIChzaWduYWwpID0+IHZlcmlmeUVtYWlsVHJhbnNwb3J0KHRyYW5zcG9ydGVyLCBzaWduYWwpLFxuICAgICAgRU1BSUxfVkVSSUZZX1NFVFRJTkdTLFxuICAgICk7XG4gICAgaWYgKCF2ZXJpZmllZC5vaykge1xuICAgICAgbG9nZ2VyLmVycm9yKFwic210cDp1bnZlcmlmaWVkXCIsIHtcbiAgICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgICBzdGF0dXM6IHZlcmlmaWVkLnN0YXR1cyxcbiAgICAgICAgZXJyb3I6IHZlcmlmaWVkLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgICAgXCJTTVRQXCIsXG4gICAgICAgIGBDb3VsZCBub3QgdmVyaWZ5ICR7Y29uZmlnLmhvc3R9OiR7Y29uZmlnLnBvcnR9LiBDaGVjayBTTVRQX0hPU1QsIFNNVFBfUE9SVCwgU01UUF9TRUNVUkUsIGFuZCB0aGUgY3JlZGVudGlhbHMsIG9yIHNldCBFTUFJTF9PVVRCT1hfTU9ERT0xIGZvciBsb2NhbCBvdXRib3ggdGVzdGluZy5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7XG4gICAgICAuLi5wb2xpY3ksXG4gICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgc2VjdXJlOiBjb25maWcuc2VjdXJlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBTTVRQIGNvbm5lY3Rpb24gcG9vbC4gSWRlbXBvdGVudC4gKi9cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVzZXRFbWFpbFJ1bnRpbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBYm9ydCBpbi1mbGlnaHQgd29yay4gQXBwS2l0J3MgZ3JhY2VmdWwgc2h1dGRvd24gb25seSBpbnZva2VzIHRoaXMgaG9vayAtXG4gICAqIGl0IG5ldmVyIGNhbGxzIHtAbGluayBzaHV0ZG93bn0gLSBzbyB0aGUgU01UUCBwb29sIGlzIGNsb3NlZCBmcm9tIGhlcmUgb3JcbiAgICogaXQgbGVha3MgYXQgU0lHVEVSTS4gVGhlIHRlYXJkb3duIGlzIHN5bmNocm9ub3VzIGFuZCBpZGVtcG90ZW50LCBzbyB0aGVcbiAgICogdW4tYXdhaXRlZCBjYWxsIGNvc3RzIG5vdGhpbmcuXG4gICAqL1xuICBvdmVycmlkZSBhYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTogdm9pZCB7XG4gICAgc3VwZXIuYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk7XG4gICAgdm9pZCB0aGlzLnNodXRkb3duKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlIHRoZSBzZW5kZXItb3B0aW9ucyBsb29rdXAgc28gVUkgY29tcG9zZSB2aWV3cyBjYW4gcG9wdWxhdGUgYVxuICAgKiBgRnJvbWAgZHJvcGRvd24gZnJvbSB0aGUgY29uZmlndXJlZCBhbGxvdy1saXN0LiBNb3VudGVkIHVuZGVyIHRoZVxuICAgKiBwbHVnaW4gYmFzZSBwYXRoLCBpLmUuIGBHRVQgL2FwaS9lbWFpbC9zZW5kZXJzYC4gUnVucyBpbiB0aGUgT0JPXG4gICAqIHVzZXIgc2NvcGUgc28gZG9tYWluIHdpbGRjYXJkcyByZXNvbHZlIGFnYWluc3QgdGhlIGNhbGxlcidzIG93blxuICAgKiBsb2NhbCBwYXJ0LlxuICAgKlxuICAgKiBPQk8gaXMgdXNlZCBvbmx5IFdIRU4gdGhlIHJlcXVlc3QgY2FuIHN1cHBvcnQgaXQuIGBhc1VzZXIocmVxKWAgdGhyb3dzXG4gICAqIGBBdXRoZW50aWNhdGlvbkVycm9yYCBvdXRzaWRlIGBOT0RFX0VOVj1kZXZlbG9wbWVudGAgaWYgdGhlIHJlcXVlc3QgY2Fycmllc1xuICAgKiBubyBmb3J3YXJkZWQgT0JPIHRva2VuLCBhbmQgQXBwS2l0IGRvZXMgbm90IGNhdGNoIGEgcmVqZWN0aW9uIHJhaXNlZCBpbnNpZGVcbiAgICogYSBoYW5kbGVyIC0gc28gdW5jb25kaXRpb25hbGx5IHdyYXBwaW5nIHRoaXMgcm91dGUgdGFrZXMgdGhlIHByb2Nlc3MgZG93blxuICAgKiBmb3IgYSBjYWxsZXIgdGhhdCBhdXRoZW50aWNhdGVkIHNvbWUgb3RoZXIgd2F5IChhIGBAZGJ4LXRvb2xzL2NsaS10dW5uZWxgXG4gICAqIE9UUCBzZXNzaW9uLCBhIGhlYWx0aCBwcm9iZSwgYSBsb2NhbCBgY3VybGApLiBUaGUgdXNlciBjb250ZXh0IGlzIG9ubHkgZXZlclxuICAgKiBhbiBFTlJJQ0hNRU5UIGhlcmU6IHdpdGhvdXQgaXQsIHdpbGRjYXJkIHNlbmRlcnMgc2ltcGx5IGV4cGFuZCBhZ2FpbnN0IG5vXG4gICAqIGxvY2FsIHBhcnQuIERlZ3JhZGluZyB0byB0aGUgc2VydmljZSBjb250ZXh0IHRoZXJlZm9yZSBhbnN3ZXJzIGNvcnJlY3RseVxuICAgKiBpbnN0ZWFkIG9mIGZhaWxpbmcsIGFuZCBhIGZyb250LWRvb3IgcmVxdWVzdCBpcyB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIHNhbWUgcnVsZSBgQGRieC10b29scy9hcHBraXRgJ3MgYGlkZW50aXR5YCBtb2R1bGUgYXBwbGllcyBpblxuICAgKiBgXCJhdXRvXCJgIG1vZGU7IHRoZSBoZWFkZXIgY2hlY2sgaXMgaW5saW5lZCByYXRoZXIgdGhhbiB0YWtpbmcgYSBkZXBlbmRlbmN5XG4gICAqIG9uIHRoYXQgcGFja2FnZSBmb3Igb25lIHByZWRpY2F0ZS5cbiAgICovXG4gIG92ZXJyaWRlIGluamVjdFJvdXRlcyhyb3V0ZXI6IElBcHBSb3V0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJsaXN0U2VuZGVyc1wiLFxuICAgICAgbWV0aG9kOiBcImdldFwiLFxuICAgICAgcGF0aDogU0VOREVSU19ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCBvYm9Ub2tlbiA9IHN0cmluZy50cmltVG9OdWxsKHJlcS5oZWFkZXIodG9rZW4uQUNDRVNTX1RPS0VOX0hFQURFUikpO1xuICAgICAgICBjb25zdCBzY29wZWQgPSBvYm9Ub2tlbiA9PT0gbnVsbCA/IHRoaXMgOiB0aGlzLmFzVXNlcihyZXEpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzY29wZWQuZXhlY3V0ZUxpc3RTZW5kZXJzKCk7XG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzKS5qc29uKHsgZXJyb3I6IHJlc3VsdC5tZXNzYWdlIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXMuanNvbihyZXN1bHQuZGF0YSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhwb3J0cygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBTZW5kIGEgbWVzc2FnZSBpbW1lZGlhdGVseSBmcm9tIGBmcm9tYCB0aHJvdWdoIHRoZSBzaGFyZWRcbiAgICAgICAqIHRyYW5zcG9ydCwgYnlwYXNzaW5nIHRoZSBhcHByb3ZhbCBmbG93LiBGb3IgYWdlbnQtZHJpdmVuIHNlbmRzXG4gICAgICAgKiB1c2Uge0BsaW5rIGVtYWlsVG9vbH0gaW5zdGVhZC5cbiAgICAgICAqL1xuICAgICAgc2VuZEVtYWlsOiAoXG4gICAgICAgIG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSxcbiAgICAgICAgZnJvbTogc3RyaW5nLFxuICAgICAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgICAgICk6IFByb21pc2U8RW1haWxSZXN1bHQ+ID0+IHRoaXMuc2VuZChtZXNzYWdlLCBmcm9tLCBzaWduYWwpLFxuICAgICAgLyoqXG4gICAgICAgKiBTZW5kZXIgb3B0aW9ucyBmb3IgdGhlIGN1cnJlbnQgdXNlciAodGhlIGBHRVQgL3NlbmRlcnNgIHBheWxvYWQpLlxuICAgICAgICogQXBwS2l0IHdyYXBzIHRoaXMgd2l0aCBgYXNVc2VyKHJlcSlgIGZvciBPQk8gc2NvcGluZy5cbiAgICAgICAqL1xuICAgICAgbGlzdFNlbmRlcnM6IGFzeW5jICgpOiBQcm9taXNlPEVtYWlsU2VuZGVycz4gPT4gdW53cmFwKGF3YWl0IHRoaXMuZXhlY3V0ZUxpc3RTZW5kZXJzKCkpLFxuICAgIH07XG4gIH1cblxuICAvKiogQXBwS2l0IGBUb29sUHJvdmlkZXJgOiB0aGUgdG9vbCBkZWZpbml0aW9ucyBvZmZlcmVkIHRvIGFuIGFnZW50LiAqL1xuICBnZXRBZ2VudFRvb2xzKCk6IEFnZW50VG9vbERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRvb2xzRnJvbVJlZ2lzdHJ5KHRoaXMudG9vbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcEtpdCBgVG9vbFByb3ZpZGVyYDogcnVuIG9uZSB0b29sIGNhbGwuIEFyZ3VtZW50cyBhcmUgdmFsaWRhdGVkIGFnYWluc3RcbiAgICogdGhlIHRvb2wncyBzY2hlbWEgZmlyc3QsIGFuZCBhIHZhbGlkYXRpb24gZmFpbHVyZSBjb21lcyBiYWNrIGFzIGFuXG4gICAqIExMTS1mcmllbmRseSBzdHJpbmcgc28gdGhlIG1vZGVsIGNhbiBjb3JyZWN0IGl0c2VsZiBvbiB0aGUgbmV4dCB0dXJuLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZUFnZW50VG9vbChuYW1lOiBzdHJpbmcsIGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGV4ZWN1dGVGcm9tUmVnaXN0cnkodGhpcy50b29scywgbmFtZSwgYXJncywgc2lnbmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIG9uZSBtZXNzYWdlLCByZXNvbHZpbmcgdGhlIHNlbmRlciBmb3IgdGhlIGNhbGxlciBpbiBzY29wZSB3aGVuXG4gICAqIGBmcm9tYCBpcyBub3QgcGlubmVkLiBUaGUgaW50ZXJjZXB0b3IgY2hhaW4gaXMgYXBwbGllZCBpbnNpZGVcbiAgICoge0BsaW5rIHNlbmRFbWFpbH0gdGhyb3VnaCB0aGUgZXhlY3V0b3IgaW5zdGFsbGVkIGF0IHNldHVwLCBzbyB0aGlzIG11c3RcbiAgICogbm90IHdyYXAgaXQgYWdhaW4uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNlbmQoXG4gICAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICAgIGZyb206IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4ge1xuICAgIHJldHVybiBzZW5kRW1haWwobWVzc2FnZSwgZnJvbSA/PyB0aGlzLnJlc29sdmVTZW5kZXIoKSwgc2lnbmFsKTtcbiAgfVxuXG4gIC8qKiBSdW4gdGhlIHNlbmRlci1vcHRpb25zIGxvb2t1cCB0aHJvdWdoIHRoZSBwbHVnaW4ncyBpbnRlcmNlcHRvciBjaGFpbi4gKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlTGlzdFNlbmRlcnMoKTogUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQ8RW1haWxTZW5kZXJzPj4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoYXN5bmMgKCkgPT4gdGhpcy5saXN0U2VuZGVycygpLCBFTUFJTF9TRU5ERVJTX1NFVFRJTkdTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBgRnJvbWAgb3B0aW9ucyBvZmZlcmVkIHRvIHRoZSBjdXJyZW50IHVzZXI6IHRoZSBjb25jcmV0ZVxuICAgKiBhZGRyZXNzZXMgdGhlIGVmZmVjdGl2ZSBhbGxvdy1saXN0IHBlcm1pdHMgKGRvbWFpbiB3aWxkY2FyZHMgZXhwYW5kZWRcbiAgICogYWdhaW5zdCB0aGUgT0JPIHVzZXIncyBsb2NhbCBwYXJ0KSwgdGhlIGRlZmF1bHQgYW1vbmcgdGhlbSwgYW5kXG4gICAqIHdoZXRoZXIgdGhlIGxpc3QgaXMgYW4gZW5mb3JjZWQgcmVzdHJpY3Rpb24uIFNlZVxuICAgKiB7QGxpbmsgbGlzdFNlbmRlck9wdGlvbnN9LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsaXN0U2VuZGVycygpOiBQcm9taXNlPEVtYWlsU2VuZGVycz4ge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRFbWFpbFJ1bnRpbWUoKTtcbiAgICBjb25zdCBzZW5kZXJzID0gbGlzdFNlbmRlck9wdGlvbnMoY29uZmlnLCBjdXJyZW50VXNlckVtYWlsKCkpO1xuICAgIC8vIFByZWZlciB0aGUgYWRkcmVzcyBhIHNlbmQgd291bGQgYWN0dWFsbHkgZGVmYXVsdCB0bzsgZmFsbCBiYWNrIHRvXG4gICAgLy8gdGhlIGZpcnN0IG9mZmVyZWQgb3B0aW9uIHdoZW4gdGhhdCBjYW4ndCBiZSByZXNvbHZlZCAvIHBlcm1pdHRlZC5cbiAgICBsZXQgZGVmYXVsdFNlbmRlciA9IHNlbmRlcnNbMF07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlU2VuZGVyKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChpc1NlbmRlckFsbG93ZWQocmVzb2x2ZWQsIGNvbmZpZy5hbGxvd2VkU2VuZGVycykpIGRlZmF1bHRTZW5kZXIgPSByZXNvbHZlZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IG9mZmVyZWQgb3B0aW9uIChvciBub25lKSBhcyB0aGUgZGVmYXVsdC5cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbmRlcnMsXG4gICAgICAuLi4oZGVmYXVsdFNlbmRlciA/IHsgZGVmYXVsdFNlbmRlciB9IDoge30pLFxuICAgICAgcmVzdHJpY3RlZDogY29uZmlnLmFsbG93ZWRTZW5kZXJzLmxlbmd0aCA+IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBUaGUgYEZyb21gIGEgc2VuZCBkZWZhdWx0cyB0byBmb3IgdGhlIGNhbGxlciBpbiBzY29wZS4gKi9cbiAgcHJpdmF0ZSByZXNvbHZlU2VuZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVTZW5kZXJBZGRyZXNzKGdldEVtYWlsUnVudGltZSgpLmNvbmZpZywgY3VycmVudFVzZXJFbWFpbCgpKTtcbiAgfVxufVxuXG4vKiogVGhlIE9CTyB1c2VyJ3MgYWRkcmVzcywgb3IgdW5kZWZpbmVkIG91dHNpZGUgYSB1c2VyIGNvbnRleHQuICovXG5mdW5jdGlvbiBjdXJyZW50VXNlckVtYWlsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGN0eCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKTtcbiAgcmV0dXJuIFwiaXNVc2VyQ29udGV4dFwiIGluIGN0eCA/IGN0eC51c2VyRW1haWwgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmUtcmFpc2UgYSBmYWlsZWQgZXhlY3V0aW9uIGFzIHRoZSBBcHBLaXQgZXJyb3IgY2xhc3MgdGhhdCBhbHJlYWR5IGNhcnJpZXNcbiAqIHRoZSBzdGF0dXMgQXBwS2l0IHJlc29sdmVkLCBzbyBhIHByb2dyYW1tYXRpYyBjYWxsZXIgc2VlcyB0aGUgc2FtZSA0MDAgL1xuICogNDAxIC8gNTAzIGFuIEhUVFAgY2FsbGVyIHdvdWxkLlxuICovXG5mdW5jdGlvbiB0b0FwcEtpdEVycm9yKHN0YXR1czogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcpOiBBcHBLaXRFcnJvciB7XG4gIGlmIChzdGF0dXMgPT09IDQwMCkgcmV0dXJuIG5ldyBWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSk7XG4gIGlmIChzdGF0dXMgPT09IDQwMSkgcmV0dXJuIG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKG1lc3NhZ2UpO1xuICBpZiAoc3RhdHVzID09PSA1MDMpIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gbmV3IEV4ZWN1dGlvbkVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFN1cmZhY2UgYSBmYWlsZWQge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gdG8gYSBwcm9ncmFtbWF0aWMgY2FsbGVyIGFzIGFcbiAqIHRocm93LiBIVFRQIGhhbmRsZXJzIG1hcCBgc3RhdHVzYCBvbnRvIHRoZSByZXNwb25zZSBpbnN0ZWFkLlxuICovXG5mdW5jdGlvbiB1bndyYXA8VD4ocmVzdWx0OiBFeGVjdXRpb25SZXN1bHQ8VD4pOiBUIHtcbiAgaWYgKHJlc3VsdC5vaykgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICB0aHJvdyB0b0FwcEtpdEVycm9yKHJlc3VsdC5zdGF0dXMsIHJlc3VsdC5tZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgZW1haWwgcGx1Z2luLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBicmFuZCwgcGx1Z2luIGFzIGVtYWlsUGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvZW1haWxcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgZW1haWxQbHVnaW4uZW1haWwoe1xuICogICAgICAgZG9tYWluOiBcIm1haWwuZXhhbXBsZS5jb21cIixcbiAqICAgICAgIGFsbG93ZWRTZW5kZXJzOiBbXCIqQG1haWwuZXhhbXBsZS5jb21cIl0sXG4gKiAgICAgICBicmFuZDogYnJhbmQuZGVmYXVsdEVtYWlsQnJhbmQsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgZW1haWwgPSB0b1BsdWdpbihFbWFpbFBsdWdpbik7XG4iXX0=
|
package/lib/src/tool.d.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
/**
|
|
20
20
|
* The model-facing description of the send capability, shared by the Mastra
|
|
21
21
|
* {@link emailTool} and the AppKit `email.send` tool so both agents get the
|
|
22
|
-
* same guidance about approval
|
|
22
|
+
* same guidance about approval and scope.
|
|
23
23
|
*/
|
|
24
24
|
export declare const SEND_EMAIL_DESCRIPTION: string;
|
|
25
25
|
/** Options accepted by {@link emailTool}. */
|
package/lib/src/tool.js
CHANGED
|
@@ -26,7 +26,7 @@ const logger = log.logger("email/tool/send-email");
|
|
|
26
26
|
/**
|
|
27
27
|
* The model-facing description of the send capability, shared by the Mastra
|
|
28
28
|
* {@link emailTool} and the AppKit `email.send` tool so both agents get the
|
|
29
|
-
* same guidance about approval
|
|
29
|
+
* same guidance about approval and scope.
|
|
30
30
|
*/
|
|
31
31
|
export const SEND_EMAIL_DESCRIPTION = string.toDescription(`
|
|
32
32
|
Send an email on the user's behalf. Pass one or more recipient
|
|
@@ -34,11 +34,9 @@ export const SEND_EMAIL_DESCRIPTION = string.toDescription(`
|
|
|
34
34
|
and a body; the user is prompted to approve the send before it goes
|
|
35
35
|
out (this tool is approval-gated). Use it only when the user
|
|
36
36
|
explicitly asks to send / forward / share something via email -
|
|
37
|
-
never autonomously.
|
|
38
|
-
the
|
|
39
|
-
|
|
40
|
-
tables - not ASCII art (no "=====" dividers or space/pipe-drawn
|
|
41
|
-
tables); it is rendered to HTML before sending.
|
|
37
|
+
never autonomously. Compose whatever subject and body best fulfill
|
|
38
|
+
the user's request; the configured React Email template handles the
|
|
39
|
+
responsive layout, rich presentation, and brand styling.
|
|
42
40
|
`);
|
|
43
41
|
/**
|
|
44
42
|
* Build the approval-gated `send_email` tool. Spread it into the agents
|
|
@@ -79,4 +77,4 @@ export function emailTool(opts = {}) {
|
|
|
79
77
|
},
|
|
80
78
|
});
|
|
81
79
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFFbkQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7Ozs7Ozs7OztDQVMxRCxDQUFDLENBQUM7QUFZSDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQXlCLEVBQUU7SUFDbkQsT0FBTyxVQUFVLENBQUM7UUFDaEIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksWUFBWTtRQUMzQixXQUFXLEVBQUUsc0JBQXNCO1FBQ25DLFdBQVcsRUFBRSxLQUFLLENBQUMsa0JBQWtCO1FBQ3JDLFlBQVksRUFBRSxLQUFLLENBQUMsaUJBQWlCO1FBQ3JDLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ2hDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFDbEMsTUFBTSxTQUFTLEdBQUcsZUFBZSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3JFLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDbEIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxTQUFTO2dCQUNwQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM3RCxDQUFDLENBQUM7WUFDSCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBzZW5kX2VtYWlsYCBNYXN0cmEgdG9vbDogYXBwcm92YWwtZ2F0ZWQgc28gYSBtb2RlbCBjYW4gZHJhZnQgYVxuICogbWVzc2FnZSBmcmVlbHkgYnV0IG5vdGhpbmcgbGVhdmVzIHRoZSBidWlsZGluZyB1bnRpbCBhIGh1bWFuIGNsaWNrc1xuICogQXBwcm92ZSBpbiB0aGUgY2hhdCBVSS4gT24gYXBwcm92YWwgdGhlIHNlbmRlciBpcyByZXNvbHZlZCAoZXhwbGljaXRcbiAqIGBmcm9tYCBjb25maWcsIGVsc2UgZGVyaXZlZCBmcm9tIHRoZSBvbi1iZWhhbGYtb2YgdXNlcidzIGVtYWlsKSBhbmRcbiAqIHRoZSBtZXNzYWdlIGlzIGRpc3BhdGNoZWQgdGhyb3VnaCB0aGUgc2hhcmVkIFNNVFAgdHJhbnNwb3J0LlxuICpcbiAqIFRoZSBzZW5kZXIgZGVyaXZhdGlvbiBydW5zIGluc2lkZSB0aGUgQXBwS2l0IHVzZXIgc2NvcGUsIHNvXG4gKiBgZ2V0RXhlY3V0aW9uQ29udGV4dCgpYCByZXR1cm5zIHRoZSBPQk8gdXNlciB3aG9zZSBsb2NhbC1wYXJ0IHNlZWRzXG4gKiB0aGUgYWRkcmVzcyAoc2VlIHtAbGluayBkZXJpdmVTZW5kZXJBZGRyZXNzfSkuXG4gKlxuICogVGhlIGRpc3BhdGNoIGl0c2VsZiBnb2VzIHRocm91Z2ggdGhlIGV4ZWN1dG9yIHRoZSBwbHVnaW4gaW5zdGFsbHMgb24gdGhlXG4gKiBzaGFyZWQgcnVudGltZSwgc28gYSBzZW5kIGZyb20gdGhpcyB0b29sIHBpY2tzIHVwIHRoZSBzYW1lIHJldHJ5IC8gdGltZW91dCAvXG4gKiB0ZWxlbWV0cnkgY2hhaW4gYXMgb25lIGZyb20gdGhlIEFwcEtpdCB0b29sLiBJbiBhIE1hc3RyYSBhcHAgd2l0aCBubyBBcHBLaXRcbiAqIHBsdWdpbiByZWdpc3RlcmVkIHRoZSBzZW5kIHN0aWxsIHJ1bnMsIGp1c3Qgd2l0aG91dCBpbnRlcmNlcHRvcnMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdldEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2csIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBlbWFpbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1lbWFpbFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9vbCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvdG9vbHNcIjtcbmltcG9ydCB7IHJlc29sdmVTZW5kZXJBZGRyZXNzIH0gZnJvbSBcIi4vc2VuZGVyLnRzXCI7XG5pbXBvcnQgeyBnZXRFbWFpbFJ1bnRpbWUsIHNlbmRFbWFpbCB9IGZyb20gXCIuL3RyYW5zcG9ydC50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZW1haWwvdG9vbC9zZW5kLWVtYWlsXCIpO1xuXG4vKipcbiAqIFRoZSBtb2RlbC1mYWNpbmcgZGVzY3JpcHRpb24gb2YgdGhlIHNlbmQgY2FwYWJpbGl0eSwgc2hhcmVkIGJ5IHRoZSBNYXN0cmFcbiAqIHtAbGluayBlbWFpbFRvb2x9IGFuZCB0aGUgQXBwS2l0IGBlbWFpbC5zZW5kYCB0b29sIHNvIGJvdGggYWdlbnRzIGdldCB0aGVcbiAqIHNhbWUgZ3VpZGFuY2UgYWJvdXQgYXBwcm92YWwgYW5kIHNjb3BlLlxuICovXG5leHBvcnQgY29uc3QgU0VORF9FTUFJTF9ERVNDUklQVElPTiA9IHN0cmluZy50b0Rlc2NyaXB0aW9uKGBcbiAgU2VuZCBhbiBlbWFpbCBvbiB0aGUgdXNlcidzIGJlaGFsZi4gUGFzcyBvbmUgb3IgbW9yZSByZWNpcGllbnRcbiAgYWRkcmVzc2VzICh3aXRoIG9wdGlvbmFsIGNjIC8gYmNjIGFuZCBmaWxlIGF0dGFjaG1lbnRzKSwgYSBzdWJqZWN0LFxuICBhbmQgYSBib2R5OyB0aGUgdXNlciBpcyBwcm9tcHRlZCB0byBhcHByb3ZlIHRoZSBzZW5kIGJlZm9yZSBpdCBnb2VzXG4gIG91dCAodGhpcyB0b29sIGlzIGFwcHJvdmFsLWdhdGVkKS4gVXNlIGl0IG9ubHkgd2hlbiB0aGUgdXNlclxuICBleHBsaWNpdGx5IGFza3MgdG8gc2VuZCAvIGZvcndhcmQgLyBzaGFyZSBzb21ldGhpbmcgdmlhIGVtYWlsIC1cbiAgbmV2ZXIgYXV0b25vbW91c2x5LiBDb21wb3NlIHdoYXRldmVyIHN1YmplY3QgYW5kIGJvZHkgYmVzdCBmdWxmaWxsXG4gIHRoZSB1c2VyJ3MgcmVxdWVzdDsgdGhlIGNvbmZpZ3VyZWQgUmVhY3QgRW1haWwgdGVtcGxhdGUgaGFuZGxlcyB0aGVcbiAgcmVzcG9uc2l2ZSBsYXlvdXQsIHJpY2ggcHJlc2VudGF0aW9uLCBhbmQgYnJhbmQgc3R5bGluZy5cbmApO1xuXG4vKiogT3B0aW9ucyBhY2NlcHRlZCBieSB7QGxpbmsgZW1haWxUb29sfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUb29sT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgdG9vbCBpZC4gRGVmYXVsdHMgdG8gYFwic2VuZF9lbWFpbFwiYDsgdGhlIGNoYXQgVUknc1xuICAgKiBhcHByb3ZhbCBnYXRlIGtleXMgb2ZmIHRoaXMgaWQsIHNvIGtlZXAgaXQgdW5sZXNzIHlvdSBhbHNvIHRlYWNoXG4gICAqIHRoZSBjbGllbnQgYWJvdXQgdGhlIG5ldyBuYW1lLlxuICAgKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGFwcHJvdmFsLWdhdGVkIGBzZW5kX2VtYWlsYCB0b29sLiBTcHJlYWQgaXQgaW50byB0aGUgYWdlbnRzXG4gKiB0aGF0IHNob3VsZCBiZSBhYmxlIHRvIGRyYWZ0IG1haWw7IGl0IGlzIGludGVudGlvbmFsbHkgbm90IGluc3RhbGxlZFxuICogZXZlcnl3aGVyZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGVtYWlsVG9vbCB9IGZyb20gXCJAZGJ4LXRvb2xzL2VtYWlsXCI7XG4gKiBpbXBvcnQgeyBjcmVhdGVBZ2VudCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFcIjtcbiAqXG4gKiBjb25zdCBzdXBwb3J0ID0gY3JlYXRlQWdlbnQoe1xuICogICBpbnN0cnVjdGlvbnM6IFwiLi4uXCIsXG4gKiAgIHRvb2xzOiAoKSA9PiAoeyBzZW5kX2VtYWlsOiBlbWFpbFRvb2woKSB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWFpbFRvb2wob3B0czogRW1haWxUb29sT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0cy5pZCA/PyBcInNlbmRfZW1haWxcIixcbiAgICBkZXNjcmlwdGlvbjogU0VORF9FTUFJTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogZW1haWwuZW1haWxNZXNzYWdlU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogZW1haWwuZW1haWxSZXN1bHRTY2hlbWEsXG4gICAgcmVxdWlyZUFwcHJvdmFsOiB0cnVlLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVtYWlsLmVtYWlsTWVzc2FnZVNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0RW1haWxSdW50aW1lKCk7XG4gICAgICBjb25zdCBjdHggPSBnZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gICAgICBjb25zdCB1c2VyRW1haWwgPSBcImlzVXNlckNvbnRleHRcIiBpbiBjdHggPyBjdHgudXNlckVtYWlsIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZnJvbSA9IHJlc29sdmVTZW5kZXJBZGRyZXNzKGNvbmZpZywgdXNlckVtYWlsKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlbmRFbWFpbChtZXNzYWdlLCBmcm9tLCBjb250ZXh0Py5hYm9ydFNpZ25hbCk7XG4gICAgICBsb2dnZXIuaW5mbyhcInNlbnRcIiwge1xuICAgICAgICB0bzogcmVzdWx0LnJlY2lwaWVudCxcbiAgICAgICAgZnJvbTogcmVzdWx0LmZyb20sXG4gICAgICAgIC4uLihyZXN1bHQubWVzc2FnZUlkID8geyBtZXNzYWdlSWQ6IHJlc3VsdC5tZXNzYWdlSWQgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
|
package/lib/src/transport.d.ts
CHANGED
|
@@ -89,8 +89,8 @@ export declare function verifyEmailTransport(transporter: Transporter | undefine
|
|
|
89
89
|
* Send (SMTP mode) or persist (file/outbox mode) one message from the
|
|
90
90
|
* resolved `from` address. `to` (and optional `cc` / `bcc`) each accept
|
|
91
91
|
* one or more addresses, and `attachments` are forwarded as files. The
|
|
92
|
-
* body is
|
|
93
|
-
*
|
|
92
|
+
* body is rendered by React Email into matching plain-text and HTML MIME
|
|
93
|
+
* alternatives, and the outbox embeds the
|
|
94
94
|
* rendered HTML in a document. In file mode the returned `messageId` is
|
|
95
95
|
* the path written. Throws when `to` carries no recipient, when the body
|
|
96
96
|
* or attachments exceed the plugin's caps, or when `from` is not permitted
|
package/lib/src/transport.js
CHANGED
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
*
|
|
22
22
|
* @module
|
|
23
23
|
*/
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
24
|
+
import { ConfigurationError, ExecutionError, ValidationError, } from "@databricks/appkit";
|
|
25
|
+
import { execution, log } from "@dbx-tools/shared-core";
|
|
26
26
|
import nodemailer from "nodemailer";
|
|
27
27
|
import { resolveEmailConfig } from "./config.js";
|
|
28
28
|
import { EMAIL_SEND_SETTINGS, MAX_ATTACHMENT_BYTES, MAX_ATTACHMENT_COUNT, MAX_ATTACHMENTS_TOTAL_BYTES, MAX_BODY_CHARS, } from "./defaults.js";
|
|
29
|
-
import {
|
|
29
|
+
import { renderEmail } from "./email-html.js";
|
|
30
30
|
import { writeOutboxEmail } from "./outbox.js";
|
|
31
31
|
import { assertSenderAllowed } from "./sender.js";
|
|
32
32
|
const logger = log.logger("email/transport");
|
|
@@ -35,18 +35,7 @@ const logger = log.logger("email/transport");
|
|
|
35
35
|
* directly, mapping a throw onto the same {@link ExecutionResult} shape so
|
|
36
36
|
* call sites branch on `ok` either way.
|
|
37
37
|
*/
|
|
38
|
-
const directExecute =
|
|
39
|
-
try {
|
|
40
|
-
return { ok: true, data: await fn() };
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
return {
|
|
44
|
-
ok: false,
|
|
45
|
-
status: err instanceof AppKitError ? err.statusCode : 500,
|
|
46
|
-
message: error.errorMessage(err),
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
};
|
|
38
|
+
const directExecute = execution.directExecutor();
|
|
50
39
|
let runtime;
|
|
51
40
|
/**
|
|
52
41
|
* Return the shared runtime, building it on first use by resolving
|
|
@@ -113,19 +102,23 @@ export function resetEmailRuntime() {
|
|
|
113
102
|
*/
|
|
114
103
|
export async function executeWrite(operation, settings, fn, signal) {
|
|
115
104
|
const { execute } = getEmailRuntime();
|
|
116
|
-
|
|
117
|
-
if (result.ok)
|
|
118
|
-
return result.data;
|
|
119
|
-
// A caller that cancelled is not a failure worth reporting as one.
|
|
120
|
-
if (signal?.aborted)
|
|
121
|
-
throw ExecutionError.canceled();
|
|
122
|
-
logger.warn("execution-failed", {
|
|
105
|
+
return execution.run({
|
|
123
106
|
operation,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
107
|
+
settings,
|
|
108
|
+
execute,
|
|
109
|
+
fn,
|
|
110
|
+
signal,
|
|
111
|
+
canceled: ExecutionError.canceled,
|
|
112
|
+
failed: (failure) => {
|
|
113
|
+
logger.warn("execution-failed", {
|
|
114
|
+
operation: failure.operation,
|
|
115
|
+
status: failure.status,
|
|
116
|
+
error: failure.message,
|
|
117
|
+
});
|
|
118
|
+
return new ExecutionError(`email: ${failure.operation} failed`, {
|
|
119
|
+
context: { operation: failure.operation, status: failure.status },
|
|
120
|
+
});
|
|
121
|
+
},
|
|
129
122
|
});
|
|
130
123
|
}
|
|
131
124
|
/**
|
|
@@ -256,16 +249,17 @@ async function dispatch(message, from, signal) {
|
|
|
256
249
|
throw ConfigurationError.invalidConnection("SMTP", "No transport was built for the resolved configuration.");
|
|
257
250
|
}
|
|
258
251
|
const attachments = toMailAttachments(message.attachments);
|
|
252
|
+
const rendered = await renderEmail({
|
|
253
|
+
subject: message.subject,
|
|
254
|
+
body: message.body,
|
|
255
|
+
brand: config.brand,
|
|
256
|
+
});
|
|
259
257
|
const info = await abortable(transporter.sendMail({
|
|
260
258
|
from,
|
|
261
259
|
to: message.to,
|
|
262
260
|
subject: message.subject,
|
|
263
|
-
text:
|
|
264
|
-
html:
|
|
265
|
-
subject: message.subject,
|
|
266
|
-
body: message.body,
|
|
267
|
-
...(config.brand ? { brand: config.brand } : {}),
|
|
268
|
-
}),
|
|
261
|
+
text: rendered.text,
|
|
262
|
+
html: rendered.html,
|
|
269
263
|
...(message.cc && message.cc.length > 0 ? { cc: message.cc } : {}),
|
|
270
264
|
...(message.bcc && message.bcc.length > 0 ? { bcc: message.bcc } : {}),
|
|
271
265
|
...(attachments ? { attachments } : {}),
|
|
@@ -281,8 +275,8 @@ async function dispatch(message, from, signal) {
|
|
|
281
275
|
* Send (SMTP mode) or persist (file/outbox mode) one message from the
|
|
282
276
|
* resolved `from` address. `to` (and optional `cc` / `bcc`) each accept
|
|
283
277
|
* one or more addresses, and `attachments` are forwarded as files. The
|
|
284
|
-
* body is
|
|
285
|
-
*
|
|
278
|
+
* body is rendered by React Email into matching plain-text and HTML MIME
|
|
279
|
+
* alternatives, and the outbox embeds the
|
|
286
280
|
* rendered HTML in a document. In file mode the returned `messageId` is
|
|
287
281
|
* the path written. Throws when `to` carries no recipient, when the body
|
|
288
282
|
* or attachments exceed the plugin's caps, or when `from` is not permitted
|
|
@@ -300,4 +294,4 @@ export async function sendEmail(message, from, signal) {
|
|
|
300
294
|
assertSenderAllowed(from, getEmailRuntime().config.allowedSenders);
|
|
301
295
|
return executeWrite("send", EMAIL_SEND_SETTINGS, (executeSignal) => dispatch(message, from, executeSignal), signal);
|
|
302
296
|
}
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxlQUFlLEdBRWhCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxVQUFzRCxNQUFNLFlBQVksQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQW9ELE1BQU0sYUFBYSxDQUFDO0FBQ25HLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQiwyQkFBMkIsRUFDM0IsY0FBYyxHQUVmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQW9CN0M7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFrQixLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDaEQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE9BQU87WUFDTCxFQUFFLEVBQUUsS0FBSztZQUNULE1BQU0sRUFBRSxHQUFHLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFH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QUFlLEVBQUUsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkUsT0FBTyxZQUFZLENBQ2pCLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUN6RCxNQUFNLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBlbWFpbCBydW50aW1lOiBhIGxhemlseS1idWlsdCwgcHJvY2Vzcy13aWRlIGRpc3BhdGNoZXIgcGx1cyBpdHNcbiAqIHJlc29sdmVkIGNvbmZpZywgYW5kIHtAbGluayBzZW5kRW1haWx9IHdoaWNoIHNlbmRzIG9uZVxuICoge0BsaW5rIEVtYWlsTWVzc2FnZX0gdGhyb3VnaCBpdC4gSW4gU01UUCBtb2RlIHRoZSBydW50aW1lIGhvbGRzIGFcbiAqIG1lbW9pemVkIG5vZGVtYWlsZXIgdHJhbnNwb3J0IChzaGFyZWQgYnkgdGhlIHBsdWdpbidzIHNldHVwIGFuZCB0aGVcbiAqIGFnZW50IHRvb2wsIHNvIHRoZXkgcmV1c2Ugb25lIGNvbm5lY3Rpb24gcG9vbCk7IGluIGZpbGUvb3V0Ym94IG1vZGUgaXRcbiAqIGhvbGRzIG5vIHRyYW5zcG9ydCBhbmQge0BsaW5rIHNlbmRFbWFpbH0gd3JpdGVzIEhUTUwgdG8gZGlzayBpbnN0ZWFkLlxuICogVGhlIGZpcnN0IGNhbGxlciAobm9ybWFsbHkgdGhlIHBsdWdpbiBhdCBzZXR1cCkgcHJpbWVzIGl0IHdpdGggdGhlXG4gKiBwbHVnaW4ncyBjb25maWc7IGxhdGVyIGNhbGxlcnMgcmV1c2UgaXQuXG4gKlxuICogVGhlIHJ1bnRpbWUgYWxzbyBjYXJyaWVzIHRoZSB7QGxpbmsgRW1haWxFeGVjdXRvcn0gZXZlcnkgb3V0Ym91bmQgc2VuZCBydW5zXG4gKiB0aHJvdWdoLiBUaGUgcGx1Z2luIGluc3RhbGxzIGl0cyBvd24gYGV4ZWN1dGUoKWAgdGhlcmUgYXQgc2V0dXAsIHdoaWNoIGlzXG4gKiBob3cgdGhlIE1hc3RyYSB0b29sIC0gYSBwbGFpbiBmdW5jdGlvbiB3aXRoIG5vIHBsdWdpbiBpbnN0YW5jZSBpbiBzY29wZSAtXG4gKiBzdGlsbCBnZXRzIEFwcEtpdCdzIHJldHJ5IC8gdGltZW91dCAvIHRlbGVtZXRyeSBjaGFpbi4gV2l0aG91dCBhIHJlZ2lzdGVyZWRcbiAqIHBsdWdpbiAoYSBkaXJlY3QgY2FsbCBmcm9tIGEgc2NyaXB0IG9yIGEgdGVzdCkgdGhlIHNlbmQgc3RpbGwgcnVucywganVzdFxuICogd2l0aG91dCBpbnRlcmNlcHRvcnMuXG4gKlxuICogRXZlcnkgZW50cnkgcG9pbnQgdGFrZXMgYW4gb3B0aW9uYWwge0BsaW5rIEFib3J0U2lnbmFsfSBzbyB0aGUgcGx1Z2luJ3NcbiAqIGBleGVjdXRlKClgIHRpbWVvdXQgYW5kIGEgY2xpZW50IGRpc2Nvbm5lY3QgYm90aCBzdG9wIHRoZSBjYWxsZXIgd2FpdGluZ1xuICogb24gU01UUC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgQXBwS2l0RXJyb3IsXG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgRXhlY3V0aW9uRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgdHlwZSBFeGVjdXRpb25SZXN1bHQsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGFzeW5jLCBlcnJvciwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgRW1haWxBdHRhY2htZW50LCBFbWFpbE1lc3NhZ2UsIEVtYWlsUmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsXCI7XG5pbXBvcnQgbm9kZW1haWxlciwgeyB0eXBlIFNlbmRNYWlsT3B0aW9ucywgdHlwZSBUcmFuc3BvcnRlciB9IGZyb20gXCJub2RlbWFpbGVyXCI7XG5pbXBvcnQgeyByZXNvbHZlRW1haWxDb25maWcsIHR5cGUgRW1haWxQbHVnaW5Db25maWcsIHR5cGUgUmVzb2x2ZWRFbWFpbENvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHtcbiAgRU1BSUxfU0VORF9TRVRUSU5HUyxcbiAgTUFYX0FUVEFDSE1FTlRfQllURVMsXG4gIE1BWF9BVFRBQ0hNRU5UX0NPVU5ULFxuICBNQVhfQVRUQUNITUVOVFNfVE9UQUxfQllURVMsXG4gIE1BWF9CT0RZX0NIQVJTLFxuICB0eXBlIEVtYWlsRXhlY3V0aW9uU2V0dGluZ3MsXG59IGZyb20gXCIuL2RlZmF1bHRzLnRzXCI7XG5pbXBvcnQgeyByZW5kZXJFbWFpbEh0bWwgfSBmcm9tIFwiLi9lbWFpbC1odG1sLnRzXCI7XG5pbXBvcnQgeyB3cml0ZU91dGJveEVtYWlsIH0gZnJvbSBcIi4vb3V0Ym94LnRzXCI7XG5pbXBvcnQgeyBhc3NlcnRTZW5kZXJBbGxvd2VkIH0gZnJvbSBcIi4vc2VuZGVyLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJlbWFpbC90cmFuc3BvcnRcIik7XG5cbi8qKlxuICogUnVucyBvbmUgb3V0Ym91bmQgc2VuZCB0aHJvdWdoIEFwcEtpdCdzIGludGVyY2VwdG9yIGNoYWluLiBNYXRjaGVzXG4gKiBgUGx1Z2luLmV4ZWN1dGUoKWAsIHdoaWNoIG5ldmVyIHRocm93czogYSBmYWlsdXJlIGNvbWVzIGJhY2sgYXNcbiAqIGB7IG9rOiBmYWxzZSB9YC5cbiAqL1xuZXhwb3J0IHR5cGUgRW1haWxFeGVjdXRvciA9IDxUPihcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2V0dGluZ3M6IEVtYWlsRXhlY3V0aW9uU2V0dGluZ3MsXG4pID0+IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0PFQ+PjtcblxuLyoqIFRoZSBzaGFyZWQgZGlzcGF0Y2hlciwgaXRzIHJlc29sdmVkIGNvbmZpZywgYW5kIHRoZSBzZW5kIGV4ZWN1dG9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFJ1bnRpbWUge1xuICAvKiogUHJlc2VudCBvbmx5IGluIFNNVFAgbW9kZS4gKi9cbiAgdHJhbnNwb3J0ZXI/OiBUcmFuc3BvcnRlcjtcbiAgY29uZmlnOiBSZXNvbHZlZEVtYWlsQ29uZmlnO1xuICBleGVjdXRlOiBFbWFpbEV4ZWN1dG9yO1xufVxuXG4vKipcbiAqIEV4ZWN1dG9yIHVzZWQgdW50aWwgKG9yIHVubGVzcykgdGhlIHBsdWdpbiBpbnN0YWxscyBpdHMgb3duOiBydW4gdGhlIHNlbmRcbiAqIGRpcmVjdGx5LCBtYXBwaW5nIGEgdGhyb3cgb250byB0aGUgc2FtZSB7QGxpbmsgRXhlY3V0aW9uUmVzdWx0fSBzaGFwZSBzb1xuICogY2FsbCBzaXRlcyBicmFuY2ggb24gYG9rYCBlaXRoZXIgd2F5LlxuICovXG5jb25zdCBkaXJlY3RFeGVjdXRlOiBFbWFpbEV4ZWN1dG9yID0gYXN5bmMgKGZuKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgb2s6IHRydWUsIGRhdGE6IGF3YWl0IGZuKCkgfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9rOiBmYWxzZSxcbiAgICAgIHN0YXR1czogZXJyIGluc3RhbmNlb2YgQXBwS2l0RXJyb3IgPyBlcnIuc3RhdHVzQ29kZSA6IDUwMCxcbiAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yTWVzc2FnZShlcnIpLFxuICAgIH07XG4gIH1cbn07XG5cbmxldCBydW50aW1lOiBFbWFpbFJ1bnRpbWUgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzaGFyZWQgcnVudGltZSwgYnVpbGRpbmcgaXQgb24gZmlyc3QgdXNlIGJ5IHJlc29sdmluZ1xuICogYG92ZXJyaWRlc2Agb3ZlciB0aGUgZW52aXJvbm1lbnQgKGBTTVRQX0hPU1RgLCBgU01UUF9QT1JUYCxcbiAqIGBTTVRQX1NFQ1VSRWAsIGBTTVRQX1VTRVJgLCBgU01UUF9QQVNTV09SRGAsIGBFTUFJTF9ET01BSU5gLFxuICogYEVNQUlMX0ZST01gLCBgRU1BSUxfQUxMT1dFRF9TRU5ERVJTYCwgYEVNQUlMX1NFTkRFUl9QT0xJQ1lgLFxuICogYEVNQUlMX09VVEJPWF9NT0RFYCwgYEVNQUlMX09VVEJPWF9ESVJgKSB0aHJvdWdoXG4gKiB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfS4gV2l0aCBTTVRQIGNyZWRlbnRpYWxzIHByZXNlbnQgaXQgaG9sZHMgYVxuICogbm9kZW1haWxlciB0cmFuc3BvcnQgYW5kIGl0cyBjb25uZWN0aW9uIHBvb2w7IG90aGVyd2lzZSBpdCBpcyBpblxuICogZmlsZS9vdXRib3ggbW9kZSBhbmQgaG9sZHMgbm9uZS5cbiAqXG4gKiBgb3ZlcnJpZGVzYCBpcyByZWFkIG9ubHkgb24gdGhlIGNhbGwgdGhhdCBidWlsZHMgdGhlIHJ1bnRpbWUsIHNvIHByaW1lIGl0XG4gKiBmcm9tIHRoZSBwbHVnaW4ncyBjb25maWcgYXQgc2V0dXA7IGxhdGVyIGNhbGxlcnMgKHRoZSB0b29sJ3MgYGV4ZWN1dGVgLFxuICogdGhlIHNlbmRlci1vcHRpb25zIHJvdXRlKSBwYXNzIG5vdGhpbmcgYW5kIGdldCB0aGUgc2FtZSBpbnN0YW5jZS4gVGhyb3dzXG4gKiB3aGF0ZXZlciB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfSB0aHJvd3MgZm9yIGFuIHVudXNhYmxlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWFpbFJ1bnRpbWUob3ZlcnJpZGVzPzogRW1haWxQbHVnaW5Db25maWcpOiBFbWFpbFJ1bnRpbWUge1xuICBpZiAoIXJ1bnRpbWUpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXNvbHZlRW1haWxDb25maWcob3ZlcnJpZGVzKTtcbiAgICBydW50aW1lID0ge1xuICAgICAgY29uZmlnLFxuICAgICAgZXhlY3V0ZTogZGlyZWN0RXhlY3V0ZSxcbiAgICAgIC4uLihjb25maWcubW9kZSA9PT0gXCJzbXRwXCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0cmFuc3BvcnRlcjogbm9kZW1haWxlci5jcmVhdGVUcmFuc3BvcnQoe1xuICAgICAgICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICAgICAgICAgIHNlY3VyZTogY29uZmlnLnNlY3VyZSxcbiAgICAgICAgICAgICAgYXV0aDogY29uZmlnLmF1dGgsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJ1bnRpbWU7XG59XG5cbi8qKlxuICogSW5zdGFsbCB0aGUgZXhlY3V0b3Igb3V0Ym91bmQgc2VuZHMgcnVuIHRocm91Z2guIFRoZSBwbHVnaW4gY2FsbHMgdGhpcyBhdFxuICogc2V0dXAgd2l0aCBpdHMgb3duIGBleGVjdXRlKClgOyBhIHNlY29uZCBjYWxsIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBvbmUsIHNvXG4gKiBhIHJlLXJlZ2lzdGVyZWQgcGx1Z2luIGRvZXMgbm90IGxlYXZlIHRoZSB0b29scyBib3VuZCB0byBhIGRlYWQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFbWFpbEV4ZWN1dG9yKGV4ZWN1dGU6IEVtYWlsRXhlY3V0b3IpOiB2b2lkIHtcbiAgZ2V0RW1haWxSdW50aW1lKCkuZXhlY3V0ZSA9IGV4ZWN1dGU7XG59XG5cbi8qKlxuICogRHJvcCB0aGUgbWVtb2l6ZWQgcnVudGltZSwgY2xvc2luZyB0aGUgU01UUCBjb25uZWN0aW9uIHBvb2wsIHNvIHRoZSBuZXh0XG4gKiB7QGxpbmsgZ2V0RW1haWxSdW50aW1lfSByZWJ1aWxkcyBpdCBmcm9tIGZyZXNoIGNvbmZpZyBhbmQgc3RvcHMgY2FsbGluZ1xuICogdGhyb3VnaCBhIHRvcm4tZG93biBwbHVnaW4ncyBgZXhlY3V0ZSgpYC4gSWRlbXBvdGVudCwgYW5kIHRoZSBwbHVnaW4nc1xuICogYHNodXRkb3duKClgIGhvb2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEVtYWlsUnVudGltZSgpOiB2b2lkIHtcbiAgcnVudGltZT8udHJhbnNwb3J0ZXI/LmNsb3NlKCk7XG4gIHJ1bnRpbWUgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVuIG9uZSBub24taWRlbXBvdGVudCB3cml0ZSB0aHJvdWdoIHRoZSBzaGFyZWQgZXhlY3V0b3IgYW5kIHVud3JhcCBpdC5cbiAqXG4gKiBgZXhlY3V0ZSgpYCBuZXZlciB0aHJvd3MsIHNvIGEgZmFpbGVkIHNlbmQgYXJyaXZlcyBhcyBgeyBvazogZmFsc2UgfWAgd2l0aCBhXG4gKiBzdGF0dXMgdGhlIGludGVyY2VwdG9ycyBhbHJlYWR5IHNhbml0aXplZDsgaXQgaXMgbG9nZ2VkIGhlcmUgYW5kIHJlLXJhaXNlZFxuICogYXMgYSBzdGFibGUge0BsaW5rIEV4ZWN1dGlvbkVycm9yfSBzbyBhbiB1cHN0cmVhbSBtZXNzYWdlIG5ldmVyIGJlY29tZXMgdGhlXG4gKiBjYWxsZXIncyBlcnJvciB0ZXh0LiBgc2lnbmFsYCBpcyB0aGUgY2FsbGVyJ3Mgb3duIGNhbmNlbGxhdGlvbiAoYW4gYWdlbnRcbiAqIHJ1biwgYSByZXF1ZXN0IHRlYXJkb3duKTsgaXQgaXMgbWVyZ2VkIHdpdGggdGhlIHNpZ25hbCB0aGUgdGltZW91dFxuICogaW50ZXJjZXB0b3Igc3VwcGxpZXMgc28gZWl0aGVyIG9uZSB1bndpbmRzIHRoZSBJL08uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlV3JpdGU8VD4oXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICBzZXR0aW5nczogRW1haWxFeGVjdXRpb25TZXR0aW5ncyxcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgeyBleGVjdXRlIH0gPSBnZXRFbWFpbFJ1bnRpbWUoKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY3V0ZShcbiAgICAoZXhlY3V0ZVNpZ25hbCkgPT4gZm4oYXN5bmMuY29tYmluZUFib3J0U2lnbmFscyhleGVjdXRlU2lnbmFsLCBzaWduYWwpKSxcbiAgICBzZXR0aW5ncyxcbiAgKTtcbiAgaWYgKHJlc3VsdC5vaykgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAvLyBBIGNhbGxlciB0aGF0IGNhbmNlbGxlZCBpcyBub3QgYSBmYWlsdXJlIHdvcnRoIHJlcG9ydGluZyBhcyBvbmUuXG4gIGlmIChzaWduYWw/LmFib3J0ZWQpIHRocm93IEV4ZWN1dGlvbkVycm9yLmNhbmNlbGVkKCk7XG4gIGxvZ2dlci53YXJuKFwiZXhlY3V0aW9uLWZhaWxlZFwiLCB7XG4gICAgb3BlcmF0aW9uLFxuICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UsXG4gIH0pO1xuICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoYGVtYWlsOiAke29wZXJhdGlvbn0gZmFpbGVkYCwge1xuICAgIGNvbnRleHQ6IHsgb3BlcmF0aW9uLCBzdGF0dXM6IHJlc3VsdC5zdGF0dXMgfSxcbiAgfSk7XG59XG5cbi8qKlxuICogT3BlbiBhbmQgdGVhciBkb3duIG9uZSBTTVRQIGNvbm5lY3Rpb24gdG8gcHJvdmUgdGhlIGhvc3QsIHBvcnQsIGFuZFxuICogY3JlZGVudGlhbHMgd29yay4gQ2FsbGVkIGF0IHBsdWdpbiBzZXR1cCBzbyBhIGJhZCByZWxheSBzaG93cyB1cCBpbiB0aGVcbiAqIGJvb3QgbG9ncyByYXRoZXIgdGhhbiBvbiB0aGUgZmlyc3QgYXBwcm92ZWQgc2VuZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUVtYWlsVHJhbnNwb3J0KFxuICB0cmFuc3BvcnRlcjogVHJhbnNwb3J0ZXIgfCB1bmRlZmluZWQsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghdHJhbnNwb3J0ZXIpIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICBcIlNNVFBcIixcbiAgICAgIFwiVGhlIHJ1bnRpbWUgcmVzb2x2ZWQgdG8gb3V0Ym94IG1vZGUsIHNvIHRoZXJlIGlzIG5vIHRyYW5zcG9ydCB0byB2ZXJpZnkuXCIsXG4gICAgKTtcbiAgfVxuICBhd2FpdCBhYm9ydGFibGUodHJhbnNwb3J0ZXIudmVyaWZ5KCksIHNpZ25hbCk7XG59XG5cbi8qKlxuICogU3RvcCBhd2FpdGluZyBgcHJvbWlzZWAgYXMgc29vbiBhcyBgc2lnbmFsYCBhYm9ydHMuIG5vZGVtYWlsZXIgZXhwb3NlcyBub1xuICogY2FuY2VsbGF0aW9uIGhvb2ssIHNvIHRoZSBTTVRQIGNvbnZlcnNhdGlvbiBpdHNlbGYgZmluaXNoZXMgb24gaXRzIG93blxuICogY29ubmVjdGlvbjsgd2hhdCB1bndpbmRzIGlzIHRoZSBjYWxsZXIgYW5kIGV2ZXJ5dGhpbmcgZG93bnN0cmVhbSBvZiBpdC5cbiAqL1xuZnVuY3Rpb24gYWJvcnRhYmxlPFQ+KHByb21pc2U6IFByb21pc2U8VD4sIHNpZ25hbDogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCFzaWduYWwpIHJldHVybiBwcm9taXNlO1xuICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgLy8gVGhlIGxpc3RlbmVyIGlzIGRldGFjaGVkIG9uY2UgdGhlIHJhY2Ugc2V0dGxlcyBzbyBhIGxvbmctbGl2ZWQgcnVuIHNpZ25hbFxuICAvLyBkb2VzIG5vdCBhY2N1bXVsYXRlIG9uZSBwZXIgc2VuZC5cbiAgY29uc3QgbGlzdGVuZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IGFib3J0ZWQgPSBuZXcgUHJvbWlzZTxuZXZlcj4oKF8sIHJlamVjdCkgPT4ge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0KHNpZ25hbC5yZWFzb24pLCB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgICAgc2lnbmFsOiBsaXN0ZW5lci5zaWduYWwsXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtwcm9taXNlLCBhYm9ydGVkXSkuZmluYWxseSgoKSA9PiBsaXN0ZW5lci5hYm9ydCgpKTtcbn1cblxuLyoqIFRoZSBjb21tYS1qb2luZWQgcmVjaXBpZW50IHN0cmluZyBlY2hvZWQgYmFjayBpbiB7QGxpbmsgRW1haWxSZXN1bHR9LiAqL1xuZnVuY3Rpb24gcmVjaXBpZW50RWNobyh0bzogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG8uam9pbihcIiwgXCIpO1xufVxuXG4vKipcbiAqIE5vZGUgYnVmZmVyIGVuY29kaW5ncyBhIHdpcmUgYXR0YWNobWVudCBtYXkgbmFtZSBmb3IgaXRzIGlubGluZSBgY29udGVudGAuXG4gKiBBbnl0aGluZyBlbHNlIGlzIG1lYXN1cmVkIGFzIFVURi04LCB3aGljaCBvdmVyLWNvdW50cyByYXRoZXIgdGhhbiBsZXR0aW5nXG4gKiBhbiB1bnJlY29nbml6ZWQgZW5jb2Rpbmcgc2xpcCBwYXN0IHRoZSBzaXplIGNhcC5cbiAqL1xuY29uc3QgQ09OVEVOVF9FTkNPRElOR1M6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgXCJhc2NpaVwiLFxuICBcImJhc2U2NFwiLFxuICBcImJhc2U2NHVybFwiLFxuICBcImJpbmFyeVwiLFxuICBcImhleFwiLFxuICBcImxhdGluMVwiLFxuICBcInVjczJcIixcbiAgXCJ1Y3MtMlwiLFxuICBcInV0ZjhcIixcbiAgXCJ1dGYtOFwiLFxuICBcInV0ZjE2bGVcIixcbiAgXCJ1dGYtMTZsZVwiLFxuXSk7XG5cbi8qKlxuICogRGVjb2RlZCBieXRlIHNpemUgb2Ygb25lIGF0dGFjaG1lbnQncyBpbmxpbmUgY29udGVudC4gQSBgcGF0aGAgYXR0YWNobWVudFxuICogY29udHJpYnV0ZXMgbm90aGluZzogbm9kZW1haWxlciBzdHJlYW1zIGl0LCBzbyBpdHMgYnl0ZXMgbmV2ZXIgc2l0IGluIHRoaXNcbiAqIHByb2Nlc3MgYW5kIGNhbm5vdCBiZSBtZWFzdXJlZCBoZXJlLlxuICovXG5mdW5jdGlvbiBhdHRhY2htZW50Qnl0ZXMoYXR0YWNobWVudDogRW1haWxBdHRhY2htZW50KTogbnVtYmVyIHtcbiAgY29uc3QgeyBjb250ZW50LCBlbmNvZGluZyB9ID0gYXR0YWNobWVudDtcbiAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIGNvbnN0IGRlY2xhcmVkID0gZW5jb2Rpbmc/LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHJlc29sdmVkID1cbiAgICBkZWNsYXJlZCAmJiBDT05URU5UX0VOQ09ESU5HUy5oYXMoZGVjbGFyZWQpID8gKGRlY2xhcmVkIGFzIEJ1ZmZlckVuY29kaW5nKSA6IFwidXRmOFwiO1xuICByZXR1cm4gQnVmZmVyLmJ5dGVMZW5ndGgoY29udGVudCwgcmVzb2x2ZWQpO1xufVxuXG4vKipcbiAqIFJlamVjdCBhIG1lc3NhZ2Ugd2hvc2UgYm9keSBvciBhdHRhY2htZW50cyBleGNlZWQgdGhlIHBsdWdpbidzIGNhcHMuIFRoZVxuICogYm9keSBhbmQgYXR0YWNobWVudCBsaXN0IGFycml2ZSBmcm9tIGEgbW9kZWwsIHNvIHRoZXkgYXJlIHVuYm91bmRlZCB1bnRpbFxuICogc29tZXRoaW5nIGJvdW5kcyB0aGVtOyBtb3N0IFNNVFAgcmVsYXlzIGFsc28gcmVqZWN0IGFuIG92ZXJzaXplZCBtZXNzYWdlXG4gKiBvbmx5IGFmdGVyIHRoZSB3aG9sZSBwYXlsb2FkIGhhcyBiZWVuIHVwbG9hZGVkLlxuICovXG5mdW5jdGlvbiBhc3NlcnRNZXNzYWdlV2l0aGluQ2FwcyhtZXNzYWdlOiBFbWFpbE1lc3NhZ2UpOiB2b2lkIHtcbiAgaWYgKG1lc3NhZ2UuYm9keS5sZW5ndGggPiBNQVhfQk9EWV9DSEFSUykge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImJvZHlcIixcbiAgICAgIG1lc3NhZ2UuYm9keS5sZW5ndGgsXG4gICAgICBgYXQgbW9zdCAke01BWF9CT0RZX0NIQVJTfSBjaGFyYWN0ZXJzYCxcbiAgICApO1xuICB9XG4gIGNvbnN0IGF0dGFjaG1lbnRzID0gbWVzc2FnZS5hdHRhY2htZW50cyA/PyBbXTtcbiAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCA+IE1BWF9BVFRBQ0hNRU5UX0NPVU5UKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFwiYXR0YWNobWVudHNcIixcbiAgICAgIGF0dGFjaG1lbnRzLmxlbmd0aCxcbiAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRfQ09VTlR9IGZpbGVzYCxcbiAgICApO1xuICB9XG4gIGxldCB0b3RhbCA9IDA7XG4gIGZvciAoY29uc3QgYXR0YWNobWVudCBvZiBhdHRhY2htZW50cykge1xuICAgIGNvbnN0IGJ5dGVzID0gYXR0YWNobWVudEJ5dGVzKGF0dGFjaG1lbnQpO1xuICAgIGlmIChieXRlcyA+IE1BWF9BVFRBQ0hNRU5UX0JZVEVTKSB7XG4gICAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgICBcImF0dGFjaG1lbnRzW10uY29udGVudFwiLFxuICAgICAgICBieXRlcyxcbiAgICAgICAgYGF0IG1vc3QgJHtNQVhfQVRUQUNITUVOVF9CWVRFU30gYnl0ZXMgcGVyIGZpbGVgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdG90YWwgKz0gYnl0ZXM7XG4gIH1cbiAgaWYgKHRvdGFsID4gTUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFwiYXR0YWNobWVudHNcIixcbiAgICAgIHRvdGFsLFxuICAgICAgYGF0IG1vc3QgJHtNQVhfQVRUQUNITUVOVFNfVE9UQUxfQllURVN9IGJ5dGVzIGFjcm9zcyBhbGwgZmlsZXNgLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYXAgdGhlIHdpcmUtZm9ybWF0IHtAbGluayBFbWFpbEF0dGFjaG1lbnR9cyBvbnRvIG5vZGVtYWlsZXInc1xuICogYXR0YWNobWVudCBzaGFwZSwgZHJvcHBpbmcgdW5zZXQgb3B0aW9uYWwga2V5cyBzbyBub2RlbWFpbGVyIGFwcGxpZXNcbiAqIGl0cyBvd24gZGVmYXVsdHMgKHV0Zi04IGVuY29kaW5nLCBmaWxlbmFtZS1pbmZlcnJlZCBjb250ZW50IHR5cGUpLiBUaGVcbiAqIHdpcmUgZmllbGRzIGFyZSBhIGRlbGliZXJhdGUgc3Vic2V0IG9mIG5vZGVtYWlsZXIncywgc28gdGhpcyBpcyBhXG4gKiBzdHJhaWdodCBzdHJ1Y3R1cmFsIHBhc3MtdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gdG9NYWlsQXR0YWNobWVudHMoXG4gIGF0dGFjaG1lbnRzOiBFbWFpbEF0dGFjaG1lbnRbXSB8IHVuZGVmaW5lZCxcbik6IFNlbmRNYWlsT3B0aW9uc1tcImF0dGFjaG1lbnRzXCJdIHtcbiAgaWYgKCFhdHRhY2htZW50cyB8fCBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBhdHRhY2htZW50cy5tYXAoKGF0dCkgPT4gKHtcbiAgICBmaWxlbmFtZTogYXR0LmZpbGVuYW1lLFxuICAgIC4uLihhdHQuY29udGVudCAhPT0gdW5kZWZpbmVkID8geyBjb250ZW50OiBhdHQuY29udGVudCB9IDoge30pLFxuICAgIC4uLihhdHQuZW5jb2RpbmcgIT09IHVuZGVmaW5lZCA/IHsgZW5jb2Rpbmc6IGF0dC5lbmNvZGluZyB9IDoge30pLFxuICAgIC4uLihhdHQucGF0aCAhPT0gdW5kZWZpbmVkID8geyBwYXRoOiBhdHQucGF0aCB9IDoge30pLFxuICAgIC4uLihhdHQuY29udGVudFR5cGUgIT09IHVuZGVmaW5lZCA/IHsgY29udGVudFR5cGU6IGF0dC5jb250ZW50VHlwZSB9IDoge30pLFxuICB9KSk7XG59XG5cbi8qKlxuICogSGFuZCBvbmUgYWxyZWFkeS12YWxpZGF0ZWQgbWVzc2FnZSB0byBTTVRQLCBvciB3cml0ZSBpdCB0byB0aGUgb3V0Ym94IHdoZW5cbiAqIG5vIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkLiBUaGUgaGFsZiBvZiBhIHNlbmQgdGhhdCBwZXJmb3JtcyBJL08sIHNvIGl0XG4gKiBpcyB3aGF0IHJ1bnMgaW5zaWRlIHRoZSBpbnRlcmNlcHRvciBjaGFpbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2goXG4gIG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSxcbiAgZnJvbTogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8RW1haWxSZXN1bHQ+IHtcbiAgY29uc3QgeyBjb25maWcsIHRyYW5zcG9ydGVyIH0gPSBnZXRFbWFpbFJ1bnRpbWUoKTtcbiAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50RWNobyhtZXNzYWdlLnRvKTtcbiAgc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuXG4gIGlmIChjb25maWcubW9kZSA9PT0gXCJmaWxlXCIpIHtcbiAgICBjb25zdCBwYXRoID0gYXdhaXQgd3JpdGVPdXRib3hFbWFpbChtZXNzYWdlLCBmcm9tLCBjb25maWcub3V0RGlyLCBjb25maWcuYnJhbmQpO1xuICAgIHJldHVybiB7IHNlbnQ6IHRydWUsIHJlY2lwaWVudCwgZnJvbSwgbWVzc2FnZUlkOiBwYXRoIH07XG4gIH1cblxuICBpZiAoIXRyYW5zcG9ydGVyKSB7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgXCJTTVRQXCIsXG4gICAgICBcIk5vIHRyYW5zcG9ydCB3YXMgYnVpbHQgZm9yIHRoZSByZXNvbHZlZCBjb25maWd1cmF0aW9uLlwiLFxuICAgICk7XG4gIH1cbiAgY29uc3QgYXR0YWNobWVudHMgPSB0b01haWxBdHRhY2htZW50cyhtZXNzYWdlLmF0dGFjaG1lbnRzKTtcbiAgY29uc3QgaW5mbyA9IGF3YWl0IGFib3J0YWJsZShcbiAgICB0cmFuc3BvcnRlci5zZW5kTWFpbCh7XG4gICAgICBmcm9tLFxuICAgICAgdG86IG1lc3NhZ2UudG8sXG4gICAgICBzdWJqZWN0OiBtZXNzYWdlLnN1YmplY3QsXG4gICAgICB0ZXh0OiBtZXNzYWdlLmJvZHksXG4gICAgICBodG1sOiByZW5kZXJFbWFpbEh0bWwoe1xuICAgICAgICBzdWJqZWN0OiBtZXNzYWdlLnN1YmplY3QsXG4gICAgICAgIGJvZHk6IG1lc3NhZ2UuYm9keSxcbiAgICAgICAgLi4uKGNvbmZpZy5icmFuZCA/IHsgYnJhbmQ6IGNvbmZpZy5icmFuZCB9IDoge30pLFxuICAgICAgfSksXG4gICAgICAuLi4obWVzc2FnZS5jYyAmJiBtZXNzYWdlLmNjLmxlbmd0aCA+IDAgPyB7IGNjOiBtZXNzYWdlLmNjIH0gOiB7fSksXG4gICAgICAuLi4obWVzc2FnZS5iY2MgJiYgbWVzc2FnZS5iY2MubGVuZ3RoID4gMCA/IHsgYmNjOiBtZXNzYWdlLmJjYyB9IDoge30pLFxuICAgICAgLi4uKGF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgIH0pLFxuICAgIHNpZ25hbCxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICBzZW50OiB0cnVlLFxuICAgIHJlY2lwaWVudCxcbiAgICBmcm9tLFxuICAgIC4uLihpbmZvLm1lc3NhZ2VJZCA/IHsgbWVzc2FnZUlkOiBpbmZvLm1lc3NhZ2VJZCB9IDoge30pLFxuICB9O1xufVxuXG4vKipcbiAqIFNlbmQgKFNNVFAgbW9kZSkgb3IgcGVyc2lzdCAoZmlsZS9vdXRib3ggbW9kZSkgb25lIG1lc3NhZ2UgZnJvbSB0aGVcbiAqIHJlc29sdmVkIGBmcm9tYCBhZGRyZXNzLiBgdG9gIChhbmQgb3B0aW9uYWwgYGNjYCAvIGBiY2NgKSBlYWNoIGFjY2VwdFxuICogb25lIG9yIG1vcmUgYWRkcmVzc2VzLCBhbmQgYGF0dGFjaG1lbnRzYCBhcmUgZm9yd2FyZGVkIGFzIGZpbGVzLiBUaGVcbiAqIGJvZHkgaXMgbWFya2Rvd246IFNNVFAgc2VuZHMgaXQgYXMgYm90aCBhIHBsYWluLXRleHQgcGFydCAodGhlIHJhd1xuICogc291cmNlKSBhbmQgYW4gSFRNTCBwYXJ0IChyZW5kZXJlZCksIGFuZCB0aGUgb3V0Ym94IGVtYmVkcyB0aGVcbiAqIHJlbmRlcmVkIEhUTUwgaW4gYSBkb2N1bWVudC4gSW4gZmlsZSBtb2RlIHRoZSByZXR1cm5lZCBgbWVzc2FnZUlkYCBpc1xuICogdGhlIHBhdGggd3JpdHRlbi4gVGhyb3dzIHdoZW4gYHRvYCBjYXJyaWVzIG5vIHJlY2lwaWVudCwgd2hlbiB0aGUgYm9keVxuICogb3IgYXR0YWNobWVudHMgZXhjZWVkIHRoZSBwbHVnaW4ncyBjYXBzLCBvciB3aGVuIGBmcm9tYCBpcyBub3QgcGVybWl0dGVkXG4gKiBieSB0aGUgZWZmZWN0aXZlIHNlbmRlciBhbGxvdy1saXN0LlxuICpcbiAqIFRoZSByZWNpcGllbnQsIGNhcCwgYW5kIHNlbmRlciBjaGVja3MgcnVuIGJlZm9yZSB0aGUgaW50ZXJjZXB0b3IgY2hhaW4gc29cbiAqIHRoZWlyIHNwZWNpZmljIHN0YXR1cyBhbmQgYWN0aW9uYWJsZSBtZXNzYWdlIHJlYWNoIHRoZSBjYWxsZXIgaW5zdGVhZCBvZlxuICogdGhlIGNoYWluJ3Mgc3RhYmxlIGZhaWx1cmUgdGV4dC4gYHNpZ25hbGAgY2FuY2VscyB0aGUgc2VuZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRFbWFpbChcbiAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICBmcm9tOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4ge1xuICBpZiAobWVzc2FnZS50by5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IubWlzc2luZ0ZpZWxkKFwidG9cIik7XG4gIH1cbiAgYXNzZXJ0TWVzc2FnZVdpdGhpbkNhcHMobWVzc2FnZSk7XG4gIGFzc2VydFNlbmRlckFsbG93ZWQoZnJvbSwgZ2V0RW1haWxSdW50aW1lKCkuY29uZmlnLmFsbG93ZWRTZW5kZXJzKTtcbiAgcmV0dXJuIGV4ZWN1dGVXcml0ZShcbiAgICBcInNlbmRcIixcbiAgICBFTUFJTF9TRU5EX1NFVFRJTkdTLFxuICAgIChleGVjdXRlU2lnbmFsKSA9PiBkaXNwYXRjaChtZXNzYWdlLCBmcm9tLCBleGVjdXRlU2lnbmFsKSxcbiAgICBzaWduYWwsXG4gICk7XG59XG4iXX0=
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGVBQWUsR0FFaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sVUFBc0QsTUFBTSxZQUFZLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFvRCxNQUFNLGFBQWEsQ0FBQztBQUNuRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLGNBQWMsR0FFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFvQjdDOzs7O0dBSUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsY0FBYyxFQUEwQixDQUFDO0FBRXpFLElBQUksT0FBaUMsQ0FBQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBNkI7SUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxHQUFHO1lBQ1IsTUFBTTtZQUNOLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLEdBQUcsQ0FBQyxNQUFN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QUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUN4QyxDQUFDLEVBQ0YsTUFBTSxDQUNQLENBQUM7SUFDRixPQUFPO1FBQ0wsSUFBSSxFQUFFLElBQUk7UUFDVixTQUFTO1FBQ1QsSUFBSTtRQUNKLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxTQUFTLENBQzdCLE9BQXFCLEVBQ3JCLElBQVksRUFDWixNQUFvQjtJQUVwQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzVCLE1BQU0sZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuRSxPQUFPLFlBQVksQ0FDakIsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQ3pELE1BQU0sQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGVtYWlsIHJ1bnRpbWU6IGEgbGF6aWx5LWJ1aWx0LCBwcm9jZXNzLXdpZGUgZGlzcGF0Y2hlciBwbHVzIGl0c1xuICogcmVzb2x2ZWQgY29uZmlnLCBhbmQge0BsaW5rIHNlbmRFbWFpbH0gd2hpY2ggc2VuZHMgb25lXG4gKiB7QGxpbmsgRW1haWxNZXNzYWdlfSB0aHJvdWdoIGl0LiBJbiBTTVRQIG1vZGUgdGhlIHJ1bnRpbWUgaG9sZHMgYVxuICogbWVtb2l6ZWQgbm9kZW1haWxlciB0cmFuc3BvcnQgKHNoYXJlZCBieSB0aGUgcGx1Z2luJ3Mgc2V0dXAgYW5kIHRoZVxuICogYWdlbnQgdG9vbCwgc28gdGhleSByZXVzZSBvbmUgY29ubmVjdGlvbiBwb29sKTsgaW4gZmlsZS9vdXRib3ggbW9kZSBpdFxuICogaG9sZHMgbm8gdHJhbnNwb3J0IGFuZCB7QGxpbmsgc2VuZEVtYWlsfSB3cml0ZXMgSFRNTCB0byBkaXNrIGluc3RlYWQuXG4gKiBUaGUgZmlyc3QgY2FsbGVyIChub3JtYWxseSB0aGUgcGx1Z2luIGF0IHNldHVwKSBwcmltZXMgaXQgd2l0aCB0aGVcbiAqIHBsdWdpbidzIGNvbmZpZzsgbGF0ZXIgY2FsbGVycyByZXVzZSBpdC5cbiAqXG4gKiBUaGUgcnVudGltZSBhbHNvIGNhcnJpZXMgdGhlIHtAbGluayBFbWFpbEV4ZWN1dG9yfSBldmVyeSBvdXRib3VuZCBzZW5kIHJ1bnNcbiAqIHRocm91Z2guIFRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93biBgZXhlY3V0ZSgpYCB0aGVyZSBhdCBzZXR1cCwgd2hpY2ggaXNcbiAqIGhvdyB0aGUgTWFzdHJhIHRvb2wgLSBhIHBsYWluIGZ1bmN0aW9uIHdpdGggbm8gcGx1Z2luIGluc3RhbmNlIGluIHNjb3BlIC1cbiAqIHN0aWxsIGdldHMgQXBwS2l0J3MgcmV0cnkgLyB0aW1lb3V0IC8gdGVsZW1ldHJ5IGNoYWluLiBXaXRob3V0IGEgcmVnaXN0ZXJlZFxuICogcGx1Z2luIChhIGRpcmVjdCBjYWxsIGZyb20gYSBzY3JpcHQgb3IgYSB0ZXN0KSB0aGUgc2VuZCBzdGlsbCBydW5zLCBqdXN0XG4gKiB3aXRob3V0IGludGVyY2VwdG9ycy5cbiAqXG4gKiBFdmVyeSBlbnRyeSBwb2ludCB0YWtlcyBhbiBvcHRpb25hbCB7QGxpbmsgQWJvcnRTaWduYWx9IHNvIHRoZSBwbHVnaW4nc1xuICogYGV4ZWN1dGUoKWAgdGltZW91dCBhbmQgYSBjbGllbnQgZGlzY29ubmVjdCBib3RoIHN0b3AgdGhlIGNhbGxlciB3YWl0aW5nXG4gKiBvbiBTTVRQLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIEV4ZWN1dGlvbkVycm9yLFxuICBWYWxpZGF0aW9uRXJyb3IsXG4gIHR5cGUgRXhlY3V0aW9uUmVzdWx0LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBleGVjdXRpb24sIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEVtYWlsQXR0YWNobWVudCwgRW1haWxNZXNzYWdlLCBFbWFpbFJlc3VsdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1lbWFpbFwiO1xuaW1wb3J0IG5vZGVtYWlsZXIsIHsgdHlwZSBTZW5kTWFpbE9wdGlvbnMsIHR5cGUgVHJhbnNwb3J0ZXIgfSBmcm9tIFwibm9kZW1haWxlclwiO1xuaW1wb3J0IHsgcmVzb2x2ZUVtYWlsQ29uZmlnLCB0eXBlIEVtYWlsUGx1Z2luQ29uZmlnLCB0eXBlIFJlc29sdmVkRW1haWxDb25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7XG4gIEVNQUlMX1NFTkRfU0VUVElOR1MsXG4gIE1BWF9BVFRBQ0hNRU5UX0JZVEVTLFxuICBNQVhfQVRUQUNITUVOVF9DT1VOVCxcbiAgTUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTLFxuICBNQVhfQk9EWV9DSEFSUyxcbiAgdHlwZSBFbWFpbEV4ZWN1dGlvblNldHRpbmdzLFxufSBmcm9tIFwiLi9kZWZhdWx0cy50c1wiO1xuaW1wb3J0IHsgcmVuZGVyRW1haWwgfSBmcm9tIFwiLi9lbWFpbC1odG1sLnRzXCI7XG5pbXBvcnQgeyB3cml0ZU91dGJveEVtYWlsIH0gZnJvbSBcIi4vb3V0Ym94LnRzXCI7XG5pbXBvcnQgeyBhc3NlcnRTZW5kZXJBbGxvd2VkIH0gZnJvbSBcIi4vc2VuZGVyLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJlbWFpbC90cmFuc3BvcnRcIik7XG5cbi8qKlxuICogUnVucyBvbmUgb3V0Ym91bmQgc2VuZCB0aHJvdWdoIEFwcEtpdCdzIGludGVyY2VwdG9yIGNoYWluLiBNYXRjaGVzXG4gKiBgUGx1Z2luLmV4ZWN1dGUoKWAsIHdoaWNoIG5ldmVyIHRocm93czogYSBmYWlsdXJlIGNvbWVzIGJhY2sgYXNcbiAqIGB7IG9rOiBmYWxzZSB9YC5cbiAqL1xuZXhwb3J0IHR5cGUgRW1haWxFeGVjdXRvciA9IDxUPihcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2V0dGluZ3M6IEVtYWlsRXhlY3V0aW9uU2V0dGluZ3MsXG4pID0+IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0PFQ+PjtcblxuLyoqIFRoZSBzaGFyZWQgZGlzcGF0Y2hlciwgaXRzIHJlc29sdmVkIGNvbmZpZywgYW5kIHRoZSBzZW5kIGV4ZWN1dG9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFJ1bnRpbWUge1xuICAvKiogUHJlc2VudCBvbmx5IGluIFNNVFAgbW9kZS4gKi9cbiAgdHJhbnNwb3J0ZXI/OiBUcmFuc3BvcnRlcjtcbiAgY29uZmlnOiBSZXNvbHZlZEVtYWlsQ29uZmlnO1xuICBleGVjdXRlOiBFbWFpbEV4ZWN1dG9yO1xufVxuXG4vKipcbiAqIEV4ZWN1dG9yIHVzZWQgdW50aWwgKG9yIHVubGVzcykgdGhlIHBsdWdpbiBpbnN0YWxscyBpdHMgb3duOiBydW4gdGhlIHNlbmRcbiAqIGRpcmVjdGx5LCBtYXBwaW5nIGEgdGhyb3cgb250byB0aGUgc2FtZSB7QGxpbmsgRXhlY3V0aW9uUmVzdWx0fSBzaGFwZSBzb1xuICogY2FsbCBzaXRlcyBicmFuY2ggb24gYG9rYCBlaXRoZXIgd2F5LlxuICovXG5jb25zdCBkaXJlY3RFeGVjdXRlID0gZXhlY3V0aW9uLmRpcmVjdEV4ZWN1dG9yPEVtYWlsRXhlY3V0aW9uU2V0dGluZ3M+KCk7XG5cbmxldCBydW50aW1lOiBFbWFpbFJ1bnRpbWUgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzaGFyZWQgcnVudGltZSwgYnVpbGRpbmcgaXQgb24gZmlyc3QgdXNlIGJ5IHJlc29sdmluZ1xuICogYG92ZXJyaWRlc2Agb3ZlciB0aGUgZW52aXJvbm1lbnQgKGBTTVRQX0hPU1RgLCBgU01UUF9QT1JUYCxcbiAqIGBTTVRQX1NFQ1VSRWAsIGBTTVRQX1VTRVJgLCBgU01UUF9QQVNTV09SRGAsIGBFTUFJTF9ET01BSU5gLFxuICogYEVNQUlMX0ZST01gLCBgRU1BSUxfQUxMT1dFRF9TRU5ERVJTYCwgYEVNQUlMX1NFTkRFUl9QT0xJQ1lgLFxuICogYEVNQUlMX09VVEJPWF9NT0RFYCwgYEVNQUlMX09VVEJPWF9ESVJgKSB0aHJvdWdoXG4gKiB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfS4gV2l0aCBTTVRQIGNyZWRlbnRpYWxzIHByZXNlbnQgaXQgaG9sZHMgYVxuICogbm9kZW1haWxlciB0cmFuc3BvcnQgYW5kIGl0cyBjb25uZWN0aW9uIHBvb2w7IG90aGVyd2lzZSBpdCBpcyBpblxuICogZmlsZS9vdXRib3ggbW9kZSBhbmQgaG9sZHMgbm9uZS5cbiAqXG4gKiBgb3ZlcnJpZGVzYCBpcyByZWFkIG9ubHkgb24gdGhlIGNhbGwgdGhhdCBidWlsZHMgdGhlIHJ1bnRpbWUsIHNvIHByaW1lIGl0XG4gKiBmcm9tIHRoZSBwbHVnaW4ncyBjb25maWcgYXQgc2V0dXA7IGxhdGVyIGNhbGxlcnMgKHRoZSB0b29sJ3MgYGV4ZWN1dGVgLFxuICogdGhlIHNlbmRlci1vcHRpb25zIHJvdXRlKSBwYXNzIG5vdGhpbmcgYW5kIGdldCB0aGUgc2FtZSBpbnN0YW5jZS4gVGhyb3dzXG4gKiB3aGF0ZXZlciB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfSB0aHJvd3MgZm9yIGFuIHVudXNhYmxlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWFpbFJ1bnRpbWUob3ZlcnJpZGVzPzogRW1haWxQbHVnaW5Db25maWcpOiBFbWFpbFJ1bnRpbWUge1xuICBpZiAoIXJ1bnRpbWUpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXNvbHZlRW1haWxDb25maWcob3ZlcnJpZGVzKTtcbiAgICBydW50aW1lID0ge1xuICAgICAgY29uZmlnLFxuICAgICAgZXhlY3V0ZTogZGlyZWN0RXhlY3V0ZSxcbiAgICAgIC4uLihjb25maWcubW9kZSA9PT0gXCJzbXRwXCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0cmFuc3BvcnRlcjogbm9kZW1haWxlci5jcmVhdGVUcmFuc3BvcnQoe1xuICAgICAgICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICAgICAgICAgIHNlY3VyZTogY29uZmlnLnNlY3VyZSxcbiAgICAgICAgICAgICAgYXV0aDogY29uZmlnLmF1dGgsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJ1bnRpbWU7XG59XG5cbi8qKlxuICogSW5zdGFsbCB0aGUgZXhlY3V0b3Igb3V0Ym91bmQgc2VuZHMgcnVuIHRocm91Z2guIFRoZSBwbHVnaW4gY2FsbHMgdGhpcyBhdFxuICogc2V0dXAgd2l0aCBpdHMgb3duIGBleGVjdXRlKClgOyBhIHNlY29uZCBjYWxsIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBvbmUsIHNvXG4gKiBhIHJlLXJlZ2lzdGVyZWQgcGx1Z2luIGRvZXMgbm90IGxlYXZlIHRoZSB0b29scyBib3VuZCB0byBhIGRlYWQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFbWFpbEV4ZWN1dG9yKGV4ZWN1dGU6IEVtYWlsRXhlY3V0b3IpOiB2b2lkIHtcbiAgZ2V0RW1haWxSdW50aW1lKCkuZXhlY3V0ZSA9IGV4ZWN1dGU7XG59XG5cbi8qKlxuICogRHJvcCB0aGUgbWVtb2l6ZWQgcnVudGltZSwgY2xvc2luZyB0aGUgU01UUCBjb25uZWN0aW9uIHBvb2wsIHNvIHRoZSBuZXh0XG4gKiB7QGxpbmsgZ2V0RW1haWxSdW50aW1lfSByZWJ1aWxkcyBpdCBmcm9tIGZyZXNoIGNvbmZpZyBhbmQgc3RvcHMgY2FsbGluZ1xuICogdGhyb3VnaCBhIHRvcm4tZG93biBwbHVnaW4ncyBgZXhlY3V0ZSgpYC4gSWRlbXBvdGVudCwgYW5kIHRoZSBwbHVnaW4nc1xuICogYHNodXRkb3duKClgIGhvb2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEVtYWlsUnVudGltZSgpOiB2b2lkIHtcbiAgcnVudGltZT8udHJhbnNwb3J0ZXI/LmNsb3NlKCk7XG4gIHJ1bnRpbWUgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVuIG9uZSBub24taWRlbXBvdGVudCB3cml0ZSB0aHJvdWdoIHRoZSBzaGFyZWQgZXhlY3V0b3IgYW5kIHVud3JhcCBpdC5cbiAqXG4gKiBgZXhlY3V0ZSgpYCBuZXZlciB0aHJvd3MsIHNvIGEgZmFpbGVkIHNlbmQgYXJyaXZlcyBhcyBgeyBvazogZmFsc2UgfWAgd2l0aCBhXG4gKiBzdGF0dXMgdGhlIGludGVyY2VwdG9ycyBhbHJlYWR5IHNhbml0aXplZDsgaXQgaXMgbG9nZ2VkIGhlcmUgYW5kIHJlLXJhaXNlZFxuICogYXMgYSBzdGFibGUge0BsaW5rIEV4ZWN1dGlvbkVycm9yfSBzbyBhbiB1cHN0cmVhbSBtZXNzYWdlIG5ldmVyIGJlY29tZXMgdGhlXG4gKiBjYWxsZXIncyBlcnJvciB0ZXh0LiBgc2lnbmFsYCBpcyB0aGUgY2FsbGVyJ3Mgb3duIGNhbmNlbGxhdGlvbiAoYW4gYWdlbnRcbiAqIHJ1biwgYSByZXF1ZXN0IHRlYXJkb3duKTsgaXQgaXMgbWVyZ2VkIHdpdGggdGhlIHNpZ25hbCB0aGUgdGltZW91dFxuICogaW50ZXJjZXB0b3Igc3VwcGxpZXMgc28gZWl0aGVyIG9uZSB1bndpbmRzIHRoZSBJL08uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlV3JpdGU8VD4oXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICBzZXR0aW5nczogRW1haWxFeGVjdXRpb25TZXR0aW5ncyxcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgeyBleGVjdXRlIH0gPSBnZXRFbWFpbFJ1bnRpbWUoKTtcbiAgcmV0dXJuIGV4ZWN1dGlvbi5ydW4oe1xuICAgIG9wZXJhdGlvbixcbiAgICBzZXR0aW5ncyxcbiAgICBleGVjdXRlLFxuICAgIGZuLFxuICAgIHNpZ25hbCxcbiAgICBjYW5jZWxlZDogRXhlY3V0aW9uRXJyb3IuY2FuY2VsZWQsXG4gICAgZmFpbGVkOiAoZmFpbHVyZSkgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oXCJleGVjdXRpb24tZmFpbGVkXCIsIHtcbiAgICAgICAgb3BlcmF0aW9uOiBmYWlsdXJlLm9wZXJhdGlvbixcbiAgICAgICAgc3RhdHVzOiBmYWlsdXJlLnN0YXR1cyxcbiAgICAgICAgZXJyb3I6IGZhaWx1cmUubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBFeGVjdXRpb25FcnJvcihgZW1haWw6ICR7ZmFpbHVyZS5vcGVyYXRpb259IGZhaWxlZGAsIHtcbiAgICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IGZhaWx1cmUub3BlcmF0aW9uLCBzdGF0dXM6IGZhaWx1cmUuc3RhdHVzIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBPcGVuIGFuZCB0ZWFyIGRvd24gb25lIFNNVFAgY29ubmVjdGlvbiB0byBwcm92ZSB0aGUgaG9zdCwgcG9ydCwgYW5kXG4gKiBjcmVkZW50aWFscyB3b3JrLiBDYWxsZWQgYXQgcGx1Z2luIHNldHVwIHNvIGEgYmFkIHJlbGF5IHNob3dzIHVwIGluIHRoZVxuICogYm9vdCBsb2dzIHJhdGhlciB0aGFuIG9uIHRoZSBmaXJzdCBhcHByb3ZlZCBzZW5kLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5RW1haWxUcmFuc3BvcnQoXG4gIHRyYW5zcG9ydGVyOiBUcmFuc3BvcnRlciB8IHVuZGVmaW5lZCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCF0cmFuc3BvcnRlcikge1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgIFwiU01UUFwiLFxuICAgICAgXCJUaGUgcnVudGltZSByZXNvbHZlZCB0byBvdXRib3ggbW9kZSwgc28gdGhlcmUgaXMgbm8gdHJhbnNwb3J0IHRvIHZlcmlmeS5cIixcbiAgICApO1xuICB9XG4gIGF3YWl0IGFib3J0YWJsZSh0cmFuc3BvcnRlci52ZXJpZnkoKSwgc2lnbmFsKTtcbn1cblxuLyoqXG4gKiBTdG9wIGF3YWl0aW5nIGBwcm9taXNlYCBhcyBzb29uIGFzIGBzaWduYWxgIGFib3J0cy4gbm9kZW1haWxlciBleHBvc2VzIG5vXG4gKiBjYW5jZWxsYXRpb24gaG9vaywgc28gdGhlIFNNVFAgY29udmVyc2F0aW9uIGl0c2VsZiBmaW5pc2hlcyBvbiBpdHMgb3duXG4gKiBjb25uZWN0aW9uOyB3aGF0IHVud2luZHMgaXMgdGhlIGNhbGxlciBhbmQgZXZlcnl0aGluZyBkb3duc3RyZWFtIG9mIGl0LlxuICovXG5mdW5jdGlvbiBhYm9ydGFibGU8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8VD4ge1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuIHByb21pc2U7XG4gIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAvLyBUaGUgbGlzdGVuZXIgaXMgZGV0YWNoZWQgb25jZSB0aGUgcmFjZSBzZXR0bGVzIHNvIGEgbG9uZy1saXZlZCBydW4gc2lnbmFsXG4gIC8vIGRvZXMgbm90IGFjY3VtdWxhdGUgb25lIHBlciBzZW5kLlxuICBjb25zdCBsaXN0ZW5lciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgYWJvcnRlZCA9IG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PiB7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Qoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBzaWduYWw6IGxpc3RlbmVyLnNpZ25hbCxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3Byb21pc2UsIGFib3J0ZWRdKS5maW5hbGx5KCgpID0+IGxpc3RlbmVyLmFib3J0KCkpO1xufVxuXG4vKiogVGhlIGNvbW1hLWpvaW5lZCByZWNpcGllbnQgc3RyaW5nIGVjaG9lZCBiYWNrIGluIHtAbGluayBFbWFpbFJlc3VsdH0uICovXG5mdW5jdGlvbiByZWNpcGllbnRFY2hvKHRvOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiB0by5qb2luKFwiLCBcIik7XG59XG5cbi8qKlxuICogTm9kZSBidWZmZXIgZW5jb2RpbmdzIGEgd2lyZSBhdHRhY2htZW50IG1heSBuYW1lIGZvciBpdHMgaW5saW5lIGBjb250ZW50YC5cbiAqIEFueXRoaW5nIGVsc2UgaXMgbWVhc3VyZWQgYXMgVVRGLTgsIHdoaWNoIG92ZXItY291bnRzIHJhdGhlciB0aGFuIGxldHRpbmdcbiAqIGFuIHVucmVjb2duaXplZCBlbmNvZGluZyBzbGlwIHBhc3QgdGhlIHNpemUgY2FwLlxuICovXG5jb25zdCBDT05URU5UX0VOQ09ESU5HUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICBcImFzY2lpXCIsXG4gIFwiYmFzZTY0XCIsXG4gIFwiYmFzZTY0dXJsXCIsXG4gIFwiYmluYXJ5XCIsXG4gIFwiaGV4XCIsXG4gIFwibGF0aW4xXCIsXG4gIFwidWNzMlwiLFxuICBcInVjcy0yXCIsXG4gIFwidXRmOFwiLFxuICBcInV0Zi04XCIsXG4gIFwidXRmMTZsZVwiLFxuICBcInV0Zi0xNmxlXCIsXG5dKTtcblxuLyoqXG4gKiBEZWNvZGVkIGJ5dGUgc2l6ZSBvZiBvbmUgYXR0YWNobWVudCdzIGlubGluZSBjb250ZW50LiBBIGBwYXRoYCBhdHRhY2htZW50XG4gKiBjb250cmlidXRlcyBub3RoaW5nOiBub2RlbWFpbGVyIHN0cmVhbXMgaXQsIHNvIGl0cyBieXRlcyBuZXZlciBzaXQgaW4gdGhpc1xuICogcHJvY2VzcyBhbmQgY2Fubm90IGJlIG1lYXN1cmVkIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaG1lbnRCeXRlcyhhdHRhY2htZW50OiBFbWFpbEF0dGFjaG1lbnQpOiBudW1iZXIge1xuICBjb25zdCB7IGNvbnRlbnQsIGVuY29kaW5nIH0gPSBhdHRhY2htZW50O1xuICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgY29uc3QgZGVjbGFyZWQgPSBlbmNvZGluZz8udG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmVzb2x2ZWQgPVxuICAgIGRlY2xhcmVkICYmIENPTlRFTlRfRU5DT0RJTkdTLmhhcyhkZWNsYXJlZCkgPyAoZGVjbGFyZWQgYXMgQnVmZmVyRW5jb2RpbmcpIDogXCJ1dGY4XCI7XG4gIHJldHVybiBCdWZmZXIuYnl0ZUxlbmd0aChjb250ZW50LCByZXNvbHZlZCk7XG59XG5cbi8qKlxuICogUmVqZWN0IGEgbWVzc2FnZSB3aG9zZSBib2R5IG9yIGF0dGFjaG1lbnRzIGV4Y2VlZCB0aGUgcGx1Z2luJ3MgY2Fwcy4gVGhlXG4gKiBib2R5IGFuZCBhdHRhY2htZW50IGxpc3QgYXJyaXZlIGZyb20gYSBtb2RlbCwgc28gdGhleSBhcmUgdW5ib3VuZGVkIHVudGlsXG4gKiBzb21ldGhpbmcgYm91bmRzIHRoZW07IG1vc3QgU01UUCByZWxheXMgYWxzbyByZWplY3QgYW4gb3ZlcnNpemVkIG1lc3NhZ2VcbiAqIG9ubHkgYWZ0ZXIgdGhlIHdob2xlIHBheWxvYWQgaGFzIGJlZW4gdXBsb2FkZWQuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE1lc3NhZ2VXaXRoaW5DYXBzKG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSk6IHZvaWQge1xuICBpZiAobWVzc2FnZS5ib2R5Lmxlbmd0aCA+IE1BWF9CT0RZX0NIQVJTKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFwiYm9keVwiLFxuICAgICAgbWVzc2FnZS5ib2R5Lmxlbmd0aCxcbiAgICAgIGBhdCBtb3N0ICR7TUFYX0JPRFlfQ0hBUlN9IGNoYXJhY3RlcnNgLFxuICAgICk7XG4gIH1cbiAgY29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzID8/IFtdO1xuICBpZiAoYXR0YWNobWVudHMubGVuZ3RoID4gTUFYX0FUVEFDSE1FTlRfQ09VTlQpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgXCJhdHRhY2htZW50c1wiLFxuICAgICAgYXR0YWNobWVudHMubGVuZ3RoLFxuICAgICAgYGF0IG1vc3QgJHtNQVhfQVRUQUNITUVOVF9DT1VOVH0gZmlsZXNgLFxuICAgICk7XG4gIH1cbiAgbGV0IHRvdGFsID0gMDtcbiAgZm9yIChjb25zdCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzKSB7XG4gICAgY29uc3QgYnl0ZXMgPSBhdHRhY2htZW50Qnl0ZXMoYXR0YWNobWVudCk7XG4gICAgaWYgKGJ5dGVzID4gTUFYX0FUVEFDSE1FTlRfQllURVMpIHtcbiAgICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICAgIFwiYXR0YWNobWVudHNbXS5jb250ZW50XCIsXG4gICAgICAgIGJ5dGVzLFxuICAgICAgICBgYXQgbW9zdCAke01BWF9BVFRBQ0hNRU5UX0JZVEVTfSBieXRlcyBwZXIgZmlsZWAsXG4gICAgICApO1xuICAgIH1cbiAgICB0b3RhbCArPSBieXRlcztcbiAgfVxuICBpZiAodG90YWwgPiBNQVhfQVRUQUNITUVOVFNfVE9UQUxfQllURVMpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgXCJhdHRhY2htZW50c1wiLFxuICAgICAgdG90YWwsXG4gICAgICBgYXQgbW9zdCAke01BWF9BVFRBQ0hNRU5UU19UT1RBTF9CWVRFU30gYnl0ZXMgYWNyb3NzIGFsbCBmaWxlc2AsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIE1hcCB0aGUgd2lyZS1mb3JtYXQge0BsaW5rIEVtYWlsQXR0YWNobWVudH1zIG9udG8gbm9kZW1haWxlcidzXG4gKiBhdHRhY2htZW50IHNoYXBlLCBkcm9wcGluZyB1bnNldCBvcHRpb25hbCBrZXlzIHNvIG5vZGVtYWlsZXIgYXBwbGllc1xuICogaXRzIG93biBkZWZhdWx0cyAodXRmLTggZW5jb2RpbmcsIGZpbGVuYW1lLWluZmVycmVkIGNvbnRlbnQgdHlwZSkuIFRoZVxuICogd2lyZSBmaWVsZHMgYXJlIGEgZGVsaWJlcmF0ZSBzdWJzZXQgb2Ygbm9kZW1haWxlcidzLCBzbyB0aGlzIGlzIGFcbiAqIHN0cmFpZ2h0IHN0cnVjdHVyYWwgcGFzcy10aHJvdWdoLlxuICovXG5mdW5jdGlvbiB0b01haWxBdHRhY2htZW50cyhcbiAgYXR0YWNobWVudHM6IEVtYWlsQXR0YWNobWVudFtdIHwgdW5kZWZpbmVkLFxuKTogU2VuZE1haWxPcHRpb25zW1wiYXR0YWNobWVudHNcIl0ge1xuICBpZiAoIWF0dGFjaG1lbnRzIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGF0dGFjaG1lbnRzLm1hcCgoYXR0KSA9PiAoe1xuICAgIGZpbGVuYW1lOiBhdHQuZmlsZW5hbWUsXG4gICAgLi4uKGF0dC5jb250ZW50ICE9PSB1bmRlZmluZWQgPyB7IGNvbnRlbnQ6IGF0dC5jb250ZW50IH0gOiB7fSksXG4gICAgLi4uKGF0dC5lbmNvZGluZyAhPT0gdW5kZWZpbmVkID8geyBlbmNvZGluZzogYXR0LmVuY29kaW5nIH0gOiB7fSksXG4gICAgLi4uKGF0dC5wYXRoICE9PSB1bmRlZmluZWQgPyB7IHBhdGg6IGF0dC5wYXRoIH0gOiB7fSksXG4gICAgLi4uKGF0dC5jb250ZW50VHlwZSAhPT0gdW5kZWZpbmVkID8geyBjb250ZW50VHlwZTogYXR0LmNvbnRlbnRUeXBlIH0gOiB7fSksXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBIYW5kIG9uZSBhbHJlYWR5LXZhbGlkYXRlZCBtZXNzYWdlIHRvIFNNVFAsIG9yIHdyaXRlIGl0IHRvIHRoZSBvdXRib3ggd2hlblxuICogbm8gY3JlZGVudGlhbHMgYXJlIGNvbmZpZ3VyZWQuIFRoZSBoYWxmIG9mIGEgc2VuZCB0aGF0IHBlcmZvcm1zIEkvTywgc28gaXRcbiAqIGlzIHdoYXQgcnVucyBpbnNpZGUgdGhlIGludGVyY2VwdG9yIGNoYWluLlxuICovXG5hc3luYyBmdW5jdGlvbiBkaXNwYXRjaChcbiAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICBmcm9tOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4ge1xuICBjb25zdCB7IGNvbmZpZywgdHJhbnNwb3J0ZXIgfSA9IGdldEVtYWlsUnVudGltZSgpO1xuICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRFY2hvKG1lc3NhZ2UudG8pO1xuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgaWYgKGNvbmZpZy5tb2RlID09PSBcImZpbGVcIikge1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZU91dGJveEVtYWlsKG1lc3NhZ2UsIGZyb20sIGNvbmZpZy5vdXREaXIsIGNvbmZpZy5icmFuZCk7XG4gICAgcmV0dXJuIHsgc2VudDogdHJ1ZSwgcmVjaXBpZW50LCBmcm9tLCBtZXNzYWdlSWQ6IHBhdGggfTtcbiAgfVxuXG4gIGlmICghdHJhbnNwb3J0ZXIpIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICBcIlNNVFBcIixcbiAgICAgIFwiTm8gdHJhbnNwb3J0IHdhcyBidWlsdCBmb3IgdGhlIHJlc29sdmVkIGNvbmZpZ3VyYXRpb24uXCIsXG4gICAgKTtcbiAgfVxuICBjb25zdCBhdHRhY2htZW50cyA9IHRvTWFpbEF0dGFjaG1lbnRzKG1lc3NhZ2UuYXR0YWNobWVudHMpO1xuICBjb25zdCByZW5kZXJlZCA9IGF3YWl0IHJlbmRlckVtYWlsKHtcbiAgICBzdWJqZWN0OiBtZXNzYWdlLnN1YmplY3QsXG4gICAgYm9keTogbWVzc2FnZS5ib2R5LFxuICAgIGJyYW5kOiBjb25maWcuYnJhbmQsXG4gIH0pO1xuICBjb25zdCBpbmZvID0gYXdhaXQgYWJvcnRhYmxlKFxuICAgIHRyYW5zcG9ydGVyLnNlbmRNYWlsKHtcbiAgICAgIGZyb20sXG4gICAgICB0bzogbWVzc2FnZS50byxcbiAgICAgIHN1YmplY3Q6IG1lc3NhZ2Uuc3ViamVjdCxcbiAgICAgIHRleHQ6IHJlbmRlcmVkLnRleHQsXG4gICAgICBodG1sOiByZW5kZXJlZC5odG1sLFxuICAgICAgLi4uKG1lc3NhZ2UuY2MgJiYgbWVzc2FnZS5jYy5sZW5ndGggPiAwID8geyBjYzogbWVzc2FnZS5jYyB9IDoge30pLFxuICAgICAgLi4uKG1lc3NhZ2UuYmNjICYmIG1lc3NhZ2UuYmNjLmxlbmd0aCA+IDAgPyB7IGJjYzogbWVzc2FnZS5iY2MgfSA6IHt9KSxcbiAgICAgIC4uLihhdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICB9KSxcbiAgICBzaWduYWwsXG4gICk7XG4gIHJldHVybiB7XG4gICAgc2VudDogdHJ1ZSxcbiAgICByZWNpcGllbnQsXG4gICAgZnJvbSxcbiAgICAuLi4oaW5mby5tZXNzYWdlSWQgPyB7IG1lc3NhZ2VJZDogaW5mby5tZXNzYWdlSWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBTZW5kIChTTVRQIG1vZGUpIG9yIHBlcnNpc3QgKGZpbGUvb3V0Ym94IG1vZGUpIG9uZSBtZXNzYWdlIGZyb20gdGhlXG4gKiByZXNvbHZlZCBgZnJvbWAgYWRkcmVzcy4gYHRvYCAoYW5kIG9wdGlvbmFsIGBjY2AgLyBgYmNjYCkgZWFjaCBhY2NlcHRcbiAqIG9uZSBvciBtb3JlIGFkZHJlc3NlcywgYW5kIGBhdHRhY2htZW50c2AgYXJlIGZvcndhcmRlZCBhcyBmaWxlcy4gVGhlXG4gKiBib2R5IGlzIHJlbmRlcmVkIGJ5IFJlYWN0IEVtYWlsIGludG8gbWF0Y2hpbmcgcGxhaW4tdGV4dCBhbmQgSFRNTCBNSU1FXG4gKiBhbHRlcm5hdGl2ZXMsIGFuZCB0aGUgb3V0Ym94IGVtYmVkcyB0aGVcbiAqIHJlbmRlcmVkIEhUTUwgaW4gYSBkb2N1bWVudC4gSW4gZmlsZSBtb2RlIHRoZSByZXR1cm5lZCBgbWVzc2FnZUlkYCBpc1xuICogdGhlIHBhdGggd3JpdHRlbi4gVGhyb3dzIHdoZW4gYHRvYCBjYXJyaWVzIG5vIHJlY2lwaWVudCwgd2hlbiB0aGUgYm9keVxuICogb3IgYXR0YWNobWVudHMgZXhjZWVkIHRoZSBwbHVnaW4ncyBjYXBzLCBvciB3aGVuIGBmcm9tYCBpcyBub3QgcGVybWl0dGVkXG4gKiBieSB0aGUgZWZmZWN0aXZlIHNlbmRlciBhbGxvdy1saXN0LlxuICpcbiAqIFRoZSByZWNpcGllbnQsIGNhcCwgYW5kIHNlbmRlciBjaGVja3MgcnVuIGJlZm9yZSB0aGUgaW50ZXJjZXB0b3IgY2hhaW4gc29cbiAqIHRoZWlyIHNwZWNpZmljIHN0YXR1cyBhbmQgYWN0aW9uYWJsZSBtZXNzYWdlIHJlYWNoIHRoZSBjYWxsZXIgaW5zdGVhZCBvZlxuICogdGhlIGNoYWluJ3Mgc3RhYmxlIGZhaWx1cmUgdGV4dC4gYHNpZ25hbGAgY2FuY2VscyB0aGUgc2VuZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRFbWFpbChcbiAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICBmcm9tOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4ge1xuICBpZiAobWVzc2FnZS50by5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IubWlzc2luZ0ZpZWxkKFwidG9cIik7XG4gIH1cbiAgYXNzZXJ0TWVzc2FnZVdpdGhpbkNhcHMobWVzc2FnZSk7XG4gIGFzc2VydFNlbmRlckFsbG93ZWQoZnJvbSwgZ2V0RW1haWxSdW50aW1lKCkuY29uZmlnLmFsbG93ZWRTZW5kZXJzKTtcbiAgcmV0dXJuIGV4ZWN1dGVXcml0ZShcbiAgICBcInNlbmRcIixcbiAgICBFTUFJTF9TRU5EX1NFVFRJTkdTLFxuICAgIChleGVjdXRlU2lnbmFsKSA9PiBkaXNwYXRjaChtZXNzYWdlLCBmcm9tLCBleGVjdXRlU2lnbmFsKSxcbiAgICBzaWduYWwsXG4gICk7XG59XG4iXX0=
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/brand.ts","../src/config.ts","../src/defaults.ts","../src/email-html.ts","../src/
|
|
1
|
+
{"root":["../src/brand.ts","../src/config.ts","../src/defaults.ts","../src/email-html.ts","../src/markdown.ts","../src/outbox.ts","../src/plugin.ts","../src/sender.ts","../src/tool.ts","../src/transport.ts","../index.ts"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -27,12 +27,14 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"@databricks/appkit": "^0.43.0",
|
|
30
|
-
"@dbx-tools/shared-core": "0.6.
|
|
31
|
-
"@dbx-tools/shared-email": "0.6.
|
|
30
|
+
"@dbx-tools/shared-core": "0.6.49",
|
|
31
|
+
"@dbx-tools/shared-email": "0.6.49",
|
|
32
|
+
"@dbx-tools/shared-email-template": "0.6.49",
|
|
32
33
|
"@mastra/core": "^1.47.0",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
34
|
+
"@react-email/render": "^2.1.0",
|
|
35
|
+
"nodemailer": "^7.0.13",
|
|
36
|
+
"react": "^19.2.4",
|
|
37
|
+
"react-dom": "^19.2.4"
|
|
36
38
|
},
|
|
37
39
|
"main": "./lib/index.js",
|
|
38
40
|
"license": "UNLICENSED",
|
|
@@ -48,7 +50,7 @@
|
|
|
48
50
|
"./package.json": "./package.json"
|
|
49
51
|
}
|
|
50
52
|
},
|
|
51
|
-
"version": "0.6.
|
|
53
|
+
"version": "0.6.49",
|
|
52
54
|
"types": "./lib/index.d.ts",
|
|
53
55
|
"type": "module",
|
|
54
56
|
"exports": {
|
package/src/brand.ts
CHANGED
|
@@ -1,64 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* small, email-safe slice of a brand a message actually needs - an accent
|
|
4
|
-
* color, a font stack, a display name, and an optional logo image - and
|
|
5
|
-
* {@link emailBrandFromContext} derives it from the portable `BrandContext`
|
|
6
|
-
* shared across the UI and libraries.
|
|
2
|
+
* Email brand compatibility exports.
|
|
7
3
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* by inlining these values at render time. A logo is only emitted when it's
|
|
11
|
-
* a fetchable `http(s):` or `data:` URL - a package-export path (the default
|
|
12
|
-
* asset form) can't resolve in an inbox, so it's dropped rather than shown
|
|
13
|
-
* as a broken image.
|
|
4
|
+
* The universal brand contract and defaults live with the shared React Email
|
|
5
|
+
* template so Node delivery and browser previews cannot drift.
|
|
14
6
|
*
|
|
15
7
|
* @module
|
|
16
8
|
*/
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
/** Text and logo color rendered on the accent band. Defaults to white. */
|
|
24
|
-
onAccent?: string;
|
|
25
|
-
/** Body font stack. */
|
|
26
|
-
fontFamily: string;
|
|
27
|
-
/** Product/display name, used as the header text and the logo `alt`. */
|
|
28
|
-
name?: string;
|
|
29
|
-
/**
|
|
30
|
-
* Logo image rendered in the header band. Only an `http(s):` or `data:`
|
|
31
|
-
* URL renders; other values (e.g. a package-export path) are ignored,
|
|
32
|
-
* since they can't load in a mail client.
|
|
33
|
-
*/
|
|
34
|
-
logoUrl?: string;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/** Whether `value` is an image reference a mail client can actually load. */
|
|
38
|
-
function isRenderableImageUrl(value: string | undefined): value is string {
|
|
39
|
-
return typeof value === "string" && /^(?:https?:|data:)/i.test(value);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Derive the email-safe {@link EmailBrand} from a full brand context: the
|
|
44
|
-
* primary color as the accent, the sans font stack, the display name, and
|
|
45
|
-
* the dark-surface logo (the header band is dark) when it's a renderable URL.
|
|
46
|
-
*/
|
|
47
|
-
export function emailBrandFromContext(context: BrandContext): EmailBrand {
|
|
48
|
-
const logo = context.assets.logo.dark ?? context.assets.logo.light;
|
|
49
|
-
return {
|
|
50
|
-
accent: context.colors.primary,
|
|
51
|
-
onAccent: "#ffffff",
|
|
52
|
-
fontFamily: context.typography.sans,
|
|
53
|
-
name: context.name,
|
|
54
|
-
...(isRenderableImageUrl(logo) ? { logoUrl: logo } : {}),
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* The dbx-tools brand as an {@link EmailBrand}, ready to pass to the email
|
|
60
|
-
* plugin (`email({ brand: defaultEmailBrand })`). Convenience so a consumer
|
|
61
|
-
* needs only `@dbx-tools/email`, not the shared brand context, for the
|
|
62
|
-
* common case of the default brand.
|
|
63
|
-
*/
|
|
64
|
-
export const defaultEmailBrand: EmailBrand = emailBrandFromContext(brand.defaultBrandContext);
|
|
9
|
+
export {
|
|
10
|
+
defaultEmailBrand,
|
|
11
|
+
emailBrandFromContext,
|
|
12
|
+
resolveEmailBrand,
|
|
13
|
+
} from "@dbx-tools/shared-email-template";
|
|
14
|
+
export type { EmailBrand, ResolvedEmailBrand } from "@dbx-tools/shared-email-template";
|