@dbx-tools/appkit-model-gateway 0.9.119 → 0.9.121

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/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-model-gateway";
6
- export const PACKAGE_VERSION = "0.9.119";
6
+ export const PACKAGE_VERSION = "0.9.121";
7
7
  export * as gateway from "./src/gateway.ts";
8
8
  export * as models from "./src/models.ts";
9
9
  export * as plugin from "./src/plugin.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-model-gateway";
2
- export declare const PACKAGE_VERSION = "0.9.119";
2
+ export declare const PACKAGE_VERSION = "0.9.121";
3
3
  export * as gateway from "./src/gateway.ts";
4
4
  export * as models from "./src/models.ts";
5
5
  export * as plugin from "./src/plugin.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-model-gateway";
5
- export const PACKAGE_VERSION = "0.9.119";
5
+ export const PACKAGE_VERSION = "0.9.121";
6
6
  export * as gateway from "./src/gateway.js";
7
7
  export * as models from "./src/models.js";
8
8
  export * as plugin from "./src/plugin.js";
@@ -16,4 +16,4 @@ export { ModelGatewayError, ModelGateway } from "./src/gateway.js";
16
16
  export { ModelGatewayPlugin, modelGateway } from "./src/plugin.js";
17
17
  export { DatabricksModelRegistry } from "./src/registry.js";
18
18
  export { UnsupportedGatewayFeatureError } from "./src/router.js";
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxjQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFNUQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tb2RlbC1nYXRld2F5XCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTE5XCI7XG5leHBvcnQgKiBhcyBnYXRld2F5IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbHMgZnJvbSBcIi4vc3JjL21vZGVscy50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHJlYXNvbmluZ0FkYXB0IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCAqIGFzIHJlZ2lzdHJ5IGZyb20gXCIuL3NyYy9yZWdpc3RyeS50c1wiO1xuZXhwb3J0ICogYXMgcm91dGVyIGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHJvdXRlcyBmcm9tIFwiLi9zcmMvcm91dGVzLnRzXCI7XG5leHBvcnQgKiBhcyB0cmFuc2xhdGlvbiBmcm9tIFwiLi9zcmMvdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHRyYW5zcG9ydCBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlFcnJvciwgTW9kZWxHYXRld2F5IH0gZnJvbSBcIi4vc3JjL2dhdGV3YXkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlQbHVnaW4sIG1vZGVsR2F0ZXdheSB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5UGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZGFwdGVkSW5mZXJlbmNlQm9keSB9IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCB7IERhdGFicmlja3NNb2RlbFJlZ2lzdHJ5IH0gZnJvbSBcIi4vc3JjL3JlZ2lzdHJ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucywgTW9kZWxSZWdpc3RyeSwgTW9kZWxSZWdpc3RyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcmVnaXN0cnkudHNcIjtcbmV4cG9ydCB7IFVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvciB9IGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1RyYW5zcG9ydFJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG4iXX0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxjQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFNUQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tb2RlbC1nYXRld2F5XCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTIxXCI7XG5leHBvcnQgKiBhcyBnYXRld2F5IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbHMgZnJvbSBcIi4vc3JjL21vZGVscy50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHJlYXNvbmluZ0FkYXB0IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCAqIGFzIHJlZ2lzdHJ5IGZyb20gXCIuL3NyYy9yZWdpc3RyeS50c1wiO1xuZXhwb3J0ICogYXMgcm91dGVyIGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHJvdXRlcyBmcm9tIFwiLi9zcmMvcm91dGVzLnRzXCI7XG5leHBvcnQgKiBhcyB0cmFuc2xhdGlvbiBmcm9tIFwiLi9zcmMvdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHRyYW5zcG9ydCBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlFcnJvciwgTW9kZWxHYXRld2F5IH0gZnJvbSBcIi4vc3JjL2dhdGV3YXkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlQbHVnaW4sIG1vZGVsR2F0ZXdheSB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5UGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZGFwdGVkSW5mZXJlbmNlQm9keSB9IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCB7IERhdGFicmlja3NNb2RlbFJlZ2lzdHJ5IH0gZnJvbSBcIi4vc3JjL3JlZ2lzdHJ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucywgTW9kZWxSZWdpc3RyeSwgTW9kZWxSZWdpc3RyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcmVnaXN0cnkudHNcIjtcbmV4cG9ydCB7IFVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvciB9IGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1RyYW5zcG9ydFJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG4iXX0=
package/lib/src/routes.js CHANGED
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { Readable } from "node:stream";
7
7
  import { pipeline } from "node:stream/promises";
8
- import { log } from "@dbx-tools/shared-core";
8
+ import { errorUtils, log } from "@dbx-tools/shared-core";
9
9
  import { ModelGatewayError } from "./gateway.js";
10
10
  import { UnsupportedGatewayFeatureError } from "./router.js";
11
11
  const logger = log.logger("appkit/model-gateway/http");
@@ -30,7 +30,7 @@ export async function sendModels(gateway, request, response) {
30
30
  logger.error("models request failed", {
31
31
  ...requestContext(request),
32
32
  elapsedMs: Date.now() - startedAt,
33
- error,
33
+ error: errorUtils.toError(error),
34
34
  });
35
35
  sendError("openai-responses", response, error);
36
36
  }
@@ -90,7 +90,7 @@ export async function sendInference(gateway, protocol, request, response) {
90
90
  logger.error("inference request failed", {
91
91
  ...requestContext(request),
92
92
  elapsedMs: Date.now() - startedAt,
93
- error,
93
+ error: errorUtils.toError(error),
94
94
  protocol,
95
95
  });
96
96
  if (response.headersSent) {
@@ -155,4 +155,4 @@ function requestContext(request) {
155
155
  requestId: request.header("x-request-id") ?? request.header("request-id"),
156
156
  };
157
157
  }
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTdDLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0QsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUV2RCwwREFBMEQ7QUFDMUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxRQUEwQjtJQUNuRCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELDJEQUEyRDtBQUMzRCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FDOUIsT0FBcUIsRUFDckIsT0FBd0IsRUFDeEIsUUFBMEI7SUFFMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDeEQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUM1QixjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FDckMsQ0FBQztRQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkIsTUFBTSxD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SSxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztLQUMxRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXhwcmVzcyBhZGFwdGVycyBmb3IgdGhlIHNoYXJlZCBtb2RlbC1nYXRld2F5IHNlcnZpY2UuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgeyBwaXBlbGluZSB9IGZyb20gXCJub2RlOnN0cmVhbS9wcm9taXNlc1wiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50UHJvdG9jb2wgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuaW1wb3J0IHR5cGUgZXhwcmVzcyBmcm9tIFwiZXhwcmVzc1wiO1xuXG5pbXBvcnQgeyBNb2RlbEdhdGV3YXksIE1vZGVsR2F0ZXdheUVycm9yIH0gZnJvbSBcIi4vZ2F0ZXdheS50c1wiO1xuaW1wb3J0IHsgVW5zdXBwb3J0ZWRHYXRld2F5RmVhdHVyZUVycm9yIH0gZnJvbSBcIi4vcm91dGVyLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXQvbW9kZWwtZ2F0ZXdheS9odHRwXCIpO1xuXG4vKiogU2VuZCB0aGUgbGlnaHR3ZWlnaHQgY29tcGF0aWJpbGl0eSBoZWFsdGggcmVzcG9uc2UuICovXG5leHBvcnQgZnVuY3Rpb24gc2VuZEhlYWx0aChyZXNwb25zZTogZXhwcmVzcy5SZXNwb25zZSk6IHZvaWQge1xuICByZXNwb25zZS5qc29uKHsgcmVhZHk6IHRydWUgfSk7XG59XG5cbi8qKiBTZW5kIHRoZSBhY3RpdmUgcHJpbmNpcGFsJ3MgZHluYW1pYyBtb2RlbCBjYXRhbG9ndWUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZE1vZGVscyhcbiAgZ2F0ZXdheTogTW9kZWxHYXRld2F5LFxuICByZXF1ZXN0OiBleHByZXNzLlJlcXVlc3QsXG4gIHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIGxvZ2dlci5kZWJ1ZyhcIm1vZGVscyByZXF1ZXN0XCIsIHJlcXVlc3RDb250ZXh0KHJlcXVlc3QpKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0gYXdhaXQgZ2F0ZXdheS5tb2RlbHMoXG4gICAgICByZXF1ZXN0LmhlYWRlcihcIm9yaWdpbmF0b3JcIiksXG4gICAgICBvcHRpb25hbFNlYXJjaChyZXF1ZXN0LnF1ZXJ5LnNlYXJjaCksXG4gICAgKTtcbiAgICByZXNwb25zZS5qc29uKHBheWxvYWQpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcIm1vZGVscyByZXNwb25zZVwiLCB7XG4gICAgICAuLi5yZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSxcbiAgICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoXCJtb2RlbHMgcmVxdWVzdCBmYWlsZWRcIiwge1xuICAgICAgLi4ucmVxdWVzdENvbnRleHQocmVxdWVzdCksXG4gICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICBlcnJvcixcbiAgICB9KTtcbiAgICBzZW5kRXJyb3IoXCJvcGVuYWktcmVzcG9uc2VzXCIsIHJlc3BvbnNlLCBlcnJvcik7XG4gIH1cbn1cblxuLyoqIEV4ZWN1dGUgYW5kIHN0cmVhbSBvbmUgbW9kZWwgcmVxdWVzdCB0aHJvdWdoIEV4cHJlc3Mgd2l0aCBjYW5jZWxsYXRpb24uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZEluZmVyZW5jZShcbiAgZ2F0ZXdheTogTW9kZWxHYXRld2F5LFxuICBwcm90b2NvbDogQ2xpZW50UHJvdG9jb2wsXG4gIHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCxcbiAgcmVzcG9uc2U6IGV4cHJlc3MuUmVzcG9uc2UsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgYWJvcnQgPSAoKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLndyaXRhYmxlRW5kZWQpIHJldHVybjtcbiAgICBsb2dnZXIuZGVidWcoXCJjbGllbnQgZGlzY29ubmVjdGVkXCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgcHJvdG9jb2wsXG4gICAgfSk7XG4gICAgY29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJNb2RlbCBnYXRld2F5IGNsaWVudCBkaXNjb25uZWN0ZWRcIikpO1xuICB9O1xuICByZXF1ZXN0Lm9uY2UoXCJhYm9ydGVkXCIsIGFib3J0KTtcbiAgcmVzcG9uc2Uub25jZShcImNsb3NlXCIsIGFib3J0KTtcbiAgdHJ5IHtcbiAgICBjb25zdCBib2R5ID0gcmVjb3JkKHJlcXVlc3QuYm9keSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiaW5mZXJlbmNlIHJlcXVlc3RcIiwge1xuICAgICAgLi4ucmVxdWVzdENvbnRleHQocmVxdWVzdCksXG4gICAgICBtb2RlbDogdHlwZW9mIGJvZHkubW9kZWwgPT09IFwic3RyaW5nXCIgPyBib2R5Lm1vZGVsIDogdW5kZWZpbmVkLFxuICAgICAgcHJvdG9jb2wsXG4gICAgICBzdHJlYW06IGJvZHkuc3RyZWFtID09PSB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IHVwc3RyZWFtID0gYXdhaXQgZ2F0ZXdheS5pbmZlcmVuY2UoXG4gICAgICBwcm90b2NvbCxcbiAgICAgIGJvZHksXG4gICAgICByZXF1ZXN0SGVhZGVycyhyZXF1ZXN0KSxcbiAgICAgIGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICk7XG4gICAgcmVzcG9uc2Uuc3RhdHVzKHVwc3RyZWFtLnN0YXR1cyk7XG4gICAgdXBzdHJlYW0uaGVhZGVycy5mb3JFYWNoKCh2YWx1ZSwgbmFtZSkgPT4gcmVzcG9uc2Uuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKSk7XG4gICAgaWYgKCF1cHN0cmVhbS5ib2R5KSB7XG4gICAgICByZXNwb25zZS5lbmQoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImluZmVyZW5jZSByZXNwb25zZVwiLCB7XG4gICAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBzdGF0dXM6IHVwc3RyZWFtLnN0YXR1cyxcbiAgICAgICAgdXBzdHJlYW1Qcm90b2NvbDogdXBzdHJlYW0uaGVhZGVycy5nZXQoXCJ4LWRieC10b29scy11cHN0cmVhbVwiKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBwaXBlbGluZShSZWFkYWJsZS5mcm9tV2ViKHVwc3RyZWFtLmJvZHkgYXMgbmV2ZXIpLCByZXNwb25zZSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiaW5mZXJlbmNlIHN0cmVhbSBjb21wbGV0ZWRcIiwge1xuICAgICAgLi4ucmVxdWVzdENvbnRleHQocmVxdWVzdCksXG4gICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIHN0YXR1czogdXBzdHJlYW0uc3RhdHVzLFxuICAgICAgdXBzdHJlYW1Qcm90b2NvbDogdXBzdHJlYW0uaGVhZGVycy5nZXQoXCJ4LWRieC10b29scy11cHN0cmVhbVwiKSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoY29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmVzcG9uc2UuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2dnZXIuZXJyb3IoXCJpbmZlcmVuY2UgcmVxdWVzdCBmYWlsZWRcIiwge1xuICAgICAgLi4ucmVxdWVzdENvbnRleHQocmVxdWVzdCksXG4gICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICBlcnJvcixcbiAgICAgIHByb3RvY29sLFxuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZS5oZWFkZXJzU2VudCkge1xuICAgICAgcmVzcG9uc2UuZGVzdHJveShlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZW5kRXJyb3IocHJvdG9jb2wsIHJlc3BvbnNlLCBlcnJvcik7XG4gIH0gZmluYWxseSB7XG4gICAgcmVxdWVzdC5vZmYoXCJhYm9ydGVkXCIsIGFib3J0KTtcbiAgICByZXNwb25zZS5vZmYoXCJjbG9zZVwiLCBhYm9ydCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VuZEVycm9yKHByb3RvY29sOiBDbGllbnRQcm90b2NvbCwgcmVzcG9uc2U6IGV4cHJlc3MuUmVzcG9uc2UsIGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gIGNvbnN0IHN0YXR1cyA9XG4gICAgZXJyb3IgaW5zdGFuY2VvZiBNb2RlbEdhdGV3YXlFcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIFVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvclxuICAgICAgPyBlcnJvci5zdGF0dXNcbiAgICAgIDogNTAwO1xuICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIk1vZGVsIGdhdGV3YXkgcmVxdWVzdCBmYWlsZWRcIjtcbiAgaWYgKHByb3RvY29sID09PSBcImFudGhyb3BpYy1tZXNzYWdlc1wiKSB7XG4gICAgcmVzcG9uc2Uuc3RhdHVzKHN0YXR1cykuanNvbih7XG4gICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICBlcnJvcjogeyB0eXBlOiBzdGF0dXMgPCA1MDAgPyBcImludmFsaWRfcmVxdWVzdF9lcnJvclwiIDogXCJhcGlfZXJyb3JcIiwgbWVzc2FnZSB9LFxuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICByZXNwb25zZS5zdGF0dXMoc3RhdHVzKS5qc29uKHtcbiAgICBlcnJvcjoge1xuICAgICAgbWVzc2FnZSxcbiAgICAgIHR5cGU6IHN0YXR1cyA8IDUwMCA/IFwiaW52YWxpZF9yZXF1ZXN0X2Vycm9yXCIgOiBcImFwaV9lcnJvclwiLFxuICAgICAgY29kZTogc3RhdHVzLFxuICAgIH0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0SGVhZGVycyhyZXF1ZXN0OiBleHByZXNzLlJlcXVlc3QpOiBIZWFkZXJzIHtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gIGZvciAoY29uc3QgW25hbWUsIHJhd10gb2YgT2JqZWN0LmVudHJpZXMocmVxdWVzdC5oZWFkZXJzKSkge1xuICAgIGlmICh0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiKSBoZWFkZXJzLnNldChuYW1lLCByYXcpO1xuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmF3KSkgaGVhZGVycy5zZXQobmFtZSwgcmF3LmpvaW4oXCIsIFwiKSk7XG4gIH1cbiAgcmV0dXJuIGhlYWRlcnM7XG59XG5cbmZ1bmN0aW9uIHJlY29yZCh2YWx1ZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cbiAgdGhyb3cgbmV3IE1vZGVsR2F0ZXdheUVycm9yKDQwMCwgXCJSZXF1ZXN0IGJvZHkgbXVzdCBiZSBhIEpTT04gb2JqZWN0XCIpO1xufVxuXG5mdW5jdGlvbiBvcHRpb25hbFNlYXJjaCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IE1vZGVsR2F0ZXdheUVycm9yKDQwMCwgXCJzZWFyY2ggbXVzdCBiZSBhIHN0cmluZ1wiKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RDb250ZXh0KHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgIHBhdGg6IHJlcXVlc3QucGF0aCxcbiAgICByZXF1ZXN0SWQ6IHJlcXVlc3QuaGVhZGVyKFwieC1yZXF1ZXN0LWlkXCIpID8/IHJlcXVlc3QuaGVhZGVyKFwicmVxdWVzdC1pZFwiKSxcbiAgfTtcbn1cbiJdfQ==
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUl6RCxPQUFPLEVBQWdCLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFFdkQsMERBQTBEO0FBQzFELE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBMEI7SUFDbkQsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQzlCLE9BQXFCLEVBQ3JCLE9BQXdCLEVBQ3hCLFFBQTBCO0lBRTFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFDNUIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQ3JDLENBQUM7UUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FB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TTtRQUN0QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7S0FDMUUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4cHJlc3MgYWRhcHRlcnMgZm9yIHRoZSBzaGFyZWQgbW9kZWwtZ2F0ZXdheSBzZXJ2aWNlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwibm9kZTpzdHJlYW0vcHJvbWlzZXNcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IENsaWVudFByb3RvY29sIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXlcIjtcbmltcG9ydCB0eXBlIGV4cHJlc3MgZnJvbSBcImV4cHJlc3NcIjtcblxuaW1wb3J0IHsgTW9kZWxHYXRld2F5LCBNb2RlbEdhdGV3YXlFcnJvciB9IGZyb20gXCIuL2dhdGV3YXkudHNcIjtcbmltcG9ydCB7IFVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvciB9IGZyb20gXCIuL3JvdXRlci50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0L21vZGVsLWdhdGV3YXkvaHR0cFwiKTtcblxuLyoqIFNlbmQgdGhlIGxpZ2h0d2VpZ2h0IGNvbXBhdGliaWxpdHkgaGVhbHRoIHJlc3BvbnNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRIZWFsdGgocmVzcG9uc2U6IGV4cHJlc3MuUmVzcG9uc2UpOiB2b2lkIHtcbiAgcmVzcG9uc2UuanNvbih7IHJlYWR5OiB0cnVlIH0pO1xufVxuXG4vKiogU2VuZCB0aGUgYWN0aXZlIHByaW5jaXBhbCdzIGR5bmFtaWMgbW9kZWwgY2F0YWxvZ3VlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRNb2RlbHMoXG4gIGdhdGV3YXk6IE1vZGVsR2F0ZXdheSxcbiAgcmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0LFxuICByZXNwb25zZTogZXhwcmVzcy5SZXNwb25zZSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICBsb2dnZXIuZGVidWcoXCJtb2RlbHMgcmVxdWVzdFwiLCByZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSk7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGdhdGV3YXkubW9kZWxzKFxuICAgICAgcmVxdWVzdC5oZWFkZXIoXCJvcmlnaW5hdG9yXCIpLFxuICAgICAgb3B0aW9uYWxTZWFyY2gocmVxdWVzdC5xdWVyeS5zZWFyY2gpLFxuICAgICk7XG4gICAgcmVzcG9uc2UuanNvbihwYXlsb2FkKTtcbiAgICBsb2dnZXIuZGVidWcoXCJtb2RlbHMgcmVzcG9uc2VcIiwge1xuICAgICAgLi4ucmVxdWVzdENvbnRleHQocmVxdWVzdCksXG4gICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKFwibW9kZWxzIHJlcXVlc3QgZmFpbGVkXCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnJvciksXG4gICAgfSk7XG4gICAgc2VuZEVycm9yKFwib3BlbmFpLXJlc3BvbnNlc1wiLCByZXNwb25zZSwgZXJyb3IpO1xuICB9XG59XG5cbi8qKiBFeGVjdXRlIGFuZCBzdHJlYW0gb25lIG1vZGVsIHJlcXVlc3QgdGhyb3VnaCBFeHByZXNzIHdpdGggY2FuY2VsbGF0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRJbmZlcmVuY2UoXG4gIGdhdGV3YXk6IE1vZGVsR2F0ZXdheSxcbiAgcHJvdG9jb2w6IENsaWVudFByb3RvY29sLFxuICByZXF1ZXN0OiBleHByZXNzLlJlcXVlc3QsXG4gIHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IGFib3J0ID0gKCkgPT4ge1xuICAgIGlmIChyZXNwb25zZS53cml0YWJsZUVuZGVkKSByZXR1cm47XG4gICAgbG9nZ2VyLmRlYnVnKFwiY2xpZW50IGRpc2Nvbm5lY3RlZFwiLCB7XG4gICAgICAuLi5yZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSxcbiAgICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICAgIHByb3RvY29sLFxuICAgIH0pO1xuICAgIGNvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwiTW9kZWwgZ2F0ZXdheSBjbGllbnQgZGlzY29ubmVjdGVkXCIpKTtcbiAgfTtcbiAgcmVxdWVzdC5vbmNlKFwiYWJvcnRlZFwiLCBhYm9ydCk7XG4gIHJlc3BvbnNlLm9uY2UoXCJjbG9zZVwiLCBhYm9ydCk7XG4gIHRyeSB7XG4gICAgY29uc3QgYm9keSA9IHJlY29yZChyZXF1ZXN0LmJvZHkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImluZmVyZW5jZSByZXF1ZXN0XCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgbW9kZWw6IHR5cGVvZiBib2R5Lm1vZGVsID09PSBcInN0cmluZ1wiID8gYm9keS5tb2RlbCA6IHVuZGVmaW5lZCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgc3RyZWFtOiBib2R5LnN0cmVhbSA9PT0gdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB1cHN0cmVhbSA9IGF3YWl0IGdhdGV3YXkuaW5mZXJlbmNlKFxuICAgICAgcHJvdG9jb2wsXG4gICAgICBib2R5LFxuICAgICAgcmVxdWVzdEhlYWRlcnMocmVxdWVzdCksXG4gICAgICBjb250cm9sbGVyLnNpZ25hbCxcbiAgICApO1xuICAgIHJlc3BvbnNlLnN0YXR1cyh1cHN0cmVhbS5zdGF0dXMpO1xuICAgIHVwc3RyZWFtLmhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIG5hbWUpID0+IHJlc3BvbnNlLnNldEhlYWRlcihuYW1lLCB2YWx1ZSkpO1xuICAgIGlmICghdXBzdHJlYW0uYm9keSkge1xuICAgICAgcmVzcG9uc2UuZW5kKCk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJpbmZlcmVuY2UgcmVzcG9uc2VcIiwge1xuICAgICAgICAuLi5yZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSxcbiAgICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgc3RhdHVzOiB1cHN0cmVhbS5zdGF0dXMsXG4gICAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHVwc3RyZWFtLmhlYWRlcnMuZ2V0KFwieC1kYngtdG9vbHMtdXBzdHJlYW1cIiksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgcGlwZWxpbmUoUmVhZGFibGUuZnJvbVdlYih1cHN0cmVhbS5ib2R5IGFzIG5ldmVyKSwgcmVzcG9uc2UpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImluZmVyZW5jZSBzdHJlYW0gY29tcGxldGVkXCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgcHJvdG9jb2wsXG4gICAgICBzdGF0dXM6IHVwc3RyZWFtLnN0YXR1cyxcbiAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHVwc3RyZWFtLmhlYWRlcnMuZ2V0KFwieC1kYngtdG9vbHMtdXBzdHJlYW1cIiksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGNvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJlc3BvbnNlLmRlc3Ryb3koKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nZ2VyLmVycm9yKFwiaW5mZXJlbmNlIHJlcXVlc3QgZmFpbGVkXCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnJvciksXG4gICAgICBwcm90b2NvbCxcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UuaGVhZGVyc1NlbnQpIHtcbiAgICAgIHJlc3BvbnNlLmRlc3Ryb3koZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VuZEVycm9yKHByb3RvY29sLCByZXNwb25zZSwgZXJyb3IpO1xuICB9IGZpbmFsbHkge1xuICAgIHJlcXVlc3Qub2ZmKFwiYWJvcnRlZFwiLCBhYm9ydCk7XG4gICAgcmVzcG9uc2Uub2ZmKFwiY2xvc2VcIiwgYWJvcnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlbmRFcnJvcihwcm90b2NvbDogQ2xpZW50UHJvdG9jb2wsIHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlLCBlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBjb25zdCBzdGF0dXMgPVxuICAgIGVycm9yIGluc3RhbmNlb2YgTW9kZWxHYXRld2F5RXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBVbnN1cHBvcnRlZEdhdGV3YXlGZWF0dXJlRXJyb3JcbiAgICAgID8gZXJyb3Iuc3RhdHVzXG4gICAgICA6IDUwMDtcbiAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJNb2RlbCBnYXRld2F5IHJlcXVlc3QgZmFpbGVkXCI7XG4gIGlmIChwcm90b2NvbCA9PT0gXCJhbnRocm9waWMtbWVzc2FnZXNcIikge1xuICAgIHJlc3BvbnNlLnN0YXR1cyhzdGF0dXMpLmpzb24oe1xuICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgZXJyb3I6IHsgdHlwZTogc3RhdHVzIDwgNTAwID8gXCJpbnZhbGlkX3JlcXVlc3RfZXJyb3JcIiA6IFwiYXBpX2Vycm9yXCIsIG1lc3NhZ2UgfSxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVzcG9uc2Uuc3RhdHVzKHN0YXR1cykuanNvbih7XG4gICAgZXJyb3I6IHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB0eXBlOiBzdGF0dXMgPCA1MDAgPyBcImludmFsaWRfcmVxdWVzdF9lcnJvclwiIDogXCJhcGlfZXJyb3JcIixcbiAgICAgIGNvZGU6IHN0YXR1cyxcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdEhlYWRlcnMocmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0KTogSGVhZGVycyB7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICBmb3IgKGNvbnN0IFtuYW1lLCByYXddIG9mIE9iamVjdC5lbnRyaWVzKHJlcXVlc3QuaGVhZGVycykpIHtcbiAgICBpZiAodHlwZW9mIHJhdyA9PT0gXCJzdHJpbmdcIikgaGVhZGVycy5zZXQobmFtZSwgcmF3KTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJhdykpIGhlYWRlcnMuc2V0KG5hbWUsIHJhdy5qb2luKFwiLCBcIikpO1xuICB9XG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG5mdW5jdGlvbiByZWNvcmQodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG4gIHRocm93IG5ldyBNb2RlbEdhdGV3YXlFcnJvcig0MDAsIFwiUmVxdWVzdCBib2R5IG11c3QgYmUgYSBKU09OIG9iamVjdFwiKTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxTZWFyY2godmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBNb2RlbEdhdGV3YXlFcnJvcig0MDAsIFwic2VhcmNoIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0Q29udGV4dChyZXF1ZXN0OiBleHByZXNzLlJlcXVlc3QpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICBwYXRoOiByZXF1ZXN0LnBhdGgsXG4gICAgcmVxdWVzdElkOiByZXF1ZXN0LmhlYWRlcihcIngtcmVxdWVzdC1pZFwiKSA/PyByZXF1ZXN0LmhlYWRlcihcInJlcXVlc3QtaWRcIiksXG4gIH07XG59XG4iXX0=
@@ -8,7 +8,7 @@ import { invoke } from "@dbx-tools/model";
8
8
  import { decodeGatewayRequest } from "@dbx-tools/model-protocol/gateway-decode";
9
9
  import { encodeGatewayResponse, encodeGatewayStream, } from "@dbx-tools/model-protocol/gateway-encode";
10
10
  import { createDatabricksLanguageModel, } from "@dbx-tools/model-protocol/provider";
11
- import { log } from "@dbx-tools/shared-core";
11
+ import { errorUtils, log } from "@dbx-tools/shared-core";
12
12
  import { streamText } from "ai";
13
13
  const logger = log.logger("appkit/model-gateway/translation");
14
14
  /** Translate one request through a provider-owned AI SDK model. */
@@ -33,7 +33,10 @@ export async function translateGatewayRequest(route, body, signal) {
33
33
  maxRetries: 0,
34
34
  abortSignal: signal,
35
35
  onError: ({ error }) => {
36
- logger.error("stream failed", { error, model: route.target.id });
36
+ logger.error("stream failed", {
37
+ error: errorUtils.toError(error),
38
+ model: route.target.id,
39
+ });
37
40
  },
38
41
  onAbort: () => {
39
42
  logger.debug("translation aborted", { model: route.target.id });
@@ -101,4 +104,4 @@ function translationProtocol(route) {
101
104
  return "anthropic";
102
105
  return "chat";
103
106
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLG1CQUFtQixHQUNwQixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xELE9BQU8sRUFDTCw2QkFBNkIsR0FFOUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLFVBQVUsRUFBb0MsTUFBTSxJQUFJLENBQUM7QUFFbEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBRTlELG1FQUFtRTtBQUNuRSxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxLQUFtQixFQUNuQixJQUF1QyxFQUN2QyxNQUFtQjtJQUVuQixNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7UUFDOUIsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1FBQ3BDLFlBQVksRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDckMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJO1FBQzVCLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFL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UUFDUixJQUFJO1FBQ0osT0FBTztLQUNSLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEtBQW1CO0lBQzlDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQzVELElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQzVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZlcmNlbCBBSSBTREsgZmFsbGJhY2sgdHJhbnNsYXRpb24gYmV0d2VlbiBleHRlcm5hbCBnYXRld2F5IHByb3RvY29scy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGludm9rZSB9IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5pbXBvcnQgeyBkZWNvZGVHYXRld2F5UmVxdWVzdCB9IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsLXByb3RvY29sL2dhdGV3YXktZGVjb2RlXCI7XG5pbXBvcnQge1xuICBlbmNvZGVHYXRld2F5UmVzcG9uc2UsXG4gIGVuY29kZUdhdGV3YXlTdHJlYW0sXG59IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsLXByb3RvY29sL2dhdGV3YXktZW5jb2RlXCI7XG5pbXBvcnQge1xuICBjcmVhdGVEYXRhYnJpY2tzTGFuZ3VhZ2VNb2RlbCxcbiAgdHlwZSBEYXRhYnJpY2tzTGFuZ3VhZ2VNb2RlbFByb3RvY29sLFxufSBmcm9tIFwiQGRieC10b29scy9tb2RlbC1wcm90b2NvbC9wcm92aWRlclwiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgR2F0ZXdheVJvdXRlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXlcIjtcbmltcG9ydCB7IHN0cmVhbVRleHQsIHR5cGUgTGFuZ3VhZ2VNb2RlbCwgdHlwZSBUb29sU2V0IH0gZnJvbSBcImFpXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXQvbW9kZWwtZ2F0ZXdheS90cmFuc2xhdGlvblwiKTtcblxuLyoqIFRyYW5zbGF0ZSBvbmUgcmVxdWVzdCB0aHJvdWdoIGEgcHJvdmlkZXItb3duZWQgQUkgU0RLIG1vZGVsLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYW5zbGF0ZUdhdGV3YXlSZXF1ZXN0KFxuICByb3V0ZTogR2F0ZXdheVJvdXRlLFxuICBib2R5OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4gIHNpZ25hbDogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVHYXRld2F5UmVxdWVzdChyb3V0ZS5jbGllbnRQcm90b2NvbCwgYm9keSk7XG4gIGxvZ2dlci5kZWJ1ZyhcImRlY29kZWQgcmVxdWVzdFwiLCB7XG4gICAgY2xpZW50UHJvdG9jb2w6IHJvdXRlLmNsaWVudFByb3RvY29sLFxuICAgIG1lc3NhZ2VDb3VudDogZGVjb2RlZC5tZXNzYWdlcy5sZW5ndGgsXG4gICAgbW9kZWw6IHJvdXRlLnRhcmdldC5pZCxcbiAgICBzdHJlYW06IGJvZHkuc3RyZWFtID09PSB0cnVlLFxuICAgIHRvb2xDb3VudDogT2JqZWN0LmtleXMoZGVjb2RlZC50b29scykubGVuZ3RoLFxuICB9KTtcbiAgY29uc3QgbW9kZWwgPSBhd2FpdCB0cmFuc2xhdGlvbk1vZGVsKHJvdXRlKTtcbiAgY29uc3QgcmVzdWx0ID0gc3RyZWFtVGV4dCh7XG4gICAgbW9kZWwsXG4gICAgbWVzc2FnZXM6IGRlY29kZWQubWVzc2FnZXMsXG4gICAgYWxsb3dTeXN0ZW1Jbk1lc3NhZ2VzOiB0cnVlLFxuICAgIC4uLihPYmplY3Qua2V5cyhkZWNvZGVkLnRvb2xzKS5sZW5ndGggPiAwID8geyB0b29sczogZGVjb2RlZC50b29scyB9IDoge30pLFxuICAgIC4uLihkZWNvZGVkLm1heE91dHB1dFRva2VucyAhPT0gdW5kZWZpbmVkID8geyBtYXhPdXRwdXRUb2tlbnM6IGRlY29kZWQubWF4T3V0cHV0VG9rZW5zIH0gOiB7fSksXG4gICAgLi4uKGRlY29kZWQudGVtcGVyYXR1cmUgIT09IHVuZGVmaW5lZCA/IHsgdGVtcGVyYXR1cmU6IGRlY29kZWQudGVtcGVyYXR1cmUgfSA6IHt9KSxcbiAgICAuLi4oZGVjb2RlZC50b3BQICE9PSB1bmRlZmluZWQgPyB7IHRvcFA6IGRlY29kZWQudG9wUCB9IDoge30pLFxuICAgIG1heFJldHJpZXM6IDAsXG4gICAgYWJvcnRTaWduYWw6IHNpZ25hbCxcbiAgICBvbkVycm9yOiAoeyBlcnJvciB9KSA9PiB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJzdHJlYW0gZmFpbGVkXCIsIHsgZXJyb3IsIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQgfSk7XG4gICAgfSxcbiAgICBvbkFib3J0OiAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJ0cmFuc2xhdGlvbiBhYm9ydGVkXCIsIHsgbW9kZWw6IHJvdXRlLnRhcmdldC5pZCB9KTtcbiAgICB9LFxuICAgIG9uRmluaXNoOiAoeyBmaW5pc2hSZWFzb24sIHVzYWdlIH0pID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInRyYW5zbGF0aW9uIGZpbmlzaGVkXCIsIHtcbiAgICAgICAgZmluaXNoUmVhc29uLFxuICAgICAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG5cbiAgaWYgKGJvZHkuc3RyZWFtID09PSB0cnVlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmV0dXJuaW5nIHRyYW5zbGF0ZWQgc3RyZWFtXCIsIHtcbiAgICAgIGNsaWVudFByb3RvY29sOiByb3V0ZS5jbGllbnRQcm90b2NvbCxcbiAgICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShcbiAgICAgIGVuY29kZUdhdGV3YXlTdHJlYW0oXG4gICAgICAgIHJvdXRlLmNsaWVudFByb3RvY29sLFxuICAgICAgICByb3V0ZS50YXJnZXQuaWQsXG4gICAgICAgIHJlc3VsdC5zdHJlYW0gYXMgQXN5bmNJdGVyYWJsZTxpbXBvcnQoXCJhaVwiKS5UZXh0U3RyZWFtUGFydDxUb29sU2V0Pj4sXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tY2FjaGVcIixcbiAgICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvZXZlbnQtc3RyZWFtXCIsXG4gICAgICAgICAgXCJ4LWFjY2VsLWJ1ZmZlcmluZ1wiOiBcIm5vXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBjb25zdCBbdGV4dCwgdG9vbENhbGxzLCB1c2FnZSwgZmluaXNoUmVhc29uXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICByZXN1bHQudGV4dCxcbiAgICByZXN1bHQudG9vbENhbGxzLFxuICAgIHJlc3VsdC51c2FnZSxcbiAgICByZXN1bHQuZmluaXNoUmVhc29uLFxuICBdKTtcbiAgbG9nZ2VyLmRlYnVnKFwicmV0dXJuaW5nIHRyYW5zbGF0ZWQgcmVzcG9uc2VcIiwge1xuICAgIGNsaWVudFByb3RvY29sOiByb3V0ZS5jbGllbnRQcm90b2NvbCxcbiAgICBmaW5pc2hSZWFzb24sXG4gICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgdG9vbENhbGxDb3VudDogdG9vbENhbGxzLmxlbmd0aCxcbiAgfSk7XG4gIHJldHVybiBSZXNwb25zZS5qc29uKFxuICAgIGVuY29kZUdhdGV3YXlSZXNwb25zZShyb3V0ZS5jbGllbnRQcm90b2NvbCwgcm91dGUudGFyZ2V0LmlkLCB7XG4gICAgICB0ZXh0LFxuICAgICAgdG9vbENhbGxzOiB0b29sQ2FsbHMgYXMgaW1wb3J0KFwiYWlcIikuVHlwZWRUb29sQ2FsbDxUb29sU2V0PltdLFxuICAgICAgdXNhZ2UsXG4gICAgICBmaW5pc2hSZWFzb24sXG4gICAgfSksXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRyYW5zbGF0aW9uTW9kZWwocm91dGU6IEdhdGV3YXlSb3V0ZSk6IFByb21pc2U8TGFuZ3VhZ2VNb2RlbD4ge1xuICBjb25zdCBjbGllbnQgPSBnZXRFeGVjdXRpb25Db250ZXh0KCkuY2xpZW50O1xuICBjb25zdCBob3N0ID0gKGF3YWl0IGNsaWVudC5jb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpO1xuICBjb25zdCBoZWFkZXJzID0gYXdhaXQgaW52b2tlLmF1dGhIZWFkZXJzKGNsaWVudCk7XG4gIGNvbnN0IHByb3RvY29sID0gdHJhbnNsYXRpb25Qcm90b2NvbChyb3V0ZSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIHRyYW5zbGF0aW9uIHByb3ZpZGVyXCIsIHsgbW9kZWw6IHJvdXRlLnRhcmdldC5pZCwgcHJvdG9jb2wgfSk7XG4gIHJldHVybiBjcmVhdGVEYXRhYnJpY2tzTGFuZ3VhZ2VNb2RlbCh7XG4gICAgbW9kZWxJZDogcm91dGUudGFyZ2V0LmlkLFxuICAgIHByb3RvY29sLFxuICAgIGhvc3QsXG4gICAgaGVhZGVycyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0aW9uUHJvdG9jb2wocm91dGU6IEdhdGV3YXlSb3V0ZSk6IERhdGFicmlja3NMYW5ndWFnZU1vZGVsUHJvdG9jb2wge1xuICBpZiAocm91dGUudGFyZ2V0LmNhcGFiaWxpdGllcy5yZXNwb25zZXMpIHJldHVybiBcInJlc3BvbnNlc1wiO1xuICBpZiAocm91dGUudGFyZ2V0LmNhcGFiaWxpdGllcy5hbnRocm9waWMpIHJldHVybiBcImFudGhyb3BpY1wiO1xuICByZXR1cm4gXCJjaGF0XCI7XG59XG4iXX0=
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLG1CQUFtQixHQUNwQixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xELE9BQU8sRUFDTCw2QkFBNkIsR0FFOUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxVQUFVLEVBQW9DLE1BQU0sSUFBSSxDQUFDO0FBRWxFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUU5RCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsS0FBbUIsRUFDbkIsSUFBdUMsRUFDdkMsTUFBbUI7SUFFbkIsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRSxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO1FBQzlCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztRQUNwQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQ3JDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSTtRQUM1QixTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFP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bkMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN4QixRQUFRO1FBQ1IsSUFBSTtRQUNKLE9BQU87S0FDUixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFtQjtJQUM5QyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVM7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUM1RCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVM7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUM1RCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWZXJjZWwgQUkgU0RLIGZhbGxiYWNrIHRyYW5zbGF0aW9uIGJldHdlZW4gZXh0ZXJuYWwgZ2F0ZXdheSBwcm90b2NvbHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdldEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBpbnZva2UgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHsgZGVjb2RlR2F0ZXdheVJlcXVlc3QgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbC1wcm90b2NvbC9nYXRld2F5LWRlY29kZVwiO1xuaW1wb3J0IHtcbiAgZW5jb2RlR2F0ZXdheVJlc3BvbnNlLFxuICBlbmNvZGVHYXRld2F5U3RyZWFtLFxufSBmcm9tIFwiQGRieC10b29scy9tb2RlbC1wcm90b2NvbC9nYXRld2F5LWVuY29kZVwiO1xuaW1wb3J0IHtcbiAgY3JlYXRlRGF0YWJyaWNrc0xhbmd1YWdlTW9kZWwsXG4gIHR5cGUgRGF0YWJyaWNrc0xhbmd1YWdlTW9kZWxQcm90b2NvbCxcbn0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWwtcHJvdG9jb2wvcHJvdmlkZXJcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEdhdGV3YXlSb3V0ZSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC1nYXRld2F5XCI7XG5pbXBvcnQgeyBzdHJlYW1UZXh0LCB0eXBlIExhbmd1YWdlTW9kZWwsIHR5cGUgVG9vbFNldCB9IGZyb20gXCJhaVwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0L21vZGVsLWdhdGV3YXkvdHJhbnNsYXRpb25cIik7XG5cbi8qKiBUcmFuc2xhdGUgb25lIHJlcXVlc3QgdGhyb3VnaCBhIHByb3ZpZGVyLW93bmVkIEFJIFNESyBtb2RlbC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFuc2xhdGVHYXRld2F5UmVxdWVzdChcbiAgcm91dGU6IEdhdGV3YXlSb3V0ZSxcbiAgYm9keTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICBzaWduYWw6IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICBjb25zdCBkZWNvZGVkID0gZGVjb2RlR2F0ZXdheVJlcXVlc3Qocm91dGUuY2xpZW50UHJvdG9jb2wsIGJvZHkpO1xuICBsb2dnZXIuZGVidWcoXCJkZWNvZGVkIHJlcXVlc3RcIiwge1xuICAgIGNsaWVudFByb3RvY29sOiByb3V0ZS5jbGllbnRQcm90b2NvbCxcbiAgICBtZXNzYWdlQ291bnQ6IGRlY29kZWQubWVzc2FnZXMubGVuZ3RoLFxuICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgc3RyZWFtOiBib2R5LnN0cmVhbSA9PT0gdHJ1ZSxcbiAgICB0b29sQ291bnQ6IE9iamVjdC5rZXlzKGRlY29kZWQudG9vbHMpLmxlbmd0aCxcbiAgfSk7XG4gIGNvbnN0IG1vZGVsID0gYXdhaXQgdHJhbnNsYXRpb25Nb2RlbChyb3V0ZSk7XG4gIGNvbnN0IHJlc3VsdCA9IHN0cmVhbVRleHQoe1xuICAgIG1vZGVsLFxuICAgIG1lc3NhZ2VzOiBkZWNvZGVkLm1lc3NhZ2VzLFxuICAgIGFsbG93U3lzdGVtSW5NZXNzYWdlczogdHJ1ZSxcbiAgICAuLi4oT2JqZWN0LmtleXMoZGVjb2RlZC50b29scykubGVuZ3RoID4gMCA/IHsgdG9vbHM6IGRlY29kZWQudG9vbHMgfSA6IHt9KSxcbiAgICAuLi4oZGVjb2RlZC5tYXhPdXRwdXRUb2tlbnMgIT09IHVuZGVmaW5lZCA/IHsgbWF4T3V0cHV0VG9rZW5zOiBkZWNvZGVkLm1heE91dHB1dFRva2VucyB9IDoge30pLFxuICAgIC4uLihkZWNvZGVkLnRlbXBlcmF0dXJlICE9PSB1bmRlZmluZWQgPyB7IHRlbXBlcmF0dXJlOiBkZWNvZGVkLnRlbXBlcmF0dXJlIH0gOiB7fSksXG4gICAgLi4uKGRlY29kZWQudG9wUCAhPT0gdW5kZWZpbmVkID8geyB0b3BQOiBkZWNvZGVkLnRvcFAgfSA6IHt9KSxcbiAgICBtYXhSZXRyaWVzOiAwLFxuICAgIGFib3J0U2lnbmFsOiBzaWduYWwsXG4gICAgb25FcnJvcjogKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFwic3RyZWFtIGZhaWxlZFwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyb3IpLFxuICAgICAgICBtb2RlbDogcm91dGUudGFyZ2V0LmlkLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbkFib3J0OiAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJ0cmFuc2xhdGlvbiBhYm9ydGVkXCIsIHsgbW9kZWw6IHJvdXRlLnRhcmdldC5pZCB9KTtcbiAgICB9LFxuICAgIG9uRmluaXNoOiAoeyBmaW5pc2hSZWFzb24sIHVzYWdlIH0pID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInRyYW5zbGF0aW9uIGZpbmlzaGVkXCIsIHtcbiAgICAgICAgZmluaXNoUmVhc29uLFxuICAgICAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG5cbiAgaWYgKGJvZHkuc3RyZWFtID09PSB0cnVlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmV0dXJuaW5nIHRyYW5zbGF0ZWQgc3RyZWFtXCIsIHtcbiAgICAgIGNsaWVudFByb3RvY29sOiByb3V0ZS5jbGllbnRQcm90b2NvbCxcbiAgICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShcbiAgICAgIGVuY29kZUdhdGV3YXlTdHJlYW0oXG4gICAgICAgIHJvdXRlLmNsaWVudFByb3RvY29sLFxuICAgICAgICByb3V0ZS50YXJnZXQuaWQsXG4gICAgICAgIHJlc3VsdC5zdHJlYW0gYXMgQXN5bmNJdGVyYWJsZTxpbXBvcnQoXCJhaVwiKS5UZXh0U3RyZWFtUGFydDxUb29sU2V0Pj4sXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tY2FjaGVcIixcbiAgICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvZXZlbnQtc3RyZWFtXCIsXG4gICAgICAgICAgXCJ4LWFjY2VsLWJ1ZmZlcmluZ1wiOiBcIm5vXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBjb25zdCBbdGV4dCwgdG9vbENhbGxzLCB1c2FnZSwgZmluaXNoUmVhc29uXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICByZXN1bHQudGV4dCxcbiAgICByZXN1bHQudG9vbENhbGxzLFxuICAgIHJlc3VsdC51c2FnZSxcbiAgICByZXN1bHQuZmluaXNoUmVhc29uLFxuICBdKTtcbiAgbG9nZ2VyLmRlYnVnKFwicmV0dXJuaW5nIHRyYW5zbGF0ZWQgcmVzcG9uc2VcIiwge1xuICAgIGNsaWVudFByb3RvY29sOiByb3V0ZS5jbGllbnRQcm90b2NvbCxcbiAgICBmaW5pc2hSZWFzb24sXG4gICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgdG9vbENhbGxDb3VudDogdG9vbENhbGxzLmxlbmd0aCxcbiAgfSk7XG4gIHJldHVybiBSZXNwb25zZS5qc29uKFxuICAgIGVuY29kZUdhdGV3YXlSZXNwb25zZShyb3V0ZS5jbGllbnRQcm90b2NvbCwgcm91dGUudGFyZ2V0LmlkLCB7XG4gICAgICB0ZXh0LFxuICAgICAgdG9vbENhbGxzOiB0b29sQ2FsbHMgYXMgaW1wb3J0KFwiYWlcIikuVHlwZWRUb29sQ2FsbDxUb29sU2V0PltdLFxuICAgICAgdXNhZ2UsXG4gICAgICBmaW5pc2hSZWFzb24sXG4gICAgfSksXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRyYW5zbGF0aW9uTW9kZWwocm91dGU6IEdhdGV3YXlSb3V0ZSk6IFByb21pc2U8TGFuZ3VhZ2VNb2RlbD4ge1xuICBjb25zdCBjbGllbnQgPSBnZXRFeGVjdXRpb25Db250ZXh0KCkuY2xpZW50O1xuICBjb25zdCBob3N0ID0gKGF3YWl0IGNsaWVudC5jb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpO1xuICBjb25zdCBoZWFkZXJzID0gYXdhaXQgaW52b2tlLmF1dGhIZWFkZXJzKGNsaWVudCk7XG4gIGNvbnN0IHByb3RvY29sID0gdHJhbnNsYXRpb25Qcm90b2NvbChyb3V0ZSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIHRyYW5zbGF0aW9uIHByb3ZpZGVyXCIsIHsgbW9kZWw6IHJvdXRlLnRhcmdldC5pZCwgcHJvdG9jb2wgfSk7XG4gIHJldHVybiBjcmVhdGVEYXRhYnJpY2tzTGFuZ3VhZ2VNb2RlbCh7XG4gICAgbW9kZWxJZDogcm91dGUudGFyZ2V0LmlkLFxuICAgIHByb3RvY29sLFxuICAgIGhvc3QsXG4gICAgaGVhZGVycyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0aW9uUHJvdG9jb2wocm91dGU6IEdhdGV3YXlSb3V0ZSk6IERhdGFicmlja3NMYW5ndWFnZU1vZGVsUHJvdG9jb2wge1xuICBpZiAocm91dGUudGFyZ2V0LmNhcGFiaWxpdGllcy5yZXNwb25zZXMpIHJldHVybiBcInJlc3BvbnNlc1wiO1xuICBpZiAocm91dGUudGFyZ2V0LmNhcGFiaWxpdGllcy5hbnRocm9waWMpIHJldHVybiBcImFudGhyb3BpY1wiO1xuICByZXR1cm4gXCJjaGF0XCI7XG59XG4iXX0=
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { getExecutionContext } from "@databricks/appkit";
7
7
  import { workspaceClient } from "@dbx-tools/databricks";
8
- import { log } from "@dbx-tools/shared-core";
8
+ import { errorUtils, log } from "@dbx-tools/shared-core";
9
9
  import { openaiChat } from "@dbx-tools/shared-model";
10
10
  import { upstreamUrl } from "@dbx-tools/shared-model-gateway";
11
11
  const logger = log.logger("appkit/model-gateway/transport");
@@ -98,7 +98,7 @@ export async function fetchDatabricks(request) {
98
98
  catch (error) {
99
99
  logger.error("upstream fetch failed", {
100
100
  elapsedMs: Date.now() - startedAt,
101
- error,
101
+ error: errorUtils.toError(error),
102
102
  model: request.route.upstreamModel,
103
103
  upstreamProtocol: request.route.upstreamProtocol,
104
104
  });
@@ -152,10 +152,13 @@ async function logUpstreamFailureBody(response, details) {
152
152
  });
153
153
  }
154
154
  catch (error) {
155
- logger.debug("could not read upstream error body", { ...details, error });
155
+ logger.debug("could not read upstream error body", {
156
+ ...details,
157
+ error: errorUtils.toError(error),
158
+ });
156
159
  }
157
160
  finally {
158
161
  await reader.cancel().catch(() => undefined);
159
162
  }
160
163
  }
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBcUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFDNUQsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBRXJDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdEMsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLFFBQVE7SUFDUixNQUFNO0lBQ04scUJBQXFCO0lBQ3JCLG1CQUFtQjtJQUNuQixXQUFXO0NBQ1osQ0FBQyxDQUFDO0FBRUgsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN2QyxZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixZQUFZO0lBQ1osb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixZQUFZO0lBQ1osSUFBSTtJQUNKLFNBQVM7SUFDVCxtQkFBbUI7SUFDbkIsU0FBUztDQUNWLENBQUMsQ0FBQztBQVVILDRGQUE0RjtBQUM1RixNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FBQyxPQUFtQztJQUN2RSxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUM1QyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3hELE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUNwRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUN0QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUN2RixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdEYsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRTtRQUN2QyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhO1FBQ2xDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRO1FBQzNCLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJO1FBQ3BDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCO0tBQ2pELENBQUMsQ0FBQztJQUNILElBQUksQ0FBQztRQUNILElBQUksUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUM5QixNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU87WUFDUCxJQUFJO1lBQ0osTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1NBQ3ZCLENBQUMsQ0FBQztRQUNILElBQ0UsUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHO1lBQ3ZCLENBQUMsTUFBTSxlQUFlLENBQUMsb0NBQW9DLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDcEUsQ0FBQztZQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUU7Z0JBQ3BELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWE7Z0JBQ2xDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCO2FBQ2pELENBQUMsQ0FBQztZQUNILE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUM1QyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7Z0JBQzFCLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU87Z0JBQ1AsSUFBSTtnQkFDSixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07YUFDdkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHO1lBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTO1lBQ2pDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWE7WUFDbEMsU0FBUyxFQUNQLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDO1lBQ3pGLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtZQUN2QixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtTQUNqRCxDQUFDO1FBQ0YsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakQsS0FBSyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRTtZQUNwQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVM7WUFDakMsS0FBSztZQUNMLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWE7WUFDbEMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7U0FDakQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLEtBQStELEVBQy9ELElBQXVDO0lBRXZDLE1BQU0sU0FBUyxHQUE0QixFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbkYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEtBQUssaUJBQWlCLEVBQUUsQ0FBQztRQUNqRCxVQUFVLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkQsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsc0JBQXNCLENBQUMsUUFBaUI7SUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUM5QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQy9CLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsS0FBSyxVQUFVLHNCQUFzQixDQUNuQyxRQUFrQixFQUNsQixPQUFnQztJQUVoQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzFDLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTztJQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNqQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxJQUFJLENBQUM7UUFDSCxPQUFPLEtBQUssR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksS0FBSyxDQUFDLElBQUk7Z0JBQUUsTUFBTTtZQUN0QixNQUFNLFNBQVMsR0FBRyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7WUFDOUMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVU7Z0JBQUUsTUFBTTtRQUN2RCxDQUFDO1FBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ2pDLEdBQUcsT0FBTztZQUNWLE9BQU87WUFDUCxTQUFTLEVBQUUsS0FBSyxJQUFJLG1CQUFtQjtTQUN4QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLENBQUM7WUFBUyxDQUFDO1FBQ1QsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBdXRoZW50aWNhdGVkIHN0cmVhbWluZyB0cmFuc3BvcnQgZm9yIGRpcmVjdCBEYXRhYnJpY2tzIGdhdGV3YXkgcm91dGVzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgd29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYngtdG9vbHMvZGF0YWJyaWNrc1wiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IG9wZW5haUNoYXQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IHVwc3RyZWFtVXJsLCB0eXBlIEdhdGV3YXlSb3V0ZSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC1nYXRld2F5XCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXQvbW9kZWwtZ2F0ZXdheS90cmFuc3BvcnRcIik7XG5jb25zdCBFUlJPUl9QUkVWSUVXX0JZVEVTID0gOCAqIDEwMjQ7XG5cbmNvbnN0IEJMT0NLRURfUkVRVUVTVF9IRUFERVJTID0gbmV3IFNldChbXG4gIFwiYWNjZXB0LWVuY29kaW5nXCIsXG4gIFwiYXV0aG9yaXphdGlvblwiLFxuICBcImNvbm5lY3Rpb25cIixcbiAgXCJjb250ZW50LWxlbmd0aFwiLFxuICBcImNvb2tpZVwiLFxuICBcImhvc3RcIixcbiAgXCJwcm94eS1hdXRob3JpemF0aW9uXCIsXG4gIFwidHJhbnNmZXItZW5jb2RpbmdcIixcbiAgXCJ4LWFwaS1rZXlcIixcbl0pO1xuXG5jb25zdCBCTE9DS0VEX1JFU1BPTlNFX0hFQURFUlMgPSBuZXcgU2V0KFtcbiAgXCJjb25uZWN0aW9uXCIsXG4gIFwiY29udGVudC1lbmNvZGluZ1wiLFxuICBcImNvbnRlbnQtbGVuZ3RoXCIsXG4gIFwia2VlcC1hbGl2ZVwiLFxuICBcInByb3h5LWF1dGhlbnRpY2F0ZVwiLFxuICBcInByb3h5LWF1dGhvcml6YXRpb25cIixcbiAgXCJzZXQtY29va2llXCIsXG4gIFwidGVcIixcbiAgXCJ0cmFpbGVyXCIsXG4gIFwidHJhbnNmZXItZW5jb2RpbmdcIixcbiAgXCJ1cGdyYWRlXCIsXG5dKTtcblxuLyoqIElucHV0cyBmb3Igb25lIGRpcmVjdCBEYXRhYnJpY2tzIHByb3RvY29sIHJlcXVlc3QuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFicmlja3NUcmFuc3BvcnRSZXF1ZXN0IHtcbiAgcmVhZG9ubHkgcm91dGU6IEdhdGV3YXlSb3V0ZTtcbiAgcmVhZG9ubHkgYm9keTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICByZWFkb25seSBoZWFkZXJzOiBIZWFkZXJzO1xuICByZWFkb25seSBzaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vKiogRXhlY3V0ZSBhIGRpcmVjdCByb3V0ZSB3aXRoIFNESy1vd25lZCBhdXRoZW50aWNhdGlvbiBhbmQgYW4gdW5idWZmZXJlZCByZXNwb25zZSBib2R5LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YWJyaWNrcyhyZXF1ZXN0OiBEYXRhYnJpY2tzVHJhbnNwb3J0UmVxdWVzdCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpLmNsaWVudDtcbiAgY29uc3QgaG9zdCA9IChhd2FpdCBjbGllbnQuY29uZmlnLmdldEhvc3QoKSkudG9TdHJpbmcoKTtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSk7XG4gIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCFCTE9DS0VEX1JFUVVFU1RfSEVBREVSUy5oYXMobm9ybWFsaXplZCkgJiYgIW5vcm1hbGl6ZWQuc3RhcnRzV2l0aChcIngtZm9yd2FyZGVkLVwiKSkge1xuICAgICAgaGVhZGVycy5zZXQobmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIGF3YWl0IGNsaWVudC5jb25maWcuYXV0aGVudGljYXRlKGhlYWRlcnMpO1xuICBjb25zdCB1cmwgPSB1cHN0cmVhbVVybChob3N0LCByZXF1ZXN0LnJvdXRlKTtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KGRpcmVjdERhdGFicmlja3NSZXF1ZXN0Qm9keShyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0LmJvZHkpKTtcbiAgbG9nZ2VyLmRlYnVnKFwic2VuZGluZyB1cHN0cmVhbSByZXF1ZXN0XCIsIHtcbiAgICBtb2RlbDogcmVxdWVzdC5yb3V0ZS51cHN0cmVhbU1vZGVsLFxuICAgIHBhdGg6IG5ldyBVUkwodXJsKS5wYXRobmFtZSxcbiAgICBzdHJlYW06IHJlcXVlc3QuYm9keS5zdHJlYW0gPT09IHRydWUsXG4gICAgdXBzdHJlYW1Qcm90b2NvbDogcmVxdWVzdC5yb3V0ZS51cHN0cmVhbVByb3RvY29sLFxuICB9KTtcbiAgdHJ5IHtcbiAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keSxcbiAgICAgIHNpZ25hbDogcmVxdWVzdC5zaWduYWwsXG4gICAgfSk7XG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiZcbiAgICAgIChhd2FpdCB3b3Jrc3BhY2VDbGllbnQucmVmcmVzaFdvcmtzcGFjZUNsaWVudEF1dGhlbnRpY2F0aW9uKGNsaWVudCkpXG4gICAgKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJyZXRyeWluZyByZWplY3RlZCB1cHN0cmVhbSBjcmVkZW50aWFsXCIsIHtcbiAgICAgICAgbW9kZWw6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Nb2RlbCxcbiAgICAgICAgdXBzdHJlYW1Qcm90b2NvbDogcmVxdWVzdC5yb3V0ZS51cHN0cmVhbVByb3RvY29sLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCByZXNwb25zZS5ib2R5Py5jYW5jZWwoKTtcbiAgICAgIGhlYWRlcnMuZGVsZXRlKFwiYXV0aG9yaXphdGlvblwiKTtcbiAgICAgIGhlYWRlcnMuZGVsZXRlKFwieC1kYXRhYnJpY2tzLXdvcmtzcGFjZS1pZFwiKTtcbiAgICAgIGF3YWl0IGNsaWVudC5jb25maWcuYXV0aGVudGljYXRlKGhlYWRlcnMpO1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keSxcbiAgICAgICAgc2lnbmFsOiByZXF1ZXN0LnNpZ25hbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBkZXRhaWxzID0ge1xuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgbW9kZWw6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Nb2RlbCxcbiAgICAgIHJlcXVlc3RJZDpcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LXJlcXVlc3QtaWRcIikgPz8gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LWRhdGFicmlja3MtcmVxdWVzdC1pZFwiKSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgdXBzdHJlYW1Qcm90b2NvbDogcmVxdWVzdC5yb3V0ZS51cHN0cmVhbVByb3RvY29sLFxuICAgIH07XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJyZWNlaXZlZCB1cHN0cmVhbSByZXNwb25zZVwiLCBkZXRhaWxzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLndhcm4oXCJ1cHN0cmVhbSByZXNwb25zZSBmYWlsZWRcIiwgZGV0YWlscyk7XG4gICAgICB2b2lkIGxvZ1Vwc3RyZWFtRmFpbHVyZUJvZHkocmVzcG9uc2UuY2xvbmUoKSwgZGV0YWlscyk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoXCJ1cHN0cmVhbSBmZXRjaCBmYWlsZWRcIiwge1xuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgZXJyb3IsXG4gICAgICBtb2RlbDogcmVxdWVzdC5yb3V0ZS51cHN0cmVhbU1vZGVsLFxuICAgICAgdXBzdHJlYW1Qcm90b2NvbDogcmVxdWVzdC5yb3V0ZS51cHN0cmVhbVByb3RvY29sLFxuICAgIH0pO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKiBSZW1vdmUgY2xpZW50IGNvbXBhdGliaWxpdHkgZmllbGRzIHJlamVjdGVkIGJ5IGRpcmVjdCBEYXRhYnJpY2tzIHByb3RvY29scy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3REYXRhYnJpY2tzUmVxdWVzdEJvZHkoXG4gIHJvdXRlOiBQaWNrPEdhdGV3YXlSb3V0ZSwgXCJ1cHN0cmVhbVByb3RvY29sXCIgfCBcInVwc3RyZWFtTW9kZWxcIj4sXG4gIGJvZHk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3Qgc2FuaXRpemVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4uYm9keSwgbW9kZWw6IHJvdXRlLnVwc3RyZWFtTW9kZWwgfTtcbiAgaWYgKHJvdXRlLnVwc3RyZWFtUHJvdG9jb2wgPT09IFwiZGF0YWJyaWNrcy1jaGF0XCIpIHtcbiAgICBvcGVuYWlDaGF0LnN0cmlwVW5zdXBwb3J0ZWRDaGF0RmllbGRzKHNhbml0aXplZCk7XG4gIH0gZWxzZSB7XG4gICAgZGVsZXRlIHNhbml0aXplZC5wYXJhbGxlbF90b29sX2NhbGxzO1xuICB9XG4gIHJldHVybiBzYW5pdGl6ZWQ7XG59XG5cbi8qKiBDb3B5IG9ubHkgcmVzcG9uc2UgaGVhZGVycyB0aGF0IGJlbG9uZyB0byB0aGUgcHVibGljIG1vZGVsIHByb3RvY29sLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdhdGV3YXlSZXNwb25zZUhlYWRlcnModXBzdHJlYW06IEhlYWRlcnMpOiBIZWFkZXJzIHtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG4gIHVwc3RyZWFtLmZvckVhY2goKHZhbHVlLCBuYW1lKSA9PiB7XG4gICAgaWYgKCFCTE9DS0VEX1JFU1BPTlNFX0hFQURFUlMuaGFzKG5hbWUudG9Mb3dlckNhc2UoKSkpIGhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgfSk7XG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2dVcHN0cmVhbUZhaWx1cmVCb2R5KFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIGRldGFpbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpO1xuICBpZiAoIXJlYWRlcikgcmV0dXJuO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGxldCBwcmV2aWV3ID0gXCJcIjtcbiAgbGV0IGJ5dGVzID0gMDtcbiAgdHJ5IHtcbiAgICB3aGlsZSAoYnl0ZXMgPCBFUlJPUl9QUkVWSUVXX0JZVEVTKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZiAoY2h1bmsuZG9uZSkgYnJlYWs7XG4gICAgICBjb25zdCByZW1haW5pbmcgPSBFUlJPUl9QUkVWSUVXX0JZVEVTIC0gYnl0ZXM7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNodW5rLnZhbHVlLnN1YmFycmF5KDAsIHJlbWFpbmluZyk7XG4gICAgICBieXRlcyArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgcHJldmlldyArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSk7XG4gICAgICBpZiAodmFsdWUuYnl0ZUxlbmd0aCA8IGNodW5rLnZhbHVlLmJ5dGVMZW5ndGgpIGJyZWFrO1xuICAgIH1cbiAgICBwcmV2aWV3ICs9IGRlY29kZXIuZGVjb2RlKCk7XG4gICAgbG9nZ2VyLndhcm4oXCJ1cHN0cmVhbSBlcnJvciBib2R5XCIsIHtcbiAgICAgIC4uLmRldGFpbHMsXG4gICAgICBwcmV2aWV3LFxuICAgICAgdHJ1bmNhdGVkOiBieXRlcyA+PSBFUlJPUl9QUkVWSUVXX0JZVEVTLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNvdWxkIG5vdCByZWFkIHVwc3RyZWFtIGVycm9yIGJvZHlcIiwgeyAuLi5kZXRhaWxzLCBlcnJvciB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgfVxufVxuIl19
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQXFCLE1BQU0saUNBQWlDLENBQUM7QUFFakYsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQzVELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUVyQyxNQUFNLHVCQUF1QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3RDLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsTUFBTTtJQUNOLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsV0FBVztDQUNaLENBQUMsQ0FBQztBQUVILE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdkMsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsWUFBWTtJQUNaLElBQUk7SUFDSixTQUFTO0lBQ1QsbUJBQW1CO0lBQ25CLFNBQVM7Q0FDVixDQUFDLENBQUM7QUFVSCw0RkFBNEY7QUFDNUYsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQUMsT0FBbUM7SUFDdkUsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDNUMsTUFBTSxJ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Q0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMxQixPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVO2dCQUFFLE1BQU07UUFDdkQsQ0FBQztRQUNELE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUNqQyxHQUFHLE9BQU87WUFDVixPQUFPO1lBQ1AsU0FBUyxFQUFFLEtBQUssSUFBSSxtQkFBbUI7U0FDeEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFO1lBQ2pELEdBQUcsT0FBTztZQUNWLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXV0aGVudGljYXRlZCBzdHJlYW1pbmcgdHJhbnNwb3J0IGZvciBkaXJlY3QgRGF0YWJyaWNrcyBnYXRld2F5IHJvdXRlcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGJ4LXRvb2xzL2RhdGFicmlja3NcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBvcGVuYWlDaGF0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyB1cHN0cmVhbVVybCwgdHlwZSBHYXRld2F5Um91dGUgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0L21vZGVsLWdhdGV3YXkvdHJhbnNwb3J0XCIpO1xuY29uc3QgRVJST1JfUFJFVklFV19CWVRFUyA9IDggKiAxMDI0O1xuXG5jb25zdCBCTE9DS0VEX1JFUVVFU1RfSEVBREVSUyA9IG5ldyBTZXQoW1xuICBcImFjY2VwdC1lbmNvZGluZ1wiLFxuICBcImF1dGhvcml6YXRpb25cIixcbiAgXCJjb25uZWN0aW9uXCIsXG4gIFwiY29udGVudC1sZW5ndGhcIixcbiAgXCJjb29raWVcIixcbiAgXCJob3N0XCIsXG4gIFwicHJveHktYXV0aG9yaXphdGlvblwiLFxuICBcInRyYW5zZmVyLWVuY29kaW5nXCIsXG4gIFwieC1hcGkta2V5XCIsXG5dKTtcblxuY29uc3QgQkxPQ0tFRF9SRVNQT05TRV9IRUFERVJTID0gbmV3IFNldChbXG4gIFwiY29ubmVjdGlvblwiLFxuICBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgXCJjb250ZW50LWxlbmd0aFwiLFxuICBcImtlZXAtYWxpdmVcIixcbiAgXCJwcm94eS1hdXRoZW50aWNhdGVcIixcbiAgXCJwcm94eS1hdXRob3JpemF0aW9uXCIsXG4gIFwic2V0LWNvb2tpZVwiLFxuICBcInRlXCIsXG4gIFwidHJhaWxlclwiLFxuICBcInRyYW5zZmVyLWVuY29kaW5nXCIsXG4gIFwidXBncmFkZVwiLFxuXSk7XG5cbi8qKiBJbnB1dHMgZm9yIG9uZSBkaXJlY3QgRGF0YWJyaWNrcyBwcm90b2NvbCByZXF1ZXN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzVHJhbnNwb3J0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IHJvdXRlOiBHYXRld2F5Um91dGU7XG4gIHJlYWRvbmx5IGJvZHk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgcmVhZG9ubHkgaGVhZGVyczogSGVhZGVycztcbiAgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqIEV4ZWN1dGUgYSBkaXJlY3Qgcm91dGUgd2l0aCBTREstb3duZWQgYXV0aGVudGljYXRpb24gYW5kIGFuIHVuYnVmZmVyZWQgcmVzcG9uc2UgYm9keS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGFicmlja3MocmVxdWVzdDogRGF0YWJyaWNrc1RyYW5zcG9ydFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IGNsaWVudCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKS5jbGllbnQ7XG4gIGNvbnN0IGhvc3QgPSAoYXdhaXQgY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7IFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0pO1xuICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIG5hbWUpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghQkxPQ0tFRF9SRVFVRVNUX0hFQURFUlMuaGFzKG5vcm1hbGl6ZWQpICYmICFub3JtYWxpemVkLnN0YXJ0c1dpdGgoXCJ4LWZvcndhcmRlZC1cIikpIHtcbiAgICAgIGhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBhd2FpdCBjbGllbnQuY29uZmlnLmF1dGhlbnRpY2F0ZShoZWFkZXJzKTtcbiAgY29uc3QgdXJsID0gdXBzdHJlYW1VcmwoaG9zdCwgcmVxdWVzdC5yb3V0ZSk7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShkaXJlY3REYXRhYnJpY2tzUmVxdWVzdEJvZHkocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5ib2R5KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInNlbmRpbmcgdXBzdHJlYW0gcmVxdWVzdFwiLCB7XG4gICAgbW9kZWw6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Nb2RlbCxcbiAgICBwYXRoOiBuZXcgVVJMKHVybCkucGF0aG5hbWUsXG4gICAgc3RyZWFtOiByZXF1ZXN0LmJvZHkuc3RyZWFtID09PSB0cnVlLFxuICAgIHVwc3RyZWFtUHJvdG9jb2w6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Qcm90b2NvbCxcbiAgfSk7XG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHksXG4gICAgICBzaWduYWw6IHJlcXVlc3Quc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmIChcbiAgICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmXG4gICAgICAoYXdhaXQgd29ya3NwYWNlQ2xpZW50LnJlZnJlc2hXb3Jrc3BhY2VDbGllbnRBdXRoZW50aWNhdGlvbihjbGllbnQpKVxuICAgICkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmV0cnlpbmcgcmVqZWN0ZWQgdXBzdHJlYW0gY3JlZGVudGlhbFwiLCB7XG4gICAgICAgIG1vZGVsOiByZXF1ZXN0LnJvdXRlLnVwc3RyZWFtTW9kZWwsXG4gICAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Qcm90b2NvbCxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgcmVzcG9uc2UuYm9keT8uY2FuY2VsKCk7XG4gICAgICBoZWFkZXJzLmRlbGV0ZShcImF1dGhvcml6YXRpb25cIik7XG4gICAgICBoZWFkZXJzLmRlbGV0ZShcIngtZGF0YWJyaWNrcy13b3Jrc3BhY2UtaWRcIik7XG4gICAgICBhd2FpdCBjbGllbnQuY29uZmlnLmF1dGhlbnRpY2F0ZShoZWFkZXJzKTtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHksXG4gICAgICAgIHNpZ25hbDogcmVxdWVzdC5zaWduYWwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGV0YWlscyA9IHtcbiAgICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICAgIG1vZGVsOiByZXF1ZXN0LnJvdXRlLnVwc3RyZWFtTW9kZWwsXG4gICAgICByZXF1ZXN0SWQ6XG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwieC1yZXF1ZXN0LWlkXCIpID8/IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwieC1kYXRhYnJpY2tzLXJlcXVlc3QtaWRcIiksXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Qcm90b2NvbCxcbiAgICB9O1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmVjZWl2ZWQgdXBzdHJlYW0gcmVzcG9uc2VcIiwgZGV0YWlscyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci53YXJuKFwidXBzdHJlYW0gcmVzcG9uc2UgZmFpbGVkXCIsIGRldGFpbHMpO1xuICAgICAgdm9pZCBsb2dVcHN0cmVhbUZhaWx1cmVCb2R5KHJlc3BvbnNlLmNsb25lKCksIGRldGFpbHMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKFwidXBzdHJlYW0gZmV0Y2ggZmFpbGVkXCIsIHtcbiAgICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyb3IpLFxuICAgICAgbW9kZWw6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Nb2RlbCxcbiAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Qcm90b2NvbCxcbiAgICB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKiogUmVtb3ZlIGNsaWVudCBjb21wYXRpYmlsaXR5IGZpZWxkcyByZWplY3RlZCBieSBkaXJlY3QgRGF0YWJyaWNrcyBwcm90b2NvbHMuICovXG5leHBvcnQgZnVuY3Rpb24gZGlyZWN0RGF0YWJyaWNrc1JlcXVlc3RCb2R5KFxuICByb3V0ZTogUGljazxHYXRld2F5Um91dGUsIFwidXBzdHJlYW1Qcm90b2NvbFwiIHwgXCJ1cHN0cmVhbU1vZGVsXCI+LFxuICBib2R5OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHNhbml0aXplZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmJvZHksIG1vZGVsOiByb3V0ZS51cHN0cmVhbU1vZGVsIH07XG4gIGlmIChyb3V0ZS51cHN0cmVhbVByb3RvY29sID09PSBcImRhdGFicmlja3MtY2hhdFwiKSB7XG4gICAgb3BlbmFpQ2hhdC5zdHJpcFVuc3VwcG9ydGVkQ2hhdEZpZWxkcyhzYW5pdGl6ZWQpO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSBzYW5pdGl6ZWQucGFyYWxsZWxfdG9vbF9jYWxscztcbiAgfVxuICByZXR1cm4gc2FuaXRpemVkO1xufVxuXG4vKiogQ29weSBvbmx5IHJlc3BvbnNlIGhlYWRlcnMgdGhhdCBiZWxvbmcgdG8gdGhlIHB1YmxpYyBtb2RlbCBwcm90b2NvbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnYXRld2F5UmVzcG9uc2VIZWFkZXJzKHVwc3RyZWFtOiBIZWFkZXJzKTogSGVhZGVycyB7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICB1cHN0cmVhbS5mb3JFYWNoKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgIGlmICghQkxPQ0tFRF9SRVNQT05TRV9IRUFERVJTLmhhcyhuYW1lLnRvTG93ZXJDYXNlKCkpKSBoZWFkZXJzLnNldChuYW1lLCB2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gaGVhZGVycztcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9nVXBzdHJlYW1GYWlsdXJlQm9keShcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKTtcbiAgaWYgKCFyZWFkZXIpIHJldHVybjtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBsZXQgcHJldmlldyA9IFwiXCI7XG4gIGxldCBieXRlcyA9IDA7XG4gIHRyeSB7XG4gICAgd2hpbGUgKGJ5dGVzIDwgRVJST1JfUFJFVklFV19CWVRFUykge1xuICAgICAgY29uc3QgY2h1bmsgPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgaWYgKGNodW5rLmRvbmUpIGJyZWFrO1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gRVJST1JfUFJFVklFV19CWVRFUyAtIGJ5dGVzO1xuICAgICAgY29uc3QgdmFsdWUgPSBjaHVuay52YWx1ZS5zdWJhcnJheSgwLCByZW1haW5pbmcpO1xuICAgICAgYnl0ZXMgKz0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgIHByZXZpZXcgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgaWYgKHZhbHVlLmJ5dGVMZW5ndGggPCBjaHVuay52YWx1ZS5ieXRlTGVuZ3RoKSBicmVhaztcbiAgICB9XG4gICAgcHJldmlldyArPSBkZWNvZGVyLmRlY29kZSgpO1xuICAgIGxvZ2dlci53YXJuKFwidXBzdHJlYW0gZXJyb3IgYm9keVwiLCB7XG4gICAgICAuLi5kZXRhaWxzLFxuICAgICAgcHJldmlldyxcbiAgICAgIHRydW5jYXRlZDogYnl0ZXMgPj0gRVJST1JfUFJFVklFV19CWVRFUyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjb3VsZCBub3QgcmVhZCB1cHN0cmVhbSBlcnJvciBib2R5XCIsIHtcbiAgICAgIC4uLmRldGFpbHMsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy50b0Vycm9yKGVycm9yKSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -27,12 +27,12 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@databricks/appkit": "0.81.0",
30
- "@dbx-tools/databricks": "^0.9.119",
31
- "@dbx-tools/model": "^0.9.119",
32
- "@dbx-tools/model-protocol": "^0.9.119",
33
- "@dbx-tools/shared-core": "^0.9.119",
34
- "@dbx-tools/shared-model": "^0.9.119",
35
- "@dbx-tools/shared-model-gateway": "^0.9.119",
30
+ "@dbx-tools/databricks": "^0.9.121",
31
+ "@dbx-tools/model": "^0.9.121",
32
+ "@dbx-tools/model-protocol": "^0.9.121",
33
+ "@dbx-tools/shared-core": "^0.9.121",
34
+ "@dbx-tools/shared-model": "^0.9.121",
35
+ "@dbx-tools/shared-model-gateway": "^0.9.121",
36
36
  "ai": "^7.0.0",
37
37
  "zod": "4.3.6"
38
38
  },
@@ -90,7 +90,7 @@
90
90
  "./package.json": "./package.json"
91
91
  }
92
92
  },
93
- "version": "0.9.119",
93
+ "version": "0.9.121",
94
94
  "types": "./lib/index.d.ts",
95
95
  "dbxToolsConfig": {
96
96
  "tags": [
package/src/routes.ts CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  import { Readable } from "node:stream";
8
8
  import { pipeline } from "node:stream/promises";
9
- import { log } from "@dbx-tools/shared-core";
9
+ import { errorUtils, log } from "@dbx-tools/shared-core";
10
10
  import type { ClientProtocol } from "@dbx-tools/shared-model-gateway";
11
11
  import type express from "express";
12
12
 
@@ -43,7 +43,7 @@ export async function sendModels(
43
43
  logger.error("models request failed", {
44
44
  ...requestContext(request),
45
45
  elapsedMs: Date.now() - startedAt,
46
- error,
46
+ error: errorUtils.toError(error),
47
47
  });
48
48
  sendError("openai-responses", response, error);
49
49
  }
@@ -112,7 +112,7 @@ export async function sendInference(
112
112
  logger.error("inference request failed", {
113
113
  ...requestContext(request),
114
114
  elapsedMs: Date.now() - startedAt,
115
- error,
115
+ error: errorUtils.toError(error),
116
116
  protocol,
117
117
  });
118
118
  if (response.headersSent) {
@@ -15,7 +15,7 @@ import {
15
15
  createDatabricksLanguageModel,
16
16
  type DatabricksLanguageModelProtocol,
17
17
  } from "@dbx-tools/model-protocol/provider";
18
- import { log } from "@dbx-tools/shared-core";
18
+ import { errorUtils, log } from "@dbx-tools/shared-core";
19
19
  import type { GatewayRoute } from "@dbx-tools/shared-model-gateway";
20
20
  import { streamText, type LanguageModel, type ToolSet } from "ai";
21
21
 
@@ -47,7 +47,10 @@ export async function translateGatewayRequest(
47
47
  maxRetries: 0,
48
48
  abortSignal: signal,
49
49
  onError: ({ error }) => {
50
- logger.error("stream failed", { error, model: route.target.id });
50
+ logger.error("stream failed", {
51
+ error: errorUtils.toError(error),
52
+ model: route.target.id,
53
+ });
51
54
  },
52
55
  onAbort: () => {
53
56
  logger.debug("translation aborted", { model: route.target.id });
package/src/transport.ts CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  import { getExecutionContext } from "@databricks/appkit";
8
8
  import { workspaceClient } from "@dbx-tools/databricks";
9
- import { log } from "@dbx-tools/shared-core";
9
+ import { errorUtils, log } from "@dbx-tools/shared-core";
10
10
  import { openaiChat } from "@dbx-tools/shared-model";
11
11
  import { upstreamUrl, type GatewayRoute } from "@dbx-tools/shared-model-gateway";
12
12
 
@@ -112,7 +112,7 @@ export async function fetchDatabricks(request: DatabricksTransportRequest): Prom
112
112
  } catch (error) {
113
113
  logger.error("upstream fetch failed", {
114
114
  elapsedMs: Date.now() - startedAt,
115
- error,
115
+ error: errorUtils.toError(error),
116
116
  model: request.route.upstreamModel,
117
117
  upstreamProtocol: request.route.upstreamProtocol,
118
118
  });
@@ -169,7 +169,10 @@ async function logUpstreamFailureBody(
169
169
  truncated: bytes >= ERROR_PREVIEW_BYTES,
170
170
  });
171
171
  } catch (error) {
172
- logger.debug("could not read upstream error body", { ...details, error });
172
+ logger.debug("could not read upstream error body", {
173
+ ...details,
174
+ error: errorUtils.toError(error),
175
+ });
173
176
  } finally {
174
177
  await reader.cancel().catch(() => undefined);
175
178
  }