@dbx-tools/appkit-web-search 0.6.223 → 0.6.225
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -26
- package/index.ts +2 -2
- package/lib/index.d.ts +2 -2
- package/lib/index.js +2 -2
- package/lib/src/fetch.d.ts +2 -2
- package/lib/src/fetch.js +6 -4
- package/lib/src/html-text.d.ts +4 -8
- package/lib/src/html-text.js +27 -36
- package/lib/src/plugin.d.ts +24 -27
- package/lib/src/plugin.js +30 -35
- package/lib/src/runtime.d.ts +29 -28
- package/lib/src/runtime.js +38 -40
- package/lib/src/scrape.d.ts +5 -3
- package/lib/src/scrape.js +17 -22
- package/lib/src/search.d.ts +2 -2
- package/lib/src/search.js +10 -7
- package/lib/src/tool.d.ts +11 -5
- package/lib/src/tool.js +22 -16
- package/package.json +10 -6
- package/src/fetch.ts +5 -3
- package/src/html-text.ts +28 -37
- package/src/plugin.ts +32 -39
- package/src/runtime.ts +61 -39
- package/src/scrape.ts +16 -20
- package/src/search.ts +14 -5
- package/src/tool.ts +28 -16
package/lib/src/search.d.ts
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* @module
|
|
22
22
|
*/
|
|
23
23
|
import { invoke, serving } from "@dbx-tools/model";
|
|
24
|
-
import { type
|
|
24
|
+
import { type WebSearchRuntimeInput } from "./runtime.ts";
|
|
25
25
|
import type { WebSearchRequest, WebSearchResult } from "./schema.ts";
|
|
26
26
|
type WorkspaceClientLike = serving.WorkspaceClientLike & invoke.AuthenticatingClientLike;
|
|
27
27
|
/** Context a search needs from the caller: the OBO client + workspace host. */
|
|
@@ -45,5 +45,5 @@ export declare function resolveWebSearchContext(): Promise<WebSearchContext>;
|
|
|
45
45
|
*
|
|
46
46
|
* `signal` cancels the whole call, including the in-flight serving request.
|
|
47
47
|
*/
|
|
48
|
-
export declare function runWebSearch(request: WebSearchRequest,
|
|
48
|
+
export declare function runWebSearch(request: WebSearchRequest, runtimeOrConfig: WebSearchRuntimeInput, ctx: WebSearchContext, signal?: AbortSignal): Promise<WebSearchResult>;
|
|
49
49
|
export {};
|
package/lib/src/search.js
CHANGED
|
@@ -27,7 +27,7 @@ import { openaiChat, openaiResponses } from "@dbx-tools/shared-model";
|
|
|
27
27
|
import { MODEL_ENV, SERVING_ENDPOINT_ENV } from "./config.js";
|
|
28
28
|
import { toCallSettings, webSearchExecuteDefaults } from "./defaults.js";
|
|
29
29
|
import { detectWebSearchProvider, supportsWebSearch, webSearchToolSpec } from "./provider.js";
|
|
30
|
-
import { executeRead } from "./runtime.js";
|
|
30
|
+
import { executeRead, toWebSearchRuntime, } from "./runtime.js";
|
|
31
31
|
import { runScrapeSearch } from "./scrape.js";
|
|
32
32
|
const logger = log.logger("web-search/search");
|
|
33
33
|
const { resolveModel } = resolve;
|
|
@@ -131,8 +131,9 @@ async function resolveWebSearchModel(ctx, config, requested) {
|
|
|
131
131
|
* directly; the SDK raises an `ApiError` that carries the status under
|
|
132
132
|
* inconsistent keys, which is guesswork by comparison.
|
|
133
133
|
*/
|
|
134
|
-
async function postServing(ctx, url, body,
|
|
135
|
-
const
|
|
134
|
+
async function postServing(ctx, url, body, runtime, cacheKey, signal) {
|
|
135
|
+
const { config } = runtime;
|
|
136
|
+
const payload = await executeRead(runtime, "serving-request", toCallSettings(webSearchExecuteDefaults, config.timeoutMs, cacheKey), async (executeSignal) => {
|
|
136
137
|
const response = await fetch(url, {
|
|
137
138
|
method: "POST",
|
|
138
139
|
headers: {
|
|
@@ -207,13 +208,15 @@ function fromChatPayload(payload) {
|
|
|
207
208
|
*
|
|
208
209
|
* `signal` cancels the whole call, including the in-flight serving request.
|
|
209
210
|
*/
|
|
210
|
-
export async function runWebSearch(request,
|
|
211
|
+
export async function runWebSearch(request, runtimeOrConfig, ctx, signal) {
|
|
212
|
+
const runtime = toWebSearchRuntime(runtimeOrConfig);
|
|
213
|
+
const { config } = runtime;
|
|
211
214
|
const modelId = await resolveWebSearchModel(ctx, config, request.model);
|
|
212
215
|
if (modelId === null) {
|
|
213
216
|
// No native web-search model deployed in this workspace.
|
|
214
217
|
if (config.scrapeFallback) {
|
|
215
218
|
logger.info("no-native-model:scrape-fallback", { query: request.query });
|
|
216
|
-
return runScrapeSearch(request,
|
|
219
|
+
return runScrapeSearch(request, runtime, signal);
|
|
217
220
|
}
|
|
218
221
|
throw ConfigurationError.resourceNotFound("Web-search-capable serving endpoint", "No GPT/Gemini endpoint is deployed in this workspace and the scrape fallback is " +
|
|
219
222
|
`disabled. Deploy a supported endpoint, set model or ${MODEL_ENV}, or enable the ` +
|
|
@@ -233,7 +236,7 @@ export async function runWebSearch(request, config, ctx, signal) {
|
|
|
233
236
|
messages: [{ role: "user", content: request.query }],
|
|
234
237
|
tools: [spec.tool],
|
|
235
238
|
};
|
|
236
|
-
const payload = await postServing(ctx, url, body,
|
|
239
|
+
const payload = await postServing(ctx, url, body, runtime, ["web-search", "serving", spec.api, modelId, request.query], signal);
|
|
237
240
|
const { answer, citations } = spec.api === "responses" ? fromResponsesPayload(payload) : fromChatPayload(payload);
|
|
238
241
|
const permitted = citations.filter((c) => config.allowList.allows(c.url));
|
|
239
242
|
const dropped = citations.length - permitted.length;
|
|
@@ -248,4 +251,4 @@ export async function runWebSearch(request, config, ctx, signal) {
|
|
|
248
251
|
});
|
|
249
252
|
return { query: request.query, answer, citations: trimmed, model: modelId };
|
|
250
253
|
}
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixlQUFlLEdBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFnQyxNQUFNLGFBQWEsQ0FBQztBQUM1RixPQUFPLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHOUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7QUFDakMsTUFBTSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsT0FBTyxDQUFDO0FBRXpDOzs7OztHQUtHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7QUFFbkMsK0VBQStFO0FBQy9FLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0FBRWhDLG9FQUFvRTtBQUNwRSxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQVFoQzs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsdUJBQXVCO0lBQzNDLE1BQU0sR0FBRyxHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsS0FBSyxVQUFVLHFCQUFxQixDQUNsQyxHQUFxQixFQUNyQixNQUErQixFQUMvQixTQUE2QjtJQUU3QixNQUFNLFNBQVMsR0FBRyxNQUFNLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25FLDhEQUE4RDtJQUM5RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNuRSxNQUFNLE1BQU0sR0FBRyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztJQUN6QyxNQUFNLGVBQWUsR0FDbkIsU0FBUyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLFNBQVMsQ0FBQztJQUVqRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ1gsd0RBQXdEO1FBQ3hELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxZQUFZLENBQUMsT0FBTyxFQUFFO1lBQ3hDLFFBQVEsRUFBRSxNQUFNO1lBQ2hCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLGNBQWM7U0FDakMsQ0FBQyxDQUFDO1FBQ0gsMEVBQTBFO1FBQzFFLDJFQUEyRTtRQUMzRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JGLElBQUksTUFBTTtZQUFFLE9BQU8sT0FBTyxDQUFDO1FBQzNCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFO2dCQUM3QyxNQUFNLEVBQUUsb0JBQW9CO2dCQUM1QixRQUFRO2FBQ1QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLE1BQU0sZUFBZSxDQUFDLFlBQVksQ0FDaEMsT0FBTyxFQUNQLE1BQU0sRUFDTixxREFBcUQsUUFBUSxHQUFHLENBQ2pFLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sa0JBQWtCLENBQUMsZ0JBQWdCLENBQ3ZDLHFDQUFxQyxFQUNyQywwQ0FBMEMsUUFBUSxrQkFBa0IsU0FBUyxrQkFBa0IsQ0FDaEcsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV0Qyw0RUFBNEU7SUFDNUUsd0VBQXdFO0lBQ3hFLFlBQVk7SUFDWixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRTtRQUN4QyxTQUFTLEVBQUUsTUFBTSxDQUFDLGNBQWM7UUFDaEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ25CLFNBQVMsRUFBRSxNQUFNLENBQUMsY0FBYztLQUNqQyxDQUFDLENBQUM7SUFDSCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsS0FBSyxVQUFVLFdBQVcsQ0FDeEIsR0FBcUIsRUFDckIsR0FBVyxFQUNYLElBQWEsRUFDYixNQUErQixFQUMvQixRQUFzQyxFQUN0QyxNQUFvQjtJQUVwQixNQUFNLE9BQU8sR0FBRyxNQUFNLFdBQVcsQ0FDL0IsaUJBQWlCLEVBQ2pCLGNBQWMsQ0FBQyx3QkFBd0IsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUNwRSxLQUFLLEVBQUUsYUFBYSxFQUFvQixFQUFFO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNoQyxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDUCxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekMsTUFBTSxFQUFFLGtCQUFrQjtnQkFDMUIsY0FBYyxFQUFFLGtCQUFrQjthQUNuQztZQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUMxQixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3BELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsc0VBQXNFO1lBQ3RFLHlEQUF5RDtZQUN6RCxNQUFNLFNBQVMsR0FDYixRQUFRLENBQUMsTUFBTSxJQUFJLG1CQUFtQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssbUJBQW1CLENBQUM7WUFDcEYsTUFBTSxPQUFPLEdBQUcsK0RBQStELFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNsRyxNQUFNLFNBQVM7Z0JBQ2IsQ0FBQyxDQUFDLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDeEUsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDLEVBQ0QsTUFBTSxDQUNQLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ2pELENBQUM7QUFFRCxpRkFBaUY7QUFFakY7OztHQUdHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxPQUFnQztJQUk1RCxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxPQUFnQztJQUl2RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUYsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RCxNQUFNLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQzFDLGdGQUFnRjtJQUNoRixNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQy9CLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBVSxFQUFFLEtBQWEsRUFBUSxFQUFFO1FBQ2hELElBQUksS0FBSyxHQUFHLHdCQUF3QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPO1FBQ3BFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzRCxJQUFJLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO2dCQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDLENBQUM7SUFDRixLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxPQUF5QixFQUN6QixNQUErQixFQUMvQixHQUFxQixFQUNyQixNQUFvQjtJQUVwQixNQUFNLE9BQU8sR0FBRyxNQUFNLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhFLElBQUksT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3JCLHlEQUF5RDtRQUN6RCxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELE1BQU0sa0JBQWtCLENBQUMsZ0JBQWdCLENBQ3ZDLHFDQUFxQyxFQUNyQyxrRkFBa0Y7WUFDaEYsdURBQXVELFNBQVMsa0JBQWtCO1lBQ2xGLDBDQUEwQyxDQUM3QyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsNkJBQTZCO0lBQ2pGLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFaEUsTUFBTSxHQUFHLEdBQ1AsSUFBSSxDQUFDLEdBQUcsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sSUFBSSxHQUNSLElBQUksQ0FBQyxHQUFHLEtBQUssV0FBVztRQUN0QixDQUFDLENBQUM7WUFDRSxLQUFLLEVBQUUsT0FBTztZQUNkLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pELEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDbkI7UUFDSCxDQUFDLENBQUM7WUFDRSxLQUFLLEVBQUUsT0FBTztZQUNkLFFBQVEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BELEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDbkIsQ0FBQztJQUVSLE1BQU0sT0FBTyxHQUFHLE1BQU0sV0FBVyxDQUMvQixHQUFHLEVBQ0gsR0FBRyxFQUNILElBQUksRUFDSixNQUFNLEVBQ04sQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFDM0QsTUFBTSxDQUNQLENBQUM7SUFFRixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUN6QixJQUFJLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV0RixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hELE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFO1FBQ3ZCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztRQUNwQixLQUFLLEVBQUUsT0FBTztRQUNkLFFBQVE7UUFDUixTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDM0IsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0MsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0tBQ3pCLENBQUMsQ0FBQztJQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDOUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2ViIHNlYXJjaCBiYWNrZWQgYnkgdGhlIERhdGFicmlja3MgTW9kZWwgU2VydmluZyBuYXRpdmUgd2ViLXNlYXJjaCB0b29sLlxuICpcbiAqIFVubGlrZSBhIHNjcmFwaW5nIGNsaWVudCwgdGhlIHNlYXJjaCBydW5zICppbnNpZGUqIGEgbW9kZWwgY2FsbDogd2UgUE9TVCB0aGVcbiAqIHF1ZXJ5IHRvIHRoZSB3b3Jrc3BhY2UncyBzZXJ2aW5nIGVuZHBvaW50IHdpdGggdGhlIHByb3ZpZGVyJ3Mgd2ViLXNlYXJjaFxuICogdG9vbCBzcGVjIGF0dGFjaGVkLCBhbmQgdGhlIG1vZGVsIHNlYXJjaGVzIHRoZSB3ZWIgYW5kIHdyaXRlcyB0aGUgYW5zd2VyLlxuICoge0BsaW5rIHJ1bldlYlNlYXJjaH06XG4gKlxuICogICAxLiBSZXNvbHZlcyBhIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCBJTkRFUEVOREVOVExZIG9mIHRoZSBjYWxsaW5nXG4gKiAgICAgIGFnZW50J3MgY2hhdCBtb2RlbCAodGhlIGFnZW50IG1heSBydW4gb24gYSBtb2RlbCB3aXRob3V0IHdlYiBzZWFyY2gpLlxuICogICAgICBBIHBpbm5lZCBgbW9kZWxgIChyZXF1ZXN0IG9yIGNvbmZpZykgaXMgZnV6enktbWF0Y2hlZDsgb3RoZXJ3aXNlIHRoZVxuICogICAgICBjb25maWd1cmVkIGZhbGxiYWNrIG9yZGVyIChHZW1pbmksIHRoZW4gR1BUKSBpcyB3YWxrZWQgdG8gdGhlIGZpcnN0XG4gKiAgICAgIHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludCB0aGF0IGV4aXN0cy4gQW4gZXhwbGljaXQgYnV0IHVuc3VwcG9ydGVkXG4gKiAgICAgIG1vZGVsIGlzIGEgaGFyZCBlcnJvciwgbm90IGEgc2lsZW50IGZhbGxiYWNrLlxuICogICAyLiBQT1NUcyB0byB0aGUgcHJvdmlkZXIncyBSRVNUIHN1cmZhY2UgKGAvc2VydmluZy1lbmRwb2ludHMvcmVzcG9uc2VzYFxuICogICAgICBmb3IgT3BlbkFJLCBgL3NlcnZpbmctZW5kcG9pbnRzL2NoYXQvY29tcGxldGlvbnNgIGZvciBHZW1pbmkpIHdpdGggdGhlXG4gKiAgICAgIG1hcHBlZCB0b29sIHNwZWMsIGF1dGhlbnRpY2F0ZWQgYXMgdGhlIE9CTyBjYWxsZXIuXG4gKiAgIDMuIFJldHVybnMgdGhlIHN5bnRoZXNpemVkIGFuc3dlciBwbHVzIHRoZSBjaXRlZCBzb3VyY2VzLCB3aXRoIGNpdGF0aW9uc1xuICogICAgICBzaWxlbnRseSBmaWx0ZXJlZCB0aHJvdWdoIHRoZSBjb25maWd1cmVkIFVSTCBhbGxvdy1saXN0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgRXhlY3V0aW9uRXJyb3IsXG4gIGdldEV4ZWN1dGlvbkNvbnRleHQsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgaW52b2tlLCByZXNvbHZlLCBzZXJ2aW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IGxvZywgb2JqZWN0LCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgb3BlbmFpQ2hhdCwgb3BlbmFpUmVzcG9uc2VzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyBNT0RFTF9FTlYsIFNFUlZJTkdfRU5EUE9JTlRfRU5WLCB0eXBlIFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyB0b0NhbGxTZXR0aW5ncywgd2ViU2VhcmNoRXhlY3V0ZURlZmF1bHRzIH0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcbmltcG9ydCB7IGRldGVjdFdlYlNlYXJjaFByb3ZpZGVyLCBzdXBwb3J0c1dlYlNlYXJjaCwgd2ViU2VhcmNoVG9vbFNwZWMgfSBmcm9tIFwiLi9wcm92aWRlci50c1wiO1xuaW1wb3J0IHsgZXhlY3V0ZVJlYWQgfSBmcm9tIFwiLi9ydW50aW1lLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdlYlNlYXJjaENpdGF0aW9uLCBXZWJTZWFyY2hSZXF1ZXN0LCBXZWJTZWFyY2hSZXN1bHQgfSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcbmltcG9ydCB7IHJ1blNjcmFwZVNlYXJjaCB9IGZyb20gXCIuL3NjcmFwZS50c1wiO1xuXG50eXBlIFdvcmtzcGFjZUNsaWVudExpa2UgPSBzZXJ2aW5nLldvcmtzcGFjZUNsaWVudExpa2UgJiBpbnZva2UuQXV0aGVudGljYXRpbmdDbGllbnRMaWtlO1xuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIndlYi1zZWFyY2gvc2VhcmNoXCIpO1xuY29uc3QgeyByZXNvbHZlTW9kZWwgfSA9IHJlc29sdmU7XG5jb25zdCB7IGxpc3RTZXJ2aW5nRW5kcG9pbnRzIH0gPSBzZXJ2aW5nO1xuXG4vKipcbiAqIEhvdyBkZWVwIHRoZSBncm91bmRpbmctbWV0YWRhdGEgd2FsayBkZXNjZW5kcy4gR2VtaW5pIG5lc3RzIGl0cyBzb3VyY2VzIGFcbiAqIGhhbmRmdWwgb2YgbGV2ZWxzIGRvd24gYW5kIHRoZSBzaGFwZSB2YXJpZXMgYnkgbW9kZWwgdmVyc2lvbiwgc28gdGhlIHdhbGtcbiAqIGlzIGdlbmVyaWM7IHRoZSBib3VuZCBpcyB3aGF0IGtlZXBzIGEgcGF0aG9sb2dpY2FsIHBheWxvYWQgZnJvbSB0dXJuaW5nIGl0XG4gKiBpbnRvIGEgZnVsbCB0cmF2ZXJzYWwgb2YgdGhlIHJlc3BvbnNlLlxuICovXG5jb25zdCBNQVhfR1JPVU5ESU5HX1dBTEtfREVQVEggPSA2O1xuXG4vKiogTG93ZXN0IEhUVFAgc3RhdHVzIHRyZWF0ZWQgYXMgYSBzZXJ2ZXItc2lkZSAocmV0cnlhYmxlKSBzZXJ2aW5nIGZhaWx1cmUuICovXG5jb25zdCBTRVJWRVJfRVJST1JfU1RBVFVTID0gNTAwO1xuXG4vKiogU3RhdHVzIE1vZGVsIFNlcnZpbmcgdXNlcyB0byBzaGVkIGxvYWQ7IHJldHJ5YWJsZSBsaWtlIGEgNXh4LiAqL1xuY29uc3QgUkFURV9MSU1JVEVEX1NUQVRVUyA9IDQyOTtcblxuLyoqIENvbnRleHQgYSBzZWFyY2ggbmVlZHMgZnJvbSB0aGUgY2FsbGVyOiB0aGUgT0JPIGNsaWVudCArIHdvcmtzcGFjZSBob3N0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJTZWFyY2hDb250ZXh0IHtcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnRMaWtlO1xuICBob3N0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgT0JPIHdvcmtzcGFjZSBjbGllbnQgKyBob3N0IGZyb20gdGhlIGFjdGl2ZSBBcHBLaXQgZXhlY3V0aW9uXG4gKiBjb250ZXh0LiBJbnNpZGUgYGFnZW50LnN0cmVhbWAncyBgYXNVc2VyKHJlcSlgIHNjb3BlIHRoaXMgaGl0cyB0aGUgc2VydmluZ1xuICogZW5kcG9pbnQgYXMgdGhlIHJlcXVlc3RpbmcgdXNlcjsgb3V0c2lkZSBhIHVzZXIgY29udGV4dCBBcHBLaXQgZmFsbHMgYmFjayB0b1xuICogdGhlIHNlcnZpY2UgcHJpbmNpcGFsLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVdlYlNlYXJjaENvbnRleHQoKTogUHJvbWlzZTxXZWJTZWFyY2hDb250ZXh0PiB7XG4gIGNvbnN0IGN0eCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKTtcbiAgY29uc3QgaG9zdCA9IChhd2FpdCBjdHguY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIHJldHVybiB7IGNsaWVudDogY3R4LmNsaWVudCwgaG9zdCB9O1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSB3ZWItc2VhcmNoLWNhcGFibGUgbW9kZWwgYWdhaW5zdCB0aGUgTElWRSB3b3Jrc3BhY2UgY2F0YWxvZ3VlIC0gc29cbiAqIHdlIG5ldmVyIHJldHVybiBhbiBlbmRwb2ludCBpZCB0aGF0IGlzbid0IGFjdHVhbGx5IGRlcGxveWVkICh0aGUgXCJlbmRwb2ludFxuICogZG9lcyBub3QgZXhpc3RcIiBmYWlsdXJlIGEgaGFyZGNvZGVkIGZhbGxiYWNrIGlkIHdvdWxkIGNhdXNlKS4gUmV1c2VzXG4gKiBgQGRieC10b29scy9tb2RlbGAncyBleGlzdGluZyBjYXRhbG9ndWUgKyByZXNvbHZlciByYXRoZXIgdGhhbiBhIGN1c3RvbVxuICogbG9va3VwOiB7QGxpbmsgbGlzdFNlcnZpbmdFbmRwb2ludHN9IGxpc3RzIHRoZSBlbmRwb2ludHMgKGNhY2hlZCksIGFuZCB3ZVxuICogcmVzdHJpY3QgdGhlIGNhbmRpZGF0ZSBzZXQgdG8gdGhlIHtAbGluayBzdXBwb3J0c1dlYlNlYXJjaH0gb25lcyBiZWZvcmVcbiAqIHtAbGluayByZXNvbHZlTW9kZWx9IGZ1enp5LXBpY2tzIHdpdGhpbiBpdC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBjaG9zZW4gZW5kcG9pbnQgaWQsIG9yIGBudWxsYCB3aGVuIHRoZSB3b3Jrc3BhY2UgaGFzIG5vXG4gKiB3ZWItc2VhcmNoLWNhcGFibGUgbW9kZWwgZGVwbG95ZWQgKHRoZSBjYWxsZXIgdGhlbiB1c2VzIHRoZSBzY3JhcGVcbiAqIGZhbGxiYWNrKS4gQSBwaW4gdGhlIGNhbGxlciBjaG9zZSBkZWxpYmVyYXRlbHkgLSB0aGUgcmVxdWVzdCdzIGBtb2RlbGAsIHRoZVxuICogcGx1Z2luJ3MgYG1vZGVsYCwgb3IgYFdFQl9TRUFSQ0hfTU9ERUxgIC0gdGhyb3dzIHdoZW4gaXQgcmVzb2x2ZXMgdG8gYW5cbiAqIHVuc3VwcG9ydGVkIC8gYWJzZW50IGVuZHBvaW50LCBzbyBhIGJhZCBwaW4gc3VyZmFjZXMgcmF0aGVyIHRoYW4gc2lsZW50bHlcbiAqIGRlZ3JhZGluZy4gQSBwaW4gaW5oZXJpdGVkIGZyb20gdGhlIHNoYXJlZCBgREFUQUJSSUNLU19TRVJWSU5HX0VORFBPSU5UX05BTUVgXG4gKiBiaW5kaW5nIGlzIG9ubHkgYSBwcmVmZXJlbmNlOiB0aGF0IGVuZHBvaW50IGlzIHRoZSBhcHAncyBzZXJ2aW5nIGVuZHBvaW50LFxuICogbm90IG5lY2Vzc2FyaWx5IGEgd2ViLXNlYXJjaC1jYXBhYmxlIG9uZSwgc28gYW4gdW51c2FibGUgdmFsdWUgZmFsbHMgdGhyb3VnaFxuICogdG8gdGhlIGZhbGxiYWNrIG9yZGVyLlxuICovXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlV2ViU2VhcmNoTW9kZWwoXG4gIGN0eDogV2ViU2VhcmNoQ29udGV4dCxcbiAgY29uZmlnOiBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyxcbiAgcmVxdWVzdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgbGlzdFNlcnZpbmdFbmRwb2ludHMoY3R4LmNsaWVudCwgY3R4Lmhvc3QpO1xuICAvLyBPbmx5IGRlcGxveWVkLCB3ZWItc2VhcmNoLWNhcGFibGUgZW5kcG9pbnRzIGFyZSBjYW5kaWRhdGVzLlxuICBjb25zdCBjYXBhYmxlID0gZW5kcG9pbnRzLmZpbHRlcigoZSkgPT4gc3VwcG9ydHNXZWJTZWFyY2goZS5uYW1lKSk7XG4gIGNvbnN0IHBpbm5lZCA9IHJlcXVlc3RlZCA/PyBjb25maWcubW9kZWw7XG4gIGNvbnN0IHBpbklzRGVsaWJlcmF0ZSA9XG4gICAgcmVxdWVzdGVkICE9PSB1bmRlZmluZWQgfHwgY29uZmlnLm1vZGVsU291cmNlID09PSBcImNvbmZpZ1wiIHx8IGNvbmZpZy5tb2RlbFNvdXJjZSA9PT0gTU9ERUxfRU5WO1xuXG4gIGlmIChwaW5uZWQpIHtcbiAgICAvLyBSZXNvbHZlIHRoZSBleHBsaWNpdCBhc2sgd2l0aGluIHRoZSBjYXBhYmxlIHNldCBvbmx5LlxuICAgIGNvbnN0IHsgbW9kZWxJZCB9ID0gcmVzb2x2ZU1vZGVsKGNhcGFibGUsIHtcbiAgICAgIGV4cGxpY2l0OiBwaW5uZWQsXG4gICAgICBmdXp6eTogY29uZmlnLmZ1enp5LFxuICAgICAgdGhyZXNob2xkOiBjb25maWcuZnV6enlUaHJlc2hvbGQsXG4gICAgfSk7XG4gICAgLy8gcmVzb2x2ZU1vZGVsIHJldHVybnMgdGhlIGlucHV0IHZlcmJhdGltIG9uIG5vIG1hdGNoOyByZXF1aXJlIGl0IHRvIGJlIGFcbiAgICAvLyByZWFsIGNhcGFibGUgZW5kcG9pbnQgc28gYSBiYWQgcGluIGlzIGEgY2xlYXIgZXJyb3IsIG5vdCBhIHBoYW50b20gY2FsbC5cbiAgICBjb25zdCB1c2FibGUgPSBjYXBhYmxlLnNvbWUoKGUpID0+IGUubmFtZSA9PT0gbW9kZWxJZCkgJiYgc3VwcG9ydHNXZWJTZWFyY2gobW9kZWxJZCk7XG4gICAgaWYgKHVzYWJsZSkgcmV0dXJuIG1vZGVsSWQ7XG4gICAgY29uc3QgZGVwbG95ZWQgPSBjYXBhYmxlLm1hcCgoZSkgPT4gZS5uYW1lKS5qb2luKFwiLCBcIikgfHwgXCJub25lXCI7XG4gICAgaWYgKCFwaW5Jc0RlbGliZXJhdGUpIHtcbiAgICAgIGxvZ2dlci5pbmZvKFwic2hhcmVkLWVuZHBvaW50LW5vdC13ZWItY2FwYWJsZVwiLCB7XG4gICAgICAgIGVudlZhcjogU0VSVklOR19FTkRQT0lOVF9FTlYsXG4gICAgICAgIGRlcGxveWVkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgICAgXCJtb2RlbFwiLFxuICAgICAgICBwaW5uZWQsXG4gICAgICAgIGBhIGRlcGxveWVkIHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludCAoZGVwbG95ZWQ6ICR7ZGVwbG95ZWR9KWAsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICAgICAgXCJXZWItc2VhcmNoLWNhcGFibGUgc2VydmluZyBlbmRwb2ludFwiLFxuICAgICAgICBgRGVwbG95ZWQgd2ViLXNlYXJjaC1jYXBhYmxlIGVuZHBvaW50czogJHtkZXBsb3llZH0uIFNldCBtb2RlbCBvciAke01PREVMX0VOVn0gdG8gb25lIG9mIHRoZW0uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNhcGFibGUubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICAvLyBOb3RoaW5nIHVzYWJsZSBwaW5uZWQ6IHByZWZlciB0aGUgY29uZmlndXJlZCBmYWxsYmFjayBvcmRlciAoR2VtaW5pLCB0aGVuXG4gIC8vIEdQVCkgd2hlbiB0aG9zZSBpZHMgYXJlIGFjdHVhbGx5IGRlcGxveWVkOyBlbHNlIHRha2UgdGhlIGJlc3QgY2FwYWJsZVxuICAvLyBlbmRwb2ludC5cbiAgY29uc3QgeyBtb2RlbElkIH0gPSByZXNvbHZlTW9kZWwoY2FwYWJsZSwge1xuICAgIGZhbGxiYWNrczogY29uZmlnLm1vZGVsRmFsbGJhY2tzLFxuICAgIGZ1enp5OiBjb25maWcuZnV6enksXG4gICAgdGhyZXNob2xkOiBjb25maWcuZnV6enlUaHJlc2hvbGQsXG4gIH0pO1xuICByZXR1cm4gY2FwYWJsZS5zb21lKChlKSA9PiBlLm5hbWUgPT09IG1vZGVsSWQpID8gbW9kZWxJZCA6IChjYXBhYmxlWzBdPy5uYW1lID8/IG51bGwpO1xufVxuXG4vKipcbiAqIFBPU1QgYSBzZXJ2aW5nIHJlcXVlc3QgYXMgdGhlIE9CTyBjYWxsZXIgYW5kIHJldHVybiB0aGUgcGFyc2VkIEpTT04gYm9keS5cbiAqXG4gKiBBdXRoIGhlYWRlcnMgYXJlIG1pbnRlZCBwZXIgY2FsbCBmcm9tIHRoZSBPQk8gY2xpZW50J3MgU0RLIGNvbmZpZywgd2hpY2hcbiAqIHJlZnJlc2hlcyB0aGUgdG9rZW4gd2hlbiBpdCBpcyBjbG9zZSB0byBleHBpcnksIHNvIHRoZSByZXF1ZXN0IGNhcnJpZXMgdGhlXG4gKiByZXF1ZXN0aW5nIHVzZXIncyBpZGVudGl0eS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBvbmUgRGF0YWJyaWNrcyBjYWxsIGluIHRoZSByZXBvIHRoYXQgZG9lcyBub3QgZ28gdGhyb3VnaFxuICogYGFwaUNsaWVudC5yZXF1ZXN0YCArIGBkYXRhYnJpY2tzLnRvQ29udGV4dGAgKHdoaWNoIGRvZXMgZm9yd2FyZFxuICogY2FuY2VsbGF0aW9uKS4gUmV0cnkgY2xhc3NpZmljYXRpb24gaGVyZSBoYXMgdG8gZGlzdGluZ3Vpc2ggYSBsb2FkLXNoZWQgb3JcbiAqIHNlcnZlciBmYXVsdCBmcm9tIHRoaXMgcmVxdWVzdCdzIG93biA0eHgsIGFuZCBgZmV0Y2hgIGV4cG9zZXMgdGhlIEhUVFAgc3RhdHVzXG4gKiBkaXJlY3RseTsgdGhlIFNESyByYWlzZXMgYW4gYEFwaUVycm9yYCB0aGF0IGNhcnJpZXMgdGhlIHN0YXR1cyB1bmRlclxuICogaW5jb25zaXN0ZW50IGtleXMsIHdoaWNoIGlzIGd1ZXNzd29yayBieSBjb21wYXJpc29uLlxuICovXG5hc3luYyBmdW5jdGlvbiBwb3N0U2VydmluZyhcbiAgY3R4OiBXZWJTZWFyY2hDb250ZXh0LFxuICB1cmw6IHN0cmluZyxcbiAgYm9keTogdW5rbm93bixcbiAgY29uZmlnOiBSZXNvbHZlZFdlYlNlYXJjaENvbmZpZyxcbiAgY2FjaGVLZXk6IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIpW10sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBjb25zdCBwYXlsb2FkID0gYXdhaXQgZXhlY3V0ZVJlYWQoXG4gICAgXCJzZXJ2aW5nLXJlcXVlc3RcIixcbiAgICB0b0NhbGxTZXR0aW5ncyh3ZWJTZWFyY2hFeGVjdXRlRGVmYXVsdHMsIGNvbmZpZy50aW1lb3V0TXMsIGNhY2hlS2V5KSxcbiAgICBhc3luYyAoZXhlY3V0ZVNpZ25hbCk6IFByb21pc2U8dW5rbm93bj4gPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLihhd2FpdCBpbnZva2UuYXV0aEhlYWRlcnMoY3R4LmNsaWVudCkpLFxuICAgICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgICAuLi4oZXhlY3V0ZVNpZ25hbCA/IHsgc2lnbmFsOiBleGVjdXRlU2lnbmFsIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgLy8gTG9hZC1zaGVkZGluZyBhbmQgc2VydmVyIGZhdWx0cyBhcmUgd29ydGggYW5vdGhlciBhdHRlbXB0OyBhIDR4eCBpc1xuICAgICAgICAvLyB0aGlzIHJlcXVlc3QncyBvd24gcHJvYmxlbSwgc28gaXQgbXVzdCBub3QgYmUgcmV0cmllZC5cbiAgICAgICAgY29uc3QgcmV0cnlhYmxlID1cbiAgICAgICAgICByZXNwb25zZS5zdGF0dXMgPj0gU0VSVkVSX0VSUk9SX1NUQVRVUyB8fCByZXNwb25zZS5zdGF0dXMgPT09IFJBVEVfTElNSVRFRF9TVEFUVVM7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgd2ViLXNlYXJjaDogTW9kZWwgU2VydmluZyByZWplY3RlZCB0aGUgc2VhcmNoIHJlcXVlc3QgKEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9KWA7XG4gICAgICAgIHRocm93IHJldHJ5YWJsZVxuICAgICAgICAgID8gbmV3IENvbm5lY3Rpb25FcnJvcihtZXNzYWdlLCB7IGNvbnRleHQ6IHsgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMgfSB9KVxuICAgICAgICAgIDogbmV3IEV4ZWN1dGlvbkVycm9yKG1lc3NhZ2UsIHsgY29udGV4dDogeyBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9IH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICB9LFxuICAgIHNpZ25hbCxcbiAgKTtcbiAgcmV0dXJuIG9iamVjdC5pc1JlY29yZChwYXlsb2FkKSA/IHBheWxvYWQgOiB7fTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlc3BvbnNlIGV4dHJhY3Rpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogRXh0cmFjdCBhbnN3ZXIgdGV4dCBhbmQgY2l0YXRpb25zIGZyb20gYW4gT3BlbkFJIFJlc3BvbnNlcyBBUEkgcGF5bG9hZCB0aHJvdWdoXG4gKiB0aGUgc2hhcmVkIHJlYWRlciBpbiBgQGRieC10b29scy9zaGFyZWQtbW9kZWxgLlxuICovXG5mdW5jdGlvbiBmcm9tUmVzcG9uc2VzUGF5bG9hZChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHtcbiAgYW5zd2VyOiBzdHJpbmc7XG4gIGNpdGF0aW9uczogV2ViU2VhcmNoQ2l0YXRpb25bXTtcbn0ge1xuICBjb25zdCB7IHRleHQsIGNpdGF0aW9ucyB9ID0gb3BlbmFpUmVzcG9uc2VzLnJlYWRSZXNwb25zZXNPdXRwdXQocGF5bG9hZCk7XG4gIHJldHVybiB7IGFuc3dlcjogdGV4dCwgY2l0YXRpb25zIH07XG59XG5cbi8qKlxuICogRXh0cmFjdCBhbnN3ZXIgdGV4dCArIGNpdGF0aW9ucyBmcm9tIGEgQ2hhdCBDb21wbGV0aW9ucyBwYXlsb2FkIChHZW1pbmkgdmlhXG4gKiBgZ29vZ2xlX3NlYXJjaGApLiBUaGUgYW5zd2VyIGlzIGBjaG9pY2VzWzBdLm1lc3NhZ2UuY29udGVudGA7IGdyb3VuZGluZ1xuICogc291cmNlcywgd2hlbiBwcmVzZW50LCBzdXJmYWNlIHVuZGVyIGBjaG9pY2VzWzBdLm1lc3NhZ2VgIGdyb3VuZGluZ1xuICogbWV0YWRhdGEgKGJlc3QtZWZmb3J0IC0gc2hhcGVzIHZhcnksIHNvIHdlIHNjYW4gZm9yIHVybC1iZWFyaW5nIGVudHJpZXMpLlxuICovXG5mdW5jdGlvbiBmcm9tQ2hhdFBheWxvYWQocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB7XG4gIGFuc3dlcjogc3RyaW5nO1xuICBjaXRhdGlvbnM6IFdlYlNlYXJjaENpdGF0aW9uW107XG59IHtcbiAgY29uc3QgY2hvaWNlcyA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5jaG9pY2VzKSA/IHBheWxvYWQuY2hvaWNlcyA6IFtdO1xuICBjb25zdCBmaXJzdCA9IGNob2ljZXNbMF07XG4gIGNvbnN0IG1lc3NhZ2UgPSBvYmplY3QuaXNSZWNvcmQoZmlyc3QpICYmIG9iamVjdC5pc1JlY29yZChmaXJzdC5tZXNzYWdlKSA/IGZpcnN0Lm1lc3NhZ2UgOiB7fTtcbiAgY29uc3QgYW5zd2VyID0gb3BlbmFpQ2hhdC5jaGF0Q29udGVudFRvVGV4dChtZXNzYWdlLmNvbnRlbnQpO1xuICBjb25zdCBjaXRhdGlvbnM6IFdlYlNlYXJjaENpdGF0aW9uW10gPSBbXTtcbiAgLy8gQmVzdC1lZmZvcnQgZ3JvdW5kaW5nIGV4dHJhY3Rpb246IHdhbGsgYW55IG5lc3RlZCBvYmplY3QgZm9yIHt1cml8dXJsLHRpdGxlfS5cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB2aXNpdCA9ICh2OiB1bmtub3duLCBkZXB0aDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgaWYgKGRlcHRoID4gTUFYX0dST1VORElOR19XQUxLX0RFUFRIIHx8ICFvYmplY3QuaXNSZWNvcmQodikpIHJldHVybjtcbiAgICBjb25zdCB1cmwgPSBzdHJpbmcudHJpbVRvRW1wdHkodi51cmwpIHx8IHN0cmluZy50cmltVG9FbXB0eSh2LnVyaSk7XG4gICAgaWYgKHVybCAmJiAhc2Vlbi5oYXModXJsKSkge1xuICAgICAgc2Vlbi5hZGQodXJsKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gc3RyaW5nLnRyaW1Ub0VtcHR5KHYudGl0bGUpO1xuICAgICAgY2l0YXRpb25zLnB1c2goeyB1cmwsIC4uLih0aXRsZSA/IHsgdGl0bGUgfSA6IHt9KSB9KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LnZhbHVlcyh2KSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkgdmFsLmZvckVhY2goKHgpID0+IHZpc2l0KHgsIGRlcHRoICsgMSkpO1xuICAgICAgZWxzZSBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09IFwib2JqZWN0XCIpIHZpc2l0KHZhbCwgZGVwdGggKyAxKTtcbiAgICB9XG4gIH07XG4gIHZpc2l0KG1lc3NhZ2UuZ3JvdW5kaW5nX21ldGFkYXRhID8/IG1lc3NhZ2UuZ3JvdW5kaW5nTWV0YWRhdGEsIDApO1xuICByZXR1cm4geyBhbnN3ZXIsIGNpdGF0aW9ucyB9O1xufVxuXG4vKipcbiAqIFJ1biBhIHdlYiBzZWFyY2guIFByZWZlcnMgdGhlIERhdGFicmlja3MgbmF0aXZlIHdlYi1zZWFyY2ggdG9vbCBvbiBhXG4gKiBkZXBsb3llZCBHUFQvR2VtaW5pIGVuZHBvaW50IChzeW50aGVzaXplZCBhbnN3ZXIgKyBjaXRhdGlvbnMpOyB3aGVuIHRoZVxuICogd29ya3NwYWNlIGhhcyBubyBzdWNoIGVuZHBvaW50IEFORCB0aGUgc2NyYXBlIGZhbGxiYWNrIGlzIGVuYWJsZWQsIGZhbGxzXG4gKiBiYWNrIHRvIGEgRHVja0R1Y2tHbyBzY3JhcGUgc28gdGhlIHRvb2wgc3RpbGwgcmV0dXJucyByZXN1bHRzIGluc3RlYWQgb2ZcbiAqIGVycm9yaW5nLiBDaXRhdGlvbnMgYXJlIGZpbHRlcmVkIHRocm91Z2ggdGhlIGNvbmZpZ3VyZWQgVVJMIGFsbG93LWxpc3QuXG4gKlxuICogYHNpZ25hbGAgY2FuY2VscyB0aGUgd2hvbGUgY2FsbCwgaW5jbHVkaW5nIHRoZSBpbi1mbGlnaHQgc2VydmluZyByZXF1ZXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2ViU2VhcmNoKFxuICByZXF1ZXN0OiBXZWJTZWFyY2hSZXF1ZXN0LFxuICBjb25maWc6IFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnLFxuICBjdHg6IFdlYlNlYXJjaENvbnRleHQsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxXZWJTZWFyY2hSZXN1bHQ+IHtcbiAgY29uc3QgbW9kZWxJZCA9IGF3YWl0IHJlc29sdmVXZWJTZWFyY2hNb2RlbChjdHgsIGNvbmZpZywgcmVxdWVzdC5tb2RlbCk7XG5cbiAgaWYgKG1vZGVsSWQgPT09IG51bGwpIHtcbiAgICAvLyBObyBuYXRpdmUgd2ViLXNlYXJjaCBtb2RlbCBkZXBsb3llZCBpbiB0aGlzIHdvcmtzcGFjZS5cbiAgICBpZiAoY29uZmlnLnNjcmFwZUZhbGxiYWNrKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcIm5vLW5hdGl2ZS1tb2RlbDpzY3JhcGUtZmFsbGJhY2tcIiwgeyBxdWVyeTogcmVxdWVzdC5xdWVyeSB9KTtcbiAgICAgIHJldHVybiBydW5TY3JhcGVTZWFyY2gocmVxdWVzdCwgY29uZmlnLCBzaWduYWwpO1xuICAgIH1cbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICAgIFwiV2ViLXNlYXJjaC1jYXBhYmxlIHNlcnZpbmcgZW5kcG9pbnRcIixcbiAgICAgIFwiTm8gR1BUL0dlbWluaSBlbmRwb2ludCBpcyBkZXBsb3llZCBpbiB0aGlzIHdvcmtzcGFjZSBhbmQgdGhlIHNjcmFwZSBmYWxsYmFjayBpcyBcIiArXG4gICAgICAgIGBkaXNhYmxlZC4gRGVwbG95IGEgc3VwcG9ydGVkIGVuZHBvaW50LCBzZXQgbW9kZWwgb3IgJHtNT0RFTF9FTlZ9LCBvciBlbmFibGUgdGhlIGAgK1xuICAgICAgICBcImZhbGxiYWNrIChXRUJfU0VBUkNIX1NDUkFQRV9GQUxMQkFDSz0xKS5cIixcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcHJvdmlkZXIgPSBkZXRlY3RXZWJTZWFyY2hQcm92aWRlcihtb2RlbElkKSE7IC8vIGd1YXJhbnRlZWQgYnkgcmVzb2x2ZSBzdGVwXG4gIGNvbnN0IHNwZWMgPSB3ZWJTZWFyY2hUb29sU3BlYyhwcm92aWRlciwgY29uZmlnLndlYlNlYXJjaFRvb2xzKTtcblxuICBjb25zdCB1cmwgPVxuICAgIHNwZWMuYXBpID09PSBcInJlc3BvbnNlc1wiID8gaW52b2tlLnJlc3BvbnNlc1VybChjdHguaG9zdCkgOiBpbnZva2UuY2hhdENvbXBsZXRpb25zVXJsKGN0eC5ob3N0KTtcbiAgY29uc3QgYm9keSA9XG4gICAgc3BlYy5hcGkgPT09IFwicmVzcG9uc2VzXCJcbiAgICAgID8ge1xuICAgICAgICAgIG1vZGVsOiBtb2RlbElkLFxuICAgICAgICAgIGlucHV0OiBbeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogcmVxdWVzdC5xdWVyeSB9XSxcbiAgICAgICAgICB0b29sczogW3NwZWMudG9vbF0sXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIG1vZGVsOiBtb2RlbElkLFxuICAgICAgICAgIG1lc3NhZ2VzOiBbeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogcmVxdWVzdC5xdWVyeSB9XSxcbiAgICAgICAgICB0b29sczogW3NwZWMudG9vbF0sXG4gICAgICAgIH07XG5cbiAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHBvc3RTZXJ2aW5nKFxuICAgIGN0eCxcbiAgICB1cmwsXG4gICAgYm9keSxcbiAgICBjb25maWcsXG4gICAgW1wid2ViLXNlYXJjaFwiLCBcInNlcnZpbmdcIiwgc3BlYy5hcGksIG1vZGVsSWQsIHJlcXVlc3QucXVlcnldLFxuICAgIHNpZ25hbCxcbiAgKTtcblxuICBjb25zdCB7IGFuc3dlciwgY2l0YXRpb25zIH0gPVxuICAgIHNwZWMuYXBpID09PSBcInJlc3BvbnNlc1wiID8gZnJvbVJlc3BvbnNlc1BheWxvYWQocGF5bG9hZCkgOiBmcm9tQ2hhdFBheWxvYWQocGF5bG9hZCk7XG5cbiAgY29uc3QgcGVybWl0dGVkID0gY2l0YXRpb25zLmZpbHRlcigoYykgPT4gY29uZmlnLmFsbG93TGlzdC5hbGxvd3MoYy51cmwpKTtcbiAgY29uc3QgZHJvcHBlZCA9IGNpdGF0aW9ucy5sZW5ndGggLSBwZXJtaXR0ZWQubGVuZ3RoO1xuICBjb25zdCB0cmltbWVkID0gcGVybWl0dGVkLnNsaWNlKDAsIGNvbmZpZy5tYXhDaXRhdGlvbnMpO1xuICBsb2dnZXIuZGVidWcoXCJzZWFyY2hlZFwiLCB7XG4gICAgcXVlcnk6IHJlcXVlc3QucXVlcnksXG4gICAgbW9kZWw6IG1vZGVsSWQsXG4gICAgcHJvdmlkZXIsXG4gICAgY2l0YXRpb25zOiBjaXRhdGlvbnMubGVuZ3RoLFxuICAgIC4uLihkcm9wcGVkID4gMCA/IHsgZmlsdGVyZWQ6IGRyb3BwZWQgfSA6IHt9KSxcbiAgICByZXR1cm5lZDogdHJpbW1lZC5sZW5ndGgsXG4gIH0pO1xuXG4gIHJldHVybiB7IHF1ZXJ5OiByZXF1ZXN0LnF1ZXJ5LCBhbnN3ZXIsIGNpdGF0aW9uczogdHJpbW1lZCwgbW9kZWw6IG1vZGVsSWQgfTtcbn1cbiJdfQ==
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixlQUFlLEdBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFnQyxNQUFNLGFBQWEsQ0FBQztBQUM1RixPQUFPLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQ0wsV0FBVyxFQUNYLGtCQUFrQixHQUduQixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzlDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMvQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBQ2pDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUV6Qzs7Ozs7R0FLRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0FBRW5DLCtFQUErRTtBQUMvRSxNQUFNLG1CQUFtQixHQUFHLEdB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UyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDOUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2ViIHNlYXJjaCBiYWNrZWQgYnkgdGhlIERhdGFicmlja3MgTW9kZWwgU2VydmluZyBuYXRpdmUgd2ViLXNlYXJjaCB0b29sLlxuICpcbiAqIFVubGlrZSBhIHNjcmFwaW5nIGNsaWVudCwgdGhlIHNlYXJjaCBydW5zICppbnNpZGUqIGEgbW9kZWwgY2FsbDogd2UgUE9TVCB0aGVcbiAqIHF1ZXJ5IHRvIHRoZSB3b3Jrc3BhY2UncyBzZXJ2aW5nIGVuZHBvaW50IHdpdGggdGhlIHByb3ZpZGVyJ3Mgd2ViLXNlYXJjaFxuICogdG9vbCBzcGVjIGF0dGFjaGVkLCBhbmQgdGhlIG1vZGVsIHNlYXJjaGVzIHRoZSB3ZWIgYW5kIHdyaXRlcyB0aGUgYW5zd2VyLlxuICoge0BsaW5rIHJ1bldlYlNlYXJjaH06XG4gKlxuICogICAxLiBSZXNvbHZlcyBhIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCBJTkRFUEVOREVOVExZIG9mIHRoZSBjYWxsaW5nXG4gKiAgICAgIGFnZW50J3MgY2hhdCBtb2RlbCAodGhlIGFnZW50IG1heSBydW4gb24gYSBtb2RlbCB3aXRob3V0IHdlYiBzZWFyY2gpLlxuICogICAgICBBIHBpbm5lZCBgbW9kZWxgIChyZXF1ZXN0IG9yIGNvbmZpZykgaXMgZnV6enktbWF0Y2hlZDsgb3RoZXJ3aXNlIHRoZVxuICogICAgICBjb25maWd1cmVkIGZhbGxiYWNrIG9yZGVyIChHZW1pbmksIHRoZW4gR1BUKSBpcyB3YWxrZWQgdG8gdGhlIGZpcnN0XG4gKiAgICAgIHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludCB0aGF0IGV4aXN0cy4gQW4gZXhwbGljaXQgYnV0IHVuc3VwcG9ydGVkXG4gKiAgICAgIG1vZGVsIGlzIGEgaGFyZCBlcnJvciwgbm90IGEgc2lsZW50IGZhbGxiYWNrLlxuICogICAyLiBQT1NUcyB0byB0aGUgcHJvdmlkZXIncyBSRVNUIHN1cmZhY2UgKGAvc2VydmluZy1lbmRwb2ludHMvcmVzcG9uc2VzYFxuICogICAgICBmb3IgT3BlbkFJLCBgL3NlcnZpbmctZW5kcG9pbnRzL2NoYXQvY29tcGxldGlvbnNgIGZvciBHZW1pbmkpIHdpdGggdGhlXG4gKiAgICAgIG1hcHBlZCB0b29sIHNwZWMsIGF1dGhlbnRpY2F0ZWQgYXMgdGhlIE9CTyBjYWxsZXIuXG4gKiAgIDMuIFJldHVybnMgdGhlIHN5bnRoZXNpemVkIGFuc3dlciBwbHVzIHRoZSBjaXRlZCBzb3VyY2VzLCB3aXRoIGNpdGF0aW9uc1xuICogICAgICBzaWxlbnRseSBmaWx0ZXJlZCB0aHJvdWdoIHRoZSBjb25maWd1cmVkIFVSTCBhbGxvdy1saXN0LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgRXhlY3V0aW9uRXJyb3IsXG4gIGdldEV4ZWN1dGlvbkNvbnRleHQsXG4gIFZhbGlkYXRpb25FcnJvcixcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgaW52b2tlLCByZXNvbHZlLCBzZXJ2aW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvbW9kZWxcIjtcbmltcG9ydCB7IGxvZywgb2JqZWN0LCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgb3BlbmFpQ2hhdCwgb3BlbmFpUmVzcG9uc2VzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyBNT0RFTF9FTlYsIFNFUlZJTkdfRU5EUE9JTlRfRU5WLCB0eXBlIFJlc29sdmVkV2ViU2VhcmNoQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyB0b0NhbGxTZXR0aW5ncywgd2ViU2VhcmNoRXhlY3V0ZURlZmF1bHRzIH0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcbmltcG9ydCB7IGRldGVjdFdlYlNlYXJjaFByb3ZpZGVyLCBzdXBwb3J0c1dlYlNlYXJjaCwgd2ViU2VhcmNoVG9vbFNwZWMgfSBmcm9tIFwiLi9wcm92aWRlci50c1wiO1xuaW1wb3J0IHtcbiAgZXhlY3V0ZVJlYWQsXG4gIHRvV2ViU2VhcmNoUnVudGltZSxcbiAgdHlwZSBXZWJTZWFyY2hSdW50aW1lLFxuICB0eXBlIFdlYlNlYXJjaFJ1bnRpbWVJbnB1dCxcbn0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBXZWJTZWFyY2hDaXRhdGlvbiwgV2ViU2VhcmNoUmVxdWVzdCwgV2ViU2VhcmNoUmVzdWx0IH0gZnJvbSBcIi4vc2NoZW1hLnRzXCI7XG5pbXBvcnQgeyBydW5TY3JhcGVTZWFyY2ggfSBmcm9tIFwiLi9zY3JhcGUudHNcIjtcblxudHlwZSBXb3Jrc3BhY2VDbGllbnRMaWtlID0gc2VydmluZy5Xb3Jrc3BhY2VDbGllbnRMaWtlICYgaW52b2tlLkF1dGhlbnRpY2F0aW5nQ2xpZW50TGlrZTtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ3ZWItc2VhcmNoL3NlYXJjaFwiKTtcbmNvbnN0IHsgcmVzb2x2ZU1vZGVsIH0gPSByZXNvbHZlO1xuY29uc3QgeyBsaXN0U2VydmluZ0VuZHBvaW50cyB9ID0gc2VydmluZztcblxuLyoqXG4gKiBIb3cgZGVlcCB0aGUgZ3JvdW5kaW5nLW1ldGFkYXRhIHdhbGsgZGVzY2VuZHMuIEdlbWluaSBuZXN0cyBpdHMgc291cmNlcyBhXG4gKiBoYW5kZnVsIG9mIGxldmVscyBkb3duIGFuZCB0aGUgc2hhcGUgdmFyaWVzIGJ5IG1vZGVsIHZlcnNpb24sIHNvIHRoZSB3YWxrXG4gKiBpcyBnZW5lcmljOyB0aGUgYm91bmQgaXMgd2hhdCBrZWVwcyBhIHBhdGhvbG9naWNhbCBwYXlsb2FkIGZyb20gdHVybmluZyBpdFxuICogaW50byBhIGZ1bGwgdHJhdmVyc2FsIG9mIHRoZSByZXNwb25zZS5cbiAqL1xuY29uc3QgTUFYX0dST1VORElOR19XQUxLX0RFUFRIID0gNjtcblxuLyoqIExvd2VzdCBIVFRQIHN0YXR1cyB0cmVhdGVkIGFzIGEgc2VydmVyLXNpZGUgKHJldHJ5YWJsZSkgc2VydmluZyBmYWlsdXJlLiAqL1xuY29uc3QgU0VSVkVSX0VSUk9SX1NUQVRVUyA9IDUwMDtcblxuLyoqIFN0YXR1cyBNb2RlbCBTZXJ2aW5nIHVzZXMgdG8gc2hlZCBsb2FkOyByZXRyeWFibGUgbGlrZSBhIDV4eC4gKi9cbmNvbnN0IFJBVEVfTElNSVRFRF9TVEFUVVMgPSA0Mjk7XG5cbi8qKiBDb250ZXh0IGEgc2VhcmNoIG5lZWRzIGZyb20gdGhlIGNhbGxlcjogdGhlIE9CTyBjbGllbnQgKyB3b3Jrc3BhY2UgaG9zdC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoQ29udGV4dCB7XG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50TGlrZTtcbiAgaG9zdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIE9CTyB3b3Jrc3BhY2UgY2xpZW50ICsgaG9zdCBmcm9tIHRoZSBhY3RpdmUgQXBwS2l0IGV4ZWN1dGlvblxuICogY29udGV4dC4gSW5zaWRlIGBhZ2VudC5zdHJlYW1gJ3MgYGFzVXNlcihyZXEpYCBzY29wZSB0aGlzIGhpdHMgdGhlIHNlcnZpbmdcbiAqIGVuZHBvaW50IGFzIHRoZSByZXF1ZXN0aW5nIHVzZXI7IG91dHNpZGUgYSB1c2VyIGNvbnRleHQgQXBwS2l0IGZhbGxzIGJhY2sgdG9cbiAqIHRoZSBzZXJ2aWNlIHByaW5jaXBhbC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVXZWJTZWFyY2hDb250ZXh0KCk6IFByb21pc2U8V2ViU2VhcmNoQ29udGV4dD4ge1xuICBjb25zdCBjdHggPSBnZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gIGNvbnN0IGhvc3QgPSAoYXdhaXQgY3R4LmNsaWVudC5jb25maWcuZ2V0SG9zdCgpKS50b1N0cmluZygpO1xuICByZXR1cm4geyBjbGllbnQ6IGN0eC5jbGllbnQsIGhvc3QgfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgd2ViLXNlYXJjaC1jYXBhYmxlIG1vZGVsIGFnYWluc3QgdGhlIExJVkUgd29ya3NwYWNlIGNhdGFsb2d1ZSAtIHNvXG4gKiB3ZSBuZXZlciByZXR1cm4gYW4gZW5kcG9pbnQgaWQgdGhhdCBpc24ndCBhY3R1YWxseSBkZXBsb3llZCAodGhlIFwiZW5kcG9pbnRcbiAqIGRvZXMgbm90IGV4aXN0XCIgZmFpbHVyZSBhIGhhcmRjb2RlZCBmYWxsYmFjayBpZCB3b3VsZCBjYXVzZSkuIFJldXNlc1xuICogYEBkYngtdG9vbHMvbW9kZWxgJ3MgZXhpc3RpbmcgY2F0YWxvZ3VlICsgcmVzb2x2ZXIgcmF0aGVyIHRoYW4gYSBjdXN0b21cbiAqIGxvb2t1cDoge0BsaW5rIGxpc3RTZXJ2aW5nRW5kcG9pbnRzfSBsaXN0cyB0aGUgZW5kcG9pbnRzIChjYWNoZWQpLCBhbmQgd2VcbiAqIHJlc3RyaWN0IHRoZSBjYW5kaWRhdGUgc2V0IHRvIHRoZSB7QGxpbmsgc3VwcG9ydHNXZWJTZWFyY2h9IG9uZXMgYmVmb3JlXG4gKiB7QGxpbmsgcmVzb2x2ZU1vZGVsfSBmdXp6eS1waWNrcyB3aXRoaW4gaXQuXG4gKlxuICogUmV0dXJucyB0aGUgY2hvc2VuIGVuZHBvaW50IGlkLCBvciBgbnVsbGAgd2hlbiB0aGUgd29ya3NwYWNlIGhhcyBub1xuICogd2ViLXNlYXJjaC1jYXBhYmxlIG1vZGVsIGRlcGxveWVkICh0aGUgY2FsbGVyIHRoZW4gdXNlcyB0aGUgc2NyYXBlXG4gKiBmYWxsYmFjaykuIEEgcGluIHRoZSBjYWxsZXIgY2hvc2UgZGVsaWJlcmF0ZWx5IC0gdGhlIHJlcXVlc3QncyBgbW9kZWxgLCB0aGVcbiAqIHBsdWdpbidzIGBtb2RlbGAsIG9yIGBXRUJfU0VBUkNIX01PREVMYCAtIHRocm93cyB3aGVuIGl0IHJlc29sdmVzIHRvIGFuXG4gKiB1bnN1cHBvcnRlZCAvIGFic2VudCBlbmRwb2ludCwgc28gYSBiYWQgcGluIHN1cmZhY2VzIHJhdGhlciB0aGFuIHNpbGVudGx5XG4gKiBkZWdyYWRpbmcuIEEgcGluIGluaGVyaXRlZCBmcm9tIHRoZSBzaGFyZWQgYERBVEFCUklDS1NfU0VSVklOR19FTkRQT0lOVF9OQU1FYFxuICogYmluZGluZyBpcyBvbmx5IGEgcHJlZmVyZW5jZTogdGhhdCBlbmRwb2ludCBpcyB0aGUgYXBwJ3Mgc2VydmluZyBlbmRwb2ludCxcbiAqIG5vdCBuZWNlc3NhcmlseSBhIHdlYi1zZWFyY2gtY2FwYWJsZSBvbmUsIHNvIGFuIHVudXNhYmxlIHZhbHVlIGZhbGxzIHRocm91Z2hcbiAqIHRvIHRoZSBmYWxsYmFjayBvcmRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVdlYlNlYXJjaE1vZGVsKFxuICBjdHg6IFdlYlNlYXJjaENvbnRleHQsXG4gIGNvbmZpZzogUmVzb2x2ZWRXZWJTZWFyY2hDb25maWcsXG4gIHJlcXVlc3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGxpc3RTZXJ2aW5nRW5kcG9pbnRzKGN0eC5jbGllbnQsIGN0eC5ob3N0KTtcbiAgLy8gT25seSBkZXBsb3llZCwgd2ViLXNlYXJjaC1jYXBhYmxlIGVuZHBvaW50cyBhcmUgY2FuZGlkYXRlcy5cbiAgY29uc3QgY2FwYWJsZSA9IGVuZHBvaW50cy5maWx0ZXIoKGUpID0+IHN1cHBvcnRzV2ViU2VhcmNoKGUubmFtZSkpO1xuICBjb25zdCBwaW5uZWQgPSByZXF1ZXN0ZWQgPz8gY29uZmlnLm1vZGVsO1xuICBjb25zdCBwaW5Jc0RlbGliZXJhdGUgPVxuICAgIHJlcXVlc3RlZCAhPT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5tb2RlbFNvdXJjZSA9PT0gXCJjb25maWdcIiB8fCBjb25maWcubW9kZWxTb3VyY2UgPT09IE1PREVMX0VOVjtcblxuICBpZiAocGlubmVkKSB7XG4gICAgLy8gUmVzb2x2ZSB0aGUgZXhwbGljaXQgYXNrIHdpdGhpbiB0aGUgY2FwYWJsZSBzZXQgb25seS5cbiAgICBjb25zdCB7IG1vZGVsSWQgfSA9IHJlc29sdmVNb2RlbChjYXBhYmxlLCB7XG4gICAgICBleHBsaWNpdDogcGlubmVkLFxuICAgICAgZnV6enk6IGNvbmZpZy5mdXp6eSxcbiAgICAgIHRocmVzaG9sZDogY29uZmlnLmZ1enp5VGhyZXNob2xkLFxuICAgIH0pO1xuICAgIC8vIHJlc29sdmVNb2RlbCByZXR1cm5zIHRoZSBpbnB1dCB2ZXJiYXRpbSBvbiBubyBtYXRjaDsgcmVxdWlyZSBpdCB0byBiZSBhXG4gICAgLy8gcmVhbCBjYXBhYmxlIGVuZHBvaW50IHNvIGEgYmFkIHBpbiBpcyBhIGNsZWFyIGVycm9yLCBub3QgYSBwaGFudG9tIGNhbGwuXG4gICAgY29uc3QgdXNhYmxlID0gY2FwYWJsZS5zb21lKChlKSA9PiBlLm5hbWUgPT09IG1vZGVsSWQpICYmIHN1cHBvcnRzV2ViU2VhcmNoKG1vZGVsSWQpO1xuICAgIGlmICh1c2FibGUpIHJldHVybiBtb2RlbElkO1xuICAgIGNvbnN0IGRlcGxveWVkID0gY2FwYWJsZS5tYXAoKGUpID0+IGUubmFtZSkuam9pbihcIiwgXCIpIHx8IFwibm9uZVwiO1xuICAgIGlmICghcGluSXNEZWxpYmVyYXRlKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcInNoYXJlZC1lbmRwb2ludC1ub3Qtd2ViLWNhcGFibGVcIiwge1xuICAgICAgICBlbnZWYXI6IFNFUlZJTkdfRU5EUE9JTlRfRU5WLFxuICAgICAgICBkZXBsb3llZCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocmVxdWVzdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICAgIFwibW9kZWxcIixcbiAgICAgICAgcGlubmVkLFxuICAgICAgICBgYSBkZXBsb3llZCB3ZWItc2VhcmNoLWNhcGFibGUgZW5kcG9pbnQgKGRlcGxveWVkOiAke2RlcGxveWVkfSlgLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICAgIFwiV2ViLXNlYXJjaC1jYXBhYmxlIHNlcnZpbmcgZW5kcG9pbnRcIixcbiAgICAgICAgYERlcGxveWVkIHdlYi1zZWFyY2gtY2FwYWJsZSBlbmRwb2ludHM6ICR7ZGVwbG95ZWR9LiBTZXQgbW9kZWwgb3IgJHtNT0RFTF9FTlZ9IHRvIG9uZSBvZiB0aGVtLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXBhYmxlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgLy8gTm90aGluZyB1c2FibGUgcGlubmVkOiBwcmVmZXIgdGhlIGNvbmZpZ3VyZWQgZmFsbGJhY2sgb3JkZXIgKEdlbWluaSwgdGhlblxuICAvLyBHUFQpIHdoZW4gdGhvc2UgaWRzIGFyZSBhY3R1YWxseSBkZXBsb3llZDsgZWxzZSB0YWtlIHRoZSBiZXN0IGNhcGFibGVcbiAgLy8gZW5kcG9pbnQuXG4gIGNvbnN0IHsgbW9kZWxJZCB9ID0gcmVzb2x2ZU1vZGVsKGNhcGFibGUsIHtcbiAgICBmYWxsYmFja3M6IGNvbmZpZy5tb2RlbEZhbGxiYWNrcyxcbiAgICBmdXp6eTogY29uZmlnLmZ1enp5LFxuICAgIHRocmVzaG9sZDogY29uZmlnLmZ1enp5VGhyZXNob2xkLFxuICB9KTtcbiAgcmV0dXJuIGNhcGFibGUuc29tZSgoZSkgPT4gZS5uYW1lID09PSBtb2RlbElkKSA/IG1vZGVsSWQgOiAoY2FwYWJsZVswXT8ubmFtZSA/PyBudWxsKTtcbn1cblxuLyoqXG4gKiBQT1NUIGEgc2VydmluZyByZXF1ZXN0IGFzIHRoZSBPQk8gY2FsbGVyIGFuZCByZXR1cm4gdGhlIHBhcnNlZCBKU09OIGJvZHkuXG4gKlxuICogQXV0aCBoZWFkZXJzIGFyZSBtaW50ZWQgcGVyIGNhbGwgZnJvbSB0aGUgT0JPIGNsaWVudCdzIFNESyBjb25maWcsIHdoaWNoXG4gKiByZWZyZXNoZXMgdGhlIHRva2VuIHdoZW4gaXQgaXMgY2xvc2UgdG8gZXhwaXJ5LCBzbyB0aGUgcmVxdWVzdCBjYXJyaWVzIHRoZVxuICogcmVxdWVzdGluZyB1c2VyJ3MgaWRlbnRpdHkuXG4gKlxuICogVGhpcyBpcyB0aGUgb25lIERhdGFicmlja3MgY2FsbCBpbiB0aGUgcmVwbyB0aGF0IGRvZXMgbm90IGdvIHRocm91Z2hcbiAqIGBhcGlDbGllbnQucmVxdWVzdGAgKyBgZGF0YWJyaWNrcy50b0NvbnRleHRgICh3aGljaCBkb2VzIGZvcndhcmRcbiAqIGNhbmNlbGxhdGlvbikuIFJldHJ5IGNsYXNzaWZpY2F0aW9uIGhlcmUgaGFzIHRvIGRpc3Rpbmd1aXNoIGEgbG9hZC1zaGVkIG9yXG4gKiBzZXJ2ZXIgZmF1bHQgZnJvbSB0aGlzIHJlcXVlc3QncyBvd24gNHh4LCBhbmQgYGZldGNoYCBleHBvc2VzIHRoZSBIVFRQIHN0YXR1c1xuICogZGlyZWN0bHk7IHRoZSBTREsgcmFpc2VzIGFuIGBBcGlFcnJvcmAgdGhhdCBjYXJyaWVzIHRoZSBzdGF0dXMgdW5kZXJcbiAqIGluY29uc2lzdGVudCBrZXlzLCB3aGljaCBpcyBndWVzc3dvcmsgYnkgY29tcGFyaXNvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9zdFNlcnZpbmcoXG4gIGN0eDogV2ViU2VhcmNoQ29udGV4dCxcbiAgdXJsOiBzdHJpbmcsXG4gIGJvZHk6IHVua25vd24sXG4gIHJ1bnRpbWU6IFdlYlNlYXJjaFJ1bnRpbWUsXG4gIGNhY2hlS2V5OiByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgeyBjb25maWcgfSA9IHJ1bnRpbWU7XG4gIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBleGVjdXRlUmVhZChcbiAgICBydW50aW1lLFxuICAgIFwic2VydmluZy1yZXF1ZXN0XCIsXG4gICAgdG9DYWxsU2V0dGluZ3Mod2ViU2VhcmNoRXhlY3V0ZURlZmF1bHRzLCBjb25maWcudGltZW91dE1zLCBjYWNoZUtleSksXG4gICAgYXN5bmMgKGV4ZWN1dGVTaWduYWwpOiBQcm9taXNlPHVua25vd24+ID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAuLi4oYXdhaXQgaW52b2tlLmF1dGhIZWFkZXJzKGN0eC5jbGllbnQpKSxcbiAgICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgLi4uKGV4ZWN1dGVTaWduYWwgPyB7IHNpZ25hbDogZXhlY3V0ZVNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIC8vIExvYWQtc2hlZGRpbmcgYW5kIHNlcnZlciBmYXVsdHMgYXJlIHdvcnRoIGFub3RoZXIgYXR0ZW1wdDsgYSA0eHggaXNcbiAgICAgICAgLy8gdGhpcyByZXF1ZXN0J3Mgb3duIHByb2JsZW0sIHNvIGl0IG11c3Qgbm90IGJlIHJldHJpZWQuXG4gICAgICAgIGNvbnN0IHJldHJ5YWJsZSA9XG4gICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzID49IFNFUlZFUl9FUlJPUl9TVEFUVVMgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSBSQVRFX0xJTUlURURfU1RBVFVTO1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gYHdlYi1zZWFyY2g6IE1vZGVsIFNlcnZpbmcgcmVqZWN0ZWQgdGhlIHNlYXJjaCByZXF1ZXN0IChIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSlgO1xuICAgICAgICB0aHJvdyByZXRyeWFibGVcbiAgICAgICAgICA/IG5ldyBDb25uZWN0aW9uRXJyb3IobWVzc2FnZSwgeyBjb250ZXh0OiB7IHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzIH0gfSlcbiAgICAgICAgICA6IG5ldyBFeGVjdXRpb25FcnJvcihtZXNzYWdlLCB7IGNvbnRleHQ6IHsgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMgfSB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgfSxcbiAgICBzaWduYWwsXG4gICk7XG4gIHJldHVybiBvYmplY3QuaXNSZWNvcmQocGF5bG9hZCkgPyBwYXlsb2FkIDoge307XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSByZXNwb25zZSBleHRyYWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEV4dHJhY3QgYW5zd2VyIHRleHQgYW5kIGNpdGF0aW9ucyBmcm9tIGFuIE9wZW5BSSBSZXNwb25zZXMgQVBJIHBheWxvYWQgdGhyb3VnaFxuICogdGhlIHNoYXJlZCByZWFkZXIgaW4gYEBkYngtdG9vbHMvc2hhcmVkLW1vZGVsYC5cbiAqL1xuZnVuY3Rpb24gZnJvbVJlc3BvbnNlc1BheWxvYWQocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB7XG4gIGFuc3dlcjogc3RyaW5nO1xuICBjaXRhdGlvbnM6IFdlYlNlYXJjaENpdGF0aW9uW107XG59IHtcbiAgY29uc3QgeyB0ZXh0LCBjaXRhdGlvbnMgfSA9IG9wZW5haVJlc3BvbnNlcy5yZWFkUmVzcG9uc2VzT3V0cHV0KHBheWxvYWQpO1xuICByZXR1cm4geyBhbnN3ZXI6IHRleHQsIGNpdGF0aW9ucyB9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYW5zd2VyIHRleHQgKyBjaXRhdGlvbnMgZnJvbSBhIENoYXQgQ29tcGxldGlvbnMgcGF5bG9hZCAoR2VtaW5pIHZpYVxuICogYGdvb2dsZV9zZWFyY2hgKS4gVGhlIGFuc3dlciBpcyBgY2hvaWNlc1swXS5tZXNzYWdlLmNvbnRlbnRgOyBncm91bmRpbmdcbiAqIHNvdXJjZXMsIHdoZW4gcHJlc2VudCwgc3VyZmFjZSB1bmRlciBgY2hvaWNlc1swXS5tZXNzYWdlYCBncm91bmRpbmdcbiAqIG1ldGFkYXRhIChiZXN0LWVmZm9ydCAtIHNoYXBlcyB2YXJ5LCBzbyB3ZSBzY2FuIGZvciB1cmwtYmVhcmluZyBlbnRyaWVzKS5cbiAqL1xuZnVuY3Rpb24gZnJvbUNoYXRQYXlsb2FkKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KToge1xuICBhbnN3ZXI6IHN0cmluZztcbiAgY2l0YXRpb25zOiBXZWJTZWFyY2hDaXRhdGlvbltdO1xufSB7XG4gIGNvbnN0IGNob2ljZXMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQuY2hvaWNlcykgPyBwYXlsb2FkLmNob2ljZXMgOiBbXTtcbiAgY29uc3QgZmlyc3QgPSBjaG9pY2VzWzBdO1xuICBjb25zdCBtZXNzYWdlID0gb2JqZWN0LmlzUmVjb3JkKGZpcnN0KSAmJiBvYmplY3QuaXNSZWNvcmQoZmlyc3QubWVzc2FnZSkgPyBmaXJzdC5tZXNzYWdlIDoge307XG4gIGNvbnN0IGFuc3dlciA9IG9wZW5haUNoYXQuY2hhdENvbnRlbnRUb1RleHQobWVzc2FnZS5jb250ZW50KTtcbiAgY29uc3QgY2l0YXRpb25zOiBXZWJTZWFyY2hDaXRhdGlvbltdID0gW107XG4gIC8vIEJlc3QtZWZmb3J0IGdyb3VuZGluZyBleHRyYWN0aW9uOiB3YWxrIGFueSBuZXN0ZWQgb2JqZWN0IGZvciB7dXJpfHVybCx0aXRsZX0uXG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgdmlzaXQgPSAodjogdW5rbm93biwgZGVwdGg6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgIGlmIChkZXB0aCA+IE1BWF9HUk9VTkRJTkdfV0FMS19ERVBUSCB8fCAhb2JqZWN0LmlzUmVjb3JkKHYpKSByZXR1cm47XG4gICAgY29uc3QgdXJsID0gc3RyaW5nLnRyaW1Ub0VtcHR5KHYudXJsKSB8fCBzdHJpbmcudHJpbVRvRW1wdHkodi51cmkpO1xuICAgIGlmICh1cmwgJiYgIXNlZW4uaGFzKHVybCkpIHtcbiAgICAgIHNlZW4uYWRkKHVybCk7XG4gICAgICBjb25zdCB0aXRsZSA9IHN0cmluZy50cmltVG9FbXB0eSh2LnRpdGxlKTtcbiAgICAgIGNpdGF0aW9ucy5wdXNoKHsgdXJsLCAuLi4odGl0bGUgPyB7IHRpdGxlIH0gOiB7fSkgfSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgdmFsIG9mIE9iamVjdC52YWx1ZXModikpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHZhbC5mb3JFYWNoKCh4KSA9PiB2aXNpdCh4LCBkZXB0aCArIDEpKTtcbiAgICAgIGVsc2UgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiKSB2aXNpdCh2YWwsIGRlcHRoICsgMSk7XG4gICAgfVxuICB9O1xuICB2aXNpdChtZXNzYWdlLmdyb3VuZGluZ19tZXRhZGF0YSA/PyBtZXNzYWdlLmdyb3VuZGluZ01ldGFkYXRhLCAwKTtcbiAgcmV0dXJuIHsgYW5zd2VyLCBjaXRhdGlvbnMgfTtcbn1cblxuLyoqXG4gKiBSdW4gYSB3ZWIgc2VhcmNoLiBQcmVmZXJzIHRoZSBEYXRhYnJpY2tzIG5hdGl2ZSB3ZWItc2VhcmNoIHRvb2wgb24gYVxuICogZGVwbG95ZWQgR1BUL0dlbWluaSBlbmRwb2ludCAoc3ludGhlc2l6ZWQgYW5zd2VyICsgY2l0YXRpb25zKTsgd2hlbiB0aGVcbiAqIHdvcmtzcGFjZSBoYXMgbm8gc3VjaCBlbmRwb2ludCBBTkQgdGhlIHNjcmFwZSBmYWxsYmFjayBpcyBlbmFibGVkLCBmYWxsc1xuICogYmFjayB0byBhIER1Y2tEdWNrR28gc2NyYXBlIHNvIHRoZSB0b29sIHN0aWxsIHJldHVybnMgcmVzdWx0cyBpbnN0ZWFkIG9mXG4gKiBlcnJvcmluZy4gQ2l0YXRpb25zIGFyZSBmaWx0ZXJlZCB0aHJvdWdoIHRoZSBjb25maWd1cmVkIFVSTCBhbGxvdy1saXN0LlxuICpcbiAqIGBzaWduYWxgIGNhbmNlbHMgdGhlIHdob2xlIGNhbGwsIGluY2x1ZGluZyB0aGUgaW4tZmxpZ2h0IHNlcnZpbmcgcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldlYlNlYXJjaChcbiAgcmVxdWVzdDogV2ViU2VhcmNoUmVxdWVzdCxcbiAgcnVudGltZU9yQ29uZmlnOiBXZWJTZWFyY2hSdW50aW1lSW5wdXQsXG4gIGN0eDogV2ViU2VhcmNoQ29udGV4dCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFdlYlNlYXJjaFJlc3VsdD4ge1xuICBjb25zdCBydW50aW1lID0gdG9XZWJTZWFyY2hSdW50aW1lKHJ1bnRpbWVPckNvbmZpZyk7XG4gIGNvbnN0IHsgY29uZmlnIH0gPSBydW50aW1lO1xuICBjb25zdCBtb2RlbElkID0gYXdhaXQgcmVzb2x2ZVdlYlNlYXJjaE1vZGVsKGN0eCwgY29uZmlnLCByZXF1ZXN0Lm1vZGVsKTtcblxuICBpZiAobW9kZWxJZCA9PT0gbnVsbCkge1xuICAgIC8vIE5vIG5hdGl2ZSB3ZWItc2VhcmNoIG1vZGVsIGRlcGxveWVkIGluIHRoaXMgd29ya3NwYWNlLlxuICAgIGlmIChjb25maWcuc2NyYXBlRmFsbGJhY2spIHtcbiAgICAgIGxvZ2dlci5pbmZvKFwibm8tbmF0aXZlLW1vZGVsOnNjcmFwZS1mYWxsYmFja1wiLCB7IHF1ZXJ5OiByZXF1ZXN0LnF1ZXJ5IH0pO1xuICAgICAgcmV0dXJuIHJ1blNjcmFwZVNlYXJjaChyZXF1ZXN0LCBydW50aW1lLCBzaWduYWwpO1xuICAgIH1cbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICAgIFwiV2ViLXNlYXJjaC1jYXBhYmxlIHNlcnZpbmcgZW5kcG9pbnRcIixcbiAgICAgIFwiTm8gR1BUL0dlbWluaSBlbmRwb2ludCBpcyBkZXBsb3llZCBpbiB0aGlzIHdvcmtzcGFjZSBhbmQgdGhlIHNjcmFwZSBmYWxsYmFjayBpcyBcIiArXG4gICAgICAgIGBkaXNhYmxlZC4gRGVwbG95IGEgc3VwcG9ydGVkIGVuZHBvaW50LCBzZXQgbW9kZWwgb3IgJHtNT0RFTF9FTlZ9LCBvciBlbmFibGUgdGhlIGAgK1xuICAgICAgICBcImZhbGxiYWNrIChXRUJfU0VBUkNIX1NDUkFQRV9GQUxMQkFDSz0xKS5cIixcbiAgICApO1xuICB9XG5cbiAgY29uc3QgcHJvdmlkZXIgPSBkZXRlY3RXZWJTZWFyY2hQcm92aWRlcihtb2RlbElkKSE7IC8vIGd1YXJhbnRlZWQgYnkgcmVzb2x2ZSBzdGVwXG4gIGNvbnN0IHNwZWMgPSB3ZWJTZWFyY2hUb29sU3BlYyhwcm92aWRlciwgY29uZmlnLndlYlNlYXJjaFRvb2xzKTtcblxuICBjb25zdCB1cmwgPVxuICAgIHNwZWMuYXBpID09PSBcInJlc3BvbnNlc1wiID8gaW52b2tlLnJlc3BvbnNlc1VybChjdHguaG9zdCkgOiBpbnZva2UuY2hhdENvbXBsZXRpb25zVXJsKGN0eC5ob3N0KTtcbiAgY29uc3QgYm9keSA9XG4gICAgc3BlYy5hcGkgPT09IFwicmVzcG9uc2VzXCJcbiAgICAgID8ge1xuICAgICAgICAgIG1vZGVsOiBtb2RlbElkLFxuICAgICAgICAgIGlucHV0OiBbeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogcmVxdWVzdC5xdWVyeSB9XSxcbiAgICAgICAgICB0b29sczogW3NwZWMudG9vbF0sXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIG1vZGVsOiBtb2RlbElkLFxuICAgICAgICAgIG1lc3NhZ2VzOiBbeyByb2xlOiBcInVzZXJcIiwgY29udGVudDogcmVxdWVzdC5xdWVyeSB9XSxcbiAgICAgICAgICB0b29sczogW3NwZWMudG9vbF0sXG4gICAgICAgIH07XG5cbiAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IHBvc3RTZXJ2aW5nKFxuICAgIGN0eCxcbiAgICB1cmwsXG4gICAgYm9keSxcbiAgICBydW50aW1lLFxuICAgIFtcIndlYi1zZWFyY2hcIiwgXCJzZXJ2aW5nXCIsIHNwZWMuYXBpLCBtb2RlbElkLCByZXF1ZXN0LnF1ZXJ5XSxcbiAgICBzaWduYWwsXG4gICk7XG5cbiAgY29uc3QgeyBhbnN3ZXIsIGNpdGF0aW9ucyB9ID1cbiAgICBzcGVjLmFwaSA9PT0gXCJyZXNwb25zZXNcIiA/IGZyb21SZXNwb25zZXNQYXlsb2FkKHBheWxvYWQpIDogZnJvbUNoYXRQYXlsb2FkKHBheWxvYWQpO1xuXG4gIGNvbnN0IHBlcm1pdHRlZCA9IGNpdGF0aW9ucy5maWx0ZXIoKGMpID0+IGNvbmZpZy5hbGxvd0xpc3QuYWxsb3dzKGMudXJsKSk7XG4gIGNvbnN0IGRyb3BwZWQgPSBjaXRhdGlvbnMubGVuZ3RoIC0gcGVybWl0dGVkLmxlbmd0aDtcbiAgY29uc3QgdHJpbW1lZCA9IHBlcm1pdHRlZC5zbGljZSgwLCBjb25maWcubWF4Q2l0YXRpb25zKTtcbiAgbG9nZ2VyLmRlYnVnKFwic2VhcmNoZWRcIiwge1xuICAgIHF1ZXJ5OiByZXF1ZXN0LnF1ZXJ5LFxuICAgIG1vZGVsOiBtb2RlbElkLFxuICAgIHByb3ZpZGVyLFxuICAgIGNpdGF0aW9uczogY2l0YXRpb25zLmxlbmd0aCxcbiAgICAuLi4oZHJvcHBlZCA+IDAgPyB7IGZpbHRlcmVkOiBkcm9wcGVkIH0gOiB7fSksXG4gICAgcmV0dXJuZWQ6IHRyaW1tZWQubGVuZ3RoLFxuICB9KTtcblxuICByZXR1cm4geyBxdWVyeTogcmVxdWVzdC5xdWVyeSwgYW5zd2VyLCBjaXRhdGlvbnM6IHRyaW1tZWQsIG1vZGVsOiBtb2RlbElkIH07XG59XG4iXX0=
|
package/lib/src/tool.d.ts
CHANGED
|
@@ -13,20 +13,26 @@
|
|
|
13
13
|
* list) gates only calls whose URL matches - for `web_fetch` that is evaluated
|
|
14
14
|
* against the target URL, while `web_search` (whose result URLs aren't known
|
|
15
15
|
* before the call) treats a pattern gate as "always gate". `approval` falls
|
|
16
|
-
* back to the
|
|
16
|
+
* back to the standalone runtime's `approval` config when a tool omits its own.
|
|
17
17
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
18
|
+
* App-integrated agents should consume the plugin's native toolkit so calls
|
|
19
|
+
* retain that plugin's policy and executor. These factories are the standalone
|
|
20
|
+
* Mastra surface and capture an explicit runtime or isolated config.
|
|
20
21
|
*
|
|
21
22
|
* @module
|
|
22
23
|
*/
|
|
23
|
-
import { type ApprovalGate, type ApprovalPolicy } from "./config.ts";
|
|
24
|
+
import { type ApprovalGate, type ApprovalPolicy, type WebSearchPluginConfig } from "./config.ts";
|
|
25
|
+
import { type WebSearchRuntime } from "./runtime.ts";
|
|
24
26
|
/** Options shared by both web tools. */
|
|
25
27
|
export interface WebSearchToolOptions {
|
|
26
28
|
/** Override the tool id. */
|
|
27
29
|
id?: string;
|
|
30
|
+
/** Isolated runtime used by this standalone tool. Mutually exclusive with `config`. */
|
|
31
|
+
runtime?: WebSearchRuntime;
|
|
32
|
+
/** Config used to create an isolated direct-execution runtime. */
|
|
33
|
+
config?: WebSearchPluginConfig;
|
|
28
34
|
/**
|
|
29
|
-
* Approval gate for this tool, overriding the
|
|
35
|
+
* Approval gate for this tool, overriding the runtime's `approval`. `true`
|
|
30
36
|
* gates every call; a URL-pattern (or list) gates only matching calls;
|
|
31
37
|
* omit / `false` for no approval. See {@link ApprovalGate}.
|
|
32
38
|
*/
|
package/lib/src/tool.js
CHANGED
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
* list) gates only calls whose URL matches - for `web_fetch` that is evaluated
|
|
14
14
|
* against the target URL, while `web_search` (whose result URLs aren't known
|
|
15
15
|
* before the call) treats a pattern gate as "always gate". `approval` falls
|
|
16
|
-
* back to the
|
|
16
|
+
* back to the standalone runtime's `approval` config when a tool omits its own.
|
|
17
17
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
18
|
+
* App-integrated agents should consume the plugin's native toolkit so calls
|
|
19
|
+
* retain that plugin's policy and executor. These factories are the standalone
|
|
20
|
+
* Mastra surface and capture an explicit runtime or isolated config.
|
|
20
21
|
*
|
|
21
22
|
* @module
|
|
22
23
|
*/
|
|
@@ -24,7 +25,7 @@ import { ValidationError } from "@databricks/appkit";
|
|
|
24
25
|
import { createTool } from "@mastra/core/tools";
|
|
25
26
|
import { approvalMatches, toApprovalPolicy, } from "./config.js";
|
|
26
27
|
import { runWebFetch } from "./fetch.js";
|
|
27
|
-
import {
|
|
28
|
+
import { createWebSearchRuntime } from "./runtime.js";
|
|
28
29
|
import { webFetchRequestSchema, webFetchResultSchema, webSearchRequestSchema, webSearchResultSchema, WEB_FETCH_TOOL_DESCRIPTION, WEB_SEARCH_TOOL_DESCRIPTION, } from "./schema.js";
|
|
29
30
|
import { resolveWebSearchContext, runWebSearch } from "./search.js";
|
|
30
31
|
/**
|
|
@@ -40,11 +41,16 @@ function parseToolInput(schema, input) {
|
|
|
40
41
|
}
|
|
41
42
|
return parsed.data;
|
|
42
43
|
}
|
|
43
|
-
/** Resolve the
|
|
44
|
-
function
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
/** Resolve the isolated runtime captured by one standalone tool factory. */
|
|
45
|
+
function toolRuntime(opts) {
|
|
46
|
+
if (opts.runtime && opts.config) {
|
|
47
|
+
throw new TypeError("web-search tool options accept either runtime or config, not both");
|
|
48
|
+
}
|
|
49
|
+
return opts.runtime ?? createWebSearchRuntime(opts.config);
|
|
50
|
+
}
|
|
51
|
+
/** Resolve the effective gate: explicit tool option, else the runtime default. */
|
|
52
|
+
function effectiveGate(opts, runtime) {
|
|
53
|
+
return opts.approval === undefined ? runtime.config.approval : toApprovalPolicy(opts.approval);
|
|
48
54
|
}
|
|
49
55
|
/**
|
|
50
56
|
* Build the `web_search` tool. Spread it into the agents that should be able
|
|
@@ -62,7 +68,8 @@ function effectiveGate(opts) {
|
|
|
62
68
|
* ```
|
|
63
69
|
*/
|
|
64
70
|
export function webSearchTool(opts = {}) {
|
|
65
|
-
const
|
|
71
|
+
const runtime = toolRuntime(opts);
|
|
72
|
+
const gate = effectiveGate(opts, runtime);
|
|
66
73
|
return createTool({
|
|
67
74
|
id: opts.id ?? "web_search",
|
|
68
75
|
description: WEB_SEARCH_TOOL_DESCRIPTION,
|
|
@@ -72,9 +79,8 @@ export function webSearchTool(opts = {}) {
|
|
|
72
79
|
// is treated as "always gate".
|
|
73
80
|
...(gate.mode === "none" ? {} : { requireApproval: () => true }),
|
|
74
81
|
execute: async (input) => {
|
|
75
|
-
const { config } = getWebSearchRuntime();
|
|
76
82
|
const request = parseToolInput(webSearchRequestSchema, input);
|
|
77
|
-
return runWebSearch(request,
|
|
83
|
+
return runWebSearch(request, runtime, await resolveWebSearchContext());
|
|
78
84
|
},
|
|
79
85
|
});
|
|
80
86
|
}
|
|
@@ -90,7 +96,8 @@ export function webSearchTool(opts = {}) {
|
|
|
90
96
|
* ```
|
|
91
97
|
*/
|
|
92
98
|
export function webFetchTool(opts = {}) {
|
|
93
|
-
const
|
|
99
|
+
const runtime = toolRuntime(opts);
|
|
100
|
+
const gate = effectiveGate(opts, runtime);
|
|
94
101
|
return createTool({
|
|
95
102
|
id: opts.id ?? "web_fetch",
|
|
96
103
|
description: WEB_FETCH_TOOL_DESCRIPTION,
|
|
@@ -105,9 +112,8 @@ export function webFetchTool(opts = {}) {
|
|
|
105
112
|
approvalMatches(gate, [parseToolInput(webFetchRequestSchema, input).url]),
|
|
106
113
|
}),
|
|
107
114
|
execute: async (input) => {
|
|
108
|
-
|
|
109
|
-
return runWebFetch(parseToolInput(webFetchRequestSchema, input), config);
|
|
115
|
+
return runWebFetch(parseToolInput(webFetchRequestSchema, input), runtime);
|
|
110
116
|
},
|
|
111
117
|
});
|
|
112
118
|
}
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWhELE9BQU8sRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEdBR2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsMEJBQTBCLEVBQzFCLDJCQUEyQixHQUM1QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBFOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQXNCLE1BQVMsRUFBRSxLQUFjO0lBQ3BFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDckIsQ0FBQztBQWNELGlGQUFpRjtBQUNqRixTQUFTLGFBQWEsQ0FBQyxJQUEwQjtJQUMvQyxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUztRQUNoQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUTtRQUN2QyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBNkIsRUFBRTtJQUMzRCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsT0FBTyxVQUFVLENBQUM7UUFDaEIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksWUFBWTtRQUMzQixXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLFdBQVcsRUFBRSxzQkFBc0I7UUFDbkMsWUFBWSxFQUFFLHFCQUFxQjtRQUNuQyx5RUFBeUU7UUFDekUsK0JBQStCO1FBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5RCxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBNkIsRUFBRTtJQUMxRCxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsT0FBTyxVQUFVLENBQUM7UUFDaEIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksV0FBVztRQUMxQixXQUFXLEVBQUUsMEJBQTBCO1FBQ3ZDLFdBQVcsRUFBRSxxQkFBcUI7UUFDbEMsWUFBWSxFQUFFLG9CQUFvQjtRQUNsQyxzRUFBc0U7UUFDdEUsd0JBQXdCO1FBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU07WUFDdEIsQ0FBQyxDQUFDLEVBQUU7WUFDSixDQUFDLENBQUM7Z0JBQ0UsZUFBZSxFQUFFLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FDbEMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRO29CQUN0QixlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsY0FBYyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzVFLENBQUM7UUFDTixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzRSxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGB3ZWJfc2VhcmNoYCBhbmQgYHdlYl9mZXRjaGAgTWFzdHJhIHRvb2xzLlxuICpcbiAqIGB3ZWJfc2VhcmNoYCBpcyBiYWNrZWQgYnkgdGhlIERhdGFicmlja3MgTW9kZWwgU2VydmluZyBuYXRpdmUgd2ViLXNlYXJjaFxuICogdG9vbDogaXQgcmVzb2x2ZXMgaXRzIG93biB3ZWItc2VhcmNoLWNhcGFibGUgbW9kZWwgKHNlZSBgc2VhcmNoLnRzYCkgYW5kXG4gKiBjYWxscyB0aGUgd29ya3NwYWNlIHNlcnZpbmcgZW5kcG9pbnQgdW5kZXIgdGhlIGNhbGxlcidzIE9CTyBzY29wZSwgc28gdGhlXG4gKiBzZWFyY2ggcnVucyBhcyB0aGUgcmVxdWVzdGluZyB1c2VyIGFuZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBhZ2VudCdzIGNoYXRcbiAqIG1vZGVsLiBgd2ViX2ZldGNoYCByZWFkcyBhIHBhZ2UgdmlhIGdvdC1zY3JhcGluZy5cbiAqXG4gKiBCb3RoIGFyZSByZWFkLW9ubHkgYW5kIHJ1biB3aXRob3V0IGFwcHJvdmFsIGJ5IGRlZmF1bHQ7IGVhY2ggYWNjZXB0cyBhblxuICogb3B0aW9uYWwge0BsaW5rIEFwcHJvdmFsR2F0ZX0gKGBhcHByb3ZhbGApIHRoYXQgbWFwcyBvbnRvIE1hc3RyYSdzXG4gKiBgcmVxdWlyZUFwcHJvdmFsYC4gYHRydWVgIGdhdGVzIGV2ZXJ5IGNhbGw7IGEgVVJMLXBhdHRlcm4gKG9yIHtAbGluayBPbmVPck1hbnl9XG4gKiBsaXN0KSBnYXRlcyBvbmx5IGNhbGxzIHdob3NlIFVSTCBtYXRjaGVzIC0gZm9yIGB3ZWJfZmV0Y2hgIHRoYXQgaXMgZXZhbHVhdGVkXG4gKiBhZ2FpbnN0IHRoZSB0YXJnZXQgVVJMLCB3aGlsZSBgd2ViX3NlYXJjaGAgKHdob3NlIHJlc3VsdCBVUkxzIGFyZW4ndCBrbm93blxuICogYmVmb3JlIHRoZSBjYWxsKSB0cmVhdHMgYSBwYXR0ZXJuIGdhdGUgYXMgXCJhbHdheXMgZ2F0ZVwiLiBgYXBwcm92YWxgIGZhbGxzXG4gKiBiYWNrIHRvIHRoZSBwbHVnaW4ncyBgYXBwcm92YWxgIGNvbmZpZyB3aGVuIGEgdG9vbCBvbWl0cyBpdHMgb3duLlxuICpcbiAqIFRoZSBzYW1lIHR3byB0b29scyBhcmUgZXhwb3NlZCB0byBBcHBLaXQncyBvd24gYWdlbnRzIHRocm91Z2ggdGhlIHBsdWdpbidzXG4gKiBgVG9vbFByb3ZpZGVyYCAoc2VlIGBwbHVnaW4udHNgKTsgdGhpcyBtb2R1bGUgaXMgdGhlIE1hc3RyYSBoYWxmLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBjcmVhdGVUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiO1xuaW1wb3J0IHR5cGUgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHtcbiAgYXBwcm92YWxNYXRjaGVzLFxuICB0b0FwcHJvdmFsUG9saWN5LFxuICB0eXBlIEFwcHJvdmFsR2F0ZSxcbiAgdHlwZSBBcHByb3ZhbFBvbGljeSxcbn0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBydW5XZWJGZXRjaCB9IGZyb20gXCIuL2ZldGNoLnRzXCI7XG5pbXBvcnQgeyBnZXRXZWJTZWFyY2hSdW50aW1lIH0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuaW1wb3J0IHtcbiAgd2ViRmV0Y2hSZXF1ZXN0U2NoZW1hLFxuICB3ZWJGZXRjaFJlc3VsdFNjaGVtYSxcbiAgd2ViU2VhcmNoUmVxdWVzdFNjaGVtYSxcbiAgd2ViU2VhcmNoUmVzdWx0U2NoZW1hLFxuICBXRUJfRkVUQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgV0VCX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcbmltcG9ydCB7IHJlc29sdmVXZWJTZWFyY2hDb250ZXh0LCBydW5XZWJTZWFyY2ggfSBmcm9tIFwiLi9zZWFyY2gudHNcIjtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHRvb2wgY2FsbCdzIGFyZ3VtZW50cyBhdCB0aGUgcnVudGltZSBib3VuZGFyeS4gTWFzdHJhIGNoZWNrcyB0aGVcbiAqIGlucHV0IHNjaGVtYSBiZWZvcmUgZGlzcGF0Y2gsIGJ1dCB0aGUgYXJndW1lbnQgc3RpbGwgYXJyaXZlcyB0eXBlZCBhc1xuICogYHVua25vd25gIGFuZCB0aGUgbW9kZWwgaXMgdGhlIG9uZSBmaWxsaW5nIGl0IGluLiBUaGUgcmVqZWN0ZWQgdmFsdWUgaXMgbm90XG4gKiBlY2hvZWQgYmFjay5cbiAqL1xuZnVuY3Rpb24gcGFyc2VUb29sSW5wdXQ8UyBleHRlbmRzIHouWm9kVHlwZT4oc2NoZW1hOiBTLCBpbnB1dDogdW5rbm93bik6IHouaW5mZXI8Uz4ge1xuICBjb25zdCBwYXJzZWQgPSBzY2hlbWEuc2FmZVBhcnNlKGlucHV0KTtcbiAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXCJpbnB1dFwiLCBpbnB1dCwgXCJhcmd1bWVudHMgbWF0Y2hpbmcgdGhlIHRvb2wncyBzY2hlbWFcIik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZC5kYXRhO1xufVxuXG4vKiogT3B0aW9ucyBzaGFyZWQgYnkgYm90aCB3ZWIgdG9vbHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYlNlYXJjaFRvb2xPcHRpb25zIHtcbiAgLyoqIE92ZXJyaWRlIHRoZSB0b29sIGlkLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEFwcHJvdmFsIGdhdGUgZm9yIHRoaXMgdG9vbCwgb3ZlcnJpZGluZyB0aGUgcGx1Z2luJ3MgYGFwcHJvdmFsYC4gYHRydWVgXG4gICAqIGdhdGVzIGV2ZXJ5IGNhbGw7IGEgVVJMLXBhdHRlcm4gKG9yIGxpc3QpIGdhdGVzIG9ubHkgbWF0Y2hpbmcgY2FsbHM7XG4gICAqIG9taXQgLyBgZmFsc2VgIGZvciBubyBhcHByb3ZhbC4gU2VlIHtAbGluayBBcHByb3ZhbEdhdGV9LlxuICAgKi9cbiAgYXBwcm92YWw/OiBBcHByb3ZhbEdhdGUgfCBBcHByb3ZhbFBvbGljeTtcbn1cblxuLyoqIFJlc29sdmUgdGhlIGVmZmVjdGl2ZSBnYXRlOiBleHBsaWNpdCB0b29sIG9wdGlvbiwgZWxzZSB0aGUgcGx1Z2luIGRlZmF1bHQuICovXG5mdW5jdGlvbiBlZmZlY3RpdmVHYXRlKG9wdHM6IFdlYlNlYXJjaFRvb2xPcHRpb25zKTogQXBwcm92YWxQb2xpY3kge1xuICByZXR1cm4gb3B0cy5hcHByb3ZhbCA9PT0gdW5kZWZpbmVkXG4gICAgPyBnZXRXZWJTZWFyY2hSdW50aW1lKCkuY29uZmlnLmFwcHJvdmFsXG4gICAgOiB0b0FwcHJvdmFsUG9saWN5KG9wdHMuYXBwcm92YWwpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBgd2ViX3NlYXJjaGAgdG9vbC4gU3ByZWFkIGl0IGludG8gdGhlIGFnZW50cyB0aGF0IHNob3VsZCBiZSBhYmxlXG4gKiB0byBzZWFyY2ggdGhlIHdlYi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHdlYlNlYXJjaFRvb2wgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtd2ViLXNlYXJjaFwiO1xuICogaW1wb3J0IHsgY3JlYXRlQWdlbnQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG4gKlxuICogY29uc3QgcmVzZWFyY2hlciA9IGNyZWF0ZUFnZW50KHtcbiAqICAgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiLFxuICogICB0b29sczogKCkgPT4gKHsgd2ViX3NlYXJjaDogd2ViU2VhcmNoVG9vbCgpIH0pLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdlYlNlYXJjaFRvb2wob3B0czogV2ViU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBnYXRlID0gZWZmZWN0aXZlR2F0ZShvcHRzKTtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRzLmlkID8/IFwid2ViX3NlYXJjaFwiLFxuICAgIGRlc2NyaXB0aW9uOiBXRUJfU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IHdlYlNlYXJjaFJlcXVlc3RTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiB3ZWJTZWFyY2hSZXN1bHRTY2hlbWEsXG4gICAgLy8gQSBzZWFyY2gncyByZXN1bHQgVVJMcyBhcmVuJ3Qga25vd24gYmVmb3JlIHRoZSBjYWxsLCBzbyBhIHBhdHRlcm4gZ2F0ZVxuICAgIC8vIGlzIHRyZWF0ZWQgYXMgXCJhbHdheXMgZ2F0ZVwiLlxuICAgIC4uLihnYXRlLm1vZGUgPT09IFwibm9uZVwiID8ge30gOiB7IHJlcXVpcmVBcHByb3ZhbDogKCkgPT4gdHJ1ZSB9KSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRXZWJTZWFyY2hSdW50aW1lKCk7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcGFyc2VUb29sSW5wdXQod2ViU2VhcmNoUmVxdWVzdFNjaGVtYSwgaW5wdXQpO1xuICAgICAgcmV0dXJuIHJ1bldlYlNlYXJjaChyZXF1ZXN0LCBjb25maWcsIGF3YWl0IHJlc29sdmVXZWJTZWFyY2hDb250ZXh0KCkpO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBgd2ViX2ZldGNoYCB0b29sLiBTcHJlYWQgaXQgaW50byB0aGUgYWdlbnRzIHRoYXQgc2hvdWxkIGJlIGFibGVcbiAqIHRvIHJlYWQgYSBwYWdlJ3MgY29udGVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB3ZWJGZXRjaFRvb2wgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtd2ViLXNlYXJjaFwiO1xuICpcbiAqIHRvb2xzOiAoKSA9PiAoeyB3ZWJfZmV0Y2g6IHdlYkZldGNoVG9vbCh7IGFwcHJvdmFsOiBcIiouaW50ZXJuYWwuZXhhbXBsZS5jb21cIiB9KSB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3ZWJGZXRjaFRvb2wob3B0czogV2ViU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCBnYXRlID0gZWZmZWN0aXZlR2F0ZShvcHRzKTtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRzLmlkID8/IFwid2ViX2ZldGNoXCIsXG4gICAgZGVzY3JpcHRpb246IFdFQl9GRVRDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiB3ZWJGZXRjaFJlcXVlc3RTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiB3ZWJGZXRjaFJlc3VsdFNjaGVtYSxcbiAgICAvLyBBIGZldGNoIGtub3dzIGl0cyBzaW5nbGUgdGFyZ2V0IFVSTCwgc28gYSBwYXR0ZXJuIGdhdGUgaXMgZXZhbHVhdGVkXG4gICAgLy8gcHJlY2lzZWx5IGFnYWluc3QgaXQuXG4gICAgLi4uKGdhdGUubW9kZSA9PT0gXCJub25lXCJcbiAgICAgID8ge31cbiAgICAgIDoge1xuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogKGlucHV0OiB1bmtub3duKSA9PlxuICAgICAgICAgICAgZ2F0ZS5tb2RlID09PSBcImFsd2F5c1wiIHx8XG4gICAgICAgICAgICBhcHByb3ZhbE1hdGNoZXMoZ2F0ZSwgW3BhcnNlVG9vbElucHV0KHdlYkZldGNoUmVxdWVzdFNjaGVtYSwgaW5wdXQpLnVybF0pLFxuICAgICAgICB9KSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQpID0+IHtcbiAgICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRXZWJTZWFyY2hSdW50aW1lKCk7XG4gICAgICByZXR1cm4gcnVuV2ViRmV0Y2gocGFyc2VUb29sSW5wdXQod2ViRmV0Y2hSZXF1ZXN0U2NoZW1hLCBpbnB1dCksIGNvbmZpZyk7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGdCQUFnQixHQUlqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxzQkFBc0IsRUFBeUIsTUFBTSxjQUFjLENBQUM7QUFDN0UsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsMkJBQTJCLEdBQzVCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEU7Ozs7O0dBS0c7QUFDSCxTQUFTLGNBQWMsQ0FBc0IsTUFBUyxFQUFFLEtBQWM7SUFDcEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sZUFBZSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLHNDQUFzQyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUNyQixDQUFDO0FBa0JELDRFQUE0RTtBQUM1RSxTQUFTLFdBQVcsQ0FBQyxJQUEwQjtJQUM3QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxTQUFTLENBQUMsbUVBQW1FLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLFNBQVMsYUFBYSxDQUFDLElBQTBCLEVBQUUsT0FBeUI7SUFDMUUsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQTZCLEVBQUU7SUFDM0QsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUMsT0FBTyxVQUFVLENBQUM7UUFDaEIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksWUFBWTtRQUMzQixXQUFXLEVBQUUsMkJBQTJCO1FBQ3hDLFdBQVcsRUFBRSxzQkFBc0I7UUFDbkMsWUFBWSxFQUFFLHFCQUFxQjtRQUNuQyx5RUFBeUU7UUFDekUsK0JBQStCO1FBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3ZCLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5RCxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsT0FBNkIsRUFBRTtJQUMxRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxPQUFPLFVBQVUsQ0FBQztRQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxXQUFXO1FBQzFCLFdBQVcsRUFBRSwwQkFBMEI7UUFDdkMsV0FBVyxFQUFFLHFCQUFxQjtRQUNsQyxZQUFZLEVBQUUsb0JBQW9CO1FBQ2xDLHNFQUFzRTtRQUN0RSx3QkFBd0I7UUFDeEIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTTtZQUN0QixDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQztnQkFDRSxlQUFlLEVBQUUsQ0FBQyxLQUFjLEVBQUUsRUFBRSxDQUNsQyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVE7b0JBQ3RCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDNUUsQ0FBQztRQUNOLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdkIsT0FBTyxXQUFXLENBQUMsY0FBYyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVFLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgYHdlYl9zZWFyY2hgIGFuZCBgd2ViX2ZldGNoYCBNYXN0cmEgdG9vbHMuXG4gKlxuICogYHdlYl9zZWFyY2hgIGlzIGJhY2tlZCBieSB0aGUgRGF0YWJyaWNrcyBNb2RlbCBTZXJ2aW5nIG5hdGl2ZSB3ZWItc2VhcmNoXG4gKiB0b29sOiBpdCByZXNvbHZlcyBpdHMgb3duIHdlYi1zZWFyY2gtY2FwYWJsZSBtb2RlbCAoc2VlIGBzZWFyY2gudHNgKSBhbmRcbiAqIGNhbGxzIHRoZSB3b3Jrc3BhY2Ugc2VydmluZyBlbmRwb2ludCB1bmRlciB0aGUgY2FsbGVyJ3MgT0JPIHNjb3BlLCBzbyB0aGVcbiAqIHNlYXJjaCBydW5zIGFzIHRoZSByZXF1ZXN0aW5nIHVzZXIgYW5kIGluZGVwZW5kZW50bHkgb2YgdGhlIGFnZW50J3MgY2hhdFxuICogbW9kZWwuIGB3ZWJfZmV0Y2hgIHJlYWRzIGEgcGFnZSB2aWEgZ290LXNjcmFwaW5nLlxuICpcbiAqIEJvdGggYXJlIHJlYWQtb25seSBhbmQgcnVuIHdpdGhvdXQgYXBwcm92YWwgYnkgZGVmYXVsdDsgZWFjaCBhY2NlcHRzIGFuXG4gKiBvcHRpb25hbCB7QGxpbmsgQXBwcm92YWxHYXRlfSAoYGFwcHJvdmFsYCkgdGhhdCBtYXBzIG9udG8gTWFzdHJhJ3NcbiAqIGByZXF1aXJlQXBwcm92YWxgLiBgdHJ1ZWAgZ2F0ZXMgZXZlcnkgY2FsbDsgYSBVUkwtcGF0dGVybiAob3Ige0BsaW5rIE9uZU9yTWFueX1cbiAqIGxpc3QpIGdhdGVzIG9ubHkgY2FsbHMgd2hvc2UgVVJMIG1hdGNoZXMgLSBmb3IgYHdlYl9mZXRjaGAgdGhhdCBpcyBldmFsdWF0ZWRcbiAqIGFnYWluc3QgdGhlIHRhcmdldCBVUkwsIHdoaWxlIGB3ZWJfc2VhcmNoYCAod2hvc2UgcmVzdWx0IFVSTHMgYXJlbid0IGtub3duXG4gKiBiZWZvcmUgdGhlIGNhbGwpIHRyZWF0cyBhIHBhdHRlcm4gZ2F0ZSBhcyBcImFsd2F5cyBnYXRlXCIuIGBhcHByb3ZhbGAgZmFsbHNcbiAqIGJhY2sgdG8gdGhlIHN0YW5kYWxvbmUgcnVudGltZSdzIGBhcHByb3ZhbGAgY29uZmlnIHdoZW4gYSB0b29sIG9taXRzIGl0cyBvd24uXG4gKlxuICogQXBwLWludGVncmF0ZWQgYWdlbnRzIHNob3VsZCBjb25zdW1lIHRoZSBwbHVnaW4ncyBuYXRpdmUgdG9vbGtpdCBzbyBjYWxsc1xuICogcmV0YWluIHRoYXQgcGx1Z2luJ3MgcG9saWN5IGFuZCBleGVjdXRvci4gVGhlc2UgZmFjdG9yaWVzIGFyZSB0aGUgc3RhbmRhbG9uZVxuICogTWFzdHJhIHN1cmZhY2UgYW5kIGNhcHR1cmUgYW4gZXhwbGljaXQgcnVudGltZSBvciBpc29sYXRlZCBjb25maWcuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGNyZWF0ZVRvb2wgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3Rvb2xzXCI7XG5pbXBvcnQgdHlwZSB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQge1xuICBhcHByb3ZhbE1hdGNoZXMsXG4gIHRvQXBwcm92YWxQb2xpY3ksXG4gIHR5cGUgQXBwcm92YWxHYXRlLFxuICB0eXBlIEFwcHJvdmFsUG9saWN5LFxuICB0eXBlIFdlYlNlYXJjaFBsdWdpbkNvbmZpZyxcbn0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQgeyBydW5XZWJGZXRjaCB9IGZyb20gXCIuL2ZldGNoLnRzXCI7XG5pbXBvcnQgeyBjcmVhdGVXZWJTZWFyY2hSdW50aW1lLCB0eXBlIFdlYlNlYXJjaFJ1bnRpbWUgfSBmcm9tIFwiLi9ydW50aW1lLnRzXCI7XG5pbXBvcnQge1xuICB3ZWJGZXRjaFJlcXVlc3RTY2hlbWEsXG4gIHdlYkZldGNoUmVzdWx0U2NoZW1hLFxuICB3ZWJTZWFyY2hSZXF1ZXN0U2NoZW1hLFxuICB3ZWJTZWFyY2hSZXN1bHRTY2hlbWEsXG4gIFdFQl9GRVRDSF9UT09MX0RFU0NSSVBUSU9OLFxuICBXRUJfU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG59IGZyb20gXCIuL3NjaGVtYS50c1wiO1xuaW1wb3J0IHsgcmVzb2x2ZVdlYlNlYXJjaENvbnRleHQsIHJ1bldlYlNlYXJjaCB9IGZyb20gXCIuL3NlYXJjaC50c1wiO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgdG9vbCBjYWxsJ3MgYXJndW1lbnRzIGF0IHRoZSBydW50aW1lIGJvdW5kYXJ5LiBNYXN0cmEgY2hlY2tzIHRoZVxuICogaW5wdXQgc2NoZW1hIGJlZm9yZSBkaXNwYXRjaCwgYnV0IHRoZSBhcmd1bWVudCBzdGlsbCBhcnJpdmVzIHR5cGVkIGFzXG4gKiBgdW5rbm93bmAgYW5kIHRoZSBtb2RlbCBpcyB0aGUgb25lIGZpbGxpbmcgaXQgaW4uIFRoZSByZWplY3RlZCB2YWx1ZSBpcyBub3RcbiAqIGVjaG9lZCBiYWNrLlxuICovXG5mdW5jdGlvbiBwYXJzZVRvb2xJbnB1dDxTIGV4dGVuZHMgei5ab2RUeXBlPihzY2hlbWE6IFMsIGlucHV0OiB1bmtub3duKTogei5pbmZlcjxTPiB7XG4gIGNvbnN0IHBhcnNlZCA9IHNjaGVtYS5zYWZlUGFyc2UoaW5wdXQpO1xuICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcImlucHV0XCIsIGlucHV0LCBcImFyZ3VtZW50cyBtYXRjaGluZyB0aGUgdG9vbCdzIHNjaGVtYVwiKTtcbiAgfVxuICByZXR1cm4gcGFyc2VkLmRhdGE7XG59XG5cbi8qKiBPcHRpb25zIHNoYXJlZCBieSBib3RoIHdlYiB0b29scy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViU2VhcmNoVG9vbE9wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgdGhlIHRvb2wgaWQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogSXNvbGF0ZWQgcnVudGltZSB1c2VkIGJ5IHRoaXMgc3RhbmRhbG9uZSB0b29sLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgY29uZmlnYC4gKi9cbiAgcnVudGltZT86IFdlYlNlYXJjaFJ1bnRpbWU7XG4gIC8qKiBDb25maWcgdXNlZCB0byBjcmVhdGUgYW4gaXNvbGF0ZWQgZGlyZWN0LWV4ZWN1dGlvbiBydW50aW1lLiAqL1xuICBjb25maWc/OiBXZWJTZWFyY2hQbHVnaW5Db25maWc7XG4gIC8qKlxuICAgKiBBcHByb3ZhbCBnYXRlIGZvciB0aGlzIHRvb2wsIG92ZXJyaWRpbmcgdGhlIHJ1bnRpbWUncyBgYXBwcm92YWxgLiBgdHJ1ZWBcbiAgICogZ2F0ZXMgZXZlcnkgY2FsbDsgYSBVUkwtcGF0dGVybiAob3IgbGlzdCkgZ2F0ZXMgb25seSBtYXRjaGluZyBjYWxscztcbiAgICogb21pdCAvIGBmYWxzZWAgZm9yIG5vIGFwcHJvdmFsLiBTZWUge0BsaW5rIEFwcHJvdmFsR2F0ZX0uXG4gICAqL1xuICBhcHByb3ZhbD86IEFwcHJvdmFsR2F0ZSB8IEFwcHJvdmFsUG9saWN5O1xufVxuXG4vKiogUmVzb2x2ZSB0aGUgaXNvbGF0ZWQgcnVudGltZSBjYXB0dXJlZCBieSBvbmUgc3RhbmRhbG9uZSB0b29sIGZhY3RvcnkuICovXG5mdW5jdGlvbiB0b29sUnVudGltZShvcHRzOiBXZWJTZWFyY2hUb29sT3B0aW9ucyk6IFdlYlNlYXJjaFJ1bnRpbWUge1xuICBpZiAob3B0cy5ydW50aW1lICYmIG9wdHMuY29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIndlYi1zZWFyY2ggdG9vbCBvcHRpb25zIGFjY2VwdCBlaXRoZXIgcnVudGltZSBvciBjb25maWcsIG5vdCBib3RoXCIpO1xuICB9XG4gIHJldHVybiBvcHRzLnJ1bnRpbWUgPz8gY3JlYXRlV2ViU2VhcmNoUnVudGltZShvcHRzLmNvbmZpZyk7XG59XG5cbi8qKiBSZXNvbHZlIHRoZSBlZmZlY3RpdmUgZ2F0ZTogZXhwbGljaXQgdG9vbCBvcHRpb24sIGVsc2UgdGhlIHJ1bnRpbWUgZGVmYXVsdC4gKi9cbmZ1bmN0aW9uIGVmZmVjdGl2ZUdhdGUob3B0czogV2ViU2VhcmNoVG9vbE9wdGlvbnMsIHJ1bnRpbWU6IFdlYlNlYXJjaFJ1bnRpbWUpOiBBcHByb3ZhbFBvbGljeSB7XG4gIHJldHVybiBvcHRzLmFwcHJvdmFsID09PSB1bmRlZmluZWQgPyBydW50aW1lLmNvbmZpZy5hcHByb3ZhbCA6IHRvQXBwcm92YWxQb2xpY3kob3B0cy5hcHByb3ZhbCk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGB3ZWJfc2VhcmNoYCB0b29sLiBTcHJlYWQgaXQgaW50byB0aGUgYWdlbnRzIHRoYXQgc2hvdWxkIGJlIGFibGVcbiAqIHRvIHNlYXJjaCB0aGUgd2ViLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgd2ViU2VhcmNoVG9vbCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC13ZWItc2VhcmNoXCI7XG4gKiBpbXBvcnQgeyBjcmVhdGVBZ2VudCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFcIjtcbiAqXG4gKiBjb25zdCByZXNlYXJjaGVyID0gY3JlYXRlQWdlbnQoe1xuICogICBpbnN0cnVjdGlvbnM6IFwiLi4uXCIsXG4gKiAgIHRvb2xzOiAoKSA9PiAoeyB3ZWJfc2VhcmNoOiB3ZWJTZWFyY2hUb29sKCkgfSksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2ViU2VhcmNoVG9vbChvcHRzOiBXZWJTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHJ1bnRpbWUgPSB0b29sUnVudGltZShvcHRzKTtcbiAgY29uc3QgZ2F0ZSA9IGVmZmVjdGl2ZUdhdGUob3B0cywgcnVudGltZSk7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0cy5pZCA/PyBcIndlYl9zZWFyY2hcIixcbiAgICBkZXNjcmlwdGlvbjogV0VCX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiB3ZWJTZWFyY2hSZXF1ZXN0U2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogd2ViU2VhcmNoUmVzdWx0U2NoZW1hLFxuICAgIC8vIEEgc2VhcmNoJ3MgcmVzdWx0IFVSTHMgYXJlbid0IGtub3duIGJlZm9yZSB0aGUgY2FsbCwgc28gYSBwYXR0ZXJuIGdhdGVcbiAgICAvLyBpcyB0cmVhdGVkIGFzIFwiYWx3YXlzIGdhdGVcIi5cbiAgICAuLi4oZ2F0ZS5tb2RlID09PSBcIm5vbmVcIiA/IHt9IDogeyByZXF1aXJlQXBwcm92YWw6ICgpID0+IHRydWUgfSksXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcGFyc2VUb29sSW5wdXQod2ViU2VhcmNoUmVxdWVzdFNjaGVtYSwgaW5wdXQpO1xuICAgICAgcmV0dXJuIHJ1bldlYlNlYXJjaChyZXF1ZXN0LCBydW50aW1lLCBhd2FpdCByZXNvbHZlV2ViU2VhcmNoQ29udGV4dCgpKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYHdlYl9mZXRjaGAgdG9vbC4gU3ByZWFkIGl0IGludG8gdGhlIGFnZW50cyB0aGF0IHNob3VsZCBiZSBhYmxlXG4gKiB0byByZWFkIGEgcGFnZSdzIGNvbnRlbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgd2ViRmV0Y2hUb29sIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LXdlYi1zZWFyY2hcIjtcbiAqXG4gKiB0b29sczogKCkgPT4gKHsgd2ViX2ZldGNoOiB3ZWJGZXRjaFRvb2woeyBhcHByb3ZhbDogXCIqLmludGVybmFsLmV4YW1wbGUuY29tXCIgfSkgfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2ViRmV0Y2hUb29sKG9wdHM6IFdlYlNlYXJjaFRvb2xPcHRpb25zID0ge30pIHtcbiAgY29uc3QgcnVudGltZSA9IHRvb2xSdW50aW1lKG9wdHMpO1xuICBjb25zdCBnYXRlID0gZWZmZWN0aXZlR2F0ZShvcHRzLCBydW50aW1lKTtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRzLmlkID8/IFwid2ViX2ZldGNoXCIsXG4gICAgZGVzY3JpcHRpb246IFdFQl9GRVRDSF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiB3ZWJGZXRjaFJlcXVlc3RTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiB3ZWJGZXRjaFJlc3VsdFNjaGVtYSxcbiAgICAvLyBBIGZldGNoIGtub3dzIGl0cyBzaW5nbGUgdGFyZ2V0IFVSTCwgc28gYSBwYXR0ZXJuIGdhdGUgaXMgZXZhbHVhdGVkXG4gICAgLy8gcHJlY2lzZWx5IGFnYWluc3QgaXQuXG4gICAgLi4uKGdhdGUubW9kZSA9PT0gXCJub25lXCJcbiAgICAgID8ge31cbiAgICAgIDoge1xuICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogKGlucHV0OiB1bmtub3duKSA9PlxuICAgICAgICAgICAgZ2F0ZS5tb2RlID09PSBcImFsd2F5c1wiIHx8XG4gICAgICAgICAgICBhcHByb3ZhbE1hdGNoZXMoZ2F0ZSwgW3BhcnNlVG9vbElucHV0KHdlYkZldGNoUmVxdWVzdFNjaGVtYSwgaW5wdXQpLnVybF0pLFxuICAgICAgICB9KSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQpID0+IHtcbiAgICAgIHJldHVybiBydW5XZWJGZXRjaChwYXJzZVRvb2xJbnB1dCh3ZWJGZXRjaFJlcXVlc3RTY2hlbWEsIGlucHV0KSwgcnVudGltZSk7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -21,19 +21,23 @@
|
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/bun": "1.3.14",
|
|
23
23
|
"@types/express": "^5.0.5",
|
|
24
|
+
"@types/html-to-text": "^9",
|
|
24
25
|
"@types/json-schema": "^7",
|
|
25
26
|
"@types/node": "^24.6.0",
|
|
26
27
|
"typescript": "^5.9.3"
|
|
27
28
|
},
|
|
28
29
|
"dependencies": {
|
|
29
30
|
"@databricks/appkit": "^0.60.0",
|
|
30
|
-
"@dbx-tools/core": "0.6.
|
|
31
|
-
"@dbx-tools/model": "0.6.
|
|
32
|
-
"@dbx-tools/path": "0.6.
|
|
33
|
-
"@dbx-tools/shared-core": "0.6.
|
|
34
|
-
"@dbx-tools/shared-model": "0.6.
|
|
31
|
+
"@dbx-tools/core": "0.6.225",
|
|
32
|
+
"@dbx-tools/model": "0.6.225",
|
|
33
|
+
"@dbx-tools/path": "0.6.225",
|
|
34
|
+
"@dbx-tools/shared-core": "0.6.225",
|
|
35
|
+
"@dbx-tools/shared-model": "0.6.225",
|
|
35
36
|
"@mastra/core": "1.71.0",
|
|
37
|
+
"cheerio": "^1.2.0",
|
|
38
|
+
"entities": "^4.5.0",
|
|
36
39
|
"got-scraping": "^4.2.1",
|
|
40
|
+
"html-to-text": "^9.0.5",
|
|
37
41
|
"zod": "4.3.6"
|
|
38
42
|
},
|
|
39
43
|
"main": "./lib/index.js",
|
|
@@ -50,7 +54,7 @@
|
|
|
50
54
|
"./package.json": "./package.json"
|
|
51
55
|
}
|
|
52
56
|
},
|
|
53
|
-
"version": "0.6.
|
|
57
|
+
"version": "0.6.225",
|
|
54
58
|
"types": "./lib/index.d.ts",
|
|
55
59
|
"type": "module",
|
|
56
60
|
"exports": {
|
package/src/fetch.ts
CHANGED
|
@@ -18,10 +18,9 @@
|
|
|
18
18
|
import { log } from "@dbx-tools/shared-core";
|
|
19
19
|
import { gotScraping } from "got-scraping";
|
|
20
20
|
import { assertFetchUrlAllowed } from "./_fetch-url.ts";
|
|
21
|
-
import type { ResolvedWebSearchConfig } from "./config.ts";
|
|
22
21
|
import { toCallSettings, webFetchExecuteDefaults } from "./defaults.ts";
|
|
23
22
|
import { decodeHtmlEntities, htmlToText } from "./html-text.ts";
|
|
24
|
-
import { executeRead } from "./runtime.ts";
|
|
23
|
+
import { executeRead, toWebSearchRuntime, type WebSearchRuntimeInput } from "./runtime.ts";
|
|
25
24
|
import type { WebFetchRequest, WebFetchResult } from "./schema.ts";
|
|
26
25
|
|
|
27
26
|
const logger = log.logger("web-search/fetch");
|
|
@@ -57,15 +56,18 @@ function truncate(text: string, max: number): { content: string; truncated: bool
|
|
|
57
56
|
*/
|
|
58
57
|
export async function runWebFetch(
|
|
59
58
|
request: WebFetchRequest,
|
|
60
|
-
|
|
59
|
+
runtimeOrConfig: WebSearchRuntimeInput,
|
|
61
60
|
signal?: AbortSignal,
|
|
62
61
|
): Promise<WebFetchResult> {
|
|
62
|
+
const runtime = toWebSearchRuntime(runtimeOrConfig);
|
|
63
|
+
const { config } = runtime;
|
|
63
64
|
await assertFetchUrlAllowed(request.url, config.allowList);
|
|
64
65
|
const cap = Math.min(request.maxLength ?? config.fetchMaxLength, config.fetchMaxLength);
|
|
65
66
|
|
|
66
67
|
// The response is cached before the format reduction, so the same page read
|
|
67
68
|
// as text and as html shares one network round trip.
|
|
68
69
|
const page = await executeRead(
|
|
70
|
+
runtime,
|
|
69
71
|
"page-fetch",
|
|
70
72
|
toCallSettings(webFetchExecuteDefaults, config.timeoutMs, [
|
|
71
73
|
"web-search",
|
package/src/html-text.ts
CHANGED
|
@@ -2,42 +2,40 @@
|
|
|
2
2
|
* Turning fetched HTML into the plain text a model can read.
|
|
3
3
|
*
|
|
4
4
|
* Both scraping paths need this: `runWebFetch`'s full-page read and
|
|
5
|
-
* `runScrapeSearch`'s title/snippet extraction.
|
|
6
|
-
* the
|
|
7
|
-
*
|
|
8
|
-
* This is deliberately regex-based rather than a DOM parse. The inputs are
|
|
9
|
-
* whole pages fetched for summarization, not documents to be queried, so the
|
|
10
|
-
* cost of a real parser buys nothing - and a malformed page still degrades to
|
|
11
|
-
* readable text instead of throwing.
|
|
5
|
+
* `runScrapeSearch`'s title/snippet extraction. Parser-backed conversion keeps
|
|
6
|
+
* malformed markup, quoted `>` characters, and the complete HTML entity table
|
|
7
|
+
* consistent across both paths.
|
|
12
8
|
*
|
|
13
9
|
* @module
|
|
14
10
|
*/
|
|
15
11
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"'": "'",
|
|
29
|
-
"'": "'",
|
|
12
|
+
import { decodeHTML } from "entities";
|
|
13
|
+
import { compile, type HtmlToTextOptions } from "html-to-text";
|
|
14
|
+
|
|
15
|
+
const SHARED_OPTIONS: HtmlToTextOptions = {
|
|
16
|
+
wordwrap: false,
|
|
17
|
+
selectors: [
|
|
18
|
+
{ selector: "script", format: "skip" },
|
|
19
|
+
{ selector: "style", format: "skip" },
|
|
20
|
+
{ selector: "noscript", format: "skip" },
|
|
21
|
+
{ selector: "a", options: { ignoreHref: true } },
|
|
22
|
+
{ selector: "img", format: "skip" },
|
|
23
|
+
],
|
|
30
24
|
};
|
|
31
25
|
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
const fragmentToText = compile({
|
|
27
|
+
...SHARED_OPTIONS,
|
|
28
|
+
preserveNewlines: false,
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
const documentToText = compile({
|
|
32
|
+
...SHARED_OPTIONS,
|
|
33
|
+
preserveNewlines: true,
|
|
34
|
+
});
|
|
35
35
|
|
|
36
|
-
/** Decode
|
|
36
|
+
/** Decode named, decimal, and hexadecimal HTML entities without throwing. */
|
|
37
37
|
export function decodeHtmlEntities(text: string): string {
|
|
38
|
-
return text
|
|
39
|
-
.replace(NAMED_ENTITY_REGEXP, (entity) => NAMED_ENTITIES[entity] ?? entity)
|
|
40
|
-
.replace(NUMERIC_ENTITY_REGEXP, (_, code) => String.fromCodePoint(Number(code)));
|
|
38
|
+
return decodeHTML(text);
|
|
41
39
|
}
|
|
42
40
|
|
|
43
41
|
/**
|
|
@@ -46,7 +44,7 @@ export function decodeHtmlEntities(text: string): string {
|
|
|
46
44
|
* summary), where layout carries no meaning.
|
|
47
45
|
*/
|
|
48
46
|
export function htmlFragmentToText(html: string): string {
|
|
49
|
-
return
|
|
47
|
+
return fragmentToText(html).replace(/\s+/g, " ").trim();
|
|
50
48
|
}
|
|
51
49
|
|
|
52
50
|
/**
|
|
@@ -57,14 +55,7 @@ export function htmlFragmentToText(html: string): string {
|
|
|
57
55
|
* preserves line structure because paragraph breaks carry meaning in a page.
|
|
58
56
|
*/
|
|
59
57
|
export function htmlToText(html: string): string {
|
|
60
|
-
return
|
|
61
|
-
html
|
|
62
|
-
.replace(/<!--[\s\S]*?-->/g, "")
|
|
63
|
-
.replace(/<(script|style|noscript)[^>]*>[\s\S]*?<\/\1>/gi, "")
|
|
64
|
-
.replace(/<\/(p|div|section|article|li|tr|h[1-6]|header|footer|br)>/gi, "\n")
|
|
65
|
-
.replace(/<br\s*\/?>/gi, "\n")
|
|
66
|
-
.replace(TAG_REGEXP, ""),
|
|
67
|
-
)
|
|
58
|
+
return documentToText(html)
|
|
68
59
|
.replace(/[ \t]+\n/g, "\n")
|
|
69
60
|
.replace(/\n{3,}/g, "\n\n")
|
|
70
61
|
.replace(/[ \t]{2,}/g, " ")
|