@dbx-tools/appkit-mastra 0.6.211 → 0.6.213

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.
@@ -17,11 +17,10 @@
17
17
  *
18
18
  * @module
19
19
  */
20
- import { ValidationError } from "@databricks/appkit";
21
20
  import { error, log } from "@dbx-tools/shared-core";
22
21
  import { toAISdkV5Messages } from "@mastra/ai-sdk/ui";
23
- import { MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY } from "@mastra/core/request-context";
24
22
  import { registerApiRoute } from "@mastra/core/server";
23
+ import { resolveAgentRequestContext, resolveAgentRouteOptions, } from "./_agent-route-context.js";
25
24
  import { clampPerPage, parseIntParam } from "./pagination.js";
26
25
  const logger = log.logger("mastra/history");
27
26
  /** Default history page size; matches the Mastra storage default. */
@@ -167,47 +166,12 @@ export async function clearHistory(opts) {
167
166
  * no cookie or user lookups happen here.
168
167
  */
169
168
  export function historyRoute(options) {
170
- const { path } = options;
171
- const fixedAgent = "agent" in options ? options.agent : undefined;
172
- if (!fixedAgent && !path.includes(":agentId")) {
173
- throw ValidationError.invalidValue("historyRoute.path", path, "a path containing `:agentId`, or an explicit `agent`");
174
- }
175
- // Tiny resolver shared by GET / DELETE: derive the active agent
176
- // and thread id, returning a JSON error response when either is
177
- // missing. Keeps both handlers thin and gives them identical
178
- // validation behaviour.
179
- const resolveContext = (c) => {
180
- const mastra = c.get("mastra");
181
- const requestContext = c.get("requestContext");
182
- const agentId = fixedAgent ?? c.req.param("agentId");
183
- if (!agentId) {
184
- return { error: c.json({ error: "agentId is required" }, 400) };
185
- }
186
- const agent = mastra.getAgentById(agentId);
187
- if (!agent) {
188
- return {
189
- error: c.json({ error: `Unknown agent "${agentId}"` }, 404),
190
- };
191
- }
192
- const threadId = requestContext.get(MASTRA_THREAD_ID_KEY);
193
- if (!threadId) {
194
- return {
195
- error: c.json({ error: "thread id missing from request context" }, 400),
196
- };
197
- }
198
- const resourceId = requestContext.get(MASTRA_RESOURCE_ID_KEY);
199
- if (!resourceId) {
200
- return {
201
- error: c.json({ error: "resource id missing from request context" }, 400),
202
- };
203
- }
204
- return { agentId, agent, threadId, resourceId };
205
- };
169
+ const { path, fixedAgent } = resolveAgentRouteOptions(options, "historyRoute.path");
206
170
  return [
207
171
  registerApiRoute(path, {
208
172
  method: "GET",
209
173
  handler: async (c) => {
210
- const ctx = resolveContext(c);
174
+ const ctx = resolveAgentRequestContext(c, { fixedAgent, threadId: "required" });
211
175
  if ("error" in ctx)
212
176
  return ctx.error;
213
177
  const payload = await loadHistory({
@@ -223,7 +187,7 @@ export function historyRoute(options) {
223
187
  registerApiRoute(path, {
224
188
  method: "DELETE",
225
189
  handler: async (c) => {
226
- const ctx = resolveContext(c);
190
+ const ctx = resolveAgentRequestContext(c, { fixedAgent, threadId: "required" });
227
191
  if ("error" in ctx)
228
192
  return ctx.error;
229
193
  const { cleared } = await clearHistory({
@@ -264,4 +228,4 @@ function toEpoch(value) {
264
228
  }
265
229
  return 0;
266
230
  }
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oaXN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU1wRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUU1QyxxRUFBcUU7QUFDckUsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFDNUIsNkVBQTZFO0FBQzdFLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztBQWF6Qjs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsV0FBVyxDQUFDLElBQXdCO0lBQ3hELE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1FBQ3pDLFFBQVEsRUFBRSxnQkFBZ0I7UUFDMUIsR0FBRyxFQUFFLFlBQVk7S0FDbEIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMs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QyxTQUFTLENBQUMsQ0FBQztRQUNoQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxLQUFjO0lBQzdCLElBQUksS0FBSyxZQUFZLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6QyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNDLENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRocmVhZCBoaXN0b3J5IGxvYWRlciBleHBvc2VkIGFzIGEgTWFzdHJhIGN1c3RvbSBBUEkgcm91dGUuXG4gKlxuICogQmFja2VkIGVudGlyZWx5IGJ5IG5hdGl2ZSBNYXN0cmE6IGxvb2tzIHVwIHRoZSBhY3RpdmUgYWdlbnQgYnkgaWQsXG4gKiBhc2tzIGl0cyBgTWVtb3J5YCBpbnN0YW5jZSB0byBgcmVjYWxsYCBhIHBhZ2Ugb2YgYE1hc3RyYURCTWVzc2FnZWBzLFxuICogYW5kIGNvbnZlcnRzIHRoZSByZXN1bHQgdG8gQUkgU0RLIFY1IGBVSU1lc3NhZ2VgcyB3aXRoIHRoZSBvZmZpY2lhbFxuICoge0BsaW5rIHRvQUlTZGtWNU1lc3NhZ2VzfSBoZWxwZXIgZnJvbSBgQG1hc3RyYS9haS1zZGsvdWlgLiBObyBkaXJlY3RcbiAqIGRhdGFiYXNlIHJlYWRzLlxuICpcbiAqIFRoZSByb3V0ZSBpcyByZWdpc3RlcmVkIHRocm91Z2gge0BsaW5rIGhpc3RvcnlSb3V0ZX0gYXMgYSBNYXN0cmFcbiAqIGByZWdpc3RlckFwaVJvdXRlYCBzbyBpdCBzaXRzIGluIHRoZSBzYW1lIGRpc3BhdGNoZXIgcGlwZWxpbmUgYXNcbiAqIHRoZSBzdGFuZGFyZCBhZ2VudCByb3V0ZXMuIFRoYXQgbWVhbnMgdGhlIGBNYXN0cmFTZXJ2ZXJgIGF1dGhcbiAqIG1pZGRsZXdhcmUgKGluIGAuL3NlcnZlci50c2ApIGhhcyBhbHJlYWR5IHBvcHVsYXRlZCBgUmVxdWVzdENvbnRleHRgIHdpdGhcbiAqIGBNQVNUUkFfVEhSRUFEX0lEX0tFWWAgYW5kIGBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZYCBieSB0aGUgdGltZVxuICogdGhlIGhhbmRsZXIgcnVucyAtIG5vIGNvb2tpZSBvciB1c2VyIGxvb2t1cHMgaGFwcGVuIGhlcmUsIGFuZCB0aGVcbiAqIHNlc3Npb24tY29va2llIGxvZ2ljIHN0YXlzIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIGluIGBzZXJ2ZXIudHNgLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvciwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHtcbiAgTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2UsXG4gIE1hc3RyYUhpc3RvcnlSZXNwb25zZSxcbiAgTWFzdHJhSGlzdG9yeVVJTWVzc2FnZSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1hc3RyYVwiO1xuaW1wb3J0IHsgdG9BSVNka1Y1TWVzc2FnZXMgfSBmcm9tIFwiQG1hc3RyYS9haS1zZGsvdWlcIjtcbmltcG9ydCB0eXBlIHsgQWdlbnQgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2FnZW50XCI7XG5pbXBvcnQgdHlwZSB7IE1hc3RyYURCTWVzc2FnZSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvYWdlbnQvbWVzc2FnZS1saXN0XCI7XG5pbXBvcnQgeyBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLCBNQVNUUkFfVEhSRUFEX0lEX0tFWSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IENvbnRleHRXaXRoTWFzdHJhIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9zZXJ2ZXJcIjtcbmltcG9ydCB7IHJlZ2lzdGVyQXBpUm91dGUgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3NlcnZlclwiO1xuXG5pbXBvcnQgeyBjbGFtcFBlclBhZ2UsIHBhcnNlSW50UGFyYW0gfSBmcm9tIFwiLi9wYWdpbmF0aW9uLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvaGlzdG9yeVwiKTtcblxuLyoqIERlZmF1bHQgaGlzdG9yeSBwYWdlIHNpemU7IG1hdGNoZXMgdGhlIE1hc3RyYSBzdG9yYWdlIGRlZmF1bHQuICovXG5jb25zdCBERUZBVUxUX1BFUl9QQUdFID0gMjA7XG4vKiogSGFyZCBjYXAgc28gYSBtaXNiZWhhdmluZyBjbGllbnQgY2FuJ3QgZmV0Y2ggdGhlIHdob2xlIHRocmVhZCBhdCBvbmNlLiAqL1xuY29uc3QgTUFYX1BFUl9QQUdFID0gMjAwO1xuXG4vKiogSW5wdXRzIGFjY2VwdGVkIGJ5IHtAbGluayBsb2FkSGlzdG9yeX0uICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRIaXN0b3J5T3B0aW9ucyB7XG4gIGFnZW50OiBBZ2VudDtcbiAgdGhyZWFkSWQ6IHN0cmluZztcbiAgcmVzb3VyY2VJZDogc3RyaW5nO1xuICBwYWdlPzogbnVtYmVyO1xuICBwZXJQYWdlPzogbnVtYmVyO1xuICAvKiogV2hlbiB0cnVlLCByZXR1cm5zIHRoZSAqb2xkZXN0KiBwYWdlIGZpcnN0IChjaHJvbm9sb2dpY2FsKS4gKi9cbiAgYXNjZW5kaW5nPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGZXRjaCBhIHBhZ2Ugb2YgVUktZm9ybWF0dGVkIG1lc3NhZ2VzIGZvciBhIHRocmVhZC5cbiAqXG4gKiBVc2VzIHRoZSBhZ2VudCdzIHJlc29sdmVkIGBNZW1vcnlgIChgZ2V0TWVtb3J5KClgKSBzbyBwZXItYWdlbnRcbiAqIHN0b3JhZ2UgbmFtZXNwYWNlcyAoYG1hc3RyYV88YWdlbnRJZD5gIHNjaGVtYXMpIGFuZCBhbnkgZnV0dXJlXG4gKiBtZW1vcnktc2lkZSBmaWx0ZXJzIGFwcGx5IGF1dG9tYXRpY2FsbHkuIFdoZW4gdGhlIGFnZW50IGhhcyBub1xuICogbWVtb3J5IGNvbmZpZ3VyZWQgdGhlIHJlc3BvbnNlIGlzIGEgc3VjY2Vzc2Z1bCBlbXB0eSBwYWdlIHNvXG4gKiBjYWxsZXJzIGRvbid0IGhhdmUgdG8gc3BlY2lhbC1jYXNlIHN0YXRlbGVzcyBhZ2VudHMuXG4gKlxuICogUGFnaW5hdGlvbiBpcyBkZXNjZW5kaW5nLWJ5LWRlZmF1bHQ6IHBhZ2UgMCBpcyB0aGUgbW9zdCByZWNlbnRcbiAqIHBhZ2UsIHBhZ2UgMSB0aGUgcGFnZSBiZWZvcmUgdGhhdCwgZXRjLiBUaGUgcmV0dXJuZWQgYHVpTWVzc2FnZXNgXG4gKiBhcmUgYWx3YXlzIHJlLXNvcnRlZCBpbnRvIGNocm9ub2xvZ2ljYWwgb3JkZXIgKG9sZGVzdCAtPiBuZXdlc3QpXG4gKiBzbyB0aGUgY2xpZW50IGNhbiBwcmVwZW5kIHRoZW0gYWJvdmUgdGhlIGV4aXN0aW5nIHRyYW5zY3JpcHRcbiAqIHdpdGhvdXQgc29ydGluZyBsb2NhbGx5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEhpc3Rvcnkob3B0czogTG9hZEhpc3RvcnlPcHRpb25zKTogUHJvbWlzZTxNYXN0cmFIaXN0b3J5UmVzcG9uc2U+IHtcbiAgY29uc3QgcGVyUGFnZSA9IGNsYW1wUGVyUGFnZShvcHRzLnBlclBhZ2UsIHtcbiAgICBmYWxsYmFjazogREVGQVVMVF9QRVJfUEFHRSxcbiAgICBtYXg6IE1BWF9QRVJfUEFHRSxcbiAgfSk7XG4gIGNvbnN0IHBhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnRydW5jKG9wdHMucGFnZSA/PyAwKSk7XG4gIGNvbnN0IG1lbW9yeSA9IGF3YWl0IG9wdHMuYWdlbnQuZ2V0TWVtb3J5KCk7XG4gIGlmICghbWVtb3J5KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVjYWxsOm5vLW1lbW9yeVwiLCB7IGFnZW50SWQ6IG9wdHMuYWdlbnQuaWQsIHRocmVhZElkOiBvcHRzLnRocmVhZElkIH0pO1xuICAgIHJldHVybiB7IHVpTWVzc2FnZXM6IFtdLCBwYWdlLCBwZXJQYWdlLCB0b3RhbDogMCwgaGFzTW9yZTogZmFsc2UgfTtcbiAgfVxuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBtZW1vcnkucmVjYWxsKHtcbiAgICB0aHJlYWRJZDogb3B0cy50aHJlYWRJZCxcbiAgICByZXNvdXJjZUlkOiBvcHRzLnJlc291cmNlSWQsXG4gICAgcGFnZSxcbiAgICBwZXJQYWdlLFxuICAgIG9yZGVyQnk6IHtcbiAgICAgIGZpZWxkOiBcImNyZWF0ZWRBdFwiLFxuICAgICAgZGlyZWN0aW9uOiBvcHRzLmFzY2VuZGluZyA/IFwiQVNDXCIgOiBcIkRFU0NcIixcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2hyb25vbG9naWNhbCA9IHNvcnRDaHJvbm9sb2dpY2FsKHJlc3VsdC5tZXNzYWdlcyk7XG4gIGNvbnN0IHVpTWVzc2FnZXMgPSB0b0FJU2RrVjVNZXNzYWdlcyhjaHJvbm9sb2dpY2FsKSBhcyB1bmtub3duIGFzIE1hc3RyYUhpc3RvcnlVSU1lc3NhZ2VbXTtcbiAgbG9nZ2VyLmRlYnVnKFwicmVjYWxsOmRvbmVcIiwge1xuICAgIGFnZW50SWQ6IG9wdHMuYWdlbnQuaWQsXG4gICAgdGhyZWFkSWQ6IG9wdHMudGhyZWFkSWQsXG4gICAgcGFnZSxcbiAgICBwZXJQYWdlLFxuICAgIHJldHVybmVkOiB1aU1lc3NhZ2VzLmxlbmd0aCxcbiAgICB0b3RhbDogcmVzdWx0LnRvdGFsLFxuICAgIGhhc01vcmU6IHJlc3VsdC5oYXNNb3JlLFxuICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdWlNZXNzYWdlcyxcbiAgICBwYWdlLFxuICAgIHBlclBhZ2UsXG4gICAgdG90YWw6IHJlc3VsdC50b3RhbCxcbiAgICBoYXNNb3JlOiByZXN1bHQuaGFzTW9yZSxcbiAgfTtcbn1cblxuLyoqIElucHV0cyBhY2NlcHRlZCBieSB7QGxpbmsgY2xlYXJIaXN0b3J5fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYXJIaXN0b3J5T3B0aW9ucyB7XG4gIGFnZW50OiBBZ2VudDtcbiAgdGhyZWFkSWQ6IHN0cmluZztcbiAgcmVzb3VyY2VJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdpcGUgZXZlcnkgcGVyc2lzdGVkIG1lc3NhZ2UgdGllZCB0byBhIHRocmVhZC4gUmV0dXJucyB0aGUgY291bnRcbiAqIG9mIG1lc3NhZ2VzIHRoYXQgd2VyZSBvbiB0aGUgdGhyZWFkIGF0IGRlbGV0ZSB0aW1lIHNvIHRoZSBjYWxsZXJcbiAqIGNhbiByZW5kZXIgYSBcImNsZWFyZWQgTiBtZXNzYWdlc1wiIGFmZm9yZGFuY2Ugd2l0aG91dCBhblxuICogYWRkaXRpb25hbCByb3VuZC10cmlwLlxuICpcbiAqIEFnZW50cyB3aXRob3V0IGEgY29uZmlndXJlZCBgTWVtb3J5YCByZXNvbHZlIHRvIGEgbm8tb3AgKGNvdW50XG4gKiAwKSwgbWF0Y2hpbmcge0BsaW5rIGxvYWRIaXN0b3J5fSdzIFwic3RhdGVsZXNzIGFnZW50cyByZXR1cm4gYW5cbiAqIGVtcHR5IHBhZ2VcIiBzdGFuY2Ugc28gY2FsbGVycyBkb24ndCBoYXZlIHRvIHNwZWNpYWwtY2FzZSB0aGVtLlxuICogVGhyZWFkcyB0aGF0IGRvbid0IGV4aXN0IHlldCBhcmUgYWxzbyBhIHN1Y2Nlc3NmdWwgbm8tb3AgLSB0aGVcbiAqIG9wZXJhdGlvbiBpcyBpZGVtcG90ZW50IHNvIHRoZSBVSSBjYW4gZmlyZS1hbmQtZm9yZ2V0IHdpdGhvdXRcbiAqIHRyYWNraW5nIHRocmVhZCBleGlzdGVuY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGVhckhpc3Rvcnkob3B0czogQ2xlYXJIaXN0b3J5T3B0aW9ucyk6IFByb21pc2U8eyBjbGVhcmVkOiBudW1iZXIgfT4ge1xuICBjb25zdCBtZW1vcnkgPSBhd2FpdCBvcHRzLmFnZW50LmdldE1lbW9yeSgpO1xuICBpZiAoIW1lbW9yeSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNsZWFyOm5vLW1lbW9yeVwiLCB7IGFnZW50SWQ6IG9wdHMuYWdlbnQuaWQsIHRocmVhZElkOiBvcHRzLnRocmVhZElkIH0pO1xuICAgIHJldHVybiB7IGNsZWFyZWQ6IDAgfTtcbiAgfVxuICBjb25zdCBleGlzdGluZyA9IGF3YWl0IG1lbW9yeS5nZXRUaHJlYWRCeUlkKHsgdGhyZWFkSWQ6IG9wdHMudGhyZWFkSWQgfSk7XG4gIGlmICghZXhpc3RpbmcgfHwgZXhpc3RpbmcucmVzb3VyY2VJZCAhPT0gb3B0cy5yZXNvdXJjZUlkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY2xlYXI6bm90LW93bmVkXCIsIHtcbiAgICAgIGFnZW50SWQ6IG9wdHMuYWdlbnQuaWQsXG4gICAgICB0aHJlYWRJZDogb3B0cy50aHJlYWRJZCxcbiAgICAgIGZvdW5kOiBleGlzdGluZyAhPT0gbnVsbCxcbiAgICB9KTtcbiAgICByZXR1cm4geyBjbGVhcmVkOiAwIH07XG4gIH1cbiAgLy8gTWFzdHJhJ3MgYGRlbGV0ZVRocmVhZGAgY2FzY2FkZXMgdG8gdGhlIG1lc3NhZ2UgdGFibGUsIHNvIHdlXG4gIC8vIGNhbid0IGFzayBmb3IgYSBjb3VudCBhZnRlciB0aGUgZmFjdC4gUmVhZCBpdCBwcmUtZGVsZXRlIHdpdGggYVxuICAvLyBvbmUtcGFnZSByZWNhbGwgc2l6ZWQgdG8gZml0IGNvbW1vbiB0aHJlYWRzIGluIGEgc2luZ2xlIHJvdW5kXG4gIC8vIHRyaXA7IHRoZSB2YWx1ZSBpcyBmb3IgdGVsZW1ldHJ5IC8gVUksIG5vdCBjb3JyZWN0bmVzcy5cbiAgbGV0IGNsZWFyZWQgPSAwO1xuICB0cnkge1xuICAgIGNvbnN0IHByb2JlID0gYXdhaXQgbWVtb3J5LnJlY2FsbCh7XG4gICAgICB0aHJlYWRJZDogb3B0cy50aHJlYWRJZCxcbiAgICAgIHJlc291cmNlSWQ6IG9wdHMucmVzb3VyY2VJZCxcbiAgICAgIHBhZ2U6IDAsXG4gICAgICBwZXJQYWdlOiAxLFxuICAgIH0pO1xuICAgIGNsZWFyZWQgPSBwcm9iZS50b3RhbDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQSBtaXNzaW5nLXRocmVhZCBlcnJvciBpcyB0aGUgaGFwcHktcGF0aCBcIm5vdGhpbmcgdG8gY291bnRcIjtcbiAgICAvLyBldmVyeSBvdGhlciBlcnJvciBpcyBsb2dnZWQgYnV0IGRvZXNuJ3QgYmxvY2sgdGhlIGRlbGV0ZS5cbiAgICBsb2dnZXIuZGVidWcoXCJjbGVhcjpwcm9iZS1mYWlsZWRcIiwge1xuICAgICAgYWdlbnRJZDogb3B0cy5hZ2VudC5pZCxcbiAgICAgIHRocmVhZElkOiBvcHRzLnRocmVhZElkLFxuICAgICAgZXJyb3I6IGVycm9yLmVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgYXdhaXQgbWVtb3J5LmRlbGV0ZVRocmVhZChvcHRzLnRocmVhZElkKTtcbiAgbG9nZ2VyLmluZm8oXCJjbGVhcjpkb25lXCIsIHtcbiAgICBhZ2VudElkOiBvcHRzLmFnZW50LmlkLFxuICAgIHRocmVhZElkOiBvcHRzLnRocmVhZElkLFxuICAgIGNsZWFyZWQsXG4gICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICB9KTtcbiAgcmV0dXJuIHsgY2xlYXJlZCB9O1xufVxuXG4vKiogT3B0aW9ucyBhY2NlcHRlZCBieSB7QGxpbmsgaGlzdG9yeVJvdXRlfS4gKi9cbmV4cG9ydCB0eXBlIEhpc3RvcnlSb3V0ZU9wdGlvbnMgPVxuICB7IHBhdGg6IGAke3N0cmluZ306YWdlbnRJZCR7c3RyaW5nfWA7IGFnZW50PzogbmV2ZXIgfSB8IHsgcGF0aDogc3RyaW5nOyBhZ2VudDogc3RyaW5nIH07XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIGA8cGF0aD5gIE1hc3RyYSBjdXN0b20gQVBJIHJvdXRlLiBIYW5kbGVzIHR3b1xuICogbWV0aG9kcyBvbiB0aGUgc2FtZSBtb3VudDpcbiAqXG4gKiAgIC0gYEdFVGA6IHJldHVybiBhIHBhZ2Ugb2YgQUkgU0RLIFY1IGBVSU1lc3NhZ2VgcyBmb3IgdGhlXG4gKiAgICAgY2FsbGVyJ3MgY3VycmVudCB0aHJlYWQgKHtAbGluayBsb2FkSGlzdG9yeX0pLlxuICogICAtIGBERUxFVEVgOiB3aXBlIGV2ZXJ5IHBlcnNpc3RlZCBtZXNzYWdlIG9uIHRoZSBjYWxsZXInc1xuICogICAgIHRocmVhZCAoe0BsaW5rIGNsZWFySGlzdG9yeX0pLiBUaGUgc2Vzc2lvbiBjb29raWUgdGhhdFxuICogICAgIGFuY2hvcnMgdGhlIHRocmVhZCBpZCBpcyBsZWZ0IGFsb25lIHNvIHRoZSB1c2VyIGtlZXBzIHRoZVxuICogICAgIHNhbWUgdGhyZWFkIC0gb25seSB0aGUgY29udGVudHMgZ28gYXdheS5cbiAqXG4gKiBGb2xsb3dzIHRoZSBgQG1hc3RyYS9haS1zZGtgIGBjaGF0Um91dGVgIGNvbnZlbnRpb24gZm9yIGFnZW50XG4gKiBiaW5kaW5nOiBwYXNzIGBhZ2VudGAgZm9yIGEgZml4ZWQtYWdlbnQgbW91bnQsIG9yIGluY2x1ZGVcbiAqIGA6YWdlbnRJZGAgaW4gdGhlIHBhdGggZm9yIGR5bmFtaWMgcm91dGluZy4gVGhlIHBsdWdpbiByZWdpc3RlcnNcbiAqIGJvdGggYC9yb3V0ZS9oaXN0b3J5YCAoZGVmYXVsdCBhZ2VudCkgYW5kIGAvcm91dGUvaGlzdG9yeS86YWdlbnRJZGAuXG4gKlxuICogVGhlIGhhbmRsZXIgcmVhZHMgYHRocmVhZElkYCBhbmQgYHJlc291cmNlSWRgIGZyb20gYFJlcXVlc3RDb250ZXh0YFxuICogKHBvcHVsYXRlZCB1cHN0cmVhbSBieSBgTWFzdHJhU2VydmVyLnJlZ2lzdGVyQXV0aE1pZGRsZXdhcmVgKSwgc29cbiAqIG5vIGNvb2tpZSBvciB1c2VyIGxvb2t1cHMgaGFwcGVuIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaXN0b3J5Um91dGUob3B0aW9uczogSGlzdG9yeVJvdXRlT3B0aW9ucykge1xuICBjb25zdCB7IHBhdGggfSA9IG9wdGlvbnM7XG4gIGNvbnN0IGZpeGVkQWdlbnQgPSBcImFnZW50XCIgaW4gb3B0aW9ucyA/IG9wdGlvbnMuYWdlbnQgOiB1bmRlZmluZWQ7XG4gIGlmICghZml4ZWRBZ2VudCAmJiAhcGF0aC5pbmNsdWRlcyhcIjphZ2VudElkXCIpKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFwiaGlzdG9yeVJvdXRlLnBhdGhcIixcbiAgICAgIHBhdGgsXG4gICAgICBcImEgcGF0aCBjb250YWluaW5nIGA6YWdlbnRJZGAsIG9yIGFuIGV4cGxpY2l0IGBhZ2VudGBcIixcbiAgICApO1xuICB9XG4gIC8vIFRpbnkgcmVzb2x2ZXIgc2hhcmVkIGJ5IEdFVCAvIERFTEVURTogZGVyaXZlIHRoZSBhY3RpdmUgYWdlbnRcbiAgLy8gYW5kIHRocmVhZCBpZCwgcmV0dXJuaW5nIGEgSlNPTiBlcnJvciByZXNwb25zZSB3aGVuIGVpdGhlciBpc1xuICAvLyBtaXNzaW5nLiBLZWVwcyBib3RoIGhhbmRsZXJzIHRoaW4gYW5kIGdpdmVzIHRoZW0gaWRlbnRpY2FsXG4gIC8vIHZhbGlkYXRpb24gYmVoYXZpb3VyLlxuICBjb25zdCByZXNvbHZlQ29udGV4dCA9IChjOiBDb250ZXh0V2l0aE1hc3RyYSkgPT4ge1xuICAgIGNvbnN0IG1hc3RyYSA9IGMuZ2V0KFwibWFzdHJhXCIpO1xuICAgIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gYy5nZXQoXCJyZXF1ZXN0Q29udGV4dFwiKTtcbiAgICBjb25zdCBhZ2VudElkID0gZml4ZWRBZ2VudCA/PyBjLnJlcS5wYXJhbShcImFnZW50SWRcIik7XG4gICAgaWYgKCFhZ2VudElkKSB7XG4gICAgICByZXR1cm4geyBlcnJvcjogYy5qc29uKHsgZXJyb3I6IFwiYWdlbnRJZCBpcyByZXF1aXJlZFwiIH0sIDQwMCkgfSBhcyBjb25zdDtcbiAgICB9XG4gICAgY29uc3QgYWdlbnQgPSBtYXN0cmEuZ2V0QWdlbnRCeUlkKGFnZW50SWQpO1xuICAgIGlmICghYWdlbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBjLmpzb24oeyBlcnJvcjogYFVua25vd24gYWdlbnQgXCIke2FnZW50SWR9XCJgIH0sIDQwNCksXG4gICAgICB9IGFzIGNvbnN0O1xuICAgIH1cbiAgICBjb25zdCB0aHJlYWRJZCA9IHJlcXVlc3RDb250ZXh0LmdldChNQVNUUkFfVEhSRUFEX0lEX0tFWSkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICghdGhyZWFkSWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBjLmpzb24oeyBlcnJvcjogXCJ0aHJlYWQgaWQgbWlzc2luZyBmcm9tIHJlcXVlc3QgY29udGV4dFwiIH0sIDQwMCksXG4gICAgICB9IGFzIGNvbnN0O1xuICAgIH1cbiAgICBjb25zdCByZXNvdXJjZUlkID0gcmVxdWVzdENvbnRleHQuZ2V0KE1BU1RSQV9SRVNPVVJDRV9JRF9LRVkpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXJlc291cmNlSWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVycm9yOiBjLmpzb24oeyBlcnJvcjogXCJyZXNvdXJjZSBpZCBtaXNzaW5nIGZyb20gcmVxdWVzdCBjb250ZXh0XCIgfSwgNDAwKSxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgfVxuICAgIHJldHVybiB7IGFnZW50SWQsIGFnZW50LCB0aHJlYWRJZCwgcmVzb3VyY2VJZCB9IGFzIGNvbnN0O1xuICB9O1xuXG4gIHJldHVybiBbXG4gICAgcmVnaXN0ZXJBcGlSb3V0ZShwYXRoLCB7XG4gICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYzogQ29udGV4dFdpdGhNYXN0cmEpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gcmVzb2x2ZUNvbnRleHQoYyk7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gY3R4KSByZXR1cm4gY3R4LmVycm9yO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgbG9hZEhpc3Rvcnkoe1xuICAgICAgICAgIGFnZW50OiBjdHguYWdlbnQsXG4gICAgICAgICAgdGhyZWFkSWQ6IGN0eC50aHJlYWRJZCxcbiAgICAgICAgICByZXNvdXJjZUlkOiBjdHgucmVzb3VyY2VJZCxcbiAgICAgICAgICBwYWdlOiBwYXJzZUludFBhcmFtKGMucmVxLnF1ZXJ5KFwicGFnZVwiKSksXG4gICAgICAgICAgcGVyUGFnZTogcGFyc2VJbnRQYXJhbShjLnJlcS5xdWVyeShcInBlclBhZ2VcIikpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGMuanNvbihwYXlsb2FkKTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgcmVnaXN0ZXJBcGlSb3V0ZShwYXRoLCB7XG4gICAgICBtZXRob2Q6IFwiREVMRVRFXCIsXG4gICAgICBoYW5kbGVyOiBhc3luYyAoYzogQ29udGV4dFdpdGhNYXN0cmEpID0+IHtcbiAgICAgICAgY29uc3QgY3R4ID0gcmVzb2x2ZUNvbnRleHQoYyk7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gY3R4KSByZXR1cm4gY3R4LmVycm9yO1xuICAgICAgICBjb25zdCB7IGNsZWFyZWQgfSA9IGF3YWl0IGNsZWFySGlzdG9yeSh7XG4gICAgICAgICAgYWdlbnQ6IGN0eC5hZ2VudCxcbiAgICAgICAgICB0aHJlYWRJZDogY3R4LnRocmVhZElkLFxuICAgICAgICAgIHJlc291cmNlSWQ6IGN0eC5yZXNvdXJjZUlkLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2UgPSB7XG4gICAgICAgICAgb2s6IHRydWUsXG4gICAgICAgICAgYWdlbnRJZDogY3R4LmFnZW50SWQsXG4gICAgICAgICAgdGhyZWFkSWQ6IGN0eC50aHJlYWRJZCxcbiAgICAgICAgICBjbGVhcmVkLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYy5qc29uKHBheWxvYWQpO1xuICAgICAgfSxcbiAgICB9KSxcbiAgXTtcbn1cblxuLyoqXG4gKiBTb3J0IG1lc3NhZ2VzIG9sZGVzdC1maXJzdCBieSBgY3JlYXRlZEF0YCwgZmFsbGluZyBiYWNrIHRvIHdoYXRldmVyXG4gKiBvcmRlciB0aGUgc3RvcmFnZSByZXR1cm5lZCB0aGVtIGluLiBUaGUgbmF0aXZlIGByZWNhbGxgIGNhbGwgaG9ub3JzXG4gKiBgb3JkZXJCeWAgYnV0IGRvZXNuJ3QgZ3VhcmFudGVlIGEgc3RhYmxlIHNlY29uZGFyeSBzb3J0LCBzbyB3ZVxuICogbm9ybWFsaXplIGhlcmUgYmVmb3JlIGhhbmRpbmcgdGhlIHBhZ2UgdG8gdGhlIEFJIFNESyBjb252ZXJ0ZXIuXG4gKi9cbmZ1bmN0aW9uIHNvcnRDaHJvbm9sb2dpY2FsKG1lc3NhZ2VzOiBNYXN0cmFEQk1lc3NhZ2VbXSk6IE1hc3RyYURCTWVzc2FnZVtdIHtcbiAgcmV0dXJuIFsuLi5tZXNzYWdlc10uc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IHRhID0gdG9FcG9jaChhLmNyZWF0ZWRBdCk7XG4gICAgY29uc3QgdGIgPSB0b0Vwb2NoKGIuY3JlYXRlZEF0KTtcbiAgICByZXR1cm4gdGEgLSB0YjtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvRXBvY2godmFsdWU6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdmFsdWUuZ2V0VGltZSgpO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIE51bWJlci5pc05hTihwYXJzZWQpID8gMCA6IHBhcnNlZDtcbiAgfVxuICByZXR1cm4gMDtcbn1cbiJdfQ==
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oaXN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBTXBELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXRELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsd0JBQXdCLEdBRXpCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFNUMscUVBQXFFO0FBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLDZFQUE2RTtBQUM3RSxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7QUFhekI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFdBQVcsQ0FBQyxJQUF3QjtJQUN4RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUN6QyxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLEdBQUcsRUFBRSxZQUFZO0tBQ2xCLENBQUMsQ0FBQztJQUNILE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM1QyxJQUFJLENBQUMs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TyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQyxDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaHJlYWQgaGlzdG9yeSBsb2FkZXIgZXhwb3NlZCBhcyBhIE1hc3RyYSBjdXN0b20gQVBJIHJvdXRlLlxuICpcbiAqIEJhY2tlZCBlbnRpcmVseSBieSBuYXRpdmUgTWFzdHJhOiBsb29rcyB1cCB0aGUgYWN0aXZlIGFnZW50IGJ5IGlkLFxuICogYXNrcyBpdHMgYE1lbW9yeWAgaW5zdGFuY2UgdG8gYHJlY2FsbGAgYSBwYWdlIG9mIGBNYXN0cmFEQk1lc3NhZ2VgcyxcbiAqIGFuZCBjb252ZXJ0cyB0aGUgcmVzdWx0IHRvIEFJIFNESyBWNSBgVUlNZXNzYWdlYHMgd2l0aCB0aGUgb2ZmaWNpYWxcbiAqIHtAbGluayB0b0FJU2RrVjVNZXNzYWdlc30gaGVscGVyIGZyb20gYEBtYXN0cmEvYWktc2RrL3VpYC4gTm8gZGlyZWN0XG4gKiBkYXRhYmFzZSByZWFkcy5cbiAqXG4gKiBUaGUgcm91dGUgaXMgcmVnaXN0ZXJlZCB0aHJvdWdoIHtAbGluayBoaXN0b3J5Um91dGV9IGFzIGEgTWFzdHJhXG4gKiBgcmVnaXN0ZXJBcGlSb3V0ZWAgc28gaXQgc2l0cyBpbiB0aGUgc2FtZSBkaXNwYXRjaGVyIHBpcGVsaW5lIGFzXG4gKiB0aGUgc3RhbmRhcmQgYWdlbnQgcm91dGVzLiBUaGF0IG1lYW5zIHRoZSBgTWFzdHJhU2VydmVyYCBhdXRoXG4gKiBtaWRkbGV3YXJlIChpbiBgLi9zZXJ2ZXIudHNgKSBoYXMgYWxyZWFkeSBwb3B1bGF0ZWQgYFJlcXVlc3RDb250ZXh0YCB3aXRoXG4gKiBgTUFTVFJBX1RIUkVBRF9JRF9LRVlgIGFuZCBgTUFTVFJBX1JFU09VUkNFX0lEX0tFWWAgYnkgdGhlIHRpbWVcbiAqIHRoZSBoYW5kbGVyIHJ1bnMgLSBubyBjb29raWUgb3IgdXNlciBsb29rdXBzIGhhcHBlbiBoZXJlLCBhbmQgdGhlXG4gKiBzZXNzaW9uLWNvb2tpZSBsb2dpYyBzdGF5cyB0aGUgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBpbiBgc2VydmVyLnRzYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZXJyb3IsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIE1hc3RyYUNsZWFySGlzdG9yeVJlc3BvbnNlLFxuICBNYXN0cmFIaXN0b3J5UmVzcG9uc2UsXG4gIE1hc3RyYUhpc3RvcnlVSU1lc3NhZ2UsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tYXN0cmFcIjtcbmltcG9ydCB7IHRvQUlTZGtWNU1lc3NhZ2VzIH0gZnJvbSBcIkBtYXN0cmEvYWktc2RrL3VpXCI7XG5pbXBvcnQgdHlwZSB7IEFnZW50IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9hZ2VudFwiO1xuaW1wb3J0IHR5cGUgeyBNYXN0cmFEQk1lc3NhZ2UgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2FnZW50L21lc3NhZ2UtbGlzdFwiO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0V2l0aE1hc3RyYSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvc2VydmVyXCI7XG5pbXBvcnQgeyByZWdpc3RlckFwaVJvdXRlIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9zZXJ2ZXJcIjtcblxuaW1wb3J0IHtcbiAgcmVzb2x2ZUFnZW50UmVxdWVzdENvbnRleHQsXG4gIHJlc29sdmVBZ2VudFJvdXRlT3B0aW9ucyxcbiAgdHlwZSBBZ2VudFJvdXRlT3B0aW9ucyxcbn0gZnJvbSBcIi4vX2FnZW50LXJvdXRlLWNvbnRleHQudHNcIjtcbmltcG9ydCB7IGNsYW1wUGVyUGFnZSwgcGFyc2VJbnRQYXJhbSB9IGZyb20gXCIuL3BhZ2luYXRpb24udHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9oaXN0b3J5XCIpO1xuXG4vKiogRGVmYXVsdCBoaXN0b3J5IHBhZ2Ugc2l6ZTsgbWF0Y2hlcyB0aGUgTWFzdHJhIHN0b3JhZ2UgZGVmYXVsdC4gKi9cbmNvbnN0IERFRkFVTFRfUEVSX1BBR0UgPSAyMDtcbi8qKiBIYXJkIGNhcCBzbyBhIG1pc2JlaGF2aW5nIGNsaWVudCBjYW4ndCBmZXRjaCB0aGUgd2hvbGUgdGhyZWFkIGF0IG9uY2UuICovXG5jb25zdCBNQVhfUEVSX1BBR0UgPSAyMDA7XG5cbi8qKiBJbnB1dHMgYWNjZXB0ZWQgYnkge0BsaW5rIGxvYWRIaXN0b3J5fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEhpc3RvcnlPcHRpb25zIHtcbiAgYWdlbnQ6IEFnZW50O1xuICB0aHJlYWRJZDogc3RyaW5nO1xuICByZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIHBlclBhZ2U/OiBudW1iZXI7XG4gIC8qKiBXaGVuIHRydWUsIHJldHVybnMgdGhlICpvbGRlc3QqIHBhZ2UgZmlyc3QgKGNocm9ub2xvZ2ljYWwpLiAqL1xuICBhc2NlbmRpbmc/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZldGNoIGEgcGFnZSBvZiBVSS1mb3JtYXR0ZWQgbWVzc2FnZXMgZm9yIGEgdGhyZWFkLlxuICpcbiAqIFVzZXMgdGhlIGFnZW50J3MgcmVzb2x2ZWQgYE1lbW9yeWAgKGBnZXRNZW1vcnkoKWApIHNvIHBlci1hZ2VudFxuICogc3RvcmFnZSBuYW1lc3BhY2VzIChgbWFzdHJhXzxhZ2VudElkPmAgc2NoZW1hcykgYW5kIGFueSBmdXR1cmVcbiAqIG1lbW9yeS1zaWRlIGZpbHRlcnMgYXBwbHkgYXV0b21hdGljYWxseS4gV2hlbiB0aGUgYWdlbnQgaGFzIG5vXG4gKiBtZW1vcnkgY29uZmlndXJlZCB0aGUgcmVzcG9uc2UgaXMgYSBzdWNjZXNzZnVsIGVtcHR5IHBhZ2Ugc29cbiAqIGNhbGxlcnMgZG9uJ3QgaGF2ZSB0byBzcGVjaWFsLWNhc2Ugc3RhdGVsZXNzIGFnZW50cy5cbiAqXG4gKiBQYWdpbmF0aW9uIGlzIGRlc2NlbmRpbmctYnktZGVmYXVsdDogcGFnZSAwIGlzIHRoZSBtb3N0IHJlY2VudFxuICogcGFnZSwgcGFnZSAxIHRoZSBwYWdlIGJlZm9yZSB0aGF0LCBldGMuIFRoZSByZXR1cm5lZCBgdWlNZXNzYWdlc2BcbiAqIGFyZSBhbHdheXMgcmUtc29ydGVkIGludG8gY2hyb25vbG9naWNhbCBvcmRlciAob2xkZXN0IC0+IG5ld2VzdClcbiAqIHNvIHRoZSBjbGllbnQgY2FuIHByZXBlbmQgdGhlbSBhYm92ZSB0aGUgZXhpc3RpbmcgdHJhbnNjcmlwdFxuICogd2l0aG91dCBzb3J0aW5nIGxvY2FsbHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkSGlzdG9yeShvcHRzOiBMb2FkSGlzdG9yeU9wdGlvbnMpOiBQcm9taXNlPE1hc3RyYUhpc3RvcnlSZXNwb25zZT4ge1xuICBjb25zdCBwZXJQYWdlID0gY2xhbXBQZXJQYWdlKG9wdHMucGVyUGFnZSwge1xuICAgIGZhbGxiYWNrOiBERUZBVUxUX1BFUl9QQUdFLFxuICAgIG1heDogTUFYX1BFUl9QQUdFLFxuICB9KTtcbiAgY29uc3QgcGFnZSA9IE1hdGgubWF4KDAsIE1hdGgudHJ1bmMob3B0cy5wYWdlID8/IDApKTtcbiAgY29uc3QgbWVtb3J5ID0gYXdhaXQgb3B0cy5hZ2VudC5nZXRNZW1vcnkoKTtcbiAgaWYgKCFtZW1vcnkpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJyZWNhbGw6bm8tbWVtb3J5XCIsIHsgYWdlbnRJZDogb3B0cy5hZ2VudC5pZCwgdGhyZWFkSWQ6IG9wdHMudGhyZWFkSWQgfSk7XG4gICAgcmV0dXJuIHsgdWlNZXNzYWdlczogW10sIHBhZ2UsIHBlclBhZ2UsIHRvdGFsOiAwLCBoYXNNb3JlOiBmYWxzZSB9O1xuICB9XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1lbW9yeS5yZWNhbGwoe1xuICAgIHRocmVhZElkOiBvcHRzLnRocmVhZElkLFxuICAgIHJlc291cmNlSWQ6IG9wdHMucmVzb3VyY2VJZCxcbiAgICBwYWdlLFxuICAgIHBlclBhZ2UsXG4gICAgb3JkZXJCeToge1xuICAgICAgZmllbGQ6IFwiY3JlYXRlZEF0XCIsXG4gICAgICBkaXJlY3Rpb246IG9wdHMuYXNjZW5kaW5nID8gXCJBU0NcIiA6IFwiREVTQ1wiLFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjaHJvbm9sb2dpY2FsID0gc29ydENocm9ub2xvZ2ljYWwocmVzdWx0Lm1lc3NhZ2VzKTtcbiAgY29uc3QgdWlNZXNzYWdlcyA9IHRvQUlTZGtWNU1lc3NhZ2VzKGNocm9ub2xvZ2ljYWwpIGFzIHVua25vd24gYXMgTWFzdHJhSGlzdG9yeVVJTWVzc2FnZVtdO1xuICBsb2dnZXIuZGVidWcoXCJyZWNhbGw6ZG9uZVwiLCB7XG4gICAgYWdlbnRJZDogb3B0cy5hZ2VudC5pZCxcbiAgICB0aHJlYWRJZDogb3B0cy50aHJlYWRJZCxcbiAgICBwYWdlLFxuICAgIHBlclBhZ2UsXG4gICAgcmV0dXJuZWQ6IHVpTWVzc2FnZXMubGVuZ3RoLFxuICAgIHRvdGFsOiByZXN1bHQudG90YWwsXG4gICAgaGFzTW9yZTogcmVzdWx0Lmhhc01vcmUsXG4gICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB1aU1lc3NhZ2VzLFxuICAgIHBhZ2UsXG4gICAgcGVyUGFnZSxcbiAgICB0b3RhbDogcmVzdWx0LnRvdGFsLFxuICAgIGhhc01vcmU6IHJlc3VsdC5oYXNNb3JlLFxuICB9O1xufVxuXG4vKiogSW5wdXRzIGFjY2VwdGVkIGJ5IHtAbGluayBjbGVhckhpc3Rvcnl9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGVhckhpc3RvcnlPcHRpb25zIHtcbiAgYWdlbnQ6IEFnZW50O1xuICB0aHJlYWRJZDogc3RyaW5nO1xuICByZXNvdXJjZUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2lwZSBldmVyeSBwZXJzaXN0ZWQgbWVzc2FnZSB0aWVkIHRvIGEgdGhyZWFkLiBSZXR1cm5zIHRoZSBjb3VudFxuICogb2YgbWVzc2FnZXMgdGhhdCB3ZXJlIG9uIHRoZSB0aHJlYWQgYXQgZGVsZXRlIHRpbWUgc28gdGhlIGNhbGxlclxuICogY2FuIHJlbmRlciBhIFwiY2xlYXJlZCBOIG1lc3NhZ2VzXCIgYWZmb3JkYW5jZSB3aXRob3V0IGFuXG4gKiBhZGRpdGlvbmFsIHJvdW5kLXRyaXAuXG4gKlxuICogQWdlbnRzIHdpdGhvdXQgYSBjb25maWd1cmVkIGBNZW1vcnlgIHJlc29sdmUgdG8gYSBuby1vcCAoY291bnRcbiAqIDApLCBtYXRjaGluZyB7QGxpbmsgbG9hZEhpc3Rvcnl9J3MgXCJzdGF0ZWxlc3MgYWdlbnRzIHJldHVybiBhblxuICogZW1wdHkgcGFnZVwiIHN0YW5jZSBzbyBjYWxsZXJzIGRvbid0IGhhdmUgdG8gc3BlY2lhbC1jYXNlIHRoZW0uXG4gKiBUaHJlYWRzIHRoYXQgZG9uJ3QgZXhpc3QgeWV0IGFyZSBhbHNvIGEgc3VjY2Vzc2Z1bCBuby1vcCAtIHRoZVxuICogb3BlcmF0aW9uIGlzIGlkZW1wb3RlbnQgc28gdGhlIFVJIGNhbiBmaXJlLWFuZC1mb3JnZXQgd2l0aG91dFxuICogdHJhY2tpbmcgdGhyZWFkIGV4aXN0ZW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsZWFySGlzdG9yeShvcHRzOiBDbGVhckhpc3RvcnlPcHRpb25zKTogUHJvbWlzZTx7IGNsZWFyZWQ6IG51bWJlciB9PiB7XG4gIGNvbnN0IG1lbW9yeSA9IGF3YWl0IG9wdHMuYWdlbnQuZ2V0TWVtb3J5KCk7XG4gIGlmICghbWVtb3J5KSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY2xlYXI6bm8tbWVtb3J5XCIsIHsgYWdlbnRJZDogb3B0cy5hZ2VudC5pZCwgdGhyZWFkSWQ6IG9wdHMudGhyZWFkSWQgfSk7XG4gICAgcmV0dXJuIHsgY2xlYXJlZDogMCB9O1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgbWVtb3J5LmdldFRocmVhZEJ5SWQoeyB0aHJlYWRJZDogb3B0cy50aHJlYWRJZCB9KTtcbiAgaWYgKCFleGlzdGluZyB8fCBleGlzdGluZy5yZXNvdXJjZUlkICE9PSBvcHRzLnJlc291cmNlSWQpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjbGVhcjpub3Qtb3duZWRcIiwge1xuICAgICAgYWdlbnRJZDogb3B0cy5hZ2VudC5pZCxcbiAgICAgIHRocmVhZElkOiBvcHRzLnRocmVhZElkLFxuICAgICAgZm91bmQ6IGV4aXN0aW5nICE9PSBudWxsLFxuICAgIH0pO1xuICAgIHJldHVybiB7IGNsZWFyZWQ6IDAgfTtcbiAgfVxuICAvLyBNYXN0cmEncyBgZGVsZXRlVGhyZWFkYCBjYXNjYWRlcyB0byB0aGUgbWVzc2FnZSB0YWJsZSwgc28gd2VcbiAgLy8gY2FuJ3QgYXNrIGZvciBhIGNvdW50IGFmdGVyIHRoZSBmYWN0LiBSZWFkIGl0IHByZS1kZWxldGUgd2l0aCBhXG4gIC8vIG9uZS1wYWdlIHJlY2FsbCBzaXplZCB0byBmaXQgY29tbW9uIHRocmVhZHMgaW4gYSBzaW5nbGUgcm91bmRcbiAgLy8gdHJpcDsgdGhlIHZhbHVlIGlzIGZvciB0ZWxlbWV0cnkgLyBVSSwgbm90IGNvcnJlY3RuZXNzLlxuICBsZXQgY2xlYXJlZCA9IDA7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvYmUgPSBhd2FpdCBtZW1vcnkucmVjYWxsKHtcbiAgICAgIHRocmVhZElkOiBvcHRzLnRocmVhZElkLFxuICAgICAgcmVzb3VyY2VJZDogb3B0cy5yZXNvdXJjZUlkLFxuICAgICAgcGFnZTogMCxcbiAgICAgIHBlclBhZ2U6IDEsXG4gICAgfSk7XG4gICAgY2xlYXJlZCA9IHByb2JlLnRvdGFsO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBBIG1pc3NpbmctdGhyZWFkIGVycm9yIGlzIHRoZSBoYXBweS1wYXRoIFwibm90aGluZyB0byBjb3VudFwiO1xuICAgIC8vIGV2ZXJ5IG90aGVyIGVycm9yIGlzIGxvZ2dlZCBidXQgZG9lc24ndCBibG9jayB0aGUgZGVsZXRlLlxuICAgIGxvZ2dlci5kZWJ1ZyhcImNsZWFyOnByb2JlLWZhaWxlZFwiLCB7XG4gICAgICBhZ2VudElkOiBvcHRzLmFnZW50LmlkLFxuICAgICAgdGhyZWFkSWQ6IG9wdHMudGhyZWFkSWQsXG4gICAgICBlcnJvcjogZXJyb3IuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICBhd2FpdCBtZW1vcnkuZGVsZXRlVGhyZWFkKG9wdHMudGhyZWFkSWQpO1xuICBsb2dnZXIuaW5mbyhcImNsZWFyOmRvbmVcIiwge1xuICAgIGFnZW50SWQ6IG9wdHMuYWdlbnQuaWQsXG4gICAgdGhyZWFkSWQ6IG9wdHMudGhyZWFkSWQsXG4gICAgY2xlYXJlZCxcbiAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gIH0pO1xuICByZXR1cm4geyBjbGVhcmVkIH07XG59XG5cbi8qKiBPcHRpb25zIGFjY2VwdGVkIGJ5IHtAbGluayBoaXN0b3J5Um91dGV9LiAqL1xuZXhwb3J0IHR5cGUgSGlzdG9yeVJvdXRlT3B0aW9ucyA9IEFnZW50Um91dGVPcHRpb25zO1xuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBgPHBhdGg+YCBNYXN0cmEgY3VzdG9tIEFQSSByb3V0ZS4gSGFuZGxlcyB0d29cbiAqIG1ldGhvZHMgb24gdGhlIHNhbWUgbW91bnQ6XG4gKlxuICogICAtIGBHRVRgOiByZXR1cm4gYSBwYWdlIG9mIEFJIFNESyBWNSBgVUlNZXNzYWdlYHMgZm9yIHRoZVxuICogICAgIGNhbGxlcidzIGN1cnJlbnQgdGhyZWFkICh7QGxpbmsgbG9hZEhpc3Rvcnl9KS5cbiAqICAgLSBgREVMRVRFYDogd2lwZSBldmVyeSBwZXJzaXN0ZWQgbWVzc2FnZSBvbiB0aGUgY2FsbGVyJ3NcbiAqICAgICB0aHJlYWQgKHtAbGluayBjbGVhckhpc3Rvcnl9KS4gVGhlIHNlc3Npb24gY29va2llIHRoYXRcbiAqICAgICBhbmNob3JzIHRoZSB0aHJlYWQgaWQgaXMgbGVmdCBhbG9uZSBzbyB0aGUgdXNlciBrZWVwcyB0aGVcbiAqICAgICBzYW1lIHRocmVhZCAtIG9ubHkgdGhlIGNvbnRlbnRzIGdvIGF3YXkuXG4gKlxuICogRm9sbG93cyB0aGUgYEBtYXN0cmEvYWktc2RrYCBgY2hhdFJvdXRlYCBjb252ZW50aW9uIGZvciBhZ2VudFxuICogYmluZGluZzogcGFzcyBgYWdlbnRgIGZvciBhIGZpeGVkLWFnZW50IG1vdW50LCBvciBpbmNsdWRlXG4gKiBgOmFnZW50SWRgIGluIHRoZSBwYXRoIGZvciBkeW5hbWljIHJvdXRpbmcuIFRoZSBwbHVnaW4gcmVnaXN0ZXJzXG4gKiBib3RoIGAvcm91dGUvaGlzdG9yeWAgKGRlZmF1bHQgYWdlbnQpIGFuZCBgL3JvdXRlL2hpc3RvcnkvOmFnZW50SWRgLlxuICpcbiAqIFRoZSBoYW5kbGVyIHJlYWRzIGB0aHJlYWRJZGAgYW5kIGByZXNvdXJjZUlkYCBmcm9tIGBSZXF1ZXN0Q29udGV4dGBcbiAqIChwb3B1bGF0ZWQgdXBzdHJlYW0gYnkgYE1hc3RyYVNlcnZlci5yZWdpc3RlckF1dGhNaWRkbGV3YXJlYCksIHNvXG4gKiBubyBjb29raWUgb3IgdXNlciBsb29rdXBzIGhhcHBlbiBoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGlzdG9yeVJvdXRlKG9wdGlvbnM6IEhpc3RvcnlSb3V0ZU9wdGlvbnMpIHtcbiAgY29uc3QgeyBwYXRoLCBmaXhlZEFnZW50IH0gPSByZXNvbHZlQWdlbnRSb3V0ZU9wdGlvbnMob3B0aW9ucywgXCJoaXN0b3J5Um91dGUucGF0aFwiKTtcblxuICByZXR1cm4gW1xuICAgIHJlZ2lzdGVyQXBpUm91dGUocGF0aCwge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKGM6IENvbnRleHRXaXRoTWFzdHJhKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHJlc29sdmVBZ2VudFJlcXVlc3RDb250ZXh0KGMsIHsgZml4ZWRBZ2VudCwgdGhyZWFkSWQ6IFwicmVxdWlyZWRcIiB9KTtcbiAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiBjdHgpIHJldHVybiBjdHguZXJyb3I7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBsb2FkSGlzdG9yeSh7XG4gICAgICAgICAgYWdlbnQ6IGN0eC5hZ2VudCxcbiAgICAgICAgICB0aHJlYWRJZDogY3R4LnRocmVhZElkLFxuICAgICAgICAgIHJlc291cmNlSWQ6IGN0eC5yZXNvdXJjZUlkLFxuICAgICAgICAgIHBhZ2U6IHBhcnNlSW50UGFyYW0oYy5yZXEucXVlcnkoXCJwYWdlXCIpKSxcbiAgICAgICAgICBwZXJQYWdlOiBwYXJzZUludFBhcmFtKGMucmVxLnF1ZXJ5KFwicGVyUGFnZVwiKSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYy5qc29uKHBheWxvYWQpO1xuICAgICAgfSxcbiAgICB9KSxcbiAgICByZWdpc3RlckFwaVJvdXRlKHBhdGgsIHtcbiAgICAgIG1ldGhvZDogXCJERUxFVEVcIixcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChjOiBDb250ZXh0V2l0aE1hc3RyYSkgPT4ge1xuICAgICAgICBjb25zdCBjdHggPSByZXNvbHZlQWdlbnRSZXF1ZXN0Q29udGV4dChjLCB7IGZpeGVkQWdlbnQsIHRocmVhZElkOiBcInJlcXVpcmVkXCIgfSk7XG4gICAgICAgIGlmIChcImVycm9yXCIgaW4gY3R4KSByZXR1cm4gY3R4LmVycm9yO1xuICAgICAgICBjb25zdCB7IGNsZWFyZWQgfSA9IGF3YWl0IGNsZWFySGlzdG9yeSh7XG4gICAgICAgICAgYWdlbnQ6IGN0eC5hZ2VudCxcbiAgICAgICAgICB0aHJlYWRJZDogY3R4LnRocmVhZElkLFxuICAgICAgICAgIHJlc291cmNlSWQ6IGN0eC5yZXNvdXJjZUlkLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogTWFzdHJhQ2xlYXJIaXN0b3J5UmVzcG9uc2UgPSB7XG4gICAgICAgICAgb2s6IHRydWUsXG4gICAgICAgICAgYWdlbnRJZDogY3R4LmFnZW50SWQsXG4gICAgICAgICAgdGhyZWFkSWQ6IGN0eC50aHJlYWRJZCxcbiAgICAgICAgICBjbGVhcmVkLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gYy5qc29uKHBheWxvYWQpO1xuICAgICAgfSxcbiAgICB9KSxcbiAgXTtcbn1cblxuLyoqXG4gKiBTb3J0IG1lc3NhZ2VzIG9sZGVzdC1maXJzdCBieSBgY3JlYXRlZEF0YCwgZmFsbGluZyBiYWNrIHRvIHdoYXRldmVyXG4gKiBvcmRlciB0aGUgc3RvcmFnZSByZXR1cm5lZCB0aGVtIGluLiBUaGUgbmF0aXZlIGByZWNhbGxgIGNhbGwgaG9ub3JzXG4gKiBgb3JkZXJCeWAgYnV0IGRvZXNuJ3QgZ3VhcmFudGVlIGEgc3RhYmxlIHNlY29uZGFyeSBzb3J0LCBzbyB3ZVxuICogbm9ybWFsaXplIGhlcmUgYmVmb3JlIGhhbmRpbmcgdGhlIHBhZ2UgdG8gdGhlIEFJIFNESyBjb252ZXJ0ZXIuXG4gKi9cbmZ1bmN0aW9uIHNvcnRDaHJvbm9sb2dpY2FsKG1lc3NhZ2VzOiBNYXN0cmFEQk1lc3NhZ2VbXSk6IE1hc3RyYURCTWVzc2FnZVtdIHtcbiAgcmV0dXJuIFsuLi5tZXNzYWdlc10uc29ydCgoYSwgYikgPT4ge1xuICAgIGNvbnN0IHRhID0gdG9FcG9jaChhLmNyZWF0ZWRBdCk7XG4gICAgY29uc3QgdGIgPSB0b0Vwb2NoKGIuY3JlYXRlZEF0KTtcbiAgICByZXR1cm4gdGEgLSB0YjtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvRXBvY2godmFsdWU6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdmFsdWUuZ2V0VGltZSgpO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIE51bWJlci5pc05hTihwYXJzZWQpID8gMCA6IHBhcnNlZDtcbiAgfVxuICByZXR1cm4gMDtcbn1cbiJdfQ==
@@ -250,6 +250,18 @@ export declare class MastraPlugin extends Plugin<MastraPluginConfig> {
250
250
  */
251
251
  private feedbackEnabled;
252
252
  injectRoutes(router: IAppRouter): void;
253
+ /** Register URL aliases for Mastra's MCP transports. */
254
+ private registerMcpRoutes;
255
+ /** Register model catalogue and per-agent default-model routes. */
256
+ private registerModelRoutes;
257
+ /** Register the generic chart and statement embed resolver. */
258
+ private registerEmbedRoutes;
259
+ /** Register default and agent-qualified suggestion routes. */
260
+ private registerSuggestionRoutes;
261
+ /** Register MLflow feedback submission when configured. */
262
+ private registerFeedbackRoutes;
263
+ /** Register the gated Mastra catch-all after every explicit route. */
264
+ private registerAgentRoutes;
253
265
  /**
254
266
  * Map a failed {@link ExecutionResult} onto the response: the status the
255
267
  * execution pipeline resolved, paired with `clientMessage` rather than the