@dbx-tools/appkit-model-gateway 0.9.154 → 0.9.157

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.154";
6
+ export const PACKAGE_VERSION = "0.9.157";
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";
@@ -13,12 +13,17 @@ export * as router from "./src/router.ts";
13
13
  export * as routes from "./src/routes.ts";
14
14
  export * as translation from "./src/translation.ts";
15
15
  export * as transport from "./src/transport.ts";
16
- export { ModelGatewayError, ModelGateway } from "./src/gateway.ts";
16
+ export { ModelGatewayError, ModelGateway, sanitizeInferenceBody, gatewayModelSelection } from "./src/gateway.ts";
17
17
  export type { ModelGatewayOptions } from "./src/gateway.ts";
18
+ export { listModelsPayload, codexModelSlug } from "./src/models.ts";
18
19
  export { ModelGatewayPlugin, modelGateway } from "./src/plugin.ts";
19
20
  export type { ModelGatewayPluginConfig } from "./src/plugin.ts";
21
+ export { adaptInferenceReasoning, learnAndAdaptReasoningRetry } from "./src/reasoning-adapt.ts";
20
22
  export type { AdaptedInferenceBody } from "./src/reasoning-adapt.ts";
21
23
  export { DatabricksModelRegistry } from "./src/registry.ts";
22
24
  export type { ModelRegistryResolveOptions, ModelRegistry, ModelRegistryOptions } from "./src/registry.ts";
23
- export { UnsupportedGatewayFeatureError } from "./src/router.ts";
25
+ export { UnsupportedGatewayFeatureError, resolveRoute, requestedFeatures, isCodexOriginator } from "./src/router.ts";
26
+ export { sendHealth, sendModels, sendInference } from "./src/routes.ts";
27
+ export { translateGatewayRequest } from "./src/translation.ts";
28
+ export { fetchDatabricks, directDatabricksRequestBody, gatewayResponseHeaders } from "./src/transport.ts";
24
29
  export type { DatabricksTransportRequest } from "./src/transport.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.154";
2
+ export declare const PACKAGE_VERSION = "0.9.157";
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";
@@ -9,12 +9,17 @@ export * as router from "./src/router.ts";
9
9
  export * as routes from "./src/routes.ts";
10
10
  export * as translation from "./src/translation.ts";
11
11
  export * as transport from "./src/transport.ts";
12
- export { ModelGatewayError, ModelGateway } from "./src/gateway.ts";
12
+ export { ModelGatewayError, ModelGateway, sanitizeInferenceBody, gatewayModelSelection } from "./src/gateway.ts";
13
13
  export type { ModelGatewayOptions } from "./src/gateway.ts";
14
+ export { listModelsPayload, codexModelSlug } from "./src/models.ts";
14
15
  export { ModelGatewayPlugin, modelGateway } from "./src/plugin.ts";
15
16
  export type { ModelGatewayPluginConfig } from "./src/plugin.ts";
17
+ export { adaptInferenceReasoning, learnAndAdaptReasoningRetry } from "./src/reasoning-adapt.ts";
16
18
  export type { AdaptedInferenceBody } from "./src/reasoning-adapt.ts";
17
19
  export { DatabricksModelRegistry } from "./src/registry.ts";
18
20
  export type { ModelRegistryResolveOptions, ModelRegistry, ModelRegistryOptions } from "./src/registry.ts";
19
- export { UnsupportedGatewayFeatureError } from "./src/router.ts";
21
+ export { UnsupportedGatewayFeatureError, resolveRoute, requestedFeatures, isCodexOriginator } from "./src/router.ts";
22
+ export { sendHealth, sendModels, sendInference } from "./src/routes.ts";
23
+ export { translateGatewayRequest } from "./src/translation.ts";
24
+ export { fetchDatabricks, directDatabricksRequestBody, gatewayResponseHeaders } from "./src/transport.ts";
20
25
  export type { DatabricksTransportRequest } from "./src/transport.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.154";
5
+ export const PACKAGE_VERSION = "0.9.157";
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";
@@ -12,8 +12,13 @@ export * as router from "./src/router.js";
12
12
  export * as routes from "./src/routes.js";
13
13
  export * as translation from "./src/translation.js";
14
14
  export * as transport from "./src/transport.js";
15
- export { ModelGatewayError, ModelGateway } from "./src/gateway.js";
15
+ export { ModelGatewayError, ModelGateway, sanitizeInferenceBody, gatewayModelSelection } from "./src/gateway.js";
16
+ export { listModelsPayload, codexModelSlug } from "./src/models.js";
16
17
  export { ModelGatewayPlugin, modelGateway } from "./src/plugin.js";
18
+ export { adaptInferenceReasoning, learnAndAdaptReasoningRetry } from "./src/reasoning-adapt.js";
17
19
  export { DatabricksModelRegistry } from "./src/registry.js";
18
- export { UnsupportedGatewayFeatureError } from "./src/router.js";
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxjQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFNUQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tb2RlbC1nYXRld2F5XCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTU0XCI7XG5leHBvcnQgKiBhcyBnYXRld2F5IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbHMgZnJvbSBcIi4vc3JjL21vZGVscy50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHJlYXNvbmluZ0FkYXB0IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCAqIGFzIHJlZ2lzdHJ5IGZyb20gXCIuL3NyYy9yZWdpc3RyeS50c1wiO1xuZXhwb3J0ICogYXMgcm91dGVyIGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHJvdXRlcyBmcm9tIFwiLi9zcmMvcm91dGVzLnRzXCI7XG5leHBvcnQgKiBhcyB0cmFuc2xhdGlvbiBmcm9tIFwiLi9zcmMvdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHRyYW5zcG9ydCBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlFcnJvciwgTW9kZWxHYXRld2F5IH0gZnJvbSBcIi4vc3JjL2dhdGV3YXkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlQbHVnaW4sIG1vZGVsR2F0ZXdheSB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxHYXRld2F5UGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBBZGFwdGVkSW5mZXJlbmNlQm9keSB9IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCB7IERhdGFicmlja3NNb2RlbFJlZ2lzdHJ5IH0gZnJvbSBcIi4vc3JjL3JlZ2lzdHJ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucywgTW9kZWxSZWdpc3RyeSwgTW9kZWxSZWdpc3RyeU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvcmVnaXN0cnkudHNcIjtcbmV4cG9ydCB7IFVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvciB9IGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc1RyYW5zcG9ydFJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG4iXX0=
20
+ export { UnsupportedGatewayFeatureError, resolveRoute, requestedFeatures, isCodexOriginator } from "./src/router.js";
21
+ export { sendHealth, sendModels, sendInference } from "./src/routes.js";
22
+ export { translateGatewayRequest } from "./src/translation.js";
23
+ export { fetchDatabricks, directDatabricksRequestBody, gatewayResponseHeaders } from "./src/transport.js";
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxjQUFjLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRW5FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTVELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNySCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgY29uc3QgUEFDS0FHRV9JREVOVElGSUVSID0gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tb2RlbC1nYXRld2F5XCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuMTU3XCI7XG5leHBvcnQgKiBhcyBnYXRld2F5IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbHMgZnJvbSBcIi4vc3JjL21vZGVscy50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHJlYXNvbmluZ0FkYXB0IGZyb20gXCIuL3NyYy9yZWFzb25pbmctYWRhcHQudHNcIjtcbmV4cG9ydCAqIGFzIHJlZ2lzdHJ5IGZyb20gXCIuL3NyYy9yZWdpc3RyeS50c1wiO1xuZXhwb3J0ICogYXMgcm91dGVyIGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHJvdXRlcyBmcm9tIFwiLi9zcmMvcm91dGVzLnRzXCI7XG5leHBvcnQgKiBhcyB0cmFuc2xhdGlvbiBmcm9tIFwiLi9zcmMvdHJhbnNsYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHRyYW5zcG9ydCBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG5leHBvcnQgeyBNb2RlbEdhdGV3YXlFcnJvciwgTW9kZWxHYXRld2F5LCBzYW5pdGl6ZUluZmVyZW5jZUJvZHksIGdhdGV3YXlNb2RlbFNlbGVjdGlvbiB9IGZyb20gXCIuL3NyYy9nYXRld2F5LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsR2F0ZXdheU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZ2F0ZXdheS50c1wiO1xuZXhwb3J0IHsgbGlzdE1vZGVsc1BheWxvYWQsIGNvZGV4TW9kZWxTbHVnIH0gZnJvbSBcIi4vc3JjL21vZGVscy50c1wiO1xuZXhwb3J0IHsgTW9kZWxHYXRld2F5UGx1Z2luLCBtb2RlbEdhdGV3YXkgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsR2F0ZXdheVBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB7IGFkYXB0SW5mZXJlbmNlUmVhc29uaW5nLCBsZWFybkFuZEFkYXB0UmVhc29uaW5nUmV0cnkgfSBmcm9tIFwiLi9zcmMvcmVhc29uaW5nLWFkYXB0LnRzXCI7XG5leHBvcnQgdHlwZSB7IEFkYXB0ZWRJbmZlcmVuY2VCb2R5IH0gZnJvbSBcIi4vc3JjL3JlYXNvbmluZy1hZGFwdC50c1wiO1xuZXhwb3J0IHsgRGF0YWJyaWNrc01vZGVsUmVnaXN0cnkgfSBmcm9tIFwiLi9zcmMvcmVnaXN0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxSZWdpc3RyeVJlc29sdmVPcHRpb25zLCBNb2RlbFJlZ2lzdHJ5LCBNb2RlbFJlZ2lzdHJ5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9yZWdpc3RyeS50c1wiO1xuZXhwb3J0IHsgVW5zdXBwb3J0ZWRHYXRld2F5RmVhdHVyZUVycm9yLCByZXNvbHZlUm91dGUsIHJlcXVlc3RlZEZlYXR1cmVzLCBpc0NvZGV4T3JpZ2luYXRvciB9IGZyb20gXCIuL3NyYy9yb3V0ZXIudHNcIjtcbmV4cG9ydCB7IHNlbmRIZWFsdGgsIHNlbmRNb2RlbHMsIHNlbmRJbmZlcmVuY2UgfSBmcm9tIFwiLi9zcmMvcm91dGVzLnRzXCI7XG5leHBvcnQgeyB0cmFuc2xhdGVHYXRld2F5UmVxdWVzdCB9IGZyb20gXCIuL3NyYy90cmFuc2xhdGlvbi50c1wiO1xuZXhwb3J0IHsgZmV0Y2hEYXRhYnJpY2tzLCBkaXJlY3REYXRhYnJpY2tzUmVxdWVzdEJvZHksIGdhdGV3YXlSZXNwb25zZUhlYWRlcnMgfSBmcm9tIFwiLi9zcmMvdHJhbnNwb3J0LnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NUcmFuc3BvcnRSZXF1ZXN0IH0gZnJvbSBcIi4vc3JjL3RyYW5zcG9ydC50c1wiO1xuIl19
package/lib/src/models.js CHANGED
@@ -3,8 +3,7 @@
3
3
  *
4
4
  * @module
5
5
  */
6
- import { isChatClass } from "@dbx-tools/model/classes";
7
- import { modelFamily, modelFamilyRank } from "@dbx-tools/model/policy";
6
+ import { isChatClass, modelFamily, modelFamilyRank } from "@dbx-tools/model";
8
7
  const CODEX_BASE_INSTRUCTIONS = "You are a coding agent. Follow the user's instructions and use the available tools to work in the current repository.";
9
8
  const REASONING_DESCRIPTIONS = {
10
9
  none: "Disable explicit reasoning",
@@ -160,4 +159,4 @@ function hasChatClass(target) {
160
159
  const modelClass = target.endpoint?.class;
161
160
  return modelClass !== undefined && isChatClass(modelClass);
162
161
  }
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFVdkUsTUFBTSx1QkFBdUIsR0FDM0IsdUhBQXVILENBQUM7QUFFMUgsTUFBTSxzQkFBc0IsR0FBcUM7SUFDL0QsSUFBSSxFQUFFLDRCQUE0QjtJQUNsQyxPQUFPLEVBQUUsNkNBQTZDO0lBQ3RELEdBQUcsRUFBRSw0QkFBNEI7SUFDakMsTUFBTSxFQUFFLCtCQUErQjtJQUN2QyxJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLEtBQUssRUFBRSxvQ0FBb0M7SUFDM0MsR0FBRyxFQUFFLDRDQUE0QztDQUNsRCxDQUFDO0FBcUJGLE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBK0IsRUFDL0IsWUFBcUIsRUFDckIsYUFBYSxHQUFHLEtBQUssRUFDckIsa0JBQWtCLEdBQUcsS0FBSztJQUUxQixNQUFNLFNBQVMsR0FBRyxPQUFPO1NBQ3RCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxLQUFLLElBQUksQ0FBQztTQUNoRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQzdCLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxX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IHBheWxvYWRzIGRlcml2ZWQgZnJvbSB0aGUgbGl2ZSByZWdpc3RyeS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgaXNDaGF0Q2xhc3MgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbC9jbGFzc2VzXCI7XG5pbXBvcnQgeyBtb2RlbEZhbWlseSwgbW9kZWxGYW1pbHlSYW5rIH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWwvcG9saWN5XCI7XG5pbXBvcnQgdHlwZSB7XG4gIENvZGV4TW9kZWwsXG4gIENvZGV4TW9kZWxMaXN0UmVzcG9uc2UsXG4gIE1vZGVsTGlzdFJlc3BvbnNlLFxuICBNb2RlbFRhcmdldCxcbiAgT3BlbkFJTW9kZWwsXG4gIE9wZW5BSU1vZGVsTGlzdFJlc3BvbnNlLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuXG5jb25zdCBDT0RFWF9CQVNFX0lOU1RSVUNUSU9OUyA9XG4gIFwiWW91IGFyZSBhIGNvZGluZyBhZ2VudC4gRm9sbG93IHRoZSB1c2VyJ3MgaW5zdHJ1Y3Rpb25zIGFuZCB1c2UgdGhlIGF2YWlsYWJsZSB0b29scyB0byB3b3JrIGluIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuXCI7XG5cbmNvbnN0IFJFQVNPTklOR19ERVNDUklQVElPTlM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0ge1xuICBub25lOiBcIkRpc2FibGUgZXhwbGljaXQgcmVhc29uaW5nXCIsXG4gIG1pbmltYWw6IFwiVXNlIHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgcmVhc29uaW5nIGJ1ZGdldFwiLFxuICBsb3c6IFwiVXNlIGEgbG93IHJlYXNvbmluZyBidWRnZXRcIixcbiAgbWVkaXVtOiBcIlVzZSBhIG1lZGl1bSByZWFzb25pbmcgYnVkZ2V0XCIsXG4gIGhpZ2g6IFwiVXNlIGEgaGlnaCByZWFzb25pbmcgYnVkZ2V0XCIsXG4gIHhoaWdoOiBcIlVzZSBhbiBleHRyYS1oaWdoIHJlYXNvbmluZyBidWRnZXRcIixcbiAgbWF4OiBcIlVzZSB0aGUgbGFyZ2VzdCBhdmFpbGFibGUgcmVhc29uaW5nIGJ1ZGdldFwiLFxufTtcblxuLyoqIEJ1aWxkIHRoZSBjb21iaW5lZCBPcGVuQUkgYW5kIG9wdGlvbmFsIENvZGV4IG1vZGVsIGNhdGFsb2d1ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0TW9kZWxzUGF5bG9hZChcbiAgdGFyZ2V0czogcmVhZG9ubHkgTW9kZWxUYXJnZXRbXSxcbiAgaW5jbHVkZUNvZGV4OiB0cnVlLFxuICBwcmVzZXJ2ZU9yZGVyPzogYm9vbGVhbixcbiAgcHJlZmVyU3lzdGVtTW9kZWxzPzogYm9vbGVhbixcbik6IENvZGV4TW9kZWxMaXN0UmVzcG9uc2U7XG5leHBvcnQgZnVuY3Rpb24gbGlzdE1vZGVsc1BheWxvYWQoXG4gIHRhcmdldHM6IHJlYWRvbmx5IE1vZGVsVGFyZ2V0W10sXG4gIGluY2x1ZGVDb2RleDogZmFsc2UsXG4gIHByZXNlcnZlT3JkZXI/OiBib29sZWFuLFxuICBwcmVmZXJTeXN0ZW1Nb2RlbHM/OiBib29sZWFuLFxuKTogT3BlbkFJTW9kZWxMaXN0UmVzcG9uc2U7XG5leHBvcnQgZnVuY3Rpb24gbGlzdE1vZGVsc1BheWxvYWQoXG4gIHRhcmdldHM6IHJlYWRvbmx5IE1vZGVsVGFyZ2V0W10sXG4gIGluY2x1ZGVDb2RleDogYm9vbGVhbixcbiAgcHJlc2VydmVPcmRlcj86IGJvb2xlYW4sXG4gIHByZWZlclN5c3RlbU1vZGVscz86IGJvb2xlYW4sXG4pOiBNb2RlbExpc3RSZXNwb25zZTtcbmV4cG9ydCBmdW5jdGlvbiBsaXN0TW9kZWxzUGF5bG9hZChcbiAgdGFyZ2V0czogcmVhZG9ubHkgTW9kZWxUYXJnZXRbXSxcbiAgaW5jbHVkZUNvZGV4OiBib29sZWFuLFxuICBwcmVzZXJ2ZU9yZGVyID0gZmFsc2UsXG4gIHByZWZlclN5c3RlbU1vZGVscyA9IGZhbHNlLFxuKTogTW9kZWxMaXN0UmVzcG9uc2Uge1xuICBjb25zdCBhdmFpbGFibGUgPSB0YXJnZXRzXG4gICAgLmZpbHRlcigodGFyZ2V0KSA9PiB0YXJnZXQuZW5kcG9pbnQ/LnN0YXR1cz8uZGVwcmVjYXRlZCAhPT0gdHJ1ZSlcbiAgICAuZmlsdGVyKCh0YXJnZXQpID0+ICFpbmNsdWRlQ29kZXggfHwgaGFzQ2hhdENsYXNzKHRhcmdldCkpO1xuICBpZiAoIXByZXNlcnZlT3JkZXIpIHtcbiAgICBhdmFpbGFibGUuc29ydCgobGVmdCwgcmlnaHQpID0+XG4gICAgICBjb21wYXJlQ2F0YWxvZ3VlVGFyZ2V0cyhsZWZ0LCByaWdodCwgKHRhcmdldCkgPT4gdGFyZ2V0LmRpc3BsYXlOYW1lKSxcbiAgICApO1xuICB9XG4gIGlmIChpbmNsdWRlQ29kZXgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZWxzOiBhdmFpbGFibGUubWFwKCh0YXJnZXQsIGluZGV4KSA9PiBjb2RleE1vZGVsKHRhcmdldCwgaW5kZXggKyAxLCBwcmVmZXJTeXN0ZW1Nb2RlbHMpKSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb2JqZWN0OiBcImxpc3RcIixcbiAgICBkYXRhOiBhdmFpbGFibGUubWFwKG9wZW5BaU1vZGVsKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gb3BlbkFpTW9kZWwodGFyZ2V0OiBNb2RlbFRhcmdldCk6IE9wZW5BSU1vZGVsIHtcbiAgcmV0dXJuIHtcbiAgICBpZDogdGFyZ2V0LmlkLFxuICAgIG9iamVjdDogXCJtb2RlbFwiLFxuICAgIGNyZWF0ZWQ6IDAsXG4gICAgb3duZWRfYnk6IFwiZGF0YWJyaWNrc1wiLFxuICAgIG5hbWU6IHRhcmdldC5kaXNwbGF5TmFtZSxcbiAgICB0YXNrOiB0YXJnZXQuZW5kcG9pbnQ/LnRhc2ssXG4gICAgc3RhdHVzOiB0YXJnZXQuZW5kcG9pbnQ/LnN0YXR1cyA/PyB7IGRlcHJlY2F0ZWQ6IGZhbHNlIH0sXG4gICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICB0b29sczogdGFyZ2V0LmNhcGFiaWxpdGllcy50b29scyxcbiAgICAgIHJlYXNvbmluZzogdGFyZ2V0LnJlYXNvbmluZ0VmZm9ydHMsXG4gICAgICByZXNwb25zZXM6IHRhcmdldC5jYXBhYmlsaXRpZXMucmVzcG9uc2VzLFxuICAgICAgb3Blbl9yZXNwb25zZXM6IHRhcmdldC5jYXBhYmlsaXRpZXMub3BlblJlc3BvbnNlcyxcbiAgICAgIGFudGhyb3BpYzogdGFyZ2V0LmNhcGFiaWxpdGllcy5hbnRocm9waWMsXG4gICAgICBlbWJlZGRpbmdzOiB0YXJnZXQuY2FwYWJpbGl0aWVzLmVtYmVkZGluZ3MsXG4gICAgICBhaV9nYXRld2F5X2NvZGV4OiB0YXJnZXQuY2FwYWJpbGl0aWVzLmFpR2F0ZXdheUNvZGV4LFxuICAgICAgc3RyZWFtaW5nOiB0YXJnZXQuY2FwYWJpbGl0aWVzLnN0cmVhbWluZyxcbiAgICAgIHdlYl9zZWFyY2g6IHRhcmdldC5jYXBhYmlsaXRpZXMud2ViU2VhcmNoLFxuICAgIH0sXG4gIH07XG59XG5cbi8qKiBDb2RleCBgL3YxL21vZGVsc2Agc2x1ZzogdGhlIGBzeXN0ZW0uYWkuKmAgc2VydmljZSB3aGVuIHByZWZlcnJlZCwgZWxzZSB0aGUgZW5kcG9pbnQgaWQuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZXhNb2RlbFNsdWcodGFyZ2V0OiBNb2RlbFRhcmdldCwgcHJlZmVyU3lzdGVtTW9kZWxzOiBib29sZWFuKTogc3RyaW5nIHtcbiAgY29uc3QgbW9kZWwgPVxuICAgIHByZWZlclN5c3RlbU1vZGVscyAmJiB0YXJnZXQuY2FwYWJpbGl0aWVzLmFpR2F0ZXdheUNvZGV4ICYmIHRhcmdldC5tb2RlbFNlcnZpY2VOYW1lXG4gICAgICA/IHRhcmdldC5tb2RlbFNlcnZpY2VOYW1lXG4gICAgICA6IHRhcmdldC5pZDtcbiAgcmV0dXJuIGBkYXRhYnJpY2tzLyR7bW9kZWx9YDtcbn1cblxuZnVuY3Rpb24gY29kZXhNb2RlbChcbiAgdGFyZ2V0OiBNb2RlbFRhcmdldCxcbiAgcHJpb3JpdHk6IG51bWJlcixcbiAgcHJlZmVyU3lzdGVtTW9kZWxzOiBib29sZWFuLFxuKTogQ29kZXhNb2RlbCB7XG4gIGNvbnN0IGVmZm9ydHMgPSB0YXJnZXQucmVhc29uaW5nRWZmb3J0cztcbiAgcmV0dXJuIHtcbiAgICBzbHVnOiBjb2RleE1vZGVsU2x1Zyh0YXJnZXQsIHByZWZlclN5c3RlbU1vZGVscyksXG4gICAgZGlzcGxheV9uYW1lOiB0YXJnZXQuZGlzcGxheU5hbWUsXG4gICAgZGVzY3JpcHRpb246IHRhcmdldC5lbmRwb2ludD8uZGVzY3JpcHRpb24gPz8gXCJEYXRhYnJpY2tzIG1vZGVsIHNlcnZpY2VcIixcbiAgICBiYXNlX2luc3RydWN0aW9uczogQ09ERVhfQkFTRV9JTlNUUlVDVElPTlMsXG4gICAgc3RhdHVzOiB0YXJnZXQuZW5kcG9pbnQ/LnN0YXR1cyA/PyB7IGRlcHJlY2F0ZWQ6IGZhbHNlIH0sXG4gICAgc3VwcG9ydGVkX3JlYXNvbmluZ19sZXZlbHM6IGVmZm9ydHMubWFwKChlZmZvcnQpID0+ICh7XG4gICAgICBlZmZvcnQsXG4gICAgICBkZXNjcmlwdGlvbjogUkVBU09OSU5HX0RFU0NSSVBUSU9OU1tlZmZvcnRdID8/IGBVc2UgdGhlICR7ZWZmb3J0fSByZWFzb25pbmcgYnVkZ2V0YCxcbiAgICB9KSksXG4gICAgLi4uKGVmZm9ydHMubGVuZ3RoID4gMFxuICAgICAgPyB7IGRlZmF1bHRfcmVhc29uaW5nX2xldmVsOiBlZmZvcnRzLmluY2x1ZGVzKFwibWVkaXVtXCIpID8gXCJtZWRpdW1cIiA6IGVmZm9ydHNbMF0gfVxuICAgICAgOiB7fSksXG4gICAgc2hlbGxfdHlwZTogXCJ1bmlmaWVkX2V4ZWNcIixcbiAgICB2aXNpYmlsaXR5OiBcImxpc3RcIixcbiAgICBzdXBwb3J0ZWRfaW5fYXBpOiB0cnVlLFxuICAgIHByaW9yaXR5LFxuICAgIGF2YWlsYWJpbGl0eV9udXg6IG51bGwsXG4gICAgdXBncmFkZTogbnVsbCxcbiAgICBzdXBwb3J0X3ZlcmJvc2l0eTogZmFsc2UsXG4gICAgZGVmYXVsdF92ZXJib3NpdHk6IG51bGwsXG4gICAgYXBwbHlfcGF0Y2hfdG9vbF90eXBlOiB0YXJnZXQuY2FwYWJpbGl0aWVzLmN1c3RvbVRvb2xzID8gXCJmcmVlZm9ybVwiIDogbnVsbCxcbiAgICB0cnVuY2F0aW9uX3BvbGljeTogeyBtb2RlOiBcInRva2Vuc1wiLCBsaW1pdDogMTI4XzAwMCB9LFxuICAgIGNvbnRleHRfd2luZG93OiBudWxsLFxuICAgIGV4cGVyaW1lbnRhbF9zdXBwb3J0ZWRfdG9vbHM6IFtdLFxuICAgIGlucHV0X21vZGFsaXRpZXM6IFtcInRleHRcIl0sXG4gICAgd2ViX3NlYXJjaF90b29sX3R5cGU6IFwidGV4dFwiLFxuICAgIHN1cHBvcnRzX3NlYXJjaF90b29sOiB0YXJnZXQuY2FwYWJpbGl0aWVzLndlYlNlYXJjaCxcbiAgICBzdXBwb3J0c19pbWFnZV9kZXRhaWxfb3JpZ2luYWw6IGZhbHNlLFxuICB9O1xufVxuXG4vKipcbiAqIE9yZGVyIGxpc3RlZCBtb2RlbHMgaW4gdGhyZWUgZ3JvdXBzOiBtYWpvci1wcm92aWRlciBjaGF0IGZhbWlsaWVzLCB0aGVcbiAqIHJlbWFpbmluZyBjaGF0IG1vZGVscywgdGhlbiBlbWJlZGRpbmdzLiBGYW1pbGllcyBrZWVwIGEgZml4ZWQgcHJvdmlkZXJcbiAqIG9yZGVyOyBlYWNoIGZhbWlseSBhbmQgdGhlIGxhdGVyIGdyb3VwcyBzb3J0IGJ5IHRoZSBwdWJsaXNoZWQgbGFiZWxcbiAqIChgZGlzcGxheV9uYW1lYCBmb3IgQ29kZXgsIGBuYW1lYCBvdGhlcndpc2UpLiBOdW1lcmljIHNlZ21lbnRzIHNvcnRcbiAqIG5hdHVyYWxseSBzbyBcIlZlbyAzLjFcIiBwcmVjZWRlcyBcIlZlbyAzLjEwXCIuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVDYXRhbG9ndWVUYXJnZXRzKFxuICBsZWZ0OiBNb2RlbFRhcmdldCxcbiAgcmlnaHQ6IE1vZGVsVGFyZ2V0LFxuICBsYWJlbDogKHRhcmdldDogTW9kZWxUYXJnZXQpID0+IHN0cmluZyxcbik6IG51bWJlciB7XG4gIGNvbnN0IGdyb3VwID0gY2F0YWxvZ3VlR3JvdXAobGVmdCkgLSBjYXRhbG9ndWVHcm91cChyaWdodCk7XG4gIGlmIChncm91cCAhPT0gMCkgcmV0dXJuIGdyb3VwO1xuICBjb25zdCBsZWZ0RmFtaWx5ID0gY2F0YWxvZ3VlRmFtaWx5KGxlZnQpO1xuICBjb25zdCByaWdodEZhbWlseSA9IGNhdGFsb2d1ZUZhbWlseShyaWdodCk7XG4gIGlmIChsZWZ0RmFtaWx5ICYmIHJpZ2h0RmFtaWx5KSB7XG4gICAgY29uc3QgZmFtaWx5T3JkZXIgPSBtb2RlbEZhbWlseVJhbmsobGVmdEZhbWlseSkgLSBtb2RlbEZhbWlseVJhbmsocmlnaHRGYW1pbHkpO1xuICAgIGlmIChmYW1pbHlPcmRlciAhPT0gMCkgcmV0dXJuIGZhbWlseU9yZGVyO1xuICB9XG4gIHJldHVybiBjb21wYXJlQ2F0YWxvZ3VlTGFiZWwobGFiZWwobGVmdCksIGxhYmVsKHJpZ2h0KSk7XG59XG5cbmZ1bmN0aW9uIGNhdGFsb2d1ZUdyb3VwKHRhcmdldDogTW9kZWxUYXJnZXQpOiBudW1iZXIge1xuICBpZiAoaXNFbWJlZGRpbmdUYXJnZXQodGFyZ2V0KSkgcmV0dXJuIDI7XG4gIHJldHVybiBjYXRhbG9ndWVGYW1pbHkodGFyZ2V0KSA/IDAgOiAxO1xufVxuXG5jb25zdCBJREVOVElUWV9QUkVGSVhFUyA9IG5ldyBTZXQoW1xuICBcImRhdGFicmlja3NcIixcbiAgXCJzeXN0ZW1cIixcbiAgXCJhaVwiLFxuICBcIm1ldGFcIixcbiAgXCJnb29nbGVcIixcbiAgXCJvcGVuYWlcIixcbiAgXCJhbnRocm9waWNcIixcbl0pO1xuXG5mdW5jdGlvbiBjYXRhbG9ndWVGYW1pbHkodGFyZ2V0OiBNb2RlbFRhcmdldCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChpc0VtYmVkZGluZ1RhcmdldCh0YXJnZXQpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGlkZW50aXR5IG9mIFt0YXJnZXQuZGlzcGxheU5hbWUsIHRhcmdldC5pZCwgdGFyZ2V0LmVuZHBvaW50Py5uYW1lXSkge1xuICAgIGlmICghaWRlbnRpdHkpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGZhbWlseSA9IGNhdGFsb2d1ZUZhbWlseUZyb21JZGVudGl0eShpZGVudGl0eSk7XG4gICAgaWYgKGZhbWlseSkgcmV0dXJuIGZhbWlseTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjYXRhbG9ndWVGYW1pbHlGcm9tSWRlbnRpdHkoaWRlbnRpdHk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRva2VucyA9IGlkZW50aXR5LnRvTG93ZXJDYXNlKCkubWF0Y2goL1thLXowLTldKy9nKSA/PyBbXTtcbiAgY29uc3Qgc3RhcnQgPSB0b2tlbnMuZmluZCgodG9rZW4pID0+ICFJREVOVElUWV9QUkVGSVhFUy5oYXModG9rZW4pKTtcbiAgaWYgKCFzdGFydCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHN0YXJ0ID09PSBcInZlb1wiKSByZXR1cm4gXCJnZW1pbmlcIjtcbiAgY29uc3QgZmFtaWx5ID0gbW9kZWxGYW1pbHkoaWRlbnRpdHkpO1xuICByZXR1cm4gZmFtaWx5ICYmIHN0YXJ0ID09PSBmYW1pbHkgPyBmYW1pbHkgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzRW1iZWRkaW5nVGFyZ2V0KHRhcmdldDogTW9kZWxUYXJnZXQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRhcmdldC5jYXBhYmlsaXRpZXMuZW1iZWRkaW5ncyA9PT0gdHJ1ZSB8fCB0YXJnZXQuZW5kcG9pbnQ/LnRhc2sgPT09IFwibGxtL3YxL2VtYmVkZGluZ3NcIjtcbn1cblxuZnVuY3Rpb24gY29tcGFyZUNhdGFsb2d1ZUxhYmVsKGxlZnQ6IHN0cmluZywgcmlnaHQ6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQsIHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlLCBzZW5zaXRpdml0eTogXCJiYXNlXCIgfSk7XG59XG5cbmZ1bmN0aW9uIGhhc0NoYXRDbGFzcyh0YXJnZXQ6IE1vZGVsVGFyZ2V0KTogYm9vbGVhbiB7XG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSB0YXJnZXQuZW5kcG9pbnQ/LmNsYXNzO1xuICByZXR1cm4gbW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkICYmIGlzQ2hhdENsYXNzKG1vZGVsQ2xhc3MpO1xufVxuIl19
162
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFVN0UsTUFBTSx1QkFBdUIsR0FDM0IsdUhBQXVILENBQUM7QUFFMUgsTUFBTSxzQkFBc0IsR0FBcUM7SUFDL0QsSUFBSSxFQUFFLDRCQUE0QjtJQUNsQyxPQUFPLEVBQUUsNkNBQTZDO0lBQ3RELEdBQUcsRUFBRSw0QkFBNEI7SUFDakMsTUFBTSxFQUFFLCtCQUErQjtJQUN2QyxJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLEtBQUssRUFBRSxvQ0FBb0M7SUFDM0MsR0FBRyxFQUFFLDRDQUE0QztDQUNsRCxDQUFDO0FBcUJGLE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBK0IsRUFDL0IsWUFBcUIsRUFDckIsYUFBYSxHQUFHLEtBQUssRUFDckIsa0JBQWtCLEdBQUcsS0FBSztJQUUxQixNQUFNLFNBQVMsR0FBRyxPQUFPO1NBQ3RCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxLQUFLLElBQUksQ0FBQztTQUNoRSxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuQixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQzdCLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FDckUsQ0FBQztJQUNKLENBQUM7SUFD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QUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0IsSUFBSSxLQUFLLEtBQUssS0FBSztRQUFFLE9BQU8sUUFBUSxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxPQUFPLE1BQU0sSUFBSSxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxNQUFtQjtJQUM1QyxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksS0FBSyxtQkFBbUIsQ0FBQztBQUNsRyxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxJQUFZLEVBQUUsS0FBYTtJQUN4RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDdEYsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE1BQW1CO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO0lBQzFDLE9BQU8sVUFBVSxLQUFLLFNBQVMsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlbkFJIGFuZCBDb2RleCBtb2RlbC1saXN0IHBheWxvYWRzIGRlcml2ZWQgZnJvbSB0aGUgbGl2ZSByZWdpc3RyeS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgaXNDaGF0Q2xhc3MsIG1vZGVsRmFtaWx5LCBtb2RlbEZhbWlseVJhbmsgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuICBDb2RleE1vZGVsLFxuICBDb2RleE1vZGVsTGlzdFJlc3BvbnNlLFxuICBNb2RlbExpc3RSZXNwb25zZSxcbiAgTW9kZWxUYXJnZXQsXG4gIE9wZW5BSU1vZGVsLFxuICBPcGVuQUlNb2RlbExpc3RSZXNwb25zZSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXlcIjtcblxuY29uc3QgQ09ERVhfQkFTRV9JTlNUUlVDVElPTlMgPVxuICBcIllvdSBhcmUgYSBjb2RpbmcgYWdlbnQuIEZvbGxvdyB0aGUgdXNlcidzIGluc3RydWN0aW9ucyBhbmQgdXNlIHRoZSBhdmFpbGFibGUgdG9vbHMgdG8gd29yayBpbiB0aGUgY3VycmVudCByZXBvc2l0b3J5LlwiO1xuXG5jb25zdCBSRUFTT05JTkdfREVTQ1JJUFRJT05TOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgbm9uZTogXCJEaXNhYmxlIGV4cGxpY2l0IHJlYXNvbmluZ1wiLFxuICBtaW5pbWFsOiBcIlVzZSB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIHJlYXNvbmluZyBidWRnZXRcIixcbiAgbG93OiBcIlVzZSBhIGxvdyByZWFzb25pbmcgYnVkZ2V0XCIsXG4gIG1lZGl1bTogXCJVc2UgYSBtZWRpdW0gcmVhc29uaW5nIGJ1ZGdldFwiLFxuICBoaWdoOiBcIlVzZSBhIGhpZ2ggcmVhc29uaW5nIGJ1ZGdldFwiLFxuICB4aGlnaDogXCJVc2UgYW4gZXh0cmEtaGlnaCByZWFzb25pbmcgYnVkZ2V0XCIsXG4gIG1heDogXCJVc2UgdGhlIGxhcmdlc3QgYXZhaWxhYmxlIHJlYXNvbmluZyBidWRnZXRcIixcbn07XG5cbi8qKiBCdWlsZCB0aGUgY29tYmluZWQgT3BlbkFJIGFuZCBvcHRpb25hbCBDb2RleCBtb2RlbCBjYXRhbG9ndWUuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdE1vZGVsc1BheWxvYWQoXG4gIHRhcmdldHM6IHJlYWRvbmx5IE1vZGVsVGFyZ2V0W10sXG4gIGluY2x1ZGVDb2RleDogdHJ1ZSxcbiAgcHJlc2VydmVPcmRlcj86IGJvb2xlYW4sXG4gIHByZWZlclN5c3RlbU1vZGVscz86IGJvb2xlYW4sXG4pOiBDb2RleE1vZGVsTGlzdFJlc3BvbnNlO1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RNb2RlbHNQYXlsb2FkKFxuICB0YXJnZXRzOiByZWFkb25seSBNb2RlbFRhcmdldFtdLFxuICBpbmNsdWRlQ29kZXg6IGZhbHNlLFxuICBwcmVzZXJ2ZU9yZGVyPzogYm9vbGVhbixcbiAgcHJlZmVyU3lzdGVtTW9kZWxzPzogYm9vbGVhbixcbik6IE9wZW5BSU1vZGVsTGlzdFJlc3BvbnNlO1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RNb2RlbHNQYXlsb2FkKFxuICB0YXJnZXRzOiByZWFkb25seSBNb2RlbFRhcmdldFtdLFxuICBpbmNsdWRlQ29kZXg6IGJvb2xlYW4sXG4gIHByZXNlcnZlT3JkZXI/OiBib29sZWFuLFxuICBwcmVmZXJTeXN0ZW1Nb2RlbHM/OiBib29sZWFuLFxuKTogTW9kZWxMaXN0UmVzcG9uc2U7XG5leHBvcnQgZnVuY3Rpb24gbGlzdE1vZGVsc1BheWxvYWQoXG4gIHRhcmdldHM6IHJlYWRvbmx5IE1vZGVsVGFyZ2V0W10sXG4gIGluY2x1ZGVDb2RleDogYm9vbGVhbixcbiAgcHJlc2VydmVPcmRlciA9IGZhbHNlLFxuICBwcmVmZXJTeXN0ZW1Nb2RlbHMgPSBmYWxzZSxcbik6IE1vZGVsTGlzdFJlc3BvbnNlIHtcbiAgY29uc3QgYXZhaWxhYmxlID0gdGFyZ2V0c1xuICAgIC5maWx0ZXIoKHRhcmdldCkgPT4gdGFyZ2V0LmVuZHBvaW50Py5zdGF0dXM/LmRlcHJlY2F0ZWQgIT09IHRydWUpXG4gICAgLmZpbHRlcigodGFyZ2V0KSA9PiAhaW5jbHVkZUNvZGV4IHx8IGhhc0NoYXRDbGFzcyh0YXJnZXQpKTtcbiAgaWYgKCFwcmVzZXJ2ZU9yZGVyKSB7XG4gICAgYXZhaWxhYmxlLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PlxuICAgICAgY29tcGFyZUNhdGFsb2d1ZVRhcmdldHMobGVmdCwgcmlnaHQsICh0YXJnZXQpID0+IHRhcmdldC5kaXNwbGF5TmFtZSksXG4gICAgKTtcbiAgfVxuICBpZiAoaW5jbHVkZUNvZGV4KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGVsczogYXZhaWxhYmxlLm1hcCgodGFyZ2V0LCBpbmRleCkgPT4gY29kZXhNb2RlbCh0YXJnZXQsIGluZGV4ICsgMSwgcHJlZmVyU3lzdGVtTW9kZWxzKSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG9iamVjdDogXCJsaXN0XCIsXG4gICAgZGF0YTogYXZhaWxhYmxlLm1hcChvcGVuQWlNb2RlbCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9wZW5BaU1vZGVsKHRhcmdldDogTW9kZWxUYXJnZXQpOiBPcGVuQUlNb2RlbCB7XG4gIHJldHVybiB7XG4gICAgaWQ6IHRhcmdldC5pZCxcbiAgICBvYmplY3Q6IFwibW9kZWxcIixcbiAgICBjcmVhdGVkOiAwLFxuICAgIG93bmVkX2J5OiBcImRhdGFicmlja3NcIixcbiAgICBuYW1lOiB0YXJnZXQuZGlzcGxheU5hbWUsXG4gICAgdGFzazogdGFyZ2V0LmVuZHBvaW50Py50YXNrLFxuICAgIHN0YXR1czogdGFyZ2V0LmVuZHBvaW50Py5zdGF0dXMgPz8geyBkZXByZWNhdGVkOiBmYWxzZSB9LFxuICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgdG9vbHM6IHRhcmdldC5jYXBhYmlsaXRpZXMudG9vbHMsXG4gICAgICByZWFzb25pbmc6IHRhcmdldC5yZWFzb25pbmdFZmZvcnRzLFxuICAgICAgcmVzcG9uc2VzOiB0YXJnZXQuY2FwYWJpbGl0aWVzLnJlc3BvbnNlcyxcbiAgICAgIG9wZW5fcmVzcG9uc2VzOiB0YXJnZXQuY2FwYWJpbGl0aWVzLm9wZW5SZXNwb25zZXMsXG4gICAgICBhbnRocm9waWM6IHRhcmdldC5jYXBhYmlsaXRpZXMuYW50aHJvcGljLFxuICAgICAgZW1iZWRkaW5nczogdGFyZ2V0LmNhcGFiaWxpdGllcy5lbWJlZGRpbmdzLFxuICAgICAgYWlfZ2F0ZXdheV9jb2RleDogdGFyZ2V0LmNhcGFiaWxpdGllcy5haUdhdGV3YXlDb2RleCxcbiAgICAgIHN0cmVhbWluZzogdGFyZ2V0LmNhcGFiaWxpdGllcy5zdHJlYW1pbmcsXG4gICAgICB3ZWJfc2VhcmNoOiB0YXJnZXQuY2FwYWJpbGl0aWVzLndlYlNlYXJjaCxcbiAgICB9LFxuICB9O1xufVxuXG4vKiogQ29kZXggYC92MS9tb2RlbHNgIHNsdWc6IHRoZSBgc3lzdGVtLmFpLipgIHNlcnZpY2Ugd2hlbiBwcmVmZXJyZWQsIGVsc2UgdGhlIGVuZHBvaW50IGlkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGV4TW9kZWxTbHVnKHRhcmdldDogTW9kZWxUYXJnZXQsIHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbik6IHN0cmluZyB7XG4gIGNvbnN0IG1vZGVsID1cbiAgICBwcmVmZXJTeXN0ZW1Nb2RlbHMgJiYgdGFyZ2V0LmNhcGFiaWxpdGllcy5haUdhdGV3YXlDb2RleCAmJiB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZVxuICAgICAgPyB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZVxuICAgICAgOiB0YXJnZXQuaWQ7XG4gIHJldHVybiBgZGF0YWJyaWNrcy8ke21vZGVsfWA7XG59XG5cbmZ1bmN0aW9uIGNvZGV4TW9kZWwoXG4gIHRhcmdldDogTW9kZWxUYXJnZXQsXG4gIHByaW9yaXR5OiBudW1iZXIsXG4gIHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbixcbik6IENvZGV4TW9kZWwge1xuICBjb25zdCBlZmZvcnRzID0gdGFyZ2V0LnJlYXNvbmluZ0VmZm9ydHM7XG4gIHJldHVybiB7XG4gICAgc2x1ZzogY29kZXhNb2RlbFNsdWcodGFyZ2V0LCBwcmVmZXJTeXN0ZW1Nb2RlbHMpLFxuICAgIGRpc3BsYXlfbmFtZTogdGFyZ2V0LmRpc3BsYXlOYW1lLFxuICAgIGRlc2NyaXB0aW9uOiB0YXJnZXQuZW5kcG9pbnQ/LmRlc2NyaXB0aW9uID8/IFwiRGF0YWJyaWNrcyBtb2RlbCBzZXJ2aWNlXCIsXG4gICAgYmFzZV9pbnN0cnVjdGlvbnM6IENPREVYX0JBU0VfSU5TVFJVQ1RJT05TLFxuICAgIHN0YXR1czogdGFyZ2V0LmVuZHBvaW50Py5zdGF0dXMgPz8geyBkZXByZWNhdGVkOiBmYWxzZSB9LFxuICAgIHN1cHBvcnRlZF9yZWFzb25pbmdfbGV2ZWxzOiBlZmZvcnRzLm1hcCgoZWZmb3J0KSA9PiAoe1xuICAgICAgZWZmb3J0LFxuICAgICAgZGVzY3JpcHRpb246IFJFQVNPTklOR19ERVNDUklQVElPTlNbZWZmb3J0XSA/PyBgVXNlIHRoZSAke2VmZm9ydH0gcmVhc29uaW5nIGJ1ZGdldGAsXG4gICAgfSkpLFxuICAgIC4uLihlZmZvcnRzLmxlbmd0aCA+IDBcbiAgICAgID8geyBkZWZhdWx0X3JlYXNvbmluZ19sZXZlbDogZWZmb3J0cy5pbmNsdWRlcyhcIm1lZGl1bVwiKSA/IFwibWVkaXVtXCIgOiBlZmZvcnRzWzBdIH1cbiAgICAgIDoge30pLFxuICAgIHNoZWxsX3R5cGU6IFwidW5pZmllZF9leGVjXCIsXG4gICAgdmlzaWJpbGl0eTogXCJsaXN0XCIsXG4gICAgc3VwcG9ydGVkX2luX2FwaTogdHJ1ZSxcbiAgICBwcmlvcml0eSxcbiAgICBhdmFpbGFiaWxpdHlfbnV4OiBudWxsLFxuICAgIHVwZ3JhZGU6IG51bGwsXG4gICAgc3VwcG9ydF92ZXJib3NpdHk6IGZhbHNlLFxuICAgIGRlZmF1bHRfdmVyYm9zaXR5OiBudWxsLFxuICAgIGFwcGx5X3BhdGNoX3Rvb2xfdHlwZTogdGFyZ2V0LmNhcGFiaWxpdGllcy5jdXN0b21Ub29scyA/IFwiZnJlZWZvcm1cIiA6IG51bGwsXG4gICAgdHJ1bmNhdGlvbl9wb2xpY3k6IHsgbW9kZTogXCJ0b2tlbnNcIiwgbGltaXQ6IDEyOF8wMDAgfSxcbiAgICBjb250ZXh0X3dpbmRvdzogbnVsbCxcbiAgICBleHBlcmltZW50YWxfc3VwcG9ydGVkX3Rvb2xzOiBbXSxcbiAgICBpbnB1dF9tb2RhbGl0aWVzOiBbXCJ0ZXh0XCJdLFxuICAgIHdlYl9zZWFyY2hfdG9vbF90eXBlOiBcInRleHRcIixcbiAgICBzdXBwb3J0c19zZWFyY2hfdG9vbDogdGFyZ2V0LmNhcGFiaWxpdGllcy53ZWJTZWFyY2gsXG4gICAgc3VwcG9ydHNfaW1hZ2VfZGV0YWlsX29yaWdpbmFsOiBmYWxzZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBPcmRlciBsaXN0ZWQgbW9kZWxzIGluIHRocmVlIGdyb3VwczogbWFqb3ItcHJvdmlkZXIgY2hhdCBmYW1pbGllcywgdGhlXG4gKiByZW1haW5pbmcgY2hhdCBtb2RlbHMsIHRoZW4gZW1iZWRkaW5ncy4gRmFtaWxpZXMga2VlcCBhIGZpeGVkIHByb3ZpZGVyXG4gKiBvcmRlcjsgZWFjaCBmYW1pbHkgYW5kIHRoZSBsYXRlciBncm91cHMgc29ydCBieSB0aGUgcHVibGlzaGVkIGxhYmVsXG4gKiAoYGRpc3BsYXlfbmFtZWAgZm9yIENvZGV4LCBgbmFtZWAgb3RoZXJ3aXNlKS4gTnVtZXJpYyBzZWdtZW50cyBzb3J0XG4gKiBuYXR1cmFsbHkgc28gXCJWZW8gMy4xXCIgcHJlY2VkZXMgXCJWZW8gMy4xMFwiLlxuICovXG5mdW5jdGlvbiBjb21wYXJlQ2F0YWxvZ3VlVGFyZ2V0cyhcbiAgbGVmdDogTW9kZWxUYXJnZXQsXG4gIHJpZ2h0OiBNb2RlbFRhcmdldCxcbiAgbGFiZWw6ICh0YXJnZXQ6IE1vZGVsVGFyZ2V0KSA9PiBzdHJpbmcsXG4pOiBudW1iZXIge1xuICBjb25zdCBncm91cCA9IGNhdGFsb2d1ZUdyb3VwKGxlZnQpIC0gY2F0YWxvZ3VlR3JvdXAocmlnaHQpO1xuICBpZiAoZ3JvdXAgIT09IDApIHJldHVybiBncm91cDtcbiAgY29uc3QgbGVmdEZhbWlseSA9IGNhdGFsb2d1ZUZhbWlseShsZWZ0KTtcbiAgY29uc3QgcmlnaHRGYW1pbHkgPSBjYXRhbG9ndWVGYW1pbHkocmlnaHQpO1xuICBpZiAobGVmdEZhbWlseSAmJiByaWdodEZhbWlseSkge1xuICAgIGNvbnN0IGZhbWlseU9yZGVyID0gbW9kZWxGYW1pbHlSYW5rKGxlZnRGYW1pbHkpIC0gbW9kZWxGYW1pbHlSYW5rKHJpZ2h0RmFtaWx5KTtcbiAgICBpZiAoZmFtaWx5T3JkZXIgIT09IDApIHJldHVybiBmYW1pbHlPcmRlcjtcbiAgfVxuICByZXR1cm4gY29tcGFyZUNhdGFsb2d1ZUxhYmVsKGxhYmVsKGxlZnQpLCBsYWJlbChyaWdodCkpO1xufVxuXG5mdW5jdGlvbiBjYXRhbG9ndWVHcm91cCh0YXJnZXQ6IE1vZGVsVGFyZ2V0KTogbnVtYmVyIHtcbiAgaWYgKGlzRW1iZWRkaW5nVGFyZ2V0KHRhcmdldCkpIHJldHVybiAyO1xuICByZXR1cm4gY2F0YWxvZ3VlRmFtaWx5KHRhcmdldCkgPyAwIDogMTtcbn1cblxuY29uc3QgSURFTlRJVFlfUFJFRklYRVMgPSBuZXcgU2V0KFtcbiAgXCJkYXRhYnJpY2tzXCIsXG4gIFwic3lzdGVtXCIsXG4gIFwiYWlcIixcbiAgXCJtZXRhXCIsXG4gIFwiZ29vZ2xlXCIsXG4gIFwib3BlbmFpXCIsXG4gIFwiYW50aHJvcGljXCIsXG5dKTtcblxuZnVuY3Rpb24gY2F0YWxvZ3VlRmFtaWx5KHRhcmdldDogTW9kZWxUYXJnZXQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoaXNFbWJlZGRpbmdUYXJnZXQodGFyZ2V0KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBpZGVudGl0eSBvZiBbdGFyZ2V0LmRpc3BsYXlOYW1lLCB0YXJnZXQuaWQsIHRhcmdldC5lbmRwb2ludD8ubmFtZV0pIHtcbiAgICBpZiAoIWlkZW50aXR5KSBjb250aW51ZTtcbiAgICBjb25zdCBmYW1pbHkgPSBjYXRhbG9ndWVGYW1pbHlGcm9tSWRlbnRpdHkoaWRlbnRpdHkpO1xuICAgIGlmIChmYW1pbHkpIHJldHVybiBmYW1pbHk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2F0YWxvZ3VlRmFtaWx5RnJvbUlkZW50aXR5KGlkZW50aXR5OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0b2tlbnMgPSBpZGVudGl0eS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9bYS16MC05XSsvZykgPz8gW107XG4gIGNvbnN0IHN0YXJ0ID0gdG9rZW5zLmZpbmQoKHRva2VuKSA9PiAhSURFTlRJVFlfUFJFRklYRVMuaGFzKHRva2VuKSk7XG4gIGlmICghc3RhcnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChzdGFydCA9PT0gXCJ2ZW9cIikgcmV0dXJuIFwiZ2VtaW5pXCI7XG4gIGNvbnN0IGZhbWlseSA9IG1vZGVsRmFtaWx5KGlkZW50aXR5KTtcbiAgcmV0dXJuIGZhbWlseSAmJiBzdGFydCA9PT0gZmFtaWx5ID8gZmFtaWx5IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0VtYmVkZGluZ1RhcmdldCh0YXJnZXQ6IE1vZGVsVGFyZ2V0KTogYm9vbGVhbiB7XG4gIHJldHVybiB0YXJnZXQuY2FwYWJpbGl0aWVzLmVtYmVkZGluZ3MgPT09IHRydWUgfHwgdGFyZ2V0LmVuZHBvaW50Py50YXNrID09PSBcImxsbS92MS9lbWJlZGRpbmdzXCI7XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVDYXRhbG9ndWVMYWJlbChsZWZ0OiBzdHJpbmcsIHJpZ2h0OiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gbGVmdC5sb2NhbGVDb21wYXJlKHJpZ2h0LCB1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSwgc2Vuc2l0aXZpdHk6IFwiYmFzZVwiIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNDaGF0Q2xhc3ModGFyZ2V0OiBNb2RlbFRhcmdldCk6IGJvb2xlYW4ge1xuICBjb25zdCBtb2RlbENsYXNzID0gdGFyZ2V0LmVuZHBvaW50Py5jbGFzcztcbiAgcmV0dXJuIG1vZGVsQ2xhc3MgIT09IHVuZGVmaW5lZCAmJiBpc0NoYXRDbGFzcyhtb2RlbENsYXNzKTtcbn1cbiJdfQ==
@@ -7,8 +7,7 @@
7
7
  *
8
8
  * @module
9
9
  */
10
- import { learnReasoningLevelsFromError, modelReasoningLevelsFor } from "@dbx-tools/model/metadata";
11
- import { adaptRequestReasoning, parseReasoningLevels, } from "@dbx-tools/model/reasoning-translation";
10
+ import { learnReasoningLevelsFromError, modelReasoningLevelsFor, adaptRequestReasoning, parseReasoningLevels, } from "@dbx-tools/model";
12
11
  import { log } from "@dbx-tools/shared-core";
13
12
  const logger = log.logger("appkit/model-gateway/reasoning");
14
13
  /** Adapt a request body onto the current known ladder for `model`. */
@@ -58,4 +57,4 @@ export async function learnAndAdaptReasoningRetry(input) {
58
57
  });
59
58
  return adapted.body;
60
59
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhc29uaW5nLWFkYXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYXNvbmluZy1hZGFwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSw2QkFBNkIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25HLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsb0JBQW9CLEdBQ3JCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTdDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztBQVM1RCxzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxLQUFhLEVBQ2IsSUFBdUM7SUFFdkMsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsTUFBTSxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsRUFBRTtZQUN2RCxLQUFLO1lBQ0wsTUFBTSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87S0FDekIsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLDJCQUEyQixDQUFDLEtBS2pEO0lBQ0MsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFekUsSUFBSSxTQUFrQixDQUFDO0lBQ3ZCLElBQUksQ0FBQztRQUNILFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRW5FLE1BQU0sTUFBTSxHQUFHLE1BQU0sNkJBQTZCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxFQUFFO1FBQzFELEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixNQUFNO0tBQ1AsQ0FBQyxDQUFDO0lBRUgsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDeEYsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLEVBQUU7UUFDcEQsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1FBQ2xCLElBQUksRUFBRSxLQUFLLENBQUMsa0JBQWtCO1FBQzlCLEVBQUUsRUFBRSxPQUFPLENBQUMsVUFBVTtLQUN2QixDQUFDLENBQUM7SUFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVhc29uaW5nLWVmZm9ydCBhZGFwdGF0aW9uIGZvciBnYXRld2F5IHJvdW5kIHRyaXBzLlxuICpcbiAqIFByb2FjdGl2ZWx5IHJlbWFwcyBjbGllbnQgZWZmb3J0cyBvbnRvIHRoZSBrbm93biBsYWRkZXIsIHRoZW4gb24gYSBzaW5nbGVcbiAqIHVuc3VwcG9ydGVkLXZhbHVlIDQwMCBsZWFybnMgZnJvbSB0aGUgZXJyb3IgYW5kIHJldHJpZXMgb25jZSB3aXRoIHRoZVxuICogdXBkYXRlZCBsYWRkZXIuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGxlYXJuUmVhc29uaW5nTGV2ZWxzRnJvbUVycm9yLCBtb2RlbFJlYXNvbmluZ0xldmVsc0ZvciB9IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsL21ldGFkYXRhXCI7XG5pbXBvcnQge1xuICBhZGFwdFJlcXVlc3RSZWFzb25pbmcsXG4gIHBhcnNlUmVhc29uaW5nTGV2ZWxzLFxufSBmcm9tIFwiQGRieC10b29scy9tb2RlbC9yZWFzb25pbmctdHJhbnNsYXRpb25cIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXQvbW9kZWwtZ2F0ZXdheS9yZWFzb25pbmdcIik7XG5cbi8qKiBSZXN1bHQgb2YgdGhlIGZpcnN0IHByb2FjdGl2ZSBhZGFwdGF0aW9uIHBhc3MuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZWRJbmZlcmVuY2VCb2R5IHtcbiAgcmVhZG9ubHkgYm9keTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICByZWFkb25seSB3aXJlRWZmb3J0Pzogc3RyaW5nO1xuICByZWFkb25seSBjaGFuZ2VkOiBib29sZWFuO1xufVxuXG4vKiogQWRhcHQgYSByZXF1ZXN0IGJvZHkgb250byB0aGUgY3VycmVudCBrbm93biBsYWRkZXIgZm9yIGBtb2RlbGAuICovXG5leHBvcnQgZnVuY3Rpb24gYWRhcHRJbmZlcmVuY2VSZWFzb25pbmcoXG4gIG1vZGVsOiBzdHJpbmcsXG4gIGJvZHk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pixcbik6IEFkYXB0ZWRJbmZlcmVuY2VCb2R5IHtcbiAgY29uc3QgYWRhcHRlZCA9IGFkYXB0UmVxdWVzdFJlYXNvbmluZyhib2R5LCBtb2RlbFJlYXNvbmluZ0xldmVsc0Zvcihtb2RlbCkpO1xuICBpZiAoYWRhcHRlZC5jaGFuZ2VkKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYWRhcHRlZCByZWFzb25pbmcgZWZmb3J0IGJlZm9yZSB1cHN0cmVhbVwiLCB7XG4gICAgICBtb2RlbCxcbiAgICAgIGVmZm9ydDogYWRhcHRlZC53aXJlRWZmb3J0LFxuICAgIH0pO1xuICB9XG4gIHJldHVybiB7XG4gICAgYm9keTogYWRhcHRlZC5ib2R5LFxuICAgIHdpcmVFZmZvcnQ6IGFkYXB0ZWQud2lyZUVmZm9ydCxcbiAgICBjaGFuZ2VkOiBhZGFwdGVkLmNoYW5nZWQsXG4gIH07XG59XG5cbi8qKlxuICogT24gYW4gdW5zdXBwb3J0ZWQtcmVhc29uaW5nIDQwMCwgbGVhcm4gb25jZSBhbmQgb3B0aW9uYWxseSBwcm9kdWNlIGFcbiAqIHJlbWFwcGVkIHJldHJ5IGJvZHkuIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiBubyByZXRyeSBzaG91bGQgb2NjdXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsZWFybkFuZEFkYXB0UmVhc29uaW5nUmV0cnkoaW5wdXQ6IHtcbiAgcmVhZG9ubHkgbW9kZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgYm9keTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICByZWFkb25seSByZXNwb25zZTogUmVzcG9uc2U7XG4gIHJlYWRvbmx5IHByZXZpb3VzV2lyZUVmZm9ydD86IHN0cmluZztcbn0pOiBQcm9taXNlPFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB8IHVuZGVmaW5lZD4ge1xuICBpZiAoaW5wdXQucmVzcG9uc2Uub2sgfHwgaW5wdXQucmVzcG9uc2Uuc3RhdHVzICE9PSA0MDApIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgbGV0IGVycm9yQm9keTogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBlcnJvckJvZHkgPSBKU09OLnBhcnNlKGF3YWl0IGlucHV0LnJlc3BvbnNlLmNsb25lKCkudGV4dCgpKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChwYXJzZVJlYXNvbmluZ0xldmVscyhlcnJvckJvZHkpLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBsZXZlbHMgPSBhd2FpdCBsZWFyblJlYXNvbmluZ0xldmVsc0Zyb21FcnJvcihpbnB1dC5tb2RlbCwgZXJyb3JCb2R5KTtcbiAgbG9nZ2VyLmluZm8oXCJsZWFybmVkIHJlYXNvbmluZyBsZXZlbHMgZnJvbSB1cHN0cmVhbSBlcnJvclwiLCB7XG4gICAgbW9kZWw6IGlucHV0Lm1vZGVsLFxuICAgIGxldmVscyxcbiAgfSk7XG5cbiAgY29uc3QgYWRhcHRlZCA9IGFkYXB0UmVxdWVzdFJlYXNvbmluZyhpbnB1dC5ib2R5LCBsZXZlbHMpO1xuICBpZiAoYWRhcHRlZC53aXJlRWZmb3J0ID09PSB1bmRlZmluZWQgfHwgYWRhcHRlZC53aXJlRWZmb3J0ID09PSBpbnB1dC5wcmV2aW91c1dpcmVFZmZvcnQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgbG9nZ2VyLmluZm8oXCJyZXRyeWluZyB3aXRoIGFkYXB0ZWQgcmVhc29uaW5nIGVmZm9ydFwiLCB7XG4gICAgbW9kZWw6IGlucHV0Lm1vZGVsLFxuICAgIGZyb206IGlucHV0LnByZXZpb3VzV2lyZUVmZm9ydCxcbiAgICB0bzogYWRhcHRlZC53aXJlRWZmb3J0LFxuICB9KTtcbiAgcmV0dXJuIGFkYXB0ZWQuYm9keTtcbn1cbiJdfQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhc29uaW5nLWFkYXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYXNvbmluZy1hZGFwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLHFCQUFxQixFQUNyQixvQkFBb0IsR0FDckIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0MsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBUzVELHNFQUFzRTtBQUN0RSxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLEtBQWEsRUFDYixJQUF1QztJQUV2QyxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM1RSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxFQUFFO1lBQ3ZELEtBQUs7WUFDTCxNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVU7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU87UUFDTCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1FBQzlCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsMkJBQTJCLENBQUMsS0FLakQ7SUFDQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUc7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUV6RSxJQUFJLFNBQWtCLENBQUM7SUFDdkIsSUFBSSxDQUFDO1FBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFbkUsTUFBTSxNQUFNLEdBQUcsTUFBTSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsOENBQThDLEVBQUU7UUFDMUQsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1FBQ2xCLE1BQU07S0FDUCxDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFELElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN4RixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRTtRQUNwRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxrQkFBa0I7UUFDOUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0tBQ3ZCLENBQUMsQ0FBQztJQUNILE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWFzb25pbmctZWZmb3J0IGFkYXB0YXRpb24gZm9yIGdhdGV3YXkgcm91bmQgdHJpcHMuXG4gKlxuICogUHJvYWN0aXZlbHkgcmVtYXBzIGNsaWVudCBlZmZvcnRzIG9udG8gdGhlIGtub3duIGxhZGRlciwgdGhlbiBvbiBhIHNpbmdsZVxuICogdW5zdXBwb3J0ZWQtdmFsdWUgNDAwIGxlYXJucyBmcm9tIHRoZSBlcnJvciBhbmQgcmV0cmllcyBvbmNlIHdpdGggdGhlXG4gKiB1cGRhdGVkIGxhZGRlci5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgbGVhcm5SZWFzb25pbmdMZXZlbHNGcm9tRXJyb3IsXG4gIG1vZGVsUmVhc29uaW5nTGV2ZWxzRm9yLFxuICBhZGFwdFJlcXVlc3RSZWFzb25pbmcsXG4gIHBhcnNlUmVhc29uaW5nTGV2ZWxzLFxufSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImFwcGtpdC9tb2RlbC1nYXRld2F5L3JlYXNvbmluZ1wiKTtcblxuLyoqIFJlc3VsdCBvZiB0aGUgZmlyc3QgcHJvYWN0aXZlIGFkYXB0YXRpb24gcGFzcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlZEluZmVyZW5jZUJvZHkge1xuICByZWFkb25seSBib2R5OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIHJlYWRvbmx5IHdpcmVFZmZvcnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNoYW5nZWQ6IGJvb2xlYW47XG59XG5cbi8qKiBBZGFwdCBhIHJlcXVlc3QgYm9keSBvbnRvIHRoZSBjdXJyZW50IGtub3duIGxhZGRlciBmb3IgYG1vZGVsYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdEluZmVyZW5jZVJlYXNvbmluZyhcbiAgbW9kZWw6IHN0cmluZyxcbiAgYm9keTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuKTogQWRhcHRlZEluZmVyZW5jZUJvZHkge1xuICBjb25zdCBhZGFwdGVkID0gYWRhcHRSZXF1ZXN0UmVhc29uaW5nKGJvZHksIG1vZGVsUmVhc29uaW5nTGV2ZWxzRm9yKG1vZGVsKSk7XG4gIGlmIChhZGFwdGVkLmNoYW5nZWQpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJhZGFwdGVkIHJlYXNvbmluZyBlZmZvcnQgYmVmb3JlIHVwc3RyZWFtXCIsIHtcbiAgICAgIG1vZGVsLFxuICAgICAgZWZmb3J0OiBhZGFwdGVkLndpcmVFZmZvcnQsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBib2R5OiBhZGFwdGVkLmJvZHksXG4gICAgd2lyZUVmZm9ydDogYWRhcHRlZC53aXJlRWZmb3J0LFxuICAgIGNoYW5nZWQ6IGFkYXB0ZWQuY2hhbmdlZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBPbiBhbiB1bnN1cHBvcnRlZC1yZWFzb25pbmcgNDAwLCBsZWFybiBvbmNlIGFuZCBvcHRpb25hbGx5IHByb2R1Y2UgYVxuICogcmVtYXBwZWQgcmV0cnkgYm9keS4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIG5vIHJldHJ5IHNob3VsZCBvY2N1ci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxlYXJuQW5kQWRhcHRSZWFzb25pbmdSZXRyeShpbnB1dDoge1xuICByZWFkb25seSBtb2RlbDogc3RyaW5nO1xuICByZWFkb25seSBib2R5OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIHJlYWRvbmx5IHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgcmVhZG9ubHkgcHJldmlvdXNXaXJlRWZmb3J0Pzogc3RyaW5nO1xufSk6IFByb21pc2U8UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkPiB7XG4gIGlmIChpbnB1dC5yZXNwb25zZS5vayB8fCBpbnB1dC5yZXNwb25zZS5zdGF0dXMgIT09IDQwMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBsZXQgZXJyb3JCb2R5OiB1bmtub3duO1xuICB0cnkge1xuICAgIGVycm9yQm9keSA9IEpTT04ucGFyc2UoYXdhaXQgaW5wdXQucmVzcG9uc2UuY2xvbmUoKS50ZXh0KCkpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHBhcnNlUmVhc29uaW5nTGV2ZWxzKGVycm9yQm9keSkubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGxldmVscyA9IGF3YWl0IGxlYXJuUmVhc29uaW5nTGV2ZWxzRnJvbUVycm9yKGlucHV0Lm1vZGVsLCBlcnJvckJvZHkpO1xuICBsb2dnZXIuaW5mbyhcImxlYXJuZWQgcmVhc29uaW5nIGxldmVscyBmcm9tIHVwc3RyZWFtIGVycm9yXCIsIHtcbiAgICBtb2RlbDogaW5wdXQubW9kZWwsXG4gICAgbGV2ZWxzLFxuICB9KTtcblxuICBjb25zdCBhZGFwdGVkID0gYWRhcHRSZXF1ZXN0UmVhc29uaW5nKGlucHV0LmJvZHksIGxldmVscyk7XG4gIGlmIChhZGFwdGVkLndpcmVFZmZvcnQgPT09IHVuZGVmaW5lZCB8fCBhZGFwdGVkLndpcmVFZmZvcnQgPT09IGlucHV0LnByZXZpb3VzV2lyZUVmZm9ydCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBsb2dnZXIuaW5mbyhcInJldHJ5aW5nIHdpdGggYWRhcHRlZCByZWFzb25pbmcgZWZmb3J0XCIsIHtcbiAgICBtb2RlbDogaW5wdXQubW9kZWwsXG4gICAgZnJvbTogaW5wdXQucHJldmlvdXNXaXJlRWZmb3J0LFxuICAgIHRvOiBhZGFwdGVkLndpcmVFZmZvcnQsXG4gIH0pO1xuICByZXR1cm4gYWRhcHRlZC5ib2R5O1xufVxuIl19
@@ -4,7 +4,7 @@
4
4
  * @module
5
5
  */
6
6
  import { type WorkspaceClient } from "@databricks/appkit";
7
- import { type ResolveModelInput } from "@dbx-tools/shared-model/contracts";
7
+ import { type ResolveModelInput } from "@dbx-tools/shared-model";
8
8
  import type { ModelCapabilityOverride, ModelTarget } from "@dbx-tools/shared-model-gateway";
9
9
  /** Resolution controls passed through to the model policy owner. */
10
10
  export type ModelRegistryResolveOptions = Pick<ResolveModelInput, "modelClass" | "requiresTools">;
@@ -4,9 +4,9 @@
4
4
  * @module
5
5
  */
6
6
  import { getExecutionContext } from "@databricks/appkit";
7
- import { metadata, modelCatalog, policy, resolve as modelResolve, } from "@dbx-tools/model";
7
+ import { metadata, modelCatalog, policy, selection, } from "@dbx-tools/model";
8
8
  import { log } from "@dbx-tools/shared-core";
9
- import { ModelClass, } from "@dbx-tools/shared-model/contracts";
9
+ import { ModelClass, } from "@dbx-tools/shared-model";
10
10
  const DEFAULT_CACHE_TTL_MS = 60_000;
11
11
  const logger = log.logger("appkit/model-gateway/registry");
12
12
  /** Model registry backed by the active AppKit execution context. */
@@ -50,7 +50,7 @@ export class DatabricksModelRegistry {
50
50
  const endpoints = targets
51
51
  .map((target) => target.endpoint)
52
52
  .filter((endpoint) => endpoint !== undefined);
53
- const resolved = modelResolve.resolveModel(endpoints, {
53
+ const resolved = selection.resolveModel(endpoints, {
54
54
  ...(requested !== undefined ? { explicit: requested } : {}),
55
55
  ...options,
56
56
  }, {
@@ -71,10 +71,10 @@ export class DatabricksModelRegistry {
71
71
  .map((target) => target.endpoint)
72
72
  .filter((endpoint) => endpoint !== undefined);
73
73
  const ranked = [
74
- ...modelResolve.lookupModels(endpoints, { search: query }, {
74
+ ...selection.lookupModels(endpoints, { search: query }, {
75
75
  preferSystemModels: this.preferSystemModels,
76
76
  }),
77
- ...modelResolve.lookupModels(endpoints, {
77
+ ...selection.lookupModels(endpoints, {
78
78
  search: query,
79
79
  modelClass: ModelClass.Embedding,
80
80
  }, {
@@ -177,4 +177,4 @@ function matchesResolveOptions(target, options) {
177
177
  return target.capabilities.chat;
178
178
  return true;
179
179
  }
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sT0FBTyxJQUFJLFlBQVksR0FFeEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0MsT0FBTyxFQUNMLFVBQVUsR0FHWCxNQUFNLG1DQUFtQyxDQUFDO0FBTzNDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQTRCM0Qsb0VBQW9FO0FBQ3BFLE1BQU0sT0FBTyx1QkFBdUI7SUFDakIsS0FBSyxDQUFTO0lBQ2QsU0FBUyxDQUFxQztJQUM5QyxrQkFBa0IsQ0FBVTtJQUM1QixNQUFNLENBQThCO0lBRXJELFlBQVksVUFBZ0MsRUFBRTtRQUM1QyxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixJQUFJLEtBQUssQ0FBQztRQUM5RCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxFQUFF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QUk7UUFDSixRQUFRLEVBQUUsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWE7S0FDdkUsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEtBQWE7SUFDckMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFLLEdBQUcsb0JBQW9CO0lBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMscUJBQXFCLENBQUMsTUFBbUIsRUFBRSxPQUFvQztJQUN0RixJQUFJLE9BQU8sQ0FBQyxhQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN0RSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLFNBQVM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO0lBQ3ZGLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlcXVlc3Qtc2NvcGVkIERhdGFicmlja3MgbW9kZWwgZGlzY292ZXJ5IGZvciB0aGUgQXBwS2l0IGdhdGV3YXkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdldEV4ZWN1dGlvbkNvbnRleHQsIHR5cGUgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgbWV0YWRhdGEsXG4gIG1vZGVsQ2F0YWxvZyxcbiAgcG9saWN5LFxuICByZXNvbHZlIGFzIG1vZGVsUmVzb2x2ZSxcbiAgdHlwZSBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMsXG59IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgTW9kZWxDbGFzcyxcbiAgdHlwZSBSZXNvbHZlTW9kZWxJbnB1dCxcbiAgdHlwZSBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwvY29udHJhY3RzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIE1vZGVsQ2FwYWJpbGl0aWVzLFxuICBNb2RlbENhcGFiaWxpdHlPdmVycmlkZSxcbiAgTW9kZWxUYXJnZXQsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC1nYXRld2F5XCI7XG5cbmNvbnN0IERFRkFVTFRfQ0FDSEVfVFRMX01TID0gNjBfMDAwO1xuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImFwcGtpdC9tb2RlbC1nYXRld2F5L3JlZ2lzdHJ5XCIpO1xuXG4vKiogUmVzb2x1dGlvbiBjb250cm9scyBwYXNzZWQgdGhyb3VnaCB0byB0aGUgbW9kZWwgcG9saWN5IG93bmVyLiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxSZWdpc3RyeVJlc29sdmVPcHRpb25zID0gUGljazxSZXNvbHZlTW9kZWxJbnB1dCwgXCJtb2RlbENsYXNzXCIgfCBcInJlcXVpcmVzVG9vbHNcIj47XG5cbi8qKiBEeW5hbWljIG1vZGVsIGNhdGFsb2d1ZSB1c2VkIGJ5IHJlcXVlc3Qgcm91dGluZyBhbmQgbW9kZWwtbGlzdCByZXNwb25zZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsUmVnaXN0cnkge1xuICBsaXN0KCk6IFByb21pc2U8TW9kZWxUYXJnZXRbXT47XG4gIHNlYXJjaChxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxNb2RlbFRhcmdldFtdPjtcbiAgcmVzb2x2ZShtb2RlbD86IHN0cmluZywgb3B0aW9ucz86IE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucyk6IFByb21pc2U8TW9kZWxUYXJnZXQgfCB1bmRlZmluZWQ+O1xuICByZWZyZXNoKCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIGZvciB7QGxpbmsgRGF0YWJyaWNrc01vZGVsUmVnaXN0cnl9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbFJlZ2lzdHJ5T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHR0bE1zPzogbnVtYmVyO1xuICByZWFkb25seSBvdmVycmlkZXM/OiByZWFkb25seSBNb2RlbENhcGFiaWxpdHlPdmVycmlkZVtdO1xuICByZWFkb25seSBwcmVmZXJTeXN0ZW1Nb2RlbHM/OiBib29sZWFuO1xuICAvKiogRGlzY292ZXIgbW9kZWxzIHdpdGggdGhpcyBjbGllbnQgaW5zdGVhZCBvZiB0aGUgQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0LiAqL1xuICByZWFkb25seSBjbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQ7XG59XG5cbmludGVyZmFjZSBSZWdpc3RyeUNvbnRleHQge1xuICByZWFkb25seSBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudDtcbiAgcmVhZG9ubHkgaG9zdDogc3RyaW5nO1xuICByZWFkb25seSBpZGVudGl0eT86IHN0cmluZztcbn1cblxuLyoqIE1vZGVsIHJlZ2lzdHJ5IGJhY2tlZCBieSB0aGUgYWN0aXZlIEFwcEtpdCBleGVjdXRpb24gY29udGV4dC4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhYnJpY2tzTW9kZWxSZWdpc3RyeSBpbXBsZW1lbnRzIE1vZGVsUmVnaXN0cnkge1xuICBwcml2YXRlIHJlYWRvbmx5IHR0bE1zOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3ZlcnJpZGVzOiByZWFkb25seSBNb2RlbENhcGFiaWxpdHlPdmVycmlkZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHByZWZlclN5c3RlbU1vZGVsczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNb2RlbFJlZ2lzdHJ5T3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy50dGxNcyA9IHBvc2l0aXZlVHRsKG9wdGlvbnMudHRsTXMpO1xuICAgIHRoaXMub3ZlcnJpZGVzID0gb3B0aW9ucy5vdmVycmlkZXMgPz8gW107XG4gICAgdGhpcy5wcmVmZXJTeXN0ZW1Nb2RlbHMgPSBvcHRpb25zLnByZWZlclN5c3RlbU1vZGVscyA/PyBmYWxzZTtcbiAgICB0aGlzLmNsaWVudCA9IG9wdGlvbnMuY2xpZW50O1xuICB9XG5cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPE1vZGVsVGFyZ2V0W10+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gYXdhaXQgdGhpcy5jb250ZXh0KCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwibG9hZGluZyBjYXRhbG9ndWVcIiwgeyBob3N0OiBjb250ZXh0Lmhvc3QsIHR0bE1zOiB0aGlzLnR0bE1zIH0pO1xuICAgIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IG1vZGVsQ2F0YWxvZy5saXN0U2VydmluZ0VuZHBvaW50cyhcbiAgICAgIGNvbnRleHQuY2xpZW50LFxuICAgICAgY29udGV4dC5ob3N0LFxuICAgICAgY2F0YWxvZ3VlT3B0aW9ucyhjb250ZXh0LCB0aGlzLnR0bE1zKSxcbiAgICApO1xuICAgIGNvbnN0IHRhcmdldHMgPSBlbmRwb2ludHMubWFwKChlbmRwb2ludCkgPT4gdGhpcy50YXJnZXQoZW5kcG9pbnQpKTtcbiAgICBsb2dnZXIuZGVidWcoXCJsb2FkZWQgY2F0YWxvZ3VlXCIsIHtcbiAgICAgIGVuZHBvaW50Q291bnQ6IGVuZHBvaW50cy5sZW5ndGgsXG4gICAgICBob3N0OiBjb250ZXh0Lmhvc3QsXG4gICAgICB0YXJnZXRDb3VudDogdGFyZ2V0cy5sZW5ndGgsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldHM7XG4gIH1cblxuICBhc3luYyByZXNvbHZlKFxuICAgIG1vZGVsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogTW9kZWxSZWdpc3RyeVJlc29sdmVPcHRpb25zID0ge30sXG4gICk6IFByb21pc2U8TW9kZWxUYXJnZXQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCByZXF1ZXN0ZWQgPSBtb2RlbCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdW5xdWFsaWZpZWRNb2RlbChtb2RlbCk7XG4gICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIGNvbnN0IGV4YWN0SWQgPVxuICAgICAgcmVxdWVzdGVkID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiB0YXJnZXRzLmZpbmQoXG4gICAgICAgICAgICAodGFyZ2V0KSA9PlxuICAgICAgICAgICAgICB0YXJnZXQuaWQubG9jYWxlQ29tcGFyZShyZXF1ZXN0ZWQsIHVuZGVmaW5lZCwgeyBzZW5zaXRpdml0eTogXCJhY2NlbnRcIiB9KSA9PT0gMCxcbiAgICAgICAgICApO1xuICAgIGNvbnN0IGV4YWN0QWxpYXMgPVxuICAgICAgcmVxdWVzdGVkID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiB0YXJnZXRzLmZpbmQoKHRhcmdldCkgPT5cbiAgICAgICAgICAgIHRhcmdldC5hbGlhc2VzLnNvbWUoXG4gICAgICAgICAgICAgIChhbGlhcykgPT4gYWxpYXMubG9jYWxlQ29tcGFyZShyZXF1ZXN0ZWQsIHVuZGVmaW5lZCwgeyBzZW5zaXRpdml0eTogXCJhY2NlbnRcIiB9KSA9PT0gMCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICBjb25zdCBleGFjdCA9IGV4YWN0SWQgPz8gZXhhY3RBbGlhcztcbiAgICBpZiAoZXhhY3QgJiYgbWF0Y2hlc1Jlc29sdmVPcHRpb25zKGV4YWN0LCBvcHRpb25zKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmVzb2x2ZWQgZXhhY3QgbW9kZWxcIiwgeyByZXF1ZXN0ZWQsIHJlc29sdmVkOiBleGFjdC5pZCB9KTtcbiAgICAgIHJldHVybiBleGFjdDtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRwb2ludHMgPSB0YXJnZXRzXG4gICAgICAubWFwKCh0YXJnZXQpID0+IHRhcmdldC5lbmRwb2ludClcbiAgICAgIC5maWx0ZXIoKGVuZHBvaW50KTogZW5kcG9pbnQgaXMgU2VydmluZ0VuZHBvaW50U3VtbWFyeSA9PiBlbmRwb2ludCAhPT0gdW5kZWZpbmVkKTtcbiAgICBjb25zdCByZXNvbHZlZCA9IG1vZGVsUmVzb2x2ZS5yZXNvbHZlTW9kZWwoXG4gICAgICBlbmRwb2ludHMsXG4gICAgICB7XG4gICAgICAgIC4uLihyZXF1ZXN0ZWQgIT09IHVuZGVmaW5lZCA/IHsgZXhwbGljaXQ6IHJlcXVlc3RlZCB9IDoge30pLFxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcHJlZmVyU3lzdGVtTW9kZWxzOiB0aGlzLnByZWZlclN5c3RlbU1vZGVscyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRzLmZpbmQoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSByZXNvbHZlZC5tb2RlbElkKTtcbiAgICBsb2dnZXIuZGVidWcoXCJyZXNvbHZlZCBmdXp6eSBtb2RlbFwiLCB7XG4gICAgICByZXF1ZXN0ZWQsXG4gICAgICByZXNvbHZlZDogdGFyZ2V0Py5pZCxcbiAgICAgIHNvdXJjZTogcmVzb2x2ZWQuc291cmNlLFxuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBhc3luYyBzZWFyY2gocXVlcnk6IHN0cmluZyk6IFByb21pc2U8TW9kZWxUYXJnZXRbXT4ge1xuICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICBjb25zdCBieUlkID0gbmV3IE1hcCh0YXJnZXRzLm1hcCgodGFyZ2V0KSA9PiBbdGFyZ2V0LmlkLCB0YXJnZXRdKSk7XG4gICAgY29uc3QgZW5kcG9pbnRzID0gdGFyZ2V0c1xuICAgICAgLm1hcCgodGFyZ2V0KSA9PiB0YXJnZXQuZW5kcG9pbnQpXG4gICAgICAuZmlsdGVyKChlbmRwb2ludCk6IGVuZHBvaW50IGlzIFNlcnZpbmdFbmRwb2ludFN1bW1hcnkgPT4gZW5kcG9pbnQgIT09IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcmFua2VkID0gW1xuICAgICAgLi4ubW9kZWxSZXNvbHZlLmxvb2t1cE1vZGVscyhcbiAgICAgICAgZW5kcG9pbnRzLFxuICAgICAgICB7IHNlYXJjaDogcXVlcnkgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByZWZlclN5c3RlbU1vZGVsczogdGhpcy5wcmVmZXJTeXN0ZW1Nb2RlbHMsXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICAgLi4ubW9kZWxSZXNvbHZlLmxvb2t1cE1vZGVscyhcbiAgICAgICAgZW5kcG9pbnRzLFxuICAgICAgICB7XG4gICAgICAgICAgc2VhcmNoOiBxdWVyeSxcbiAgICAgICAgICBtb2RlbENsYXNzOiBNb2RlbENsYXNzLkVtYmVkZGluZyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByZWZlclN5c3RlbU1vZGVsczogdGhpcy5wcmVmZXJTeXN0ZW1Nb2RlbHMsXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgIF0uc29ydCgobGVmdCwgcmlnaHQpID0+IChsZWZ0LnNjb3JlID8/IDApIC0gKHJpZ2h0LnNjb3JlID8/IDApKTtcbiAgICByZXR1cm4gcmFua2VkXG4gICAgICAubWFwKCh7IGVuZHBvaW50IH0pID0+IGJ5SWQuZ2V0KGVuZHBvaW50Lm5hbWUpKVxuICAgICAgLmZpbHRlcigodGFyZ2V0KTogdGFyZ2V0IGlzIE1vZGVsVGFyZ2V0ID0+IHRhcmdldCAhPT0gdW5kZWZpbmVkKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHRhcmdldCwgaW5kZXgsIGFsbCkgPT4gYWxsLmZpbmRJbmRleCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuaWQgPT09IHRhcmdldC5pZCkgPT09IGluZGV4LFxuICAgICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuY29udGV4dCgpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImNsZWFyaW5nIGNhdGFsb2d1ZVwiLCB7IGhvc3Q6IGNvbnRleHQuaG9zdCB9KTtcbiAgICBpZiAoY29udGV4dC5pZGVudGl0eSkge1xuICAgICAgYXdhaXQgbW9kZWxDYXRhbG9nLmNsZWFyU2VydmluZ0VuZHBvaW50c0NhY2hlKGNvbnRleHQuaG9zdCwgY29udGV4dC5pZGVudGl0eSk7XG4gICAgfVxuICAgIGF3YWl0IG1vZGVsQ2F0YWxvZy5saXN0U2VydmluZ0VuZHBvaW50cyhcbiAgICAgIGNvbnRleHQuY2xpZW50LFxuICAgICAgY29udGV4dC5ob3N0LFxuICAgICAgY2F0YWxvZ3VlT3B0aW9ucyhjb250ZXh0LCB0aGlzLnR0bE1zKSxcbiAgICApO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInJlZnJlc2hlZCBjYXRhbG9ndWVcIiwgeyBob3N0OiBjb250ZXh0Lmhvc3QgfSk7XG4gIH1cblxuICBwcml2YXRlIHRhcmdldChlbmRwb2ludDogU2VydmluZ0VuZHBvaW50U3VtbWFyeSk6IE1vZGVsVGFyZ2V0IHtcbiAgICBjb25zdCBwdWJsaXNoZWQgPSBtZXRhZGF0YS5tb2RlbENhcGFiaWxpdGllc0ZvcihlbmRwb2ludCk7XG4gICAgY29uc3QgZmFtaWx5ID0gZW5kcG9pbnQuZmFtaWx5Py50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG9wZW5BaUZhbWlseSA9IGZhbWlseSA9PT0gXCJncHRcIiB8fCBmYW1pbHkgPT09IFwib3BlbmFpXCIgfHwgZW5kcG9pbnQubmFtZS5pbmNsdWRlcyhcImNvZGV4XCIpO1xuICAgIGNvbnN0IG1vZGVsU2VydmljZU5hbWUgPSBwb2xpY3kubW9kZWxTZXJ2aWNlTmFtZShlbmRwb2ludC5tb2RlbFNlcnZpY2VOYW1lKTtcbiAgICBjb25zdCBlbWJlZGRpbmdzID1cbiAgICAgIGVuZHBvaW50LmNsYXNzID09PSBNb2RlbENsYXNzLkVtYmVkZGluZyB8fCBlbmRwb2ludC50YXNrID09PSBcImxsbS92MS9lbWJlZGRpbmdzXCI7XG4gICAgY29uc3QgY2FwYWJpbGl0aWVzOiBNb2RlbENhcGFiaWxpdGllcyA9IHtcbiAgICAgIHJlc3BvbnNlczogIWVtYmVkZGluZ3MgJiYgKG9wZW5BaUZhbWlseSB8fCBwdWJsaXNoZWQucmVzcG9uc2VzKSxcbiAgICAgIG9wZW5SZXNwb25zZXM6ICFlbWJlZGRpbmdzICYmICFvcGVuQWlGYW1pbHksXG4gICAgICBjaGF0OiAhZW1iZWRkaW5ncyxcbiAgICAgIGFudGhyb3BpYzogZmFtaWx5ID09PSBcImNsYXVkZVwiLFxuICAgICAgZW1iZWRkaW5ncyxcbiAgICAgIGFpR2F0ZXdheUNvZGV4OlxuICAgICAgICAhZW1iZWRkaW5ncyAmJiBCb29sZWFuKG1vZGVsU2VydmljZU5hbWUpICYmIGZhbWlseSAhPT0gXCJjbGF1ZGVcIiAmJiBmYW1pbHkgIT09IFwiZ2VtaW5pXCIsXG4gICAgICB0b29sczogZW5kcG9pbnQuc3VwcG9ydHNUb29scyA9PT0gdHJ1ZSxcbiAgICAgIHJlYXNvbmluZzogcG9saWN5Lm1vZGVsUmVhc29uaW5nRWZmb3J0cyhlbmRwb2ludC5uYW1lKS5sZW5ndGggPiAwLFxuICAgICAgc3RyZWFtaW5nOiB0cnVlLFxuICAgICAgcGFyYWxsZWxUb29sczogZW5kcG9pbnQuc3VwcG9ydHNUb29scyA9PT0gdHJ1ZSxcbiAgICAgIGN1c3RvbVRvb2xzOiBwdWJsaXNoZWQuYXBwbHlQYXRjaCB8fCBlbmRwb2ludC5uYW1lLmluY2x1ZGVzKFwiY29kZXhcIiksXG4gICAgICBzdHJ1Y3R1cmVkT3V0cHV0OiB0cnVlLFxuICAgICAgd2ViU2VhcmNoOiBwdWJsaXNoZWQud2ViU2VhcmNoLFxuICAgIH07XG4gICAgY29uc3QgYWxpYXNlcyA9IG5ldyBTZXQoXG4gICAgICBbXG4gICAgICAgIGVuZHBvaW50Lm5hbWUsXG4gICAgICAgIGVuZHBvaW50LmRpc3BsYXlOYW1lLFxuICAgICAgICBlbmRwb2ludC5tb2RlbFNlcnZpY2VOYW1lLFxuICAgICAgICBtb2RlbFNlcnZpY2VOYW1lLFxuICAgICAgICAuLi5PYmplY3QudmFsdWVzKGVuZHBvaW50LnNlcnZpY2VOYW1lcyA/PyB7fSksXG4gICAgICBdLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih2YWx1ZT8udHJpbSgpKSksXG4gICAgKTtcbiAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMub3ZlcnJpZGVzLmZpbmQoXG4gICAgICAoY2FuZGlkYXRlKSA9PlxuICAgICAgICBjYW5kaWRhdGUubW9kZWwgPT09IGVuZHBvaW50Lm5hbWUgfHxcbiAgICAgICAgWy4uLmFsaWFzZXNdLnNvbWUoKGFsaWFzKSA9PiBhbGlhcyA9PT0gY2FuZGlkYXRlLm1vZGVsKSxcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZW5kcG9pbnQubmFtZSxcbiAgICAgIGFsaWFzZXM6IFsuLi5hbGlhc2VzXSxcbiAgICAgIGRpc3BsYXlOYW1lOiBlbmRwb2ludC5kaXNwbGF5TmFtZSA/PyBlbmRwb2ludC5uYW1lLFxuICAgICAgLi4uKGVuZHBvaW50LmZhbWlseSA/IHsgZmFtaWx5OiBlbmRwb2ludC5mYW1pbHkgfSA6IHt9KSxcbiAgICAgIC4uLihtb2RlbFNlcnZpY2VOYW1lID8geyBtb2RlbFNlcnZpY2VOYW1lIH0gOiB7fSksXG4gICAgICBlbmRwb2ludCxcbiAgICAgIGNhcGFiaWxpdGllczogeyAuLi5jYXBhYmlsaXRpZXMsIC4uLm92ZXJyaWRlPy5jYXBhYmlsaXRpZXMgfSxcbiAgICAgIHJlYXNvbmluZ0VmZm9ydHM6IGVuZHBvaW50LnJlYXNvbmluZ0VmZm9ydHMgPz8gW10sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udGV4dCgpOiBQcm9taXNlPFJlZ2lzdHJ5Q29udGV4dD4ge1xuICAgIGlmICh0aGlzLmNsaWVudCkge1xuICAgICAgY29uc3QgaG9zdCA9IChhd2FpdCB0aGlzLmNsaWVudC5jb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIHsgY2xpZW50OiB0aGlzLmNsaWVudCwgaG9zdCB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVnaXN0cnlDb250ZXh0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2F0YWxvZ3VlT3B0aW9ucyhjb250ZXh0OiBSZWdpc3RyeUNvbnRleHQsIHR0bE1zOiBudW1iZXIpOiBMaXN0U2VydmluZ0VuZHBvaW50c09wdGlvbnMge1xuICByZXR1cm4ge1xuICAgIHR0bE1zLFxuICAgIC4uLihjb250ZXh0LmlkZW50aXR5ID8geyBjYWNoZUlkZW50aXR5OiBjb250ZXh0LmlkZW50aXR5IH0gOiB7fSksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdHJ5Q29udGV4dCgpOiBQcm9taXNlPFJlZ2lzdHJ5Q29udGV4dD4ge1xuICBjb25zdCBjb250ZXh0ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICBjb25zdCBob3N0ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIHJldHVybiB7XG4gICAgY2xpZW50OiBjb250ZXh0LmNsaWVudCxcbiAgICBob3N0LFxuICAgIGlkZW50aXR5OiBcInVzZXJJZFwiIGluIGNvbnRleHQgPyBjb250ZXh0LnVzZXJJZCA6IGNvbnRleHQuc2VydmljZVVzZXJJZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW5xdWFsaWZpZWRNb2RlbChtb2RlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG1vZGVsLnRyaW0oKS5yZXBsYWNlKC9eKD86ZGJ4fGRhdGFicmlja3MpXFwvL2ksIFwiXCIpO1xufVxuXG5mdW5jdGlvbiBwb3NpdGl2ZVR0bCh2YWx1ZSA9IERFRkFVTFRfQ0FDSEVfVFRMX01TKTogbnVtYmVyIHtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpIHx8IHZhbHVlIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNb2RlbCByZWdpc3RyeSB0dGxNcyBtdXN0IGJlIGEgcG9zaXRpdmUgZmluaXRlIG51bWJlclwiKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXNSZXNvbHZlT3B0aW9ucyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBvcHRpb25zOiBNb2RlbFJlZ2lzdHJ5UmVzb2x2ZU9wdGlvbnMpOiBib29sZWFuIHtcbiAgaWYgKG9wdGlvbnMucmVxdWlyZXNUb29scyAmJiAhdGFyZ2V0LmNhcGFiaWxpdGllcy50b29scykgcmV0dXJuIGZhbHNlO1xuICBpZiAob3B0aW9ucy5tb2RlbENsYXNzID09PSBNb2RlbENsYXNzLkVtYmVkZGluZykgcmV0dXJuIHRhcmdldC5jYXBhYmlsaXRpZXMuZW1iZWRkaW5ncztcbiAgaWYgKG9wdGlvbnMubW9kZWxDbGFzcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGFyZ2V0LmNhcGFiaWxpdGllcy5jaGF0O1xuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUMvRSxPQUFPLEVBQ0wsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxHQUVWLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFDTCxVQUFVLEdBR1gsTUFBTSx5QkFBeUIsQ0FBQztBQU9qQyxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7QUE0QjNELG9FQUFvRTtBQUNwRSxNQUFNLE9BQU8sdUJBQXVCO0lBQ2pCLEtBQUssQ0FBUztJQUNkLFNBQVMsQ0FBcUM7SUFDOUMsa0JBQWtCLENBQVU7SUFDNUIsTUFBTSxDQUE4QjtJQUVyRCxZQUFZLFVBQWdDLEVBQUU7UUFDNUMsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUM7UUFDOUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUs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USxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhO0tBQ3ZFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFhO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBSyxHQUFHLG9CQUFvQjtJQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLE1BQW1CLEVBQUUsT0FBb0M7SUFDdEYsSUFBSSxPQUFPLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdEUsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztJQUN2RixJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDdEUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXF1ZXN0LXNjb3BlZCBEYXRhYnJpY2tzIG1vZGVsIGRpc2NvdmVyeSBmb3IgdGhlIEFwcEtpdCBnYXRld2F5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0LCB0eXBlIFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7XG4gIG1ldGFkYXRhLFxuICBtb2RlbENhdGFsb2csXG4gIHBvbGljeSxcbiAgc2VsZWN0aW9uLFxuICB0eXBlIExpc3RTZXJ2aW5nRW5kcG9pbnRzT3B0aW9ucyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBNb2RlbENsYXNzLFxuICB0eXBlIFJlc29sdmVNb2RlbElucHV0LFxuICB0eXBlIFNlcnZpbmdFbmRwb2ludFN1bW1hcnksXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbFwiO1xuaW1wb3J0IHR5cGUge1xuICBNb2RlbENhcGFiaWxpdGllcyxcbiAgTW9kZWxDYXBhYmlsaXR5T3ZlcnJpZGUsXG4gIE1vZGVsVGFyZ2V0LFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuXG5jb25zdCBERUZBVUxUX0NBQ0hFX1RUTF9NUyA9IDYwXzAwMDtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXQvbW9kZWwtZ2F0ZXdheS9yZWdpc3RyeVwiKTtcblxuLyoqIFJlc29sdXRpb24gY29udHJvbHMgcGFzc2VkIHRocm91Z2ggdG8gdGhlIG1vZGVsIHBvbGljeSBvd25lci4gKi9cbmV4cG9ydCB0eXBlIE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucyA9IFBpY2s8UmVzb2x2ZU1vZGVsSW5wdXQsIFwibW9kZWxDbGFzc1wiIHwgXCJyZXF1aXJlc1Rvb2xzXCI+O1xuXG4vKiogRHluYW1pYyBtb2RlbCBjYXRhbG9ndWUgdXNlZCBieSByZXF1ZXN0IHJvdXRpbmcgYW5kIG1vZGVsLWxpc3QgcmVzcG9uc2VzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RlbFJlZ2lzdHJ5IHtcbiAgbGlzdCgpOiBQcm9taXNlPE1vZGVsVGFyZ2V0W10+O1xuICBzZWFyY2gocXVlcnk6IHN0cmluZyk6IFByb21pc2U8TW9kZWxUYXJnZXRbXT47XG4gIHJlc29sdmUobW9kZWw/OiBzdHJpbmcsIG9wdGlvbnM/OiBNb2RlbFJlZ2lzdHJ5UmVzb2x2ZU9wdGlvbnMpOiBQcm9taXNlPE1vZGVsVGFyZ2V0IHwgdW5kZWZpbmVkPjtcbiAgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKiogQ29uZmlndXJhdGlvbiBmb3Ige0BsaW5rIERhdGFicmlja3NNb2RlbFJlZ2lzdHJ5fS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9kZWxSZWdpc3RyeU9wdGlvbnMge1xuICByZWFkb25seSB0dGxNcz86IG51bWJlcjtcbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogcmVhZG9ubHkgTW9kZWxDYXBhYmlsaXR5T3ZlcnJpZGVbXTtcbiAgcmVhZG9ubHkgcHJlZmVyU3lzdGVtTW9kZWxzPzogYm9vbGVhbjtcbiAgLyoqIERpc2NvdmVyIG1vZGVscyB3aXRoIHRoaXMgY2xpZW50IGluc3RlYWQgb2YgdGhlIEFwcEtpdCBleGVjdXRpb24gY29udGV4dC4gKi9cbiAgcmVhZG9ubHkgY2xpZW50PzogV29ya3NwYWNlQ2xpZW50O1xufVxuXG5pbnRlcmZhY2UgUmVnaXN0cnlDb250ZXh0IHtcbiAgcmVhZG9ubHkgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQ7XG4gIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgaWRlbnRpdHk/OiBzdHJpbmc7XG59XG5cbi8qKiBNb2RlbCByZWdpc3RyeSBiYWNrZWQgYnkgdGhlIGFjdGl2ZSBBcHBLaXQgZXhlY3V0aW9uIGNvbnRleHQuICovXG5leHBvcnQgY2xhc3MgRGF0YWJyaWNrc01vZGVsUmVnaXN0cnkgaW1wbGVtZW50cyBNb2RlbFJlZ2lzdHJ5IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0dGxNczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG92ZXJyaWRlczogcmVhZG9ubHkgTW9kZWxDYXBhYmlsaXR5T3ZlcnJpZGVbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcmVmZXJTeXN0ZW1Nb2RlbHM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTW9kZWxSZWdpc3RyeU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMudHRsTXMgPSBwb3NpdGl2ZVR0bChvcHRpb25zLnR0bE1zKTtcbiAgICB0aGlzLm92ZXJyaWRlcyA9IG9wdGlvbnMub3ZlcnJpZGVzID8/IFtdO1xuICAgIHRoaXMucHJlZmVyU3lzdGVtTW9kZWxzID0gb3B0aW9ucy5wcmVmZXJTeXN0ZW1Nb2RlbHMgPz8gZmFsc2U7XG4gICAgdGhpcy5jbGllbnQgPSBvcHRpb25zLmNsaWVudDtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxNb2RlbFRhcmdldFtdPiB7XG4gICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuY29udGV4dCgpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImxvYWRpbmcgY2F0YWxvZ3VlXCIsIHsgaG9zdDogY29udGV4dC5ob3N0LCB0dGxNczogdGhpcy50dGxNcyB9KTtcbiAgICBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBtb2RlbENhdGFsb2cubGlzdFNlcnZpbmdFbmRwb2ludHMoXG4gICAgICBjb250ZXh0LmNsaWVudCxcbiAgICAgIGNvbnRleHQuaG9zdCxcbiAgICAgIGNhdGFsb2d1ZU9wdGlvbnMoY29udGV4dCwgdGhpcy50dGxNcyksXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRzID0gZW5kcG9pbnRzLm1hcCgoZW5kcG9pbnQpID0+IHRoaXMudGFyZ2V0KGVuZHBvaW50KSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwibG9hZGVkIGNhdGFsb2d1ZVwiLCB7XG4gICAgICBlbmRwb2ludENvdW50OiBlbmRwb2ludHMubGVuZ3RoLFxuICAgICAgaG9zdDogY29udGV4dC5ob3N0LFxuICAgICAgdGFyZ2V0Q291bnQ6IHRhcmdldHMubGVuZ3RoLFxuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXRzO1xuICB9XG5cbiAgYXN5bmMgcmVzb2x2ZShcbiAgICBtb2RlbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnM6IE1vZGVsUmVnaXN0cnlSZXNvbHZlT3B0aW9ucyA9IHt9LFxuICApOiBQcm9taXNlPE1vZGVsVGFyZ2V0IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgcmVxdWVzdGVkID0gbW9kZWwgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHVucXVhbGlmaWVkTW9kZWwobW9kZWwpO1xuICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCB0aGlzLmxpc3QoKTtcbiAgICBjb25zdCBleGFjdElkID1cbiAgICAgIHJlcXVlc3RlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogdGFyZ2V0cy5maW5kKFxuICAgICAgICAgICAgKHRhcmdldCkgPT5cbiAgICAgICAgICAgICAgdGFyZ2V0LmlkLmxvY2FsZUNvbXBhcmUocmVxdWVzdGVkLCB1bmRlZmluZWQsIHsgc2Vuc2l0aXZpdHk6IFwiYWNjZW50XCIgfSkgPT09IDAsXG4gICAgICAgICAgKTtcbiAgICBjb25zdCBleGFjdEFsaWFzID1cbiAgICAgIHJlcXVlc3RlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogdGFyZ2V0cy5maW5kKCh0YXJnZXQpID0+XG4gICAgICAgICAgICB0YXJnZXQuYWxpYXNlcy5zb21lKFxuICAgICAgICAgICAgICAoYWxpYXMpID0+IGFsaWFzLmxvY2FsZUNvbXBhcmUocmVxdWVzdGVkLCB1bmRlZmluZWQsIHsgc2Vuc2l0aXZpdHk6IFwiYWNjZW50XCIgfSkgPT09IDAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgY29uc3QgZXhhY3QgPSBleGFjdElkID8/IGV4YWN0QWxpYXM7XG4gICAgaWYgKGV4YWN0ICYmIG1hdGNoZXNSZXNvbHZlT3B0aW9ucyhleGFjdCwgb3B0aW9ucykpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInJlc29sdmVkIGV4YWN0IG1vZGVsXCIsIHsgcmVxdWVzdGVkLCByZXNvbHZlZDogZXhhY3QuaWQgfSk7XG4gICAgICByZXR1cm4gZXhhY3Q7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kcG9pbnRzID0gdGFyZ2V0c1xuICAgICAgLm1hcCgodGFyZ2V0KSA9PiB0YXJnZXQuZW5kcG9pbnQpXG4gICAgICAuZmlsdGVyKChlbmRwb2ludCk6IGVuZHBvaW50IGlzIFNlcnZpbmdFbmRwb2ludFN1bW1hcnkgPT4gZW5kcG9pbnQgIT09IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBzZWxlY3Rpb24ucmVzb2x2ZU1vZGVsKFxuICAgICAgZW5kcG9pbnRzLFxuICAgICAge1xuICAgICAgICAuLi4ocmVxdWVzdGVkICE9PSB1bmRlZmluZWQgPyB7IGV4cGxpY2l0OiByZXF1ZXN0ZWQgfSA6IHt9KSxcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByZWZlclN5c3RlbU1vZGVsczogdGhpcy5wcmVmZXJTeXN0ZW1Nb2RlbHMsXG4gICAgICB9LFxuICAgICk7XG4gICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0cy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5pZCA9PT0gcmVzb2x2ZWQubW9kZWxJZCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVzb2x2ZWQgZnV6enkgbW9kZWxcIiwge1xuICAgICAgcmVxdWVzdGVkLFxuICAgICAgcmVzb2x2ZWQ6IHRhcmdldD8uaWQsXG4gICAgICBzb3VyY2U6IHJlc29sdmVkLnNvdXJjZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgYXN5bmMgc2VhcmNoKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPE1vZGVsVGFyZ2V0W10+IHtcbiAgICBjb25zdCB0YXJnZXRzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgY29uc3QgYnlJZCA9IG5ldyBNYXAodGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4gW3RhcmdldC5pZCwgdGFyZ2V0XSkpO1xuICAgIGNvbnN0IGVuZHBvaW50cyA9IHRhcmdldHNcbiAgICAgIC5tYXAoKHRhcmdldCkgPT4gdGFyZ2V0LmVuZHBvaW50KVxuICAgICAgLmZpbHRlcigoZW5kcG9pbnQpOiBlbmRwb2ludCBpcyBTZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5ID0+IGVuZHBvaW50ICE9PSB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHJhbmtlZCA9IFtcbiAgICAgIC4uLnNlbGVjdGlvbi5sb29rdXBNb2RlbHMoXG4gICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAgeyBzZWFyY2g6IHF1ZXJ5IH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcmVmZXJTeXN0ZW1Nb2RlbHM6IHRoaXMucHJlZmVyU3lzdGVtTW9kZWxzLFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICAgIC4uLnNlbGVjdGlvbi5sb29rdXBNb2RlbHMoXG4gICAgICAgIGVuZHBvaW50cyxcbiAgICAgICAge1xuICAgICAgICAgIHNlYXJjaDogcXVlcnksXG4gICAgICAgICAgbW9kZWxDbGFzczogTW9kZWxDbGFzcy5FbWJlZGRpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcmVmZXJTeXN0ZW1Nb2RlbHM6IHRoaXMucHJlZmVyU3lzdGVtTW9kZWxzLFxuICAgICAgICB9LFxuICAgICAgKSxcbiAgICBdLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiAobGVmdC5zY29yZSA/PyAwKSAtIChyaWdodC5zY29yZSA/PyAwKSk7XG4gICAgcmV0dXJuIHJhbmtlZFxuICAgICAgLm1hcCgoeyBlbmRwb2ludCB9KSA9PiBieUlkLmdldChlbmRwb2ludC5uYW1lKSlcbiAgICAgIC5maWx0ZXIoKHRhcmdldCk6IHRhcmdldCBpcyBNb2RlbFRhcmdldCA9PiB0YXJnZXQgIT09IHVuZGVmaW5lZClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgICh0YXJnZXQsIGluZGV4LCBhbGwpID0+IGFsbC5maW5kSW5kZXgoKGNhbmRpZGF0ZSkgPT4gY2FuZGlkYXRlLmlkID09PSB0YXJnZXQuaWQpID09PSBpbmRleCxcbiAgICAgICk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB0aGlzLmNvbnRleHQoKTtcbiAgICBsb2dnZXIuZGVidWcoXCJjbGVhcmluZyBjYXRhbG9ndWVcIiwgeyBob3N0OiBjb250ZXh0Lmhvc3QgfSk7XG4gICAgaWYgKGNvbnRleHQuaWRlbnRpdHkpIHtcbiAgICAgIGF3YWl0IG1vZGVsQ2F0YWxvZy5jbGVhclNlcnZpbmdFbmRwb2ludHNDYWNoZShjb250ZXh0Lmhvc3QsIGNvbnRleHQuaWRlbnRpdHkpO1xuICAgIH1cbiAgICBhd2FpdCBtb2RlbENhdGFsb2cubGlzdFNlcnZpbmdFbmRwb2ludHMoXG4gICAgICBjb250ZXh0LmNsaWVudCxcbiAgICAgIGNvbnRleHQuaG9zdCxcbiAgICAgIGNhdGFsb2d1ZU9wdGlvbnMoY29udGV4dCwgdGhpcy50dGxNcyksXG4gICAgKTtcbiAgICBsb2dnZXIuZGVidWcoXCJyZWZyZXNoZWQgY2F0YWxvZ3VlXCIsIHsgaG9zdDogY29udGV4dC5ob3N0IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0YXJnZXQoZW5kcG9pbnQ6IFNlcnZpbmdFbmRwb2ludFN1bW1hcnkpOiBNb2RlbFRhcmdldCB7XG4gICAgY29uc3QgcHVibGlzaGVkID0gbWV0YWRhdGEubW9kZWxDYXBhYmlsaXRpZXNGb3IoZW5kcG9pbnQpO1xuICAgIGNvbnN0IGZhbWlseSA9IGVuZHBvaW50LmZhbWlseT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBvcGVuQWlGYW1pbHkgPSBmYW1pbHkgPT09IFwiZ3B0XCIgfHwgZmFtaWx5ID09PSBcIm9wZW5haVwiIHx8IGVuZHBvaW50Lm5hbWUuaW5jbHVkZXMoXCJjb2RleFwiKTtcbiAgICBjb25zdCBtb2RlbFNlcnZpY2VOYW1lID0gcG9saWN5Lm1vZGVsU2VydmljZU5hbWUoZW5kcG9pbnQubW9kZWxTZXJ2aWNlTmFtZSk7XG4gICAgY29uc3QgZW1iZWRkaW5ncyA9XG4gICAgICBlbmRwb2ludC5jbGFzcyA9PT0gTW9kZWxDbGFzcy5FbWJlZGRpbmcgfHwgZW5kcG9pbnQudGFzayA9PT0gXCJsbG0vdjEvZW1iZWRkaW5nc1wiO1xuICAgIGNvbnN0IGNhcGFiaWxpdGllczogTW9kZWxDYXBhYmlsaXRpZXMgPSB7XG4gICAgICByZXNwb25zZXM6ICFlbWJlZGRpbmdzICYmIChvcGVuQWlGYW1pbHkgfHwgcHVibGlzaGVkLnJlc3BvbnNlcyksXG4gICAgICBvcGVuUmVzcG9uc2VzOiAhZW1iZWRkaW5ncyAmJiAhb3BlbkFpRmFtaWx5LFxuICAgICAgY2hhdDogIWVtYmVkZGluZ3MsXG4gICAgICBhbnRocm9waWM6IGZhbWlseSA9PT0gXCJjbGF1ZGVcIixcbiAgICAgIGVtYmVkZGluZ3MsXG4gICAgICBhaUdhdGV3YXlDb2RleDpcbiAgICAgICAgIWVtYmVkZGluZ3MgJiYgQm9vbGVhbihtb2RlbFNlcnZpY2VOYW1lKSAmJiBmYW1pbHkgIT09IFwiY2xhdWRlXCIgJiYgZmFtaWx5ICE9PSBcImdlbWluaVwiLFxuICAgICAgdG9vbHM6IGVuZHBvaW50LnN1cHBvcnRzVG9vbHMgPT09IHRydWUsXG4gICAgICByZWFzb25pbmc6IHBvbGljeS5tb2RlbFJlYXNvbmluZ0VmZm9ydHMoZW5kcG9pbnQubmFtZSkubGVuZ3RoID4gMCxcbiAgICAgIHN0cmVhbWluZzogdHJ1ZSxcbiAgICAgIHBhcmFsbGVsVG9vbHM6IGVuZHBvaW50LnN1cHBvcnRzVG9vbHMgPT09IHRydWUsXG4gICAgICBjdXN0b21Ub29sczogcHVibGlzaGVkLmFwcGx5UGF0Y2ggfHwgZW5kcG9pbnQubmFtZS5pbmNsdWRlcyhcImNvZGV4XCIpLFxuICAgICAgc3RydWN0dXJlZE91dHB1dDogdHJ1ZSxcbiAgICAgIHdlYlNlYXJjaDogcHVibGlzaGVkLndlYlNlYXJjaCxcbiAgICB9O1xuICAgIGNvbnN0IGFsaWFzZXMgPSBuZXcgU2V0KFxuICAgICAgW1xuICAgICAgICBlbmRwb2ludC5uYW1lLFxuICAgICAgICBlbmRwb2ludC5kaXNwbGF5TmFtZSxcbiAgICAgICAgZW5kcG9pbnQubW9kZWxTZXJ2aWNlTmFtZSxcbiAgICAgICAgbW9kZWxTZXJ2aWNlTmFtZSxcbiAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhlbmRwb2ludC5zZXJ2aWNlTmFtZXMgPz8ge30pLFxuICAgICAgXS5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odmFsdWU/LnRyaW0oKSkpLFxuICAgICk7XG4gICAgY29uc3Qgb3ZlcnJpZGUgPSB0aGlzLm92ZXJyaWRlcy5maW5kKFxuICAgICAgKGNhbmRpZGF0ZSkgPT5cbiAgICAgICAgY2FuZGlkYXRlLm1vZGVsID09PSBlbmRwb2ludC5uYW1lIHx8XG4gICAgICAgIFsuLi5hbGlhc2VzXS5zb21lKChhbGlhcykgPT4gYWxpYXMgPT09IGNhbmRpZGF0ZS5tb2RlbCksXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGVuZHBvaW50Lm5hbWUsXG4gICAgICBhbGlhc2VzOiBbLi4uYWxpYXNlc10sXG4gICAgICBkaXNwbGF5TmFtZTogZW5kcG9pbnQuZGlzcGxheU5hbWUgPz8gZW5kcG9pbnQubmFtZSxcbiAgICAgIC4uLihlbmRwb2ludC5mYW1pbHkgPyB7IGZhbWlseTogZW5kcG9pbnQuZmFtaWx5IH0gOiB7fSksXG4gICAgICAuLi4obW9kZWxTZXJ2aWNlTmFtZSA/IHsgbW9kZWxTZXJ2aWNlTmFtZSB9IDoge30pLFxuICAgICAgZW5kcG9pbnQsXG4gICAgICBjYXBhYmlsaXRpZXM6IHsgLi4uY2FwYWJpbGl0aWVzLCAuLi5vdmVycmlkZT8uY2FwYWJpbGl0aWVzIH0sXG4gICAgICByZWFzb25pbmdFZmZvcnRzOiBlbmRwb2ludC5yZWFzb25pbmdFZmZvcnRzID8/IFtdLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnRleHQoKTogUHJvbWlzZTxSZWdpc3RyeUNvbnRleHQ+IHtcbiAgICBpZiAodGhpcy5jbGllbnQpIHtcbiAgICAgIGNvbnN0IGhvc3QgPSAoYXdhaXQgdGhpcy5jbGllbnQuY29uZmlnLmdldEhvc3QoKSkudG9TdHJpbmcoKTtcbiAgICAgIHJldHVybiB7IGNsaWVudDogdGhpcy5jbGllbnQsIGhvc3QgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZ2lzdHJ5Q29udGV4dCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhdGFsb2d1ZU9wdGlvbnMoY29udGV4dDogUmVnaXN0cnlDb250ZXh0LCB0dGxNczogbnVtYmVyKTogTGlzdFNlcnZpbmdFbmRwb2ludHNPcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICB0dGxNcyxcbiAgICAuLi4oY29udGV4dC5pZGVudGl0eSA/IHsgY2FjaGVJZGVudGl0eTogY29udGV4dC5pZGVudGl0eSB9IDoge30pLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWdpc3RyeUNvbnRleHQoKTogUHJvbWlzZTxSZWdpc3RyeUNvbnRleHQ+IHtcbiAgY29uc3QgY29udGV4dCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKTtcbiAgY29uc3QgaG9zdCA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5jb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpO1xuICByZXR1cm4ge1xuICAgIGNsaWVudDogY29udGV4dC5jbGllbnQsXG4gICAgaG9zdCxcbiAgICBpZGVudGl0eTogXCJ1c2VySWRcIiBpbiBjb250ZXh0ID8gY29udGV4dC51c2VySWQgOiBjb250ZXh0LnNlcnZpY2VVc2VySWQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVucXVhbGlmaWVkTW9kZWwobW9kZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBtb2RlbC50cmltKCkucmVwbGFjZSgvXig/OmRieHxkYXRhYnJpY2tzKVxcLy9pLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gcG9zaXRpdmVUdGwodmFsdWUgPSBERUZBVUxUX0NBQ0hFX1RUTF9NUyk6IG51bWJlciB7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKHZhbHVlKSB8fCB2YWx1ZSA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTW9kZWwgcmVnaXN0cnkgdHRsTXMgbXVzdCBiZSBhIHBvc2l0aXZlIGZpbml0ZSBudW1iZXJcIik7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzUmVzb2x2ZU9wdGlvbnModGFyZ2V0OiBNb2RlbFRhcmdldCwgb3B0aW9uczogTW9kZWxSZWdpc3RyeVJlc29sdmVPcHRpb25zKTogYm9vbGVhbiB7XG4gIGlmIChvcHRpb25zLnJlcXVpcmVzVG9vbHMgJiYgIXRhcmdldC5jYXBhYmlsaXRpZXMudG9vbHMpIHJldHVybiBmYWxzZTtcbiAgaWYgKG9wdGlvbnMubW9kZWxDbGFzcyA9PT0gTW9kZWxDbGFzcy5FbWJlZGRpbmcpIHJldHVybiB0YXJnZXQuY2FwYWJpbGl0aWVzLmVtYmVkZGluZ3M7XG4gIGlmIChvcHRpb25zLm1vZGVsQ2xhc3MgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHRhcmdldC5jYXBhYmlsaXRpZXMuY2hhdDtcbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
package/lib/src/router.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * @module
5
5
  */
6
6
  import { policy } from "@dbx-tools/model";
7
- import { object } from "@dbx-tools/shared-core";
7
+ import { isRecord } from "@dbx-tools/shared-core";
8
8
  /** Error returned when preserving a requested protocol feature is impossible. */
9
9
  export class UnsupportedGatewayFeatureError extends Error {
10
10
  features;
@@ -56,16 +56,16 @@ export function resolveRoute(input) {
56
56
  export function requestedFeatures(body) {
57
57
  const tools = Array.isArray(body.tools) ? body.tools : [];
58
58
  const toolTypes = tools
59
- .filter((tool) => object.isRecord(tool))
59
+ .filter((tool) => isRecord(tool))
60
60
  .map((tool) => tool.type);
61
- const text = object.isRecord(body.text) ? body.text : {};
62
- const format = object.isRecord(text.format) ? text.format.type : text.format;
61
+ const text = isRecord(body.text) ? body.text : {};
62
+ const format = isRecord(text.format) ? text.format.type : text.format;
63
63
  return {
64
64
  background: body.background === true,
65
65
  customTools: toolTypes.some((type) => type === "custom"),
66
66
  parallelTools: body.parallel_tool_calls === true,
67
67
  previousResponse: typeof body.previous_response_id === "string" && body.previous_response_id.length > 0,
68
- reasoning: object.isRecord(body.reasoning) || body.reasoning_effort !== undefined,
68
+ reasoning: isRecord(body.reasoning) || body.reasoning_effort !== undefined,
69
69
  storage: body.store === true,
70
70
  structuredOutput: format !== undefined && format !== "text",
71
71
  tools: tools.length > 0,
@@ -129,4 +129,4 @@ function canUseAiGatewayCodex(target, features) {
129
129
  return (Boolean(target.capabilities.aiGatewayCodex && target.modelServiceName) &&
130
130
  supportsDirectResponses(target, features));
131
131
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVNoRCxpRkFBaUY7QUFDakYsTUFBTSxPQUFPLDhCQUErQixTQUFRLEtBQUs7SUFHbEM7SUFGWixNQUFNLEdBQUcsR0FBRyxDQUFDO0lBRXRCLFlBQXFCLFFBQTJCO1FBQzlDLEtBQUssQ0FBQywwREFBMEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFEcEUsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFFOUMsSUFBSSxDQUFDLElBQUksR0FBRyxnQ0FBZ0MsQ0FBQztJQUMvQyxDQUFDO0NBQ0Y7QUFFRCw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUF3QjtJQUNuRCxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbkQsSUFBSSxjQUFjLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksOEJBQThCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxJQUFJLGNBQWMsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQ0Usb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztZQUN0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LWRyaXZlbiByb3V0ZSBzZWxlY3Rpb24gZm9yIG1vZGVsLWdhdGV3YXkgcmVxdWVzdHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHBvbGljeSB9IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsXCI7XG5pbXBvcnQgeyBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUge1xuICBHYXRld2F5Um91dGUsXG4gIE1vZGVsVGFyZ2V0LFxuICBSZXF1ZXN0ZWRGZWF0dXJlcyxcbiAgUmVzb2x2ZVJvdXRlSW5wdXQsXG4gIFVwc3RyZWFtUHJvdG9jb2wsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC1nYXRld2F5XCI7XG5cbi8qKiBFcnJvciByZXR1cm5lZCB3aGVuIHByZXNlcnZpbmcgYSByZXF1ZXN0ZWQgcHJvdG9jb2wgZmVhdHVyZSBpcyBpbXBvc3NpYmxlLiAqL1xuZXhwb3J0IGNsYXNzIFVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgc3RhdHVzID0gNDAwO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGZlYXR1cmVzOiByZWFkb25seSBzdHJpbmdbXSkge1xuICAgIHN1cGVyKGBUaGUgc2VsZWN0ZWQgbW9kZWwgY2Fubm90IHByZXNlcnZlIHJlcXVlc3RlZCBmZWF0dXJlczogJHtmZWF0dXJlcy5qb2luKFwiLCBcIil9YCk7XG4gICAgdGhpcy5uYW1lID0gXCJVbnN1cHBvcnRlZEdhdGV3YXlGZWF0dXJlRXJyb3JcIjtcbiAgfVxufVxuXG4vKiogU2VsZWN0IHRoZSBsb3dlc3Qtb3ZlcmhlYWQgdXBzdHJlYW0gdGhhdCBwcmVzZXJ2ZXMgdGhlIGNsaWVudCBjb250cmFjdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUm91dGUoaW5wdXQ6IFJlc29sdmVSb3V0ZUlucHV0KTogR2F0ZXdheVJvdXRlIHtcbiAgY29uc3QgeyBjbGllbnRQcm90b2NvbCwgZmVhdHVyZXMsIHRhcmdldCB9ID0gaW5wdXQ7XG4gIGlmIChjbGllbnRQcm90b2NvbCA9PT0gXCJvcGVuYWktZW1iZWRkaW5nc1wiKSB7XG4gICAgaWYgKCF0YXJnZXQuY2FwYWJpbGl0aWVzLmVtYmVkZGluZ3MpIHtcbiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEdhdGV3YXlGZWF0dXJlRXJyb3IoW1wiZW1iZWRkaW5nc1wiXSk7XG4gICAgfVxuICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLWVtYmVkZGluZ3NcIiwgdGFyZ2V0LmlkKTtcbiAgfVxuICBpZiAoY2xpZW50UHJvdG9jb2wgPT09IFwib3BlbmFpLXJlc3BvbnNlc1wiKSB7XG4gICAgcmVqZWN0U3RhdGVmdWxSZXNwb25zZXMoZmVhdHVyZXMpO1xuICAgIGlmIChcbiAgICAgIGNhblVzZUFpR2F0ZXdheUNvZGV4KHRhcmdldCwgZmVhdHVyZXMpICYmXG4gICAgICBwb2xpY3kucHJlZmVyc1N5c3RlbU1vZGVsU2VydmljZShcbiAgICAgICAgaW5wdXQucmVxdWVzdGVkTW9kZWwsXG4gICAgICAgIHRhcmdldC5pZCxcbiAgICAgICAgdGFyZ2V0Lm1vZGVsU2VydmljZU5hbWUhLFxuICAgICAgICBpbnB1dC5wcmVmZXJTeXN0ZW1Nb2RlbHMgPT09IHRydWUsXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGlyZWN0Um91dGUoaW5wdXQsIFwiZGF0YWJyaWNrcy1haS1nYXRld2F5LWNvZGV4XCIsIHRhcmdldC5tb2RlbFNlcnZpY2VOYW1lISk7XG4gICAgfVxuICAgIGlmICh0YXJnZXQuY2FwYWJpbGl0aWVzLnJlc3BvbnNlcyAmJiBzdXBwb3J0c0RpcmVjdFJlc3BvbnNlcyh0YXJnZXQsIGZlYXR1cmVzKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdFJvdXRlKGlucHV0LCBcImRhdGFicmlja3MtcmVzcG9uc2VzXCIsIHRhcmdldC5pZCk7XG4gICAgfVxuICAgIGlmIChjYW5Vc2VBaUdhdGV3YXlDb2RleCh0YXJnZXQsIGZlYXR1cmVzKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdFJvdXRlKGlucHV0LCBcImRhdGFicmlja3MtYWktZ2F0ZXdheS1jb2RleFwiLCB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZSEpO1xuICAgIH1cbiAgICBpZiAodGFyZ2V0LmNhcGFiaWxpdGllcy5vcGVuUmVzcG9uc2VzICYmIHN1cHBvcnRzT3BlblJlc3BvbnNlcyh0YXJnZXQsIGZlYXR1cmVzKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdFJvdXRlKGlucHV0LCBcImRhdGFicmlja3Mtb3Blbi1yZXNwb25zZXNcIiwgdGFyZ2V0LmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zbGF0ZWRSb3V0ZShpbnB1dCk7XG4gIH1cblxuICBpZiAoY2xpZW50UHJvdG9jb2wgPT09IFwib3BlbmFpLWNoYXRcIikge1xuICAgIGlmICh0YXJnZXQuY2FwYWJpbGl0aWVzLmNoYXQgJiYgc3VwcG9ydHNUb29scyh0YXJnZXQsIGZlYXR1cmVzKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdFJvdXRlKGlucHV0LCBcImRhdGFicmlja3MtY2hhdFwiLCB0YXJnZXQuaWQpO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNsYXRlZFJvdXRlKGlucHV0KTtcbiAgfVxuXG4gIGlmICh0YXJnZXQuY2FwYWJpbGl0aWVzLmFudGhyb3BpYyAmJiBzdXBwb3J0c1Rvb2xzKHRhcmdldCwgZmVhdHVyZXMpKSB7XG4gICAgcmV0dXJuIGRpcmVjdFJvdXRlKGlucHV0LCBcImRhdGFicmlja3MtYW50aHJvcGljXCIsIHRhcmdldC5pZCk7XG4gIH1cbiAgcmV0dXJuIHRyYW5zbGF0ZWRSb3V0ZShpbnB1dCk7XG59XG5cbi8qKiBEZXRlY3Qgcm91dGUtYWZmZWN0aW5nIGZlYXR1cmVzIGZyb20gYW4gT3BlbkFJIG9yIEFudGhyb3BpYyByZXF1ZXN0IGJvZHkuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdGVkRmVhdHVyZXMoYm9keTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTogUmVxdWVzdGVkRmVhdHVyZXMge1xuICBjb25zdCB0b29scyA9IEFycmF5LmlzQXJyYXkoYm9keS50b29scykgPyBib2R5LnRvb2xzIDogW107XG4gIGNvbnN0IHRvb2xUeXBlcyA9IHRvb2xzXG4gICAgLmZpbHRlcigodG9vbCk6IHRvb2wgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gb2JqZWN0LmlzUmVjb3JkKHRvb2wpKVxuICAgIC5tYXAoKHRvb2wpID0+IHRvb2wudHlwZSk7XG4gIGNvbnN0IHRleHQgPSBvYmplY3QuaXNSZWNvcmQoYm9keS50ZXh0KSA/IGJvZHkudGV4dCA6IHt9O1xuICBjb25zdCBmb3JtYXQgPSBvYmplY3QuaXNSZWNvcmQodGV4dC5mb3JtYXQpID8gdGV4dC5mb3JtYXQudHlwZSA6IHRleHQuZm9ybWF0O1xuICByZXR1cm4ge1xuICAgIGJhY2tncm91bmQ6IGJvZHkuYmFja2dyb3VuZCA9PT0gdHJ1ZSxcbiAgICBjdXN0b21Ub29sczogdG9vbFR5cGVzLnNvbWUoKHR5cGUpID0+IHR5cGUgPT09IFwiY3VzdG9tXCIpLFxuICAgIHBhcmFsbGVsVG9vbHM6IGJvZHkucGFyYWxsZWxfdG9vbF9jYWxscyA9PT0gdHJ1ZSxcbiAgICBwcmV2aW91c1Jlc3BvbnNlOlxuICAgICAgdHlwZW9mIGJvZHkucHJldmlvdXNfcmVzcG9uc2VfaWQgPT09IFwic3RyaW5nXCIgJiYgYm9keS5wcmV2aW91c19yZXNwb25zZV9pZC5sZW5ndGggPiAwLFxuICAgIHJlYXNvbmluZzogb2JqZWN0LmlzUmVjb3JkKGJvZHkucmVhc29uaW5nKSB8fCBib2R5LnJlYXNvbmluZ19lZmZvcnQgIT09IHVuZGVmaW5lZCxcbiAgICBzdG9yYWdlOiBib2R5LnN0b3JlID09PSB0cnVlLFxuICAgIHN0cnVjdHVyZWRPdXRwdXQ6IGZvcm1hdCAhPT0gdW5kZWZpbmVkICYmIGZvcm1hdCAhPT0gXCJ0ZXh0XCIsXG4gICAgdG9vbHM6IHRvb2xzLmxlbmd0aCA+IDAsXG4gICAgdW5zdXBwb3J0ZWRPcGVuUmVzcG9uc2VzVG9vbHM6IHRvb2xUeXBlcy5zb21lKFxuICAgICAgKHR5cGUpID0+IHR5cGUgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlICE9PSBcIndlYl9zZWFyY2hcIiAmJiB0eXBlICE9PSBcIndlYl9zZWFyY2hfcHJldmlld1wiLFxuICAgICksXG4gICAgd2ViU2VhcmNoOiB0b29sVHlwZXMuc29tZSgodHlwZSkgPT4gdHlwZSA9PT0gXCJ3ZWJfc2VhcmNoXCIgfHwgdHlwZSA9PT0gXCJ3ZWJfc2VhcmNoX3ByZXZpZXdcIiksXG4gIH07XG59XG5cbi8qKiBSZXR1cm4gd2hldGhlciBhbiBPcmlnaW5hdG9yIGhlYWRlciBzZWxlY3RzIENvZGV4IGNvbXBhdGliaWxpdHkgYmVoYXZpb3IuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2RleE9yaWdpbmF0b3Iob3JpZ2luYXRvcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvcmlnaW5hdG9yPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiY29kZXhcIikgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIGRpcmVjdFJvdXRlKFxuICBpbnB1dDogUmVzb2x2ZVJvdXRlSW5wdXQsXG4gIHVwc3RyZWFtUHJvdG9jb2w6IEV4Y2x1ZGU8VXBzdHJlYW1Qcm90b2NvbCwgXCJhaS1zZGtcIj4sXG4gIHVwc3RyZWFtTW9kZWw6IHN0cmluZyxcbik6IEdhdGV3YXlSb3V0ZSB7XG4gIHJldHVybiB7XG4gICAgY2xpZW50UHJvdG9jb2w6IGlucHV0LmNsaWVudFByb3RvY29sLFxuICAgIHVwc3RyZWFtUHJvdG9jb2wsXG4gICAgdGFyZ2V0OiBpbnB1dC50YXJnZXQsXG4gICAgdXBzdHJlYW1Nb2RlbCxcbiAgICB0cmFuc2xhdGVSZXF1ZXN0OiBmYWxzZSxcbiAgICB0cmFuc2xhdGVSZXNwb25zZTogZmFsc2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZWRSb3V0ZShpbnB1dDogUmVzb2x2ZVJvdXRlSW5wdXQpOiBHYXRld2F5Um91dGUge1xuICByZXR1cm4ge1xuICAgIGNsaWVudFByb3RvY29sOiBpbnB1dC5jbGllbnRQcm90b2NvbCxcbiAgICB1cHN0cmVhbVByb3RvY29sOiBcImFpLXNka1wiLFxuICAgIHRhcmdldDogaW5wdXQudGFyZ2V0LFxuICAgIHVwc3RyZWFtTW9kZWw6IGlucHV0LnRhcmdldC5pZCxcbiAgICB0cmFuc2xhdGVSZXF1ZXN0OiB0cnVlLFxuICAgIHRyYW5zbGF0ZVJlc3BvbnNlOiB0cnVlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0RpcmVjdFJlc3BvbnNlcyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBzdXBwb3J0c1Rvb2xzKHRhcmdldCwgZmVhdHVyZXMpICYmXG4gICAgKCFmZWF0dXJlcy5jdXN0b21Ub29scyB8fCB0YXJnZXQuY2FwYWJpbGl0aWVzLmN1c3RvbVRvb2xzKSAmJlxuICAgICghZmVhdHVyZXMuc3RydWN0dXJlZE91dHB1dCB8fCB0YXJnZXQuY2FwYWJpbGl0aWVzLnN0cnVjdHVyZWRPdXRwdXQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzT3BlblJlc3BvbnNlcyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBzdXBwb3J0c1Rvb2xzKHRhcmdldCwgZmVhdHVyZXMpICYmXG4gICAgIWZlYXR1cmVzLmN1c3RvbVRvb2xzICYmXG4gICAgIWZlYXR1cmVzLnByZXZpb3VzUmVzcG9uc2UgJiZcbiAgICAhZmVhdHVyZXMuc3RvcmFnZSAmJlxuICAgICFmZWF0dXJlcy5iYWNrZ3JvdW5kICYmXG4gICAgIWZlYXR1cmVzLnVuc3VwcG9ydGVkT3BlblJlc3BvbnNlc1Rvb2xzICYmXG4gICAgKCFmZWF0dXJlcy53ZWJTZWFyY2ggfHwgdGFyZ2V0LmNhcGFiaWxpdGllcy53ZWJTZWFyY2gpICYmXG4gICAgKCFmZWF0dXJlcy5zdHJ1Y3R1cmVkT3V0cHV0IHx8IHRhcmdldC5jYXBhYmlsaXRpZXMuc3RydWN0dXJlZE91dHB1dClcbiAgKTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNUb29scyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAoIWZlYXR1cmVzLnRvb2xzIHx8IHRhcmdldC5jYXBhYmlsaXRpZXMudG9vbHMpICYmXG4gICAgKCFmZWF0dXJlcy5wYXJhbGxlbFRvb2xzIHx8IHRhcmdldC5jYXBhYmlsaXRpZXMucGFyYWxsZWxUb29scylcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVqZWN0U3RhdGVmdWxSZXNwb25zZXMoZmVhdHVyZXM6IFJlcXVlc3RlZEZlYXR1cmVzKTogdm9pZCB7XG4gIGNvbnN0IHVuc3VwcG9ydGVkID0gW1xuICAgIC4uLihmZWF0dXJlcy5wcmV2aW91c1Jlc3BvbnNlID8gW1wicHJldmlvdXNfcmVzcG9uc2VfaWRcIl0gOiBbXSksXG4gICAgLi4uKGZlYXR1cmVzLnN0b3JhZ2UgPyBbXCJzdG9yZVwiXSA6IFtdKSxcbiAgICAuLi4oZmVhdHVyZXMuYmFja2dyb3VuZCA/IFtcImJhY2tncm91bmRcIl0gOiBbXSksXG4gIF07XG4gIGlmICh1bnN1cHBvcnRlZC5sZW5ndGggPiAwKSB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRHYXRld2F5RmVhdHVyZUVycm9yKHVuc3VwcG9ydGVkKTtcbn1cblxuZnVuY3Rpb24gY2FuVXNlQWlHYXRld2F5Q29kZXgodGFyZ2V0OiBNb2RlbFRhcmdldCwgZmVhdHVyZXM6IFJlcXVlc3RlZEZlYXR1cmVzKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgQm9vbGVhbih0YXJnZXQuY2FwYWJpbGl0aWVzLmFpR2F0ZXdheUNvZGV4ICYmIHRhcmdldC5tb2RlbFNlcnZpY2VOYW1lKSAmJlxuICAgIHN1cHBvcnRzRGlyZWN0UmVzcG9uc2VzKHRhcmdldCwgZmVhdHVyZXMpXG4gICk7XG59XG4iXX0=
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQVNsRCxpRkFBaUY7QUFDakYsTUFBTSxPQUFPLDhCQUErQixTQUFRLEtBQUs7SUFHbEM7SUFGWixNQUFNLEdBQUcsR0FBRyxDQUFDO0lBRXRCLFlBQXFCLFFBQTJCO1FBQzlDLEtBQUssQ0FBQywwREFBMEQsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFEcEUsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFFOUMsSUFBSSxDQUFDLElBQUksR0FBRyxnQ0FBZ0MsQ0FBQztJQUMvQyxDQUFDO0NBQ0Y7QUFFRCw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUF3QjtJQUNuRCxNQUFNLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbkQsSUFBSSxjQUFjLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksOEJBQThCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxJQUFJLGNBQWMsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLElBQ0Usb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQztZQUN0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QUFnQixDQUFDLENBQ3JFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsTUFBbUIsRUFBRSxRQUEyQjtJQUNyRSxPQUFPLENBQ0wsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDOUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FDL0QsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLFFBQTJCO0lBQzFELE1BQU0sV0FBVyxHQUFHO1FBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlELEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUMvQyxDQUFDO0lBQ0YsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxNQUFNLElBQUksOEJBQThCLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDcEYsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsTUFBbUIsRUFBRSxRQUEyQjtJQUM1RSxPQUFPLENBQ0wsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztRQUN0RSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQzFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQdXJlIGNhcGFiaWxpdHktZHJpdmVuIHJvdXRlIHNlbGVjdGlvbiBmb3IgbW9kZWwtZ2F0ZXdheSByZXF1ZXN0cy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgcG9saWN5IH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IGlzUmVjb3JkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHtcbiAgR2F0ZXdheVJvdXRlLFxuICBNb2RlbFRhcmdldCxcbiAgUmVxdWVzdGVkRmVhdHVyZXMsXG4gIFJlc29sdmVSb3V0ZUlucHV0LFxuICBVcHN0cmVhbVByb3RvY29sLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuXG4vKiogRXJyb3IgcmV0dXJuZWQgd2hlbiBwcmVzZXJ2aW5nIGEgcmVxdWVzdGVkIHByb3RvY29sIGZlYXR1cmUgaXMgaW1wb3NzaWJsZS4gKi9cbmV4cG9ydCBjbGFzcyBVbnN1cHBvcnRlZEdhdGV3YXlGZWF0dXJlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHN0YXR1cyA9IDQwMDtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBmZWF0dXJlczogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgICBzdXBlcihgVGhlIHNlbGVjdGVkIG1vZGVsIGNhbm5vdCBwcmVzZXJ2ZSByZXF1ZXN0ZWQgZmVhdHVyZXM6ICR7ZmVhdHVyZXMuam9pbihcIiwgXCIpfWApO1xuICAgIHRoaXMubmFtZSA9IFwiVW5zdXBwb3J0ZWRHYXRld2F5RmVhdHVyZUVycm9yXCI7XG4gIH1cbn1cblxuLyoqIFNlbGVjdCB0aGUgbG93ZXN0LW92ZXJoZWFkIHVwc3RyZWFtIHRoYXQgcHJlc2VydmVzIHRoZSBjbGllbnQgY29udHJhY3QuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJvdXRlKGlucHV0OiBSZXNvbHZlUm91dGVJbnB1dCk6IEdhdGV3YXlSb3V0ZSB7XG4gIGNvbnN0IHsgY2xpZW50UHJvdG9jb2wsIGZlYXR1cmVzLCB0YXJnZXQgfSA9IGlucHV0O1xuICBpZiAoY2xpZW50UHJvdG9jb2wgPT09IFwib3BlbmFpLWVtYmVkZGluZ3NcIikge1xuICAgIGlmICghdGFyZ2V0LmNhcGFiaWxpdGllcy5lbWJlZGRpbmdzKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRHYXRld2F5RmVhdHVyZUVycm9yKFtcImVtYmVkZGluZ3NcIl0pO1xuICAgIH1cbiAgICByZXR1cm4gZGlyZWN0Um91dGUoaW5wdXQsIFwiZGF0YWJyaWNrcy1lbWJlZGRpbmdzXCIsIHRhcmdldC5pZCk7XG4gIH1cbiAgaWYgKGNsaWVudFByb3RvY29sID09PSBcIm9wZW5haS1yZXNwb25zZXNcIikge1xuICAgIHJlamVjdFN0YXRlZnVsUmVzcG9uc2VzKGZlYXR1cmVzKTtcbiAgICBpZiAoXG4gICAgICBjYW5Vc2VBaUdhdGV3YXlDb2RleCh0YXJnZXQsIGZlYXR1cmVzKSAmJlxuICAgICAgcG9saWN5LnByZWZlcnNTeXN0ZW1Nb2RlbFNlcnZpY2UoXG4gICAgICAgIGlucHV0LnJlcXVlc3RlZE1vZGVsLFxuICAgICAgICB0YXJnZXQuaWQsXG4gICAgICAgIHRhcmdldC5tb2RlbFNlcnZpY2VOYW1lISxcbiAgICAgICAgaW5wdXQucHJlZmVyU3lzdGVtTW9kZWxzID09PSB0cnVlLFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRpcmVjdFJvdXRlKGlucHV0LCBcImRhdGFicmlja3MtYWktZ2F0ZXdheS1jb2RleFwiLCB0YXJnZXQubW9kZWxTZXJ2aWNlTmFtZSEpO1xuICAgIH1cbiAgICBpZiAodGFyZ2V0LmNhcGFiaWxpdGllcy5yZXNwb25zZXMgJiYgc3VwcG9ydHNEaXJlY3RSZXNwb25zZXModGFyZ2V0LCBmZWF0dXJlcykpIHtcbiAgICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLXJlc3BvbnNlc1wiLCB0YXJnZXQuaWQpO1xuICAgIH1cbiAgICBpZiAoY2FuVXNlQWlHYXRld2F5Q29kZXgodGFyZ2V0LCBmZWF0dXJlcykpIHtcbiAgICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLWFpLWdhdGV3YXktY29kZXhcIiwgdGFyZ2V0Lm1vZGVsU2VydmljZU5hbWUhKTtcbiAgICB9XG4gICAgaWYgKHRhcmdldC5jYXBhYmlsaXRpZXMub3BlblJlc3BvbnNlcyAmJiBzdXBwb3J0c09wZW5SZXNwb25zZXModGFyZ2V0LCBmZWF0dXJlcykpIHtcbiAgICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLW9wZW4tcmVzcG9uc2VzXCIsIHRhcmdldC5pZCk7XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2xhdGVkUm91dGUoaW5wdXQpO1xuICB9XG5cbiAgaWYgKGNsaWVudFByb3RvY29sID09PSBcIm9wZW5haS1jaGF0XCIpIHtcbiAgICBpZiAodGFyZ2V0LmNhcGFiaWxpdGllcy5jaGF0ICYmIHN1cHBvcnRzVG9vbHModGFyZ2V0LCBmZWF0dXJlcykpIHtcbiAgICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLWNoYXRcIiwgdGFyZ2V0LmlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zbGF0ZWRSb3V0ZShpbnB1dCk7XG4gIH1cblxuICBpZiAodGFyZ2V0LmNhcGFiaWxpdGllcy5hbnRocm9waWMgJiYgc3VwcG9ydHNUb29scyh0YXJnZXQsIGZlYXR1cmVzKSkge1xuICAgIHJldHVybiBkaXJlY3RSb3V0ZShpbnB1dCwgXCJkYXRhYnJpY2tzLWFudGhyb3BpY1wiLCB0YXJnZXQuaWQpO1xuICB9XG4gIHJldHVybiB0cmFuc2xhdGVkUm91dGUoaW5wdXQpO1xufVxuXG4vKiogRGV0ZWN0IHJvdXRlLWFmZmVjdGluZyBmZWF0dXJlcyBmcm9tIGFuIE9wZW5BSSBvciBBbnRocm9waWMgcmVxdWVzdCBib2R5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3RlZEZlYXR1cmVzKGJvZHk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IFJlcXVlc3RlZEZlYXR1cmVzIHtcbiAgY29uc3QgdG9vbHMgPSBBcnJheS5pc0FycmF5KGJvZHkudG9vbHMpID8gYm9keS50b29scyA6IFtdO1xuICBjb25zdCB0b29sVHlwZXMgPSB0b29sc1xuICAgIC5maWx0ZXIoKHRvb2wpOiB0b29sIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IGlzUmVjb3JkKHRvb2wpKVxuICAgIC5tYXAoKHRvb2wpID0+IHRvb2wudHlwZSk7XG4gIGNvbnN0IHRleHQgPSBpc1JlY29yZChib2R5LnRleHQpID8gYm9keS50ZXh0IDoge307XG4gIGNvbnN0IGZvcm1hdCA9IGlzUmVjb3JkKHRleHQuZm9ybWF0KSA/IHRleHQuZm9ybWF0LnR5cGUgOiB0ZXh0LmZvcm1hdDtcbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kOiBib2R5LmJhY2tncm91bmQgPT09IHRydWUsXG4gICAgY3VzdG9tVG9vbHM6IHRvb2xUeXBlcy5zb21lKCh0eXBlKSA9PiB0eXBlID09PSBcImN1c3RvbVwiKSxcbiAgICBwYXJhbGxlbFRvb2xzOiBib2R5LnBhcmFsbGVsX3Rvb2xfY2FsbHMgPT09IHRydWUsXG4gICAgcHJldmlvdXNSZXNwb25zZTpcbiAgICAgIHR5cGVvZiBib2R5LnByZXZpb3VzX3Jlc3BvbnNlX2lkID09PSBcInN0cmluZ1wiICYmIGJvZHkucHJldmlvdXNfcmVzcG9uc2VfaWQubGVuZ3RoID4gMCxcbiAgICByZWFzb25pbmc6IGlzUmVjb3JkKGJvZHkucmVhc29uaW5nKSB8fCBib2R5LnJlYXNvbmluZ19lZmZvcnQgIT09IHVuZGVmaW5lZCxcbiAgICBzdG9yYWdlOiBib2R5LnN0b3JlID09PSB0cnVlLFxuICAgIHN0cnVjdHVyZWRPdXRwdXQ6IGZvcm1hdCAhPT0gdW5kZWZpbmVkICYmIGZvcm1hdCAhPT0gXCJ0ZXh0XCIsXG4gICAgdG9vbHM6IHRvb2xzLmxlbmd0aCA+IDAsXG4gICAgdW5zdXBwb3J0ZWRPcGVuUmVzcG9uc2VzVG9vbHM6IHRvb2xUeXBlcy5zb21lKFxuICAgICAgKHR5cGUpID0+IHR5cGUgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlICE9PSBcIndlYl9zZWFyY2hcIiAmJiB0eXBlICE9PSBcIndlYl9zZWFyY2hfcHJldmlld1wiLFxuICAgICksXG4gICAgd2ViU2VhcmNoOiB0b29sVHlwZXMuc29tZSgodHlwZSkgPT4gdHlwZSA9PT0gXCJ3ZWJfc2VhcmNoXCIgfHwgdHlwZSA9PT0gXCJ3ZWJfc2VhcmNoX3ByZXZpZXdcIiksXG4gIH07XG59XG5cbi8qKiBSZXR1cm4gd2hldGhlciBhbiBPcmlnaW5hdG9yIGhlYWRlciBzZWxlY3RzIENvZGV4IGNvbXBhdGliaWxpdHkgYmVoYXZpb3IuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb2RleE9yaWdpbmF0b3Iob3JpZ2luYXRvcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIHJldHVybiBvcmlnaW5hdG9yPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiY29kZXhcIikgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIGRpcmVjdFJvdXRlKFxuICBpbnB1dDogUmVzb2x2ZVJvdXRlSW5wdXQsXG4gIHVwc3RyZWFtUHJvdG9jb2w6IEV4Y2x1ZGU8VXBzdHJlYW1Qcm90b2NvbCwgXCJhaS1zZGtcIj4sXG4gIHVwc3RyZWFtTW9kZWw6IHN0cmluZyxcbik6IEdhdGV3YXlSb3V0ZSB7XG4gIHJldHVybiB7XG4gICAgY2xpZW50UHJvdG9jb2w6IGlucHV0LmNsaWVudFByb3RvY29sLFxuICAgIHVwc3RyZWFtUHJvdG9jb2wsXG4gICAgdGFyZ2V0OiBpbnB1dC50YXJnZXQsXG4gICAgdXBzdHJlYW1Nb2RlbCxcbiAgICB0cmFuc2xhdGVSZXF1ZXN0OiBmYWxzZSxcbiAgICB0cmFuc2xhdGVSZXNwb25zZTogZmFsc2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZWRSb3V0ZShpbnB1dDogUmVzb2x2ZVJvdXRlSW5wdXQpOiBHYXRld2F5Um91dGUge1xuICByZXR1cm4ge1xuICAgIGNsaWVudFByb3RvY29sOiBpbnB1dC5jbGllbnRQcm90b2NvbCxcbiAgICB1cHN0cmVhbVByb3RvY29sOiBcImFpLXNka1wiLFxuICAgIHRhcmdldDogaW5wdXQudGFyZ2V0LFxuICAgIHVwc3RyZWFtTW9kZWw6IGlucHV0LnRhcmdldC5pZCxcbiAgICB0cmFuc2xhdGVSZXF1ZXN0OiB0cnVlLFxuICAgIHRyYW5zbGF0ZVJlc3BvbnNlOiB0cnVlLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0RpcmVjdFJlc3BvbnNlcyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBzdXBwb3J0c1Rvb2xzKHRhcmdldCwgZmVhdHVyZXMpICYmXG4gICAgKCFmZWF0dXJlcy5jdXN0b21Ub29scyB8fCB0YXJnZXQuY2FwYWJpbGl0aWVzLmN1c3RvbVRvb2xzKSAmJlxuICAgICghZmVhdHVyZXMuc3RydWN0dXJlZE91dHB1dCB8fCB0YXJnZXQuY2FwYWJpbGl0aWVzLnN0cnVjdHVyZWRPdXRwdXQpXG4gICk7XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzT3BlblJlc3BvbnNlcyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBzdXBwb3J0c1Rvb2xzKHRhcmdldCwgZmVhdHVyZXMpICYmXG4gICAgIWZlYXR1cmVzLmN1c3RvbVRvb2xzICYmXG4gICAgIWZlYXR1cmVzLnByZXZpb3VzUmVzcG9uc2UgJiZcbiAgICAhZmVhdHVyZXMuc3RvcmFnZSAmJlxuICAgICFmZWF0dXJlcy5iYWNrZ3JvdW5kICYmXG4gICAgIWZlYXR1cmVzLnVuc3VwcG9ydGVkT3BlblJlc3BvbnNlc1Rvb2xzICYmXG4gICAgKCFmZWF0dXJlcy53ZWJTZWFyY2ggfHwgdGFyZ2V0LmNhcGFiaWxpdGllcy53ZWJTZWFyY2gpICYmXG4gICAgKCFmZWF0dXJlcy5zdHJ1Y3R1cmVkT3V0cHV0IHx8IHRhcmdldC5jYXBhYmlsaXRpZXMuc3RydWN0dXJlZE91dHB1dClcbiAgKTtcbn1cblxuZnVuY3Rpb24gc3VwcG9ydHNUb29scyh0YXJnZXQ6IE1vZGVsVGFyZ2V0LCBmZWF0dXJlczogUmVxdWVzdGVkRmVhdHVyZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAoIWZlYXR1cmVzLnRvb2xzIHx8IHRhcmdldC5jYXBhYmlsaXRpZXMudG9vbHMpICYmXG4gICAgKCFmZWF0dXJlcy5wYXJhbGxlbFRvb2xzIHx8IHRhcmdldC5jYXBhYmlsaXRpZXMucGFyYWxsZWxUb29scylcbiAgKTtcbn1cblxuZnVuY3Rpb24gcmVqZWN0U3RhdGVmdWxSZXNwb25zZXMoZmVhdHVyZXM6IFJlcXVlc3RlZEZlYXR1cmVzKTogdm9pZCB7XG4gIGNvbnN0IHVuc3VwcG9ydGVkID0gW1xuICAgIC4uLihmZWF0dXJlcy5wcmV2aW91c1Jlc3BvbnNlID8gW1wicHJldmlvdXNfcmVzcG9uc2VfaWRcIl0gOiBbXSksXG4gICAgLi4uKGZlYXR1cmVzLnN0b3JhZ2UgPyBbXCJzdG9yZVwiXSA6IFtdKSxcbiAgICAuLi4oZmVhdHVyZXMuYmFja2dyb3VuZCA/IFtcImJhY2tncm91bmRcIl0gOiBbXSksXG4gIF07XG4gIGlmICh1bnN1cHBvcnRlZC5sZW5ndGggPiAwKSB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRHYXRld2F5RmVhdHVyZUVycm9yKHVuc3VwcG9ydGVkKTtcbn1cblxuZnVuY3Rpb24gY2FuVXNlQWlHYXRld2F5Q29kZXgodGFyZ2V0OiBNb2RlbFRhcmdldCwgZmVhdHVyZXM6IFJlcXVlc3RlZEZlYXR1cmVzKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgQm9vbGVhbih0YXJnZXQuY2FwYWJpbGl0aWVzLmFpR2F0ZXdheUNvZGV4ICYmIHRhcmdldC5tb2RlbFNlcnZpY2VOYW1lKSAmJlxuICAgIHN1cHBvcnRzRGlyZWN0UmVzcG9uc2VzKHRhcmdldCwgZmVhdHVyZXMpXG4gICk7XG59XG4iXX0=
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 { errorUtils, log } from "@dbx-tools/shared-core";
8
+ import { log, toError } 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: errorUtils.toError(error),
33
+ error: 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: errorUtils.toError(error),
93
+ error: 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUl6RCxPQUFPLEVBQWdCLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFFdkQsMERBQTBEO0FBQzFELE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBMEI7SUFDbkQsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQzlCLE9BQXFCLEVBQ3JCLE9BQXdCLEVBQ3hCLFFBQTBCO0lBRTFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFDNUIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQ3JDLENBQUM7UUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FB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TTtRQUN0QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7S0FDMUUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4cHJlc3MgYWRhcHRlcnMgZm9yIHRoZSBzaGFyZWQgbW9kZWwtZ2F0ZXdheSBzZXJ2aWNlLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwibm9kZTpzdHJlYW0vcHJvbWlzZXNcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IENsaWVudFByb3RvY29sIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsLWdhdGV3YXlcIjtcbmltcG9ydCB0eXBlIGV4cHJlc3MgZnJvbSBcImV4cHJlc3NcIjtcblxuaW1wb3J0IHsgTW9kZWxHYXRld2F5LCBNb2RlbEdhdGV3YXlFcnJvciB9IGZyb20gXCIuL2dhdGV3YXkudHNcIjtcbmltcG9ydCB7IFVuc3VwcG9ydGVkR2F0ZXdheUZlYXR1cmVFcnJvciB9IGZyb20gXCIuL3JvdXRlci50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0L21vZGVsLWdhdGV3YXkvaHR0cFwiKTtcblxuLyoqIFNlbmQgdGhlIGxpZ2h0d2VpZ2h0IGNvbXBhdGliaWxpdHkgaGVhbHRoIHJlc3BvbnNlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbmRIZWFsdGgocmVzcG9uc2U6IGV4cHJlc3MuUmVzcG9uc2UpOiB2b2lkIHtcbiAgcmVzcG9uc2UuanNvbih7IHJlYWR5OiB0cnVlIH0pO1xufVxuXG4vKiogU2VuZCB0aGUgYWN0aXZlIHByaW5jaXBhbCdzIGR5bmFtaWMgbW9kZWwgY2F0YWxvZ3VlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRNb2RlbHMoXG4gIGdhdGV3YXk6IE1vZGVsR2F0ZXdheSxcbiAgcmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0LFxuICByZXNwb25zZTogZXhwcmVzcy5SZXNwb25zZSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICBsb2dnZXIuZGVidWcoXCJtb2RlbHMgcmVxdWVzdFwiLCByZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSk7XG4gIHRyeSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IGdhdGV3YXkubW9kZWxzKFxuICAgICAgcmVxdWVzdC5oZWFkZXIoXCJvcmlnaW5hdG9yXCIpLFxuICAgICAgb3B0aW9uYWxTZWFyY2gocmVxdWVzdC5xdWVyeS5zZWFyY2gpLFxuICAgICk7XG4gICAgcmVzcG9uc2UuanNvbihwYXlsb2FkKTtcbiAgICBsb2dnZXIuZGVidWcoXCJtb2RlbHMgcmVzcG9uc2VcIiwge1xuICAgICAgLi4ucmVxdWVzdENvbnRleHQocmVxdWVzdCksXG4gICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKFwibW9kZWxzIHJlcXVlc3QgZmFpbGVkXCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnJvciksXG4gICAgfSk7XG4gICAgc2VuZEVycm9yKFwib3BlbmFpLXJlc3BvbnNlc1wiLCByZXNwb25zZSwgZXJyb3IpO1xuICB9XG59XG5cbi8qKiBFeGVjdXRlIGFuZCBzdHJlYW0gb25lIG1vZGVsIHJlcXVlc3QgdGhyb3VnaCBFeHByZXNzIHdpdGggY2FuY2VsbGF0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRJbmZlcmVuY2UoXG4gIGdhdGV3YXk6IE1vZGVsR2F0ZXdheSxcbiAgcHJvdG9jb2w6IENsaWVudFByb3RvY29sLFxuICByZXF1ZXN0OiBleHByZXNzLlJlcXVlc3QsXG4gIHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IGFib3J0ID0gKCkgPT4ge1xuICAgIGlmIChyZXNwb25zZS53cml0YWJsZUVuZGVkKSByZXR1cm47XG4gICAgbG9nZ2VyLmRlYnVnKFwiY2xpZW50IGRpc2Nvbm5lY3RlZFwiLCB7XG4gICAgICAuLi5yZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSxcbiAgICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICAgIHByb3RvY29sLFxuICAgIH0pO1xuICAgIGNvbnRyb2xsZXIuYWJvcnQobmV3IEVycm9yKFwiTW9kZWwgZ2F0ZXdheSBjbGllbnQgZGlzY29ubmVjdGVkXCIpKTtcbiAgfTtcbiAgcmVxdWVzdC5vbmNlKFwiYWJvcnRlZFwiLCBhYm9ydCk7XG4gIHJlc3BvbnNlLm9uY2UoXCJjbG9zZVwiLCBhYm9ydCk7XG4gIHRyeSB7XG4gICAgY29uc3QgYm9keSA9IHJlY29yZChyZXF1ZXN0LmJvZHkpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImluZmVyZW5jZSByZXF1ZXN0XCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgbW9kZWw6IHR5cGVvZiBib2R5Lm1vZGVsID09PSBcInN0cmluZ1wiID8gYm9keS5tb2RlbCA6IHVuZGVmaW5lZCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgc3RyZWFtOiBib2R5LnN0cmVhbSA9PT0gdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCB1cHN0cmVhbSA9IGF3YWl0IGdhdGV3YXkuaW5mZXJlbmNlKFxuICAgICAgcHJvdG9jb2wsXG4gICAgICBib2R5LFxuICAgICAgcmVxdWVzdEhlYWRlcnMocmVxdWVzdCksXG4gICAgICBjb250cm9sbGVyLnNpZ25hbCxcbiAgICApO1xuICAgIHJlc3BvbnNlLnN0YXR1cyh1cHN0cmVhbS5zdGF0dXMpO1xuICAgIHVwc3RyZWFtLmhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIG5hbWUpID0+IHJlc3BvbnNlLnNldEhlYWRlcihuYW1lLCB2YWx1ZSkpO1xuICAgIGlmICghdXBzdHJlYW0uYm9keSkge1xuICAgICAgcmVzcG9uc2UuZW5kKCk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJpbmZlcmVuY2UgcmVzcG9uc2VcIiwge1xuICAgICAgICAuLi5yZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSxcbiAgICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgc3RhdHVzOiB1cHN0cmVhbS5zdGF0dXMsXG4gICAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHVwc3RyZWFtLmhlYWRlcnMuZ2V0KFwieC1kYngtdG9vbHMtdXBzdHJlYW1cIiksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgcGlwZWxpbmUoUmVhZGFibGUuZnJvbVdlYih1cHN0cmVhbS5ib2R5IGFzIG5ldmVyKSwgcmVzcG9uc2UpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcImluZmVyZW5jZSBzdHJlYW0gY29tcGxldGVkXCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgcHJvdG9jb2wsXG4gICAgICBzdGF0dXM6IHVwc3RyZWFtLnN0YXR1cyxcbiAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHVwc3RyZWFtLmhlYWRlcnMuZ2V0KFwieC1kYngtdG9vbHMtdXBzdHJlYW1cIiksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGNvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIHJlc3BvbnNlLmRlc3Ryb3koKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9nZ2VyLmVycm9yKFwiaW5mZXJlbmNlIHJlcXVlc3QgZmFpbGVkXCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnJvciksXG4gICAgICBwcm90b2NvbCxcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UuaGVhZGVyc1NlbnQpIHtcbiAgICAgIHJlc3BvbnNlLmRlc3Ryb3koZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VuZEVycm9yKHByb3RvY29sLCByZXNwb25zZSwgZXJyb3IpO1xuICB9IGZpbmFsbHkge1xuICAgIHJlcXVlc3Qub2ZmKFwiYWJvcnRlZFwiLCBhYm9ydCk7XG4gICAgcmVzcG9uc2Uub2ZmKFwiY2xvc2VcIiwgYWJvcnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlbmRFcnJvcihwcm90b2NvbDogQ2xpZW50UHJvdG9jb2wsIHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlLCBlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBjb25zdCBzdGF0dXMgPVxuICAgIGVycm9yIGluc3RhbmNlb2YgTW9kZWxHYXRld2F5RXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBVbnN1cHBvcnRlZEdhdGV3YXlGZWF0dXJlRXJyb3JcbiAgICAgID8gZXJyb3Iuc3RhdHVzXG4gICAgICA6IDUwMDtcbiAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJNb2RlbCBnYXRld2F5IHJlcXVlc3QgZmFpbGVkXCI7XG4gIGlmIChwcm90b2NvbCA9PT0gXCJhbnRocm9waWMtbWVzc2FnZXNcIikge1xuICAgIHJlc3BvbnNlLnN0YXR1cyhzdGF0dXMpLmpzb24oe1xuICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgZXJyb3I6IHsgdHlwZTogc3RhdHVzIDwgNTAwID8gXCJpbnZhbGlkX3JlcXVlc3RfZXJyb3JcIiA6IFwiYXBpX2Vycm9yXCIsIG1lc3NhZ2UgfSxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVzcG9uc2Uuc3RhdHVzKHN0YXR1cykuanNvbih7XG4gICAgZXJyb3I6IHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB0eXBlOiBzdGF0dXMgPCA1MDAgPyBcImludmFsaWRfcmVxdWVzdF9lcnJvclwiIDogXCJhcGlfZXJyb3JcIixcbiAgICAgIGNvZGU6IHN0YXR1cyxcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdEhlYWRlcnMocmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0KTogSGVhZGVycyB7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICBmb3IgKGNvbnN0IFtuYW1lLCByYXddIG9mIE9iamVjdC5lbnRyaWVzKHJlcXVlc3QuaGVhZGVycykpIHtcbiAgICBpZiAodHlwZW9mIHJhdyA9PT0gXCJzdHJpbmdcIikgaGVhZGVycy5zZXQobmFtZSwgcmF3KTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJhdykpIGhlYWRlcnMuc2V0KG5hbWUsIHJhdy5qb2luKFwiLCBcIikpO1xuICB9XG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG5mdW5jdGlvbiByZWNvcmQodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG4gIHRocm93IG5ldyBNb2RlbEdhdGV3YXlFcnJvcig0MDAsIFwiUmVxdWVzdCBib2R5IG11c3QgYmUgYSBKU09OIG9iamVjdFwiKTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxTZWFyY2godmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBNb2RlbEdhdGV3YXlFcnJvcig0MDAsIFwic2VhcmNoIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0Q29udGV4dChyZXF1ZXN0OiBleHByZXNzLlJlcXVlc3QpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICBwYXRoOiByZXF1ZXN0LnBhdGgsXG4gICAgcmVxdWVzdElkOiByZXF1ZXN0LmhlYWRlcihcIngtcmVxdWVzdC1pZFwiKSA/PyByZXF1ZXN0LmhlYWRlcihcInJlcXVlc3QtaWRcIiksXG4gIH07XG59XG4iXX0=
158
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUl0RCxPQUFPLEVBQWdCLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFFdkQsMERBQTBEO0FBQzFELE1BQU0sVUFBVSxVQUFVLENBQUMsUUFBMEI7SUFDbkQsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQzlCLE9BQXFCLEVBQ3JCLE9BQXdCLEVBQ3hCLFFBQTBCO0lBRTFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3hELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFDNUIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQ3JDLENBQUM7UUFDRixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FB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QU8sQ0FBQyxJQUFJO1FBQ2xCLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO0tBQzFFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeHByZXNzIGFkYXB0ZXJzIGZvciB0aGUgc2hhcmVkIG1vZGVsLWdhdGV3YXkgc2VydmljZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSBcIm5vZGU6c3RyZWFtL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBsb2csIHRvRXJyb3IgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBDbGllbnRQcm90b2NvbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC1nYXRld2F5XCI7XG5pbXBvcnQgdHlwZSBleHByZXNzIGZyb20gXCJleHByZXNzXCI7XG5cbmltcG9ydCB7IE1vZGVsR2F0ZXdheSwgTW9kZWxHYXRld2F5RXJyb3IgfSBmcm9tIFwiLi9nYXRld2F5LnRzXCI7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZEdhdGV3YXlGZWF0dXJlRXJyb3IgfSBmcm9tIFwiLi9yb3V0ZXIudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImFwcGtpdC9tb2RlbC1nYXRld2F5L2h0dHBcIik7XG5cbi8qKiBTZW5kIHRoZSBsaWdodHdlaWdodCBjb21wYXRpYmlsaXR5IGhlYWx0aCByZXNwb25zZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW5kSGVhbHRoKHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlKTogdm9pZCB7XG4gIHJlc3BvbnNlLmpzb24oeyByZWFkeTogdHJ1ZSB9KTtcbn1cblxuLyoqIFNlbmQgdGhlIGFjdGl2ZSBwcmluY2lwYWwncyBkeW5hbWljIG1vZGVsIGNhdGFsb2d1ZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kTW9kZWxzKFxuICBnYXRld2F5OiBNb2RlbEdhdGV3YXksXG4gIHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCxcbiAgcmVzcG9uc2U6IGV4cHJlc3MuUmVzcG9uc2UsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgbG9nZ2VyLmRlYnVnKFwibW9kZWxzIHJlcXVlc3RcIiwgcmVxdWVzdENvbnRleHQocmVxdWVzdCkpO1xuICB0cnkge1xuICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBnYXRld2F5Lm1vZGVscyhcbiAgICAgIHJlcXVlc3QuaGVhZGVyKFwib3JpZ2luYXRvclwiKSxcbiAgICAgIG9wdGlvbmFsU2VhcmNoKHJlcXVlc3QucXVlcnkuc2VhcmNoKSxcbiAgICApO1xuICAgIHJlc3BvbnNlLmpzb24ocGF5bG9hZCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwibW9kZWxzIHJlc3BvbnNlXCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNDb2RlLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihcIm1vZGVscyByZXF1ZXN0IGZhaWxlZFwiLCB7XG4gICAgICAuLi5yZXF1ZXN0Q29udGV4dChyZXF1ZXN0KSxcbiAgICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICAgIGVycm9yOiB0b0Vycm9yKGVycm9yKSxcbiAgICB9KTtcbiAgICBzZW5kRXJyb3IoXCJvcGVuYWktcmVzcG9uc2VzXCIsIHJlc3BvbnNlLCBlcnJvcik7XG4gIH1cbn1cblxuLyoqIEV4ZWN1dGUgYW5kIHN0cmVhbSBvbmUgbW9kZWwgcmVxdWVzdCB0aHJvdWdoIEV4cHJlc3Mgd2l0aCBjYW5jZWxsYXRpb24uICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZEluZmVyZW5jZShcbiAgZ2F0ZXdheTogTW9kZWxHYXRld2F5LFxuICBwcm90b2NvbDogQ2xpZW50UHJvdG9jb2wsXG4gIHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCxcbiAgcmVzcG9uc2U6IGV4cHJlc3MuUmVzcG9uc2UsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgYWJvcnQgPSAoKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLndyaXRhYmxlRW5kZWQpIHJldHVybjtcbiAgICBsb2dnZXIuZGVidWcoXCJjbGllbnQgZGlzY29ubmVjdGVkXCIsIHtcbiAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgcHJvdG9jb2wsXG4gICAgfSk7XG4gICAgY29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoXCJNb2RlbCBnYXRld2F5IGNsaWVudCBkaXNjb25uZWN0ZWRcIikpO1xuICB9O1xuICByZXF1ZXN0Lm9uY2UoXCJhYm9ydGVkXCIsIGFib3J0KTtcbiAgcmVzcG9uc2Uub25jZShcImNsb3NlXCIsIGFib3J0KTtcbiAgdHJ5IHtcbiAgICBjb25zdCBib2R5ID0gcmVjb3JkKHJlcXVlc3QuYm9keSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiaW5mZXJlbmNlIHJlcXVlc3RcIiwge1xuICAgICAgLi4ucmVxdWVzdENvbnRleHQocmVxdWVzdCksXG4gICAgICBtb2RlbDogdHlwZW9mIGJvZHkubW9kZWwgPT09IFwic3RyaW5nXCIgPyBib2R5Lm1vZGVsIDogdW5kZWZpbmVkLFxuICAgICAgcHJvdG9jb2wsXG4gICAgICBzdHJlYW06IGJvZHkuc3RyZWFtID09PSB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnN0IHVwc3RyZWFtID0gYXdhaXQgZ2F0ZXdheS5pbmZlcmVuY2UoXG4gICAgICBwcm90b2NvbCxcbiAgICAgIGJvZHksXG4gICAgICByZXF1ZXN0SGVhZGVycyhyZXF1ZXN0KSxcbiAgICAgIGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICk7XG4gICAgcmVzcG9uc2Uuc3RhdHVzKHVwc3RyZWFtLnN0YXR1cyk7XG4gICAgdXBzdHJlYW0uaGVhZGVycy5mb3JFYWNoKCh2YWx1ZSwgbmFtZSkgPT4gcmVzcG9uc2Uuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKSk7XG4gICAgaWYgKCF1cHN0cmVhbS5ib2R5KSB7XG4gICAgICByZXNwb25zZS5lbmQoKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcImluZmVyZW5jZSByZXNwb25zZVwiLCB7XG4gICAgICAgIC4uLnJlcXVlc3RDb250ZXh0KHJlcXVlc3QpLFxuICAgICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBzdGF0dXM6IHVwc3RyZWFtLnN0YXR1cyxcbiAgICAgICAgdXBzdHJlYW1Qcm90b2NvbDogdXBzdHJlYW0uaGVhZGVycy5nZXQoXCJ4LWRieC10b29scy11cHN0cmVhbVwiKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBwaXBlbGluZShSZWFkYWJsZS5mcm9tV2ViKHVwc3RyZWFtLmJvZHkgYXMgbmV2ZXIpLCByZXNwb25zZSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiaW5mZXJlbmNlIHN0cmVhbSBjb21wbGV0ZWRcIiwge1xuICAgICAgLi4ucmVxdWVzdENvbnRleHQocmVxdWVzdCksXG4gICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIHN0YXR1czogdXBzdHJlYW0uc3RhdHVzLFxuICAgICAgdXBzdHJlYW1Qcm90b2NvbDogdXBzdHJlYW0uaGVhZGVycy5nZXQoXCJ4LWRieC10b29scy11cHN0cmVhbVwiKSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoY29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgcmVzcG9uc2UuZGVzdHJveSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2dnZXIuZXJyb3IoXCJpbmZlcmVuY2UgcmVxdWVzdCBmYWlsZWRcIiwge1xuICAgICAgLi4ucmVxdWVzdENvbnRleHQocmVxdWVzdCksXG4gICAgICBlbGFwc2VkTXM6IERhdGUubm93KCkgLSBzdGFydGVkQXQsXG4gICAgICBlcnJvcjogdG9FcnJvcihlcnJvciksXG4gICAgICBwcm90b2NvbCxcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UuaGVhZGVyc1NlbnQpIHtcbiAgICAgIHJlc3BvbnNlLmRlc3Ryb3koZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VuZEVycm9yKHByb3RvY29sLCByZXNwb25zZSwgZXJyb3IpO1xuICB9IGZpbmFsbHkge1xuICAgIHJlcXVlc3Qub2ZmKFwiYWJvcnRlZFwiLCBhYm9ydCk7XG4gICAgcmVzcG9uc2Uub2ZmKFwiY2xvc2VcIiwgYWJvcnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNlbmRFcnJvcihwcm90b2NvbDogQ2xpZW50UHJvdG9jb2wsIHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlLCBlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBjb25zdCBzdGF0dXMgPVxuICAgIGVycm9yIGluc3RhbmNlb2YgTW9kZWxHYXRld2F5RXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBVbnN1cHBvcnRlZEdhdGV3YXlGZWF0dXJlRXJyb3JcbiAgICAgID8gZXJyb3Iuc3RhdHVzXG4gICAgICA6IDUwMDtcbiAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogXCJNb2RlbCBnYXRld2F5IHJlcXVlc3QgZmFpbGVkXCI7XG4gIGlmIChwcm90b2NvbCA9PT0gXCJhbnRocm9waWMtbWVzc2FnZXNcIikge1xuICAgIHJlc3BvbnNlLnN0YXR1cyhzdGF0dXMpLmpzb24oe1xuICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgZXJyb3I6IHsgdHlwZTogc3RhdHVzIDwgNTAwID8gXCJpbnZhbGlkX3JlcXVlc3RfZXJyb3JcIiA6IFwiYXBpX2Vycm9yXCIsIG1lc3NhZ2UgfSxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgcmVzcG9uc2Uuc3RhdHVzKHN0YXR1cykuanNvbih7XG4gICAgZXJyb3I6IHtcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB0eXBlOiBzdGF0dXMgPCA1MDAgPyBcImludmFsaWRfcmVxdWVzdF9lcnJvclwiIDogXCJhcGlfZXJyb3JcIixcbiAgICAgIGNvZGU6IHN0YXR1cyxcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdEhlYWRlcnMocmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0KTogSGVhZGVycyB7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICBmb3IgKGNvbnN0IFtuYW1lLCByYXddIG9mIE9iamVjdC5lbnRyaWVzKHJlcXVlc3QuaGVhZGVycykpIHtcbiAgICBpZiAodHlwZW9mIHJhdyA9PT0gXCJzdHJpbmdcIikgaGVhZGVycy5zZXQobmFtZSwgcmF3KTtcbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJhdykpIGhlYWRlcnMuc2V0KG5hbWUsIHJhdy5qb2luKFwiLCBcIikpO1xuICB9XG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG5mdW5jdGlvbiByZWNvcmQodmFsdWU6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG4gIHRocm93IG5ldyBNb2RlbEdhdGV3YXlFcnJvcig0MDAsIFwiUmVxdWVzdCBib2R5IG11c3QgYmUgYSBKU09OIG9iamVjdFwiKTtcbn1cblxuZnVuY3Rpb24gb3B0aW9uYWxTZWFyY2godmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBNb2RlbEdhdGV3YXlFcnJvcig0MDAsIFwic2VhcmNoIG11c3QgYmUgYSBzdHJpbmdcIik7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0Q29udGV4dChyZXF1ZXN0OiBleHByZXNzLlJlcXVlc3QpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICBwYXRoOiByZXF1ZXN0LnBhdGgsXG4gICAgcmVxdWVzdElkOiByZXF1ZXN0LmhlYWRlcihcIngtcmVxdWVzdC1pZFwiKSA/PyByZXF1ZXN0LmhlYWRlcihcInJlcXVlc3QtaWRcIiksXG4gIH07XG59XG4iXX0=
@@ -5,10 +5,9 @@
5
5
  */
6
6
  import { getExecutionContext } from "@databricks/appkit";
7
7
  import { invoke } from "@dbx-tools/model";
8
- import { decodeGatewayRequest } from "@dbx-tools/model-protocol/gateway-decode";
9
- import { encodeGatewayResponse, encodeGatewayStream, } from "@dbx-tools/model-protocol/gateway-encode";
10
- import { createDatabricksLanguageModel, } from "@dbx-tools/model-protocol/provider";
11
- import { errorUtils, log } from "@dbx-tools/shared-core";
8
+ import { decodeGatewayRequest, encodeGatewayResponse, encodeGatewayStream, } from "@dbx-tools/model-protocol";
9
+ import { createDatabricksLanguageModel, } from "@dbx-tools/model-protocol";
10
+ import { log, toError } from "@dbx-tools/shared-core";
12
11
  import { streamText } from "ai";
13
12
  const logger = log.logger("appkit/model-gateway/translation");
14
13
  /** Translate one request through a provider-owned AI SDK model. */
@@ -34,7 +33,7 @@ export async function translateGatewayRequest(route, body, signal) {
34
33
  abortSignal: signal,
35
34
  onError: ({ error }) => {
36
35
  logger.error("stream failed", {
37
- error: errorUtils.toError(error),
36
+ error: toError(error),
38
37
  model: route.target.id,
39
38
  });
40
39
  },
@@ -104,4 +103,4 @@ function translationProtocol(route) {
104
103
  return "anthropic";
105
104
  return "chat";
106
105
  }
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLG1CQUFtQixHQUNwQixNQUFNLDBDQUEwQyxDQUFDO0FBQ2xELE9BQU8sRUFDTCw2QkFBNkIsR0FFOUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBRSxVQUFVLEVBQW9DLE1BQU0sSUFBSSxDQUFDO0FBRWxFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUU5RCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsS0FBbUIsRUFDbkIsSUFBdUMsRUFDdkMsTUFBbUI7SUFFbkIsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRSxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO1FBQzlCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztRQUNwQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQ3JDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSTtRQUM1QixTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFP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bkMsT0FBTyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN4QixRQUFRO1FBQ1IsSUFBSTtRQUNKLE9BQU87S0FDUixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFtQjtJQUM5QyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVM7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUM1RCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVM7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUM1RCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWZXJjZWwgQUkgU0RLIGZhbGxiYWNrIHRyYW5zbGF0aW9uIGJldHdlZW4gZXh0ZXJuYWwgZ2F0ZXdheSBwcm90b2NvbHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdldEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBpbnZva2UgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHsgZGVjb2RlR2F0ZXdheVJlcXVlc3QgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbC1wcm90b2NvbC9nYXRld2F5LWRlY29kZVwiO1xuaW1wb3J0IHtcbiAgZW5jb2RlR2F0ZXdheVJlc3BvbnNlLFxuICBlbmNvZGVHYXRld2F5U3RyZWFtLFxufSBmcm9tIFwiQGRieC10b29scy9tb2RlbC1wcm90b2NvbC9nYXRld2F5LWVuY29kZVwiO1xuaW1wb3J0IHtcbiAgY3JlYXRlRGF0YWJyaWNrc0xhbmd1YWdlTW9kZWwsXG4gIHR5cGUgRGF0YWJyaWNrc0xhbmd1YWdlTW9kZWxQcm90b2NvbCxcbn0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWwtcHJvdG9jb2wvcHJvdmlkZXJcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEdhdGV3YXlSb3V0ZSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbC1nYXRld2F5XCI7XG5pbXBvcnQgeyBzdHJlYW1UZXh0LCB0eXBlIExhbmd1YWdlTW9kZWwsIHR5cGUgVG9vbFNldCB9IGZyb20gXCJhaVwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0L21vZGVsLWdhdGV3YXkvdHJhbnNsYXRpb25cIik7XG5cbi8qKiBUcmFuc2xhdGUgb25lIHJlcXVlc3QgdGhyb3VnaCBhIHByb3ZpZGVyLW93bmVkIEFJIFNESyBtb2RlbC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFuc2xhdGVHYXRld2F5UmVxdWVzdChcbiAgcm91dGU6IEdhdGV3YXlSb3V0ZSxcbiAgYm9keTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+LFxuICBzaWduYWw6IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICBjb25zdCBkZWNvZGVkID0gZGVjb2RlR2F0ZXdheVJlcXVlc3Qocm91dGUuY2xpZW50UHJvdG9jb2wsIGJvZHkpO1xuICBsb2dnZXIuZGVidWcoXCJkZWNvZGVkIHJlcXVlc3RcIiwge1xuICAgIGNsaWVudFByb3RvY29sOiByb3V0ZS5jbGllbnRQcm90b2NvbCxcbiAgICBtZXNzYWdlQ291bnQ6IGRlY29kZWQubWVzc2FnZXMubGVuZ3RoLFxuICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgc3RyZWFtOiBib2R5LnN0cmVhbSA9PT0gdHJ1ZSxcbiAgICB0b29sQ291bnQ6IE9iamVjdC5rZXlzKGRlY29kZWQudG9vbHMpLmxlbmd0aCxcbiAgfSk7XG4gIGNvbnN0IG1vZGVsID0gYXdhaXQgdHJhbnNsYXRpb25Nb2RlbChyb3V0ZSk7XG4gIGNvbnN0IHJlc3VsdCA9IHN0cmVhbVRleHQoe1xuICAgIG1vZGVsLFxuICAgIG1lc3NhZ2VzOiBkZWNvZGVkLm1lc3NhZ2VzLFxuICAgIGFsbG93U3lzdGVtSW5NZXNzYWdlczogdHJ1ZSxcbiAgICAuLi4oT2JqZWN0LmtleXMoZGVjb2RlZC50b29scykubGVuZ3RoID4gMCA/IHsgdG9vbHM6IGRlY29kZWQudG9vbHMgfSA6IHt9KSxcbiAgICAuLi4oZGVjb2RlZC5tYXhPdXRwdXRUb2tlbnMgIT09IHVuZGVmaW5lZCA/IHsgbWF4T3V0cHV0VG9rZW5zOiBkZWNvZGVkLm1heE91dHB1dFRva2VucyB9IDoge30pLFxuICAgIC4uLihkZWNvZGVkLnRlbXBlcmF0dXJlICE9PSB1bmRlZmluZWQgPyB7IHRlbXBlcmF0dXJlOiBkZWNvZGVkLnRlbXBlcmF0dXJlIH0gOiB7fSksXG4gICAgLi4uKGRlY29kZWQudG9wUCAhPT0gdW5kZWZpbmVkID8geyB0b3BQOiBkZWNvZGVkLnRvcFAgfSA6IHt9KSxcbiAgICBtYXhSZXRyaWVzOiAwLFxuICAgIGFib3J0U2lnbmFsOiBzaWduYWwsXG4gICAgb25FcnJvcjogKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFwic3RyZWFtIGZhaWxlZFwiLCB7XG4gICAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyb3IpLFxuICAgICAgICBtb2RlbDogcm91dGUudGFyZ2V0LmlkLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbkFib3J0OiAoKSA9PiB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJ0cmFuc2xhdGlvbiBhYm9ydGVkXCIsIHsgbW9kZWw6IHJvdXRlLnRhcmdldC5pZCB9KTtcbiAgICB9LFxuICAgIG9uRmluaXNoOiAoeyBmaW5pc2hSZWFzb24sIHVzYWdlIH0pID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInRyYW5zbGF0aW9uIGZpbmlzaGVkXCIsIHtcbiAgICAgICAgZmluaXNoUmVhc29uLFxuICAgICAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG5cbiAgaWYgKGJvZHkuc3RyZWFtID09PSB0cnVlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmV0dXJuaW5nIHRyYW5zbGF0ZWQgc3RyZWFtXCIsIHtcbiAgICAgIGNsaWVudFByb3RvY29sOiByb3V0ZS5jbGllbnRQcm90b2NvbCxcbiAgICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZShcbiAgICAgIGVuY29kZUdhdGV3YXlTdHJlYW0oXG4gICAgICAgIHJvdXRlLmNsaWVudFByb3RvY29sLFxuICAgICAgICByb3V0ZS50YXJnZXQuaWQsXG4gICAgICAgIHJlc3VsdC5zdHJlYW0gYXMgQXN5bmNJdGVyYWJsZTxpbXBvcnQoXCJhaVwiKS5UZXh0U3RyZWFtUGFydDxUb29sU2V0Pj4sXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tY2FjaGVcIixcbiAgICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvZXZlbnQtc3RyZWFtXCIsXG4gICAgICAgICAgXCJ4LWFjY2VsLWJ1ZmZlcmluZ1wiOiBcIm5vXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBjb25zdCBbdGV4dCwgdG9vbENhbGxzLCB1c2FnZSwgZmluaXNoUmVhc29uXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICByZXN1bHQudGV4dCxcbiAgICByZXN1bHQudG9vbENhbGxzLFxuICAgIHJlc3VsdC51c2FnZSxcbiAgICByZXN1bHQuZmluaXNoUmVhc29uLFxuICBdKTtcbiAgbG9nZ2VyLmRlYnVnKFwicmV0dXJuaW5nIHRyYW5zbGF0ZWQgcmVzcG9uc2VcIiwge1xuICAgIGNsaWVudFByb3RvY29sOiByb3V0ZS5jbGllbnRQcm90b2NvbCxcbiAgICBmaW5pc2hSZWFzb24sXG4gICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgdG9vbENhbGxDb3VudDogdG9vbENhbGxzLmxlbmd0aCxcbiAgfSk7XG4gIHJldHVybiBSZXNwb25zZS5qc29uKFxuICAgIGVuY29kZUdhdGV3YXlSZXNwb25zZShyb3V0ZS5jbGllbnRQcm90b2NvbCwgcm91dGUudGFyZ2V0LmlkLCB7XG4gICAgICB0ZXh0LFxuICAgICAgdG9vbENhbGxzOiB0b29sQ2FsbHMgYXMgaW1wb3J0KFwiYWlcIikuVHlwZWRUb29sQ2FsbDxUb29sU2V0PltdLFxuICAgICAgdXNhZ2UsXG4gICAgICBmaW5pc2hSZWFzb24sXG4gICAgfSksXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRyYW5zbGF0aW9uTW9kZWwocm91dGU6IEdhdGV3YXlSb3V0ZSk6IFByb21pc2U8TGFuZ3VhZ2VNb2RlbD4ge1xuICBjb25zdCBjbGllbnQgPSBnZXRFeGVjdXRpb25Db250ZXh0KCkuY2xpZW50O1xuICBjb25zdCBob3N0ID0gKGF3YWl0IGNsaWVudC5jb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpO1xuICBjb25zdCBoZWFkZXJzID0gYXdhaXQgaW52b2tlLmF1dGhIZWFkZXJzKGNsaWVudCk7XG4gIGNvbnN0IHByb3RvY29sID0gdHJhbnNsYXRpb25Qcm90b2NvbChyb3V0ZSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIHRyYW5zbGF0aW9uIHByb3ZpZGVyXCIsIHsgbW9kZWw6IHJvdXRlLnRhcmdldC5pZCwgcHJvdG9jb2wgfSk7XG4gIHJldHVybiBjcmVhdGVEYXRhYnJpY2tzTGFuZ3VhZ2VNb2RlbCh7XG4gICAgbW9kZWxJZDogcm91dGUudGFyZ2V0LmlkLFxuICAgIHByb3RvY29sLFxuICAgIGhvc3QsXG4gICAgaGVhZGVycyxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0aW9uUHJvdG9jb2wocm91dGU6IEdhdGV3YXlSb3V0ZSk6IERhdGFicmlja3NMYW5ndWFnZU1vZGVsUHJvdG9jb2wge1xuICBpZiAocm91dGUudGFyZ2V0LmNhcGFiaWxpdGllcy5yZXNwb25zZXMpIHJldHVybiBcInJlc3BvbnNlc1wiO1xuICBpZiAocm91dGUudGFyZ2V0LmNhcGFiaWxpdGllcy5hbnRocm9waWMpIHJldHVybiBcImFudGhyb3BpY1wiO1xuICByZXR1cm4gXCJjaGF0XCI7XG59XG4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixtQkFBbUIsR0FDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsNkJBQTZCLEdBRTlCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsVUFBVSxFQUFvQyxNQUFNLElBQUksQ0FBQztBQUVsRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFFOUQsbUVBQW1FO0FBQ25FLE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLEtBQW1CLEVBQ25CLElBQXVDLEVBQ3ZDLE1BQW1CO0lBRW5CLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakUsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtRQUM5QixjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7UUFDcEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtRQUNyQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUk7UUFDNUIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU07S0FDN0Ms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QixRQUFRO1FBQ1IsSUFBSTtRQUNKLE9BQU87S0FDUixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUFtQjtJQUM5QyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVM7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUM1RCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVM7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUM1RCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBWZXJjZWwgQUkgU0RLIGZhbGxiYWNrIHRyYW5zbGF0aW9uIGJldHdlZW4gZXh0ZXJuYWwgZ2F0ZXdheSBwcm90b2NvbHMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdldEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBpbnZva2UgfSBmcm9tIFwiQGRieC10b29scy9tb2RlbFwiO1xuaW1wb3J0IHtcbiAgZGVjb2RlR2F0ZXdheVJlcXVlc3QsXG4gIGVuY29kZUdhdGV3YXlSZXNwb25zZSxcbiAgZW5jb2RlR2F0ZXdheVN0cmVhbSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWwtcHJvdG9jb2xcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZURhdGFicmlja3NMYW5ndWFnZU1vZGVsLFxuICB0eXBlIERhdGFicmlja3NMYW5ndWFnZU1vZGVsUHJvdG9jb2wsXG59IGZyb20gXCJAZGJ4LXRvb2xzL21vZGVsLXByb3RvY29sXCI7XG5pbXBvcnQgeyBsb2csIHRvRXJyb3IgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBHYXRld2F5Um91dGUgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuaW1wb3J0IHsgc3RyZWFtVGV4dCwgdHlwZSBMYW5ndWFnZU1vZGVsLCB0eXBlIFRvb2xTZXQgfSBmcm9tIFwiYWlcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImFwcGtpdC9tb2RlbC1nYXRld2F5L3RyYW5zbGF0aW9uXCIpO1xuXG4vKiogVHJhbnNsYXRlIG9uZSByZXF1ZXN0IHRocm91Z2ggYSBwcm92aWRlci1vd25lZCBBSSBTREsgbW9kZWwuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhbnNsYXRlR2F0ZXdheVJlcXVlc3QoXG4gIHJvdXRlOiBHYXRld2F5Um91dGUsXG4gIGJvZHk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PixcbiAgc2lnbmFsOiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUdhdGV3YXlSZXF1ZXN0KHJvdXRlLmNsaWVudFByb3RvY29sLCBib2R5KTtcbiAgbG9nZ2VyLmRlYnVnKFwiZGVjb2RlZCByZXF1ZXN0XCIsIHtcbiAgICBjbGllbnRQcm90b2NvbDogcm91dGUuY2xpZW50UHJvdG9jb2wsXG4gICAgbWVzc2FnZUNvdW50OiBkZWNvZGVkLm1lc3NhZ2VzLmxlbmd0aCxcbiAgICBtb2RlbDogcm91dGUudGFyZ2V0LmlkLFxuICAgIHN0cmVhbTogYm9keS5zdHJlYW0gPT09IHRydWUsXG4gICAgdG9vbENvdW50OiBPYmplY3Qua2V5cyhkZWNvZGVkLnRvb2xzKS5sZW5ndGgsXG4gIH0pO1xuICBjb25zdCBtb2RlbCA9IGF3YWl0IHRyYW5zbGF0aW9uTW9kZWwocm91dGUpO1xuICBjb25zdCByZXN1bHQgPSBzdHJlYW1UZXh0KHtcbiAgICBtb2RlbCxcbiAgICBtZXNzYWdlczogZGVjb2RlZC5tZXNzYWdlcyxcbiAgICBhbGxvd1N5c3RlbUluTWVzc2FnZXM6IHRydWUsXG4gICAgLi4uKE9iamVjdC5rZXlzKGRlY29kZWQudG9vbHMpLmxlbmd0aCA+IDAgPyB7IHRvb2xzOiBkZWNvZGVkLnRvb2xzIH0gOiB7fSksXG4gICAgLi4uKGRlY29kZWQubWF4T3V0cHV0VG9rZW5zICE9PSB1bmRlZmluZWQgPyB7IG1heE91dHB1dFRva2VuczogZGVjb2RlZC5tYXhPdXRwdXRUb2tlbnMgfSA6IHt9KSxcbiAgICAuLi4oZGVjb2RlZC50ZW1wZXJhdHVyZSAhPT0gdW5kZWZpbmVkID8geyB0ZW1wZXJhdHVyZTogZGVjb2RlZC50ZW1wZXJhdHVyZSB9IDoge30pLFxuICAgIC4uLihkZWNvZGVkLnRvcFAgIT09IHVuZGVmaW5lZCA/IHsgdG9wUDogZGVjb2RlZC50b3BQIH0gOiB7fSksXG4gICAgbWF4UmV0cmllczogMCxcbiAgICBhYm9ydFNpZ25hbDogc2lnbmFsLFxuICAgIG9uRXJyb3I6ICh7IGVycm9yIH0pID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihcInN0cmVhbSBmYWlsZWRcIiwge1xuICAgICAgICBlcnJvcjogdG9FcnJvcihlcnJvciksXG4gICAgICAgIG1vZGVsOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIG9uQWJvcnQ6ICgpID0+IHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInRyYW5zbGF0aW9uIGFib3J0ZWRcIiwgeyBtb2RlbDogcm91dGUudGFyZ2V0LmlkIH0pO1xuICAgIH0sXG4gICAgb25GaW5pc2g6ICh7IGZpbmlzaFJlYXNvbiwgdXNhZ2UgfSkgPT4ge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwidHJhbnNsYXRpb24gZmluaXNoZWRcIiwge1xuICAgICAgICBmaW5pc2hSZWFzb24sXG4gICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgbW9kZWw6IHJvdXRlLnRhcmdldC5pZCxcbiAgICAgICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcblxuICBpZiAoYm9keS5zdHJlYW0gPT09IHRydWUpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJyZXR1cm5pbmcgdHJhbnNsYXRlZCBzdHJlYW1cIiwge1xuICAgICAgY2xpZW50UHJvdG9jb2w6IHJvdXRlLmNsaWVudFByb3RvY29sLFxuICAgICAgbW9kZWw6IHJvdXRlLnRhcmdldC5pZCxcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFxuICAgICAgZW5jb2RlR2F0ZXdheVN0cmVhbShcbiAgICAgICAgcm91dGUuY2xpZW50UHJvdG9jb2wsXG4gICAgICAgIHJvdXRlLnRhcmdldC5pZCxcbiAgICAgICAgcmVzdWx0LnN0cmVhbSBhcyBBc3luY0l0ZXJhYmxlPGltcG9ydChcImFpXCIpLlRleHRTdHJlYW1QYXJ0PFRvb2xTZXQ+PixcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1jYWNoZVwiLFxuICAgICAgICAgIFwiY29udGVudC10eXBlXCI6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcbiAgICAgICAgICBcIngtYWNjZWwtYnVmZmVyaW5nXCI6IFwibm9cIixcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IFt0ZXh0LCB0b29sQ2FsbHMsIHVzYWdlLCBmaW5pc2hSZWFzb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHJlc3VsdC50ZXh0LFxuICAgIHJlc3VsdC50b29sQ2FsbHMsXG4gICAgcmVzdWx0LnVzYWdlLFxuICAgIHJlc3VsdC5maW5pc2hSZWFzb24sXG4gIF0pO1xuICBsb2dnZXIuZGVidWcoXCJyZXR1cm5pbmcgdHJhbnNsYXRlZCByZXNwb25zZVwiLCB7XG4gICAgY2xpZW50UHJvdG9jb2w6IHJvdXRlLmNsaWVudFByb3RvY29sLFxuICAgIGZpbmlzaFJlYXNvbixcbiAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgbW9kZWw6IHJvdXRlLnRhcmdldC5pZCxcbiAgICBvdXRwdXRUb2tlbnM6IHVzYWdlLm91dHB1dFRva2VucyxcbiAgICB0b29sQ2FsbENvdW50OiB0b29sQ2FsbHMubGVuZ3RoLFxuICB9KTtcbiAgcmV0dXJuIFJlc3BvbnNlLmpzb24oXG4gICAgZW5jb2RlR2F0ZXdheVJlc3BvbnNlKHJvdXRlLmNsaWVudFByb3RvY29sLCByb3V0ZS50YXJnZXQuaWQsIHtcbiAgICAgIHRleHQsXG4gICAgICB0b29sQ2FsbHM6IHRvb2xDYWxscyBhcyBpbXBvcnQoXCJhaVwiKS5UeXBlZFRvb2xDYWxsPFRvb2xTZXQ+W10sXG4gICAgICB1c2FnZSxcbiAgICAgIGZpbmlzaFJlYXNvbixcbiAgICB9KSxcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdHJhbnNsYXRpb25Nb2RlbChyb3V0ZTogR2F0ZXdheVJvdXRlKTogUHJvbWlzZTxMYW5ndWFnZU1vZGVsPiB7XG4gIGNvbnN0IGNsaWVudCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKS5jbGllbnQ7XG4gIGNvbnN0IGhvc3QgPSAoYXdhaXQgY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCBpbnZva2UuYXV0aEhlYWRlcnMoY2xpZW50KTtcbiAgY29uc3QgcHJvdG9jb2wgPSB0cmFuc2xhdGlvblByb3RvY29sKHJvdXRlKTtcbiAgbG9nZ2VyLmRlYnVnKFwic2VsZWN0ZWQgdHJhbnNsYXRpb24gcHJvdmlkZXJcIiwgeyBtb2RlbDogcm91dGUudGFyZ2V0LmlkLCBwcm90b2NvbCB9KTtcbiAgcmV0dXJuIGNyZWF0ZURhdGFicmlja3NMYW5ndWFnZU1vZGVsKHtcbiAgICBtb2RlbElkOiByb3V0ZS50YXJnZXQuaWQsXG4gICAgcHJvdG9jb2wsXG4gICAgaG9zdCxcbiAgICBoZWFkZXJzLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRpb25Qcm90b2NvbChyb3V0ZTogR2F0ZXdheVJvdXRlKTogRGF0YWJyaWNrc0xhbmd1YWdlTW9kZWxQcm90b2NvbCB7XG4gIGlmIChyb3V0ZS50YXJnZXQuY2FwYWJpbGl0aWVzLnJlc3BvbnNlcykgcmV0dXJuIFwicmVzcG9uc2VzXCI7XG4gIGlmIChyb3V0ZS50YXJnZXQuY2FwYWJpbGl0aWVzLmFudGhyb3BpYykgcmV0dXJuIFwiYW50aHJvcGljXCI7XG4gIHJldHVybiBcImNoYXRcIjtcbn1cbiJdfQ==
@@ -4,9 +4,9 @@
4
4
  * @module
5
5
  */
6
6
  import { getExecutionContext } from "@databricks/appkit";
7
- import { workspaceClient } from "@dbx-tools/databricks";
8
- import { errorUtils, log } from "@dbx-tools/shared-core";
9
- import { openaiChat } from "@dbx-tools/shared-model";
7
+ import { refreshWorkspaceClientAuthentication } from "@dbx-tools/databricks";
8
+ import { log, toError } from "@dbx-tools/shared-core";
9
+ import { stripUnsupportedChatFields } 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");
12
12
  const ERROR_PREVIEW_BYTES = 8 * 1024;
@@ -62,8 +62,7 @@ export async function fetchDatabricks(request) {
62
62
  body,
63
63
  signal: request.signal,
64
64
  });
65
- if (response.status === 401 &&
66
- (await workspaceClient.refreshWorkspaceClientAuthentication(client))) {
65
+ if (response.status === 401 && (await refreshWorkspaceClientAuthentication(client))) {
67
66
  logger.debug("retrying rejected upstream credential", {
68
67
  model: request.route.upstreamModel,
69
68
  upstreamProtocol: request.route.upstreamProtocol,
@@ -98,7 +97,7 @@ export async function fetchDatabricks(request) {
98
97
  catch (error) {
99
98
  logger.error("upstream fetch failed", {
100
99
  elapsedMs: Date.now() - startedAt,
101
- error: errorUtils.toError(error),
100
+ error: toError(error),
102
101
  model: request.route.upstreamModel,
103
102
  upstreamProtocol: request.route.upstreamProtocol,
104
103
  });
@@ -109,7 +108,7 @@ export async function fetchDatabricks(request) {
109
108
  export function directDatabricksRequestBody(route, body) {
110
109
  const sanitized = { ...body, model: route.upstreamModel };
111
110
  if (route.upstreamProtocol === "databricks-chat") {
112
- openaiChat.stripUnsupportedChatFields(sanitized);
111
+ stripUnsupportedChatFields(sanitized);
113
112
  }
114
113
  else {
115
114
  delete sanitized.parallel_tool_calls;
@@ -154,11 +153,11 @@ async function logUpstreamFailureBody(response, details) {
154
153
  catch (error) {
155
154
  logger.debug("could not read upstream error body", {
156
155
  ...details,
157
- error: errorUtils.toError(error),
156
+ error: toError(error),
158
157
  });
159
158
  }
160
159
  finally {
161
160
  await reader.cancel().catch(() => undefined);
162
161
  }
163
162
  }
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQXFCLE1BQU0saUNBQWlDLENBQUM7QUFFakYsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQzVELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUVyQyxNQUFNLHVCQUF1QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3RDLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsWUFBWTtJQUNaLGdCQUFnQjtJQUNoQixRQUFRO0lBQ1IsTUFBTTtJQUNOLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsV0FBVztDQUNaLENBQUMsQ0FBQztBQUVILE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDdkMsWUFBWTtJQUNaLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsWUFBWTtJQUNaLElBQUk7SUFDSixTQUFTO0lBQ1QsbUJBQW1CO0lBQ25CLFNBQVM7Q0FDVixDQUFDLENBQUM7QUFVSCw0RkFBNEY7QUFDNUYsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQUMsT0FBbUM7SUFDdkUsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDNUMsTUFBTSxJ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Q0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMxQixPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVO2dCQUFFLE1BQU07UUFDdkQsQ0FBQztRQUNELE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUNqQyxHQUFHLE9BQU87WUFDVixPQUFPO1lBQ1AsU0FBUyxFQUFFLEtBQUssSUFBSSxtQkFBbUI7U0FDeEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFO1lBQ2pELEdBQUcsT0FBTztZQUNWLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXV0aGVudGljYXRlZCBzdHJlYW1pbmcgdHJhbnNwb3J0IGZvciBkaXJlY3QgRGF0YWJyaWNrcyBnYXRld2F5IHJvdXRlcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGJ4LXRvb2xzL2RhdGFicmlja3NcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBvcGVuYWlDaGF0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyB1cHN0cmVhbVVybCwgdHlwZSBHYXRld2F5Um91dGUgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0L21vZGVsLWdhdGV3YXkvdHJhbnNwb3J0XCIpO1xuY29uc3QgRVJST1JfUFJFVklFV19CWVRFUyA9IDggKiAxMDI0O1xuXG5jb25zdCBCTE9DS0VEX1JFUVVFU1RfSEVBREVSUyA9IG5ldyBTZXQoW1xuICBcImFjY2VwdC1lbmNvZGluZ1wiLFxuICBcImF1dGhvcml6YXRpb25cIixcbiAgXCJjb25uZWN0aW9uXCIsXG4gIFwiY29udGVudC1sZW5ndGhcIixcbiAgXCJjb29raWVcIixcbiAgXCJob3N0XCIsXG4gIFwicHJveHktYXV0aG9yaXphdGlvblwiLFxuICBcInRyYW5zZmVyLWVuY29kaW5nXCIsXG4gIFwieC1hcGkta2V5XCIsXG5dKTtcblxuY29uc3QgQkxPQ0tFRF9SRVNQT05TRV9IRUFERVJTID0gbmV3IFNldChbXG4gIFwiY29ubmVjdGlvblwiLFxuICBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgXCJjb250ZW50LWxlbmd0aFwiLFxuICBcImtlZXAtYWxpdmVcIixcbiAgXCJwcm94eS1hdXRoZW50aWNhdGVcIixcbiAgXCJwcm94eS1hdXRob3JpemF0aW9uXCIsXG4gIFwic2V0LWNvb2tpZVwiLFxuICBcInRlXCIsXG4gIFwidHJhaWxlclwiLFxuICBcInRyYW5zZmVyLWVuY29kaW5nXCIsXG4gIFwidXBncmFkZVwiLFxuXSk7XG5cbi8qKiBJbnB1dHMgZm9yIG9uZSBkaXJlY3QgRGF0YWJyaWNrcyBwcm90b2NvbCByZXF1ZXN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzVHJhbnNwb3J0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IHJvdXRlOiBHYXRld2F5Um91dGU7XG4gIHJlYWRvbmx5IGJvZHk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgcmVhZG9ubHkgaGVhZGVyczogSGVhZGVycztcbiAgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqIEV4ZWN1dGUgYSBkaXJlY3Qgcm91dGUgd2l0aCBTREstb3duZWQgYXV0aGVudGljYXRpb24gYW5kIGFuIHVuYnVmZmVyZWQgcmVzcG9uc2UgYm9keS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGFicmlja3MocmVxdWVzdDogRGF0YWJyaWNrc1RyYW5zcG9ydFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IGNsaWVudCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKS5jbGllbnQ7XG4gIGNvbnN0IGhvc3QgPSAoYXdhaXQgY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7IFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0pO1xuICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIG5hbWUpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghQkxPQ0tFRF9SRVFVRVNUX0hFQURFUlMuaGFzKG5vcm1hbGl6ZWQpICYmICFub3JtYWxpemVkLnN0YXJ0c1dpdGgoXCJ4LWZvcndhcmRlZC1cIikpIHtcbiAgICAgIGhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBhd2FpdCBjbGllbnQuY29uZmlnLmF1dGhlbnRpY2F0ZShoZWFkZXJzKTtcbiAgY29uc3QgdXJsID0gdXBzdHJlYW1VcmwoaG9zdCwgcmVxdWVzdC5yb3V0ZSk7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShkaXJlY3REYXRhYnJpY2tzUmVxdWVzdEJvZHkocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5ib2R5KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInNlbmRpbmcgdXBzdHJlYW0gcmVxdWVzdFwiLCB7XG4gICAgbW9kZWw6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Nb2RlbCxcbiAgICBwYXRoOiBuZXcgVVJMKHVybCkucGF0aG5hbWUsXG4gICAgc3RyZWFtOiByZXF1ZXN0LmJvZHkuc3RyZWFtID09PSB0cnVlLFxuICAgIHVwc3RyZWFtUHJvdG9jb2w6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Qcm90b2NvbCxcbiAgfSk7XG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHksXG4gICAgICBzaWduYWw6IHJlcXVlc3Quc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmIChcbiAgICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmXG4gICAgICAoYXdhaXQgd29ya3NwYWNlQ2xpZW50LnJlZnJlc2hXb3Jrc3BhY2VDbGllbnRBdXRoZW50aWNhdGlvbihjbGllbnQpKVxuICAgICkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmV0cnlpbmcgcmVqZWN0ZWQgdXBzdHJlYW0gY3JlZGVudGlhbFwiLCB7XG4gICAgICAgIG1vZGVsOiByZXF1ZXN0LnJvdXRlLnVwc3RyZWFtTW9kZWwsXG4gICAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Qcm90b2NvbCxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgcmVzcG9uc2UuYm9keT8uY2FuY2VsKCk7XG4gICAgICBoZWFkZXJzLmRlbGV0ZShcImF1dGhvcml6YXRpb25cIik7XG4gICAgICBoZWFkZXJzLmRlbGV0ZShcIngtZGF0YWJyaWNrcy13b3Jrc3BhY2UtaWRcIik7XG4gICAgICBhd2FpdCBjbGllbnQuY29uZmlnLmF1dGhlbnRpY2F0ZShoZWFkZXJzKTtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHksXG4gICAgICAgIHNpZ25hbDogcmVxdWVzdC5zaWduYWwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGV0YWlscyA9IHtcbiAgICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICAgIG1vZGVsOiByZXF1ZXN0LnJvdXRlLnVwc3RyZWFtTW9kZWwsXG4gICAgICByZXF1ZXN0SWQ6XG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwieC1yZXF1ZXN0LWlkXCIpID8/IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwieC1kYXRhYnJpY2tzLXJlcXVlc3QtaWRcIiksXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Qcm90b2NvbCxcbiAgICB9O1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmVjZWl2ZWQgdXBzdHJlYW0gcmVzcG9uc2VcIiwgZGV0YWlscyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci53YXJuKFwidXBzdHJlYW0gcmVzcG9uc2UgZmFpbGVkXCIsIGRldGFpbHMpO1xuICAgICAgdm9pZCBsb2dVcHN0cmVhbUZhaWx1cmVCb2R5KHJlc3BvbnNlLmNsb25lKCksIGRldGFpbHMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKFwidXBzdHJlYW0gZmV0Y2ggZmFpbGVkXCIsIHtcbiAgICAgIGVsYXBzZWRNczogRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyb3IpLFxuICAgICAgbW9kZWw6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Nb2RlbCxcbiAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Qcm90b2NvbCxcbiAgICB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKiogUmVtb3ZlIGNsaWVudCBjb21wYXRpYmlsaXR5IGZpZWxkcyByZWplY3RlZCBieSBkaXJlY3QgRGF0YWJyaWNrcyBwcm90b2NvbHMuICovXG5leHBvcnQgZnVuY3Rpb24gZGlyZWN0RGF0YWJyaWNrc1JlcXVlc3RCb2R5KFxuICByb3V0ZTogUGljazxHYXRld2F5Um91dGUsIFwidXBzdHJlYW1Qcm90b2NvbFwiIHwgXCJ1cHN0cmVhbU1vZGVsXCI+LFxuICBib2R5OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHNhbml0aXplZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmJvZHksIG1vZGVsOiByb3V0ZS51cHN0cmVhbU1vZGVsIH07XG4gIGlmIChyb3V0ZS51cHN0cmVhbVByb3RvY29sID09PSBcImRhdGFicmlja3MtY2hhdFwiKSB7XG4gICAgb3BlbmFpQ2hhdC5zdHJpcFVuc3VwcG9ydGVkQ2hhdEZpZWxkcyhzYW5pdGl6ZWQpO1xuICB9IGVsc2Uge1xuICAgIGRlbGV0ZSBzYW5pdGl6ZWQucGFyYWxsZWxfdG9vbF9jYWxscztcbiAgfVxuICByZXR1cm4gc2FuaXRpemVkO1xufVxuXG4vKiogQ29weSBvbmx5IHJlc3BvbnNlIGhlYWRlcnMgdGhhdCBiZWxvbmcgdG8gdGhlIHB1YmxpYyBtb2RlbCBwcm90b2NvbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnYXRld2F5UmVzcG9uc2VIZWFkZXJzKHVwc3RyZWFtOiBIZWFkZXJzKTogSGVhZGVycyB7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICB1cHN0cmVhbS5mb3JFYWNoKCh2YWx1ZSwgbmFtZSkgPT4ge1xuICAgIGlmICghQkxPQ0tFRF9SRVNQT05TRV9IRUFERVJTLmhhcyhuYW1lLnRvTG93ZXJDYXNlKCkpKSBoZWFkZXJzLnNldChuYW1lLCB2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gaGVhZGVycztcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9nVXBzdHJlYW1GYWlsdXJlQm9keShcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKTtcbiAgaWYgKCFyZWFkZXIpIHJldHVybjtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBsZXQgcHJldmlldyA9IFwiXCI7XG4gIGxldCBieXRlcyA9IDA7XG4gIHRyeSB7XG4gICAgd2hpbGUgKGJ5dGVzIDwgRVJST1JfUFJFVklFV19CWVRFUykge1xuICAgICAgY29uc3QgY2h1bmsgPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgaWYgKGNodW5rLmRvbmUpIGJyZWFrO1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gRVJST1JfUFJFVklFV19CWVRFUyAtIGJ5dGVzO1xuICAgICAgY29uc3QgdmFsdWUgPSBjaHVuay52YWx1ZS5zdWJhcnJheSgwLCByZW1haW5pbmcpO1xuICAgICAgYnl0ZXMgKz0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgIHByZXZpZXcgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgaWYgKHZhbHVlLmJ5dGVMZW5ndGggPCBjaHVuay52YWx1ZS5ieXRlTGVuZ3RoKSBicmVhaztcbiAgICB9XG4gICAgcHJldmlldyArPSBkZWNvZGVyLmRlY29kZSgpO1xuICAgIGxvZ2dlci53YXJuKFwidXBzdHJlYW0gZXJyb3IgYm9keVwiLCB7XG4gICAgICAuLi5kZXRhaWxzLFxuICAgICAgcHJldmlldyxcbiAgICAgIHRydW5jYXRlZDogYnl0ZXMgPj0gRVJST1JfUFJFVklFV19CWVRFUyxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJjb3VsZCBub3QgcmVhZCB1cHN0cmVhbSBlcnJvciBib2R5XCIsIHtcbiAgICAgIC4uLmRldGFpbHMsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy50b0Vycm9yKGVycm9yKSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgfVxufVxuIl19
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFxQixNQUFNLGlDQUFpQyxDQUFDO0FBRWpGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztBQUM1RCxNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFFckMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN0QyxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsUUFBUTtJQUNSLE1BQU07SUFDTixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLFdBQVc7Q0FDWixDQUFDLENBQUM7QUFFSCxNQUFNLHdCQUF3QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3ZDLFlBQVk7SUFDWixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixvQkFBb0I7SUFDcEIscUJBQXFCO0lBQ3JCLFlBQVk7SUFDWixJQUFJO0lBQ0osU0FBUztJQUNULG1CQUFtQjtJQUNuQixTQUFTO0NBQ1YsQ0FBQyxDQUFDO0FBVUgsNEZBQTRGO0FBQzVGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLE9BQW1DO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLG1CQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDO0lBQzVDLE1B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QUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxLQUFLLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMxQixPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNuRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVO2dCQUFFLE1BQU07UUFDdkQsQ0FBQztRQUNELE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUNqQyxHQUFHLE9BQU87WUFDVixPQUFPO1lBQ1AsU0FBUyxFQUFFLEtBQUssSUFBSSxtQkFBbUI7U0FDeEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFO1lBQ2pELEdBQUcsT0FBTztZQUNWLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7WUFBUyxDQUFDO1FBQ1QsTUFBTSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBdXRoZW50aWNhdGVkIHN0cmVhbWluZyB0cmFuc3BvcnQgZm9yIGRpcmVjdCBEYXRhYnJpY2tzIGdhdGV3YXkgcm91dGVzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgcmVmcmVzaFdvcmtzcGFjZUNsaWVudEF1dGhlbnRpY2F0aW9uIH0gZnJvbSBcIkBkYngtdG9vbHMvZGF0YWJyaWNrc1wiO1xuaW1wb3J0IHsgbG9nLCB0b0Vycm9yIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHN0cmlwVW5zdXBwb3J0ZWRDaGF0RmllbGRzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyB1cHN0cmVhbVVybCwgdHlwZSBHYXRld2F5Um91dGUgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWwtZ2F0ZXdheVwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0L21vZGVsLWdhdGV3YXkvdHJhbnNwb3J0XCIpO1xuY29uc3QgRVJST1JfUFJFVklFV19CWVRFUyA9IDggKiAxMDI0O1xuXG5jb25zdCBCTE9DS0VEX1JFUVVFU1RfSEVBREVSUyA9IG5ldyBTZXQoW1xuICBcImFjY2VwdC1lbmNvZGluZ1wiLFxuICBcImF1dGhvcml6YXRpb25cIixcbiAgXCJjb25uZWN0aW9uXCIsXG4gIFwiY29udGVudC1sZW5ndGhcIixcbiAgXCJjb29raWVcIixcbiAgXCJob3N0XCIsXG4gIFwicHJveHktYXV0aG9yaXphdGlvblwiLFxuICBcInRyYW5zZmVyLWVuY29kaW5nXCIsXG4gIFwieC1hcGkta2V5XCIsXG5dKTtcblxuY29uc3QgQkxPQ0tFRF9SRVNQT05TRV9IRUFERVJTID0gbmV3IFNldChbXG4gIFwiY29ubmVjdGlvblwiLFxuICBcImNvbnRlbnQtZW5jb2RpbmdcIixcbiAgXCJjb250ZW50LWxlbmd0aFwiLFxuICBcImtlZXAtYWxpdmVcIixcbiAgXCJwcm94eS1hdXRoZW50aWNhdGVcIixcbiAgXCJwcm94eS1hdXRob3JpemF0aW9uXCIsXG4gIFwic2V0LWNvb2tpZVwiLFxuICBcInRlXCIsXG4gIFwidHJhaWxlclwiLFxuICBcInRyYW5zZmVyLWVuY29kaW5nXCIsXG4gIFwidXBncmFkZVwiLFxuXSk7XG5cbi8qKiBJbnB1dHMgZm9yIG9uZSBkaXJlY3QgRGF0YWJyaWNrcyBwcm90b2NvbCByZXF1ZXN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYnJpY2tzVHJhbnNwb3J0UmVxdWVzdCB7XG4gIHJlYWRvbmx5IHJvdXRlOiBHYXRld2F5Um91dGU7XG4gIHJlYWRvbmx5IGJvZHk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgcmVhZG9ubHkgaGVhZGVyczogSGVhZGVycztcbiAgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqIEV4ZWN1dGUgYSBkaXJlY3Qgcm91dGUgd2l0aCBTREstb3duZWQgYXV0aGVudGljYXRpb24gYW5kIGFuIHVuYnVmZmVyZWQgcmVzcG9uc2UgYm9keS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGFicmlja3MocmVxdWVzdDogRGF0YWJyaWNrc1RyYW5zcG9ydFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IGNsaWVudCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKS5jbGllbnQ7XG4gIGNvbnN0IGhvc3QgPSAoYXdhaXQgY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7IFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0pO1xuICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaCgodmFsdWUsIG5hbWUpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghQkxPQ0tFRF9SRVFVRVNUX0hFQURFUlMuaGFzKG5vcm1hbGl6ZWQpICYmICFub3JtYWxpemVkLnN0YXJ0c1dpdGgoXCJ4LWZvcndhcmRlZC1cIikpIHtcbiAgICAgIGhlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBhd2FpdCBjbGllbnQuY29uZmlnLmF1dGhlbnRpY2F0ZShoZWFkZXJzKTtcbiAgY29uc3QgdXJsID0gdXBzdHJlYW1VcmwoaG9zdCwgcmVxdWVzdC5yb3V0ZSk7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeShkaXJlY3REYXRhYnJpY2tzUmVxdWVzdEJvZHkocmVxdWVzdC5yb3V0ZSwgcmVxdWVzdC5ib2R5KSk7XG4gIGxvZ2dlci5kZWJ1ZyhcInNlbmRpbmcgdXBzdHJlYW0gcmVxdWVzdFwiLCB7XG4gICAgbW9kZWw6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Nb2RlbCxcbiAgICBwYXRoOiBuZXcgVVJMKHVybCkucGF0aG5hbWUsXG4gICAgc3RyZWFtOiByZXF1ZXN0LmJvZHkuc3RyZWFtID09PSB0cnVlLFxuICAgIHVwc3RyZWFtUHJvdG9jb2w6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Qcm90b2NvbCxcbiAgfSk7XG4gIHRyeSB7XG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHksXG4gICAgICBzaWduYWw6IHJlcXVlc3Quc2lnbmFsLFxuICAgIH0pO1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSAmJiAoYXdhaXQgcmVmcmVzaFdvcmtzcGFjZUNsaWVudEF1dGhlbnRpY2F0aW9uKGNsaWVudCkpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJyZXRyeWluZyByZWplY3RlZCB1cHN0cmVhbSBjcmVkZW50aWFsXCIsIHtcbiAgICAgICAgbW9kZWw6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Nb2RlbCxcbiAgICAgICAgdXBzdHJlYW1Qcm90b2NvbDogcmVxdWVzdC5yb3V0ZS51cHN0cmVhbVByb3RvY29sLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCByZXNwb25zZS5ib2R5Py5jYW5jZWwoKTtcbiAgICAgIGhlYWRlcnMuZGVsZXRlKFwiYXV0aG9yaXphdGlvblwiKTtcbiAgICAgIGhlYWRlcnMuZGVsZXRlKFwieC1kYXRhYnJpY2tzLXdvcmtzcGFjZS1pZFwiKTtcbiAgICAgIGF3YWl0IGNsaWVudC5jb25maWcuYXV0aGVudGljYXRlKGhlYWRlcnMpO1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keSxcbiAgICAgICAgc2lnbmFsOiByZXF1ZXN0LnNpZ25hbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBkZXRhaWxzID0ge1xuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgbW9kZWw6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Nb2RlbCxcbiAgICAgIHJlcXVlc3RJZDpcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LXJlcXVlc3QtaWRcIikgPz8gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJ4LWRhdGFicmlja3MtcmVxdWVzdC1pZFwiKSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgdXBzdHJlYW1Qcm90b2NvbDogcmVxdWVzdC5yb3V0ZS51cHN0cmVhbVByb3RvY29sLFxuICAgIH07XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJyZWNlaXZlZCB1cHN0cmVhbSByZXNwb25zZVwiLCBkZXRhaWxzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLndhcm4oXCJ1cHN0cmVhbSByZXNwb25zZSBmYWlsZWRcIiwgZGV0YWlscyk7XG4gICAgICB2b2lkIGxvZ1Vwc3RyZWFtRmFpbHVyZUJvZHkocmVzcG9uc2UuY2xvbmUoKSwgZGV0YWlscyk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoXCJ1cHN0cmVhbSBmZXRjaCBmYWlsZWRcIiwge1xuICAgICAgZWxhcHNlZE1zOiBEYXRlLm5vdygpIC0gc3RhcnRlZEF0LFxuICAgICAgZXJyb3I6IHRvRXJyb3IoZXJyb3IpLFxuICAgICAgbW9kZWw6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Nb2RlbCxcbiAgICAgIHVwc3RyZWFtUHJvdG9jb2w6IHJlcXVlc3Qucm91dGUudXBzdHJlYW1Qcm90b2NvbCxcbiAgICB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKiogUmVtb3ZlIGNsaWVudCBjb21wYXRpYmlsaXR5IGZpZWxkcyByZWplY3RlZCBieSBkaXJlY3QgRGF0YWJyaWNrcyBwcm90b2NvbHMuICovXG5leHBvcnQgZnVuY3Rpb24gZGlyZWN0RGF0YWJyaWNrc1JlcXVlc3RCb2R5KFxuICByb3V0ZTogUGljazxHYXRld2F5Um91dGUsIFwidXBzdHJlYW1Qcm90b2NvbFwiIHwgXCJ1cHN0cmVhbU1vZGVsXCI+LFxuICBib2R5OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4sXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHNhbml0aXplZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmJvZHksIG1vZGVsOiByb3V0ZS51cHN0cmVhbU1vZGVsIH07XG4gIGlmIChyb3V0ZS51cHN0cmVhbVByb3RvY29sID09PSBcImRhdGFicmlja3MtY2hhdFwiKSB7XG4gICAgc3RyaXBVbnN1cHBvcnRlZENoYXRGaWVsZHMoc2FuaXRpemVkKTtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgc2FuaXRpemVkLnBhcmFsbGVsX3Rvb2xfY2FsbHM7XG4gIH1cbiAgcmV0dXJuIHNhbml0aXplZDtcbn1cblxuLyoqIENvcHkgb25seSByZXNwb25zZSBoZWFkZXJzIHRoYXQgYmVsb25nIHRvIHRoZSBwdWJsaWMgbW9kZWwgcHJvdG9jb2wuICovXG5leHBvcnQgZnVuY3Rpb24gZ2F0ZXdheVJlc3BvbnNlSGVhZGVycyh1cHN0cmVhbTogSGVhZGVycyk6IEhlYWRlcnMge1xuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgdXBzdHJlYW0uZm9yRWFjaCgodmFsdWUsIG5hbWUpID0+IHtcbiAgICBpZiAoIUJMT0NLRURfUkVTUE9OU0VfSEVBREVSUy5oYXMobmFtZS50b0xvd2VyQ2FzZSgpKSkgaGVhZGVycy5zZXQobmFtZSwgdmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIGhlYWRlcnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvZ1Vwc3RyZWFtRmFpbHVyZUJvZHkoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgZGV0YWlsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKCk7XG4gIGlmICghcmVhZGVyKSByZXR1cm47XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgbGV0IHByZXZpZXcgPSBcIlwiO1xuICBsZXQgYnl0ZXMgPSAwO1xuICB0cnkge1xuICAgIHdoaWxlIChieXRlcyA8IEVSUk9SX1BSRVZJRVdfQllURVMpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChjaHVuay5kb25lKSBicmVhaztcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IEVSUk9SX1BSRVZJRVdfQllURVMgLSBieXRlcztcbiAgICAgIGNvbnN0IHZhbHVlID0gY2h1bmsudmFsdWUuc3ViYXJyYXkoMCwgcmVtYWluaW5nKTtcbiAgICAgIGJ5dGVzICs9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICBwcmV2aWV3ICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICAgIGlmICh2YWx1ZS5ieXRlTGVuZ3RoIDwgY2h1bmsudmFsdWUuYnl0ZUxlbmd0aCkgYnJlYWs7XG4gICAgfVxuICAgIHByZXZpZXcgKz0gZGVjb2Rlci5kZWNvZGUoKTtcbiAgICBsb2dnZXIud2FybihcInVwc3RyZWFtIGVycm9yIGJvZHlcIiwge1xuICAgICAgLi4uZGV0YWlscyxcbiAgICAgIHByZXZpZXcsXG4gICAgICB0cnVuY2F0ZWQ6IGJ5dGVzID49IEVSUk9SX1BSRVZJRVdfQllURVMsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiY291bGQgbm90IHJlYWQgdXBzdHJlYW0gZXJyb3IgYm9keVwiLCB7XG4gICAgICAuLi5kZXRhaWxzLFxuICAgICAgZXJyb3I6IHRvRXJyb3IoZXJyb3IpLFxuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICB9XG59XG4iXX0=
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.154",
31
- "@dbx-tools/model": "^0.9.154",
32
- "@dbx-tools/model-protocol": "^0.9.154",
33
- "@dbx-tools/shared-core": "^0.9.154",
34
- "@dbx-tools/shared-model": "^0.9.154",
35
- "@dbx-tools/shared-model-gateway": "^0.9.154",
30
+ "@dbx-tools/databricks": "^0.9.157",
31
+ "@dbx-tools/model": "^0.9.157",
32
+ "@dbx-tools/model-protocol": "^0.9.157",
33
+ "@dbx-tools/shared-core": "^0.9.157",
34
+ "@dbx-tools/shared-model": "^0.9.157",
35
+ "@dbx-tools/shared-model-gateway": "^0.9.157",
36
36
  "ai": "^7.0.0",
37
37
  "zod": "4.3.6"
38
38
  },
@@ -47,50 +47,10 @@
47
47
  "types": "./lib/index.d.ts",
48
48
  "default": "./lib/index.js"
49
49
  },
50
- "./gateway": {
51
- "types": "./lib/src/gateway.d.ts",
52
- "default": "./lib/src/gateway.js"
53
- },
54
- "./models": {
55
- "types": "./lib/src/models.d.ts",
56
- "default": "./lib/src/models.js"
57
- },
58
- "./plugin": {
59
- "types": "./lib/src/plugin.d.ts",
60
- "default": "./lib/src/plugin.js"
61
- },
62
- "./reasoning-adapt": {
63
- "types": "./lib/src/reasoning-adapt.d.ts",
64
- "default": "./lib/src/reasoning-adapt.js"
65
- },
66
- "./registry": {
67
- "types": "./lib/src/registry.d.ts",
68
- "default": "./lib/src/registry.js"
69
- },
70
- "./router": {
71
- "types": "./lib/src/router.d.ts",
72
- "default": "./lib/src/router.js"
73
- },
74
- "./routes": {
75
- "types": "./lib/src/routes.d.ts",
76
- "default": "./lib/src/routes.js"
77
- },
78
- "./translation": {
79
- "types": "./lib/src/translation.d.ts",
80
- "default": "./lib/src/translation.js"
81
- },
82
- "./transport": {
83
- "types": "./lib/src/transport.d.ts",
84
- "default": "./lib/src/transport.js"
85
- },
86
- "./*": {
87
- "types": "./lib/src/*/index.d.ts",
88
- "default": "./lib/src/*/index.js"
89
- },
90
50
  "./package.json": "./package.json"
91
51
  }
92
52
  },
93
- "version": "0.9.154",
53
+ "version": "0.9.157",
94
54
  "types": "./lib/index.d.ts",
95
55
  "dbxToolsConfig": {
96
56
  "tags": [
@@ -103,50 +63,10 @@
103
63
  "types": "./lib/index.d.ts",
104
64
  "default": "./lib/index.js"
105
65
  },
106
- "./gateway": {
107
- "types": "./lib/src/gateway.d.ts",
108
- "default": "./lib/src/gateway.js"
109
- },
110
- "./models": {
111
- "types": "./lib/src/models.d.ts",
112
- "default": "./lib/src/models.js"
113
- },
114
- "./plugin": {
115
- "types": "./lib/src/plugin.d.ts",
116
- "default": "./lib/src/plugin.js"
117
- },
118
- "./reasoning-adapt": {
119
- "types": "./lib/src/reasoning-adapt.d.ts",
120
- "default": "./lib/src/reasoning-adapt.js"
121
- },
122
- "./registry": {
123
- "types": "./lib/src/registry.d.ts",
124
- "default": "./lib/src/registry.js"
125
- },
126
- "./router": {
127
- "types": "./lib/src/router.d.ts",
128
- "default": "./lib/src/router.js"
129
- },
130
- "./routes": {
131
- "types": "./lib/src/routes.d.ts",
132
- "default": "./lib/src/routes.js"
133
- },
134
- "./translation": {
135
- "types": "./lib/src/translation.d.ts",
136
- "default": "./lib/src/translation.js"
137
- },
138
- "./transport": {
139
- "types": "./lib/src/transport.d.ts",
140
- "default": "./lib/src/transport.js"
141
- },
142
- "./*": {
143
- "types": "./lib/src/*/index.d.ts",
144
- "default": "./lib/src/*/index.js"
145
- },
146
66
  "./package.json": "./package.json"
147
67
  },
148
68
  "files": [
149
- "index.ts",
69
+ "index*.ts",
150
70
  "src",
151
71
  "dist/plugins",
152
72
  "lib"
package/src/models.ts CHANGED
@@ -4,8 +4,7 @@
4
4
  * @module
5
5
  */
6
6
 
7
- import { isChatClass } from "@dbx-tools/model/classes";
8
- import { modelFamily, modelFamilyRank } from "@dbx-tools/model/policy";
7
+ import { isChatClass, modelFamily, modelFamilyRank } from "@dbx-tools/model";
9
8
  import type {
10
9
  CodexModel,
11
10
  CodexModelListResponse,
@@ -8,11 +8,12 @@
8
8
  * @module
9
9
  */
10
10
 
11
- import { learnReasoningLevelsFromError, modelReasoningLevelsFor } from "@dbx-tools/model/metadata";
12
11
  import {
12
+ learnReasoningLevelsFromError,
13
+ modelReasoningLevelsFor,
13
14
  adaptRequestReasoning,
14
15
  parseReasoningLevels,
15
- } from "@dbx-tools/model/reasoning-translation";
16
+ } from "@dbx-tools/model";
16
17
  import { log } from "@dbx-tools/shared-core";
17
18
 
18
19
  const logger = log.logger("appkit/model-gateway/reasoning");
package/src/registry.ts CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  metadata,
10
10
  modelCatalog,
11
11
  policy,
12
- resolve as modelResolve,
12
+ selection,
13
13
  type ListServingEndpointsOptions,
14
14
  } from "@dbx-tools/model";
15
15
  import { log } from "@dbx-tools/shared-core";
@@ -17,7 +17,7 @@ import {
17
17
  ModelClass,
18
18
  type ResolveModelInput,
19
19
  type ServingEndpointSummary,
20
- } from "@dbx-tools/shared-model/contracts";
20
+ } from "@dbx-tools/shared-model";
21
21
  import type {
22
22
  ModelCapabilities,
23
23
  ModelCapabilityOverride,
@@ -114,7 +114,7 @@ export class DatabricksModelRegistry implements ModelRegistry {
114
114
  const endpoints = targets
115
115
  .map((target) => target.endpoint)
116
116
  .filter((endpoint): endpoint is ServingEndpointSummary => endpoint !== undefined);
117
- const resolved = modelResolve.resolveModel(
117
+ const resolved = selection.resolveModel(
118
118
  endpoints,
119
119
  {
120
120
  ...(requested !== undefined ? { explicit: requested } : {}),
@@ -140,14 +140,14 @@ export class DatabricksModelRegistry implements ModelRegistry {
140
140
  .map((target) => target.endpoint)
141
141
  .filter((endpoint): endpoint is ServingEndpointSummary => endpoint !== undefined);
142
142
  const ranked = [
143
- ...modelResolve.lookupModels(
143
+ ...selection.lookupModels(
144
144
  endpoints,
145
145
  { search: query },
146
146
  {
147
147
  preferSystemModels: this.preferSystemModels,
148
148
  },
149
149
  ),
150
- ...modelResolve.lookupModels(
150
+ ...selection.lookupModels(
151
151
  endpoints,
152
152
  {
153
153
  search: query,
package/src/router.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import { policy } from "@dbx-tools/model";
8
- import { object } from "@dbx-tools/shared-core";
8
+ import { isRecord } from "@dbx-tools/shared-core";
9
9
  import type {
10
10
  GatewayRoute,
11
11
  ModelTarget,
@@ -75,17 +75,17 @@ export function resolveRoute(input: ResolveRouteInput): GatewayRoute {
75
75
  export function requestedFeatures(body: Readonly<Record<string, unknown>>): RequestedFeatures {
76
76
  const tools = Array.isArray(body.tools) ? body.tools : [];
77
77
  const toolTypes = tools
78
- .filter((tool): tool is Record<string, unknown> => object.isRecord(tool))
78
+ .filter((tool): tool is Record<string, unknown> => isRecord(tool))
79
79
  .map((tool) => tool.type);
80
- const text = object.isRecord(body.text) ? body.text : {};
81
- const format = object.isRecord(text.format) ? text.format.type : text.format;
80
+ const text = isRecord(body.text) ? body.text : {};
81
+ const format = isRecord(text.format) ? text.format.type : text.format;
82
82
  return {
83
83
  background: body.background === true,
84
84
  customTools: toolTypes.some((type) => type === "custom"),
85
85
  parallelTools: body.parallel_tool_calls === true,
86
86
  previousResponse:
87
87
  typeof body.previous_response_id === "string" && body.previous_response_id.length > 0,
88
- reasoning: object.isRecord(body.reasoning) || body.reasoning_effort !== undefined,
88
+ reasoning: isRecord(body.reasoning) || body.reasoning_effort !== undefined,
89
89
  storage: body.store === true,
90
90
  structuredOutput: format !== undefined && format !== "text",
91
91
  tools: tools.length > 0,
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 { errorUtils, log } from "@dbx-tools/shared-core";
9
+ import { log, toError } 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: errorUtils.toError(error),
46
+ error: 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: errorUtils.toError(error),
115
+ error: toError(error),
116
116
  protocol,
117
117
  });
118
118
  if (response.headersSent) {
@@ -6,16 +6,16 @@
6
6
 
7
7
  import { getExecutionContext } from "@databricks/appkit";
8
8
  import { invoke } from "@dbx-tools/model";
9
- import { decodeGatewayRequest } from "@dbx-tools/model-protocol/gateway-decode";
10
9
  import {
10
+ decodeGatewayRequest,
11
11
  encodeGatewayResponse,
12
12
  encodeGatewayStream,
13
- } from "@dbx-tools/model-protocol/gateway-encode";
13
+ } from "@dbx-tools/model-protocol";
14
14
  import {
15
15
  createDatabricksLanguageModel,
16
16
  type DatabricksLanguageModelProtocol,
17
- } from "@dbx-tools/model-protocol/provider";
18
- import { errorUtils, log } from "@dbx-tools/shared-core";
17
+ } from "@dbx-tools/model-protocol";
18
+ import { log, toError } 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
 
@@ -48,7 +48,7 @@ export async function translateGatewayRequest(
48
48
  abortSignal: signal,
49
49
  onError: ({ error }) => {
50
50
  logger.error("stream failed", {
51
- error: errorUtils.toError(error),
51
+ error: toError(error),
52
52
  model: route.target.id,
53
53
  });
54
54
  },
package/src/transport.ts CHANGED
@@ -5,9 +5,9 @@
5
5
  */
6
6
 
7
7
  import { getExecutionContext } from "@databricks/appkit";
8
- import { workspaceClient } from "@dbx-tools/databricks";
9
- import { errorUtils, log } from "@dbx-tools/shared-core";
10
- import { openaiChat } from "@dbx-tools/shared-model";
8
+ import { refreshWorkspaceClientAuthentication } from "@dbx-tools/databricks";
9
+ import { log, toError } from "@dbx-tools/shared-core";
10
+ import { stripUnsupportedChatFields } from "@dbx-tools/shared-model";
11
11
  import { upstreamUrl, type GatewayRoute } from "@dbx-tools/shared-model-gateway";
12
12
 
13
13
  const logger = log.logger("appkit/model-gateway/transport");
@@ -75,10 +75,7 @@ export async function fetchDatabricks(request: DatabricksTransportRequest): Prom
75
75
  body,
76
76
  signal: request.signal,
77
77
  });
78
- if (
79
- response.status === 401 &&
80
- (await workspaceClient.refreshWorkspaceClientAuthentication(client))
81
- ) {
78
+ if (response.status === 401 && (await refreshWorkspaceClientAuthentication(client))) {
82
79
  logger.debug("retrying rejected upstream credential", {
83
80
  model: request.route.upstreamModel,
84
81
  upstreamProtocol: request.route.upstreamProtocol,
@@ -112,7 +109,7 @@ export async function fetchDatabricks(request: DatabricksTransportRequest): Prom
112
109
  } catch (error) {
113
110
  logger.error("upstream fetch failed", {
114
111
  elapsedMs: Date.now() - startedAt,
115
- error: errorUtils.toError(error),
112
+ error: toError(error),
116
113
  model: request.route.upstreamModel,
117
114
  upstreamProtocol: request.route.upstreamProtocol,
118
115
  });
@@ -127,7 +124,7 @@ export function directDatabricksRequestBody(
127
124
  ): Record<string, unknown> {
128
125
  const sanitized: Record<string, unknown> = { ...body, model: route.upstreamModel };
129
126
  if (route.upstreamProtocol === "databricks-chat") {
130
- openaiChat.stripUnsupportedChatFields(sanitized);
127
+ stripUnsupportedChatFields(sanitized);
131
128
  } else {
132
129
  delete sanitized.parallel_tool_calls;
133
130
  }
@@ -171,7 +168,7 @@ async function logUpstreamFailureBody(
171
168
  } catch (error) {
172
169
  logger.debug("could not read upstream error body", {
173
170
  ...details,
174
- error: errorUtils.toError(error),
171
+ error: toError(error),
175
172
  });
176
173
  } finally {
177
174
  await reader.cancel().catch(() => undefined);