@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 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.154";
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.154";
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.154";
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9nZW5pZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE1NFwiO1xuZXhwb3J0ICogYXMgYWdlbnRNb2RlIGZyb20gXCIuL3NyYy9hZ2VudC1tb2RlLnRzXCI7XG5leHBvcnQgKiBhcyBjaGF0IGZyb20gXCIuL3NyYy9jaGF0LnRzXCI7XG5leHBvcnQgKiBhcyBmZWVkYmFjayBmcm9tIFwiLi9zcmMvZmVlZGJhY2sudHNcIjtcbmV4cG9ydCAqIGFzIHNwYWNlIGZyb20gXCIuL3NyYy9zcGFjZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZUFnZW50TW9kZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvYWdlbnQtbW9kZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZUNoYXRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2NoYXQudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VuZEdlbmllTWVzc2FnZUZlZWRiYWNrT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9mZWVkYmFjay50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZXRHZW5pZVNwYWNlT3B0aW9ucywgQ3JlYXRlR2VuaWVTcGFjZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc3BhY2UudHNcIjtcbiJdfQ==
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=
@@ -9,7 +9,7 @@
9
9
  * @module
10
10
  */
11
11
  import type { WorkspaceClient } from "@databricks/appkit";
12
- import { databricks } from "@dbx-tools/appkit";
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?: databricks.ContextLike;
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?: databricks.ContextLike;
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;
@@ -8,20 +8,18 @@
8
8
  *
9
9
  * @module
10
10
  */
11
- import { databricks } from "@dbx-tools/appkit";
12
- import { errorUtils, json, log, object } from "@dbx-tools/shared-core";
13
- import { agentMode as agentModeWire, } from "@dbx-tools/shared-genie";
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 agentModeWire.GenieAgentModeProjection(agentId, options.displayContent ?? content);
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 = object.isRecord(response) ? response.contents : undefined;
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 (!object.deepEqual(message, previous)) {
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 ? databricks.toContext(options.context) : undefined;
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 = agentModeWire.GenieAgentConversationItemsSchema.parse(await client.apiClient.request({
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 agentModeWire.projectAgentModeConversation(agentId, conversationId, items, status);
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 = errorUtils.errorContext(value);
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 object.isRecord(value) && typeof value.getReader === "function";
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
- }, databricks.toContext(controller));
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: errorUtils.toError(err),
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 agentModeWire.GenieAgentModeEventSchema.parse(json.parse(data));
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 { databricks } from "@dbx-tools/appkit";
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?: databricks.ContextLike;
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 { databricks } from "@dbx-tools/appkit";
29
- import { asyncUtils, errorUtils, log } from "@dbx-tools/shared-core";
30
- import { event, genieModel } from "@dbx-tools/shared-genie";
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 = genieModel.GenieMessageSchema.safeParse(raw);
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 = databricks.toContext(controller, options?.context);
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: errorUtils.toError(err),
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* asyncUtils.poll(async (pollCtx) => validateMessage(await pollProducer(pollCtx)), {
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) => !genieModel.isTerminalStatus(m.status),
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* event.eventsFromMessage(message, previous, message.space_id);
251
+ yield* eventsFromMessage(message, previous, message.space_id);
252
252
  const status = message.status;
253
- if (genieModel.isTerminalStatus(status)) {
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=
@@ -4,14 +4,14 @@
4
4
  * @module
5
5
  */
6
6
  import { type WorkspaceClient } from "@databricks/appkit";
7
- import { databricks } from "@dbx-tools/appkit";
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?: databricks.ContextLike;
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>;
@@ -4,13 +4,13 @@
4
4
  * @module
5
5
  */
6
6
  import { createWorkspaceClient } from "@databricks/appkit";
7
- import { databricks } from "@dbx-tools/appkit";
8
- import { genieModel } from "@dbx-tools/shared-genie";
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 = genieModel.GenieMessageFeedbackRequestSchema.parse(input);
11
+ const request = GenieMessageFeedbackRequestSchema.parse(input);
12
12
  const client = options?.workspaceClient ?? createWorkspaceClient();
13
- const context = options?.context ? databricks.toContext(options.context) : undefined;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmVlZGJhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBb0MsTUFBTSx5QkFBeUIsQ0FBQztBQVV2RixzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsS0FBa0MsRUFDbEMsT0FBeUM7SUFFekMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRSxNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsZUFBZSxJQUFJLHFCQUFxQixFQUFFLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNyRixNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUM1QjtRQUNFLElBQUksRUFBRSx5QkFBeUIsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0Isa0JBQWtCLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxhQUFhLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVztRQUM5TCxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDekQ7UUFDRCxPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUU7UUFDdEIsR0FBRyxFQUFFLEtBQUs7S0FDWCxFQUNELE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuaWUgbWVzc2FnZSBmZWVkYmFjayBmb3IgY2hhdC1tb2RlIGFuZCBhZ2VudC1tb2RlIGNvbnZlcnNhdGlvbnMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCwgdHlwZSBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBnZW5pZU1vZGVsLCB0eXBlIEdlbmllTWVzc2FnZUZlZWRiYWNrUmVxdWVzdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuXG4vKiogT3B0aW9ucyBmb3Igb25lIGlkZW50aXR5LXNjb3BlZCBHZW5pZSBmZWVkYmFjayB3cml0ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZEdlbmllTWVzc2FnZUZlZWRiYWNrT3B0aW9ucyB7XG4gIC8qKiBXb3Jrc3BhY2UgY2xpZW50IHdob3NlIGlkZW50aXR5IHN1Ym1pdHMgdGhlIGZlZWRiYWNrLiAqL1xuICB3b3Jrc3BhY2VDbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQ7XG4gIC8qKiBFeHRlcm5hbCBjYW5jZWxsYXRpb24uICovXG4gIGNvbnRleHQ/OiBkYXRhYnJpY2tzLkNvbnRleHRMaWtlO1xufVxuXG4vKiogU2VuZCByYXRpbmcgYW5kIG9wdGlvbmFsIGNvbW1lbnQgZGlyZWN0bHkgdG8gb25lIEdlbmllIG1lc3NhZ2UuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZEdlbmllTWVzc2FnZUZlZWRiYWNrKFxuICBpbnB1dDogR2VuaWVNZXNzYWdlRmVlZGJhY2tSZXF1ZXN0LFxuICBvcHRpb25zPzogU2VuZEdlbmllTWVzc2FnZUZlZWRiYWNrT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXF1ZXN0ID0gZ2VuaWVNb2RlbC5HZW5pZU1lc3NhZ2VGZWVkYmFja1JlcXVlc3RTY2hlbWEucGFyc2UoaW5wdXQpO1xuICBjb25zdCBjbGllbnQgPSBvcHRpb25zPy53b3Jrc3BhY2VDbGllbnQgPz8gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCk7XG4gIGNvbnN0IGNvbnRleHQgPSBvcHRpb25zPy5jb250ZXh0ID8gZGF0YWJyaWNrcy50b0NvbnRleHQob3B0aW9ucy5jb250ZXh0KSA6IHVuZGVmaW5lZDtcbiAgYXdhaXQgY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgIHtcbiAgICAgIHBhdGg6IGAvYXBpLzIuMC9nZW5pZS9zcGFjZXMvJHtlbmNvZGVVUklDb21wb25lbnQocmVxdWVzdC5zcGFjZV9pZCl9L2NvbnZlcnNhdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQocmVxdWVzdC5jb252ZXJzYXRpb25faWQpfS9tZXNzYWdlcy8ke2VuY29kZVVSSUNvbXBvbmVudChyZXF1ZXN0Lm1lc3NhZ2VfaWQpfS9mZWVkYmFja2AsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICByYXRpbmc6IHJlcXVlc3QucmF0aW5nLFxuICAgICAgICAuLi4ocmVxdWVzdC5jb21tZW50ID8geyBjb21tZW50OiByZXF1ZXN0LmNvbW1lbnQgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycygpLFxuICAgICAgcmF3OiBmYWxzZSxcbiAgICB9LFxuICAgIGNvbnRleHQsXG4gICk7XG59XG4iXX0=
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmVlZGJhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRixPQUFPLEVBQW9CLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxpQ0FBaUMsR0FDbEMsTUFBTSx5QkFBeUIsQ0FBQztBQVVqQyxzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsS0FBa0MsRUFDbEMsT0FBeUM7SUFFekMsTUFBTSxPQUFPLEdBQUcsaUNBQWlDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9ELE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxlQUFlLElBQUkscUJBQXFCLEVBQUUsQ0FBQztJQUNuRSxNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDMUUsTUFBTSxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDNUI7UUFDRSxJQUFJLEVBQUUseUJBQXlCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsYUFBYSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVc7UUFDOUwsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUU7WUFDUCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3pEO1FBQ0QsT0FBTyxFQUFFLElBQUksT0FBTyxFQUFFO1FBQ3RCLEdBQUcsRUFBRSxLQUFLO0tBQ1gsRUFDRCxPQUFPLENBQ1IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmllIG1lc3NhZ2UgZmVlZGJhY2sgZm9yIGNoYXQtbW9kZSBhbmQgYWdlbnQtbW9kZSBjb252ZXJzYXRpb25zLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVXb3Jrc3BhY2VDbGllbnQsIHR5cGUgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgdHlwZSBDb250ZXh0TGlrZSwgdG9Db250ZXh0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQge1xuICB0eXBlIEdlbmllTWVzc2FnZUZlZWRiYWNrUmVxdWVzdCxcbiAgR2VuaWVNZXNzYWdlRmVlZGJhY2tSZXF1ZXN0U2NoZW1hLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWVcIjtcblxuLyoqIE9wdGlvbnMgZm9yIG9uZSBpZGVudGl0eS1zY29wZWQgR2VuaWUgZmVlZGJhY2sgd3JpdGUuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRHZW5pZU1lc3NhZ2VGZWVkYmFja09wdGlvbnMge1xuICAvKiogV29ya3NwYWNlIGNsaWVudCB3aG9zZSBpZGVudGl0eSBzdWJtaXRzIHRoZSBmZWVkYmFjay4gKi9cbiAgd29ya3NwYWNlQ2xpZW50PzogV29ya3NwYWNlQ2xpZW50O1xuICAvKiogRXh0ZXJuYWwgY2FuY2VsbGF0aW9uLiAqL1xuICBjb250ZXh0PzogQ29udGV4dExpa2U7XG59XG5cbi8qKiBTZW5kIHJhdGluZyBhbmQgb3B0aW9uYWwgY29tbWVudCBkaXJlY3RseSB0byBvbmUgR2VuaWUgbWVzc2FnZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kR2VuaWVNZXNzYWdlRmVlZGJhY2soXG4gIGlucHV0OiBHZW5pZU1lc3NhZ2VGZWVkYmFja1JlcXVlc3QsXG4gIG9wdGlvbnM/OiBTZW5kR2VuaWVNZXNzYWdlRmVlZGJhY2tPcHRpb25zLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBHZW5pZU1lc3NhZ2VGZWVkYmFja1JlcXVlc3RTY2hlbWEucGFyc2UoaW5wdXQpO1xuICBjb25zdCBjbGllbnQgPSBvcHRpb25zPy53b3Jrc3BhY2VDbGllbnQgPz8gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCk7XG4gIGNvbnN0IGNvbnRleHQgPSBvcHRpb25zPy5jb250ZXh0ID8gdG9Db250ZXh0KG9wdGlvbnMuY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGF3YWl0IGNsaWVudC5hcGlDbGllbnQucmVxdWVzdChcbiAgICB7XG4gICAgICBwYXRoOiBgL2FwaS8yLjAvZ2VuaWUvc3BhY2VzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlcXVlc3Quc3BhY2VfaWQpfS9jb252ZXJzYXRpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlcXVlc3QuY29udmVyc2F0aW9uX2lkKX0vbWVzc2FnZXMvJHtlbmNvZGVVUklDb21wb25lbnQocmVxdWVzdC5tZXNzYWdlX2lkKX0vZmVlZGJhY2tgLFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgcmF0aW5nOiByZXF1ZXN0LnJhdGluZyxcbiAgICAgICAgLi4uKHJlcXVlc3QuY29tbWVudCA/IHsgY29tbWVudDogcmVxdWVzdC5jb21tZW50IH0gOiB7fSksXG4gICAgICB9LFxuICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnMoKSxcbiAgICAgIHJhdzogZmFsc2UsXG4gICAgfSxcbiAgICBjb250ZXh0LFxuICApO1xufVxuIl19
@@ -21,7 +21,7 @@
21
21
  * @module
22
22
  */
23
23
  import { type WorkspaceClient } from "@databricks/appkit";
24
- import { databricks } from "@dbx-tools/appkit";
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?: databricks.ContextLike;
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?: databricks.ContextLike;
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 { databricks } from "@dbx-tools/appkit";
25
- import { errorUtils, json, log, object, stringUtils } from "@dbx-tools/shared-core";
26
- import { genieModel } from "@dbx-tools/shared-genie";
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 = genieModel.CreateGenieSpaceRequestSchema.parse(input);
30
+ const request = CreateGenieSpaceRequestSchema.parse(input);
31
31
  const client = options?.workspaceClient ?? createWorkspaceClient();
32
- const context = options?.context ? databricks.toContext(options.context) : undefined;
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 genieModel.GenieSpaceSchema.parse(raw);
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 ? databricks.toContext(options.context) : undefined;
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: errorUtils.toError(err),
76
+ error: toError(err),
77
77
  });
78
78
  raw = await request(false);
79
79
  }
80
- return genieModel.GenieSpaceSchema.parse(raw);
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 = errorUtils.errorContext(err);
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 = json.parse(serialized);
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
- ...object
117
- .sequence(sampleQuestions)
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.154",
28
- "@dbx-tools/shared-core": "^0.9.154",
29
- "@dbx-tools/shared-genie": "^0.9.154"
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.154",
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.ts",
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 { databricks } from "@dbx-tools/appkit";
14
- import { errorUtils, json, log, object } from "@dbx-tools/shared-core";
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?: databricks.ContextLike;
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 agentModeWire.GenieAgentModeProjection(
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 = object.isRecord(response) ? response.contents : undefined;
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 (!object.deepEqual(message, previous)) {
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?: databricks.ContextLike } = {},
105
+ options: { context?: ContextLike } = {},
107
106
  ): Promise<GenieMessage[]> {
108
- const context = options.context ? databricks.toContext(options.context) : undefined;
109
- const items: agentModeWire.GenieAgentOutputItem[] = [];
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 = agentModeWire.GenieAgentConversationItemsSchema.parse(
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 agentModeWire.projectAgentModeConversation(agentId, conversationId, items, status);
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 = errorUtils.errorContext(value);
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 object.isRecord(value) && typeof value.getReader === "function";
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
- databricks.toContext(controller),
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: errorUtils.toError(err),
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 agentModeWire.GenieAgentModeEventSchema.parse(json.parse(data));
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 { databricks } from "@dbx-tools/appkit";
34
- import { asyncUtils, errorUtils, log, type PollContext } from "@dbx-tools/shared-core";
35
- import { event, genieModel, type GenieChatEvent, type GenieMessage } from "@dbx-tools/shared-genie";
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 = genieModel.GenieMessageSchema.safeParse(raw);
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?: databricks.ContextLike;
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 = databricks.toContext(controller, options?.context);
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: errorUtils.toError(err),
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* asyncUtils.poll(
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) => !genieModel.isTerminalStatus(m.status),
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* event.eventsFromMessage(message, previous, message.space_id);
326
+ yield* eventsFromMessage(message, previous, message.space_id);
321
327
  const status = message.status;
322
- if (genieModel.isTerminalStatus(status)) {
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 { databricks } from "@dbx-tools/appkit";
9
- import { genieModel, type GenieMessageFeedbackRequest } from "@dbx-tools/shared-genie";
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?: databricks.ContextLike;
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 = genieModel.GenieMessageFeedbackRequestSchema.parse(input);
27
+ const request = GenieMessageFeedbackRequestSchema.parse(input);
25
28
  const client = options?.workspaceClient ?? createWorkspaceClient();
26
- const context = options?.context ? databricks.toContext(options.context) : undefined;
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 { databricks } from "@dbx-tools/appkit";
26
- import { errorUtils, json, log, object, stringUtils } from "@dbx-tools/shared-core";
27
- import { genieModel, type CreateGenieSpaceRequest, type GenieSpace } from "@dbx-tools/shared-genie";
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?: databricks.ContextLike;
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?: databricks.ContextLike;
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 = genieModel.CreateGenieSpaceRequestSchema.parse(input);
74
+ const request = CreateGenieSpaceRequestSchema.parse(input);
70
75
  const client = options?.workspaceClient ?? createWorkspaceClient();
71
- const context = options?.context ? databricks.toContext(options.context) : undefined;
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 genieModel.GenieSpaceSchema.parse(raw);
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 ? databricks.toContext(options.context) : undefined;
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: errorUtils.toError(err),
130
+ error: toError(err),
126
131
  });
127
132
  raw = await request(false);
128
133
  }
129
- return genieModel.GenieSpaceSchema.parse(raw);
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 = errorUtils.errorContext(err);
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 = json.parse(serialized);
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
- ...object
179
- .sequence(sampleQuestions as SerializedSampleQuestion[])
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
  ];