@dbx-tools/genie 0.9.154 → 0.9.158
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 +5 -1
- package/lib/index.d.ts +5 -1
- package/lib/index.js +6 -2
- package/lib/src/agent-mode.d.ts +3 -3
- package/lib/src/agent-mode.js +16 -18
- package/lib/src/chat.d.ts +2 -2
- package/lib/src/chat.js +11 -11
- package/lib/src/feedback.d.ts +2 -2
- package/lib/src/feedback.js +5 -5
- package/lib/src/space.d.ts +3 -3
- package/lib/src/space.js +14 -15
- package/package.json +5 -45
- package/src/agent-mode.ts +22 -23
- package/src/chat.ts +17 -11
- package/src/feedback.ts +8 -5
- package/src/space.ts +20 -16
package/index.ts
CHANGED
|
@@ -3,12 +3,16 @@
|
|
|
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/genie";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.158";
|
|
7
7
|
export * as agentMode from "./src/agent-mode.ts";
|
|
8
8
|
export * as chat from "./src/chat.ts";
|
|
9
9
|
export * as feedback from "./src/feedback.ts";
|
|
10
10
|
export * as space from "./src/space.ts";
|
|
11
|
+
export { genieAgentModeChat, listAgentModeConversation, isAgentModeUnavailable } from "./src/agent-mode.ts";
|
|
11
12
|
export type { GenieAgentModeOptions } from "./src/agent-mode.ts";
|
|
13
|
+
export { genieChat, genieEventChat } from "./src/chat.ts";
|
|
12
14
|
export type { GenieChatOptions } from "./src/chat.ts";
|
|
15
|
+
export { sendGenieMessageFeedback } from "./src/feedback.ts";
|
|
13
16
|
export type { SendGenieMessageFeedbackOptions } from "./src/feedback.ts";
|
|
17
|
+
export { createGenieSpace, getGenieSpace, genieSampleQuestions } from "./src/space.ts";
|
|
14
18
|
export type { GetGenieSpaceOptions, CreateGenieSpaceOptions } from "./src/space.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/genie";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.158";
|
|
3
3
|
export * as agentMode from "./src/agent-mode.ts";
|
|
4
4
|
export * as chat from "./src/chat.ts";
|
|
5
5
|
export * as feedback from "./src/feedback.ts";
|
|
6
6
|
export * as space from "./src/space.ts";
|
|
7
|
+
export { genieAgentModeChat, listAgentModeConversation, isAgentModeUnavailable } from "./src/agent-mode.ts";
|
|
7
8
|
export type { GenieAgentModeOptions } from "./src/agent-mode.ts";
|
|
9
|
+
export { genieChat, genieEventChat } from "./src/chat.ts";
|
|
8
10
|
export type { GenieChatOptions } from "./src/chat.ts";
|
|
11
|
+
export { sendGenieMessageFeedback } from "./src/feedback.ts";
|
|
9
12
|
export type { SendGenieMessageFeedbackOptions } from "./src/feedback.ts";
|
|
13
|
+
export { createGenieSpace, getGenieSpace, genieSampleQuestions } from "./src/space.ts";
|
|
10
14
|
export type { GetGenieSpaceOptions, CreateGenieSpaceOptions } from "./src/space.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,9 +2,13 @@
|
|
|
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/genie";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.158";
|
|
6
6
|
export * as agentMode from "./src/agent-mode.js";
|
|
7
7
|
export * as chat from "./src/chat.js";
|
|
8
8
|
export * as feedback from "./src/feedback.js";
|
|
9
9
|
export * as space from "./src/space.js";
|
|
10
|
-
|
|
10
|
+
export { genieAgentModeChat, listAgentModeConversation, isAgentModeUnavailable } from "./src/agent-mode.js";
|
|
11
|
+
export { genieChat, genieEventChat } from "./src/chat.js";
|
|
12
|
+
export { sendGenieMessageFeedback } from "./src/feedback.js";
|
|
13
|
+
export { createGenieSpace, getGenieSpace, genieSampleQuestions } from "./src/space.js";
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTVHLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvZ2VuaWVcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xNThcIjtcbmV4cG9ydCAqIGFzIGFnZW50TW9kZSBmcm9tIFwiLi9zcmMvYWdlbnQtbW9kZS50c1wiO1xuZXhwb3J0ICogYXMgY2hhdCBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgZmVlZGJhY2sgZnJvbSBcIi4vc3JjL2ZlZWRiYWNrLnRzXCI7XG5leHBvcnQgKiBhcyBzcGFjZSBmcm9tIFwiLi9zcmMvc3BhY2UudHNcIjtcbmV4cG9ydCB7IGdlbmllQWdlbnRNb2RlQ2hhdCwgbGlzdEFnZW50TW9kZUNvbnZlcnNhdGlvbiwgaXNBZ2VudE1vZGVVbmF2YWlsYWJsZSB9IGZyb20gXCIuL3NyYy9hZ2VudC1tb2RlLnRzXCI7XG5leHBvcnQgdHlwZSB7IEdlbmllQWdlbnRNb2RlT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9hZ2VudC1tb2RlLnRzXCI7XG5leHBvcnQgeyBnZW5pZUNoYXQsIGdlbmllRXZlbnRDaGF0IH0gZnJvbSBcIi4vc3JjL2NoYXQudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVDaGF0T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9jaGF0LnRzXCI7XG5leHBvcnQgeyBzZW5kR2VuaWVNZXNzYWdlRmVlZGJhY2sgfSBmcm9tIFwiLi9zcmMvZmVlZGJhY2sudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VuZEdlbmllTWVzc2FnZUZlZWRiYWNrT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9mZWVkYmFjay50c1wiO1xuZXhwb3J0IHsgY3JlYXRlR2VuaWVTcGFjZSwgZ2V0R2VuaWVTcGFjZSwgZ2VuaWVTYW1wbGVRdWVzdGlvbnMgfSBmcm9tIFwiLi9zcmMvc3BhY2UudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2V0R2VuaWVTcGFjZU9wdGlvbnMsIENyZWF0ZUdlbmllU3BhY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3NwYWNlLnRzXCI7XG4iXX0=
|
package/lib/src/agent-mode.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
11
|
import type { WorkspaceClient } from "@databricks/appkit";
|
|
12
|
-
import {
|
|
12
|
+
import { type ContextLike } from "@dbx-tools/appkit";
|
|
13
13
|
import { type GenieMessage } from "@dbx-tools/shared-genie";
|
|
14
14
|
/** Inputs for one Agent Mode response stream. */
|
|
15
15
|
export interface GenieAgentModeOptions {
|
|
@@ -17,7 +17,7 @@ export interface GenieAgentModeOptions {
|
|
|
17
17
|
enableVisualization?: boolean;
|
|
18
18
|
/** Original user text projected into client-visible snapshots when input is augmented. */
|
|
19
19
|
displayContent?: string;
|
|
20
|
-
context?:
|
|
20
|
+
context?: ContextLike;
|
|
21
21
|
}
|
|
22
22
|
/** Stream one Agent Mode response as `GenieMessage` snapshots. */
|
|
23
23
|
export declare function genieAgentModeChat(client: WorkspaceClient, agentId: string, content: string, options?: GenieAgentModeOptions): AsyncGenerator<GenieMessage, void, void>;
|
|
@@ -26,7 +26,7 @@ export declare function genieAgentModeChat(client: WorkspaceClient, agentId: str
|
|
|
26
26
|
* `GenieMessage` per turn, oldest first.
|
|
27
27
|
*/
|
|
28
28
|
export declare function listAgentModeConversation(client: WorkspaceClient, agentId: string, conversationId: string, options?: {
|
|
29
|
-
context?:
|
|
29
|
+
context?: ContextLike;
|
|
30
30
|
}): Promise<GenieMessage[]>;
|
|
31
31
|
/** Return whether Agent Mode is disabled or its preview toggle is unavailable. */
|
|
32
32
|
export declare function isAgentModeUnavailable(value: unknown): boolean;
|
package/lib/src/agent-mode.js
CHANGED
|
@@ -8,20 +8,18 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
11
|
+
import { toContext } from "@dbx-tools/appkit";
|
|
12
|
+
import { log, errorContext, toError, parse, isRecord, deepEqual } from "@dbx-tools/shared-core";
|
|
13
|
+
import { GenieAgentModeProjection, GenieAgentConversationItemsSchema, projectAgentModeConversation, GenieAgentModeEventSchema, } from "@dbx-tools/shared-genie";
|
|
14
14
|
const logger = log.logger("genie/agent-mode");
|
|
15
15
|
const CANCEL_TIMEOUT_MS = 5_000;
|
|
16
16
|
const ITEM_PAGE_SIZE = 100;
|
|
17
17
|
/** Stream one Agent Mode response as `GenieMessage` snapshots. */
|
|
18
18
|
export async function* genieAgentModeChat(client, agentId, content, options = {}) {
|
|
19
19
|
const ownedController = options.context ? undefined : new AbortController();
|
|
20
|
-
const projection = new
|
|
20
|
+
const projection = new GenieAgentModeProjection(agentId, options.displayContent ?? content);
|
|
21
21
|
try {
|
|
22
|
-
const context = options.context
|
|
23
|
-
? databricks.toContext(options.context)
|
|
24
|
-
: databricks.toContext(ownedController);
|
|
22
|
+
const context = options.context ? toContext(options.context) : toContext(ownedController);
|
|
25
23
|
const response = await client.apiClient.request({
|
|
26
24
|
path: `/api/2.0/genie/agents/${encodeURIComponent(agentId)}/responses`,
|
|
27
25
|
method: "POST",
|
|
@@ -42,7 +40,7 @@ export async function* genieAgentModeChat(client, agentId, content, options = {}
|
|
|
42
40
|
...(options.enableVisualization ? { enable_viz: true } : {}),
|
|
43
41
|
},
|
|
44
42
|
}, context);
|
|
45
|
-
const stream =
|
|
43
|
+
const stream = isRecord(response) ? response.contents : undefined;
|
|
46
44
|
if (!isReadableStream(stream)) {
|
|
47
45
|
throw new TypeError("Genie Agent Mode did not return an SSE stream");
|
|
48
46
|
}
|
|
@@ -51,7 +49,7 @@ export async function* genieAgentModeChat(client, agentId, content, options = {}
|
|
|
51
49
|
const message = projection.apply(event);
|
|
52
50
|
if (!message)
|
|
53
51
|
continue;
|
|
54
|
-
if (!
|
|
52
|
+
if (!deepEqual(message, previous)) {
|
|
55
53
|
yield message;
|
|
56
54
|
previous = message;
|
|
57
55
|
}
|
|
@@ -72,12 +70,12 @@ export async function* genieAgentModeChat(client, agentId, content, options = {}
|
|
|
72
70
|
* `GenieMessage` per turn, oldest first.
|
|
73
71
|
*/
|
|
74
72
|
export async function listAgentModeConversation(client, agentId, conversationId, options = {}) {
|
|
75
|
-
const context = options.context ?
|
|
73
|
+
const context = options.context ? toContext(options.context) : undefined;
|
|
76
74
|
const items = [];
|
|
77
75
|
let after;
|
|
78
76
|
let status = "completed";
|
|
79
77
|
do {
|
|
80
|
-
const page =
|
|
78
|
+
const page = GenieAgentConversationItemsSchema.parse(await client.apiClient.request({
|
|
81
79
|
path: `/api/2.0/genie/agents/${encodeURIComponent(agentId)}/conversations/${encodeURIComponent(conversationId)}/items`,
|
|
82
80
|
method: "GET",
|
|
83
81
|
headers: new Headers({ accept: "application/json" }),
|
|
@@ -88,15 +86,15 @@ export async function listAgentModeConversation(client, agentId, conversationId,
|
|
|
88
86
|
status = page.status ?? status;
|
|
89
87
|
after = page.has_more ? page.last_id : undefined;
|
|
90
88
|
} while (after);
|
|
91
|
-
return
|
|
89
|
+
return projectAgentModeConversation(agentId, conversationId, items, status);
|
|
92
90
|
}
|
|
93
91
|
/** Return whether Agent Mode is disabled or its preview toggle is unavailable. */
|
|
94
92
|
export function isAgentModeUnavailable(value) {
|
|
95
|
-
const context =
|
|
93
|
+
const context = errorContext(value);
|
|
96
94
|
return context.hasMessage("feature", "disabled") || context.hasMessage("preview", "toggle");
|
|
97
95
|
}
|
|
98
96
|
function isReadableStream(value) {
|
|
99
|
-
return
|
|
97
|
+
return isRecord(value) && typeof value.getReader === "function";
|
|
100
98
|
}
|
|
101
99
|
async function cancelResponse(client, agentId, conversationId, responseId) {
|
|
102
100
|
const controller = new AbortController();
|
|
@@ -110,14 +108,14 @@ async function cancelResponse(client, agentId, conversationId, responseId) {
|
|
|
110
108
|
"content-type": "application/json",
|
|
111
109
|
}),
|
|
112
110
|
raw: false,
|
|
113
|
-
},
|
|
111
|
+
}, toContext(controller));
|
|
114
112
|
}
|
|
115
113
|
catch (err) {
|
|
116
114
|
logger.debug("response:cancel-failed", {
|
|
117
115
|
agentId,
|
|
118
116
|
conversationId,
|
|
119
117
|
responseId,
|
|
120
|
-
error:
|
|
118
|
+
error: toError(err),
|
|
121
119
|
});
|
|
122
120
|
}
|
|
123
121
|
finally {
|
|
@@ -160,6 +158,6 @@ function parseSseFrame(frame) {
|
|
|
160
158
|
.join("\n");
|
|
161
159
|
if (!data || data === "[DONE]")
|
|
162
160
|
return undefined;
|
|
163
|
-
return
|
|
161
|
+
return GenieAgentModeEventSchema.parse(parse(data));
|
|
164
162
|
}
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUNMLFNBQVMsSUFBSSxhQUFhLEdBRzNCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzlDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQVczQixrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsa0JBQWtCLENBQ3ZDLE1BQXVCLEVBQ3ZCLE9BQWUsRUFDZixPQUFlLEVBQ2YsVUFBaUMsRUFBRTtJQUVuQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksZUFBZSxFQUFFLENBQUM7SUFDNUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxhQUFhLENBQUMsd0JBQXdCLENBQzNELE9BQU8sRUFDUCxPQUFPLENBQUMsY0FBYyxJQUFJLE9BQU8sQ0FDbEMsQ0FBQztJQUNGLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1lBQzdCLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDdkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsZUFBZ0IsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFB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QUFDSCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYTtJQUNsQyxNQUFNLElBQUksR0FBRyxLQUFLO1NBQ2YsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNkLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2QsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pELE9BQU8sYUFBYSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuaWUgQWdlbnQgTW9kZSBTU0UgdHJhbnNwb3J0LlxuICpcbiAqIFN0cmVhbXMgdGhlIFJlc3BvbnNlcy1zaGFwZWQgQWdlbnQgTW9kZSBBUEkgYW5kIHByb2plY3RzIGl0cyByZWFzb25pbmcsIFNRTCxcbiAqIHF1ZXJ5IG91dHB1dCwgYW5kIGZpbmFsIGFuc3dlciBpdGVtcyBvbnRvIHRoZSBleGlzdGluZyBgR2VuaWVNZXNzYWdlYFxuICogY29udHJhY3Qgc28gY2FsbGVycyBjYW4ga2VlcCBvbmUgc2VtYW50aWMgZXZlbnQgcGlwZWxpbmUgYWNyb3NzIEFnZW50IE1vZGVcbiAqIGFuZCB0aGUgbGVnYWN5IHBvbGxpbmcgQVBJLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGRhdGFicmlja3MgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGpzb24sIGxvZywgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIGFnZW50TW9kZSBhcyBhZ2VudE1vZGVXaXJlLFxuICB0eXBlIEdlbmllQWdlbnRNb2RlRXZlbnQsXG4gIHR5cGUgR2VuaWVNZXNzYWdlLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWVcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImdlbmllL2FnZW50LW1vZGVcIik7XG5jb25zdCBDQU5DRUxfVElNRU9VVF9NUyA9IDVfMDAwO1xuY29uc3QgSVRFTV9QQUdFX1NJWkUgPSAxMDA7XG5cbi8qKiBJbnB1dHMgZm9yIG9uZSBBZ2VudCBNb2RlIHJlc3BvbnNlIHN0cmVhbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuaWVBZ2VudE1vZGVPcHRpb25zIHtcbiAgY29udmVyc2F0aW9uSWQ/OiBzdHJpbmc7XG4gIGVuYWJsZVZpc3VhbGl6YXRpb24/OiBib29sZWFuO1xuICAvKiogT3JpZ2luYWwgdXNlciB0ZXh0IHByb2plY3RlZCBpbnRvIGNsaWVudC12aXNpYmxlIHNuYXBzaG90cyB3aGVuIGlucHV0IGlzIGF1Z21lbnRlZC4gKi9cbiAgZGlzcGxheUNvbnRlbnQ/OiBzdHJpbmc7XG4gIGNvbnRleHQ/OiBkYXRhYnJpY2tzLkNvbnRleHRMaWtlO1xufVxuXG4vKiogU3RyZWFtIG9uZSBBZ2VudCBNb2RlIHJlc3BvbnNlIGFzIGBHZW5pZU1lc3NhZ2VgIHNuYXBzaG90cy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZ2VuaWVBZ2VudE1vZGVDaGF0KFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgYWdlbnRJZDogc3RyaW5nLFxuICBjb250ZW50OiBzdHJpbmcsXG4gIG9wdGlvbnM6IEdlbmllQWdlbnRNb2RlT3B0aW9ucyA9IHt9LFxuKTogQXN5bmNHZW5lcmF0b3I8R2VuaWVNZXNzYWdlLCB2b2lkLCB2b2lkPiB7XG4gIGNvbnN0IG93bmVkQ29udHJvbGxlciA9IG9wdGlvbnMuY29udGV4dCA/IHVuZGVmaW5lZCA6IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgcHJvamVjdGlvbiA9IG5ldyBhZ2VudE1vZGVXaXJlLkdlbmllQWdlbnRNb2RlUHJvamVjdGlvbihcbiAgICBhZ2VudElkLFxuICAgIG9wdGlvbnMuZGlzcGxheUNvbnRlbnQgPz8gY29udGVudCxcbiAgKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0XG4gICAgICA/IGRhdGFicmlja3MudG9Db250ZXh0KG9wdGlvbnMuY29udGV4dClcbiAgICAgIDogZGF0YWJyaWNrcy50b0NvbnRleHQob3duZWRDb250cm9sbGVyISk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIHBhdGg6IGAvYXBpLzIuMC9nZW5pZS9hZ2VudHMvJHtlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCl9L3Jlc3BvbnNlc2AsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgICBhY2NlcHQ6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcbiAgICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfSksXG4gICAgICAgIHJhdzogdHJ1ZSxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIGlucHV0OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgICAgICAgICAgICByb2xlOiBcInVzZXJcIixcbiAgICAgICAgICAgICAgY29udGVudDogW3sgdHlwZTogXCJpbnB1dF90ZXh0XCIsIHRleHQ6IGNvbnRlbnQgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgLi4uKG9wdGlvbnMuY29udmVyc2F0aW9uSWQgPyB7IGNvbnZlcnNhdGlvbl9pZDogb3B0aW9ucy5jb252ZXJzYXRpb25JZCB9IDoge30pLFxuICAgICAgICAgIC4uLihvcHRpb25zLmVuYWJsZVZpc3VhbGl6YXRpb24gPyB7IGVuYWJsZV92aXo6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBjb250ZXh0LFxuICAgICk7XG4gICAgY29uc3Qgc3RyZWFtID0gb2JqZWN0LmlzUmVjb3JkKHJlc3BvbnNlKSA/IHJlc3BvbnNlLmNvbnRlbnRzIDogdW5kZWZpbmVkO1xuICAgIGlmICghaXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuaWUgQWdlbnQgTW9kZSBkaWQgbm90IHJldHVybiBhbiBTU0Ugc3RyZWFtXCIpO1xuICAgIH1cblxuICAgIGxldCBwcmV2aW91czogR2VuaWVNZXNzYWdlIHwgdW5kZWZpbmVkO1xuICAgIGZvciBhd2FpdCAoY29uc3QgZXZlbnQgb2YgcGFyc2VTc2Uoc3RyZWFtKSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHByb2plY3Rpb24uYXBwbHkoZXZlbnQpO1xuICAgICAgaWYgKCFtZXNzYWdlKSBjb250aW51ZTtcbiAgICAgIGlmICghb2JqZWN0LmRlZXBFcXVhbChtZXNzYWdlLCBwcmV2aW91cykpIHtcbiAgICAgICAgeWllbGQgbWVzc2FnZTtcbiAgICAgICAgcHJldmlvdXMgPSBtZXNzYWdlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXByb2plY3Rpb24udGVybWluYWwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmllIEFnZW50IE1vZGUgc3RyZWFtIGVuZGVkIGJlZm9yZSBhIHRlcm1pbmFsIHJlc3BvbnNlXCIpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBvd25lZENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgaWYgKCFwcm9qZWN0aW9uLnRlcm1pbmFsICYmIHByb2plY3Rpb24ucmVzcG9uc2VJZCAmJiBwcm9qZWN0aW9uLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICBhd2FpdCBjYW5jZWxSZXNwb25zZShjbGllbnQsIGFnZW50SWQsIHByb2plY3Rpb24uY29udmVyc2F0aW9uSWQsIHByb2plY3Rpb24ucmVzcG9uc2VJZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogTG9hZCBhbiBBZ2VudCBNb2RlIGNvbnZlcnNhdGlvbidzIGZ1bGwgaXRlbSBoaXN0b3J5IGFuZCBwcm9qZWN0IGl0IG9udG8gb25lXG4gKiBgR2VuaWVNZXNzYWdlYCBwZXIgdHVybiwgb2xkZXN0IGZpcnN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdEFnZW50TW9kZUNvbnZlcnNhdGlvbihcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gIGFnZW50SWQ6IHN0cmluZyxcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogeyBjb250ZXh0PzogZGF0YWJyaWNrcy5Db250ZXh0TGlrZSB9ID0ge30sXG4pOiBQcm9taXNlPEdlbmllTWVzc2FnZVtdPiB7XG4gIGNvbnN0IGNvbnRleHQgPSBvcHRpb25zLmNvbnRleHQgPyBkYXRhYnJpY2tzLnRvQ29udGV4dChvcHRpb25zLmNvbnRleHQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBpdGVtczogYWdlbnRNb2RlV2lyZS5HZW5pZUFnZW50T3V0cHV0SXRlbVtdID0gW107XG4gIGxldCBhZnRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBsZXQgc3RhdHVzID0gXCJjb21wbGV0ZWRcIjtcbiAgZG8ge1xuICAgIGNvbnN0IHBhZ2UgPSBhZ2VudE1vZGVXaXJlLkdlbmllQWdlbnRDb252ZXJzYXRpb25JdGVtc1NjaGVtYS5wYXJzZShcbiAgICAgIGF3YWl0IGNsaWVudC5hcGlDbGllbnQucmVxdWVzdChcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6IGAvYXBpLzIuMC9nZW5pZS9hZ2VudHMvJHtlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCl9L2NvbnZlcnNhdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoY29udmVyc2F0aW9uSWQpfS9pdGVtc2AsXG4gICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsgYWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9KSxcbiAgICAgICAgICBxdWVyeTogeyBsaW1pdDogSVRFTV9QQUdFX1NJWkUsIG9yZGVyOiBcImFzY1wiLCAuLi4oYWZ0ZXIgPyB7IGFmdGVyIH0gOiB7fSkgfSxcbiAgICAgICAgICByYXc6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBjb250ZXh0LFxuICAgICAgKSxcbiAgICApO1xuICAgIGl0ZW1zLnB1c2goLi4ucGFnZS5kYXRhKTtcbiAgICBzdGF0dXMgPSBwYWdlLnN0YXR1cyA/PyBzdGF0dXM7XG4gICAgYWZ0ZXIgPSBwYWdlLmhhc19tb3JlID8gcGFnZS5sYXN0X2lkIDogdW5kZWZpbmVkO1xuICB9IHdoaWxlIChhZnRlcik7XG4gIHJldHVybiBhZ2VudE1vZGVXaXJlLnByb2plY3RBZ2VudE1vZGVDb252ZXJzYXRpb24oYWdlbnRJZCwgY29udmVyc2F0aW9uSWQsIGl0ZW1zLCBzdGF0dXMpO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgQWdlbnQgTW9kZSBpcyBkaXNhYmxlZCBvciBpdHMgcHJldmlldyB0b2dnbGUgaXMgdW5hdmFpbGFibGUuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBZ2VudE1vZGVVbmF2YWlsYWJsZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBjb250ZXh0ID0gZXJyb3JVdGlscy5lcnJvckNvbnRleHQodmFsdWUpO1xuICByZXR1cm4gY29udGV4dC5oYXNNZXNzYWdlKFwiZmVhdHVyZVwiLCBcImRpc2FibGVkXCIpIHx8IGNvbnRleHQuaGFzTWVzc2FnZShcInByZXZpZXdcIiwgXCJ0b2dnbGVcIik7XG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW0odmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PiB7XG4gIHJldHVybiBvYmplY3QuaXNSZWNvcmQodmFsdWUpICYmIHR5cGVvZiB2YWx1ZS5nZXRSZWFkZXIgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FuY2VsUmVzcG9uc2UoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICBhZ2VudElkOiBzdHJpbmcsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gIHJlc3BvbnNlSWQ6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIENBTkNFTF9USU1FT1VUX01TKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbGllbnQuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIHBhdGg6IGAvYXBpLzIuMC9nZW5pZS9hZ2VudHMvJHtlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCl9L2NvbnZlcnNhdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoY29udmVyc2F0aW9uSWQpfS9yZXNwb25zZXMvJHtlbmNvZGVVUklDb21wb25lbnQocmVzcG9uc2VJZCl9L2NhbmNlbGAsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICB9KSxcbiAgICAgICAgcmF3OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBkYXRhYnJpY2tzLnRvQ29udGV4dChjb250cm9sbGVyKSxcbiAgICApO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJyZXNwb25zZTpjYW5jZWwtZmFpbGVkXCIsIHtcbiAgICAgIGFnZW50SWQsXG4gICAgICBjb252ZXJzYXRpb25JZCxcbiAgICAgIHJlc3BvbnNlSWQsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy50b0Vycm9yKGVyciksXG4gICAgfSk7XG4gIH0gZmluYWxseSB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiBwYXJzZVNzZShcbiAgc3RyZWFtOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pixcbik6IEFzeW5jR2VuZXJhdG9yPEdlbmllQWdlbnRNb2RlRXZlbnQsIHZvaWQsIHZvaWQ+IHtcbiAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGxldCBidWZmZXIgPSBcIlwiO1xuICB0cnkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogIWRvbmUgfSk7XG4gICAgICBjb25zdCBmcmFtZXMgPSBidWZmZXIuc3BsaXQoL1xccj9cXG5cXHI/XFxuLyk7XG4gICAgICBidWZmZXIgPSBmcmFtZXMucG9wKCkgPz8gXCJcIjtcbiAgICAgIGZvciAoY29uc3QgZnJhbWUgb2YgZnJhbWVzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gcGFyc2VTc2VGcmFtZShmcmFtZSk7XG4gICAgICAgIGlmIChldmVudCkgeWllbGQgZXZlbnQ7XG4gICAgICB9XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBjb25zdCBldmVudCA9IHBhcnNlU3NlRnJhbWUoYnVmZmVyKTtcbiAgICAgICAgaWYgKGV2ZW50KSB5aWVsZCBldmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgIHJlYWRlci5yZWxlYXNlTG9jaygpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3NlRnJhbWUoZnJhbWU6IHN0cmluZyk6IEdlbmllQWdlbnRNb2RlRXZlbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBkYXRhID0gZnJhbWVcbiAgICAuc3BsaXQoL1xccj9cXG4vKVxuICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUuc3RhcnRzV2l0aChcImRhdGE6XCIpKVxuICAgIC5tYXAoKGxpbmUpID0+IGxpbmUuc2xpY2UoNSkudHJpbVN0YXJ0KCkpXG4gICAgLmpvaW4oXCJcXG5cIik7XG4gIGlmICghZGF0YSB8fCBkYXRhID09PSBcIltET05FXVwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gYWdlbnRNb2RlV2lyZS5HZW5pZUFnZW50TW9kZUV2ZW50U2NoZW1hLnBhcnNlKGpzb24ucGFyc2UoZGF0YSkpO1xufVxuIl19
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBb0IsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEcsT0FBTyxFQUdMLHdCQUF3QixFQUV4QixpQ0FBaUMsRUFDakMsNEJBQTRCLEVBQzVCLHlCQUF5QixHQUMxQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUM5QyxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUNoQyxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7QUFXM0Isa0VBQWtFO0FBQ2xFLE1BQU0sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixDQUN2QyxNQUF1QixFQUN2QixPQUFlLEVBQ2YsT0FBZSxFQUNmLFVBQWlDLEVBQUU7SUFFbkMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDO0lBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksd0JBQXdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDLENBQUM7SUFDNUYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLGVBQWdCLENBQUMsQ0FBQztRQUMzRixNQUFN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Q0FBQyxPQUFPLENBQUM7U0FDZCxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDMUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNkLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNqRCxPQUFPLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5pZSBBZ2VudCBNb2RlIFNTRSB0cmFuc3BvcnQuXG4gKlxuICogU3RyZWFtcyB0aGUgUmVzcG9uc2VzLXNoYXBlZCBBZ2VudCBNb2RlIEFQSSBhbmQgcHJvamVjdHMgaXRzIHJlYXNvbmluZywgU1FMLFxuICogcXVlcnkgb3V0cHV0LCBhbmQgZmluYWwgYW5zd2VyIGl0ZW1zIG9udG8gdGhlIGV4aXN0aW5nIGBHZW5pZU1lc3NhZ2VgXG4gKiBjb250cmFjdCBzbyBjYWxsZXJzIGNhbiBrZWVwIG9uZSBzZW1hbnRpYyBldmVudCBwaXBlbGluZSBhY3Jvc3MgQWdlbnQgTW9kZVxuICogYW5kIHRoZSBsZWdhY3kgcG9sbGluZyBBUEkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgdHlwZSBDb250ZXh0TGlrZSwgdG9Db250ZXh0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2csIGVycm9yQ29udGV4dCwgdG9FcnJvciwgcGFyc2UsIGlzUmVjb3JkLCBkZWVwRXF1YWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBHZW5pZUFnZW50TW9kZUV2ZW50LFxuICB0eXBlIEdlbmllTWVzc2FnZSxcbiAgR2VuaWVBZ2VudE1vZGVQcm9qZWN0aW9uLFxuICB0eXBlIEdlbmllQWdlbnRPdXRwdXRJdGVtLFxuICBHZW5pZUFnZW50Q29udmVyc2F0aW9uSXRlbXNTY2hlbWEsXG4gIHByb2plY3RBZ2VudE1vZGVDb252ZXJzYXRpb24sXG4gIEdlbmllQWdlbnRNb2RlRXZlbnRTY2hlbWEsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZ2VuaWUvYWdlbnQtbW9kZVwiKTtcbmNvbnN0IENBTkNFTF9USU1FT1VUX01TID0gNV8wMDA7XG5jb25zdCBJVEVNX1BBR0VfU0laRSA9IDEwMDtcblxuLyoqIElucHV0cyBmb3Igb25lIEFnZW50IE1vZGUgcmVzcG9uc2Ugc3RyZWFtLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5pZUFnZW50TW9kZU9wdGlvbnMge1xuICBjb252ZXJzYXRpb25JZD86IHN0cmluZztcbiAgZW5hYmxlVmlzdWFsaXphdGlvbj86IGJvb2xlYW47XG4gIC8qKiBPcmlnaW5hbCB1c2VyIHRleHQgcHJvamVjdGVkIGludG8gY2xpZW50LXZpc2libGUgc25hcHNob3RzIHdoZW4gaW5wdXQgaXMgYXVnbWVudGVkLiAqL1xuICBkaXNwbGF5Q29udGVudD86IHN0cmluZztcbiAgY29udGV4dD86IENvbnRleHRMaWtlO1xufVxuXG4vKiogU3RyZWFtIG9uZSBBZ2VudCBNb2RlIHJlc3BvbnNlIGFzIGBHZW5pZU1lc3NhZ2VgIHNuYXBzaG90cy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZ2VuaWVBZ2VudE1vZGVDaGF0KFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgYWdlbnRJZDogc3RyaW5nLFxuICBjb250ZW50OiBzdHJpbmcsXG4gIG9wdGlvbnM6IEdlbmllQWdlbnRNb2RlT3B0aW9ucyA9IHt9LFxuKTogQXN5bmNHZW5lcmF0b3I8R2VuaWVNZXNzYWdlLCB2b2lkLCB2b2lkPiB7XG4gIGNvbnN0IG93bmVkQ29udHJvbGxlciA9IG9wdGlvbnMuY29udGV4dCA/IHVuZGVmaW5lZCA6IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgcHJvamVjdGlvbiA9IG5ldyBHZW5pZUFnZW50TW9kZVByb2plY3Rpb24oYWdlbnRJZCwgb3B0aW9ucy5kaXNwbGF5Q29udGVudCA/PyBjb250ZW50KTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0ID8gdG9Db250ZXh0KG9wdGlvbnMuY29udGV4dCkgOiB0b0NvbnRleHQob3duZWRDb250cm9sbGVyISk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIHBhdGg6IGAvYXBpLzIuMC9nZW5pZS9hZ2VudHMvJHtlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCl9L3Jlc3BvbnNlc2AsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgICBhY2NlcHQ6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcbiAgICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfSksXG4gICAgICAgIHJhdzogdHJ1ZSxcbiAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgIGlucHV0OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgICAgICAgICAgICByb2xlOiBcInVzZXJcIixcbiAgICAgICAgICAgICAgY29udGVudDogW3sgdHlwZTogXCJpbnB1dF90ZXh0XCIsIHRleHQ6IGNvbnRlbnQgfV0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgLi4uKG9wdGlvbnMuY29udmVyc2F0aW9uSWQgPyB7IGNvbnZlcnNhdGlvbl9pZDogb3B0aW9ucy5jb252ZXJzYXRpb25JZCB9IDoge30pLFxuICAgICAgICAgIC4uLihvcHRpb25zLmVuYWJsZVZpc3VhbGl6YXRpb24gPyB7IGVuYWJsZV92aXo6IHRydWUgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBjb250ZXh0LFxuICAgICk7XG4gICAgY29uc3Qgc3RyZWFtID0gaXNSZWNvcmQocmVzcG9uc2UpID8gcmVzcG9uc2UuY29udGVudHMgOiB1bmRlZmluZWQ7XG4gICAgaWYgKCFpc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5pZSBBZ2VudCBNb2RlIGRpZCBub3QgcmV0dXJuIGFuIFNTRSBzdHJlYW1cIik7XG4gICAgfVxuXG4gICAgbGV0IHByZXZpb3VzOiBHZW5pZU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gICAgZm9yIGF3YWl0IChjb25zdCBldmVudCBvZiBwYXJzZVNzZShzdHJlYW0pKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gcHJvamVjdGlvbi5hcHBseShldmVudCk7XG4gICAgICBpZiAoIW1lc3NhZ2UpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFkZWVwRXF1YWwobWVzc2FnZSwgcHJldmlvdXMpKSB7XG4gICAgICAgIHlpZWxkIG1lc3NhZ2U7XG4gICAgICAgIHByZXZpb3VzID0gbWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwcm9qZWN0aW9uLnRlcm1pbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5pZSBBZ2VudCBNb2RlIHN0cmVhbSBlbmRlZCBiZWZvcmUgYSB0ZXJtaW5hbCByZXNwb25zZVwiKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgb3duZWRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIGlmICghcHJvamVjdGlvbi50ZXJtaW5hbCAmJiBwcm9qZWN0aW9uLnJlc3BvbnNlSWQgJiYgcHJvamVjdGlvbi5jb252ZXJzYXRpb25JZCkge1xuICAgICAgYXdhaXQgY2FuY2VsUmVzcG9uc2UoY2xpZW50LCBhZ2VudElkLCBwcm9qZWN0aW9uLmNvbnZlcnNhdGlvbklkLCBwcm9qZWN0aW9uLnJlc3BvbnNlSWQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExvYWQgYW4gQWdlbnQgTW9kZSBjb252ZXJzYXRpb24ncyBmdWxsIGl0ZW0gaGlzdG9yeSBhbmQgcHJvamVjdCBpdCBvbnRvIG9uZVxuICogYEdlbmllTWVzc2FnZWAgcGVyIHR1cm4sIG9sZGVzdCBmaXJzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RBZ2VudE1vZGVDb252ZXJzYXRpb24oXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICBhZ2VudElkOiBzdHJpbmcsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHsgY29udGV4dD86IENvbnRleHRMaWtlIH0gPSB7fSxcbik6IFByb21pc2U8R2VuaWVNZXNzYWdlW10+IHtcbiAgY29uc3QgY29udGV4dCA9IG9wdGlvbnMuY29udGV4dCA/IHRvQ29udGV4dChvcHRpb25zLmNvbnRleHQpIDogdW5kZWZpbmVkO1xuICBjb25zdCBpdGVtczogR2VuaWVBZ2VudE91dHB1dEl0ZW1bXSA9IFtdO1xuICBsZXQgYWZ0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IHN0YXR1cyA9IFwiY29tcGxldGVkXCI7XG4gIGRvIHtcbiAgICBjb25zdCBwYWdlID0gR2VuaWVBZ2VudENvbnZlcnNhdGlvbkl0ZW1zU2NoZW1hLnBhcnNlKFxuICAgICAgYXdhaXQgY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogYC9hcGkvMi4wL2dlbmllL2FnZW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChhZ2VudElkKX0vY29udmVyc2F0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChjb252ZXJzYXRpb25JZCl9L2l0ZW1zYCxcbiAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoeyBhY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiIH0pLFxuICAgICAgICAgIHF1ZXJ5OiB7IGxpbWl0OiBJVEVNX1BBR0VfU0laRSwgb3JkZXI6IFwiYXNjXCIsIC4uLihhZnRlciA/IHsgYWZ0ZXIgfSA6IHt9KSB9LFxuICAgICAgICAgIHJhdzogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHQsXG4gICAgICApLFxuICAgICk7XG4gICAgaXRlbXMucHVzaCguLi5wYWdlLmRhdGEpO1xuICAgIHN0YXR1cyA9IHBhZ2Uuc3RhdHVzID8/IHN0YXR1cztcbiAgICBhZnRlciA9IHBhZ2UuaGFzX21vcmUgPyBwYWdlLmxhc3RfaWQgOiB1bmRlZmluZWQ7XG4gIH0gd2hpbGUgKGFmdGVyKTtcbiAgcmV0dXJuIHByb2plY3RBZ2VudE1vZGVDb252ZXJzYXRpb24oYWdlbnRJZCwgY29udmVyc2F0aW9uSWQsIGl0ZW1zLCBzdGF0dXMpO1xufVxuXG4vKiogUmV0dXJuIHdoZXRoZXIgQWdlbnQgTW9kZSBpcyBkaXNhYmxlZCBvciBpdHMgcHJldmlldyB0b2dnbGUgaXMgdW5hdmFpbGFibGUuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBZ2VudE1vZGVVbmF2YWlsYWJsZSh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBjb250ZXh0ID0gZXJyb3JDb250ZXh0KHZhbHVlKTtcbiAgcmV0dXJuIGNvbnRleHQuaGFzTWVzc2FnZShcImZlYXR1cmVcIiwgXCJkaXNhYmxlZFwiKSB8fCBjb250ZXh0Lmhhc01lc3NhZ2UoXCJwcmV2aWV3XCIsIFwidG9nZ2xlXCIpO1xufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4ge1xuICByZXR1cm4gaXNSZWNvcmQodmFsdWUpICYmIHR5cGVvZiB2YWx1ZS5nZXRSZWFkZXIgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2FuY2VsUmVzcG9uc2UoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICBhZ2VudElkOiBzdHJpbmcsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gIHJlc3BvbnNlSWQ6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIENBTkNFTF9USU1FT1VUX01TKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbGllbnQuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIHBhdGg6IGAvYXBpLzIuMC9nZW5pZS9hZ2VudHMvJHtlbmNvZGVVUklDb21wb25lbnQoYWdlbnRJZCl9L2NvbnZlcnNhdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoY29udmVyc2F0aW9uSWQpfS9yZXNwb25zZXMvJHtlbmNvZGVVUklDb21wb25lbnQocmVzcG9uc2VJZCl9L2NhbmNlbGAsXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICB9KSxcbiAgICAgICAgcmF3OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB0b0NvbnRleHQoY29udHJvbGxlciksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVzcG9uc2U6Y2FuY2VsLWZhaWxlZFwiLCB7XG4gICAgICBhZ2VudElkLFxuICAgICAgY29udmVyc2F0aW9uSWQsXG4gICAgICByZXNwb25zZUlkLFxuICAgICAgZXJyb3I6IHRvRXJyb3IoZXJyKSxcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24qIHBhcnNlU3NlKFxuICBzdHJlYW06IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+LFxuKTogQXN5bmNHZW5lcmF0b3I8R2VuaWVBZ2VudE1vZGVFdmVudCwgdm9pZCwgdm9pZD4ge1xuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgbGV0IGJ1ZmZlciA9IFwiXCI7XG4gIHRyeSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiAhZG9uZSB9KTtcbiAgICAgIGNvbnN0IGZyYW1lcyA9IGJ1ZmZlci5zcGxpdCgvXFxyP1xcblxccj9cXG4vKTtcbiAgICAgIGJ1ZmZlciA9IGZyYW1lcy5wb3AoKSA/PyBcIlwiO1xuICAgICAgZm9yIChjb25zdCBmcmFtZSBvZiBmcmFtZXMpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBwYXJzZVNzZUZyYW1lKGZyYW1lKTtcbiAgICAgICAgaWYgKGV2ZW50KSB5aWVsZCBldmVudDtcbiAgICAgIH1cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gcGFyc2VTc2VGcmFtZShidWZmZXIpO1xuICAgICAgICBpZiAoZXZlbnQpIHlpZWxkIGV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcmVhZGVyLmNhbmNlbCgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VTc2VGcmFtZShmcmFtZTogc3RyaW5nKTogR2VuaWVBZ2VudE1vZGVFdmVudCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRhdGEgPSBmcmFtZVxuICAgIC5zcGxpdCgvXFxyP1xcbi8pXG4gICAgLmZpbHRlcigobGluZSkgPT4gbGluZS5zdGFydHNXaXRoKFwiZGF0YTpcIikpXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS5zbGljZSg1KS50cmltU3RhcnQoKSlcbiAgICAuam9pbihcIlxcblwiKTtcbiAgaWYgKCFkYXRhIHx8IGRhdGEgPT09IFwiW0RPTkVdXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBHZW5pZUFnZW50TW9kZUV2ZW50U2NoZW1hLnBhcnNlKHBhcnNlKGRhdGEpKTtcbn1cbiJdfQ==
|
package/lib/src/chat.d.ts
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* @module
|
|
26
26
|
*/
|
|
27
27
|
import { type WorkspaceClient } from "@databricks/appkit";
|
|
28
|
-
import {
|
|
28
|
+
import { type ContextLike } from "@dbx-tools/appkit";
|
|
29
29
|
import { type GenieChatEvent, type GenieMessage } from "@dbx-tools/shared-genie";
|
|
30
30
|
/** Options accepted by both {@link genieChat} and {@link genieEventChat}. */
|
|
31
31
|
export interface GenieChatOptions {
|
|
@@ -63,7 +63,7 @@ export interface GenieChatOptions {
|
|
|
63
63
|
* `Context` (see `databricks.ContextLike`). Aborting it cancels every in-flight
|
|
64
64
|
* Agent Mode stream, SDK call, and the next inter-poll sleep.
|
|
65
65
|
*/
|
|
66
|
-
context?:
|
|
66
|
+
context?: ContextLike;
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
69
69
|
* One turn against a Genie space, yielded as a stream of `GenieMessage`
|
package/lib/src/chat.js
CHANGED
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
* @module
|
|
26
26
|
*/
|
|
27
27
|
import { createWorkspaceClient, getExecutionContext, } from "@databricks/appkit";
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
28
|
+
import { toContext } from "@dbx-tools/appkit";
|
|
29
|
+
import { log, poll, toError } from "@dbx-tools/shared-core";
|
|
30
|
+
import { eventsFromMessage, GenieMessageSchema, isTerminalStatus, } from "@dbx-tools/shared-genie";
|
|
31
31
|
import { genieAgentModeChat, isAgentModeUnavailable } from "./agent-mode.js";
|
|
32
32
|
const logger = log.logger("genie/chat");
|
|
33
33
|
/**
|
|
@@ -39,7 +39,7 @@ const logger = log.logger("genie/chat");
|
|
|
39
39
|
* whole turn.
|
|
40
40
|
*/
|
|
41
41
|
function validateMessage(raw) {
|
|
42
|
-
const result =
|
|
42
|
+
const result = GenieMessageSchema.safeParse(raw);
|
|
43
43
|
if (result.success)
|
|
44
44
|
return result.data;
|
|
45
45
|
logger.debug("wire-message:schema-miss", {
|
|
@@ -93,7 +93,7 @@ export async function* genieChat(space_id, content, options) {
|
|
|
93
93
|
// re-attach an abort listener to `options.context` on every poll iteration
|
|
94
94
|
// (via `databricks.toContext` -> `async.tieAbortSignal`), eventually tripping
|
|
95
95
|
// Node's `MaxListenersExceededWarning`.
|
|
96
|
-
const ctx =
|
|
96
|
+
const ctx = toContext(controller, options?.context);
|
|
97
97
|
if (options?.agentMode !== false) {
|
|
98
98
|
let yielded = false;
|
|
99
99
|
try {
|
|
@@ -114,7 +114,7 @@ export async function* genieChat(space_id, content, options) {
|
|
|
114
114
|
}
|
|
115
115
|
logger.warn("agent-mode:unavailable, falling back to polling", {
|
|
116
116
|
space_id,
|
|
117
|
-
error:
|
|
117
|
+
error: toError(err),
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -151,7 +151,7 @@ export async function* genieChat(space_id, content, options) {
|
|
|
151
151
|
message_id: messageId,
|
|
152
152
|
}, ctx);
|
|
153
153
|
};
|
|
154
|
-
yield*
|
|
154
|
+
yield* poll(async (pollCtx) => validateMessage(await pollProducer(pollCtx)), {
|
|
155
155
|
intervalMs: options?.pollIntervalMs ?? 500,
|
|
156
156
|
// Skip yielding identical consecutive snapshots; Genie often returns
|
|
157
157
|
// the exact same payload twice during quiet periods. `poll` does a deep
|
|
@@ -160,7 +160,7 @@ export async function* genieChat(space_id, content, options) {
|
|
|
160
160
|
// Stop after the terminal message is yielded. `poll` checks the
|
|
161
161
|
// predicate AFTER yielding, so the terminal message still reaches the
|
|
162
162
|
// consumer.
|
|
163
|
-
predicate: (m) => !
|
|
163
|
+
predicate: (m) => !isTerminalStatus(m.status),
|
|
164
164
|
// Wake the inter-poll sleep on abort so a `for await` break (or
|
|
165
165
|
// external abort) tears down promptly instead of waiting out the
|
|
166
166
|
// interval.
|
|
@@ -248,9 +248,9 @@ export async function* genieEventChat(space_id, content, options) {
|
|
|
248
248
|
};
|
|
249
249
|
questionEmitted = true;
|
|
250
250
|
}
|
|
251
|
-
yield*
|
|
251
|
+
yield* eventsFromMessage(message, previous, message.space_id);
|
|
252
252
|
const status = message.status;
|
|
253
|
-
if (
|
|
253
|
+
if (isTerminalStatus(status)) {
|
|
254
254
|
yield {
|
|
255
255
|
type: "result",
|
|
256
256
|
space_id: message.space_id,
|
|
@@ -283,4 +283,4 @@ async function getWorkspaceClient(options) {
|
|
|
283
283
|
}
|
|
284
284
|
return createWorkspaceClient();
|
|
285
285
|
}
|
|
286
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBRUgsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixtQkFBbUIsR0FFcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUEwQyxNQUFNLHlCQUF5QixDQUFDO0FBRXBHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFeEM7Ozs7Ozs7R0FPRztBQUNILFNBQVMsZUFBZSxDQUFDLEdBQWlCO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUQsSUFBSSxNQUFNLENBQUMsT0FBTztRQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztJQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFO1FBQ3ZDLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0tBQ25DLENBQUMsQ0FBQztJQUNILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQTJDRCwwRUFBMEU7QUFFMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBQ0gsTUFBTSxDQUFDLEtBQUss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aGF0IGRyaXZlci5cbiAqXG4gKiBEcml2ZXMgYSBzaW5nbGUgdHVybiBhZ2FpbnN0IGEgR2VuaWUgc3BhY2UgZnJvbSBvbmUgYGNvbnRlbnRgIHN0cmluZztcbiAqIG11bHRpLXR1cm4gY29udmVyc2F0aW9ucyBhcmUgdGhlIGNhbGxlcidzIGpvYiAodGhyZWFkIHRoZSBgY29udmVyc2F0aW9uX2lkYFxuICogcmV0dXJuZWQgb24gZWFjaCBgR2VuaWVNZXNzYWdlYCBiYWNrIGludG8gdGhlIG5leHQgdHVybidzXG4gKiBgb3B0aW9ucy5jb252ZXJzYXRpb25JZGApLlxuICpcbiAqIEFnZW50IE1vZGUgU1NFIGlzIHRoZSBkZWZhdWx0IHRyYW5zcG9ydC4gSXRzIFJlc3BvbnNlcy1zdHlsZSByZWFzb25pbmcsIFNRTCxcbiAqIHF1ZXJ5IG91dHB1dCwgYW5kIGZpbmFsIGFuc3dlciBpdGVtcyBhcmUgcHJvamVjdGVkIGludG8gYEdlbmllTWVzc2FnZWBcbiAqIHNuYXBzaG90czsgYGFnZW50TW9kZTogZmFsc2VgIHJldGFpbnMgdGhlIENvbnZlcnNhdGlvbiBBUEkgcG9sbGluZyBwYXRoLlxuICpcbiAqIFR3byBsYXllcnMgc2VydmUgdHdvIGtpbmRzIG9mIGNvbnN1bWVyLiBUaGUgbG93LWxldmVsIGxheWVyIHlpZWxkcyBldmVyeVxuICogb2JzZXJ2ZWQgYEdlbmllTWVzc2FnZWAgKHZhbGlkYXRlZCBhZ2FpbnN0IGBHZW5pZU1lc3NhZ2VTY2hlbWFgLCBmYWxsaW5nIGJhY2tcbiAqIHRvIHRoZSByYXcgc25hcHNob3Qgb24gYSBzY2hlbWEgbWlzcykgYW5kIG93bnMgY2FuY2VsbGF0aW9uLCBjb252ZXJzYXRpb25cbiAqIHNlZWRpbmcsIGRpc3RpbmN0LWZpbHRlcmluZywgYW5kIFNESyBxdWlya3M7IHJlYWNoIGZvciBpdCB3aGVuIHlvdSB3YW50IHRoZVxuICogcmF3IHN0cmVhbS4gVGhlXG4gKiBoaWdoLWxldmVsIGxheWVyIHdyYXBzIGl0IGFuZCBlbWl0cyBzZW1hbnRpYywgZGVkdXBsaWNhdGVkIGB7IHR5cGUsIHBheWxvYWQgfWBcbiAqIGV2ZW50cyAoc2VlIHtAbGluayBHZW5pZUNoYXRFdmVudH0pLCBhbHdheXMgY2xvc2luZyBhIHN1Y2Nlc3NmdWwgdHVybiB3aXRoIGFcbiAqIHRlcm1pbmFsIGByZXN1bHRgIGV2ZW50IGNhcnJ5aW5nIHRoZSBmaW5hbCBgR2VuaWVNZXNzYWdlYDsgZXJyb3JzIHByb3BhZ2F0ZVxuICogYnkgdGhyb3dpbmcsIHdpdGggbm8gYGVycm9yYCB2YXJpYW50LiBJdGVyYXRpbmcgVUkgLyBhZ2VudCBjb2RlIHRoYXQgd2FudHNcbiAqIGV2ZXJ5IG1lc3NhZ2UgdmVyYmF0aW0gdGFrZXMgdGhlIGxvdy1sZXZlbCBzdHJlYW07IHN1YnNjcmliZXJzIHJlYWN0aW5nIHRvXG4gKiBcIkdlbmllIGlzIHRoaW5raW5nIGFib3V0IFhcIiBvciBcIkdlbmllIHByb2R1Y2VkIHRleHQgWVwiIHRha2UgdGhlIGV2ZW50IGxheWVyLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBjcmVhdGVXb3Jrc3BhY2VDbGllbnQsXG4gIGdldEV4ZWN1dGlvbkNvbnRleHQsXG4gIHR5cGUgV29ya3NwYWNlQ2xpZW50LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBhc3luY1V0aWxzLCBlcnJvclV0aWxzLCBsb2csIHR5cGUgUG9sbENvbnRleHQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZXZlbnQsIGdlbmllTW9kZWwsIHR5cGUgR2VuaWVDaGF0RXZlbnQsIHR5cGUgR2VuaWVNZXNzYWdlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmllXCI7XG5cbmltcG9ydCB7IGdlbmllQWdlbnRNb2RlQ2hhdCwgaXNBZ2VudE1vZGVVbmF2YWlsYWJsZSB9IGZyb20gXCIuL2FnZW50LW1vZGUudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImdlbmllL2NoYXRcIik7XG5cbi8qKlxuICogVmFsaWRhdGUgYSBwb2xsZWQgd2lyZSBzbmFwc2hvdCBhZ2FpbnN0IHtAbGluayBHZW5pZU1lc3NhZ2VTY2hlbWF9XG4gKiBhbmQgcmV0dXJuIHRoZSBzY2hlbWEtbm9ybWFsaXplZCBtZXNzYWdlLiBHZW5pZSdzIHdpcmUgb2NjYXNpb25hbGx5IHNoaXBzIGFcbiAqIHNoYXBlIHRoZSAoU0RLLWRlcml2ZWQpIHNjaGVtYSBkb2Vzbid0IG1vZGVsIGV4YWN0bHkgLSBlLmcuIGFuIGVhcmx5IHBvbGxcbiAqIHRoYXQgb21pdHMgdGhlIFNESy1yZXF1aXJlZCBgbWVzc2FnZV9pZGAgLSBzbyBhIG1pc3MgZGVncmFkZXMgdG8gdGhlIHJhd1xuICogc25hcHNob3QgcmF0aGVyIHRoYW4gdGhyb3dpbmcsIGtlZXBpbmcgYSBzaW5nbGUgb2RkIHBvbGwgZnJvbSBhYm9ydGluZyB0aGVcbiAqIHdob2xlIHR1cm4uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTWVzc2FnZShyYXc6IEdlbmllTWVzc2FnZSk6IEdlbmllTWVzc2FnZSB7XG4gIGNvbnN0IHJlc3VsdCA9IGdlbmllTW9kZWwuR2VuaWVNZXNzYWdlU2NoZW1hLnNhZmVQYXJzZShyYXcpO1xuICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHJldHVybiByZXN1bHQuZGF0YTtcbiAgbG9nZ2VyLmRlYnVnKFwid2lyZS1tZXNzYWdlOnNjaGVtYS1taXNzXCIsIHtcbiAgICBtZXNzYWdlX2lkOiByYXcubWVzc2FnZV9pZCA/PyByYXcuaWQsXG4gICAgaXNzdWVzOiByZXN1bHQuZXJyb3IuaXNzdWVzLmxlbmd0aCxcbiAgfSk7XG4gIHJldHVybiByYXc7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNoYXJlZCBvcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBPcHRpb25zIGFjY2VwdGVkIGJ5IGJvdGgge0BsaW5rIGdlbmllQ2hhdH0gYW5kIHtAbGluayBnZW5pZUV2ZW50Q2hhdH0uICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmllQ2hhdE9wdGlvbnMge1xuICAvKipcbiAgICogVXNlIHRoZSBzdHJlYW1pbmcgR2VuaWUgQWdlbnQgTW9kZSBBUEkuIERlZmF1bHRzIHRvIGB0cnVlYDsgc2V0IGBmYWxzZWAgdG9cbiAgICogZm9yY2UgdGhlIGxlZ2FjeSBzdGFydC9jcmVhdGUvZ2V0LW1lc3NhZ2UgcG9sbGluZyBmbG93LlxuICAgKi9cbiAgYWdlbnRNb2RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZhbGwgYmFjayB0byBDb252ZXJzYXRpb24gQVBJIHBvbGxpbmcgd2hlbiBBZ2VudCBNb2RlIGlzIHVuYXZhaWxhYmxlLlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldCBgZmFsc2VgIHdoZW4gdGhlIGNhbGxlciByZXF1aXJlcyBBZ2VudCBNb2RlLlxuICAgKi9cbiAgYWdlbnRNb2RlRmFsbGJhY2s/OiBib29sZWFuO1xuICAvKiogQXNrIEFnZW50IE1vZGUgdG8gZ2VuZXJhdGUgdmlzdWFsaXphdGlvbnMgd2hlbiBhcHByb3ByaWF0ZS4gKi9cbiAgZW5hYmxlVmlzdWFsaXphdGlvbj86IGJvb2xlYW47XG4gIC8qKiBPcmlnaW5hbCB1c2VyIHRleHQgcHJvamVjdGVkIGludG8gQWdlbnQgTW9kZSBzbmFwc2hvdHMgd2hlbiBgY29udGVudGAgaXMgYXVnbWVudGVkLiAqL1xuICBkaXNwbGF5Q29udGVudD86IHN0cmluZztcbiAgLyoqXG4gICAqIENvbnRpbnVlIGFuIGV4aXN0aW5nIGNvbnZlcnNhdGlvbi4gQWdlbnQgTW9kZSBzZW5kcyBpdCBhc1xuICAgKiBgY29udmVyc2F0aW9uX2lkYDsgbGVnYWN5IHBvbGxpbmcgcGFzc2VzIGl0IHRvIGBjcmVhdGVNZXNzYWdlYC4gUmVhZCB0aGUgaWRcbiAgICogZnJvbSB0aGUgcHJpb3IgdHVybidzIHRlcm1pbmFsIGBHZW5pZU1lc3NhZ2VgIG9yIGByZXN1bHRgIGV2ZW50LlxuICAgKi9cbiAgY29udmVyc2F0aW9uSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHBsaWNpdCBgV29ya3NwYWNlQ2xpZW50YC4gRGVmYXVsdHMgdG8gQXBwS2l0J3MgcGVyLXJlcXVlc3RcbiAgICogZXhlY3V0aW9uLWNvbnRleHQgY2xpZW50IHdoZW4gQXBwS2l0IGlzIGluc3RhbGxlZCBhbmQgd2UncmUgaW5zaWRlIGFcbiAgICogcmVxdWVzdDsgZmFsbHMgYmFjayB0byBgY3JlYXRlV29ya3NwYWNlQ2xpZW50KClgIChkZWZhdWx0IGF1dGgpXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIHdvcmtzcGFjZUNsaWVudD86IFdvcmtzcGFjZUNsaWVudDtcbiAgLyoqIExlZ2FjeSBmYWxsYmFjayBjYWRlbmNlIGJldHdlZW4gc3VjY2Vzc2l2ZSBgZ2V0TWVzc2FnZWAgY2FsbHMgKGRlZmF1bHQgNTAwbXMpLiAqL1xuICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEV4dGVybmFsIGNhbmNlbGxhdGlvbi4gQWNjZXB0cyBhIFdIQVRXRyBgQWJvcnRTaWduYWxgIG9yIGEgZnVsbHktYnVpbHQgU0RLXG4gICAqIGBDb250ZXh0YCAoc2VlIGBkYXRhYnJpY2tzLkNvbnRleHRMaWtlYCkuIEFib3J0aW5nIGl0IGNhbmNlbHMgZXZlcnkgaW4tZmxpZ2h0XG4gICAqIEFnZW50IE1vZGUgc3RyZWFtLCBTREsgY2FsbCwgYW5kIHRoZSBuZXh0IGludGVyLXBvbGwgc2xlZXAuXG4gICAqL1xuICBjb250ZXh0PzogZGF0YWJyaWNrcy5Db250ZXh0TGlrZTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbG93LWxldmVsOiBnZW5pZUNoYXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBPbmUgdHVybiBhZ2FpbnN0IGEgR2VuaWUgc3BhY2UsIHlpZWxkZWQgYXMgYSBzdHJlYW0gb2YgYEdlbmllTWVzc2FnZWBcbiAqIHNuYXBzaG90cy5cbiAqXG4gKiBUdXJuIGxpZmVjeWNsZTpcbiAqXG4gKiAgIC0gQWdlbnQgTW9kZSAoZGVmYXVsdCk6IFBPU1Qgb25lIFJlc3BvbnNlcy1zdHlsZSBtZXNzYWdlIHRvXG4gKiAgICAgYC9hcGkvMi4wL2dlbmllL2FnZW50cy97aWR9L3Jlc3BvbnNlc2AgYW5kIHlpZWxkIHByb2plY3RlZCBzbmFwc2hvdHMgZnJvbVxuICogICAgIGl0cyBTU0UgZXZlbnRzLlxuICogICAtIExlZ2FjeSBwb2xsaW5nIChgYWdlbnRNb2RlOiBmYWxzZWApOiBzdGFydC9jcmVhdGUgYSBDb252ZXJzYXRpb24gQVBJXG4gKiAgICAgbWVzc2FnZSBhbmQgcG9sbCBgZ2V0TWVzc2FnZWAgdW50aWwgdGVybWluYWwuXG4gKiAgIC0gQSBwcmUtc3RyZWFtIGBGRUFUVVJFX0RJU0FCTEVEYCBvciBwcmV2aWV3LXRvZ2dsZSByZXNwb25zZSBmYWxscyBiYWNrIHRvXG4gKiAgICAgbGVnYWN5IHBvbGxpbmcgYXV0b21hdGljYWxseS5cbiAqXG4gKiBDYW5jZWxsYXRpb246IGEgc2luZ2xlIGludGVybmFsIGBBYm9ydENvbnRyb2xsZXJgIGNvdmVycyB0aGUgd2hvbGUgdHVybi5cbiAqIGBvcHRpb25zLmNvbnRleHRgIGlzIHRpZWQgaW50byB0aGF0IGNvbnRyb2xsZXIgc28gYW4gZXh0ZXJuYWwgYWJvcnQgdGVhcnNcbiAqIGRvd24gdGhlIEFnZW50IE1vZGUgU1NFIGNvbm5lY3Rpb24sIFNESyBjYWxscywgYW5kIGFueSBpbnRlci1wb2xsIHNsZWVwLlxuICogQnJlYWtpbmcgb3V0IG9mIHRoZSBgZm9yIGF3YWl0YCBhbHNvIGludm9rZXMgdGhlIEFnZW50IE1vZGUgc2VydmVyLXNpZGVcbiAqIGNhbmNlbCBlbmRwb2ludCBiZWZvcmUgdGhlIGdlbmVyYXRvciBjbG9zZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFNpbmdsZSB0dXJuLlxuICogZm9yIGF3YWl0IChjb25zdCBtIG9mIGdlbmllQ2hhdChzcGFjZUlkLCBcIlRvcCA1IHN0b3Jlcz9cIikpIHtcbiAqICAgcmVuZGVyKG0pO1xuICogfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBNdWx0aS10dXJuOiBjYWxsZXIgdGhyZWFkcyB0aGUgY29udmVyc2F0aW9uIGlkLlxuICogbGV0IGNvbnZlcnNhdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gKiBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHF1ZXN0aW9ucykge1xuICogICBmb3IgYXdhaXQgKGNvbnN0IG0gb2YgZ2VuaWVDaGF0KHNwYWNlSWQsIHF1ZXN0aW9uLCB7IGNvbnZlcnNhdGlvbklkIH0pKSB7XG4gKiAgICAgY29udmVyc2F0aW9uSWQgPSBtLmNvbnZlcnNhdGlvbl9pZCA/PyBjb252ZXJzYXRpb25JZDtcbiAqICAgICByZW5kZXIobSk7XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBnZW5pZUNoYXQoXG4gIHNwYWNlX2lkOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IEdlbmllQ2hhdE9wdGlvbnMsXG4pOiBBc3luY0dlbmVyYXRvcjxHZW5pZU1lc3NhZ2UsIHZvaWQsIHZvaWQ+IHtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBnZXRXb3Jrc3BhY2VDbGllbnQob3B0aW9ucyk7XG4gICAgLy8gQnVpbGQgdGhlIFNESyBDb250ZXh0IE9OQ0UuIEJ1aWxkaW5nIGl0IGluc2lkZSB0aGUgcG9sbCBwcm9kdWNlciB3b3VsZFxuICAgIC8vIHJlLWF0dGFjaCBhbiBhYm9ydCBsaXN0ZW5lciB0byBgb3B0aW9ucy5jb250ZXh0YCBvbiBldmVyeSBwb2xsIGl0ZXJhdGlvblxuICAgIC8vICh2aWEgYGRhdGFicmlja3MudG9Db250ZXh0YCAtPiBgYXN5bmMudGllQWJvcnRTaWduYWxgKSwgZXZlbnR1YWxseSB0cmlwcGluZ1xuICAgIC8vIE5vZGUncyBgTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nYC5cbiAgICBjb25zdCBjdHggPSBkYXRhYnJpY2tzLnRvQ29udGV4dChjb250cm9sbGVyLCBvcHRpb25zPy5jb250ZXh0KTtcbiAgICBpZiAob3B0aW9ucz8uYWdlbnRNb2RlICE9PSBmYWxzZSkge1xuICAgICAgbGV0IHlpZWxkZWQgPSBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgbWVzc2FnZSBvZiBnZW5pZUFnZW50TW9kZUNoYXQoY2xpZW50LCBzcGFjZV9pZCwgY29udGVudCwge1xuICAgICAgICAgIC4uLihvcHRpb25zPy5jb252ZXJzYXRpb25JZCA/IHsgY29udmVyc2F0aW9uSWQ6IG9wdGlvbnMuY29udmVyc2F0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9ucz8uZW5hYmxlVmlzdWFsaXphdGlvbiA/IHsgZW5hYmxlVmlzdWFsaXphdGlvbjogdHJ1ZSB9IDoge30pLFxuICAgICAgICAgIC4uLihvcHRpb25zPy5kaXNwbGF5Q29udGVudCA/IHsgZGlzcGxheUNvbnRlbnQ6IG9wdGlvbnMuZGlzcGxheUNvbnRlbnQgfSA6IHt9KSxcbiAgICAgICAgICBjb250ZXh0OiBjdHgsXG4gICAgICAgIH0pKSB7XG4gICAgICAgICAgeWllbGRlZCA9IHRydWU7XG4gICAgICAgICAgeWllbGQgdmFsaWRhdGVNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAob3B0aW9ucz8uYWdlbnRNb2RlRmFsbGJhY2sgPT09IGZhbHNlIHx8IHlpZWxkZWQgfHwgIWlzQWdlbnRNb2RlVW5hdmFpbGFibGUoZXJyKSkge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIud2FybihcImFnZW50LW1vZGU6dW5hdmFpbGFibGUsIGZhbGxpbmcgYmFjayB0byBwb2xsaW5nXCIsIHtcbiAgICAgICAgICBzcGFjZV9pZCxcbiAgICAgICAgICBlcnJvcjogZXJyb3JVdGlscy50b0Vycm9yKGVyciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgY29udmVyc2F0aW9uSWQgPSBvcHRpb25zPy5jb252ZXJzYXRpb25JZDtcbiAgICBsZXQgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBwb2xsUHJvZHVjZXIgPSBhc3luYyAocG9sbEN0eDogUG9sbENvbnRleHQ8R2VuaWVNZXNzYWdlPik6IFByb21pc2U8R2VuaWVNZXNzYWdlPiA9PiB7XG4gICAgICBpZiAoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgIC8vIEZpcnN0IHBvbGw6IG9wZW4gdGhlIGNvbnZlcnNhdGlvbi4gUmVmdXNlIHRvIHJldHJ5OiBpZlxuICAgICAgICAvLyBgc3RhcnRDb252ZXJzYXRpb25gIHJldHVybmVkIGEgcmVzcG9uc2Ugd2l0aG91dCBhIGBjb252ZXJzYXRpb25faWRgLFxuICAgICAgICAvLyByZXRyeWluZyB3b3VsZCBqdXN0IG9wZW4gY29udmVyc2F0aW9uIGFmdGVyIGNvbnZlcnNhdGlvbi5cbiAgICAgICAgaWYgKHBvbGxDdHguYXR0ZW1wdCA+IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5pZSBkaWQgbm90IHJldHVybiBhIGNvbnZlcnNhdGlvbiBpZDsgcmVmdXNpbmcgdG8gcmV0cnlcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZW5pZS5zdGFydENvbnZlcnNhdGlvbih7IHNwYWNlX2lkLCBjb250ZW50IH0sIGN0eCk7XG4gICAgICAgIGNvbnZlcnNhdGlvbklkID0gc3RhcnRSZXNwb25zZS5jb252ZXJzYXRpb25faWQ7XG4gICAgICAgIG1lc3NhZ2VJZCA9IHN0YXJ0UmVzcG9uc2UubWVzc2FnZV9pZDtcbiAgICAgICAgcmV0dXJuIHN0YXJ0UmVzcG9uc2UubWVzc2FnZSE7XG4gICAgICB9XG4gICAgICBpZiAoIW1lc3NhZ2VJZCkge1xuICAgICAgICAvLyBGaXJzdCBwb2xsIG9mIGEgZm9sbG93LXVwIHR1cm46IGFwcGVuZCB0byB0aGUgc2VlZGVkIGNvbnZlcnNhdGlvbi5cbiAgICAgICAgLy8gYGNsaWVudC5nZW5pZS5jcmVhdGVNZXNzYWdlYCByZXR1cm5zIGEgYFdhaXRlcjxHZW5pZU1lc3NhZ2U+YFxuICAgICAgICAvLyAoYHsgLi4ubWVzc2FnZSwgd2FpdDogYXN5bmMgKCkgPT4gLi4uIH1gKS4gU3RyaXAgYHdhaXRgIGhlcmUgc29cbiAgICAgICAgLy8gZG93bnN0cmVhbSBzZXJpYWxpemVycyAoZS5nLiB5YW1sLnN0cmluZ2lmeSkgZG9uJ3QgY2hva2Ugb24gdGhlXG4gICAgICAgIC8vIEFzeW5jRnVuY3Rpb24gdmFsdWUuXG4gICAgICAgIGNvbnN0IHsgd2FpdDogX3dhaXQsIC4uLmNyZWF0ZVJlc3BvbnNlIH0gPSBhd2FpdCBjbGllbnQuZ2VuaWUuY3JlYXRlTWVzc2FnZShcbiAgICAgICAgICB7IHNwYWNlX2lkLCBjb252ZXJzYXRpb25faWQ6IGNvbnZlcnNhdGlvbklkLCBjb250ZW50IH0sXG4gICAgICAgICAgY3R4LFxuICAgICAgICApO1xuICAgICAgICBtZXNzYWdlSWQgPSBjcmVhdGVSZXNwb25zZS5tZXNzYWdlX2lkO1xuICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2U7XG4gICAgICB9XG4gICAgICAvLyBTdWJzZXF1ZW50IHBvbGxzOiByZS1mZXRjaCB0aGUgY3VycmVudCBtZXNzYWdlIHVudGlsIGl0cyBzdGF0dXMgYmVjb21lc1xuICAgICAgLy8gdGVybWluYWwuXG4gICAgICByZXR1cm4gY2xpZW50LmdlbmllLmdldE1lc3NhZ2UoXG4gICAgICAgIHtcbiAgICAgICAgICBzcGFjZV9pZCxcbiAgICAgICAgICBjb252ZXJzYXRpb25faWQ6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIG1lc3NhZ2VfaWQ6IG1lc3NhZ2VJZCxcbiAgICAgICAgfSxcbiAgICAgICAgY3R4LFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgeWllbGQqIGFzeW5jVXRpbHMucG9sbChcbiAgICAgIGFzeW5jIChwb2xsQ3R4OiBQb2xsQ29udGV4dDxHZW5pZU1lc3NhZ2U+KSA9PiB2YWxpZGF0ZU1lc3NhZ2UoYXdhaXQgcG9sbFByb2R1Y2VyKHBvbGxDdHgpKSxcbiAgICAgIHtcbiAgICAgICAgaW50ZXJ2YWxNczogb3B0aW9ucz8ucG9sbEludGVydmFsTXMgPz8gNTAwLFxuICAgICAgICAvLyBTa2lwIHlpZWxkaW5nIGlkZW50aWNhbCBjb25zZWN1dGl2ZSBzbmFwc2hvdHM7IEdlbmllIG9mdGVuIHJldHVybnNcbiAgICAgICAgLy8gdGhlIGV4YWN0IHNhbWUgcGF5bG9hZCB0d2ljZSBkdXJpbmcgcXVpZXQgcGVyaW9kcy4gYHBvbGxgIGRvZXMgYSBkZWVwXG4gICAgICAgIC8vIGVxdWFsIG9uIHRoZSBwcmV2aW91cyB5aWVsZC5cbiAgICAgICAgZmlsdGVyOiBcImRpc3RpbmN0XCIsXG4gICAgICAgIC8vIFN0b3AgYWZ0ZXIgdGhlIHRlcm1pbmFsIG1lc3NhZ2UgaXMgeWllbGRlZC4gYHBvbGxgIGNoZWNrcyB0aGVcbiAgICAgICAgLy8gcHJlZGljYXRlIEFGVEVSIHlpZWxkaW5nLCBzbyB0aGUgdGVybWluYWwgbWVzc2FnZSBzdGlsbCByZWFjaGVzIHRoZVxuICAgICAgICAvLyBjb25zdW1lci5cbiAgICAgICAgcHJlZGljYXRlOiAobSkgPT4gIWdlbmllTW9kZWwuaXNUZXJtaW5hbFN0YXR1cyhtLnN0YXR1cyksXG4gICAgICAgIC8vIFdha2UgdGhlIGludGVyLXBvbGwgc2xlZXAgb24gYWJvcnQgc28gYSBgZm9yIGF3YWl0YCBicmVhayAob3JcbiAgICAgICAgLy8gZXh0ZXJuYWwgYWJvcnQpIHRlYXJzIGRvd24gcHJvbXB0bHkgaW5zdGVhZCBvZiB3YWl0aW5nIG91dCB0aGVcbiAgICAgICAgLy8gaW50ZXJ2YWwuXG4gICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICB9LFxuICAgICk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2FuY2VscyBhbnkgc3RpbGwtcGVuZGluZyBTREsgY2FsbCBhbmQgdGhlIGludGVyLXBvbGwgc2xlZXAgd2hldGhlciB3ZSdyZVxuICAgIC8vIHVud2luZGluZyBmcm9tIGEgbm9ybWFsIHJldHVybiwgYSBjb25zdW1lciBicmVhaywgb3IgYSB0aHJvd24gZXJyb3IuXG4gICAgLy8gSWRlbXBvdGVudC5cbiAgICBjb250cm9sbGVyLmFib3J0KCk7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBoaWdoLWxldmVsOiBnZW5pZUV2ZW50Q2hhdCAtLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBPbmUgdHVybiBhZ2FpbnN0IGEgR2VuaWUgc3BhY2UsIHlpZWxkZWQgYXMgYSB0eXBlZCB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9XG4gKiBzdHJlYW0uIERyaXZlcyB7QGxpbmsgZ2VuaWVDaGF0fSB1bmRlcm5lYXRoIGFuZCBkZWNvcmF0ZXMgZWFjaCBzbmFwc2hvdCB3aXRoXG4gKiB0aGUgZGVyaXZlZCBldmVudHMgdGhlIGZpZWxkLWxldmVsIGRpZmYgcHJvZHVjZWQuIFN0cmVhbSBvcmRlcjpcbiAqXG4gKiAgIDEuIGB7IHR5cGU6IFwibWVzc2FnZVwiLCBtZXNzYWdlIH1gIC0gdGhlIHJhdyBgR2VuaWVNZXNzYWdlYCwgb25jZSBwZXIgcG9sbFxuICogICAgICB5aWVsZC5cbiAqICAgMi4gYHsgdHlwZTogXCJxdWVzdGlvblwiLCBjb250ZW50LCBtZXNzYWdlX2lkLCAuLi4gfWAgZmlyZXMgZXhhY3RseSBvbmNlLCBvblxuICogICAgICB0aGUgRklSU1QgYG1lc3NhZ2VgIHlpZWxkLiBXZSByZWFkIGBjb250ZW50YCBhbmQgYG1lc3NhZ2VfaWRgIHN0cmFpZ2h0XG4gKiAgICAgIG9mZiB0aGUgc25hcHNob3Qgc28gZXZlcnkgZG93bnN0cmVhbSBldmVudCBmb3IgdGhpcyB0dXJuIHNoYXJlcyB0aGUgc2FtZVxuICogICAgICBgbWVzc2FnZV9pZGAgKHRoZSBxdWVzdGlvbiBpbmNsdWRlZCkgLSBzdWJzY3JpYmVycyBjYW4gZ3JvdXAgZXZlcnl0aGluZ1xuICogICAgICBmb3Igb25lIEdlbmllIGNhbGwgdW5kZXIgdGhhdCBvbmUga2V5LlxuICogICAzLiBBbnkgb2YgYHN0YXR1c2AgLyBgYXR0YWNobWVudGAgLyBgdGhpbmtpbmdgIC8gYHRleHRgIC8gYHF1ZXJ5YCAvXG4gKiAgICAgIGBzdGF0ZW1lbnRgIC8gYHJvd3NgIC8gYHN1Z2dlc3RlZF9xdWVzdGlvbnNgIHRoZSBkaWZmIGFnYWluc3QgdGhlIHByaW9yXG4gKiAgICAgIHNuYXBzaG90IHByb2R1Y2VkLlxuICogICA0LiBPbiB0aGUgdGVybWluYWwgc25hcHNob3QsIGB7IHR5cGU6IFwicmVzdWx0XCIsIC4uLiB9YCBhcyB0aGUgZmluYWwgeWllbGQuXG4gKlxuICogRXJyb3JzIHByb3BhZ2F0ZSBieSB0aGUgZ2VuZXJhdG9yIHRocm93aW5nIC0gdGhlcmUncyBubyBgXCJlcnJvclwiYCB2YXJpYW50LlxuICogV3JhcCB0aGUgYGZvciBhd2FpdGAgaW4gYHRyeS9jYXRjaGAgaWYgeW91IG5lZWQgdG8gaGFuZGxlIGZhaWx1cmVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBmb3IgYXdhaXQgKGNvbnN0IGV2dCBvZiBnZW5pZUV2ZW50Q2hhdChzcGFjZUlkLCBcIlRvcCBzdG9yZXM/XCIpKSB7XG4gKiAgIHN3aXRjaCAoZXZ0LnR5cGUpIHtcbiAqICAgICBjYXNlIFwidGhpbmtpbmdcIjpcbiAqICAgICAgIGNvbnNvbGUubG9nKFwiW3RoaW5raW5nXVwiLCBldnQudGhvdWdodF90eXBlLCBldnQudGV4dCk7XG4gKiAgICAgICBicmVhaztcbiAqICAgICBjYXNlIFwidGV4dFwiOlxuICogICAgICAgY29uc29sZS5sb2coXCJbdGV4dF1cIiwgZXZ0LnRleHQpO1xuICogICAgICAgYnJlYWs7XG4gKiAgICAgY2FzZSBcInJlc3VsdFwiOlxuICogICAgICAgY29uc29sZS5sb2coXCJbZG9uZV1cIiwgZXZ0LnN0YXR1cyk7XG4gKiAgICAgICBicmVhaztcbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGdlbmllRXZlbnRDaGF0KFxuICBzcGFjZV9pZDogc3RyaW5nLFxuICBjb250ZW50OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBHZW5pZUNoYXRPcHRpb25zLFxuKTogQXN5bmNHZW5lcmF0b3I8R2VuaWVDaGF0RXZlbnQsIHZvaWQsIHZvaWQ+IHtcbiAgLy8gRGlmZiBzb3VyY2UgZm9yIHRoZSBjdXJyZW50IHR1cm4uIEFsd2F5cyBgdW5kZWZpbmVkYCBvbiB0aGUgZmlyc3Qgc25hcHNob3RcbiAgLy8gc28gdGhlIGluaXRpYWwgc3RhdHVzIC8gYXR0YWNobWVudHMgZW1pdCBmcmVzaDsgdXBkYXRlZCB0byB0aGUgbW9zdCByZWNlbnRcbiAgLy8gc25hcHNob3QgYWZ0ZXIgZWFjaCB5aWVsZC5cbiAgbGV0IHByZXZpb3VzOiBHZW5pZU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIC8vIFRoZSBgcXVlc3Rpb25gIGV2ZW50IGlzIGRlZmVycmVkIHRvIHRoZSBmaXJzdCBgbWVzc2FnZWAgeWllbGQgc28gaXQgY2FuXG4gIC8vIGNhcnJ5IHRoZSBhc3NpZ25lZCBgbWVzc2FnZV9pZGAgKHN1YnNjcmliZXJzIHVzZSBpdCBhcyB0aGUgZ3JvdXBpbmcga2V5IGZvclxuICAvLyBldmVyeSBldmVudCBpbiB0aGlzIHR1cm4pLiBUaGUgZmlyc3Qgc25hcHNob3QgaXMgdGhlIGVhcmxpZXN0IHBvaW50IHRoYXQgaWRcbiAgLy8gZXhpc3RzLlxuICBsZXQgcXVlc3Rpb25FbWl0dGVkID0gZmFsc2U7XG4gIGZvciBhd2FpdCAoY29uc3QgcmF3TWVzc2FnZSBvZiBnZW5pZUNoYXQoc3BhY2VfaWQsIGNvbnRlbnQsIG9wdGlvbnMpKSB7XG4gICAgLy8gTm9ybWFsaXplIGBtZXNzYWdlX2lkYCBmcm9tIHRoZSBsZWdhY3kgYGlkYCBmaWVsZCB3aGVuIEdlbmllJ3Mgd2lyZVxuICAgIC8vIHJlc3BvbnNlIG9ubHkgcG9wdWxhdGVzIG9uZSBvZiB0aGVtLiBUaGUgU0RLIHNjaGVtYSBtYXJrcyBib3RoIGFzXG4gICAgLy8gcmVxdWlyZWQsIGJ1dCBpbiBwcmFjdGljZSB0aGUgYHN0YXJ0Q29udmVyc2F0aW9uYCAvIGBjcmVhdGVNZXNzYWdlYCBpbm5lclxuICAgIC8vIGBtZXNzYWdlYCBwYXlsb2FkIHNvbWV0aW1lcyBzaGlwcyBvbmx5IGBpZGAgd2hpbGUgdGhlIG5ldyBgbWVzc2FnZV9pZGBcbiAgICAvLyBmaWVsZCBsYW5kcyB1bmRlZmluZWQuIEV2ZXJ5IGRvd25zdHJlYW0gZXZlbnQgZGV0ZWN0b3Iga2V5cyBncm91cGluZyBvZmZcbiAgICAvLyBgbWVzc2FnZV9pZGA7IHRoZSBmYWxsYmFjayBrZWVwcyBvbmUgR2VuaWUgdHVybidzIGV2ZW50cyBmcm9tIHNwbGl0dGluZ1xuICAgIC8vIGFjcm9zcyBhbiBhbm9uIGdyb3VwICsgdGhlIHJlYWwtaWQgZ3JvdXAgd2hlbiBzdWJzY3JpYmVycyBidWNrZXQgYnlcbiAgICAvLyBgbWVzc2FnZV9pZGAuXG4gICAgY29uc3QgbWVzc2FnZTogR2VuaWVNZXNzYWdlID0gcmF3TWVzc2FnZS5tZXNzYWdlX2lkXG4gICAgICA/IHJhd01lc3NhZ2VcbiAgICAgIDogeyAuLi5yYXdNZXNzYWdlLCBtZXNzYWdlX2lkOiByYXdNZXNzYWdlLmlkIH07XG4gICAgeWllbGQge1xuICAgICAgdHlwZTogXCJtZXNzYWdlXCIsXG4gICAgICBzcGFjZV9pZDogbWVzc2FnZS5zcGFjZV9pZCxcbiAgICAgIG1lc3NhZ2VfaWQ6IG1lc3NhZ2UubWVzc2FnZV9pZCxcbiAgICAgIG1lc3NhZ2UsXG4gICAgfTtcbiAgICBpZiAoIXF1ZXN0aW9uRW1pdHRlZCkge1xuICAgICAgeWllbGQge1xuICAgICAgICB0eXBlOiBcInF1ZXN0aW9uXCIsXG4gICAgICAgIHNwYWNlX2lkOiBtZXNzYWdlLnNwYWNlX2lkLFxuICAgICAgICAuLi4obWVzc2FnZS5jb252ZXJzYXRpb25faWQgPyB7IGNvbnZlcnNhdGlvbl9pZDogbWVzc2FnZS5jb252ZXJzYXRpb25faWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKG1lc3NhZ2UubWVzc2FnZV9pZCA/IHsgbWVzc2FnZV9pZDogbWVzc2FnZS5tZXNzYWdlX2lkIH0gOiB7fSksXG4gICAgICAgIGNvbnRlbnQ6IG1lc3NhZ2UuY29udGVudCxcbiAgICAgIH07XG4gICAgICBxdWVzdGlvbkVtaXR0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB5aWVsZCogZXZlbnQuZXZlbnRzRnJvbU1lc3NhZ2UobWVzc2FnZSwgcHJldmlvdXMsIG1lc3NhZ2Uuc3BhY2VfaWQpO1xuICAgIGNvbnN0IHN0YXR1cyA9IG1lc3NhZ2Uuc3RhdHVzO1xuICAgIGlmIChnZW5pZU1vZGVsLmlzVGVybWluYWxTdGF0dXMoc3RhdHVzKSkge1xuICAgICAgeWllbGQge1xuICAgICAgICB0eXBlOiBcInJlc3VsdFwiLFxuICAgICAgICBzcGFjZV9pZDogbWVzc2FnZS5zcGFjZV9pZCxcbiAgICAgICAgY29udmVyc2F0aW9uX2lkOiBtZXNzYWdlLmNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgbWVzc2FnZV9pZDogbWVzc2FnZS5tZXNzYWdlX2lkLFxuICAgICAgICBzdGF0dXMsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICB9O1xuICAgIH1cbiAgICBwcmV2aW91cyA9IG1lc3NhZ2U7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB3b3Jrc3BhY2UgY2xpZW50IGhlbHBlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBSZXNvbHZlIGEgYFdvcmtzcGFjZUNsaWVudGAgaW4gdGhpcyBwcmVmZXJlbmNlIG9yZGVyOlxuICpcbiAqICAgMS4gQ2FsbGVyLXN1cHBsaWVkIGBvcHRpb25zLndvcmtzcGFjZUNsaWVudGAuXG4gKiAgIDIuIEFwcEtpdCdzIHBlci1yZXF1ZXN0IGV4ZWN1dGlvbi1jb250ZXh0IGNsaWVudCBpbnNpZGUgYSByZXF1ZXN0IHNjb3BlLlxuICogICAzLiBGcmVzaCBuYXRpdmUgQXBwS2l0IGBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoKWAuXG4gKlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VDbGllbnQob3B0aW9ucz86IEdlbmllQ2hhdE9wdGlvbnMpOiBQcm9taXNlPFdvcmtzcGFjZUNsaWVudD4ge1xuICBpZiAob3B0aW9ucz8ud29ya3NwYWNlQ2xpZW50KSByZXR1cm4gb3B0aW9ucy53b3Jrc3BhY2VDbGllbnQ7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdldEV4ZWN1dGlvbkNvbnRleHQoKS5jbGllbnQ7XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vdCBpbnNpZGUgYW4gQXBwS2l0IHJlcXVlc3QgY29udGV4dDsgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgYXV0aC5cbiAgfVxuICByZXR1cm4gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCk7XG59XG4iXX0=
|
|
286
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBRUgsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixtQkFBbUIsR0FFcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQW9CLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxHQUFHLEVBQW9CLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RSxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixnQkFBZ0IsR0FDakIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU3RSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRXhDOzs7Ozs7O0dBT0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxHQUFpQjtJQUN4QyxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakQsSUFBSSxNQUFNLENBQUMsT0FBTztRQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztJQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFO1FBQ3ZDLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0tBQ25DLENBQUMsQ0FBQztJQUNILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQTJDRCwwRUFBMEU7QUFFMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBQ0gsTUFBTSxD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QUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTzthQUN6QixDQUFDO1lBQ0YsZUFBZSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDO1FBQ0QsS0FBSyxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM5QixJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDN0IsTUFBTTtnQkFDSixJQUFJLEVBQUUsUUFBUTtnQkFDZCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7Z0JBQzFCLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTtnQkFDeEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QixNQUFNO2dCQUNOLE9BQU87YUFDUixDQUFDO1FBQ0osQ0FBQztRQUNELFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDckIsQ0FBQztBQUNILENBQUM7QUFFRCwwRUFBMEU7QUFFMUU7Ozs7Ozs7R0FPRztBQUNILEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxPQUEwQjtJQUMxRCxJQUFJLE9BQU8sRUFBRSxlQUFlO1FBQUUsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDO0lBQzdELElBQUksQ0FBQztRQUNILE9BQU8sbUJBQW1CLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDdEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHNFQUFzRTtJQUN4RSxDQUFDO0lBQ0QsT0FBTyxxQkFBcUIsRUFBRSxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmllIGNoYXQgZHJpdmVyLlxuICpcbiAqIERyaXZlcyBhIHNpbmdsZSB0dXJuIGFnYWluc3QgYSBHZW5pZSBzcGFjZSBmcm9tIG9uZSBgY29udGVudGAgc3RyaW5nO1xuICogbXVsdGktdHVybiBjb252ZXJzYXRpb25zIGFyZSB0aGUgY2FsbGVyJ3Mgam9iICh0aHJlYWQgdGhlIGBjb252ZXJzYXRpb25faWRgXG4gKiByZXR1cm5lZCBvbiBlYWNoIGBHZW5pZU1lc3NhZ2VgIGJhY2sgaW50byB0aGUgbmV4dCB0dXJuJ3NcbiAqIGBvcHRpb25zLmNvbnZlcnNhdGlvbklkYCkuXG4gKlxuICogQWdlbnQgTW9kZSBTU0UgaXMgdGhlIGRlZmF1bHQgdHJhbnNwb3J0LiBJdHMgUmVzcG9uc2VzLXN0eWxlIHJlYXNvbmluZywgU1FMLFxuICogcXVlcnkgb3V0cHV0LCBhbmQgZmluYWwgYW5zd2VyIGl0ZW1zIGFyZSBwcm9qZWN0ZWQgaW50byBgR2VuaWVNZXNzYWdlYFxuICogc25hcHNob3RzOyBgYWdlbnRNb2RlOiBmYWxzZWAgcmV0YWlucyB0aGUgQ29udmVyc2F0aW9uIEFQSSBwb2xsaW5nIHBhdGguXG4gKlxuICogVHdvIGxheWVycyBzZXJ2ZSB0d28ga2luZHMgb2YgY29uc3VtZXIuIFRoZSBsb3ctbGV2ZWwgbGF5ZXIgeWllbGRzIGV2ZXJ5XG4gKiBvYnNlcnZlZCBgR2VuaWVNZXNzYWdlYCAodmFsaWRhdGVkIGFnYWluc3QgYEdlbmllTWVzc2FnZVNjaGVtYWAsIGZhbGxpbmcgYmFja1xuICogdG8gdGhlIHJhdyBzbmFwc2hvdCBvbiBhIHNjaGVtYSBtaXNzKSBhbmQgb3ducyBjYW5jZWxsYXRpb24sIGNvbnZlcnNhdGlvblxuICogc2VlZGluZywgZGlzdGluY3QtZmlsdGVyaW5nLCBhbmQgU0RLIHF1aXJrczsgcmVhY2ggZm9yIGl0IHdoZW4geW91IHdhbnQgdGhlXG4gKiByYXcgc3RyZWFtLiBUaGVcbiAqIGhpZ2gtbGV2ZWwgbGF5ZXIgd3JhcHMgaXQgYW5kIGVtaXRzIHNlbWFudGljLCBkZWR1cGxpY2F0ZWQgYHsgdHlwZSwgcGF5bG9hZCB9YFxuICogZXZlbnRzIChzZWUge0BsaW5rIEdlbmllQ2hhdEV2ZW50fSksIGFsd2F5cyBjbG9zaW5nIGEgc3VjY2Vzc2Z1bCB0dXJuIHdpdGggYVxuICogdGVybWluYWwgYHJlc3VsdGAgZXZlbnQgY2FycnlpbmcgdGhlIGZpbmFsIGBHZW5pZU1lc3NhZ2VgOyBlcnJvcnMgcHJvcGFnYXRlXG4gKiBieSB0aHJvd2luZywgd2l0aCBubyBgZXJyb3JgIHZhcmlhbnQuIEl0ZXJhdGluZyBVSSAvIGFnZW50IGNvZGUgdGhhdCB3YW50c1xuICogZXZlcnkgbWVzc2FnZSB2ZXJiYXRpbSB0YWtlcyB0aGUgbG93LWxldmVsIHN0cmVhbTsgc3Vic2NyaWJlcnMgcmVhY3RpbmcgdG9cbiAqIFwiR2VuaWUgaXMgdGhpbmtpbmcgYWJvdXQgWFwiIG9yIFwiR2VuaWUgcHJvZHVjZWQgdGV4dCBZXCIgdGFrZSB0aGUgZXZlbnQgbGF5ZXIuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIGNyZWF0ZVdvcmtzcGFjZUNsaWVudCxcbiAgZ2V0RXhlY3V0aW9uQ29udGV4dCxcbiAgdHlwZSBXb3Jrc3BhY2VDbGllbnQsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IHR5cGUgQ29udGV4dExpa2UsIHRvQ29udGV4dCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgbG9nLCB0eXBlIFBvbGxDb250ZXh0LCBwb2xsLCB0b0Vycm9yIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuaWVDaGF0RXZlbnQsXG4gIHR5cGUgR2VuaWVNZXNzYWdlLFxuICBldmVudHNGcm9tTWVzc2FnZSxcbiAgR2VuaWVNZXNzYWdlU2NoZW1hLFxuICBpc1Rlcm1pbmFsU3RhdHVzLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWVcIjtcblxuaW1wb3J0IHsgZ2VuaWVBZ2VudE1vZGVDaGF0LCBpc0FnZW50TW9kZVVuYXZhaWxhYmxlIH0gZnJvbSBcIi4vYWdlbnQtbW9kZS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZ2VuaWUvY2hhdFwiKTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHBvbGxlZCB3aXJlIHNuYXBzaG90IGFnYWluc3Qge0BsaW5rIEdlbmllTWVzc2FnZVNjaGVtYX1cbiAqIGFuZCByZXR1cm4gdGhlIHNjaGVtYS1ub3JtYWxpemVkIG1lc3NhZ2UuIEdlbmllJ3Mgd2lyZSBvY2Nhc2lvbmFsbHkgc2hpcHMgYVxuICogc2hhcGUgdGhlIChTREstZGVyaXZlZCkgc2NoZW1hIGRvZXNuJ3QgbW9kZWwgZXhhY3RseSAtIGUuZy4gYW4gZWFybHkgcG9sbFxuICogdGhhdCBvbWl0cyB0aGUgU0RLLXJlcXVpcmVkIGBtZXNzYWdlX2lkYCAtIHNvIGEgbWlzcyBkZWdyYWRlcyB0byB0aGUgcmF3XG4gKiBzbmFwc2hvdCByYXRoZXIgdGhhbiB0aHJvd2luZywga2VlcGluZyBhIHNpbmdsZSBvZGQgcG9sbCBmcm9tIGFib3J0aW5nIHRoZVxuICogd2hvbGUgdHVybi5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVNZXNzYWdlKHJhdzogR2VuaWVNZXNzYWdlKTogR2VuaWVNZXNzYWdlIHtcbiAgY29uc3QgcmVzdWx0ID0gR2VuaWVNZXNzYWdlU2NoZW1hLnNhZmVQYXJzZShyYXcpO1xuICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHJldHVybiByZXN1bHQuZGF0YTtcbiAgbG9nZ2VyLmRlYnVnKFwid2lyZS1tZXNzYWdlOnNjaGVtYS1taXNzXCIsIHtcbiAgICBtZXNzYWdlX2lkOiByYXcubWVzc2FnZV9pZCA/PyByYXcuaWQsXG4gICAgaXNzdWVzOiByZXN1bHQuZXJyb3IuaXNzdWVzLmxlbmd0aCxcbiAgfSk7XG4gIHJldHVybiByYXc7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNoYXJlZCBvcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKiBPcHRpb25zIGFjY2VwdGVkIGJ5IGJvdGgge0BsaW5rIGdlbmllQ2hhdH0gYW5kIHtAbGluayBnZW5pZUV2ZW50Q2hhdH0uICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmllQ2hhdE9wdGlvbnMge1xuICAvKipcbiAgICogVXNlIHRoZSBzdHJlYW1pbmcgR2VuaWUgQWdlbnQgTW9kZSBBUEkuIERlZmF1bHRzIHRvIGB0cnVlYDsgc2V0IGBmYWxzZWAgdG9cbiAgICogZm9yY2UgdGhlIGxlZ2FjeSBzdGFydC9jcmVhdGUvZ2V0LW1lc3NhZ2UgcG9sbGluZyBmbG93LlxuICAgKi9cbiAgYWdlbnRNb2RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZhbGwgYmFjayB0byBDb252ZXJzYXRpb24gQVBJIHBvbGxpbmcgd2hlbiBBZ2VudCBNb2RlIGlzIHVuYXZhaWxhYmxlLlxuICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldCBgZmFsc2VgIHdoZW4gdGhlIGNhbGxlciByZXF1aXJlcyBBZ2VudCBNb2RlLlxuICAgKi9cbiAgYWdlbnRNb2RlRmFsbGJhY2s/OiBib29sZWFuO1xuICAvKiogQXNrIEFnZW50IE1vZGUgdG8gZ2VuZXJhdGUgdmlzdWFsaXphdGlvbnMgd2hlbiBhcHByb3ByaWF0ZS4gKi9cbiAgZW5hYmxlVmlzdWFsaXphdGlvbj86IGJvb2xlYW47XG4gIC8qKiBPcmlnaW5hbCB1c2VyIHRleHQgcHJvamVjdGVkIGludG8gQWdlbnQgTW9kZSBzbmFwc2hvdHMgd2hlbiBgY29udGVudGAgaXMgYXVnbWVudGVkLiAqL1xuICBkaXNwbGF5Q29udGVudD86IHN0cmluZztcbiAgLyoqXG4gICAqIENvbnRpbnVlIGFuIGV4aXN0aW5nIGNvbnZlcnNhdGlvbi4gQWdlbnQgTW9kZSBzZW5kcyBpdCBhc1xuICAgKiBgY29udmVyc2F0aW9uX2lkYDsgbGVnYWN5IHBvbGxpbmcgcGFzc2VzIGl0IHRvIGBjcmVhdGVNZXNzYWdlYC4gUmVhZCB0aGUgaWRcbiAgICogZnJvbSB0aGUgcHJpb3IgdHVybidzIHRlcm1pbmFsIGBHZW5pZU1lc3NhZ2VgIG9yIGByZXN1bHRgIGV2ZW50LlxuICAgKi9cbiAgY29udmVyc2F0aW9uSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFeHBsaWNpdCBgV29ya3NwYWNlQ2xpZW50YC4gRGVmYXVsdHMgdG8gQXBwS2l0J3MgcGVyLXJlcXVlc3RcbiAgICogZXhlY3V0aW9uLWNvbnRleHQgY2xpZW50IHdoZW4gQXBwS2l0IGlzIGluc3RhbGxlZCBhbmQgd2UncmUgaW5zaWRlIGFcbiAgICogcmVxdWVzdDsgZmFsbHMgYmFjayB0byBgY3JlYXRlV29ya3NwYWNlQ2xpZW50KClgIChkZWZhdWx0IGF1dGgpXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIHdvcmtzcGFjZUNsaWVudD86IFdvcmtzcGFjZUNsaWVudDtcbiAgLyoqIExlZ2FjeSBmYWxsYmFjayBjYWRlbmNlIGJldHdlZW4gc3VjY2Vzc2l2ZSBgZ2V0TWVzc2FnZWAgY2FsbHMgKGRlZmF1bHQgNTAwbXMpLiAqL1xuICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIEV4dGVybmFsIGNhbmNlbGxhdGlvbi4gQWNjZXB0cyBhIFdIQVRXRyBgQWJvcnRTaWduYWxgIG9yIGEgZnVsbHktYnVpbHQgU0RLXG4gICAqIGBDb250ZXh0YCAoc2VlIGBkYXRhYnJpY2tzLkNvbnRleHRMaWtlYCkuIEFib3J0aW5nIGl0IGNhbmNlbHMgZXZlcnkgaW4tZmxpZ2h0XG4gICAqIEFnZW50IE1vZGUgc3RyZWFtLCBTREsgY2FsbCwgYW5kIHRoZSBuZXh0IGludGVyLXBvbGwgc2xlZXAuXG4gICAqL1xuICBjb250ZXh0PzogQ29udGV4dExpa2U7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGxvdy1sZXZlbDogZ2VuaWVDaGF0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogT25lIHR1cm4gYWdhaW5zdCBhIEdlbmllIHNwYWNlLCB5aWVsZGVkIGFzIGEgc3RyZWFtIG9mIGBHZW5pZU1lc3NhZ2VgXG4gKiBzbmFwc2hvdHMuXG4gKlxuICogVHVybiBsaWZlY3ljbGU6XG4gKlxuICogICAtIEFnZW50IE1vZGUgKGRlZmF1bHQpOiBQT1NUIG9uZSBSZXNwb25zZXMtc3R5bGUgbWVzc2FnZSB0b1xuICogICAgIGAvYXBpLzIuMC9nZW5pZS9hZ2VudHMve2lkfS9yZXNwb25zZXNgIGFuZCB5aWVsZCBwcm9qZWN0ZWQgc25hcHNob3RzIGZyb21cbiAqICAgICBpdHMgU1NFIGV2ZW50cy5cbiAqICAgLSBMZWdhY3kgcG9sbGluZyAoYGFnZW50TW9kZTogZmFsc2VgKTogc3RhcnQvY3JlYXRlIGEgQ29udmVyc2F0aW9uIEFQSVxuICogICAgIG1lc3NhZ2UgYW5kIHBvbGwgYGdldE1lc3NhZ2VgIHVudGlsIHRlcm1pbmFsLlxuICogICAtIEEgcHJlLXN0cmVhbSBgRkVBVFVSRV9ESVNBQkxFRGAgb3IgcHJldmlldy10b2dnbGUgcmVzcG9uc2UgZmFsbHMgYmFjayB0b1xuICogICAgIGxlZ2FjeSBwb2xsaW5nIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogQ2FuY2VsbGF0aW9uOiBhIHNpbmdsZSBpbnRlcm5hbCBgQWJvcnRDb250cm9sbGVyYCBjb3ZlcnMgdGhlIHdob2xlIHR1cm4uXG4gKiBgb3B0aW9ucy5jb250ZXh0YCBpcyB0aWVkIGludG8gdGhhdCBjb250cm9sbGVyIHNvIGFuIGV4dGVybmFsIGFib3J0IHRlYXJzXG4gKiBkb3duIHRoZSBBZ2VudCBNb2RlIFNTRSBjb25uZWN0aW9uLCBTREsgY2FsbHMsIGFuZCBhbnkgaW50ZXItcG9sbCBzbGVlcC5cbiAqIEJyZWFraW5nIG91dCBvZiB0aGUgYGZvciBhd2FpdGAgYWxzbyBpbnZva2VzIHRoZSBBZ2VudCBNb2RlIHNlcnZlci1zaWRlXG4gKiBjYW5jZWwgZW5kcG9pbnQgYmVmb3JlIHRoZSBnZW5lcmF0b3IgY2xvc2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBTaW5nbGUgdHVybi5cbiAqIGZvciBhd2FpdCAoY29uc3QgbSBvZiBnZW5pZUNoYXQoc3BhY2VJZCwgXCJUb3AgNSBzdG9yZXM/XCIpKSB7XG4gKiAgIHJlbmRlcihtKTtcbiAqIH1cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTXVsdGktdHVybjogY2FsbGVyIHRocmVhZHMgdGhlIGNvbnZlcnNhdGlvbiBpZC5cbiAqIGxldCBjb252ZXJzYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICogZm9yIChjb25zdCBxdWVzdGlvbiBvZiBxdWVzdGlvbnMpIHtcbiAqICAgZm9yIGF3YWl0IChjb25zdCBtIG9mIGdlbmllQ2hhdChzcGFjZUlkLCBxdWVzdGlvbiwgeyBjb252ZXJzYXRpb25JZCB9KSkge1xuICogICAgIGNvbnZlcnNhdGlvbklkID0gbS5jb252ZXJzYXRpb25faWQgPz8gY29udmVyc2F0aW9uSWQ7XG4gKiAgICAgcmVuZGVyKG0pO1xuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZ2VuaWVDaGF0KFxuICBzcGFjZV9pZDogc3RyaW5nLFxuICBjb250ZW50OiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBHZW5pZUNoYXRPcHRpb25zLFxuKTogQXN5bmNHZW5lcmF0b3I8R2VuaWVNZXNzYWdlLCB2b2lkLCB2b2lkPiB7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHRyeSB7XG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgZ2V0V29ya3NwYWNlQ2xpZW50KG9wdGlvbnMpO1xuICAgIC8vIEJ1aWxkIHRoZSBTREsgQ29udGV4dCBPTkNFLiBCdWlsZGluZyBpdCBpbnNpZGUgdGhlIHBvbGwgcHJvZHVjZXIgd291bGRcbiAgICAvLyByZS1hdHRhY2ggYW4gYWJvcnQgbGlzdGVuZXIgdG8gYG9wdGlvbnMuY29udGV4dGAgb24gZXZlcnkgcG9sbCBpdGVyYXRpb25cbiAgICAvLyAodmlhIGBkYXRhYnJpY2tzLnRvQ29udGV4dGAgLT4gYGFzeW5jLnRpZUFib3J0U2lnbmFsYCksIGV2ZW50dWFsbHkgdHJpcHBpbmdcbiAgICAvLyBOb2RlJ3MgYE1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZ2AuXG4gICAgY29uc3QgY3R4ID0gdG9Db250ZXh0KGNvbnRyb2xsZXIsIG9wdGlvbnM/LmNvbnRleHQpO1xuICAgIGlmIChvcHRpb25zPy5hZ2VudE1vZGUgIT09IGZhbHNlKSB7XG4gICAgICBsZXQgeWllbGRlZCA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBtZXNzYWdlIG9mIGdlbmllQWdlbnRNb2RlQ2hhdChjbGllbnQsIHNwYWNlX2lkLCBjb250ZW50LCB7XG4gICAgICAgICAgLi4uKG9wdGlvbnM/LmNvbnZlcnNhdGlvbklkID8geyBjb252ZXJzYXRpb25JZDogb3B0aW9ucy5jb252ZXJzYXRpb25JZCB9IDoge30pLFxuICAgICAgICAgIC4uLihvcHRpb25zPy5lbmFibGVWaXN1YWxpemF0aW9uID8geyBlbmFibGVWaXN1YWxpemF0aW9uOiB0cnVlIH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdGlvbnM/LmRpc3BsYXlDb250ZW50ID8geyBkaXNwbGF5Q29udGVudDogb3B0aW9ucy5kaXNwbGF5Q29udGVudCB9IDoge30pLFxuICAgICAgICAgIGNvbnRleHQ6IGN0eCxcbiAgICAgICAgfSkpIHtcbiAgICAgICAgICB5aWVsZGVkID0gdHJ1ZTtcbiAgICAgICAgICB5aWVsZCB2YWxpZGF0ZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChvcHRpb25zPy5hZ2VudE1vZGVGYWxsYmFjayA9PT0gZmFsc2UgfHwgeWllbGRlZCB8fCAhaXNBZ2VudE1vZGVVbmF2YWlsYWJsZShlcnIpKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIGxvZ2dlci53YXJuKFwiYWdlbnQtbW9kZTp1bmF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIHBvbGxpbmdcIiwge1xuICAgICAgICAgIHNwYWNlX2lkLFxuICAgICAgICAgIGVycm9yOiB0b0Vycm9yKGVyciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgY29udmVyc2F0aW9uSWQgPSBvcHRpb25zPy5jb252ZXJzYXRpb25JZDtcbiAgICBsZXQgbWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBwb2xsUHJvZHVjZXIgPSBhc3luYyAocG9sbEN0eDogUG9sbENvbnRleHQ8R2VuaWVNZXNzYWdlPik6IFByb21pc2U8R2VuaWVNZXNzYWdlPiA9PiB7XG4gICAgICBpZiAoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgICAgIC8vIEZpcnN0IHBvbGw6IG9wZW4gdGhlIGNvbnZlcnNhdGlvbi4gUmVmdXNlIHRvIHJldHJ5OiBpZlxuICAgICAgICAvLyBgc3RhcnRDb252ZXJzYXRpb25gIHJldHVybmVkIGEgcmVzcG9uc2Ugd2l0aG91dCBhIGBjb252ZXJzYXRpb25faWRgLFxuICAgICAgICAvLyByZXRyeWluZyB3b3VsZCBqdXN0IG9wZW4gY29udmVyc2F0aW9uIGFmdGVyIGNvbnZlcnNhdGlvbi5cbiAgICAgICAgaWYgKHBvbGxDdHguYXR0ZW1wdCA+IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5pZSBkaWQgbm90IHJldHVybiBhIGNvbnZlcnNhdGlvbiBpZDsgcmVmdXNpbmcgdG8gcmV0cnlcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhcnRSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZW5pZS5zdGFydENvbnZlcnNhdGlvbih7IHNwYWNlX2lkLCBjb250ZW50IH0sIGN0eCk7XG4gICAgICAgIGNvbnZlcnNhdGlvbklkID0gc3RhcnRSZXNwb25zZS5jb252ZXJzYXRpb25faWQ7XG4gICAgICAgIG1lc3NhZ2VJZCA9IHN0YXJ0UmVzcG9uc2UubWVzc2FnZV9pZDtcbiAgICAgICAgcmV0dXJuIHN0YXJ0UmVzcG9uc2UubWVzc2FnZSE7XG4gICAgICB9XG4gICAgICBpZiAoIW1lc3NhZ2VJZCkge1xuICAgICAgICAvLyBGaXJzdCBwb2xsIG9mIGEgZm9sbG93LXVwIHR1cm46IGFwcGVuZCB0byB0aGUgc2VlZGVkIGNvbnZlcnNhdGlvbi5cbiAgICAgICAgLy8gYGNsaWVudC5nZW5pZS5jcmVhdGVNZXNzYWdlYCByZXR1cm5zIGEgYFdhaXRlcjxHZW5pZU1lc3NhZ2U+YFxuICAgICAgICAvLyAoYHsgLi4ubWVzc2FnZSwgd2FpdDogYXN5bmMgKCkgPT4gLi4uIH1gKS4gU3RyaXAgYHdhaXRgIGhlcmUgc29cbiAgICAgICAgLy8gZG93bnN0cmVhbSBzZXJpYWxpemVycyAoZS5nLiB5YW1sLnN0cmluZ2lmeSkgZG9uJ3QgY2hva2Ugb24gdGhlXG4gICAgICAgIC8vIEFzeW5jRnVuY3Rpb24gdmFsdWUuXG4gICAgICAgIGNvbnN0IHsgd2FpdDogX3dhaXQsIC4uLmNyZWF0ZVJlc3BvbnNlIH0gPSBhd2FpdCBjbGllbnQuZ2VuaWUuY3JlYXRlTWVzc2FnZShcbiAgICAgICAgICB7IHNwYWNlX2lkLCBjb252ZXJzYXRpb25faWQ6IGNvbnZlcnNhdGlvbklkLCBjb250ZW50IH0sXG4gICAgICAgICAgY3R4LFxuICAgICAgICApO1xuICAgICAgICBtZXNzYWdlSWQgPSBjcmVhdGVSZXNwb25zZS5tZXNzYWdlX2lkO1xuICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2U7XG4gICAgICB9XG4gICAgICAvLyBTdWJzZXF1ZW50IHBvbGxzOiByZS1mZXRjaCB0aGUgY3VycmVudCBtZXNzYWdlIHVudGlsIGl0cyBzdGF0dXMgYmVjb21lc1xuICAgICAgLy8gdGVybWluYWwuXG4gICAgICByZXR1cm4gY2xpZW50LmdlbmllLmdldE1lc3NhZ2UoXG4gICAgICAgIHtcbiAgICAgICAgICBzcGFjZV9pZCxcbiAgICAgICAgICBjb252ZXJzYXRpb25faWQ6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIG1lc3NhZ2VfaWQ6IG1lc3NhZ2VJZCxcbiAgICAgICAgfSxcbiAgICAgICAgY3R4LFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgeWllbGQqIHBvbGwoXG4gICAgICBhc3luYyAocG9sbEN0eDogUG9sbENvbnRleHQ8R2VuaWVNZXNzYWdlPikgPT4gdmFsaWRhdGVNZXNzYWdlKGF3YWl0IHBvbGxQcm9kdWNlcihwb2xsQ3R4KSksXG4gICAgICB7XG4gICAgICAgIGludGVydmFsTXM6IG9wdGlvbnM/LnBvbGxJbnRlcnZhbE1zID8/IDUwMCxcbiAgICAgICAgLy8gU2tpcCB5aWVsZGluZyBpZGVudGljYWwgY29uc2VjdXRpdmUgc25hcHNob3RzOyBHZW5pZSBvZnRlbiByZXR1cm5zXG4gICAgICAgIC8vIHRoZSBleGFjdCBzYW1lIHBheWxvYWQgdHdpY2UgZHVyaW5nIHF1aWV0IHBlcmlvZHMuIGBwb2xsYCBkb2VzIGEgZGVlcFxuICAgICAgICAvLyBlcXVhbCBvbiB0aGUgcHJldmlvdXMgeWllbGQuXG4gICAgICAgIGZpbHRlcjogXCJkaXN0aW5jdFwiLFxuICAgICAgICAvLyBTdG9wIGFmdGVyIHRoZSB0ZXJtaW5hbCBtZXNzYWdlIGlzIHlpZWxkZWQuIGBwb2xsYCBjaGVja3MgdGhlXG4gICAgICAgIC8vIHByZWRpY2F0ZSBBRlRFUiB5aWVsZGluZywgc28gdGhlIHRlcm1pbmFsIG1lc3NhZ2Ugc3RpbGwgcmVhY2hlcyB0aGVcbiAgICAgICAgLy8gY29uc3VtZXIuXG4gICAgICAgIHByZWRpY2F0ZTogKG0pID0+ICFpc1Rlcm1pbmFsU3RhdHVzKG0uc3RhdHVzKSxcbiAgICAgICAgLy8gV2FrZSB0aGUgaW50ZXItcG9sbCBzbGVlcCBvbiBhYm9ydCBzbyBhIGBmb3IgYXdhaXRgIGJyZWFrIChvclxuICAgICAgICAvLyBleHRlcm5hbCBhYm9ydCkgdGVhcnMgZG93biBwcm9tcHRseSBpbnN0ZWFkIG9mIHdhaXRpbmcgb3V0IHRoZVxuICAgICAgICAvLyBpbnRlcnZhbC5cbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBDYW5jZWxzIGFueSBzdGlsbC1wZW5kaW5nIFNESyBjYWxsIGFuZCB0aGUgaW50ZXItcG9sbCBzbGVlcCB3aGV0aGVyIHdlJ3JlXG4gICAgLy8gdW53aW5kaW5nIGZyb20gYSBub3JtYWwgcmV0dXJuLCBhIGNvbnN1bWVyIGJyZWFrLCBvciBhIHRocm93biBlcnJvci5cbiAgICAvLyBJZGVtcG90ZW50LlxuICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGhpZ2gtbGV2ZWw6IGdlbmllRXZlbnRDaGF0IC0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIE9uZSB0dXJuIGFnYWluc3QgYSBHZW5pZSBzcGFjZSwgeWllbGRlZCBhcyBhIHR5cGVkIHtAbGluayBHZW5pZUNoYXRFdmVudH1cbiAqIHN0cmVhbS4gRHJpdmVzIHtAbGluayBnZW5pZUNoYXR9IHVuZGVybmVhdGggYW5kIGRlY29yYXRlcyBlYWNoIHNuYXBzaG90IHdpdGhcbiAqIHRoZSBkZXJpdmVkIGV2ZW50cyB0aGUgZmllbGQtbGV2ZWwgZGlmZiBwcm9kdWNlZC4gU3RyZWFtIG9yZGVyOlxuICpcbiAqICAgMS4gYHsgdHlwZTogXCJtZXNzYWdlXCIsIG1lc3NhZ2UgfWAgLSB0aGUgcmF3IGBHZW5pZU1lc3NhZ2VgLCBvbmNlIHBlciBwb2xsXG4gKiAgICAgIHlpZWxkLlxuICogICAyLiBgeyB0eXBlOiBcInF1ZXN0aW9uXCIsIGNvbnRlbnQsIG1lc3NhZ2VfaWQsIC4uLiB9YCBmaXJlcyBleGFjdGx5IG9uY2UsIG9uXG4gKiAgICAgIHRoZSBGSVJTVCBgbWVzc2FnZWAgeWllbGQuIFdlIHJlYWQgYGNvbnRlbnRgIGFuZCBgbWVzc2FnZV9pZGAgc3RyYWlnaHRcbiAqICAgICAgb2ZmIHRoZSBzbmFwc2hvdCBzbyBldmVyeSBkb3duc3RyZWFtIGV2ZW50IGZvciB0aGlzIHR1cm4gc2hhcmVzIHRoZSBzYW1lXG4gKiAgICAgIGBtZXNzYWdlX2lkYCAodGhlIHF1ZXN0aW9uIGluY2x1ZGVkKSAtIHN1YnNjcmliZXJzIGNhbiBncm91cCBldmVyeXRoaW5nXG4gKiAgICAgIGZvciBvbmUgR2VuaWUgY2FsbCB1bmRlciB0aGF0IG9uZSBrZXkuXG4gKiAgIDMuIEFueSBvZiBgc3RhdHVzYCAvIGBhdHRhY2htZW50YCAvIGB0aGlua2luZ2AgLyBgdGV4dGAgLyBgcXVlcnlgIC9cbiAqICAgICAgYHN0YXRlbWVudGAgLyBgcm93c2AgLyBgc3VnZ2VzdGVkX3F1ZXN0aW9uc2AgdGhlIGRpZmYgYWdhaW5zdCB0aGUgcHJpb3JcbiAqICAgICAgc25hcHNob3QgcHJvZHVjZWQuXG4gKiAgIDQuIE9uIHRoZSB0ZXJtaW5hbCBzbmFwc2hvdCwgYHsgdHlwZTogXCJyZXN1bHRcIiwgLi4uIH1gIGFzIHRoZSBmaW5hbCB5aWVsZC5cbiAqXG4gKiBFcnJvcnMgcHJvcGFnYXRlIGJ5IHRoZSBnZW5lcmF0b3IgdGhyb3dpbmcgLSB0aGVyZSdzIG5vIGBcImVycm9yXCJgIHZhcmlhbnQuXG4gKiBXcmFwIHRoZSBgZm9yIGF3YWl0YCBpbiBgdHJ5L2NhdGNoYCBpZiB5b3UgbmVlZCB0byBoYW5kbGUgZmFpbHVyZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGZvciBhd2FpdCAoY29uc3QgZXZ0IG9mIGdlbmllRXZlbnRDaGF0KHNwYWNlSWQsIFwiVG9wIHN0b3Jlcz9cIikpIHtcbiAqICAgc3dpdGNoIChldnQudHlwZSkge1xuICogICAgIGNhc2UgXCJ0aGlua2luZ1wiOlxuICogICAgICAgY29uc29sZS5sb2coXCJbdGhpbmtpbmddXCIsIGV2dC50aG91Z2h0X3R5cGUsIGV2dC50ZXh0KTtcbiAqICAgICAgIGJyZWFrO1xuICogICAgIGNhc2UgXCJ0ZXh0XCI6XG4gKiAgICAgICBjb25zb2xlLmxvZyhcIlt0ZXh0XVwiLCBldnQudGV4dCk7XG4gKiAgICAgICBicmVhaztcbiAqICAgICBjYXNlIFwicmVzdWx0XCI6XG4gKiAgICAgICBjb25zb2xlLmxvZyhcIltkb25lXVwiLCBldnQuc3RhdHVzKTtcbiAqICAgICAgIGJyZWFrO1xuICogICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZ2VuaWVFdmVudENoYXQoXG4gIHNwYWNlX2lkOiBzdHJpbmcsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IEdlbmllQ2hhdE9wdGlvbnMsXG4pOiBBc3luY0dlbmVyYXRvcjxHZW5pZUNoYXRFdmVudCwgdm9pZCwgdm9pZD4ge1xuICAvLyBEaWZmIHNvdXJjZSBmb3IgdGhlIGN1cnJlbnQgdHVybi4gQWx3YXlzIGB1bmRlZmluZWRgIG9uIHRoZSBmaXJzdCBzbmFwc2hvdFxuICAvLyBzbyB0aGUgaW5pdGlhbCBzdGF0dXMgLyBhdHRhY2htZW50cyBlbWl0IGZyZXNoOyB1cGRhdGVkIHRvIHRoZSBtb3N0IHJlY2VudFxuICAvLyBzbmFwc2hvdCBhZnRlciBlYWNoIHlpZWxkLlxuICBsZXQgcHJldmlvdXM6IEdlbmllTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgLy8gVGhlIGBxdWVzdGlvbmAgZXZlbnQgaXMgZGVmZXJyZWQgdG8gdGhlIGZpcnN0IGBtZXNzYWdlYCB5aWVsZCBzbyBpdCBjYW5cbiAgLy8gY2FycnkgdGhlIGFzc2lnbmVkIGBtZXNzYWdlX2lkYCAoc3Vic2NyaWJlcnMgdXNlIGl0IGFzIHRoZSBncm91cGluZyBrZXkgZm9yXG4gIC8vIGV2ZXJ5IGV2ZW50IGluIHRoaXMgdHVybikuIFRoZSBmaXJzdCBzbmFwc2hvdCBpcyB0aGUgZWFybGllc3QgcG9pbnQgdGhhdCBpZFxuICAvLyBleGlzdHMuXG4gIGxldCBxdWVzdGlvbkVtaXR0ZWQgPSBmYWxzZTtcbiAgZm9yIGF3YWl0IChjb25zdCByYXdNZXNzYWdlIG9mIGdlbmllQ2hhdChzcGFjZV9pZCwgY29udGVudCwgb3B0aW9ucykpIHtcbiAgICAvLyBOb3JtYWxpemUgYG1lc3NhZ2VfaWRgIGZyb20gdGhlIGxlZ2FjeSBgaWRgIGZpZWxkIHdoZW4gR2VuaWUncyB3aXJlXG4gICAgLy8gcmVzcG9uc2Ugb25seSBwb3B1bGF0ZXMgb25lIG9mIHRoZW0uIFRoZSBTREsgc2NoZW1hIG1hcmtzIGJvdGggYXNcbiAgICAvLyByZXF1aXJlZCwgYnV0IGluIHByYWN0aWNlIHRoZSBgc3RhcnRDb252ZXJzYXRpb25gIC8gYGNyZWF0ZU1lc3NhZ2VgIGlubmVyXG4gICAgLy8gYG1lc3NhZ2VgIHBheWxvYWQgc29tZXRpbWVzIHNoaXBzIG9ubHkgYGlkYCB3aGlsZSB0aGUgbmV3IGBtZXNzYWdlX2lkYFxuICAgIC8vIGZpZWxkIGxhbmRzIHVuZGVmaW5lZC4gRXZlcnkgZG93bnN0cmVhbSBldmVudCBkZXRlY3RvciBrZXlzIGdyb3VwaW5nIG9mZlxuICAgIC8vIGBtZXNzYWdlX2lkYDsgdGhlIGZhbGxiYWNrIGtlZXBzIG9uZSBHZW5pZSB0dXJuJ3MgZXZlbnRzIGZyb20gc3BsaXR0aW5nXG4gICAgLy8gYWNyb3NzIGFuIGFub24gZ3JvdXAgKyB0aGUgcmVhbC1pZCBncm91cCB3aGVuIHN1YnNjcmliZXJzIGJ1Y2tldCBieVxuICAgIC8vIGBtZXNzYWdlX2lkYC5cbiAgICBjb25zdCBtZXNzYWdlOiBHZW5pZU1lc3NhZ2UgPSByYXdNZXNzYWdlLm1lc3NhZ2VfaWRcbiAgICAgID8gcmF3TWVzc2FnZVxuICAgICAgOiB7IC4uLnJhd01lc3NhZ2UsIG1lc3NhZ2VfaWQ6IHJhd01lc3NhZ2UuaWQgfTtcbiAgICB5aWVsZCB7XG4gICAgICB0eXBlOiBcIm1lc3NhZ2VcIixcbiAgICAgIHNwYWNlX2lkOiBtZXNzYWdlLnNwYWNlX2lkLFxuICAgICAgbWVzc2FnZV9pZDogbWVzc2FnZS5tZXNzYWdlX2lkLFxuICAgICAgbWVzc2FnZSxcbiAgICB9O1xuICAgIGlmICghcXVlc3Rpb25FbWl0dGVkKSB7XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHR5cGU6IFwicXVlc3Rpb25cIixcbiAgICAgICAgc3BhY2VfaWQ6IG1lc3NhZ2Uuc3BhY2VfaWQsXG4gICAgICAgIC4uLihtZXNzYWdlLmNvbnZlcnNhdGlvbl9pZCA/IHsgY29udmVyc2F0aW9uX2lkOiBtZXNzYWdlLmNvbnZlcnNhdGlvbl9pZCB9IDoge30pLFxuICAgICAgICAuLi4obWVzc2FnZS5tZXNzYWdlX2lkID8geyBtZXNzYWdlX2lkOiBtZXNzYWdlLm1lc3NhZ2VfaWQgfSA6IHt9KSxcbiAgICAgICAgY29udGVudDogbWVzc2FnZS5jb250ZW50LFxuICAgICAgfTtcbiAgICAgIHF1ZXN0aW9uRW1pdHRlZCA9IHRydWU7XG4gICAgfVxuICAgIHlpZWxkKiBldmVudHNGcm9tTWVzc2FnZShtZXNzYWdlLCBwcmV2aW91cywgbWVzc2FnZS5zcGFjZV9pZCk7XG4gICAgY29uc3Qgc3RhdHVzID0gbWVzc2FnZS5zdGF0dXM7XG4gICAgaWYgKGlzVGVybWluYWxTdGF0dXMoc3RhdHVzKSkge1xuICAgICAgeWllbGQge1xuICAgICAgICB0eXBlOiBcInJlc3VsdFwiLFxuICAgICAgICBzcGFjZV9pZDogbWVzc2FnZS5zcGFjZV9pZCxcbiAgICAgICAgY29udmVyc2F0aW9uX2lkOiBtZXNzYWdlLmNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgbWVzc2FnZV9pZDogbWVzc2FnZS5tZXNzYWdlX2lkLFxuICAgICAgICBzdGF0dXMsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICB9O1xuICAgIH1cbiAgICBwcmV2aW91cyA9IG1lc3NhZ2U7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB3b3Jrc3BhY2UgY2xpZW50IGhlbHBlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBSZXNvbHZlIGEgYFdvcmtzcGFjZUNsaWVudGAgaW4gdGhpcyBwcmVmZXJlbmNlIG9yZGVyOlxuICpcbiAqICAgMS4gQ2FsbGVyLXN1cHBsaWVkIGBvcHRpb25zLndvcmtzcGFjZUNsaWVudGAuXG4gKiAgIDIuIEFwcEtpdCdzIHBlci1yZXF1ZXN0IGV4ZWN1dGlvbi1jb250ZXh0IGNsaWVudCBpbnNpZGUgYSByZXF1ZXN0IHNjb3BlLlxuICogICAzLiBGcmVzaCBuYXRpdmUgQXBwS2l0IGBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoKWAuXG4gKlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VDbGllbnQob3B0aW9ucz86IEdlbmllQ2hhdE9wdGlvbnMpOiBQcm9taXNlPFdvcmtzcGFjZUNsaWVudD4ge1xuICBpZiAob3B0aW9ucz8ud29ya3NwYWNlQ2xpZW50KSByZXR1cm4gb3B0aW9ucy53b3Jrc3BhY2VDbGllbnQ7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdldEV4ZWN1dGlvbkNvbnRleHQoKS5jbGllbnQ7XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vdCBpbnNpZGUgYW4gQXBwS2l0IHJlcXVlc3QgY29udGV4dDsgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgYXV0aC5cbiAgfVxuICByZXR1cm4gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCk7XG59XG4iXX0=
|
package/lib/src/feedback.d.ts
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
6
|
import { type WorkspaceClient } from "@databricks/appkit";
|
|
7
|
-
import {
|
|
7
|
+
import { type ContextLike } from "@dbx-tools/appkit";
|
|
8
8
|
import { type GenieMessageFeedbackRequest } from "@dbx-tools/shared-genie";
|
|
9
9
|
/** Options for one identity-scoped Genie feedback write. */
|
|
10
10
|
export interface SendGenieMessageFeedbackOptions {
|
|
11
11
|
/** Workspace client whose identity submits the feedback. */
|
|
12
12
|
workspaceClient?: WorkspaceClient;
|
|
13
13
|
/** External cancellation. */
|
|
14
|
-
context?:
|
|
14
|
+
context?: ContextLike;
|
|
15
15
|
}
|
|
16
16
|
/** Send rating and optional comment directly to one Genie message. */
|
|
17
17
|
export declare function sendGenieMessageFeedback(input: GenieMessageFeedbackRequest, options?: SendGenieMessageFeedbackOptions): Promise<void>;
|
package/lib/src/feedback.js
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
6
|
import { createWorkspaceClient } from "@databricks/appkit";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { toContext } from "@dbx-tools/appkit";
|
|
8
|
+
import { GenieMessageFeedbackRequestSchema, } from "@dbx-tools/shared-genie";
|
|
9
9
|
/** Send rating and optional comment directly to one Genie message. */
|
|
10
10
|
export async function sendGenieMessageFeedback(input, options) {
|
|
11
|
-
const request =
|
|
11
|
+
const request = GenieMessageFeedbackRequestSchema.parse(input);
|
|
12
12
|
const client = options?.workspaceClient ?? createWorkspaceClient();
|
|
13
|
-
const context = options?.context ?
|
|
13
|
+
const context = options?.context ? toContext(options.context) : undefined;
|
|
14
14
|
await client.apiClient.request({
|
|
15
15
|
path: `/api/2.0/genie/spaces/${encodeURIComponent(request.space_id)}/conversations/${encodeURIComponent(request.conversation_id)}/messages/${encodeURIComponent(request.message_id)}/feedback`,
|
|
16
16
|
method: "POST",
|
|
@@ -22,4 +22,4 @@ export async function sendGenieMessageFeedback(input, options) {
|
|
|
22
22
|
raw: false,
|
|
23
23
|
}, context);
|
|
24
24
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmVlZGJhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRixPQUFPLEVBQW9CLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxpQ0FBaUMsR0FDbEMsTUFBTSx5QkFBeUIsQ0FBQztBQVVqQyxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsS0FBa0MsRUFDbEMsT0FBeUM7SUFFekMsTUFBTSxPQUFPLEdBQUcsaUNBQWlDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9ELE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxlQUFlLElBQUkscUJBQXFCLEVBQUUsQ0FBQztJQUNuRSxNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDMUUsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDNUI7UUFDRSxJQUFJLEVBQUUseUJBQXlCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsYUFBYSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVc7UUFDOUwsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFO1FBQ3RCLEdBQUcsRUFBRSxLQUFLO0tBQ1gsRUFDRCxPQUFPLENBQ1IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmllIG1lc3NhZ2UgZmVlZGJhY2sgZm9yIGNoYXQtbW9kZSBhbmQgYWdlbnQtbW9kZSBjb252ZXJzYXRpb25zLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVXb3Jrc3BhY2VDbGllbnQsIHR5cGUgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgdHlwZSBDb250ZXh0TGlrZSwgdG9Db250ZXh0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQge1xuICB0eXBlIEdlbmllTWVzc2FnZUZlZWRiYWNrUmVxdWVzdCxcbiAgR2VuaWVNZXNzYWdlRmVlZGJhY2tSZXF1ZXN0U2NoZW1hLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWVcIjtcblxuLyoqIE9wdGlvbnMgZm9yIG9uZSBpZGVudGl0eS1zY29wZWQgR2VuaWUgZmVlZGJhY2sgd3JpdGUuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRHZW5pZU1lc3NhZ2VGZWVkYmFja09wdGlvbnMge1xuICAvKiogV29ya3NwYWNlIGNsaWVudCB3aG9zZSBpZGVudGl0eSBzdWJtaXRzIHRoZSBmZWVkYmFjay4gKi9cbiAgd29ya3NwYWNlQ2xpZW50PzogV29ya3NwYWNlQ2xpZW50O1xuICAvKiogRXh0ZXJuYWwgY2FuY2VsbGF0aW9uLiAqL1xuICBjb250ZXh0PzogQ29udGV4dExpa2U7XG59XG5cbi8qKiBTZW5kIHJhdGluZyBhbmQgb3B0aW9uYWwgY29tbWVudCBkaXJlY3RseSB0byBvbmUgR2VuaWUgbWVzc2FnZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kR2VuaWVNZXNzYWdlRmVlZGJhY2soXG4gIGlucHV0OiBHZW5pZU1lc3NhZ2VGZWVkYmFja1JlcXVlc3QsXG4gIG9wdGlvbnM/OiBTZW5kR2VuaWVNZXNzYWdlRmVlZGJhY2tPcHRpb25zLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBHZW5pZU1lc3NhZ2VGZWVkYmFja1JlcXVlc3RTY2hlbWEucGFyc2UoaW5wdXQpO1xuICBjb25zdCBjbGllbnQgPSBvcHRpb25zPy53b3Jrc3BhY2VDbGllbnQgPz8gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCk7XG4gIGNvbnN0IGNvbnRleHQgPSBvcHRpb25zPy5jb250ZXh0ID8gdG9Db250ZXh0KG9wdGlvbnMuY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGF3YWl0IGNsaWVudC5hcGlDbGllbnQucmVxdWVzdChcbiAgICB7XG4gICAgICBwYXRoOiBgL2FwaS8yLjAvZ2VuaWUvc3BhY2VzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlcXVlc3Quc3BhY2VfaWQpfS9jb252ZXJzYXRpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlcXVlc3QuY29udmVyc2F0aW9uX2lkKX0vbWVzc2FnZXMvJHtlbmNvZGVVUklDb21wb25lbnQocmVxdWVzdC5tZXNzYWdlX2lkKX0vZmVlZGJhY2tgLFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgcmF0aW5nOiByZXF1ZXN0LnJhdGluZyxcbiAgICAgICAgLi4uKHJlcXVlc3QuY29tbWVudCA/IHsgY29tbWVudDogcmVxdWVzdC5jb21tZW50IH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoKSxcbiAgICAgIHJhdzogZmFsc2UsXG4gICAgfSxcbiAgICBjb250ZXh0LFxuICApO1xufVxuIl19
|
package/lib/src/space.d.ts
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* @module
|
|
22
22
|
*/
|
|
23
23
|
import { type WorkspaceClient } from "@databricks/appkit";
|
|
24
|
-
import {
|
|
24
|
+
import { type ContextLike } from "@dbx-tools/appkit";
|
|
25
25
|
import { type CreateGenieSpaceRequest, type GenieSpace } from "@dbx-tools/shared-genie";
|
|
26
26
|
/** Options for {@link getGenieSpace}. */
|
|
27
27
|
export interface GetGenieSpaceOptions {
|
|
@@ -45,14 +45,14 @@ export interface GetGenieSpaceOptions {
|
|
|
45
45
|
* External cancellation. Accepts a WHATWG `AbortSignal` or a fully-built SDK
|
|
46
46
|
* `Context` (see `databricks.ContextLike`).
|
|
47
47
|
*/
|
|
48
|
-
context?:
|
|
48
|
+
context?: ContextLike;
|
|
49
49
|
}
|
|
50
50
|
/** Options for creating a Genie space with explicit workspace identity. */
|
|
51
51
|
export interface CreateGenieSpaceOptions {
|
|
52
52
|
/** Workspace client whose identity owns the new space. */
|
|
53
53
|
workspaceClient?: WorkspaceClient;
|
|
54
54
|
/** External cancellation. */
|
|
55
|
-
context?:
|
|
55
|
+
context?: ContextLike;
|
|
56
56
|
}
|
|
57
57
|
/** Create a Genie space from one validated serialized definition. */
|
|
58
58
|
export declare function createGenieSpace(input: CreateGenieSpaceRequest, options?: CreateGenieSpaceOptions): Promise<GenieSpace>;
|
package/lib/src/space.js
CHANGED
|
@@ -21,15 +21,15 @@
|
|
|
21
21
|
* @module
|
|
22
22
|
*/
|
|
23
23
|
import { createWorkspaceClient } from "@databricks/appkit";
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
24
|
+
import { toContext } from "@dbx-tools/appkit";
|
|
25
|
+
import { log, toError, errorContext, parse, sequence, firstNonEmpty } from "@dbx-tools/shared-core";
|
|
26
|
+
import { CreateGenieSpaceRequestSchema, GenieSpaceSchema, } from "@dbx-tools/shared-genie";
|
|
27
27
|
const logger = log.logger("genie/space");
|
|
28
28
|
/** Create a Genie space from one validated serialized definition. */
|
|
29
29
|
export async function createGenieSpace(input, options) {
|
|
30
|
-
const request =
|
|
30
|
+
const request = CreateGenieSpaceRequestSchema.parse(input);
|
|
31
31
|
const client = options?.workspaceClient ?? createWorkspaceClient();
|
|
32
|
-
const context = options?.context ?
|
|
32
|
+
const context = options?.context ? toContext(options.context) : undefined;
|
|
33
33
|
const raw = await client.apiClient.request({
|
|
34
34
|
path: "/api/2.0/genie/spaces",
|
|
35
35
|
method: "POST",
|
|
@@ -37,7 +37,7 @@ export async function createGenieSpace(input, options) {
|
|
|
37
37
|
headers: new Headers(),
|
|
38
38
|
raw: false,
|
|
39
39
|
}, context);
|
|
40
|
-
return
|
|
40
|
+
return GenieSpaceSchema.parse(raw);
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
43
|
* Fetch a Genie space by id, optionally including its serialized definition.
|
|
@@ -56,7 +56,7 @@ export async function createGenieSpace(input, options) {
|
|
|
56
56
|
export async function getGenieSpace(spaceId, options) {
|
|
57
57
|
const client = options?.workspaceClient ?? createWorkspaceClient();
|
|
58
58
|
const serialized = options?.serialized !== false;
|
|
59
|
-
const ctx = options?.context ?
|
|
59
|
+
const ctx = options?.context ? toContext(options.context) : undefined;
|
|
60
60
|
const request = (includeSerialized) => client.apiClient.request({
|
|
61
61
|
path: `/api/2.0/genie/spaces/${encodeURIComponent(spaceId)}`,
|
|
62
62
|
method: "GET",
|
|
@@ -73,11 +73,11 @@ export async function getGenieSpace(spaceId, options) {
|
|
|
73
73
|
throw err;
|
|
74
74
|
logger.debug("serialized-space:forbidden", {
|
|
75
75
|
spaceId,
|
|
76
|
-
error:
|
|
76
|
+
error: toError(err),
|
|
77
77
|
});
|
|
78
78
|
raw = await request(false);
|
|
79
79
|
}
|
|
80
|
-
return
|
|
80
|
+
return GenieSpaceSchema.parse(raw);
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
83
|
* True when a failed space request was rejected for lack of permission, the one
|
|
@@ -86,7 +86,7 @@ export async function getGenieSpace(spaceId, options) {
|
|
|
86
86
|
* SDK surfaces the error code without always carrying a status.
|
|
87
87
|
*/
|
|
88
88
|
function isSerializedSpaceForbidden(err) {
|
|
89
|
-
const context =
|
|
89
|
+
const context = errorContext(err);
|
|
90
90
|
return (context.hasStatusCode(403) ||
|
|
91
91
|
context.hasMessage("permission denied") ||
|
|
92
92
|
context.hasMessage("can edit"));
|
|
@@ -103,7 +103,7 @@ export function genieSampleQuestions(space) {
|
|
|
103
103
|
const serialized = space.serialized_space;
|
|
104
104
|
if (!serialized)
|
|
105
105
|
return [];
|
|
106
|
-
const parsed =
|
|
106
|
+
const parsed = parse(serialized);
|
|
107
107
|
if (parsed === undefined) {
|
|
108
108
|
logger.warn("serialized-space:parse-error", { spaceId: space.space_id });
|
|
109
109
|
return [];
|
|
@@ -113,11 +113,10 @@ export function genieSampleQuestions(space) {
|
|
|
113
113
|
if (!Array.isArray(sampleQuestions))
|
|
114
114
|
return [];
|
|
115
115
|
return [
|
|
116
|
-
...
|
|
117
|
-
.
|
|
118
|
-
.map((entry) => stringUtils.firstNonEmpty(entry?.question))
|
|
116
|
+
...sequence(sampleQuestions)
|
|
117
|
+
.map((entry) => firstNonEmpty(entry?.question))
|
|
119
118
|
.nonNull()
|
|
120
119
|
.distinct(),
|
|
121
120
|
];
|
|
122
121
|
}
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFpRCxNQUFNLHlCQUF5QixDQUFDO0FBRXBHLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFtQ3pDLHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxLQUE4QixFQUM5QixPQUFpQztJQUVqQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxlQUFlLElBQUkscUJBQXFCLEVBQUUsQ0FBQztJQUNuRSxNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JGLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQ3hDO1FBQ0UsSUFBSSxFQUFFLHVCQUF1QjtRQUM3QixNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxJQUFJLE9BQU8sRUFBRTtRQUN0QixHQUFHLEVBQUUsS0FBSztLQUNYLEVBQ0Qs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QUFFLE9BQU8sRUFBRSxDQUFDO0lBRS9DLE9BQU87UUFDTCxHQUFHLE1BQU07YUFDTixRQUFRLENBQUMsZUFBNkMsQ0FBQzthQUN2RCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzFELE9BQU8sRUFBRTthQUNULFFBQVEsRUFBRTtLQUNkLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5pZSBzcGFjZSBtZXRhZGF0YSBoZWxwZXJzLlxuICpcbiAqIEZldGNoZXMgYSBHZW5pZSBzcGFjZSdzIGRlZmluaXRpb24gKGluY2x1ZGluZyB0aGUgb3B0LWluIGBzZXJpYWxpemVkX3NwYWNlYFxuICogYmxvYikgYW5kIGV4dHJhY3RzIHRoZSBjdXJhdGVkIHN0YXJ0ZXIgcXVlc3Rpb25zIGFuIGF1dGhvciBjb25maWd1cmVkIG9uIHRoZVxuICogc3BhY2UuIFRoZSB0eXBlZCBTREsgYGNsaWVudC5nZW5pZS5nZXRTcGFjZWAgb25seSByZXR1cm5zIHRoZVxuICogZGlyZWN0b3J5LWxpc3Rpbmcgc3VyZmFjZSAoYHRpdGxlYCAvIGBkZXNjcmlwdGlvbmAgLyBgd2FyZWhvdXNlX2lkYCk7IHRoZVxuICogc2FtcGxlIHF1ZXN0aW9ucyBsaXZlIGluc2lkZSBgc2VyaWFsaXplZF9zcGFjZWAsIHdoaWNoIHRoZSBSRVNUIEFQSSByZXR1cm5zXG4gKiBvbmx5IHdoZW4gYGluY2x1ZGVfc2VyaWFsaXplZF9zcGFjZT10cnVlYC4gV2UgaGl0IHRoYXQgZW5kcG9pbnQgdGhyb3VnaCB0aGVcbiAqIHdvcmtzcGFjZSBjbGllbnQncyByYXcgYGFwaUNsaWVudGAgc2luY2UgdGhlIHR5cGVkIHJlcXVlc3Qgc2hhcGUgaGFzIG5vIGZsYWdcbiAqIGZvciBpdC5cbiAqXG4gKiBUaGUgc2VyaWFsaXplZCBibG9iIGlzIGFsc28gbW9yZSBwcml2aWxlZ2VkIHRoYW4gdGhlIGxpc3Rpbmcgc3VyZmFjZTogdGhlXG4gKiB3b3Jrc3BhY2UgQVBJIHJlcXVpcmVzIGBDYW4gRWRpdGAgb24gdGhlIHNwYWNlIHRvIHJldHVybiBpdCwgd2hpbGUgYENhbiBSdW5gXG4gKiBpcyBlbm91Z2ggZm9yIHRpdGxlIC8gZGVzY3JpcHRpb24uIEEgY2FsbGVyIHRoYXQgb25seSBob2xkcyBgQ2FuIFJ1bmAgLSBhblxuICogYXBwIHNlcnZpY2UgcHJpbmNpcGFsIGdyYW50ZWQganVzdCBlbm91Z2ggdG8gYXNrIHF1ZXN0aW9ucyBpcyB0aGUgY29tbW9uIGNhc2VcbiAqIC0gd291bGQgb3RoZXJ3aXNlIGxvc2UgdGhlIHdob2xlIHNwYWNlIGxvb2t1cCB0byBhIGBQRVJNSVNTSU9OX0RFTklFRGAgaXRcbiAqIGNhbm5vdCBhY3Qgb24sIHNvIHRoZSBmZXRjaCBkZWdyYWRlcyB0byB0aGUgdW5zZXJpYWxpemVkIHJlcXVlc3QgaW5zdGVhZCBvZlxuICogZmFpbGluZyAoc2VlIHtAbGluayBnZXRHZW5pZVNwYWNlfSkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCwgdHlwZSBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBqc29uLCBsb2csIG9iamVjdCwgc3RyaW5nVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZ2VuaWVNb2RlbCwgdHlwZSBDcmVhdGVHZW5pZVNwYWNlUmVxdWVzdCwgdHlwZSBHZW5pZVNwYWNlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmllXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJnZW5pZS9zcGFjZVwiKTtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRHZW5pZVNwYWNlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0R2VuaWVTcGFjZU9wdGlvbnMge1xuICAvKipcbiAgICogRXhwbGljaXQgYFdvcmtzcGFjZUNsaWVudGAuIERlZmF1bHRzIHRvIGBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoKWBcbiAgICogKGVudi12YXIgYXV0aCkuIFNlcnZlciBjYWxsZXJzIHNob3VsZCBwYXNzIHRoZWlyIE9CTy1zY29wZWQgY2xpZW50IHNvIHRoZVxuICAgKiBsb29rdXAgcnVucyBhcyB0aGUgdXNlci5cbiAgICovXG4gIHdvcmtzcGFjZUNsaWVudD86IFdvcmtzcGFjZUNsaWVudDtcbiAgLyoqXG4gICAqIFJlcXVlc3QgdGhlIGBzZXJpYWxpemVkX3NwYWNlYCBibG9iIChjYXRhbG9ncywgdGFibGVzLCBzYW1wbGUgcXVlc3Rpb25zLFxuICAgKiBwcm9tcHRzKS4gRGVmYXVsdHMgdG8gYHRydWVgIC0gdGhlIG9ubHkgcmVhc29uIHRvIHNraXAgaXQgaXMgd2hlbiB0aGVcbiAgICogY2FsbGVyIGp1c3QgbmVlZHMgdGl0bGUgLyBkZXNjcmlwdGlvbiBhbmQgd2FudHMgdGhlIHNtYWxsZXIgcGF5bG9hZC5cbiAgICpcbiAgICogUmVxdWVzdGluZyBpdCBpcyBiZXN0LWVmZm9ydDogdGhlIGJsb2IgbmVlZHMgYENhbiBFZGl0YCBvbiB0aGUgc3BhY2UsIHNvIGFcbiAgICogY2FsbGVyIHdpdGhvdXQgaXQgZ2V0cyB0aGUgdW5zZXJpYWxpemVkIHNwYWNlIGJhY2sgcmF0aGVyIHRoYW4gYW4gZXJyb3IsXG4gICAqIGFuZCB7QGxpbmsgZ2VuaWVTYW1wbGVRdWVzdGlvbnN9IHRoZW4gcmVwb3J0cyBubyBzdWdnZXN0aW9ucy5cbiAgICovXG4gIHNlcmlhbGl6ZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRXh0ZXJuYWwgY2FuY2VsbGF0aW9uLiBBY2NlcHRzIGEgV0hBVFdHIGBBYm9ydFNpZ25hbGAgb3IgYSBmdWxseS1idWlsdCBTREtcbiAgICogYENvbnRleHRgIChzZWUgYGRhdGFicmlja3MuQ29udGV4dExpa2VgKS5cbiAgICovXG4gIGNvbnRleHQ/OiBkYXRhYnJpY2tzLkNvbnRleHRMaWtlO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBHZW5pZSBzcGFjZSB3aXRoIGV4cGxpY2l0IHdvcmtzcGFjZSBpZGVudGl0eS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlR2VuaWVTcGFjZU9wdGlvbnMge1xuICAvKiogV29ya3NwYWNlIGNsaWVudCB3aG9zZSBpZGVudGl0eSBvd25zIHRoZSBuZXcgc3BhY2UuICovXG4gIHdvcmtzcGFjZUNsaWVudD86IFdvcmtzcGFjZUNsaWVudDtcbiAgLyoqIEV4dGVybmFsIGNhbmNlbGxhdGlvbi4gKi9cbiAgY29udGV4dD86IGRhdGFicmlja3MuQ29udGV4dExpa2U7XG59XG5cbi8qKiBDcmVhdGUgYSBHZW5pZSBzcGFjZSBmcm9tIG9uZSB2YWxpZGF0ZWQgc2VyaWFsaXplZCBkZWZpbml0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUdlbmllU3BhY2UoXG4gIGlucHV0OiBDcmVhdGVHZW5pZVNwYWNlUmVxdWVzdCxcbiAgb3B0aW9ucz86IENyZWF0ZUdlbmllU3BhY2VPcHRpb25zLFxuKTogUHJvbWlzZTxHZW5pZVNwYWNlPiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBnZW5pZU1vZGVsLkNyZWF0ZUdlbmllU3BhY2VSZXF1ZXN0U2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgY29uc3QgY2xpZW50ID0gb3B0aW9ucz8ud29ya3NwYWNlQ2xpZW50ID8/IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpO1xuICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/IGRhdGFicmlja3MudG9Db250ZXh0KG9wdGlvbnMuY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJhdyA9IGF3YWl0IGNsaWVudC5hcGlDbGllbnQucmVxdWVzdChcbiAgICB7XG4gICAgICBwYXRoOiBcIi9hcGkvMi4wL2dlbmllL3NwYWNlc1wiLFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIHBheWxvYWQ6IHJlcXVlc3QsXG4gICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycygpLFxuICAgICAgcmF3OiBmYWxzZSxcbiAgICB9LFxuICAgIGNvbnRleHQsXG4gICk7XG4gIHJldHVybiBnZW5pZU1vZGVsLkdlbmllU3BhY2VTY2hlbWEucGFyc2UocmF3KTtcbn1cblxuLyoqXG4gKiBGZXRjaCBhIEdlbmllIHNwYWNlIGJ5IGlkLCBvcHRpb25hbGx5IGluY2x1ZGluZyBpdHMgc2VyaWFsaXplZCBkZWZpbml0aW9uLlxuICogSGl0cyBgR0VUIC9hcGkvMi4wL2dlbmllL3NwYWNlcy88aWQ+YCB3aXRoIGBpbmNsdWRlX3NlcmlhbGl6ZWRfc3BhY2U9dHJ1ZWBcbiAqIHRocm91Z2ggdGhlIHJhdyBgYXBpQ2xpZW50YCwgdGhlbiB2YWxpZGF0ZXMgdGhlIHJlc3BvbnNlIGFnYWluc3RcbiAqIHtAbGluayBHZW5pZVNwYWNlU2NoZW1hfSAodW5rbm93biBmaWVsZHMgbGlrZSBgZXRhZ2AgL1xuICogYHBhcmVudF9wYXRoYCBhcmUgc3RyaXBwZWQpLlxuICpcbiAqIFdoZW4gdGhlIHNlcmlhbGl6ZWQgcmVxdWVzdCBpcyByZWplY3RlZCBmb3IgbGFjayBvZiBwZXJtaXNzaW9uIChgNDAzYCwgb3IgYVxuICogYFBFUk1JU1NJT05fREVOSUVEYCAvIGBDYW4gRWRpdGAgbWVzc2FnZSAtIHRoZSB3b3Jrc3BhY2UgQVBJIGdhdGVzIHRoZSBibG9iXG4gKiBiZWhpbmQgYENhbiBFZGl0YCksIGl0IHJldHJpZXMgb25jZSB3aXRob3V0IHRoZSBmbGFnIHNvIHRoZSBjYWxsZXIgc3RpbGwgZ2V0c1xuICogdGhlIHNwYWNlLiBBbnkgb3RoZXIgZmFpbHVyZSwgYW5kIGEgcmV0cnkgdGhhdCBmYWlscyB0b28sIGlzIHJldGhyb3duOiBhXG4gKiBjYW5jZWxsZWQgcmVxdWVzdCBvciBhIG1pc3Npbmcgc3BhY2UgbXVzdCBub3QgbG9vayBsaWtlIGFuIHVuc2VyaWFsaXplZFxuICogc3BhY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRHZW5pZVNwYWNlKFxuICBzcGFjZUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBHZXRHZW5pZVNwYWNlT3B0aW9ucyxcbik6IFByb21pc2U8R2VuaWVTcGFjZT4ge1xuICBjb25zdCBjbGllbnQgPSBvcHRpb25zPy53b3Jrc3BhY2VDbGllbnQgPz8gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCk7XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBvcHRpb25zPy5zZXJpYWxpemVkICE9PSBmYWxzZTtcbiAgY29uc3QgY3R4ID0gb3B0aW9ucz8uY29udGV4dCA/IGRhdGFicmlja3MudG9Db250ZXh0KG9wdGlvbnMuY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlcXVlc3QgPSAoaW5jbHVkZVNlcmlhbGl6ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHVua25vd24+ID0+XG4gICAgY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBwYXRoOiBgL2FwaS8yLjAvZ2VuaWUvc3BhY2VzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHNwYWNlSWQpfWAsXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgcXVlcnk6IGluY2x1ZGVTZXJpYWxpemVkID8geyBpbmNsdWRlX3NlcmlhbGl6ZWRfc3BhY2U6IHRydWUgfSA6IHt9LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycygpLFxuICAgICAgICByYXc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGN0eCxcbiAgICApO1xuXG4gIGxldCByYXc6IHVua25vd247XG4gIHRyeSB7XG4gICAgcmF3ID0gYXdhaXQgcmVxdWVzdChzZXJpYWxpemVkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFzZXJpYWxpemVkIHx8ICFpc1NlcmlhbGl6ZWRTcGFjZUZvcmJpZGRlbihlcnIpKSB0aHJvdyBlcnI7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2VyaWFsaXplZC1zcGFjZTpmb3JiaWRkZW5cIiwge1xuICAgICAgc3BhY2VJZCxcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyKSxcbiAgICB9KTtcbiAgICByYXcgPSBhd2FpdCByZXF1ZXN0KGZhbHNlKTtcbiAgfVxuICByZXR1cm4gZ2VuaWVNb2RlbC5HZW5pZVNwYWNlU2NoZW1hLnBhcnNlKHJhdyk7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGEgZmFpbGVkIHNwYWNlIHJlcXVlc3Qgd2FzIHJlamVjdGVkIGZvciBsYWNrIG9mIHBlcm1pc3Npb24sIHRoZSBvbmVcbiAqIGZhaWx1cmUgdGhlIHVuc2VyaWFsaXplZCByZXRyeSBjYW4gcmVjb3ZlciBmcm9tLiBNYXRjaGVzIG9uIGA0MDNgIGFuZCBvbiB0aGVcbiAqIGBQRVJNSVNTSU9OX0RFTklFRGAgLyBgQ2FuIEVkaXRgIHdvcmRpbmcgdGhlIHdvcmtzcGFjZSBBUEkgcmV0dXJucywgc2luY2UgdGhlXG4gKiBTREsgc3VyZmFjZXMgdGhlIGVycm9yIGNvZGUgd2l0aG91dCBhbHdheXMgY2FycnlpbmcgYSBzdGF0dXMuXG4gKi9cbmZ1bmN0aW9uIGlzU2VyaWFsaXplZFNwYWNlRm9yYmlkZGVuKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBjb250ZXh0ID0gZXJyb3JVdGlscy5lcnJvckNvbnRleHQoZXJyKTtcbiAgcmV0dXJuIChcbiAgICBjb250ZXh0Lmhhc1N0YXR1c0NvZGUoNDAzKSB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcInBlcm1pc3Npb24gZGVuaWVkXCIpIHx8XG4gICAgY29udGV4dC5oYXNNZXNzYWdlKFwiY2FuIGVkaXRcIilcbiAgKTtcbn1cblxuLyoqXG4gKiBPbmUgZW50cnkgaW4gYSBzZXJpYWxpemVkIHNwYWNlJ3MgYGNvbmZpZy5zYW1wbGVfcXVlc3Rpb25zYC4gVGhlXG4gKiBhdXRob3ItZmFjaW5nIGZpZWxkIGlzIGBxdWVzdGlvbmAsIHdoaWNoIHRoZSB3aXJlIGZvcm1hdCBtb2RlbHMgYXMgYSBzdHJpbmdcbiAqIGFycmF5IChhIHNpbmdsZSBtdWx0aS1saW5lIHF1ZXN0aW9uIGlzIHNwbGl0IGFjcm9zcyBlbnRyaWVzKTsgd2UgdHJlYXQgdGhlXG4gKiBmaXJzdCBub24tZW1wdHkgZW50cnkgYXMgdGhlIGRpc3BsYXlhYmxlIHF1ZXN0aW9uIHRleHQuXG4gKi9cbmludGVyZmFjZSBTZXJpYWxpemVkU2FtcGxlUXVlc3Rpb24ge1xuICBxdWVzdGlvbj86IHVua25vd247XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgY3VyYXRlZCBzdGFydGVyIHF1ZXN0aW9ucyBhbiBhdXRob3IgY29uZmlndXJlZCBvbiBhIEdlbmllIHNwYWNlLlxuICogUmVhZHMgYHNlcmlhbGl6ZWRfc3BhY2UgLT4gY29uZmlnLnNhbXBsZV9xdWVzdGlvbnNbKl0ucXVlc3Rpb25gLiBSZXR1cm5zIGBbXWBcbiAqIHdoZW4gdGhlIHNwYWNlIGNhcnJpZXMgbm8gc2VyaWFsaXplZCBibG9iLCB0aGUgYmxvYiBpcyB1bnBhcnNlYWJsZSwgb3Igbm9cbiAqIHNhbXBsZSBxdWVzdGlvbnMgYXJlIGNvbmZpZ3VyZWQgLSBzbyBhIG1pc3Npbmcgb3IgbWlzY29uZmlndXJlZCBzcGFjZVxuICogZGVncmFkZXMgdG8gXCJubyBzdWdnZXN0aW9uc1wiIHJhdGhlciB0aGFuIHRocm93aW5nLiBPcmRlciBpcyBwcmVzZXJ2ZWQgKHRoZVxuICogYXV0aG9yJ3Mgb3JkZXJpbmcpIGFuZCBkdXBsaWNhdGVzIGFyZSBkcm9wcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuaWVTYW1wbGVRdWVzdGlvbnMoc3BhY2U6IEdlbmllU3BhY2UpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBzcGFjZS5zZXJpYWxpemVkX3NwYWNlO1xuICBpZiAoIXNlcmlhbGl6ZWQpIHJldHVybiBbXTtcbiAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZShzZXJpYWxpemVkKTtcbiAgaWYgKHBhcnNlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJzZXJpYWxpemVkLXNwYWNlOnBhcnNlLWVycm9yXCIsIHsgc3BhY2VJZDogc3BhY2Uuc3BhY2VfaWQgfSk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHNhbXBsZVF1ZXN0aW9ucyA9IChwYXJzZWQgYXMgeyBjb25maWc/OiB7IHNhbXBsZV9xdWVzdGlvbnM/OiB1bmtub3duIH0gfSB8IG51bGwpPy5jb25maWdcbiAgICA/LnNhbXBsZV9xdWVzdGlvbnM7XG4gIGlmICghQXJyYXkuaXNBcnJheShzYW1wbGVRdWVzdGlvbnMpKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIFtcbiAgICAuLi5vYmplY3RcbiAgICAgIC5zZXF1ZW5jZShzYW1wbGVRdWVzdGlvbnMgYXMgU2VyaWFsaXplZFNhbXBsZVF1ZXN0aW9uW10pXG4gICAgICAubWFwKChlbnRyeSkgPT4gc3RyaW5nVXRpbHMuZmlyc3ROb25FbXB0eShlbnRyeT8ucXVlc3Rpb24pKVxuICAgICAgLm5vbk51bGwoKVxuICAgICAgLmRpc3RpbmN0KCksXG4gIF07XG59XG4iXX0=
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRixPQUFPLEVBQW9CLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BHLE9BQU8sRUFHTCw2QkFBNkIsRUFDN0IsZ0JBQWdCLEdBQ2pCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQW1DekMscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQ3BDLEtBQThCLEVBQzlCLE9BQWlDO0lBRWpDLE1BQU0sT0FBTyxHQUFHLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzRCxNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsZUFBZSxJQUFJLHFCQUFxQixFQUFFLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzFFLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQ3hDO1FBQ0UsSUFBSSxFQUFFLHVCQUF1QjtRQUM3QixNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxJQUFJLE9BQU8sRUFBRTtRQUN0QixHQUFHLEVBQUUsS0FBSztLQUNY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QyxDQUFDO2FBQ3ZELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQzthQUM5QyxPQUFPLEVBQUU7YUFDVCxRQUFRLEVBQUU7S0FDZCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuaWUgc3BhY2UgbWV0YWRhdGEgaGVscGVycy5cbiAqXG4gKiBGZXRjaGVzIGEgR2VuaWUgc3BhY2UncyBkZWZpbml0aW9uIChpbmNsdWRpbmcgdGhlIG9wdC1pbiBgc2VyaWFsaXplZF9zcGFjZWBcbiAqIGJsb2IpIGFuZCBleHRyYWN0cyB0aGUgY3VyYXRlZCBzdGFydGVyIHF1ZXN0aW9ucyBhbiBhdXRob3IgY29uZmlndXJlZCBvbiB0aGVcbiAqIHNwYWNlLiBUaGUgdHlwZWQgU0RLIGBjbGllbnQuZ2VuaWUuZ2V0U3BhY2VgIG9ubHkgcmV0dXJucyB0aGVcbiAqIGRpcmVjdG9yeS1saXN0aW5nIHN1cmZhY2UgKGB0aXRsZWAgLyBgZGVzY3JpcHRpb25gIC8gYHdhcmVob3VzZV9pZGApOyB0aGVcbiAqIHNhbXBsZSBxdWVzdGlvbnMgbGl2ZSBpbnNpZGUgYHNlcmlhbGl6ZWRfc3BhY2VgLCB3aGljaCB0aGUgUkVTVCBBUEkgcmV0dXJuc1xuICogb25seSB3aGVuIGBpbmNsdWRlX3NlcmlhbGl6ZWRfc3BhY2U9dHJ1ZWAuIFdlIGhpdCB0aGF0IGVuZHBvaW50IHRocm91Z2ggdGhlXG4gKiB3b3Jrc3BhY2UgY2xpZW50J3MgcmF3IGBhcGlDbGllbnRgIHNpbmNlIHRoZSB0eXBlZCByZXF1ZXN0IHNoYXBlIGhhcyBubyBmbGFnXG4gKiBmb3IgaXQuXG4gKlxuICogVGhlIHNlcmlhbGl6ZWQgYmxvYiBpcyBhbHNvIG1vcmUgcHJpdmlsZWdlZCB0aGFuIHRoZSBsaXN0aW5nIHN1cmZhY2U6IHRoZVxuICogd29ya3NwYWNlIEFQSSByZXF1aXJlcyBgQ2FuIEVkaXRgIG9uIHRoZSBzcGFjZSB0byByZXR1cm4gaXQsIHdoaWxlIGBDYW4gUnVuYFxuICogaXMgZW5vdWdoIGZvciB0aXRsZSAvIGRlc2NyaXB0aW9uLiBBIGNhbGxlciB0aGF0IG9ubHkgaG9sZHMgYENhbiBSdW5gIC0gYW5cbiAqIGFwcCBzZXJ2aWNlIHByaW5jaXBhbCBncmFudGVkIGp1c3QgZW5vdWdoIHRvIGFzayBxdWVzdGlvbnMgaXMgdGhlIGNvbW1vbiBjYXNlXG4gKiAtIHdvdWxkIG90aGVyd2lzZSBsb3NlIHRoZSB3aG9sZSBzcGFjZSBsb29rdXAgdG8gYSBgUEVSTUlTU0lPTl9ERU5JRURgIGl0XG4gKiBjYW5ub3QgYWN0IG9uLCBzbyB0aGUgZmV0Y2ggZGVncmFkZXMgdG8gdGhlIHVuc2VyaWFsaXplZCByZXF1ZXN0IGluc3RlYWQgb2ZcbiAqIGZhaWxpbmcgKHNlZSB7QGxpbmsgZ2V0R2VuaWVTcGFjZX0pLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVXb3Jrc3BhY2VDbGllbnQsIHR5cGUgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgdHlwZSBDb250ZXh0TGlrZSwgdG9Db250ZXh0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2csIHRvRXJyb3IsIGVycm9yQ29udGV4dCwgcGFyc2UsIHNlcXVlbmNlLCBmaXJzdE5vbkVtcHR5IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgQ3JlYXRlR2VuaWVTcGFjZVJlcXVlc3QsXG4gIHR5cGUgR2VuaWVTcGFjZSxcbiAgQ3JlYXRlR2VuaWVTcGFjZVJlcXVlc3RTY2hlbWEsXG4gIEdlbmllU3BhY2VTY2hlbWEsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiZ2VuaWUvc3BhY2VcIik7XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgZ2V0R2VuaWVTcGFjZX0uICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEdlbmllU3BhY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIEV4cGxpY2l0IGBXb3Jrc3BhY2VDbGllbnRgLiBEZWZhdWx0cyB0byBgY3JlYXRlV29ya3NwYWNlQ2xpZW50KClgXG4gICAqIChlbnYtdmFyIGF1dGgpLiBTZXJ2ZXIgY2FsbGVycyBzaG91bGQgcGFzcyB0aGVpciBPQk8tc2NvcGVkIGNsaWVudCBzbyB0aGVcbiAgICogbG9va3VwIHJ1bnMgYXMgdGhlIHVzZXIuXG4gICAqL1xuICB3b3Jrc3BhY2VDbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQ7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSBgc2VyaWFsaXplZF9zcGFjZWAgYmxvYiAoY2F0YWxvZ3MsIHRhYmxlcywgc2FtcGxlIHF1ZXN0aW9ucyxcbiAgICogcHJvbXB0cykuIERlZmF1bHRzIHRvIGB0cnVlYCAtIHRoZSBvbmx5IHJlYXNvbiB0byBza2lwIGl0IGlzIHdoZW4gdGhlXG4gICAqIGNhbGxlciBqdXN0IG5lZWRzIHRpdGxlIC8gZGVzY3JpcHRpb24gYW5kIHdhbnRzIHRoZSBzbWFsbGVyIHBheWxvYWQuXG4gICAqXG4gICAqIFJlcXVlc3RpbmcgaXQgaXMgYmVzdC1lZmZvcnQ6IHRoZSBibG9iIG5lZWRzIGBDYW4gRWRpdGAgb24gdGhlIHNwYWNlLCBzbyBhXG4gICAqIGNhbGxlciB3aXRob3V0IGl0IGdldHMgdGhlIHVuc2VyaWFsaXplZCBzcGFjZSBiYWNrIHJhdGhlciB0aGFuIGFuIGVycm9yLFxuICAgKiBhbmQge0BsaW5rIGdlbmllU2FtcGxlUXVlc3Rpb25zfSB0aGVuIHJlcG9ydHMgbm8gc3VnZ2VzdGlvbnMuXG4gICAqL1xuICBzZXJpYWxpemVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEV4dGVybmFsIGNhbmNlbGxhdGlvbi4gQWNjZXB0cyBhIFdIQVRXRyBgQWJvcnRTaWduYWxgIG9yIGEgZnVsbHktYnVpbHQgU0RLXG4gICAqIGBDb250ZXh0YCAoc2VlIGBkYXRhYnJpY2tzLkNvbnRleHRMaWtlYCkuXG4gICAqL1xuICBjb250ZXh0PzogQ29udGV4dExpa2U7XG59XG5cbi8qKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIEdlbmllIHNwYWNlIHdpdGggZXhwbGljaXQgd29ya3NwYWNlIGlkZW50aXR5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVHZW5pZVNwYWNlT3B0aW9ucyB7XG4gIC8qKiBXb3Jrc3BhY2UgY2xpZW50IHdob3NlIGlkZW50aXR5IG93bnMgdGhlIG5ldyBzcGFjZS4gKi9cbiAgd29ya3NwYWNlQ2xpZW50PzogV29ya3NwYWNlQ2xpZW50O1xuICAvKiogRXh0ZXJuYWwgY2FuY2VsbGF0aW9uLiAqL1xuICBjb250ZXh0PzogQ29udGV4dExpa2U7XG59XG5cbi8qKiBDcmVhdGUgYSBHZW5pZSBzcGFjZSBmcm9tIG9uZSB2YWxpZGF0ZWQgc2VyaWFsaXplZCBkZWZpbml0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUdlbmllU3BhY2UoXG4gIGlucHV0OiBDcmVhdGVHZW5pZVNwYWNlUmVxdWVzdCxcbiAgb3B0aW9ucz86IENyZWF0ZUdlbmllU3BhY2VPcHRpb25zLFxuKTogUHJvbWlzZTxHZW5pZVNwYWNlPiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBDcmVhdGVHZW5pZVNwYWNlUmVxdWVzdFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gIGNvbnN0IGNsaWVudCA9IG9wdGlvbnM/LndvcmtzcGFjZUNsaWVudCA/PyBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoKTtcbiAgY29uc3QgY29udGV4dCA9IG9wdGlvbnM/LmNvbnRleHQgPyB0b0NvbnRleHQob3B0aW9ucy5jb250ZXh0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcmF3ID0gYXdhaXQgY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgIHtcbiAgICAgIHBhdGg6IFwiL2FwaS8yLjAvZ2VuaWUvc3BhY2VzXCIsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgcGF5bG9hZDogcmVxdWVzdCxcbiAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKCksXG4gICAgICByYXc6IGZhbHNlLFxuICAgIH0sXG4gICAgY29udGV4dCxcbiAgKTtcbiAgcmV0dXJuIEdlbmllU3BhY2VTY2hlbWEucGFyc2UocmF3KTtcbn1cblxuLyoqXG4gKiBGZXRjaCBhIEdlbmllIHNwYWNlIGJ5IGlkLCBvcHRpb25hbGx5IGluY2x1ZGluZyBpdHMgc2VyaWFsaXplZCBkZWZpbml0aW9uLlxuICogSGl0cyBgR0VUIC9hcGkvMi4wL2dlbmllL3NwYWNlcy88aWQ+YCB3aXRoIGBpbmNsdWRlX3NlcmlhbGl6ZWRfc3BhY2U9dHJ1ZWBcbiAqIHRocm91Z2ggdGhlIHJhdyBgYXBpQ2xpZW50YCwgdGhlbiB2YWxpZGF0ZXMgdGhlIHJlc3BvbnNlIGFnYWluc3RcbiAqIHtAbGluayBHZW5pZVNwYWNlU2NoZW1hfSAodW5rbm93biBmaWVsZHMgbGlrZSBgZXRhZ2AgL1xuICogYHBhcmVudF9wYXRoYCBhcmUgc3RyaXBwZWQpLlxuICpcbiAqIFdoZW4gdGhlIHNlcmlhbGl6ZWQgcmVxdWVzdCBpcyByZWplY3RlZCBmb3IgbGFjayBvZiBwZXJtaXNzaW9uIChgNDAzYCwgb3IgYVxuICogYFBFUk1JU1NJT05fREVOSUVEYCAvIGBDYW4gRWRpdGAgbWVzc2FnZSAtIHRoZSB3b3Jrc3BhY2UgQVBJIGdhdGVzIHRoZSBibG9iXG4gKiBiZWhpbmQgYENhbiBFZGl0YCksIGl0IHJldHJpZXMgb25jZSB3aXRob3V0IHRoZSBmbGFnIHNvIHRoZSBjYWxsZXIgc3RpbGwgZ2V0c1xuICogdGhlIHNwYWNlLiBBbnkgb3RoZXIgZmFpbHVyZSwgYW5kIGEgcmV0cnkgdGhhdCBmYWlscyB0b28sIGlzIHJldGhyb3duOiBhXG4gKiBjYW5jZWxsZWQgcmVxdWVzdCBvciBhIG1pc3Npbmcgc3BhY2UgbXVzdCBub3QgbG9vayBsaWtlIGFuIHVuc2VyaWFsaXplZFxuICogc3BhY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRHZW5pZVNwYWNlKFxuICBzcGFjZUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBHZXRHZW5pZVNwYWNlT3B0aW9ucyxcbik6IFByb21pc2U8R2VuaWVTcGFjZT4ge1xuICBjb25zdCBjbGllbnQgPSBvcHRpb25zPy53b3Jrc3BhY2VDbGllbnQgPz8gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCk7XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBvcHRpb25zPy5zZXJpYWxpemVkICE9PSBmYWxzZTtcbiAgY29uc3QgY3R4ID0gb3B0aW9ucz8uY29udGV4dCA/IHRvQ29udGV4dChvcHRpb25zLmNvbnRleHQpIDogdW5kZWZpbmVkO1xuICBjb25zdCByZXF1ZXN0ID0gKGluY2x1ZGVTZXJpYWxpemVkOiBib29sZWFuKTogUHJvbWlzZTx1bmtub3duPiA9PlxuICAgIGNsaWVudC5hcGlDbGllbnQucmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgcGF0aDogYC9hcGkvMi4wL2dlbmllL3NwYWNlcy8ke2VuY29kZVVSSUNvbXBvbmVudChzcGFjZUlkKX1gLFxuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIHF1ZXJ5OiBpbmNsdWRlU2VyaWFsaXplZCA/IHsgaW5jbHVkZV9zZXJpYWxpemVkX3NwYWNlOiB0cnVlIH0gOiB7fSxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoKSxcbiAgICAgICAgcmF3OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBjdHgsXG4gICAgKTtcblxuICBsZXQgcmF3OiB1bmtub3duO1xuICB0cnkge1xuICAgIHJhdyA9IGF3YWl0IHJlcXVlc3Qoc2VyaWFsaXplZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghc2VyaWFsaXplZCB8fCAhaXNTZXJpYWxpemVkU3BhY2VGb3JiaWRkZW4oZXJyKSkgdGhyb3cgZXJyO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInNlcmlhbGl6ZWQtc3BhY2U6Zm9yYmlkZGVuXCIsIHtcbiAgICAgIHNwYWNlSWQsXG4gICAgICBlcnJvcjogdG9FcnJvcihlcnIpLFxuICAgIH0pO1xuICAgIHJhdyA9IGF3YWl0IHJlcXVlc3QoZmFsc2UpO1xuICB9XG4gIHJldHVybiBHZW5pZVNwYWNlU2NoZW1hLnBhcnNlKHJhdyk7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGEgZmFpbGVkIHNwYWNlIHJlcXVlc3Qgd2FzIHJlamVjdGVkIGZvciBsYWNrIG9mIHBlcm1pc3Npb24sIHRoZSBvbmVcbiAqIGZhaWx1cmUgdGhlIHVuc2VyaWFsaXplZCByZXRyeSBjYW4gcmVjb3ZlciBmcm9tLiBNYXRjaGVzIG9uIGA0MDNgIGFuZCBvbiB0aGVcbiAqIGBQRVJNSVNTSU9OX0RFTklFRGAgLyBgQ2FuIEVkaXRgIHdvcmRpbmcgdGhlIHdvcmtzcGFjZSBBUEkgcmV0dXJucywgc2luY2UgdGhlXG4gKiBTREsgc3VyZmFjZXMgdGhlIGVycm9yIGNvZGUgd2l0aG91dCBhbHdheXMgY2FycnlpbmcgYSBzdGF0dXMuXG4gKi9cbmZ1bmN0aW9uIGlzU2VyaWFsaXplZFNwYWNlRm9yYmlkZGVuKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBjb250ZXh0ID0gZXJyb3JDb250ZXh0KGVycik7XG4gIHJldHVybiAoXG4gICAgY29udGV4dC5oYXNTdGF0dXNDb2RlKDQwMykgfHxcbiAgICBjb250ZXh0Lmhhc01lc3NhZ2UoXCJwZXJtaXNzaW9uIGRlbmllZFwiKSB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcImNhbiBlZGl0XCIpXG4gICk7XG59XG5cbi8qKlxuICogT25lIGVudHJ5IGluIGEgc2VyaWFsaXplZCBzcGFjZSdzIGBjb25maWcuc2FtcGxlX3F1ZXN0aW9uc2AuIFRoZVxuICogYXV0aG9yLWZhY2luZyBmaWVsZCBpcyBgcXVlc3Rpb25gLCB3aGljaCB0aGUgd2lyZSBmb3JtYXQgbW9kZWxzIGFzIGEgc3RyaW5nXG4gKiBhcnJheSAoYSBzaW5nbGUgbXVsdGktbGluZSBxdWVzdGlvbiBpcyBzcGxpdCBhY3Jvc3MgZW50cmllcyk7IHdlIHRyZWF0IHRoZVxuICogZmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSBkaXNwbGF5YWJsZSBxdWVzdGlvbiB0ZXh0LlxuICovXG5pbnRlcmZhY2UgU2VyaWFsaXplZFNhbXBsZVF1ZXN0aW9uIHtcbiAgcXVlc3Rpb24/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIGN1cmF0ZWQgc3RhcnRlciBxdWVzdGlvbnMgYW4gYXV0aG9yIGNvbmZpZ3VyZWQgb24gYSBHZW5pZSBzcGFjZS5cbiAqIFJlYWRzIGBzZXJpYWxpemVkX3NwYWNlIC0+IGNvbmZpZy5zYW1wbGVfcXVlc3Rpb25zWypdLnF1ZXN0aW9uYC4gUmV0dXJucyBgW11gXG4gKiB3aGVuIHRoZSBzcGFjZSBjYXJyaWVzIG5vIHNlcmlhbGl6ZWQgYmxvYiwgdGhlIGJsb2IgaXMgdW5wYXJzZWFibGUsIG9yIG5vXG4gKiBzYW1wbGUgcXVlc3Rpb25zIGFyZSBjb25maWd1cmVkIC0gc28gYSBtaXNzaW5nIG9yIG1pc2NvbmZpZ3VyZWQgc3BhY2VcbiAqIGRlZ3JhZGVzIHRvIFwibm8gc3VnZ2VzdGlvbnNcIiByYXRoZXIgdGhhbiB0aHJvd2luZy4gT3JkZXIgaXMgcHJlc2VydmVkICh0aGVcbiAqIGF1dGhvcidzIG9yZGVyaW5nKSBhbmQgZHVwbGljYXRlcyBhcmUgZHJvcHBlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmllU2FtcGxlUXVlc3Rpb25zKHNwYWNlOiBHZW5pZVNwYWNlKTogc3RyaW5nW10ge1xuICBjb25zdCBzZXJpYWxpemVkID0gc3BhY2Uuc2VyaWFsaXplZF9zcGFjZTtcbiAgaWYgKCFzZXJpYWxpemVkKSByZXR1cm4gW107XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlKHNlcmlhbGl6ZWQpO1xuICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICBsb2dnZXIud2FybihcInNlcmlhbGl6ZWQtc3BhY2U6cGFyc2UtZXJyb3JcIiwgeyBzcGFjZUlkOiBzcGFjZS5zcGFjZV9pZCB9KTtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3Qgc2FtcGxlUXVlc3Rpb25zID0gKHBhcnNlZCBhcyB7IGNvbmZpZz86IHsgc2FtcGxlX3F1ZXN0aW9ucz86IHVua25vd24gfSB9IHwgbnVsbCk/LmNvbmZpZ1xuICAgID8uc2FtcGxlX3F1ZXN0aW9ucztcbiAgaWYgKCFBcnJheS5pc0FycmF5KHNhbXBsZVF1ZXN0aW9ucykpIHJldHVybiBbXTtcblxuICByZXR1cm4gW1xuICAgIC4uLnNlcXVlbmNlKHNhbXBsZVF1ZXN0aW9ucyBhcyBTZXJpYWxpemVkU2FtcGxlUXVlc3Rpb25bXSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBmaXJzdE5vbkVtcHR5KGVudHJ5Py5xdWVzdGlvbikpXG4gICAgICAubm9uTnVsbCgpXG4gICAgICAuZGlzdGluY3QoKSxcbiAgXTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@databricks/appkit": "0.81.0",
|
|
27
|
-
"@dbx-tools/appkit": "^0.9.
|
|
28
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
29
|
-
"@dbx-tools/shared-genie": "^0.9.
|
|
27
|
+
"@dbx-tools/appkit": "^0.9.158",
|
|
28
|
+
"@dbx-tools/shared-core": "^0.9.158",
|
|
29
|
+
"@dbx-tools/shared-genie": "^0.9.158"
|
|
30
30
|
},
|
|
31
31
|
"main": "./lib/index.js",
|
|
32
32
|
"license": "Apache-2.0",
|
|
@@ -39,30 +39,10 @@
|
|
|
39
39
|
"types": "./lib/index.d.ts",
|
|
40
40
|
"default": "./lib/index.js"
|
|
41
41
|
},
|
|
42
|
-
"./agent-mode": {
|
|
43
|
-
"types": "./lib/src/agent-mode.d.ts",
|
|
44
|
-
"default": "./lib/src/agent-mode.js"
|
|
45
|
-
},
|
|
46
|
-
"./chat": {
|
|
47
|
-
"types": "./lib/src/chat.d.ts",
|
|
48
|
-
"default": "./lib/src/chat.js"
|
|
49
|
-
},
|
|
50
|
-
"./feedback": {
|
|
51
|
-
"types": "./lib/src/feedback.d.ts",
|
|
52
|
-
"default": "./lib/src/feedback.js"
|
|
53
|
-
},
|
|
54
|
-
"./space": {
|
|
55
|
-
"types": "./lib/src/space.d.ts",
|
|
56
|
-
"default": "./lib/src/space.js"
|
|
57
|
-
},
|
|
58
|
-
"./*": {
|
|
59
|
-
"types": "./lib/src/*/index.d.ts",
|
|
60
|
-
"default": "./lib/src/*/index.js"
|
|
61
|
-
},
|
|
62
42
|
"./package.json": "./package.json"
|
|
63
43
|
}
|
|
64
44
|
},
|
|
65
|
-
"version": "0.9.
|
|
45
|
+
"version": "0.9.158",
|
|
66
46
|
"types": "./lib/index.d.ts",
|
|
67
47
|
"dbxToolsConfig": {
|
|
68
48
|
"tags": [
|
|
@@ -75,30 +55,10 @@
|
|
|
75
55
|
"types": "./lib/index.d.ts",
|
|
76
56
|
"default": "./lib/index.js"
|
|
77
57
|
},
|
|
78
|
-
"./agent-mode": {
|
|
79
|
-
"types": "./lib/src/agent-mode.d.ts",
|
|
80
|
-
"default": "./lib/src/agent-mode.js"
|
|
81
|
-
},
|
|
82
|
-
"./chat": {
|
|
83
|
-
"types": "./lib/src/chat.d.ts",
|
|
84
|
-
"default": "./lib/src/chat.js"
|
|
85
|
-
},
|
|
86
|
-
"./feedback": {
|
|
87
|
-
"types": "./lib/src/feedback.d.ts",
|
|
88
|
-
"default": "./lib/src/feedback.js"
|
|
89
|
-
},
|
|
90
|
-
"./space": {
|
|
91
|
-
"types": "./lib/src/space.d.ts",
|
|
92
|
-
"default": "./lib/src/space.js"
|
|
93
|
-
},
|
|
94
|
-
"./*": {
|
|
95
|
-
"types": "./lib/src/*/index.d.ts",
|
|
96
|
-
"default": "./lib/src/*/index.js"
|
|
97
|
-
},
|
|
98
58
|
"./package.json": "./package.json"
|
|
99
59
|
},
|
|
100
60
|
"files": [
|
|
101
|
-
"index
|
|
61
|
+
"index*.ts",
|
|
102
62
|
"src",
|
|
103
63
|
"lib"
|
|
104
64
|
],
|
package/src/agent-mode.ts
CHANGED
|
@@ -10,12 +10,16 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import type { WorkspaceClient } from "@databricks/appkit";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
13
|
+
import { type ContextLike, toContext } from "@dbx-tools/appkit";
|
|
14
|
+
import { log, errorContext, toError, parse, isRecord, deepEqual } from "@dbx-tools/shared-core";
|
|
15
15
|
import {
|
|
16
|
-
agentMode as agentModeWire,
|
|
17
16
|
type GenieAgentModeEvent,
|
|
18
17
|
type GenieMessage,
|
|
18
|
+
GenieAgentModeProjection,
|
|
19
|
+
type GenieAgentOutputItem,
|
|
20
|
+
GenieAgentConversationItemsSchema,
|
|
21
|
+
projectAgentModeConversation,
|
|
22
|
+
GenieAgentModeEventSchema,
|
|
19
23
|
} from "@dbx-tools/shared-genie";
|
|
20
24
|
|
|
21
25
|
const logger = log.logger("genie/agent-mode");
|
|
@@ -28,7 +32,7 @@ export interface GenieAgentModeOptions {
|
|
|
28
32
|
enableVisualization?: boolean;
|
|
29
33
|
/** Original user text projected into client-visible snapshots when input is augmented. */
|
|
30
34
|
displayContent?: string;
|
|
31
|
-
context?:
|
|
35
|
+
context?: ContextLike;
|
|
32
36
|
}
|
|
33
37
|
|
|
34
38
|
/** Stream one Agent Mode response as `GenieMessage` snapshots. */
|
|
@@ -39,14 +43,9 @@ export async function* genieAgentModeChat(
|
|
|
39
43
|
options: GenieAgentModeOptions = {},
|
|
40
44
|
): AsyncGenerator<GenieMessage, void, void> {
|
|
41
45
|
const ownedController = options.context ? undefined : new AbortController();
|
|
42
|
-
const projection = new
|
|
43
|
-
agentId,
|
|
44
|
-
options.displayContent ?? content,
|
|
45
|
-
);
|
|
46
|
+
const projection = new GenieAgentModeProjection(agentId, options.displayContent ?? content);
|
|
46
47
|
try {
|
|
47
|
-
const context = options.context
|
|
48
|
-
? databricks.toContext(options.context)
|
|
49
|
-
: databricks.toContext(ownedController!);
|
|
48
|
+
const context = options.context ? toContext(options.context) : toContext(ownedController!);
|
|
50
49
|
const response = await client.apiClient.request(
|
|
51
50
|
{
|
|
52
51
|
path: `/api/2.0/genie/agents/${encodeURIComponent(agentId)}/responses`,
|
|
@@ -70,7 +69,7 @@ export async function* genieAgentModeChat(
|
|
|
70
69
|
},
|
|
71
70
|
context,
|
|
72
71
|
);
|
|
73
|
-
const stream =
|
|
72
|
+
const stream = isRecord(response) ? response.contents : undefined;
|
|
74
73
|
if (!isReadableStream(stream)) {
|
|
75
74
|
throw new TypeError("Genie Agent Mode did not return an SSE stream");
|
|
76
75
|
}
|
|
@@ -79,7 +78,7 @@ export async function* genieAgentModeChat(
|
|
|
79
78
|
for await (const event of parseSse(stream)) {
|
|
80
79
|
const message = projection.apply(event);
|
|
81
80
|
if (!message) continue;
|
|
82
|
-
if (!
|
|
81
|
+
if (!deepEqual(message, previous)) {
|
|
83
82
|
yield message;
|
|
84
83
|
previous = message;
|
|
85
84
|
}
|
|
@@ -103,14 +102,14 @@ export async function listAgentModeConversation(
|
|
|
103
102
|
client: WorkspaceClient,
|
|
104
103
|
agentId: string,
|
|
105
104
|
conversationId: string,
|
|
106
|
-
options: { context?:
|
|
105
|
+
options: { context?: ContextLike } = {},
|
|
107
106
|
): Promise<GenieMessage[]> {
|
|
108
|
-
const context = options.context ?
|
|
109
|
-
const items:
|
|
107
|
+
const context = options.context ? toContext(options.context) : undefined;
|
|
108
|
+
const items: GenieAgentOutputItem[] = [];
|
|
110
109
|
let after: string | undefined;
|
|
111
110
|
let status = "completed";
|
|
112
111
|
do {
|
|
113
|
-
const page =
|
|
112
|
+
const page = GenieAgentConversationItemsSchema.parse(
|
|
114
113
|
await client.apiClient.request(
|
|
115
114
|
{
|
|
116
115
|
path: `/api/2.0/genie/agents/${encodeURIComponent(agentId)}/conversations/${encodeURIComponent(conversationId)}/items`,
|
|
@@ -126,17 +125,17 @@ export async function listAgentModeConversation(
|
|
|
126
125
|
status = page.status ?? status;
|
|
127
126
|
after = page.has_more ? page.last_id : undefined;
|
|
128
127
|
} while (after);
|
|
129
|
-
return
|
|
128
|
+
return projectAgentModeConversation(agentId, conversationId, items, status);
|
|
130
129
|
}
|
|
131
130
|
|
|
132
131
|
/** Return whether Agent Mode is disabled or its preview toggle is unavailable. */
|
|
133
132
|
export function isAgentModeUnavailable(value: unknown): boolean {
|
|
134
|
-
const context =
|
|
133
|
+
const context = errorContext(value);
|
|
135
134
|
return context.hasMessage("feature", "disabled") || context.hasMessage("preview", "toggle");
|
|
136
135
|
}
|
|
137
136
|
|
|
138
137
|
function isReadableStream(value: unknown): value is ReadableStream<Uint8Array> {
|
|
139
|
-
return
|
|
138
|
+
return isRecord(value) && typeof value.getReader === "function";
|
|
140
139
|
}
|
|
141
140
|
|
|
142
141
|
async function cancelResponse(
|
|
@@ -158,14 +157,14 @@ async function cancelResponse(
|
|
|
158
157
|
}),
|
|
159
158
|
raw: false,
|
|
160
159
|
},
|
|
161
|
-
|
|
160
|
+
toContext(controller),
|
|
162
161
|
);
|
|
163
162
|
} catch (err) {
|
|
164
163
|
logger.debug("response:cancel-failed", {
|
|
165
164
|
agentId,
|
|
166
165
|
conversationId,
|
|
167
166
|
responseId,
|
|
168
|
-
error:
|
|
167
|
+
error: toError(err),
|
|
169
168
|
});
|
|
170
169
|
} finally {
|
|
171
170
|
clearTimeout(timeout);
|
|
@@ -207,5 +206,5 @@ function parseSseFrame(frame: string): GenieAgentModeEvent | undefined {
|
|
|
207
206
|
.map((line) => line.slice(5).trimStart())
|
|
208
207
|
.join("\n");
|
|
209
208
|
if (!data || data === "[DONE]") return undefined;
|
|
210
|
-
return
|
|
209
|
+
return GenieAgentModeEventSchema.parse(parse(data));
|
|
211
210
|
}
|
package/src/chat.ts
CHANGED
|
@@ -30,9 +30,15 @@ import {
|
|
|
30
30
|
getExecutionContext,
|
|
31
31
|
type WorkspaceClient,
|
|
32
32
|
} from "@databricks/appkit";
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
33
|
+
import { type ContextLike, toContext } from "@dbx-tools/appkit";
|
|
34
|
+
import { log, type PollContext, poll, toError } from "@dbx-tools/shared-core";
|
|
35
|
+
import {
|
|
36
|
+
type GenieChatEvent,
|
|
37
|
+
type GenieMessage,
|
|
38
|
+
eventsFromMessage,
|
|
39
|
+
GenieMessageSchema,
|
|
40
|
+
isTerminalStatus,
|
|
41
|
+
} from "@dbx-tools/shared-genie";
|
|
36
42
|
|
|
37
43
|
import { genieAgentModeChat, isAgentModeUnavailable } from "./agent-mode.ts";
|
|
38
44
|
|
|
@@ -47,7 +53,7 @@ const logger = log.logger("genie/chat");
|
|
|
47
53
|
* whole turn.
|
|
48
54
|
*/
|
|
49
55
|
function validateMessage(raw: GenieMessage): GenieMessage {
|
|
50
|
-
const result =
|
|
56
|
+
const result = GenieMessageSchema.safeParse(raw);
|
|
51
57
|
if (result.success) return result.data;
|
|
52
58
|
logger.debug("wire-message:schema-miss", {
|
|
53
59
|
message_id: raw.message_id ?? raw.id,
|
|
@@ -94,7 +100,7 @@ export interface GenieChatOptions {
|
|
|
94
100
|
* `Context` (see `databricks.ContextLike`). Aborting it cancels every in-flight
|
|
95
101
|
* Agent Mode stream, SDK call, and the next inter-poll sleep.
|
|
96
102
|
*/
|
|
97
|
-
context?:
|
|
103
|
+
context?: ContextLike;
|
|
98
104
|
}
|
|
99
105
|
|
|
100
106
|
/* ----------------------- low-level: genieChat ----------------------- */
|
|
@@ -147,7 +153,7 @@ export async function* genieChat(
|
|
|
147
153
|
// re-attach an abort listener to `options.context` on every poll iteration
|
|
148
154
|
// (via `databricks.toContext` -> `async.tieAbortSignal`), eventually tripping
|
|
149
155
|
// Node's `MaxListenersExceededWarning`.
|
|
150
|
-
const ctx =
|
|
156
|
+
const ctx = toContext(controller, options?.context);
|
|
151
157
|
if (options?.agentMode !== false) {
|
|
152
158
|
let yielded = false;
|
|
153
159
|
try {
|
|
@@ -167,7 +173,7 @@ export async function* genieChat(
|
|
|
167
173
|
}
|
|
168
174
|
logger.warn("agent-mode:unavailable, falling back to polling", {
|
|
169
175
|
space_id,
|
|
170
|
-
error:
|
|
176
|
+
error: toError(err),
|
|
171
177
|
});
|
|
172
178
|
}
|
|
173
179
|
}
|
|
@@ -212,7 +218,7 @@ export async function* genieChat(
|
|
|
212
218
|
);
|
|
213
219
|
};
|
|
214
220
|
|
|
215
|
-
yield*
|
|
221
|
+
yield* poll(
|
|
216
222
|
async (pollCtx: PollContext<GenieMessage>) => validateMessage(await pollProducer(pollCtx)),
|
|
217
223
|
{
|
|
218
224
|
intervalMs: options?.pollIntervalMs ?? 500,
|
|
@@ -223,7 +229,7 @@ export async function* genieChat(
|
|
|
223
229
|
// Stop after the terminal message is yielded. `poll` checks the
|
|
224
230
|
// predicate AFTER yielding, so the terminal message still reaches the
|
|
225
231
|
// consumer.
|
|
226
|
-
predicate: (m) => !
|
|
232
|
+
predicate: (m) => !isTerminalStatus(m.status),
|
|
227
233
|
// Wake the inter-poll sleep on abort so a `for await` break (or
|
|
228
234
|
// external abort) tears down promptly instead of waiting out the
|
|
229
235
|
// interval.
|
|
@@ -317,9 +323,9 @@ export async function* genieEventChat(
|
|
|
317
323
|
};
|
|
318
324
|
questionEmitted = true;
|
|
319
325
|
}
|
|
320
|
-
yield*
|
|
326
|
+
yield* eventsFromMessage(message, previous, message.space_id);
|
|
321
327
|
const status = message.status;
|
|
322
|
-
if (
|
|
328
|
+
if (isTerminalStatus(status)) {
|
|
323
329
|
yield {
|
|
324
330
|
type: "result",
|
|
325
331
|
space_id: message.space_id,
|
package/src/feedback.ts
CHANGED
|
@@ -5,15 +5,18 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { createWorkspaceClient, type WorkspaceClient } from "@databricks/appkit";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import { type ContextLike, toContext } from "@dbx-tools/appkit";
|
|
9
|
+
import {
|
|
10
|
+
type GenieMessageFeedbackRequest,
|
|
11
|
+
GenieMessageFeedbackRequestSchema,
|
|
12
|
+
} from "@dbx-tools/shared-genie";
|
|
10
13
|
|
|
11
14
|
/** Options for one identity-scoped Genie feedback write. */
|
|
12
15
|
export interface SendGenieMessageFeedbackOptions {
|
|
13
16
|
/** Workspace client whose identity submits the feedback. */
|
|
14
17
|
workspaceClient?: WorkspaceClient;
|
|
15
18
|
/** External cancellation. */
|
|
16
|
-
context?:
|
|
19
|
+
context?: ContextLike;
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
/** Send rating and optional comment directly to one Genie message. */
|
|
@@ -21,9 +24,9 @@ export async function sendGenieMessageFeedback(
|
|
|
21
24
|
input: GenieMessageFeedbackRequest,
|
|
22
25
|
options?: SendGenieMessageFeedbackOptions,
|
|
23
26
|
): Promise<void> {
|
|
24
|
-
const request =
|
|
27
|
+
const request = GenieMessageFeedbackRequestSchema.parse(input);
|
|
25
28
|
const client = options?.workspaceClient ?? createWorkspaceClient();
|
|
26
|
-
const context = options?.context ?
|
|
29
|
+
const context = options?.context ? toContext(options.context) : undefined;
|
|
27
30
|
await client.apiClient.request(
|
|
28
31
|
{
|
|
29
32
|
path: `/api/2.0/genie/spaces/${encodeURIComponent(request.space_id)}/conversations/${encodeURIComponent(request.conversation_id)}/messages/${encodeURIComponent(request.message_id)}/feedback`,
|
package/src/space.ts
CHANGED
|
@@ -22,9 +22,14 @@
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import { createWorkspaceClient, type WorkspaceClient } from "@databricks/appkit";
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
25
|
+
import { type ContextLike, toContext } from "@dbx-tools/appkit";
|
|
26
|
+
import { log, toError, errorContext, parse, sequence, firstNonEmpty } from "@dbx-tools/shared-core";
|
|
27
|
+
import {
|
|
28
|
+
type CreateGenieSpaceRequest,
|
|
29
|
+
type GenieSpace,
|
|
30
|
+
CreateGenieSpaceRequestSchema,
|
|
31
|
+
GenieSpaceSchema,
|
|
32
|
+
} from "@dbx-tools/shared-genie";
|
|
28
33
|
|
|
29
34
|
const logger = log.logger("genie/space");
|
|
30
35
|
|
|
@@ -50,7 +55,7 @@ export interface GetGenieSpaceOptions {
|
|
|
50
55
|
* External cancellation. Accepts a WHATWG `AbortSignal` or a fully-built SDK
|
|
51
56
|
* `Context` (see `databricks.ContextLike`).
|
|
52
57
|
*/
|
|
53
|
-
context?:
|
|
58
|
+
context?: ContextLike;
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
/** Options for creating a Genie space with explicit workspace identity. */
|
|
@@ -58,7 +63,7 @@ export interface CreateGenieSpaceOptions {
|
|
|
58
63
|
/** Workspace client whose identity owns the new space. */
|
|
59
64
|
workspaceClient?: WorkspaceClient;
|
|
60
65
|
/** External cancellation. */
|
|
61
|
-
context?:
|
|
66
|
+
context?: ContextLike;
|
|
62
67
|
}
|
|
63
68
|
|
|
64
69
|
/** Create a Genie space from one validated serialized definition. */
|
|
@@ -66,9 +71,9 @@ export async function createGenieSpace(
|
|
|
66
71
|
input: CreateGenieSpaceRequest,
|
|
67
72
|
options?: CreateGenieSpaceOptions,
|
|
68
73
|
): Promise<GenieSpace> {
|
|
69
|
-
const request =
|
|
74
|
+
const request = CreateGenieSpaceRequestSchema.parse(input);
|
|
70
75
|
const client = options?.workspaceClient ?? createWorkspaceClient();
|
|
71
|
-
const context = options?.context ?
|
|
76
|
+
const context = options?.context ? toContext(options.context) : undefined;
|
|
72
77
|
const raw = await client.apiClient.request(
|
|
73
78
|
{
|
|
74
79
|
path: "/api/2.0/genie/spaces",
|
|
@@ -79,7 +84,7 @@ export async function createGenieSpace(
|
|
|
79
84
|
},
|
|
80
85
|
context,
|
|
81
86
|
);
|
|
82
|
-
return
|
|
87
|
+
return GenieSpaceSchema.parse(raw);
|
|
83
88
|
}
|
|
84
89
|
|
|
85
90
|
/**
|
|
@@ -102,7 +107,7 @@ export async function getGenieSpace(
|
|
|
102
107
|
): Promise<GenieSpace> {
|
|
103
108
|
const client = options?.workspaceClient ?? createWorkspaceClient();
|
|
104
109
|
const serialized = options?.serialized !== false;
|
|
105
|
-
const ctx = options?.context ?
|
|
110
|
+
const ctx = options?.context ? toContext(options.context) : undefined;
|
|
106
111
|
const request = (includeSerialized: boolean): Promise<unknown> =>
|
|
107
112
|
client.apiClient.request(
|
|
108
113
|
{
|
|
@@ -122,11 +127,11 @@ export async function getGenieSpace(
|
|
|
122
127
|
if (!serialized || !isSerializedSpaceForbidden(err)) throw err;
|
|
123
128
|
logger.debug("serialized-space:forbidden", {
|
|
124
129
|
spaceId,
|
|
125
|
-
error:
|
|
130
|
+
error: toError(err),
|
|
126
131
|
});
|
|
127
132
|
raw = await request(false);
|
|
128
133
|
}
|
|
129
|
-
return
|
|
134
|
+
return GenieSpaceSchema.parse(raw);
|
|
130
135
|
}
|
|
131
136
|
|
|
132
137
|
/**
|
|
@@ -136,7 +141,7 @@ export async function getGenieSpace(
|
|
|
136
141
|
* SDK surfaces the error code without always carrying a status.
|
|
137
142
|
*/
|
|
138
143
|
function isSerializedSpaceForbidden(err: unknown): boolean {
|
|
139
|
-
const context =
|
|
144
|
+
const context = errorContext(err);
|
|
140
145
|
return (
|
|
141
146
|
context.hasStatusCode(403) ||
|
|
142
147
|
context.hasMessage("permission denied") ||
|
|
@@ -165,7 +170,7 @@ interface SerializedSampleQuestion {
|
|
|
165
170
|
export function genieSampleQuestions(space: GenieSpace): string[] {
|
|
166
171
|
const serialized = space.serialized_space;
|
|
167
172
|
if (!serialized) return [];
|
|
168
|
-
const parsed =
|
|
173
|
+
const parsed = parse(serialized);
|
|
169
174
|
if (parsed === undefined) {
|
|
170
175
|
logger.warn("serialized-space:parse-error", { spaceId: space.space_id });
|
|
171
176
|
return [];
|
|
@@ -175,9 +180,8 @@ export function genieSampleQuestions(space: GenieSpace): string[] {
|
|
|
175
180
|
if (!Array.isArray(sampleQuestions)) return [];
|
|
176
181
|
|
|
177
182
|
return [
|
|
178
|
-
...
|
|
179
|
-
.
|
|
180
|
-
.map((entry) => stringUtils.firstNonEmpty(entry?.question))
|
|
183
|
+
...sequence(sampleQuestions as SerializedSampleQuestion[])
|
|
184
|
+
.map((entry) => firstNonEmpty(entry?.question))
|
|
181
185
|
.nonNull()
|
|
182
186
|
.distinct(),
|
|
183
187
|
];
|