@dbx-tools/genie 0.9.131 → 0.9.136

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,25 +1,26 @@
1
1
  # @dbx-tools/genie
2
2
 
3
- Server-side Databricks Genie chat drivers.
3
+ Run Databricks Genie turns from Node or AppKit code as raw message snapshots or
4
+ a typed event stream. AppKit requests keep their on-behalf-of-user (OBO)
5
+ identity, standalone callers use the Databricks SDK authentication chain, and
6
+ both modes support cancellation.
4
7
 
5
- Run a Genie turn from Node or AppKit code and consume raw message snapshots or a
6
- typed event stream. AppKit requests keep their OBO identity; standalone callers
7
- use the Databricks SDK authentication chain. Both modes support cancellation.
8
-
9
- ## Quick Start
8
+ ## Quick start
10
9
 
11
10
  ```ts
12
11
  import { chat } from "@dbx-tools/genie";
13
12
 
13
+ const spaceId = process.env.DATABRICKS_GENIE_SPACE_ID!;
14
+
14
15
  for await (const event of chat.genieEventChat(spaceId, "Top stores by revenue?")) {
15
16
  console.log(event.type, event);
16
17
  }
17
18
  ```
18
19
 
19
20
  Pure Genie schemas and event detector helpers live in
20
- [`@dbx-tools/shared-genie`](../../shared/genie).
21
+ [@dbx-tools/shared-genie](../../shared/genie).
21
22
 
22
- Key features:
23
+ The driver:
23
24
 
24
25
  - Streams the Genie Agent Mode API by default, including reasoning, SQL calls,
25
26
  query output, and the synthesized answer.
@@ -40,15 +41,17 @@ Key features:
40
41
  CLI tools.
41
42
  - Fetches Genie space metadata and starter questions for UI suggestions.
42
43
 
43
- ## Choose The Driver Or AppKit Genie
44
+ ## Choose Genie integration
44
45
 
45
- Native AppKit's Genie plugin is the right choice for a standalone Genie chat
46
- experience: it provides named space aliases, SSE status updates, conversation
46
+ Use native AppKit's Genie plugin for a standalone Genie chat experience. It
47
+ provides named space aliases, SSE status updates, conversation
47
48
  history replay, query result fetching, OBO execution, and the AppKit UI
48
49
  `GenieChat` component.
49
50
 
50
- Use this package when Genie is one capability inside a larger agent or custom
51
- backend:
51
+ Use direct Genie when one Genie space owns the conversation and answer. Use
52
+ [@dbx-tools/appkit-mastra](../appkit-mastra) when a supervising agent must
53
+ combine Genie with other tools, Mastra memory, approvals, or workflows. Use
54
+ this package directly when custom backend code needs the lower-level stream:
52
55
 
53
56
  - You want a low-level async iterator rather than an AppKit HTTP route.
54
57
  - You want raw message snapshots or a normalized event stream that can be fed
@@ -60,7 +63,7 @@ backend:
60
63
  - You need the same driver to work inside AppKit with OBO auth and outside
61
64
  AppKit from scripts using normal Databricks SDK auth.
62
65
 
63
- ## Handle Semantic Events
66
+ ## Handle semantic events
64
67
 
65
68
  ```ts
66
69
  import { chat } from "@dbx-tools/genie";
@@ -85,10 +88,10 @@ for await (const event of chat.genieEventChat(spaceId, "Top stores by revenue?")
85
88
 
86
89
  `chat.genieEventChat()` wraps the lower-level snapshot stream and yields a
87
90
  `GenieChatEvent` union. Use it for SSE streams, log pipelines, and tool writer
88
- events where consumers care about progress and SQL, not just the terminal
91
+ events where consumers care about progress and SQL rather than only the terminal
89
92
  message.
90
93
 
91
- ## Stream Raw Message Snapshots
94
+ ## Stream raw message snapshots
92
95
 
93
96
  ```ts
94
97
  import { chat } from "@dbx-tools/genie";
@@ -107,7 +110,7 @@ normalized wire shape. Agent Mode returns query output inline as Markdown and
107
110
  copies a query output's `statement_id` onto the matching query attachment when
108
111
  Databricks supplies one.
109
112
 
110
- ## Continue A Conversation
113
+ ## Continue a conversation
111
114
 
112
115
  ```ts
113
116
  let conversationId: string | undefined;
@@ -126,7 +129,7 @@ message or event and passing it into the next turn. This works in stateless
126
129
  route handlers, durable thread stores, and one-off scripts. AppKit-Mastra stores
127
130
  the id with its thread and passes it back when a conversation continues.
128
131
 
129
- ## Resolve A Workspace Client
132
+ ## Resolve a workspace client
130
133
 
131
134
  ```ts
132
135
  import { createWorkspaceClient } from "@databricks/appkit";
@@ -139,14 +142,14 @@ await chat.genieEventChat(spaceId, content, {
139
142
 
140
143
  Client resolution order:
141
144
 
142
- 1. `options.workspaceClient`;
143
- 2. AppKit execution-context client, when present;
144
- 3. `createWorkspaceClient()` using AppKit's normal Databricks auth chain.
145
+ 1. `options.workspaceClient`.
146
+ 1. AppKit execution-context client, when present.
147
+ 1. `createWorkspaceClient()` using AppKit's normal Databricks auth chain.
145
148
 
146
149
  Pass `options.context` as an `AbortSignal` or SDK context to cancel the Agent
147
150
  Mode stream, SDK calls, and any polling fallback sleep.
148
151
 
149
- ## Read Space Metadata And Starter Questions
152
+ ## Read space metadata and starter questions
150
153
 
151
154
  ```ts
152
155
  import { space } from "@dbx-tools/genie";
@@ -163,7 +166,7 @@ The serialized blob needs `Can Edit` on the space, while `Can Run` is enough for
163
166
  title and description. When the workspace rejects the serialized request for
164
167
  lack of permission, `getGenieSpace()` retries once without it and logs
165
168
  `serialized-space:forbidden`, so an app service principal holding only `Can Run`
166
- still resolves the space and simply reports no starter questions. Every other
169
+ still resolves the space and reports no starter questions. Every other
167
170
  failure - a cancelled request, a missing space, a retry that also fails - is
168
171
  thrown.
169
172
 
@@ -172,9 +175,9 @@ thrown.
172
175
  `chat.GenieChatOptions` is shared by both drivers:
173
176
 
174
177
  - `conversationId` - append to an existing Genie conversation.
175
- - `agentMode` - use Agent Mode SSE, default `true`; `false` forces polling.
178
+ - `agentMode` - use Agent Mode SSE, default `true`. `false` forces polling.
176
179
  - `agentModeFallback` - fall back to classic polling when Agent Mode is
177
- unavailable, default `true`; direct Agent-only callers set `false`.
180
+ unavailable, default `true`. Direct Agent-only callers set `false`.
178
181
  - `enableVisualization` - request Agent Mode visualization generation.
179
182
  - `workspaceClient` - explicit Databricks SDK client.
180
183
  - `pollIntervalMs` - fallback polling cadence, default `500`.
@@ -188,6 +191,6 @@ thrown.
188
191
  Mode transport options plus Agent Mode conversation history.
189
192
  - `space` - `getGenieSpace()` and `genieSampleQuestions()`.
190
193
 
191
- The AppKit-Mastra package builds its Genie tools on top of this driver; see
192
- [`@dbx-tools/appkit-mastra`](../appkit-mastra) for the agent-level
194
+ The AppKit-Mastra package builds its Genie tools on top of this driver. See
195
+ [@dbx-tools/appkit-mastra](../appkit-mastra) for the agent-level
193
196
  workflow.
package/index.ts CHANGED
@@ -3,10 +3,12 @@
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.131";
6
+ export const PACKAGE_VERSION = "0.9.136";
7
7
  export * as agentMode from "./src/agent-mode.ts";
8
8
  export * as chat from "./src/chat.ts";
9
+ export * as feedback from "./src/feedback.ts";
9
10
  export * as space from "./src/space.ts";
10
11
  export type { GenieAgentModeOptions } from "./src/agent-mode.ts";
11
12
  export type { GenieChatOptions } from "./src/chat.ts";
12
- export type { GetGenieSpaceOptions } from "./src/space.ts";
13
+ export type { SendGenieMessageFeedbackOptions } from "./src/feedback.ts";
14
+ export type { GetGenieSpaceOptions, CreateGenieSpaceOptions } from "./src/space.ts";
package/lib/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/genie";
2
- export declare const PACKAGE_VERSION = "0.9.131";
2
+ export declare const PACKAGE_VERSION = "0.9.136";
3
3
  export * as agentMode from "./src/agent-mode.ts";
4
4
  export * as chat from "./src/chat.ts";
5
+ export * as feedback from "./src/feedback.ts";
5
6
  export * as space from "./src/space.ts";
6
7
  export type { GenieAgentModeOptions } from "./src/agent-mode.ts";
7
8
  export type { GenieChatOptions } from "./src/chat.ts";
8
- export type { GetGenieSpaceOptions } from "./src/space.ts";
9
+ export type { SendGenieMessageFeedbackOptions } from "./src/feedback.ts";
10
+ export type { GetGenieSpaceOptions, CreateGenieSpaceOptions } from "./src/space.ts";
package/lib/index.js CHANGED
@@ -2,8 +2,9 @@
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.131";
5
+ export const PACKAGE_VERSION = "0.9.136";
6
6
  export * as agentMode from "./src/agent-mode.js";
7
7
  export * as chat from "./src/chat.js";
8
+ export * as feedback from "./src/feedback.js";
8
9
  export * as space from "./src/space.js";
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvZ2VuaWVcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS4xMzFcIjtcbmV4cG9ydCAqIGFzIGFnZW50TW9kZSBmcm9tIFwiLi9zcmMvYWdlbnQtbW9kZS50c1wiO1xuZXhwb3J0ICogYXMgY2hhdCBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgc3BhY2UgZnJvbSBcIi4vc3JjL3NwYWNlLnRzXCI7XG5leHBvcnQgdHlwZSB7IEdlbmllQWdlbnRNb2RlT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9hZ2VudC1tb2RlLnRzXCI7XG5leHBvcnQgdHlwZSB7IEdlbmllQ2hhdE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZXRHZW5pZVNwYWNlT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zcGFjZS50c1wiO1xuIl19
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssS0FBSyxNQUFNLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9nZW5pZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEzNlwiO1xuZXhwb3J0ICogYXMgYWdlbnRNb2RlIGZyb20gXCIuL3NyYy9hZ2VudC1tb2RlLnRzXCI7XG5leHBvcnQgKiBhcyBjaGF0IGZyb20gXCIuL3NyYy9jaGF0LnRzXCI7XG5leHBvcnQgKiBhcyBmZWVkYmFjayBmcm9tIFwiLi9zcmMvZmVlZGJhY2sudHNcIjtcbmV4cG9ydCAqIGFzIHNwYWNlIGZyb20gXCIuL3NyYy9zcGFjZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZUFnZW50TW9kZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvYWdlbnQtbW9kZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZUNoYXRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2NoYXQudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2VuZEdlbmllTWVzc2FnZUZlZWRiYWNrT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9mZWVkYmFjay50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZXRHZW5pZVNwYWNlT3B0aW9ucywgQ3JlYXRlR2VuaWVTcGFjZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc3BhY2UudHNcIjtcbiJdfQ==
@@ -15,6 +15,8 @@ import { type GenieMessage } from "@dbx-tools/shared-genie";
15
15
  export interface GenieAgentModeOptions {
16
16
  conversationId?: string;
17
17
  enableVisualization?: boolean;
18
+ /** Original user text projected into client-visible snapshots when input is augmented. */
19
+ displayContent?: string;
18
20
  context?: databricks.ContextLike;
19
21
  }
20
22
  /** Stream one Agent Mode response as `GenieMessage` snapshots. */
@@ -17,7 +17,7 @@ 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, content);
20
+ const projection = new agentModeWire.GenieAgentModeProjection(agentId, options.displayContent ?? content);
21
21
  try {
22
22
  const context = options.context
23
23
  ? databricks.toContext(options.context)
@@ -162,4 +162,4 @@ function parseSseFrame(frame) {
162
162
  return undefined;
163
163
  return agentModeWire.GenieAgentModeEventSchema.parse(json.parse(data));
164
164
  }
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtbW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZ2VudC1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUdILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUNMLFNBQVMsSUFBSSxhQUFhLEdBRzNCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzlDLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQVMzQixrRUFBa0U7QUFDbEUsTUFBTSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsa0JBQWtCLENBQ3ZDLE1BQXVCLEVBQ3ZCLE9BQWUsRUFDZixPQUFlLEVBQ2YsVUFBaUMsRUFBRTtJQUVuQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksZUFBZSxFQUFFLENBQUM7SUFDNUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxhQUFhLENBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1lBQzdCLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDdkMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsZUFBZ0IsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFP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QUFhLENBQUMsS0FBYTtJQUNsQyxNQUFNLElBQUksR0FBRyxLQUFLO1NBQ2YsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNkLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2QsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2pELE9BQU8sYUFBYSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuaWUgQWdlbnQgTW9kZSBTU0UgdHJhbnNwb3J0LlxuICpcbiAqIFN0cmVhbXMgdGhlIFJlc3BvbnNlcy1zaGFwZWQgQWdlbnQgTW9kZSBBUEkgYW5kIHByb2plY3RzIGl0cyByZWFzb25pbmcsIFNRTCxcbiAqIHF1ZXJ5IG91dHB1dCwgYW5kIGZpbmFsIGFuc3dlciBpdGVtcyBvbnRvIHRoZSBleGlzdGluZyBgR2VuaWVNZXNzYWdlYFxuICogY29udHJhY3Qgc28gY2FsbGVycyBjYW4ga2VlcCBvbmUgc2VtYW50aWMgZXZlbnQgcGlwZWxpbmUgYWNyb3NzIEFnZW50IE1vZGVcbiAqIGFuZCB0aGUgbGVnYWN5IHBvbGxpbmcgQVBJLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGRhdGFicmlja3MgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGVycm9yVXRpbHMsIGpzb24sIGxvZywgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7XG4gIGFnZW50TW9kZSBhcyBhZ2VudE1vZGVXaXJlLFxuICB0eXBlIEdlbmllQWdlbnRNb2RlRXZlbnQsXG4gIHR5cGUgR2VuaWVNZXNzYWdlLFxufSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWVcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImdlbmllL2FnZW50LW1vZGVcIik7XG5jb25zdCBDQU5DRUxfVElNRU9VVF9NUyA9IDVfMDAwO1xuY29uc3QgSVRFTV9QQUdFX1NJWkUgPSAxMDA7XG5cbi8qKiBJbnB1dHMgZm9yIG9uZSBBZ2VudCBNb2RlIHJlc3BvbnNlIHN0cmVhbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuaWVBZ2VudE1vZGVPcHRpb25zIHtcbiAgY29udmVyc2F0aW9uSWQ/OiBzdHJpbmc7XG4gIGVuYWJsZVZpc3VhbGl6YXRpb24/OiBib29sZWFuO1xuICBjb250ZXh0PzogZGF0YWJyaWNrcy5Db250ZXh0TGlrZTtcbn1cblxuLyoqIFN0cmVhbSBvbmUgQWdlbnQgTW9kZSByZXNwb25zZSBhcyBgR2VuaWVNZXNzYWdlYCBzbmFwc2hvdHMuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGdlbmllQWdlbnRNb2RlQ2hhdChcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gIGFnZW50SWQ6IHN0cmluZyxcbiAgY29udGVudDogc3RyaW5nLFxuICBvcHRpb25zOiBHZW5pZUFnZW50TW9kZU9wdGlvbnMgPSB7fSxcbik6IEFzeW5jR2VuZXJhdG9yPEdlbmllTWVzc2FnZSwgdm9pZCwgdm9pZD4ge1xuICBjb25zdCBvd25lZENvbnRyb2xsZXIgPSBvcHRpb25zLmNvbnRleHQgPyB1bmRlZmluZWQgOiBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHByb2plY3Rpb24gPSBuZXcgYWdlbnRNb2RlV2lyZS5HZW5pZUFnZW50TW9kZVByb2plY3Rpb24oYWdlbnRJZCwgY29udGVudCk7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGV4dCA9IG9wdGlvbnMuY29udGV4dFxuICAgICAgPyBkYXRhYnJpY2tzLnRvQ29udGV4dChvcHRpb25zLmNvbnRleHQpXG4gICAgICA6IGRhdGFicmlja3MudG9Db250ZXh0KG93bmVkQ29udHJvbGxlciEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBwYXRoOiBgL2FwaS8yLjAvZ2VuaWUvYWdlbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFnZW50SWQpfS9yZXNwb25zZXNgLFxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7XG4gICAgICAgICAgYWNjZXB0OiBcInRleHQvZXZlbnQtc3RyZWFtXCIsXG4gICAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIH0pLFxuICAgICAgICByYXc6IHRydWUsXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICBpbnB1dDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiBcIm1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgcm9sZTogXCJ1c2VyXCIsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IFt7IHR5cGU6IFwiaW5wdXRfdGV4dFwiLCB0ZXh0OiBjb250ZW50IH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIC4uLihvcHRpb25zLmNvbnZlcnNhdGlvbklkID8geyBjb252ZXJzYXRpb25faWQ6IG9wdGlvbnMuY29udmVyc2F0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5lbmFibGVWaXN1YWxpemF0aW9uID8geyBlbmFibGVfdml6OiB0cnVlIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgY29udGV4dCxcbiAgICApO1xuICAgIGNvbnN0IHN0cmVhbSA9IG9iamVjdC5pc1JlY29yZChyZXNwb25zZSkgPyByZXNwb25zZS5jb250ZW50cyA6IHVuZGVmaW5lZDtcbiAgICBpZiAoIWlzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmllIEFnZW50IE1vZGUgZGlkIG5vdCByZXR1cm4gYW4gU1NFIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICBsZXQgcHJldmlvdXM6IEdlbmllTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGV2ZW50IG9mIHBhcnNlU3NlKHN0cmVhbSkpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBwcm9qZWN0aW9uLmFwcGx5KGV2ZW50KTtcbiAgICAgIGlmICghbWVzc2FnZSkgY29udGludWU7XG4gICAgICBpZiAoIW9iamVjdC5kZWVwRXF1YWwobWVzc2FnZSwgcHJldmlvdXMpKSB7XG4gICAgICAgIHlpZWxkIG1lc3NhZ2U7XG4gICAgICAgIHByZXZpb3VzID0gbWVzc2FnZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFwcm9qZWN0aW9uLnRlcm1pbmFsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5pZSBBZ2VudCBNb2RlIHN0cmVhbSBlbmRlZCBiZWZvcmUgYSB0ZXJtaW5hbCByZXNwb25zZVwiKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgb3duZWRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIGlmICghcHJvamVjdGlvbi50ZXJtaW5hbCAmJiBwcm9qZWN0aW9uLnJlc3BvbnNlSWQgJiYgcHJvamVjdGlvbi5jb252ZXJzYXRpb25JZCkge1xuICAgICAgYXdhaXQgY2FuY2VsUmVzcG9uc2UoY2xpZW50LCBhZ2VudElkLCBwcm9qZWN0aW9uLmNvbnZlcnNhdGlvbklkLCBwcm9qZWN0aW9uLnJlc3BvbnNlSWQpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExvYWQgYW4gQWdlbnQgTW9kZSBjb252ZXJzYXRpb24ncyBmdWxsIGl0ZW0gaGlzdG9yeSBhbmQgcHJvamVjdCBpdCBvbnRvIG9uZVxuICogYEdlbmllTWVzc2FnZWAgcGVyIHR1cm4sIG9sZGVzdCBmaXJzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RBZ2VudE1vZGVDb252ZXJzYXRpb24oXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICBhZ2VudElkOiBzdHJpbmcsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHsgY29udGV4dD86IGRhdGFicmlja3MuQ29udGV4dExpa2UgfSA9IHt9LFxuKTogUHJvbWlzZTxHZW5pZU1lc3NhZ2VbXT4ge1xuICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0ID8gZGF0YWJyaWNrcy50b0NvbnRleHQob3B0aW9ucy5jb250ZXh0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaXRlbXM6IGFnZW50TW9kZVdpcmUuR2VuaWVBZ2VudE91dHB1dEl0ZW1bXSA9IFtdO1xuICBsZXQgYWZ0ZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IHN0YXR1cyA9IFwiY29tcGxldGVkXCI7XG4gIGRvIHtcbiAgICBjb25zdCBwYWdlID0gYWdlbnRNb2RlV2lyZS5HZW5pZUFnZW50Q29udmVyc2F0aW9uSXRlbXNTY2hlbWEucGFyc2UoXG4gICAgICBhd2FpdCBjbGllbnQuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRoOiBgL2FwaS8yLjAvZ2VuaWUvYWdlbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFnZW50SWQpfS9jb252ZXJzYXRpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnZlcnNhdGlvbklkKX0vaXRlbXNgLFxuICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7IGFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSksXG4gICAgICAgICAgcXVlcnk6IHsgbGltaXQ6IElURU1fUEFHRV9TSVpFLCBvcmRlcjogXCJhc2NcIiwgLi4uKGFmdGVyID8geyBhZnRlciB9IDoge30pIH0sXG4gICAgICAgICAgcmF3OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpdGVtcy5wdXNoKC4uLnBhZ2UuZGF0YSk7XG4gICAgc3RhdHVzID0gcGFnZS5zdGF0dXMgPz8gc3RhdHVzO1xuICAgIGFmdGVyID0gcGFnZS5oYXNfbW9yZSA/IHBhZ2UubGFzdF9pZCA6IHVuZGVmaW5lZDtcbiAgfSB3aGlsZSAoYWZ0ZXIpO1xuICByZXR1cm4gYWdlbnRNb2RlV2lyZS5wcm9qZWN0QWdlbnRNb2RlQ29udmVyc2F0aW9uKGFnZW50SWQsIGNvbnZlcnNhdGlvbklkLCBpdGVtcywgc3RhdHVzKTtcbn1cblxuLyoqIFJldHVybiB3aGV0aGVyIEFnZW50IE1vZGUgaXMgZGlzYWJsZWQgb3IgaXRzIHByZXZpZXcgdG9nZ2xlIGlzIHVuYXZhaWxhYmxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWdlbnRNb2RlVW5hdmFpbGFibGUodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgY29uc3QgY29udGV4dCA9IGVycm9yVXRpbHMuZXJyb3JDb250ZXh0KHZhbHVlKTtcbiAgcmV0dXJuIGNvbnRleHQuaGFzTWVzc2FnZShcImZlYXR1cmVcIiwgXCJkaXNhYmxlZFwiKSB8fCBjb250ZXh0Lmhhc01lc3NhZ2UoXCJwcmV2aWV3XCIsIFwidG9nZ2xlXCIpO1xufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4ge1xuICByZXR1cm4gb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUuZ2V0UmVhZGVyID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbmNlbFJlc3BvbnNlKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgYWdlbnRJZDogc3RyaW5nLFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICByZXNwb25zZUlkOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCBDQU5DRUxfVElNRU9VVF9NUyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBwYXRoOiBgL2FwaS8yLjAvZ2VuaWUvYWdlbnRzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGFnZW50SWQpfS9jb252ZXJzYXRpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvbnZlcnNhdGlvbklkKX0vcmVzcG9uc2VzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlc3BvbnNlSWQpfS9jYW5jZWxgLFxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7XG4gICAgICAgICAgYWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfSksXG4gICAgICAgIHJhdzogZmFsc2UsXG4gICAgICB9LFxuICAgICAgZGF0YWJyaWNrcy50b0NvbnRleHQoY29udHJvbGxlciksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwicmVzcG9uc2U6Y2FuY2VsLWZhaWxlZFwiLCB7XG4gICAgICBhZ2VudElkLFxuICAgICAgY29udmVyc2F0aW9uSWQsXG4gICAgICByZXNwb25zZUlkLFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnIpLFxuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiogcGFyc2VTc2UoXG4gIHN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4sXG4pOiBBc3luY0dlbmVyYXRvcjxHZW5pZUFnZW50TW9kZUV2ZW50LCB2b2lkLCB2b2lkPiB7XG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBsZXQgYnVmZmVyID0gXCJcIjtcbiAgdHJ5IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06ICFkb25lIH0pO1xuICAgICAgY29uc3QgZnJhbWVzID0gYnVmZmVyLnNwbGl0KC9cXHI/XFxuXFxyP1xcbi8pO1xuICAgICAgYnVmZmVyID0gZnJhbWVzLnBvcCgpID8/IFwiXCI7XG4gICAgICBmb3IgKGNvbnN0IGZyYW1lIG9mIGZyYW1lcykge1xuICAgICAgICBjb25zdCBldmVudCA9IHBhcnNlU3NlRnJhbWUoZnJhbWUpO1xuICAgICAgICBpZiAoZXZlbnQpIHlpZWxkIGV2ZW50O1xuICAgICAgfVxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBwYXJzZVNzZUZyYW1lKGJ1ZmZlcik7XG4gICAgICAgIGlmIChldmVudCkgeWllbGQgZXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICByZWFkZXIucmVsZWFzZUxvY2soKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVNzZUZyYW1lKGZyYW1lOiBzdHJpbmcpOiBHZW5pZUFnZW50TW9kZUV2ZW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGF0YSA9IGZyYW1lXG4gICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnN0YXJ0c1dpdGgoXCJkYXRhOlwiKSlcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnNsaWNlKDUpLnRyaW1TdGFydCgpKVxuICAgIC5qb2luKFwiXFxuXCIpO1xuICBpZiAoIWRhdGEgfHwgZGF0YSA9PT0gXCJbRE9ORV1cIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGFnZW50TW9kZVdpcmUuR2VuaWVBZ2VudE1vZGVFdmVudFNjaGVtYS5wYXJzZShqc29uLnBhcnNlKGRhdGEpKTtcbn1cbiJdfQ==
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
package/lib/src/chat.d.ts CHANGED
@@ -41,6 +41,8 @@ export interface GenieChatOptions {
41
41
  agentModeFallback?: boolean;
42
42
  /** Ask Agent Mode to generate visualizations when appropriate. */
43
43
  enableVisualization?: boolean;
44
+ /** Original user text projected into Agent Mode snapshots when `content` is augmented. */
45
+ displayContent?: string;
44
46
  /**
45
47
  * Continue an existing conversation. Agent Mode sends it as
46
48
  * `conversation_id`; legacy polling passes it to `createMessage`. Read the id
package/lib/src/chat.js CHANGED
@@ -100,6 +100,7 @@ export async function* genieChat(space_id, content, options) {
100
100
  for await (const message of genieAgentModeChat(client, space_id, content, {
101
101
  ...(options?.conversationId ? { conversationId: options.conversationId } : {}),
102
102
  ...(options?.enableVisualization ? { enableVisualization: true } : {}),
103
+ ...(options?.displayContent ? { displayContent: options.displayContent } : {}),
103
104
  context: ctx,
104
105
  })) {
105
106
  yielded = true;
@@ -282,4 +283,4 @@ async function getWorkspaceClient(options) {
282
283
  }
283
284
  return createWorkspaceClient();
284
285
  }
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBRUgsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixtQkFBbUIsR0FFcEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFvQixNQUFNLHdCQUF3QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUEwQyxNQUFNLHlCQUF5QixDQUFDO0FBRXBHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFeEM7Ozs7Ozs7R0FPRztBQUNILFNBQVMsZUFBZSxDQUFDLEdBQWlCO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUQsSUFBSSxNQUFNLENBQUMsT0FBTztRQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztJQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFO1FBQ3ZDLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNO0tBQ25DLENBQUMsQ0FBQztJQUNILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQXlDRCwwRUFBMEU7QUFFMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUNHO0FBQ0gsTUFBTSxDQUFDLEtBQUss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QUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTzthQUN6QixDQUFDO1lBQ0YsZUFBZSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDO1FBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDOUIsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNO2dCQUNKLElBQUksRUFBRSxRQUFRO2dCQUNkLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtnQkFDMUIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO2dCQUN4QyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7Z0JBQzlCLE1BQU07Z0JBQ04sT0FBTzthQUNSLENBQUM7UUFDSixDQUFDO1FBQ0QsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUNyQixDQUFDO0FBQ0gsQ0FBQztBQUVELDBFQUEwRTtBQUUxRTs7Ozs7OztHQU9HO0FBQ0gsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE9BQTBCO0lBQzFELElBQUksT0FBTyxFQUFFLGVBQWU7UUFBRSxPQUFPLE9BQU8sQ0FBQyxlQUFlLENBQUM7SUFDN0QsSUFBSSxDQUFDO1FBQ0gsT0FBTyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUN0QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asc0VBQXNFO0lBQ3hFLENBQUM7SUFDRCxPQUFPLHFCQUFxQixFQUFFLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuaWUgY2hhdCBkcml2ZXIuXG4gKlxuICogRHJpdmVzIGEgc2luZ2xlIHR1cm4gYWdhaW5zdCBhIEdlbmllIHNwYWNlIGZyb20gb25lIGBjb250ZW50YCBzdHJpbmc7XG4gKiBtdWx0aS10dXJuIGNvbnZlcnNhdGlvbnMgYXJlIHRoZSBjYWxsZXIncyBqb2IgKHRocmVhZCB0aGUgYGNvbnZlcnNhdGlvbl9pZGBcbiAqIHJldHVybmVkIG9uIGVhY2ggYEdlbmllTWVzc2FnZWAgYmFjayBpbnRvIHRoZSBuZXh0IHR1cm4nc1xuICogYG9wdGlvbnMuY29udmVyc2F0aW9uSWRgKS5cbiAqXG4gKiBBZ2VudCBNb2RlIFNTRSBpcyB0aGUgZGVmYXVsdCB0cmFuc3BvcnQuIEl0cyBSZXNwb25zZXMtc3R5bGUgcmVhc29uaW5nLCBTUUwsXG4gKiBxdWVyeSBvdXRwdXQsIGFuZCBmaW5hbCBhbnN3ZXIgaXRlbXMgYXJlIHByb2plY3RlZCBpbnRvIGBHZW5pZU1lc3NhZ2VgXG4gKiBzbmFwc2hvdHM7IGBhZ2VudE1vZGU6IGZhbHNlYCByZXRhaW5zIHRoZSBDb252ZXJzYXRpb24gQVBJIHBvbGxpbmcgcGF0aC5cbiAqXG4gKiBUd28gbGF5ZXJzIHNlcnZlIHR3byBraW5kcyBvZiBjb25zdW1lci4gVGhlIGxvdy1sZXZlbCBsYXllciB5aWVsZHMgZXZlcnlcbiAqIG9ic2VydmVkIGBHZW5pZU1lc3NhZ2VgICh2YWxpZGF0ZWQgYWdhaW5zdCBgR2VuaWVNZXNzYWdlU2NoZW1hYCwgZmFsbGluZyBiYWNrXG4gKiB0byB0aGUgcmF3IHNuYXBzaG90IG9uIGEgc2NoZW1hIG1pc3MpIGFuZCBvd25zIGNhbmNlbGxhdGlvbiwgY29udmVyc2F0aW9uXG4gKiBzZWVkaW5nLCBkaXN0aW5jdC1maWx0ZXJpbmcsIGFuZCBTREsgcXVpcmtzOyByZWFjaCBmb3IgaXQgd2hlbiB5b3Ugd2FudCB0aGVcbiAqIHJhdyBzdHJlYW0uIFRoZVxuICogaGlnaC1sZXZlbCBsYXllciB3cmFwcyBpdCBhbmQgZW1pdHMgc2VtYW50aWMsIGRlZHVwbGljYXRlZCBgeyB0eXBlLCBwYXlsb2FkIH1gXG4gKiBldmVudHMgKHNlZSB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9KSwgYWx3YXlzIGNsb3NpbmcgYSBzdWNjZXNzZnVsIHR1cm4gd2l0aCBhXG4gKiB0ZXJtaW5hbCBgcmVzdWx0YCBldmVudCBjYXJyeWluZyB0aGUgZmluYWwgYEdlbmllTWVzc2FnZWA7IGVycm9ycyBwcm9wYWdhdGVcbiAqIGJ5IHRocm93aW5nLCB3aXRoIG5vIGBlcnJvcmAgdmFyaWFudC4gSXRlcmF0aW5nIFVJIC8gYWdlbnQgY29kZSB0aGF0IHdhbnRzXG4gKiBldmVyeSBtZXNzYWdlIHZlcmJhdGltIHRha2VzIHRoZSBsb3ctbGV2ZWwgc3RyZWFtOyBzdWJzY3JpYmVycyByZWFjdGluZyB0b1xuICogXCJHZW5pZSBpcyB0aGlua2luZyBhYm91dCBYXCIgb3IgXCJHZW5pZSBwcm9kdWNlZCB0ZXh0IFlcIiB0YWtlIHRoZSBldmVudCBsYXllci5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHtcbiAgY3JlYXRlV29ya3NwYWNlQ2xpZW50LFxuICBnZXRFeGVjdXRpb25Db250ZXh0LFxuICB0eXBlIFdvcmtzcGFjZUNsaWVudCxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZGF0YWJyaWNrcyB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgYXN5bmNVdGlscywgZXJyb3JVdGlscywgbG9nLCB0eXBlIFBvbGxDb250ZXh0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGV2ZW50LCBnZW5pZU1vZGVsLCB0eXBlIEdlbmllQ2hhdEV2ZW50LCB0eXBlIEdlbmllTWVzc2FnZSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuXG5pbXBvcnQgeyBnZW5pZUFnZW50TW9kZUNoYXQsIGlzQWdlbnRNb2RlVW5hdmFpbGFibGUgfSBmcm9tIFwiLi9hZ2VudC1tb2RlLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJnZW5pZS9jaGF0XCIpO1xuXG4vKipcbiAqIFZhbGlkYXRlIGEgcG9sbGVkIHdpcmUgc25hcHNob3QgYWdhaW5zdCB7QGxpbmsgR2VuaWVNZXNzYWdlU2NoZW1hfVxuICogYW5kIHJldHVybiB0aGUgc2NoZW1hLW5vcm1hbGl6ZWQgbWVzc2FnZS4gR2VuaWUncyB3aXJlIG9jY2FzaW9uYWxseSBzaGlwcyBhXG4gKiBzaGFwZSB0aGUgKFNESy1kZXJpdmVkKSBzY2hlbWEgZG9lc24ndCBtb2RlbCBleGFjdGx5IC0gZS5nLiBhbiBlYXJseSBwb2xsXG4gKiB0aGF0IG9taXRzIHRoZSBTREstcmVxdWlyZWQgYG1lc3NhZ2VfaWRgIC0gc28gYSBtaXNzIGRlZ3JhZGVzIHRvIHRoZSByYXdcbiAqIHNuYXBzaG90IHJhdGhlciB0aGFuIHRocm93aW5nLCBrZWVwaW5nIGEgc2luZ2xlIG9kZCBwb2xsIGZyb20gYWJvcnRpbmcgdGhlXG4gKiB3aG9sZSB0dXJuLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU1lc3NhZ2UocmF3OiBHZW5pZU1lc3NhZ2UpOiBHZW5pZU1lc3NhZ2Uge1xuICBjb25zdCByZXN1bHQgPSBnZW5pZU1vZGVsLkdlbmllTWVzc2FnZVNjaGVtYS5zYWZlUGFyc2UocmF3KTtcbiAgaWYgKHJlc3VsdC5zdWNjZXNzKSByZXR1cm4gcmVzdWx0LmRhdGE7XG4gIGxvZ2dlci5kZWJ1ZyhcIndpcmUtbWVzc2FnZTpzY2hlbWEtbWlzc1wiLCB7XG4gICAgbWVzc2FnZV9pZDogcmF3Lm1lc3NhZ2VfaWQgPz8gcmF3LmlkLFxuICAgIGlzc3VlczogcmVzdWx0LmVycm9yLmlzc3Vlcy5sZW5ndGgsXG4gIH0pO1xuICByZXR1cm4gcmF3O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzaGFyZWQgb3B0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKiogT3B0aW9ucyBhY2NlcHRlZCBieSBib3RoIHtAbGluayBnZW5pZUNoYXR9IGFuZCB7QGxpbmsgZ2VuaWVFdmVudENoYXR9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5pZUNoYXRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVzZSB0aGUgc3RyZWFtaW5nIEdlbmllIEFnZW50IE1vZGUgQVBJLiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldCBgZmFsc2VgIHRvXG4gICAqIGZvcmNlIHRoZSBsZWdhY3kgc3RhcnQvY3JlYXRlL2dldC1tZXNzYWdlIHBvbGxpbmcgZmxvdy5cbiAgICovXG4gIGFnZW50TW9kZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBGYWxsIGJhY2sgdG8gQ29udmVyc2F0aW9uIEFQSSBwb2xsaW5nIHdoZW4gQWdlbnQgTW9kZSBpcyB1bmF2YWlsYWJsZS5cbiAgICogRGVmYXVsdHMgdG8gYHRydWVgOyBzZXQgYGZhbHNlYCB3aGVuIHRoZSBjYWxsZXIgcmVxdWlyZXMgQWdlbnQgTW9kZS5cbiAgICovXG4gIGFnZW50TW9kZUZhbGxiYWNrPzogYm9vbGVhbjtcbiAgLyoqIEFzayBBZ2VudCBNb2RlIHRvIGdlbmVyYXRlIHZpc3VhbGl6YXRpb25zIHdoZW4gYXBwcm9wcmlhdGUuICovXG4gIGVuYWJsZVZpc3VhbGl6YXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29udGludWUgYW4gZXhpc3RpbmcgY29udmVyc2F0aW9uLiBBZ2VudCBNb2RlIHNlbmRzIGl0IGFzXG4gICAqIGBjb252ZXJzYXRpb25faWRgOyBsZWdhY3kgcG9sbGluZyBwYXNzZXMgaXQgdG8gYGNyZWF0ZU1lc3NhZ2VgLiBSZWFkIHRoZSBpZFxuICAgKiBmcm9tIHRoZSBwcmlvciB0dXJuJ3MgdGVybWluYWwgYEdlbmllTWVzc2FnZWAgb3IgYHJlc3VsdGAgZXZlbnQuXG4gICAqL1xuICBjb252ZXJzYXRpb25JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEV4cGxpY2l0IGBXb3Jrc3BhY2VDbGllbnRgLiBEZWZhdWx0cyB0byBBcHBLaXQncyBwZXItcmVxdWVzdFxuICAgKiBleGVjdXRpb24tY29udGV4dCBjbGllbnQgd2hlbiBBcHBLaXQgaXMgaW5zdGFsbGVkIGFuZCB3ZSdyZSBpbnNpZGUgYVxuICAgKiByZXF1ZXN0OyBmYWxscyBiYWNrIHRvIGBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoKWAgKGRlZmF1bHQgYXV0aClcbiAgICogb3RoZXJ3aXNlLlxuICAgKi9cbiAgd29ya3NwYWNlQ2xpZW50PzogV29ya3NwYWNlQ2xpZW50O1xuICAvKiogTGVnYWN5IGZhbGxiYWNrIGNhZGVuY2UgYmV0d2VlbiBzdWNjZXNzaXZlIGBnZXRNZXNzYWdlYCBjYWxscyAoZGVmYXVsdCA1MDBtcykuICovXG4gIHBvbGxJbnRlcnZhbE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogRXh0ZXJuYWwgY2FuY2VsbGF0aW9uLiBBY2NlcHRzIGEgV0hBVFdHIGBBYm9ydFNpZ25hbGAgb3IgYSBmdWxseS1idWlsdCBTREtcbiAgICogYENvbnRleHRgIChzZWUgYGRhdGFicmlja3MuQ29udGV4dExpa2VgKS4gQWJvcnRpbmcgaXQgY2FuY2VscyBldmVyeSBpbi1mbGlnaHRcbiAgICogQWdlbnQgTW9kZSBzdHJlYW0sIFNESyBjYWxsLCBhbmQgdGhlIG5leHQgaW50ZXItcG9sbCBzbGVlcC5cbiAgICovXG4gIGNvbnRleHQ/OiBkYXRhYnJpY2tzLkNvbnRleHRMaWtlO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBsb3ctbGV2ZWw6IGdlbmllQ2hhdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIE9uZSB0dXJuIGFnYWluc3QgYSBHZW5pZSBzcGFjZSwgeWllbGRlZCBhcyBhIHN0cmVhbSBvZiBgR2VuaWVNZXNzYWdlYFxuICogc25hcHNob3RzLlxuICpcbiAqIFR1cm4gbGlmZWN5Y2xlOlxuICpcbiAqICAgLSBBZ2VudCBNb2RlIChkZWZhdWx0KTogUE9TVCBvbmUgUmVzcG9uc2VzLXN0eWxlIG1lc3NhZ2UgdG9cbiAqICAgICBgL2FwaS8yLjAvZ2VuaWUvYWdlbnRzL3tpZH0vcmVzcG9uc2VzYCBhbmQgeWllbGQgcHJvamVjdGVkIHNuYXBzaG90cyBmcm9tXG4gKiAgICAgaXRzIFNTRSBldmVudHMuXG4gKiAgIC0gTGVnYWN5IHBvbGxpbmcgKGBhZ2VudE1vZGU6IGZhbHNlYCk6IHN0YXJ0L2NyZWF0ZSBhIENvbnZlcnNhdGlvbiBBUElcbiAqICAgICBtZXNzYWdlIGFuZCBwb2xsIGBnZXRNZXNzYWdlYCB1bnRpbCB0ZXJtaW5hbC5cbiAqICAgLSBBIHByZS1zdHJlYW0gYEZFQVRVUkVfRElTQUJMRURgIG9yIHByZXZpZXctdG9nZ2xlIHJlc3BvbnNlIGZhbGxzIGJhY2sgdG9cbiAqICAgICBsZWdhY3kgcG9sbGluZyBhdXRvbWF0aWNhbGx5LlxuICpcbiAqIENhbmNlbGxhdGlvbjogYSBzaW5nbGUgaW50ZXJuYWwgYEFib3J0Q29udHJvbGxlcmAgY292ZXJzIHRoZSB3aG9sZSB0dXJuLlxuICogYG9wdGlvbnMuY29udGV4dGAgaXMgdGllZCBpbnRvIHRoYXQgY29udHJvbGxlciBzbyBhbiBleHRlcm5hbCBhYm9ydCB0ZWFyc1xuICogZG93biB0aGUgQWdlbnQgTW9kZSBTU0UgY29ubmVjdGlvbiwgU0RLIGNhbGxzLCBhbmQgYW55IGludGVyLXBvbGwgc2xlZXAuXG4gKiBCcmVha2luZyBvdXQgb2YgdGhlIGBmb3IgYXdhaXRgIGFsc28gaW52b2tlcyB0aGUgQWdlbnQgTW9kZSBzZXJ2ZXItc2lkZVxuICogY2FuY2VsIGVuZHBvaW50IGJlZm9yZSB0aGUgZ2VuZXJhdG9yIGNsb3Nlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2luZ2xlIHR1cm4uXG4gKiBmb3IgYXdhaXQgKGNvbnN0IG0gb2YgZ2VuaWVDaGF0KHNwYWNlSWQsIFwiVG9wIDUgc3RvcmVzP1wiKSkge1xuICogICByZW5kZXIobSk7XG4gKiB9XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE11bHRpLXR1cm46IGNhbGxlciB0aHJlYWRzIHRoZSBjb252ZXJzYXRpb24gaWQuXG4gKiBsZXQgY29udmVyc2F0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAqIGZvciAoY29uc3QgcXVlc3Rpb24gb2YgcXVlc3Rpb25zKSB7XG4gKiAgIGZvciBhd2FpdCAoY29uc3QgbSBvZiBnZW5pZUNoYXQoc3BhY2VJZCwgcXVlc3Rpb24sIHsgY29udmVyc2F0aW9uSWQgfSkpIHtcbiAqICAgICBjb252ZXJzYXRpb25JZCA9IG0uY29udmVyc2F0aW9uX2lkID8/IGNvbnZlcnNhdGlvbklkO1xuICogICAgIHJlbmRlcihtKTtcbiAqICAgfVxuICogfVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGdlbmllQ2hhdChcbiAgc3BhY2VfaWQ6IHN0cmluZyxcbiAgY29udGVudDogc3RyaW5nLFxuICBvcHRpb25zPzogR2VuaWVDaGF0T3B0aW9ucyxcbik6IEFzeW5jR2VuZXJhdG9yPEdlbmllTWVzc2FnZSwgdm9pZCwgdm9pZD4ge1xuICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICB0cnkge1xuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGdldFdvcmtzcGFjZUNsaWVudChvcHRpb25zKTtcbiAgICAvLyBCdWlsZCB0aGUgU0RLIENvbnRleHQgT05DRS4gQnVpbGRpbmcgaXQgaW5zaWRlIHRoZSBwb2xsIHByb2R1Y2VyIHdvdWxkXG4gICAgLy8gcmUtYXR0YWNoIGFuIGFib3J0IGxpc3RlbmVyIHRvIGBvcHRpb25zLmNvbnRleHRgIG9uIGV2ZXJ5IHBvbGwgaXRlcmF0aW9uXG4gICAgLy8gKHZpYSBgZGF0YWJyaWNrcy50b0NvbnRleHRgIC0+IGBhc3luYy50aWVBYm9ydFNpZ25hbGApLCBldmVudHVhbGx5IHRyaXBwaW5nXG4gICAgLy8gTm9kZSdzIGBNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmdgLlxuICAgIGNvbnN0IGN0eCA9IGRhdGFicmlja3MudG9Db250ZXh0KGNvbnRyb2xsZXIsIG9wdGlvbnM/LmNvbnRleHQpO1xuICAgIGlmIChvcHRpb25zPy5hZ2VudE1vZGUgIT09IGZhbHNlKSB7XG4gICAgICBsZXQgeWllbGRlZCA9IGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBtZXNzYWdlIG9mIGdlbmllQWdlbnRNb2RlQ2hhdChjbGllbnQsIHNwYWNlX2lkLCBjb250ZW50LCB7XG4gICAgICAgICAgLi4uKG9wdGlvbnM/LmNvbnZlcnNhdGlvbklkID8geyBjb252ZXJzYXRpb25JZDogb3B0aW9ucy5jb252ZXJzYXRpb25JZCB9IDoge30pLFxuICAgICAgICAgIC4uLihvcHRpb25zPy5lbmFibGVWaXN1YWxpemF0aW9uID8geyBlbmFibGVWaXN1YWxpemF0aW9uOiB0cnVlIH0gOiB7fSksXG4gICAgICAgICAgY29udGV4dDogY3R4LFxuICAgICAgICB9KSkge1xuICAgICAgICAgIHlpZWxkZWQgPSB0cnVlO1xuICAgICAgICAgIHlpZWxkIHZhbGlkYXRlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmFnZW50TW9kZUZhbGxiYWNrID09PSBmYWxzZSB8fCB5aWVsZGVkIHx8ICFpc0FnZW50TW9kZVVuYXZhaWxhYmxlKGVycikpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLndhcm4oXCJhZ2VudC1tb2RlOnVuYXZhaWxhYmxlLCBmYWxsaW5nIGJhY2sgdG8gcG9sbGluZ1wiLCB7XG4gICAgICAgICAgc3BhY2VfaWQsXG4gICAgICAgICAgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnIpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGNvbnZlcnNhdGlvbklkID0gb3B0aW9ucz8uY29udmVyc2F0aW9uSWQ7XG4gICAgbGV0IG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcG9sbFByb2R1Y2VyID0gYXN5bmMgKHBvbGxDdHg6IFBvbGxDb250ZXh0PEdlbmllTWVzc2FnZT4pOiBQcm9taXNlPEdlbmllTWVzc2FnZT4gPT4ge1xuICAgICAgaWYgKCFjb252ZXJzYXRpb25JZCkge1xuICAgICAgICAvLyBGaXJzdCBwb2xsOiBvcGVuIHRoZSBjb252ZXJzYXRpb24uIFJlZnVzZSB0byByZXRyeTogaWZcbiAgICAgICAgLy8gYHN0YXJ0Q29udmVyc2F0aW9uYCByZXR1cm5lZCBhIHJlc3BvbnNlIHdpdGhvdXQgYSBgY29udmVyc2F0aW9uX2lkYCxcbiAgICAgICAgLy8gcmV0cnlpbmcgd291bGQganVzdCBvcGVuIGNvbnZlcnNhdGlvbiBhZnRlciBjb252ZXJzYXRpb24uXG4gICAgICAgIGlmIChwb2xsQ3R4LmF0dGVtcHQgPiAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuaWUgZGlkIG5vdCByZXR1cm4gYSBjb252ZXJzYXRpb24gaWQ7IHJlZnVzaW5nIHRvIHJldHJ5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0UmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2VuaWUuc3RhcnRDb252ZXJzYXRpb24oeyBzcGFjZV9pZCwgY29udGVudCB9LCBjdHgpO1xuICAgICAgICBjb252ZXJzYXRpb25JZCA9IHN0YXJ0UmVzcG9uc2UuY29udmVyc2F0aW9uX2lkO1xuICAgICAgICBtZXNzYWdlSWQgPSBzdGFydFJlc3BvbnNlLm1lc3NhZ2VfaWQ7XG4gICAgICAgIHJldHVybiBzdGFydFJlc3BvbnNlLm1lc3NhZ2UhO1xuICAgICAgfVxuICAgICAgaWYgKCFtZXNzYWdlSWQpIHtcbiAgICAgICAgLy8gRmlyc3QgcG9sbCBvZiBhIGZvbGxvdy11cCB0dXJuOiBhcHBlbmQgdG8gdGhlIHNlZWRlZCBjb252ZXJzYXRpb24uXG4gICAgICAgIC8vIGBjbGllbnQuZ2VuaWUuY3JlYXRlTWVzc2FnZWAgcmV0dXJucyBhIGBXYWl0ZXI8R2VuaWVNZXNzYWdlPmBcbiAgICAgICAgLy8gKGB7IC4uLm1lc3NhZ2UsIHdhaXQ6IGFzeW5jICgpID0+IC4uLiB9YCkuIFN0cmlwIGB3YWl0YCBoZXJlIHNvXG4gICAgICAgIC8vIGRvd25zdHJlYW0gc2VyaWFsaXplcnMgKGUuZy4geWFtbC5zdHJpbmdpZnkpIGRvbid0IGNob2tlIG9uIHRoZVxuICAgICAgICAvLyBBc3luY0Z1bmN0aW9uIHZhbHVlLlxuICAgICAgICBjb25zdCB7IHdhaXQ6IF93YWl0LCAuLi5jcmVhdGVSZXNwb25zZSB9ID0gYXdhaXQgY2xpZW50LmdlbmllLmNyZWF0ZU1lc3NhZ2UoXG4gICAgICAgICAgeyBzcGFjZV9pZCwgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCwgY29udGVudCB9LFxuICAgICAgICAgIGN0eCxcbiAgICAgICAgKTtcbiAgICAgICAgbWVzc2FnZUlkID0gY3JlYXRlUmVzcG9uc2UubWVzc2FnZV9pZDtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlO1xuICAgICAgfVxuICAgICAgLy8gU3Vic2VxdWVudCBwb2xsczogcmUtZmV0Y2ggdGhlIGN1cnJlbnQgbWVzc2FnZSB1bnRpbCBpdHMgc3RhdHVzIGJlY29tZXNcbiAgICAgIC8vIHRlcm1pbmFsLlxuICAgICAgcmV0dXJuIGNsaWVudC5nZW5pZS5nZXRNZXNzYWdlKFxuICAgICAgICB7XG4gICAgICAgICAgc3BhY2VfaWQsXG4gICAgICAgICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgICAgICAgICBtZXNzYWdlX2lkOiBtZXNzYWdlSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGN0eCxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIHlpZWxkKiBhc3luY1V0aWxzLnBvbGwoXG4gICAgICBhc3luYyAocG9sbEN0eDogUG9sbENvbnRleHQ8R2VuaWVNZXNzYWdlPikgPT4gdmFsaWRhdGVNZXNzYWdlKGF3YWl0IHBvbGxQcm9kdWNlcihwb2xsQ3R4KSksXG4gICAgICB7XG4gICAgICAgIGludGVydmFsTXM6IG9wdGlvbnM/LnBvbGxJbnRlcnZhbE1zID8/IDUwMCxcbiAgICAgICAgLy8gU2tpcCB5aWVsZGluZyBpZGVudGljYWwgY29uc2VjdXRpdmUgc25hcHNob3RzOyBHZW5pZSBvZnRlbiByZXR1cm5zXG4gICAgICAgIC8vIHRoZSBleGFjdCBzYW1lIHBheWxvYWQgdHdpY2UgZHVyaW5nIHF1aWV0IHBlcmlvZHMuIGBwb2xsYCBkb2VzIGEgZGVlcFxuICAgICAgICAvLyBlcXVhbCBvbiB0aGUgcHJldmlvdXMgeWllbGQuXG4gICAgICAgIGZpbHRlcjogXCJkaXN0aW5jdFwiLFxuICAgICAgICAvLyBTdG9wIGFmdGVyIHRoZSB0ZXJtaW5hbCBtZXNzYWdlIGlzIHlpZWxkZWQuIGBwb2xsYCBjaGVja3MgdGhlXG4gICAgICAgIC8vIHByZWRpY2F0ZSBBRlRFUiB5aWVsZGluZywgc28gdGhlIHRlcm1pbmFsIG1lc3NhZ2Ugc3RpbGwgcmVhY2hlcyB0aGVcbiAgICAgICAgLy8gY29uc3VtZXIuXG4gICAgICAgIHByZWRpY2F0ZTogKG0pID0+ICFnZW5pZU1vZGVsLmlzVGVybWluYWxTdGF0dXMobS5zdGF0dXMpLFxuICAgICAgICAvLyBXYWtlIHRoZSBpbnRlci1wb2xsIHNsZWVwIG9uIGFib3J0IHNvIGEgYGZvciBhd2FpdGAgYnJlYWsgKG9yXG4gICAgICAgIC8vIGV4dGVybmFsIGFib3J0KSB0ZWFycyBkb3duIHByb21wdGx5IGluc3RlYWQgb2Ygd2FpdGluZyBvdXQgdGhlXG4gICAgICAgIC8vIGludGVydmFsLlxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSxcbiAgICApO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIENhbmNlbHMgYW55IHN0aWxsLXBlbmRpbmcgU0RLIGNhbGwgYW5kIHRoZSBpbnRlci1wb2xsIHNsZWVwIHdoZXRoZXIgd2UncmVcbiAgICAvLyB1bndpbmRpbmcgZnJvbSBhIG5vcm1hbCByZXR1cm4sIGEgY29uc3VtZXIgYnJlYWssIG9yIGEgdGhyb3duIGVycm9yLlxuICAgIC8vIElkZW1wb3RlbnQuXG4gICAgY29udHJvbGxlci5hYm9ydCgpO1xuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGlnaC1sZXZlbDogZ2VuaWVFdmVudENoYXQgLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogT25lIHR1cm4gYWdhaW5zdCBhIEdlbmllIHNwYWNlLCB5aWVsZGVkIGFzIGEgdHlwZWQge0BsaW5rIEdlbmllQ2hhdEV2ZW50fVxuICogc3RyZWFtLiBEcml2ZXMge0BsaW5rIGdlbmllQ2hhdH0gdW5kZXJuZWF0aCBhbmQgZGVjb3JhdGVzIGVhY2ggc25hcHNob3Qgd2l0aFxuICogdGhlIGRlcml2ZWQgZXZlbnRzIHRoZSBmaWVsZC1sZXZlbCBkaWZmIHByb2R1Y2VkLiBTdHJlYW0gb3JkZXI6XG4gKlxuICogICAxLiBgeyB0eXBlOiBcIm1lc3NhZ2VcIiwgbWVzc2FnZSB9YCAtIHRoZSByYXcgYEdlbmllTWVzc2FnZWAsIG9uY2UgcGVyIHBvbGxcbiAqICAgICAgeWllbGQuXG4gKiAgIDIuIGB7IHR5cGU6IFwicXVlc3Rpb25cIiwgY29udGVudCwgbWVzc2FnZV9pZCwgLi4uIH1gIGZpcmVzIGV4YWN0bHkgb25jZSwgb25cbiAqICAgICAgdGhlIEZJUlNUIGBtZXNzYWdlYCB5aWVsZC4gV2UgcmVhZCBgY29udGVudGAgYW5kIGBtZXNzYWdlX2lkYCBzdHJhaWdodFxuICogICAgICBvZmYgdGhlIHNuYXBzaG90IHNvIGV2ZXJ5IGRvd25zdHJlYW0gZXZlbnQgZm9yIHRoaXMgdHVybiBzaGFyZXMgdGhlIHNhbWVcbiAqICAgICAgYG1lc3NhZ2VfaWRgICh0aGUgcXVlc3Rpb24gaW5jbHVkZWQpIC0gc3Vic2NyaWJlcnMgY2FuIGdyb3VwIGV2ZXJ5dGhpbmdcbiAqICAgICAgZm9yIG9uZSBHZW5pZSBjYWxsIHVuZGVyIHRoYXQgb25lIGtleS5cbiAqICAgMy4gQW55IG9mIGBzdGF0dXNgIC8gYGF0dGFjaG1lbnRgIC8gYHRoaW5raW5nYCAvIGB0ZXh0YCAvIGBxdWVyeWAgL1xuICogICAgICBgc3RhdGVtZW50YCAvIGByb3dzYCAvIGBzdWdnZXN0ZWRfcXVlc3Rpb25zYCB0aGUgZGlmZiBhZ2FpbnN0IHRoZSBwcmlvclxuICogICAgICBzbmFwc2hvdCBwcm9kdWNlZC5cbiAqICAgNC4gT24gdGhlIHRlcm1pbmFsIHNuYXBzaG90LCBgeyB0eXBlOiBcInJlc3VsdFwiLCAuLi4gfWAgYXMgdGhlIGZpbmFsIHlpZWxkLlxuICpcbiAqIEVycm9ycyBwcm9wYWdhdGUgYnkgdGhlIGdlbmVyYXRvciB0aHJvd2luZyAtIHRoZXJlJ3Mgbm8gYFwiZXJyb3JcImAgdmFyaWFudC5cbiAqIFdyYXAgdGhlIGBmb3IgYXdhaXRgIGluIGB0cnkvY2F0Y2hgIGlmIHlvdSBuZWVkIHRvIGhhbmRsZSBmYWlsdXJlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogZm9yIGF3YWl0IChjb25zdCBldnQgb2YgZ2VuaWVFdmVudENoYXQoc3BhY2VJZCwgXCJUb3Agc3RvcmVzP1wiKSkge1xuICogICBzd2l0Y2ggKGV2dC50eXBlKSB7XG4gKiAgICAgY2FzZSBcInRoaW5raW5nXCI6XG4gKiAgICAgICBjb25zb2xlLmxvZyhcIlt0aGlua2luZ11cIiwgZXZ0LnRob3VnaHRfdHlwZSwgZXZ0LnRleHQpO1xuICogICAgICAgYnJlYWs7XG4gKiAgICAgY2FzZSBcInRleHRcIjpcbiAqICAgICAgIGNvbnNvbGUubG9nKFwiW3RleHRdXCIsIGV2dC50ZXh0KTtcbiAqICAgICAgIGJyZWFrO1xuICogICAgIGNhc2UgXCJyZXN1bHRcIjpcbiAqICAgICAgIGNvbnNvbGUubG9nKFwiW2RvbmVdXCIsIGV2dC5zdGF0dXMpO1xuICogICAgICAgYnJlYWs7XG4gKiAgIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBnZW5pZUV2ZW50Q2hhdChcbiAgc3BhY2VfaWQ6IHN0cmluZyxcbiAgY29udGVudDogc3RyaW5nLFxuICBvcHRpb25zPzogR2VuaWVDaGF0T3B0aW9ucyxcbik6IEFzeW5jR2VuZXJhdG9yPEdlbmllQ2hhdEV2ZW50LCB2b2lkLCB2b2lkPiB7XG4gIC8vIERpZmYgc291cmNlIGZvciB0aGUgY3VycmVudCB0dXJuLiBBbHdheXMgYHVuZGVmaW5lZGAgb24gdGhlIGZpcnN0IHNuYXBzaG90XG4gIC8vIHNvIHRoZSBpbml0aWFsIHN0YXR1cyAvIGF0dGFjaG1lbnRzIGVtaXQgZnJlc2g7IHVwZGF0ZWQgdG8gdGhlIG1vc3QgcmVjZW50XG4gIC8vIHNuYXBzaG90IGFmdGVyIGVhY2ggeWllbGQuXG4gIGxldCBwcmV2aW91czogR2VuaWVNZXNzYWdlIHwgdW5kZWZpbmVkO1xuICAvLyBUaGUgYHF1ZXN0aW9uYCBldmVudCBpcyBkZWZlcnJlZCB0byB0aGUgZmlyc3QgYG1lc3NhZ2VgIHlpZWxkIHNvIGl0IGNhblxuICAvLyBjYXJyeSB0aGUgYXNzaWduZWQgYG1lc3NhZ2VfaWRgIChzdWJzY3JpYmVycyB1c2UgaXQgYXMgdGhlIGdyb3VwaW5nIGtleSBmb3JcbiAgLy8gZXZlcnkgZXZlbnQgaW4gdGhpcyB0dXJuKS4gVGhlIGZpcnN0IHNuYXBzaG90IGlzIHRoZSBlYXJsaWVzdCBwb2ludCB0aGF0IGlkXG4gIC8vIGV4aXN0cy5cbiAgbGV0IHF1ZXN0aW9uRW1pdHRlZCA9IGZhbHNlO1xuICBmb3IgYXdhaXQgKGNvbnN0IHJhd01lc3NhZ2Ugb2YgZ2VuaWVDaGF0KHNwYWNlX2lkLCBjb250ZW50LCBvcHRpb25zKSkge1xuICAgIC8vIE5vcm1hbGl6ZSBgbWVzc2FnZV9pZGAgZnJvbSB0aGUgbGVnYWN5IGBpZGAgZmllbGQgd2hlbiBHZW5pZSdzIHdpcmVcbiAgICAvLyByZXNwb25zZSBvbmx5IHBvcHVsYXRlcyBvbmUgb2YgdGhlbS4gVGhlIFNESyBzY2hlbWEgbWFya3MgYm90aCBhc1xuICAgIC8vIHJlcXVpcmVkLCBidXQgaW4gcHJhY3RpY2UgdGhlIGBzdGFydENvbnZlcnNhdGlvbmAgLyBgY3JlYXRlTWVzc2FnZWAgaW5uZXJcbiAgICAvLyBgbWVzc2FnZWAgcGF5bG9hZCBzb21ldGltZXMgc2hpcHMgb25seSBgaWRgIHdoaWxlIHRoZSBuZXcgYG1lc3NhZ2VfaWRgXG4gICAgLy8gZmllbGQgbGFuZHMgdW5kZWZpbmVkLiBFdmVyeSBkb3duc3RyZWFtIGV2ZW50IGRldGVjdG9yIGtleXMgZ3JvdXBpbmcgb2ZmXG4gICAgLy8gYG1lc3NhZ2VfaWRgOyB0aGUgZmFsbGJhY2sga2VlcHMgb25lIEdlbmllIHR1cm4ncyBldmVudHMgZnJvbSBzcGxpdHRpbmdcbiAgICAvLyBhY3Jvc3MgYW4gYW5vbiBncm91cCArIHRoZSByZWFsLWlkIGdyb3VwIHdoZW4gc3Vic2NyaWJlcnMgYnVja2V0IGJ5XG4gICAgLy8gYG1lc3NhZ2VfaWRgLlxuICAgIGNvbnN0IG1lc3NhZ2U6IEdlbmllTWVzc2FnZSA9IHJhd01lc3NhZ2UubWVzc2FnZV9pZFxuICAgICAgPyByYXdNZXNzYWdlXG4gICAgICA6IHsgLi4ucmF3TWVzc2FnZSwgbWVzc2FnZV9pZDogcmF3TWVzc2FnZS5pZCB9O1xuICAgIHlpZWxkIHtcbiAgICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgICAgc3BhY2VfaWQ6IG1lc3NhZ2Uuc3BhY2VfaWQsXG4gICAgICBtZXNzYWdlX2lkOiBtZXNzYWdlLm1lc3NhZ2VfaWQsXG4gICAgICBtZXNzYWdlLFxuICAgIH07XG4gICAgaWYgKCFxdWVzdGlvbkVtaXR0ZWQpIHtcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgdHlwZTogXCJxdWVzdGlvblwiLFxuICAgICAgICBzcGFjZV9pZDogbWVzc2FnZS5zcGFjZV9pZCxcbiAgICAgICAgLi4uKG1lc3NhZ2UuY29udmVyc2F0aW9uX2lkID8geyBjb252ZXJzYXRpb25faWQ6IG1lc3NhZ2UuY29udmVyc2F0aW9uX2lkIH0gOiB7fSksXG4gICAgICAgIC4uLihtZXNzYWdlLm1lc3NhZ2VfaWQgPyB7IG1lc3NhZ2VfaWQ6IG1lc3NhZ2UubWVzc2FnZV9pZCB9IDoge30pLFxuICAgICAgICBjb250ZW50OiBtZXNzYWdlLmNvbnRlbnQsXG4gICAgICB9O1xuICAgICAgcXVlc3Rpb25FbWl0dGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgeWllbGQqIGV2ZW50LmV2ZW50c0Zyb21NZXNzYWdlKG1lc3NhZ2UsIHByZXZpb3VzLCBtZXNzYWdlLnNwYWNlX2lkKTtcbiAgICBjb25zdCBzdGF0dXMgPSBtZXNzYWdlLnN0YXR1cztcbiAgICBpZiAoZ2VuaWVNb2RlbC5pc1Rlcm1pbmFsU3RhdHVzKHN0YXR1cykpIHtcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgdHlwZTogXCJyZXN1bHRcIixcbiAgICAgICAgc3BhY2VfaWQ6IG1lc3NhZ2Uuc3BhY2VfaWQsXG4gICAgICAgIGNvbnZlcnNhdGlvbl9pZDogbWVzc2FnZS5jb252ZXJzYXRpb25faWQsXG4gICAgICAgIG1lc3NhZ2VfaWQ6IG1lc3NhZ2UubWVzc2FnZV9pZCxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcHJldmlvdXMgPSBtZXNzYWdlO1xuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gd29ya3NwYWNlIGNsaWVudCBoZWxwZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogUmVzb2x2ZSBhIGBXb3Jrc3BhY2VDbGllbnRgIGluIHRoaXMgcHJlZmVyZW5jZSBvcmRlcjpcbiAqXG4gKiAgIDEuIENhbGxlci1zdXBwbGllZCBgb3B0aW9ucy53b3Jrc3BhY2VDbGllbnRgLlxuICogICAyLiBBcHBLaXQncyBwZXItcmVxdWVzdCBleGVjdXRpb24tY29udGV4dCBjbGllbnQgaW5zaWRlIGEgcmVxdWVzdCBzY29wZS5cbiAqICAgMy4gRnJlc2ggbmF0aXZlIEFwcEtpdCBgY3JlYXRlV29ya3NwYWNlQ2xpZW50KClgLlxuICpcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0V29ya3NwYWNlQ2xpZW50KG9wdGlvbnM/OiBHZW5pZUNoYXRPcHRpb25zKTogUHJvbWlzZTxXb3Jrc3BhY2VDbGllbnQ+IHtcbiAgaWYgKG9wdGlvbnM/LndvcmtzcGFjZUNsaWVudCkgcmV0dXJuIG9wdGlvbnMud29ya3NwYWNlQ2xpZW50O1xuICB0cnkge1xuICAgIHJldHVybiBnZXRFeGVjdXRpb25Db250ZXh0KCkuY2xpZW50O1xuICB9IGNhdGNoIHtcbiAgICAvLyBOb3QgaW5zaWRlIGFuIEFwcEtpdCByZXF1ZXN0IGNvbnRleHQ7IGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGF1dGguXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpO1xufVxuIl19
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=
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Genie message feedback for chat-mode and agent-mode conversations.
3
+ *
4
+ * @module
5
+ */
6
+ import { type WorkspaceClient } from "@databricks/appkit";
7
+ import { databricks } from "@dbx-tools/appkit";
8
+ import { type GenieMessageFeedbackRequest } from "@dbx-tools/shared-genie";
9
+ /** Options for one identity-scoped Genie feedback write. */
10
+ export interface SendGenieMessageFeedbackOptions {
11
+ /** Workspace client whose identity submits the feedback. */
12
+ workspaceClient?: WorkspaceClient;
13
+ /** External cancellation. */
14
+ context?: databricks.ContextLike;
15
+ }
16
+ /** Send rating and optional comment directly to one Genie message. */
17
+ export declare function sendGenieMessageFeedback(input: GenieMessageFeedbackRequest, options?: SendGenieMessageFeedbackOptions): Promise<void>;
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Genie message feedback for chat-mode and agent-mode conversations.
3
+ *
4
+ * @module
5
+ */
6
+ import { createWorkspaceClient } from "@databricks/appkit";
7
+ import { databricks } from "@dbx-tools/appkit";
8
+ import { genieModel } from "@dbx-tools/shared-genie";
9
+ /** Send rating and optional comment directly to one Genie message. */
10
+ export async function sendGenieMessageFeedback(input, options) {
11
+ const request = genieModel.GenieMessageFeedbackRequestSchema.parse(input);
12
+ const client = options?.workspaceClient ?? createWorkspaceClient();
13
+ const context = options?.context ? databricks.toContext(options.context) : undefined;
14
+ await client.apiClient.request({
15
+ path: `/api/2.0/genie/spaces/${encodeURIComponent(request.space_id)}/conversations/${encodeURIComponent(request.conversation_id)}/messages/${encodeURIComponent(request.message_id)}/feedback`,
16
+ method: "POST",
17
+ payload: {
18
+ rating: request.rating,
19
+ ...(request.comment ? { comment: request.comment } : {}),
20
+ },
21
+ headers: new Headers(),
22
+ raw: false,
23
+ }, context);
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZGJhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmVlZGJhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBb0MsTUFBTSx5QkFBeUIsQ0FBQztBQVV2RixzRUFBc0U7QUFDdEUsTUFBTSxDQUFDLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsS0FBa0MsRUFDbEMsT0FBeUM7SUFFekMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLGlDQUFpQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRSxNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsZUFBZSxJQUFJLHFCQUFxQixFQUFFLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQUcsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNyRixNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUM1QjtRQUNFLElBQUksRUFBRSx5QkFBeUIsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0Isa0JBQWtCLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxhQUFhLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVztRQUM5TCxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRTtZQUNQLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDekQ7UUFDRCxPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUU7UUFDdEIsR0FBRyxFQUFFLEtBQUs7S0FDWCxFQUNELE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuaWUgbWVzc2FnZSBmZWVkYmFjayBmb3IgY2hhdC1tb2RlIGFuZCBhZ2VudC1tb2RlIGNvbnZlcnNhdGlvbnMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCwgdHlwZSBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBnZW5pZU1vZGVsLCB0eXBlIEdlbmllTWVzc2FnZUZlZWRiYWNrUmVxdWVzdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuXG4vKiogT3B0aW9ucyBmb3Igb25lIGlkZW50aXR5LXNjb3BlZCBHZW5pZSBmZWVkYmFjayB3cml0ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZEdlbmllTWVzc2FnZUZlZWRiYWNrT3B0aW9ucyB7XG4gIC8qKiBXb3Jrc3BhY2UgY2xpZW50IHdob3NlIGlkZW50aXR5IHN1Ym1pdHMgdGhlIGZlZWRiYWNrLiAqL1xuICB3b3Jrc3BhY2VDbGllbnQ/OiBXb3Jrc3BhY2VDbGllbnQ7XG4gIC8qKiBFeHRlcm5hbCBjYW5jZWxsYXRpb24uICovXG4gIGNvbnRleHQ/OiBkYXRhYnJpY2tzLkNvbnRleHRMaWtlO1xufVxuXG4vKiogU2VuZCByYXRpbmcgYW5kIG9wdGlvbmFsIGNvbW1lbnQgZGlyZWN0bHkgdG8gb25lIEdlbmllIG1lc3NhZ2UuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZEdlbmllTWVzc2FnZUZlZWRiYWNrKFxuICBpbnB1dDogR2VuaWVNZXNzYWdlRmVlZGJhY2tSZXF1ZXN0LFxuICBvcHRpb25zPzogU2VuZEdlbmllTWVzc2FnZUZlZWRiYWNrT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXF1ZXN0ID0gZ2VuaWVNb2RlbC5HZW5pZU1lc3NhZ2VGZWVkYmFja1JlcXVlc3RTY2hlbWEucGFyc2UoaW5wdXQpO1xuICBjb25zdCBjbGllbnQgPSBvcHRpb25zPy53b3Jrc3BhY2VDbGllbnQgPz8gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCk7XG4gIGNvbnN0IGNvbnRleHQgPSBvcHRpb25zPy5jb250ZXh0ID8gZGF0YWJyaWNrcy50b0NvbnRleHQob3B0aW9ucy5jb250ZXh0KSA6IHVuZGVmaW5lZDtcbiAgYXdhaXQgY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgIHtcbiAgICAgIHBhdGg6IGAvYXBpLzIuMC9nZW5pZS9zcGFjZXMvJHtlbmNvZGVVUklDb21wb25lbnQocmVxdWVzdC5zcGFjZV9pZCl9L2NvbnZlcnNhdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQocmVxdWVzdC5jb252ZXJzYXRpb25faWQpfS9tZXNzYWdlcy8ke2VuY29kZVVSSUNvbXBvbmVudChyZXF1ZXN0Lm1lc3NhZ2VfaWQpfS9mZWVkYmFja2AsXG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgcGF5bG9hZDoge1xuICAgICAgICByYXRpbmc6IHJlcXVlc3QucmF0aW5nLFxuICAgICAgICAuLi4ocmVxdWVzdC5jb21tZW50ID8geyBjb21tZW50OiByZXF1ZXN0LmNvbW1lbnQgfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycygpLFxuICAgICAgcmF3OiBmYWxzZSxcbiAgICB9LFxuICAgIGNvbnRleHQsXG4gICk7XG59XG4iXX0=
@@ -22,7 +22,7 @@
22
22
  */
23
23
  import { type WorkspaceClient } from "@databricks/appkit";
24
24
  import { databricks } from "@dbx-tools/appkit";
25
- import { type GenieSpace } from "@dbx-tools/shared-genie";
25
+ import { type CreateGenieSpaceRequest, type GenieSpace } from "@dbx-tools/shared-genie";
26
26
  /** Options for {@link getGenieSpace}. */
27
27
  export interface GetGenieSpaceOptions {
28
28
  /**
@@ -47,6 +47,15 @@ export interface GetGenieSpaceOptions {
47
47
  */
48
48
  context?: databricks.ContextLike;
49
49
  }
50
+ /** Options for creating a Genie space with explicit workspace identity. */
51
+ export interface CreateGenieSpaceOptions {
52
+ /** Workspace client whose identity owns the new space. */
53
+ workspaceClient?: WorkspaceClient;
54
+ /** External cancellation. */
55
+ context?: databricks.ContextLike;
56
+ }
57
+ /** Create a Genie space from one validated serialized definition. */
58
+ export declare function createGenieSpace(input: CreateGenieSpaceRequest, options?: CreateGenieSpaceOptions): Promise<GenieSpace>;
50
59
  /**
51
60
  * Fetch a Genie space by id, optionally including its serialized definition.
52
61
  * Hits `GET /api/2.0/genie/spaces/<id>` with `include_serialized_space=true`
package/lib/src/space.js CHANGED
@@ -25,6 +25,20 @@ import { databricks } from "@dbx-tools/appkit";
25
25
  import { errorUtils, json, log, object, stringUtils } from "@dbx-tools/shared-core";
26
26
  import { genieModel } from "@dbx-tools/shared-genie";
27
27
  const logger = log.logger("genie/space");
28
+ /** Create a Genie space from one validated serialized definition. */
29
+ export async function createGenieSpace(input, options) {
30
+ const request = genieModel.CreateGenieSpaceRequestSchema.parse(input);
31
+ const client = options?.workspaceClient ?? createWorkspaceClient();
32
+ const context = options?.context ? databricks.toContext(options.context) : undefined;
33
+ const raw = await client.apiClient.request({
34
+ path: "/api/2.0/genie/spaces",
35
+ method: "POST",
36
+ payload: request,
37
+ headers: new Headers(),
38
+ raw: false,
39
+ }, context);
40
+ return genieModel.GenieSpaceSchema.parse(raw);
41
+ }
28
42
  /**
29
43
  * Fetch a Genie space by id, optionally including its serialized definition.
30
44
  * Hits `GET /api/2.0/genie/spaces/<id>` with `include_serialized_space=true`
@@ -106,4 +120,4 @@ export function genieSampleQuestions(space) {
106
120
  .distinct(),
107
121
  ];
108
122
  }
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFtQixNQUFNLHlCQUF5QixDQUFDO0FBRXRFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUEyQnpDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsT0FBZSxFQUNmLE9BQThCO0lBRTlCLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxlQUFlLElBQUkscUJBQXFCLEVBQUUsQ0FBQztJQUNuRSxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxLQUFLLEtBQUssQ0FBQztJQUNqRCxNQUFNLEdBQUcsR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2pGLE1BQU0sT0FBTyxHQUFHLENBQUMsaUJBQTBCLEVBQW9CLEVBQUUsQ0FDL0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQ3RCO1FBQ0UsSUFBSSxFQUFFLHlCQUF5QixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUM1RCxNQUFNLEVBQUUsS0FBSztRQUNiLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsRSxPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUU7UUFDdEIsR0FBRyxFQUFFLEtBQUs7S0FDWCxFQUNELEdBQUcsQ0FDSixDQUFDO0lBRUosSUFBSSxHQUFZLENBQUM7SUFDakIsSUFBSSxDQUFDO1FBQ0gsR0FBRyxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQztZQUFFLE1BQU0sR0FBRyxDQUFDO1FBQy9ELE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUU7WUFDekMsT0FBTztZQUNQLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztTQUMvQixDQUFDLENBQUM7UUFDSCxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDBCQUEwQixDQUFDLEdBQVk7SUFDOUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxPQUFPLENBQ0wsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUM7UUFDMUIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztRQUN2QyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUMvQixDQUFDO0FBQ0osQ0FBQztBQVlEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBaUI7SUFDcEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0lBQzFDLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE1BQU0sZUFBZSxHQUFJLE1BQTZELEVBQUUsTUFBTTtRQUM1RixFQUFFLGdCQUFnQixDQUFDO0lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRS9DLE9BQU87UUFDTCxHQUFHLE1BQU07YUFDTixRQUFRLENBQUMsZUFBNkMsQ0FBQzthQUN2RCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzFELE9BQU8sRUFBRTthQUNULFFBQVEsRUFBRTtLQUNkLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5pZSBzcGFjZSBtZXRhZGF0YSBoZWxwZXJzLlxuICpcbiAqIEZldGNoZXMgYSBHZW5pZSBzcGFjZSdzIGRlZmluaXRpb24gKGluY2x1ZGluZyB0aGUgb3B0LWluIGBzZXJpYWxpemVkX3NwYWNlYFxuICogYmxvYikgYW5kIGV4dHJhY3RzIHRoZSBjdXJhdGVkIHN0YXJ0ZXIgcXVlc3Rpb25zIGFuIGF1dGhvciBjb25maWd1cmVkIG9uIHRoZVxuICogc3BhY2UuIFRoZSB0eXBlZCBTREsgYGNsaWVudC5nZW5pZS5nZXRTcGFjZWAgb25seSByZXR1cm5zIHRoZVxuICogZGlyZWN0b3J5LWxpc3Rpbmcgc3VyZmFjZSAoYHRpdGxlYCAvIGBkZXNjcmlwdGlvbmAgLyBgd2FyZWhvdXNlX2lkYCk7IHRoZVxuICogc2FtcGxlIHF1ZXN0aW9ucyBsaXZlIGluc2lkZSBgc2VyaWFsaXplZF9zcGFjZWAsIHdoaWNoIHRoZSBSRVNUIEFQSSByZXR1cm5zXG4gKiBvbmx5IHdoZW4gYGluY2x1ZGVfc2VyaWFsaXplZF9zcGFjZT10cnVlYC4gV2UgaGl0IHRoYXQgZW5kcG9pbnQgdGhyb3VnaCB0aGVcbiAqIHdvcmtzcGFjZSBjbGllbnQncyByYXcgYGFwaUNsaWVudGAgc2luY2UgdGhlIHR5cGVkIHJlcXVlc3Qgc2hhcGUgaGFzIG5vIGZsYWdcbiAqIGZvciBpdC5cbiAqXG4gKiBUaGUgc2VyaWFsaXplZCBibG9iIGlzIGFsc28gbW9yZSBwcml2aWxlZ2VkIHRoYW4gdGhlIGxpc3Rpbmcgc3VyZmFjZTogdGhlXG4gKiB3b3Jrc3BhY2UgQVBJIHJlcXVpcmVzIGBDYW4gRWRpdGAgb24gdGhlIHNwYWNlIHRvIHJldHVybiBpdCwgd2hpbGUgYENhbiBSdW5gXG4gKiBpcyBlbm91Z2ggZm9yIHRpdGxlIC8gZGVzY3JpcHRpb24uIEEgY2FsbGVyIHRoYXQgb25seSBob2xkcyBgQ2FuIFJ1bmAgLSBhblxuICogYXBwIHNlcnZpY2UgcHJpbmNpcGFsIGdyYW50ZWQganVzdCBlbm91Z2ggdG8gYXNrIHF1ZXN0aW9ucyBpcyB0aGUgY29tbW9uIGNhc2VcbiAqIC0gd291bGQgb3RoZXJ3aXNlIGxvc2UgdGhlIHdob2xlIHNwYWNlIGxvb2t1cCB0byBhIGBQRVJNSVNTSU9OX0RFTklFRGAgaXRcbiAqIGNhbm5vdCBhY3Qgb24sIHNvIHRoZSBmZXRjaCBkZWdyYWRlcyB0byB0aGUgdW5zZXJpYWxpemVkIHJlcXVlc3QgaW5zdGVhZCBvZlxuICogZmFpbGluZyAoc2VlIHtAbGluayBnZXRHZW5pZVNwYWNlfSkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCwgdHlwZSBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBqc29uLCBsb2csIG9iamVjdCwgc3RyaW5nVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZ2VuaWVNb2RlbCwgdHlwZSBHZW5pZVNwYWNlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmllXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJnZW5pZS9zcGFjZVwiKTtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRHZW5pZVNwYWNlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0R2VuaWVTcGFjZU9wdGlvbnMge1xuICAvKipcbiAgICogRXhwbGljaXQgYFdvcmtzcGFjZUNsaWVudGAuIERlZmF1bHRzIHRvIGBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoKWBcbiAgICogKGVudi12YXIgYXV0aCkuIFNlcnZlciBjYWxsZXJzIHNob3VsZCBwYXNzIHRoZWlyIE9CTy1zY29wZWQgY2xpZW50IHNvIHRoZVxuICAgKiBsb29rdXAgcnVucyBhcyB0aGUgdXNlci5cbiAgICovXG4gIHdvcmtzcGFjZUNsaWVudD86IFdvcmtzcGFjZUNsaWVudDtcbiAgLyoqXG4gICAqIFJlcXVlc3QgdGhlIGBzZXJpYWxpemVkX3NwYWNlYCBibG9iIChjYXRhbG9ncywgdGFibGVzLCBzYW1wbGUgcXVlc3Rpb25zLFxuICAgKiBwcm9tcHRzKS4gRGVmYXVsdHMgdG8gYHRydWVgIC0gdGhlIG9ubHkgcmVhc29uIHRvIHNraXAgaXQgaXMgd2hlbiB0aGVcbiAgICogY2FsbGVyIGp1c3QgbmVlZHMgdGl0bGUgLyBkZXNjcmlwdGlvbiBhbmQgd2FudHMgdGhlIHNtYWxsZXIgcGF5bG9hZC5cbiAgICpcbiAgICogUmVxdWVzdGluZyBpdCBpcyBiZXN0LWVmZm9ydDogdGhlIGJsb2IgbmVlZHMgYENhbiBFZGl0YCBvbiB0aGUgc3BhY2UsIHNvIGFcbiAgICogY2FsbGVyIHdpdGhvdXQgaXQgZ2V0cyB0aGUgdW5zZXJpYWxpemVkIHNwYWNlIGJhY2sgcmF0aGVyIHRoYW4gYW4gZXJyb3IsXG4gICAqIGFuZCB7QGxpbmsgZ2VuaWVTYW1wbGVRdWVzdGlvbnN9IHRoZW4gcmVwb3J0cyBubyBzdWdnZXN0aW9ucy5cbiAgICovXG4gIHNlcmlhbGl6ZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRXh0ZXJuYWwgY2FuY2VsbGF0aW9uLiBBY2NlcHRzIGEgV0hBVFdHIGBBYm9ydFNpZ25hbGAgb3IgYSBmdWxseS1idWlsdCBTREtcbiAgICogYENvbnRleHRgIChzZWUgYGRhdGFicmlja3MuQ29udGV4dExpa2VgKS5cbiAgICovXG4gIGNvbnRleHQ/OiBkYXRhYnJpY2tzLkNvbnRleHRMaWtlO1xufVxuXG4vKipcbiAqIEZldGNoIGEgR2VuaWUgc3BhY2UgYnkgaWQsIG9wdGlvbmFsbHkgaW5jbHVkaW5nIGl0cyBzZXJpYWxpemVkIGRlZmluaXRpb24uXG4gKiBIaXRzIGBHRVQgL2FwaS8yLjAvZ2VuaWUvc3BhY2VzLzxpZD5gIHdpdGggYGluY2x1ZGVfc2VyaWFsaXplZF9zcGFjZT10cnVlYFxuICogdGhyb3VnaCB0aGUgcmF3IGBhcGlDbGllbnRgLCB0aGVuIHZhbGlkYXRlcyB0aGUgcmVzcG9uc2UgYWdhaW5zdFxuICoge0BsaW5rIEdlbmllU3BhY2VTY2hlbWF9ICh1bmtub3duIGZpZWxkcyBsaWtlIGBldGFnYCAvXG4gKiBgcGFyZW50X3BhdGhgIGFyZSBzdHJpcHBlZCkuXG4gKlxuICogV2hlbiB0aGUgc2VyaWFsaXplZCByZXF1ZXN0IGlzIHJlamVjdGVkIGZvciBsYWNrIG9mIHBlcm1pc3Npb24gKGA0MDNgLCBvciBhXG4gKiBgUEVSTUlTU0lPTl9ERU5JRURgIC8gYENhbiBFZGl0YCBtZXNzYWdlIC0gdGhlIHdvcmtzcGFjZSBBUEkgZ2F0ZXMgdGhlIGJsb2JcbiAqIGJlaGluZCBgQ2FuIEVkaXRgKSwgaXQgcmV0cmllcyBvbmNlIHdpdGhvdXQgdGhlIGZsYWcgc28gdGhlIGNhbGxlciBzdGlsbCBnZXRzXG4gKiB0aGUgc3BhY2UuIEFueSBvdGhlciBmYWlsdXJlLCBhbmQgYSByZXRyeSB0aGF0IGZhaWxzIHRvbywgaXMgcmV0aHJvd246IGFcbiAqIGNhbmNlbGxlZCByZXF1ZXN0IG9yIGEgbWlzc2luZyBzcGFjZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gdW5zZXJpYWxpemVkXG4gKiBzcGFjZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEdlbmllU3BhY2UoXG4gIHNwYWNlSWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IEdldEdlbmllU3BhY2VPcHRpb25zLFxuKTogUHJvbWlzZTxHZW5pZVNwYWNlPiB7XG4gIGNvbnN0IGNsaWVudCA9IG9wdGlvbnM/LndvcmtzcGFjZUNsaWVudCA/PyBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoKTtcbiAgY29uc3Qgc2VyaWFsaXplZCA9IG9wdGlvbnM/LnNlcmlhbGl6ZWQgIT09IGZhbHNlO1xuICBjb25zdCBjdHggPSBvcHRpb25zPy5jb250ZXh0ID8gZGF0YWJyaWNrcy50b0NvbnRleHQob3B0aW9ucy5jb250ZXh0KSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgcmVxdWVzdCA9IChpbmNsdWRlU2VyaWFsaXplZDogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4gPT5cbiAgICBjbGllbnQuYXBpQ2xpZW50LnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIHBhdGg6IGAvYXBpLzIuMC9nZW5pZS9zcGFjZXMvJHtlbmNvZGVVUklDb21wb25lbnQoc3BhY2VJZCl9YCxcbiAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICBxdWVyeTogaW5jbHVkZVNlcmlhbGl6ZWQgPyB7IGluY2x1ZGVfc2VyaWFsaXplZF9zcGFjZTogdHJ1ZSB9IDoge30sXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKCksXG4gICAgICAgIHJhdzogZmFsc2UsXG4gICAgICB9LFxuICAgICAgY3R4LFxuICAgICk7XG5cbiAgbGV0IHJhdzogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICByYXcgPSBhd2FpdCByZXF1ZXN0KHNlcmlhbGl6ZWQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoIXNlcmlhbGl6ZWQgfHwgIWlzU2VyaWFsaXplZFNwYWNlRm9yYmlkZGVuKGVycikpIHRocm93IGVycjtcbiAgICBsb2dnZXIuZGVidWcoXCJzZXJpYWxpemVkLXNwYWNlOmZvcmJpZGRlblwiLCB7XG4gICAgICBzcGFjZUlkLFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnIpLFxuICAgIH0pO1xuICAgIHJhdyA9IGF3YWl0IHJlcXVlc3QoZmFsc2UpO1xuICB9XG4gIHJldHVybiBnZW5pZU1vZGVsLkdlbmllU3BhY2VTY2hlbWEucGFyc2UocmF3KTtcbn1cblxuLyoqXG4gKiBUcnVlIHdoZW4gYSBmYWlsZWQgc3BhY2UgcmVxdWVzdCB3YXMgcmVqZWN0ZWQgZm9yIGxhY2sgb2YgcGVybWlzc2lvbiwgdGhlIG9uZVxuICogZmFpbHVyZSB0aGUgdW5zZXJpYWxpemVkIHJldHJ5IGNhbiByZWNvdmVyIGZyb20uIE1hdGNoZXMgb24gYDQwM2AgYW5kIG9uIHRoZVxuICogYFBFUk1JU1NJT05fREVOSUVEYCAvIGBDYW4gRWRpdGAgd29yZGluZyB0aGUgd29ya3NwYWNlIEFQSSByZXR1cm5zLCBzaW5jZSB0aGVcbiAqIFNESyBzdXJmYWNlcyB0aGUgZXJyb3IgY29kZSB3aXRob3V0IGFsd2F5cyBjYXJyeWluZyBhIHN0YXR1cy5cbiAqL1xuZnVuY3Rpb24gaXNTZXJpYWxpemVkU3BhY2VGb3JiaWRkZW4oZXJyOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbnRleHQgPSBlcnJvclV0aWxzLmVycm9yQ29udGV4dChlcnIpO1xuICByZXR1cm4gKFxuICAgIGNvbnRleHQuaGFzU3RhdHVzQ29kZSg0MDMpIHx8XG4gICAgY29udGV4dC5oYXNNZXNzYWdlKFwicGVybWlzc2lvbiBkZW5pZWRcIikgfHxcbiAgICBjb250ZXh0Lmhhc01lc3NhZ2UoXCJjYW4gZWRpdFwiKVxuICApO1xufVxuXG4vKipcbiAqIE9uZSBlbnRyeSBpbiBhIHNlcmlhbGl6ZWQgc3BhY2UncyBgY29uZmlnLnNhbXBsZV9xdWVzdGlvbnNgLiBUaGVcbiAqIGF1dGhvci1mYWNpbmcgZmllbGQgaXMgYHF1ZXN0aW9uYCwgd2hpY2ggdGhlIHdpcmUgZm9ybWF0IG1vZGVscyBhcyBhIHN0cmluZ1xuICogYXJyYXkgKGEgc2luZ2xlIG11bHRpLWxpbmUgcXVlc3Rpb24gaXMgc3BsaXQgYWNyb3NzIGVudHJpZXMpOyB3ZSB0cmVhdCB0aGVcbiAqIGZpcnN0IG5vbi1lbXB0eSBlbnRyeSBhcyB0aGUgZGlzcGxheWFibGUgcXVlc3Rpb24gdGV4dC5cbiAqL1xuaW50ZXJmYWNlIFNlcmlhbGl6ZWRTYW1wbGVRdWVzdGlvbiB7XG4gIHF1ZXN0aW9uPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRoZSBjdXJhdGVkIHN0YXJ0ZXIgcXVlc3Rpb25zIGFuIGF1dGhvciBjb25maWd1cmVkIG9uIGEgR2VuaWUgc3BhY2UuXG4gKiBSZWFkcyBgc2VyaWFsaXplZF9zcGFjZSAtPiBjb25maWcuc2FtcGxlX3F1ZXN0aW9uc1sqXS5xdWVzdGlvbmAuIFJldHVybnMgYFtdYFxuICogd2hlbiB0aGUgc3BhY2UgY2FycmllcyBubyBzZXJpYWxpemVkIGJsb2IsIHRoZSBibG9iIGlzIHVucGFyc2VhYmxlLCBvciBub1xuICogc2FtcGxlIHF1ZXN0aW9ucyBhcmUgY29uZmlndXJlZCAtIHNvIGEgbWlzc2luZyBvciBtaXNjb25maWd1cmVkIHNwYWNlXG4gKiBkZWdyYWRlcyB0byBcIm5vIHN1Z2dlc3Rpb25zXCIgcmF0aGVyIHRoYW4gdGhyb3dpbmcuIE9yZGVyIGlzIHByZXNlcnZlZCAodGhlXG4gKiBhdXRob3IncyBvcmRlcmluZykgYW5kIGR1cGxpY2F0ZXMgYXJlIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5pZVNhbXBsZVF1ZXN0aW9ucyhzcGFjZTogR2VuaWVTcGFjZSk6IHN0cmluZ1tdIHtcbiAgY29uc3Qgc2VyaWFsaXplZCA9IHNwYWNlLnNlcmlhbGl6ZWRfc3BhY2U7XG4gIGlmICghc2VyaWFsaXplZCkgcmV0dXJuIFtdO1xuICBjb25zdCBwYXJzZWQgPSBqc29uLnBhcnNlKHNlcmlhbGl6ZWQpO1xuICBpZiAocGFyc2VkID09PSB1bmRlZmluZWQpIHtcbiAgICBsb2dnZXIud2FybihcInNlcmlhbGl6ZWQtc3BhY2U6cGFyc2UtZXJyb3JcIiwgeyBzcGFjZUlkOiBzcGFjZS5zcGFjZV9pZCB9KTtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3Qgc2FtcGxlUXVlc3Rpb25zID0gKHBhcnNlZCBhcyB7IGNvbmZpZz86IHsgc2FtcGxlX3F1ZXN0aW9ucz86IHVua25vd24gfSB9IHwgbnVsbCk/LmNvbmZpZ1xuICAgID8uc2FtcGxlX3F1ZXN0aW9ucztcbiAgaWYgKCFBcnJheS5pc0FycmF5KHNhbXBsZVF1ZXN0aW9ucykpIHJldHVybiBbXTtcblxuICByZXR1cm4gW1xuICAgIC4uLm9iamVjdFxuICAgICAgLnNlcXVlbmNlKHNhbXBsZVF1ZXN0aW9ucyBhcyBTZXJpYWxpemVkU2FtcGxlUXVlc3Rpb25bXSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBzdHJpbmdVdGlscy5maXJzdE5vbkVtcHR5KGVudHJ5Py5xdWVzdGlvbikpXG4gICAgICAubm9uTnVsbCgpXG4gICAgICAuZGlzdGluY3QoKSxcbiAgXTtcbn1cbiJdfQ==
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE9BQU8sRUFBRSxxQkFBcUIsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsVUFBVSxFQUFpRCxNQUFNLHlCQUF5QixDQUFDO0FBRXBHLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFtQ3pDLHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUNwQyxLQUE4QixFQUM5QixPQUFpQztJQUVqQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxlQUFlLElBQUkscUJBQXFCLEVBQUUsQ0FBQztJQUNuRSxNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JGLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQ3hDO1FBQ0UsSUFBSSxFQUFFLHVCQUF1QjtRQUM3QixNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLE9BQU8sRUFBRSxJQUFJLE9BQU8sRUFBRTtRQUN0QixHQUFHLEVBQUUsS0FBSztLQUNYLEVBQ0QsT0FBTyxDQUNSLENBQUM7SUFDRixPQUFPLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsT0FBZSxFQUNmLE9BQThCO0lBRTlCLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxlQUFlLElBQUkscUJBQXFCLEVBQUUsQ0FBQztJQUNuRSxNQUFNLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxLQUFLLEtBQUssQ0FBQztJQUNqRCxNQUFNLEdBQUcsR0FBRyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2pGLE1BQU0sT0FBTyxHQUFHLENBQUMsaUJBQTBCLEVBQW9CLEVBQUUsQ0FDL0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQ3RCO1FBQ0UsSUFBSSxFQUFFLHlCQUF5QixrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUM1RCxNQUFNLEVBQUUsS0FBSztRQUNiLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsRSxPQUFPLEVBQUUsSUFBSSxPQUFPLEVBQUU7UUFDdEIsR0FBRyxFQUFFLEtBQUs7S0FDWCxFQUNELEdBQUcsQ0FDSixDQUFDO0lBRUosSUFBSSxHQUFZLENBQUM7SUFDakIsSUFBSSxDQUFDO1FBQ0gsR0FBRyxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQztZQUFFLE1BQU0sR0FBRyxDQUFDO1FBQy9ELE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUU7WUFDekMsT0FBTztZQUNQLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztTQUMvQixDQUFDLENBQUM7UUFDSCxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLDBCQUEwQixDQUFDLEdBQVk7SUFDOUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxPQUFPLENBQ0wsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUM7UUFDMUIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztRQUN2QyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUMvQixDQUFDO0FBQ0osQ0FBQztBQVlEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBaUI7SUFDcEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0lBQzFDLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE1BQU0sZUFBZSxHQUFJLE1BQTZELEVBQUUsTUFBTTtRQUM1RixFQUFFLGdCQUFnQixDQUFDO0lBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRS9DLE9BQU87UUFDTCxHQUFHLE1BQU07YUFDTixRQUFRLENBQUMsZUFBNkMsQ0FBQzthQUN2RCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzFELE9BQU8sRUFBRTthQUNULFFBQVEsRUFBRTtLQUNkLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5pZSBzcGFjZSBtZXRhZGF0YSBoZWxwZXJzLlxuICpcbiAqIEZldGNoZXMgYSBHZW5pZSBzcGFjZSdzIGRlZmluaXRpb24gKGluY2x1ZGluZyB0aGUgb3B0LWluIGBzZXJpYWxpemVkX3NwYWNlYFxuICogYmxvYikgYW5kIGV4dHJhY3RzIHRoZSBjdXJhdGVkIHN0YXJ0ZXIgcXVlc3Rpb25zIGFuIGF1dGhvciBjb25maWd1cmVkIG9uIHRoZVxuICogc3BhY2UuIFRoZSB0eXBlZCBTREsgYGNsaWVudC5nZW5pZS5nZXRTcGFjZWAgb25seSByZXR1cm5zIHRoZVxuICogZGlyZWN0b3J5LWxpc3Rpbmcgc3VyZmFjZSAoYHRpdGxlYCAvIGBkZXNjcmlwdGlvbmAgLyBgd2FyZWhvdXNlX2lkYCk7IHRoZVxuICogc2FtcGxlIHF1ZXN0aW9ucyBsaXZlIGluc2lkZSBgc2VyaWFsaXplZF9zcGFjZWAsIHdoaWNoIHRoZSBSRVNUIEFQSSByZXR1cm5zXG4gKiBvbmx5IHdoZW4gYGluY2x1ZGVfc2VyaWFsaXplZF9zcGFjZT10cnVlYC4gV2UgaGl0IHRoYXQgZW5kcG9pbnQgdGhyb3VnaCB0aGVcbiAqIHdvcmtzcGFjZSBjbGllbnQncyByYXcgYGFwaUNsaWVudGAgc2luY2UgdGhlIHR5cGVkIHJlcXVlc3Qgc2hhcGUgaGFzIG5vIGZsYWdcbiAqIGZvciBpdC5cbiAqXG4gKiBUaGUgc2VyaWFsaXplZCBibG9iIGlzIGFsc28gbW9yZSBwcml2aWxlZ2VkIHRoYW4gdGhlIGxpc3Rpbmcgc3VyZmFjZTogdGhlXG4gKiB3b3Jrc3BhY2UgQVBJIHJlcXVpcmVzIGBDYW4gRWRpdGAgb24gdGhlIHNwYWNlIHRvIHJldHVybiBpdCwgd2hpbGUgYENhbiBSdW5gXG4gKiBpcyBlbm91Z2ggZm9yIHRpdGxlIC8gZGVzY3JpcHRpb24uIEEgY2FsbGVyIHRoYXQgb25seSBob2xkcyBgQ2FuIFJ1bmAgLSBhblxuICogYXBwIHNlcnZpY2UgcHJpbmNpcGFsIGdyYW50ZWQganVzdCBlbm91Z2ggdG8gYXNrIHF1ZXN0aW9ucyBpcyB0aGUgY29tbW9uIGNhc2VcbiAqIC0gd291bGQgb3RoZXJ3aXNlIGxvc2UgdGhlIHdob2xlIHNwYWNlIGxvb2t1cCB0byBhIGBQRVJNSVNTSU9OX0RFTklFRGAgaXRcbiAqIGNhbm5vdCBhY3Qgb24sIHNvIHRoZSBmZXRjaCBkZWdyYWRlcyB0byB0aGUgdW5zZXJpYWxpemVkIHJlcXVlc3QgaW5zdGVhZCBvZlxuICogZmFpbGluZyAoc2VlIHtAbGluayBnZXRHZW5pZVNwYWNlfSkuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCwgdHlwZSBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBqc29uLCBsb2csIG9iamVjdCwgc3RyaW5nVXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZ2VuaWVNb2RlbCwgdHlwZSBDcmVhdGVHZW5pZVNwYWNlUmVxdWVzdCwgdHlwZSBHZW5pZVNwYWNlIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmllXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJnZW5pZS9zcGFjZVwiKTtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRHZW5pZVNwYWNlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0R2VuaWVTcGFjZU9wdGlvbnMge1xuICAvKipcbiAgICogRXhwbGljaXQgYFdvcmtzcGFjZUNsaWVudGAuIERlZmF1bHRzIHRvIGBjcmVhdGVXb3Jrc3BhY2VDbGllbnQoKWBcbiAgICogKGVudi12YXIgYXV0aCkuIFNlcnZlciBjYWxsZXJzIHNob3VsZCBwYXNzIHRoZWlyIE9CTy1zY29wZWQgY2xpZW50IHNvIHRoZVxuICAgKiBsb29rdXAgcnVucyBhcyB0aGUgdXNlci5cbiAgICovXG4gIHdvcmtzcGFjZUNsaWVudD86IFdvcmtzcGFjZUNsaWVudDtcbiAgLyoqXG4gICAqIFJlcXVlc3QgdGhlIGBzZXJpYWxpemVkX3NwYWNlYCBibG9iIChjYXRhbG9ncywgdGFibGVzLCBzYW1wbGUgcXVlc3Rpb25zLFxuICAgKiBwcm9tcHRzKS4gRGVmYXVsdHMgdG8gYHRydWVgIC0gdGhlIG9ubHkgcmVhc29uIHRvIHNraXAgaXQgaXMgd2hlbiB0aGVcbiAgICogY2FsbGVyIGp1c3QgbmVlZHMgdGl0bGUgLyBkZXNjcmlwdGlvbiBhbmQgd2FudHMgdGhlIHNtYWxsZXIgcGF5bG9hZC5cbiAgICpcbiAgICogUmVxdWVzdGluZyBpdCBpcyBiZXN0LWVmZm9ydDogdGhlIGJsb2IgbmVlZHMgYENhbiBFZGl0YCBvbiB0aGUgc3BhY2UsIHNvIGFcbiAgICogY2FsbGVyIHdpdGhvdXQgaXQgZ2V0cyB0aGUgdW5zZXJpYWxpemVkIHNwYWNlIGJhY2sgcmF0aGVyIHRoYW4gYW4gZXJyb3IsXG4gICAqIGFuZCB7QGxpbmsgZ2VuaWVTYW1wbGVRdWVzdGlvbnN9IHRoZW4gcmVwb3J0cyBubyBzdWdnZXN0aW9ucy5cbiAgICovXG4gIHNlcmlhbGl6ZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRXh0ZXJuYWwgY2FuY2VsbGF0aW9uLiBBY2NlcHRzIGEgV0hBVFdHIGBBYm9ydFNpZ25hbGAgb3IgYSBmdWxseS1idWlsdCBTREtcbiAgICogYENvbnRleHRgIChzZWUgYGRhdGFicmlja3MuQ29udGV4dExpa2VgKS5cbiAgICovXG4gIGNvbnRleHQ/OiBkYXRhYnJpY2tzLkNvbnRleHRMaWtlO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBHZW5pZSBzcGFjZSB3aXRoIGV4cGxpY2l0IHdvcmtzcGFjZSBpZGVudGl0eS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlR2VuaWVTcGFjZU9wdGlvbnMge1xuICAvKiogV29ya3NwYWNlIGNsaWVudCB3aG9zZSBpZGVudGl0eSBvd25zIHRoZSBuZXcgc3BhY2UuICovXG4gIHdvcmtzcGFjZUNsaWVudD86IFdvcmtzcGFjZUNsaWVudDtcbiAgLyoqIEV4dGVybmFsIGNhbmNlbGxhdGlvbi4gKi9cbiAgY29udGV4dD86IGRhdGFicmlja3MuQ29udGV4dExpa2U7XG59XG5cbi8qKiBDcmVhdGUgYSBHZW5pZSBzcGFjZSBmcm9tIG9uZSB2YWxpZGF0ZWQgc2VyaWFsaXplZCBkZWZpbml0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUdlbmllU3BhY2UoXG4gIGlucHV0OiBDcmVhdGVHZW5pZVNwYWNlUmVxdWVzdCxcbiAgb3B0aW9ucz86IENyZWF0ZUdlbmllU3BhY2VPcHRpb25zLFxuKTogUHJvbWlzZTxHZW5pZVNwYWNlPiB7XG4gIGNvbnN0IHJlcXVlc3QgPSBnZW5pZU1vZGVsLkNyZWF0ZUdlbmllU3BhY2VSZXF1ZXN0U2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgY29uc3QgY2xpZW50ID0gb3B0aW9ucz8ud29ya3NwYWNlQ2xpZW50ID8/IGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpO1xuICBjb25zdCBjb250ZXh0ID0gb3B0aW9ucz8uY29udGV4dCA/IGRhdGFicmlja3MudG9Db250ZXh0KG9wdGlvbnMuY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJhdyA9IGF3YWl0IGNsaWVudC5hcGlDbGllbnQucmVxdWVzdChcbiAgICB7XG4gICAgICBwYXRoOiBcIi9hcGkvMi4wL2dlbmllL3NwYWNlc1wiLFxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIHBheWxvYWQ6IHJlcXVlc3QsXG4gICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycygpLFxuICAgICAgcmF3OiBmYWxzZSxcbiAgICB9LFxuICAgIGNvbnRleHQsXG4gICk7XG4gIHJldHVybiBnZW5pZU1vZGVsLkdlbmllU3BhY2VTY2hlbWEucGFyc2UocmF3KTtcbn1cblxuLyoqXG4gKiBGZXRjaCBhIEdlbmllIHNwYWNlIGJ5IGlkLCBvcHRpb25hbGx5IGluY2x1ZGluZyBpdHMgc2VyaWFsaXplZCBkZWZpbml0aW9uLlxuICogSGl0cyBgR0VUIC9hcGkvMi4wL2dlbmllL3NwYWNlcy88aWQ+YCB3aXRoIGBpbmNsdWRlX3NlcmlhbGl6ZWRfc3BhY2U9dHJ1ZWBcbiAqIHRocm91Z2ggdGhlIHJhdyBgYXBpQ2xpZW50YCwgdGhlbiB2YWxpZGF0ZXMgdGhlIHJlc3BvbnNlIGFnYWluc3RcbiAqIHtAbGluayBHZW5pZVNwYWNlU2NoZW1hfSAodW5rbm93biBmaWVsZHMgbGlrZSBgZXRhZ2AgL1xuICogYHBhcmVudF9wYXRoYCBhcmUgc3RyaXBwZWQpLlxuICpcbiAqIFdoZW4gdGhlIHNlcmlhbGl6ZWQgcmVxdWVzdCBpcyByZWplY3RlZCBmb3IgbGFjayBvZiBwZXJtaXNzaW9uIChgNDAzYCwgb3IgYVxuICogYFBFUk1JU1NJT05fREVOSUVEYCAvIGBDYW4gRWRpdGAgbWVzc2FnZSAtIHRoZSB3b3Jrc3BhY2UgQVBJIGdhdGVzIHRoZSBibG9iXG4gKiBiZWhpbmQgYENhbiBFZGl0YCksIGl0IHJldHJpZXMgb25jZSB3aXRob3V0IHRoZSBmbGFnIHNvIHRoZSBjYWxsZXIgc3RpbGwgZ2V0c1xuICogdGhlIHNwYWNlLiBBbnkgb3RoZXIgZmFpbHVyZSwgYW5kIGEgcmV0cnkgdGhhdCBmYWlscyB0b28sIGlzIHJldGhyb3duOiBhXG4gKiBjYW5jZWxsZWQgcmVxdWVzdCBvciBhIG1pc3Npbmcgc3BhY2UgbXVzdCBub3QgbG9vayBsaWtlIGFuIHVuc2VyaWFsaXplZFxuICogc3BhY2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRHZW5pZVNwYWNlKFxuICBzcGFjZUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBHZXRHZW5pZVNwYWNlT3B0aW9ucyxcbik6IFByb21pc2U8R2VuaWVTcGFjZT4ge1xuICBjb25zdCBjbGllbnQgPSBvcHRpb25zPy53b3Jrc3BhY2VDbGllbnQgPz8gY3JlYXRlV29ya3NwYWNlQ2xpZW50KCk7XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBvcHRpb25zPy5zZXJpYWxpemVkICE9PSBmYWxzZTtcbiAgY29uc3QgY3R4ID0gb3B0aW9ucz8uY29udGV4dCA/IGRhdGFicmlja3MudG9Db250ZXh0KG9wdGlvbnMuY29udGV4dCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlcXVlc3QgPSAoaW5jbHVkZVNlcmlhbGl6ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHVua25vd24+ID0+XG4gICAgY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBwYXRoOiBgL2FwaS8yLjAvZ2VuaWUvc3BhY2VzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHNwYWNlSWQpfWAsXG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgcXVlcnk6IGluY2x1ZGVTZXJpYWxpemVkID8geyBpbmNsdWRlX3NlcmlhbGl6ZWRfc3BhY2U6IHRydWUgfSA6IHt9LFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycygpLFxuICAgICAgICByYXc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGN0eCxcbiAgICApO1xuXG4gIGxldCByYXc6IHVua25vd247XG4gIHRyeSB7XG4gICAgcmF3ID0gYXdhaXQgcmVxdWVzdChzZXJpYWxpemVkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFzZXJpYWxpemVkIHx8ICFpc1NlcmlhbGl6ZWRTcGFjZUZvcmJpZGRlbihlcnIpKSB0aHJvdyBlcnI7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2VyaWFsaXplZC1zcGFjZTpmb3JiaWRkZW5cIiwge1xuICAgICAgc3BhY2VJZCxcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLnRvRXJyb3IoZXJyKSxcbiAgICB9KTtcbiAgICByYXcgPSBhd2FpdCByZXF1ZXN0KGZhbHNlKTtcbiAgfVxuICByZXR1cm4gZ2VuaWVNb2RlbC5HZW5pZVNwYWNlU2NoZW1hLnBhcnNlKHJhdyk7XG59XG5cbi8qKlxuICogVHJ1ZSB3aGVuIGEgZmFpbGVkIHNwYWNlIHJlcXVlc3Qgd2FzIHJlamVjdGVkIGZvciBsYWNrIG9mIHBlcm1pc3Npb24sIHRoZSBvbmVcbiAqIGZhaWx1cmUgdGhlIHVuc2VyaWFsaXplZCByZXRyeSBjYW4gcmVjb3ZlciBmcm9tLiBNYXRjaGVzIG9uIGA0MDNgIGFuZCBvbiB0aGVcbiAqIGBQRVJNSVNTSU9OX0RFTklFRGAgLyBgQ2FuIEVkaXRgIHdvcmRpbmcgdGhlIHdvcmtzcGFjZSBBUEkgcmV0dXJucywgc2luY2UgdGhlXG4gKiBTREsgc3VyZmFjZXMgdGhlIGVycm9yIGNvZGUgd2l0aG91dCBhbHdheXMgY2FycnlpbmcgYSBzdGF0dXMuXG4gKi9cbmZ1bmN0aW9uIGlzU2VyaWFsaXplZFNwYWNlRm9yYmlkZGVuKGVycjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBjb250ZXh0ID0gZXJyb3JVdGlscy5lcnJvckNvbnRleHQoZXJyKTtcbiAgcmV0dXJuIChcbiAgICBjb250ZXh0Lmhhc1N0YXR1c0NvZGUoNDAzKSB8fFxuICAgIGNvbnRleHQuaGFzTWVzc2FnZShcInBlcm1pc3Npb24gZGVuaWVkXCIpIHx8XG4gICAgY29udGV4dC5oYXNNZXNzYWdlKFwiY2FuIGVkaXRcIilcbiAgKTtcbn1cblxuLyoqXG4gKiBPbmUgZW50cnkgaW4gYSBzZXJpYWxpemVkIHNwYWNlJ3MgYGNvbmZpZy5zYW1wbGVfcXVlc3Rpb25zYC4gVGhlXG4gKiBhdXRob3ItZmFjaW5nIGZpZWxkIGlzIGBxdWVzdGlvbmAsIHdoaWNoIHRoZSB3aXJlIGZvcm1hdCBtb2RlbHMgYXMgYSBzdHJpbmdcbiAqIGFycmF5IChhIHNpbmdsZSBtdWx0aS1saW5lIHF1ZXN0aW9uIGlzIHNwbGl0IGFjcm9zcyBlbnRyaWVzKTsgd2UgdHJlYXQgdGhlXG4gKiBmaXJzdCBub24tZW1wdHkgZW50cnkgYXMgdGhlIGRpc3BsYXlhYmxlIHF1ZXN0aW9uIHRleHQuXG4gKi9cbmludGVyZmFjZSBTZXJpYWxpemVkU2FtcGxlUXVlc3Rpb24ge1xuICBxdWVzdGlvbj86IHVua25vd247XG59XG5cbi8qKlxuICogRXh0cmFjdCB0aGUgY3VyYXRlZCBzdGFydGVyIHF1ZXN0aW9ucyBhbiBhdXRob3IgY29uZmlndXJlZCBvbiBhIEdlbmllIHNwYWNlLlxuICogUmVhZHMgYHNlcmlhbGl6ZWRfc3BhY2UgLT4gY29uZmlnLnNhbXBsZV9xdWVzdGlvbnNbKl0ucXVlc3Rpb25gLiBSZXR1cm5zIGBbXWBcbiAqIHdoZW4gdGhlIHNwYWNlIGNhcnJpZXMgbm8gc2VyaWFsaXplZCBibG9iLCB0aGUgYmxvYiBpcyB1bnBhcnNlYWJsZSwgb3Igbm9cbiAqIHNhbXBsZSBxdWVzdGlvbnMgYXJlIGNvbmZpZ3VyZWQgLSBzbyBhIG1pc3Npbmcgb3IgbWlzY29uZmlndXJlZCBzcGFjZVxuICogZGVncmFkZXMgdG8gXCJubyBzdWdnZXN0aW9uc1wiIHJhdGhlciB0aGFuIHRocm93aW5nLiBPcmRlciBpcyBwcmVzZXJ2ZWQgKHRoZVxuICogYXV0aG9yJ3Mgb3JkZXJpbmcpIGFuZCBkdXBsaWNhdGVzIGFyZSBkcm9wcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuaWVTYW1wbGVRdWVzdGlvbnMoc3BhY2U6IEdlbmllU3BhY2UpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNlcmlhbGl6ZWQgPSBzcGFjZS5zZXJpYWxpemVkX3NwYWNlO1xuICBpZiAoIXNlcmlhbGl6ZWQpIHJldHVybiBbXTtcbiAgY29uc3QgcGFyc2VkID0ganNvbi5wYXJzZShzZXJpYWxpemVkKTtcbiAgaWYgKHBhcnNlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJzZXJpYWxpemVkLXNwYWNlOnBhcnNlLWVycm9yXCIsIHsgc3BhY2VJZDogc3BhY2Uuc3BhY2VfaWQgfSk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHNhbXBsZVF1ZXN0aW9ucyA9IChwYXJzZWQgYXMgeyBjb25maWc/OiB7IHNhbXBsZV9xdWVzdGlvbnM/OiB1bmtub3duIH0gfSB8IG51bGwpPy5jb25maWdcbiAgICA/LnNhbXBsZV9xdWVzdGlvbnM7XG4gIGlmICghQXJyYXkuaXNBcnJheShzYW1wbGVRdWVzdGlvbnMpKSByZXR1cm4gW107XG5cbiAgcmV0dXJuIFtcbiAgICAuLi5vYmplY3RcbiAgICAgIC5zZXF1ZW5jZShzYW1wbGVRdWVzdGlvbnMgYXMgU2VyaWFsaXplZFNhbXBsZVF1ZXN0aW9uW10pXG4gICAgICAubWFwKChlbnRyeSkgPT4gc3RyaW5nVXRpbHMuZmlyc3ROb25FbXB0eShlbnRyeT8ucXVlc3Rpb24pKVxuICAgICAgLm5vbk51bGwoKVxuICAgICAgLmRpc3RpbmN0KCksXG4gIF07XG59XG4iXX0=
@@ -1 +1 @@
1
- {"root":["../src/agent-mode.ts","../src/chat.ts","../src/space.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/agent-mode.ts","../src/chat.ts","../src/feedback.ts","../src/space.ts","../index.ts"],"version":"5.9.3"}
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.131",
28
- "@dbx-tools/shared-core": "^0.9.131",
29
- "@dbx-tools/shared-genie": "^0.9.131"
27
+ "@dbx-tools/appkit": "^0.9.136",
28
+ "@dbx-tools/shared-core": "^0.9.136",
29
+ "@dbx-tools/shared-genie": "^0.9.136"
30
30
  },
31
31
  "main": "./lib/index.js",
32
32
  "license": "Apache-2.0",
@@ -47,6 +47,10 @@
47
47
  "types": "./lib/src/chat.d.ts",
48
48
  "default": "./lib/src/chat.js"
49
49
  },
50
+ "./feedback": {
51
+ "types": "./lib/src/feedback.d.ts",
52
+ "default": "./lib/src/feedback.js"
53
+ },
50
54
  "./space": {
51
55
  "types": "./lib/src/space.d.ts",
52
56
  "default": "./lib/src/space.js"
@@ -58,7 +62,7 @@
58
62
  "./package.json": "./package.json"
59
63
  }
60
64
  },
61
- "version": "0.9.131",
65
+ "version": "0.9.136",
62
66
  "types": "./lib/index.d.ts",
63
67
  "dbxToolsConfig": {
64
68
  "tags": [
@@ -79,6 +83,10 @@
79
83
  "types": "./lib/src/chat.d.ts",
80
84
  "default": "./lib/src/chat.js"
81
85
  },
86
+ "./feedback": {
87
+ "types": "./lib/src/feedback.d.ts",
88
+ "default": "./lib/src/feedback.js"
89
+ },
82
90
  "./space": {
83
91
  "types": "./lib/src/space.d.ts",
84
92
  "default": "./lib/src/space.js"
package/src/agent-mode.ts CHANGED
@@ -26,6 +26,8 @@ const ITEM_PAGE_SIZE = 100;
26
26
  export interface GenieAgentModeOptions {
27
27
  conversationId?: string;
28
28
  enableVisualization?: boolean;
29
+ /** Original user text projected into client-visible snapshots when input is augmented. */
30
+ displayContent?: string;
29
31
  context?: databricks.ContextLike;
30
32
  }
31
33
 
@@ -37,7 +39,10 @@ export async function* genieAgentModeChat(
37
39
  options: GenieAgentModeOptions = {},
38
40
  ): AsyncGenerator<GenieMessage, void, void> {
39
41
  const ownedController = options.context ? undefined : new AbortController();
40
- const projection = new agentModeWire.GenieAgentModeProjection(agentId, content);
42
+ const projection = new agentModeWire.GenieAgentModeProjection(
43
+ agentId,
44
+ options.displayContent ?? content,
45
+ );
41
46
  try {
42
47
  const context = options.context
43
48
  ? databricks.toContext(options.context)
package/src/chat.ts CHANGED
@@ -72,6 +72,8 @@ export interface GenieChatOptions {
72
72
  agentModeFallback?: boolean;
73
73
  /** Ask Agent Mode to generate visualizations when appropriate. */
74
74
  enableVisualization?: boolean;
75
+ /** Original user text projected into Agent Mode snapshots when `content` is augmented. */
76
+ displayContent?: string;
75
77
  /**
76
78
  * Continue an existing conversation. Agent Mode sends it as
77
79
  * `conversation_id`; legacy polling passes it to `createMessage`. Read the id
@@ -152,6 +154,7 @@ export async function* genieChat(
152
154
  for await (const message of genieAgentModeChat(client, space_id, content, {
153
155
  ...(options?.conversationId ? { conversationId: options.conversationId } : {}),
154
156
  ...(options?.enableVisualization ? { enableVisualization: true } : {}),
157
+ ...(options?.displayContent ? { displayContent: options.displayContent } : {}),
155
158
  context: ctx,
156
159
  })) {
157
160
  yielded = true;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Genie message feedback for chat-mode and agent-mode conversations.
3
+ *
4
+ * @module
5
+ */
6
+
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";
10
+
11
+ /** Options for one identity-scoped Genie feedback write. */
12
+ export interface SendGenieMessageFeedbackOptions {
13
+ /** Workspace client whose identity submits the feedback. */
14
+ workspaceClient?: WorkspaceClient;
15
+ /** External cancellation. */
16
+ context?: databricks.ContextLike;
17
+ }
18
+
19
+ /** Send rating and optional comment directly to one Genie message. */
20
+ export async function sendGenieMessageFeedback(
21
+ input: GenieMessageFeedbackRequest,
22
+ options?: SendGenieMessageFeedbackOptions,
23
+ ): Promise<void> {
24
+ const request = genieModel.GenieMessageFeedbackRequestSchema.parse(input);
25
+ const client = options?.workspaceClient ?? createWorkspaceClient();
26
+ const context = options?.context ? databricks.toContext(options.context) : undefined;
27
+ await client.apiClient.request(
28
+ {
29
+ path: `/api/2.0/genie/spaces/${encodeURIComponent(request.space_id)}/conversations/${encodeURIComponent(request.conversation_id)}/messages/${encodeURIComponent(request.message_id)}/feedback`,
30
+ method: "POST",
31
+ payload: {
32
+ rating: request.rating,
33
+ ...(request.comment ? { comment: request.comment } : {}),
34
+ },
35
+ headers: new Headers(),
36
+ raw: false,
37
+ },
38
+ context,
39
+ );
40
+ }
package/src/space.ts CHANGED
@@ -24,7 +24,7 @@
24
24
  import { createWorkspaceClient, type WorkspaceClient } from "@databricks/appkit";
25
25
  import { databricks } from "@dbx-tools/appkit";
26
26
  import { errorUtils, json, log, object, stringUtils } from "@dbx-tools/shared-core";
27
- import { genieModel, type GenieSpace } from "@dbx-tools/shared-genie";
27
+ import { genieModel, type CreateGenieSpaceRequest, type GenieSpace } from "@dbx-tools/shared-genie";
28
28
 
29
29
  const logger = log.logger("genie/space");
30
30
 
@@ -53,6 +53,35 @@ export interface GetGenieSpaceOptions {
53
53
  context?: databricks.ContextLike;
54
54
  }
55
55
 
56
+ /** Options for creating a Genie space with explicit workspace identity. */
57
+ export interface CreateGenieSpaceOptions {
58
+ /** Workspace client whose identity owns the new space. */
59
+ workspaceClient?: WorkspaceClient;
60
+ /** External cancellation. */
61
+ context?: databricks.ContextLike;
62
+ }
63
+
64
+ /** Create a Genie space from one validated serialized definition. */
65
+ export async function createGenieSpace(
66
+ input: CreateGenieSpaceRequest,
67
+ options?: CreateGenieSpaceOptions,
68
+ ): Promise<GenieSpace> {
69
+ const request = genieModel.CreateGenieSpaceRequestSchema.parse(input);
70
+ const client = options?.workspaceClient ?? createWorkspaceClient();
71
+ const context = options?.context ? databricks.toContext(options.context) : undefined;
72
+ const raw = await client.apiClient.request(
73
+ {
74
+ path: "/api/2.0/genie/spaces",
75
+ method: "POST",
76
+ payload: request,
77
+ headers: new Headers(),
78
+ raw: false,
79
+ },
80
+ context,
81
+ );
82
+ return genieModel.GenieSpaceSchema.parse(raw);
83
+ }
84
+
56
85
  /**
57
86
  * Fetch a Genie space by id, optionally including its serialized definition.
58
87
  * Hits `GET /api/2.0/genie/spaces/<id>` with `include_serialized_space=true`