@dbx-tools/shared-model 0.9.40 → 0.9.46

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.
@@ -8,55 +8,57 @@
8
8
  * whereas the wire payload itself is the stable contract every caller in this
9
9
  * repo actually codes against.
10
10
  *
11
- * Pure types plus one text-flattening helper - no zod, no runtime deps - so a
12
- * browser client, a Node proxy, and an AppKit plugin can all agree on the shape
13
- * without any of them pulling in the others' dependencies.
14
- *
15
11
  * @module
16
12
  */
17
- /**
18
- * The roles OpenAI defines for a chat turn. {@link ChatMessage.role} is typed as
19
- * a plain string rather than this union, because providers add their own (for
20
- * example Databricks-hosted Claude replays a `"reasoning"` turn); use this when
21
- * you want the standard set named.
22
- */
23
- export type ChatRole = "system" | "developer" | "user" | "assistant" | "tool";
24
- /**
25
- * One entry of a structured `content` array. Only `type` and `text` are read
26
- * here; the index signature keeps provider-specific parts (images, thinking
27
- * blocks, cache markers) intact through a parse/serialize round trip.
28
- */
29
- export interface ChatContentPart {
30
- type?: string;
31
- text?: string;
32
- [key: string]: unknown;
33
- }
34
- /** The function a tool call invokes, with its arguments as a JSON string. */
35
- export interface ChatToolCallFunction {
36
- name: string;
37
- /** JSON-encoded argument object. Streamed in fragments, so assemble before parsing. */
38
- arguments: string;
39
- }
40
- /** One tool call attached to an assistant turn. */
41
- export interface ChatToolCall {
42
- id: string;
43
- /** `"function"` in practice; widened so an unrecognized type round-trips. */
44
- type: string;
45
- function: ChatToolCallFunction;
46
- }
47
- /**
48
- * A single chat message. `content` is nullable because an assistant turn that
49
- * only calls tools carries `content: null`.
50
- */
51
- export interface ChatMessage {
52
- /** See {@link ChatRole} for the standard values; widened for provider extensions. */
53
- role: string;
54
- content?: string | ChatContentPart | ChatContentPart[] | null;
55
- tool_calls?: ChatToolCall[];
56
- /** Set on a `tool` turn, keying it back to the call it answers. */
57
- tool_call_id?: string;
58
- name?: string;
59
- }
13
+ import { z } from "zod";
14
+ export declare const ChatRoleSchema: z.ZodEnum<{
15
+ system: "system";
16
+ developer: "developer";
17
+ user: "user";
18
+ assistant: "assistant";
19
+ tool: "tool";
20
+ }>;
21
+ export type ChatRole = z.infer<typeof ChatRoleSchema>;
22
+ export declare const ChatContentPartSchema: z.ZodObject<{
23
+ type: z.ZodOptional<z.ZodString>;
24
+ text: z.ZodOptional<z.ZodString>;
25
+ }, z.core.$catchall<z.ZodUnknown>>;
26
+ export type ChatContentPart = z.infer<typeof ChatContentPartSchema>;
27
+ export declare const ChatToolCallFunctionSchema: z.ZodObject<{
28
+ name: z.ZodString;
29
+ arguments: z.ZodString;
30
+ }, z.core.$strip>;
31
+ export type ChatToolCallFunction = z.infer<typeof ChatToolCallFunctionSchema>;
32
+ export declare const ChatToolCallSchema: z.ZodObject<{
33
+ id: z.ZodString;
34
+ type: z.ZodString;
35
+ function: z.ZodObject<{
36
+ name: z.ZodString;
37
+ arguments: z.ZodString;
38
+ }, z.core.$strip>;
39
+ }, z.core.$strip>;
40
+ export type ChatToolCall = z.infer<typeof ChatToolCallSchema>;
41
+ export declare const ChatMessageSchema: z.ZodObject<{
42
+ role: z.ZodString;
43
+ content: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
44
+ type: z.ZodOptional<z.ZodString>;
45
+ text: z.ZodOptional<z.ZodString>;
46
+ }, z.core.$catchall<z.ZodUnknown>>, z.ZodArray<z.ZodObject<{
47
+ type: z.ZodOptional<z.ZodString>;
48
+ text: z.ZodOptional<z.ZodString>;
49
+ }, z.core.$catchall<z.ZodUnknown>>>]>>>;
50
+ tool_calls: z.ZodOptional<z.ZodArray<z.ZodObject<{
51
+ id: z.ZodString;
52
+ type: z.ZodString;
53
+ function: z.ZodObject<{
54
+ name: z.ZodString;
55
+ arguments: z.ZodString;
56
+ }, z.core.$strip>;
57
+ }, z.core.$strip>>>;
58
+ tool_call_id: z.ZodOptional<z.ZodString>;
59
+ name: z.ZodOptional<z.ZodString>;
60
+ }, z.core.$strip>;
61
+ export type ChatMessage = z.infer<typeof ChatMessageSchema>;
60
62
  /**
61
63
  * Top-level request fields an OpenAI client may send that Databricks Model
62
64
  * Serving rejects outright, failing the whole turn rather than ignoring them.
@@ -83,21 +85,11 @@ export declare const UNSUPPORTED_CHAT_FIELDS: readonly string[];
83
85
  * that rejects something not yet in {@link UNSUPPORTED_CHAT_FIELDS}.
84
86
  */
85
87
  export declare function stripUnsupportedChatFields(body: Record<string, unknown>, extra?: readonly string[]): string[];
86
- /** Options for {@link chatContentToText}. */
87
- export interface ChatContentToTextOptions {
88
- /**
89
- * Placed between parts. Defaults to `""`, which reassembles a message that was
90
- * split purely for transport; pass `"\n\n"` when the parts are separate
91
- * paragraphs that a human will read.
92
- */
93
- separator?: string;
94
- /**
95
- * Restrict to these `type` values. Defaults to accepting any part carrying
96
- * `text`, which covers the `input_text` / `output_text` / `text` spellings
97
- * different APIs use for the same thing.
98
- */
99
- types?: readonly string[];
100
- }
88
+ export declare const ChatContentToTextOptionsSchema: z.ZodObject<{
89
+ separator: z.ZodOptional<z.ZodString>;
90
+ types: z.ZodOptional<z.ZodArray<z.ZodString>>;
91
+ }, z.core.$strip>;
92
+ export type ChatContentToTextOptions = z.infer<typeof ChatContentToTextOptionsSchema>;
101
93
  /**
102
94
  * Normalize structured chat content to an array. Providers usually emit a
103
95
  * parts array, but some compatibility layers collapse a one-part array to the
@@ -8,12 +8,60 @@
8
8
  * whereas the wire payload itself is the stable contract every caller in this
9
9
  * repo actually codes against.
10
10
  *
11
- * Pure types plus one text-flattening helper - no zod, no runtime deps - so a
12
- * browser client, a Node proxy, and an AppKit plugin can all agree on the shape
13
- * without any of them pulling in the others' dependencies.
14
- *
15
11
  * @module
16
12
  */
13
+ import { z } from "zod";
14
+ export const ChatRoleSchema = z
15
+ .enum(["system", "developer", "user", "assistant", "tool"])
16
+ .describe("Standard OpenAI chat roles. Message.role stays a plain string because providers add values such as reasoning.");
17
+ export const ChatContentPartSchema = z
18
+ .object({
19
+ type: z
20
+ .string()
21
+ .optional()
22
+ .describe("Part discriminator, such as text, input_text, or output_text."),
23
+ text: z.string().optional().describe("Plain-text payload carried by this part when present."),
24
+ })
25
+ .catchall(z.unknown())
26
+ .describe("One entry of a structured content array. Extra provider keys round-trip through the catch-all.");
27
+ export const ChatToolCallFunctionSchema = z
28
+ .object({
29
+ name: z.string().describe("Function name the model wants to invoke."),
30
+ arguments: z
31
+ .string()
32
+ .describe("JSON-encoded argument object. Streamed in fragments, so assemble before parsing."),
33
+ })
34
+ .describe("The function a tool call invokes, with its arguments as a JSON string.");
35
+ export const ChatToolCallSchema = z
36
+ .object({
37
+ id: z.string().describe("Tool-call identifier echoed on the matching tool message."),
38
+ type: z
39
+ .string()
40
+ .describe("Tool type. function in practice; widened so unrecognized values round-trip."),
41
+ function: ChatToolCallFunctionSchema.describe("Function name and JSON arguments for this call."),
42
+ })
43
+ .describe("One tool call attached to an assistant turn.");
44
+ export const ChatMessageSchema = z
45
+ .object({
46
+ role: z
47
+ .string()
48
+ .describe("Message author. See ChatRole for the standard values; widened for provider extensions."),
49
+ content: z
50
+ .union([z.string(), ChatContentPartSchema, z.array(ChatContentPartSchema)])
51
+ .nullable()
52
+ .optional()
53
+ .describe("Message body. Null when an assistant turn only calls tools."),
54
+ tool_calls: z
55
+ .array(ChatToolCallSchema)
56
+ .optional()
57
+ .describe("Tool calls attached to an assistant turn."),
58
+ tool_call_id: z
59
+ .string()
60
+ .optional()
61
+ .describe("Set on a tool turn, keying it back to the call it answers."),
62
+ name: z.string().optional().describe("Optional speaker or function name."),
63
+ })
64
+ .describe("A single chat message in an OpenAI Chat Completions request or response.");
17
65
  /**
18
66
  * Top-level request fields an OpenAI client may send that Databricks Model
19
67
  * Serving rejects outright, failing the whole turn rather than ignoring them.
@@ -31,10 +79,7 @@
31
79
  * paths that forward a client body largely as-is.
32
80
  */
33
81
  export const UNSUPPORTED_CHAT_FIELDS = [
34
- // Tool-calling concurrency hint. Databricks rejects it; the upstream provider
35
- // decides parallelism itself.
36
82
  "parallel_tool_calls",
37
- // Response-persistence and bookkeeping fields for OpenAI's own platform.
38
83
  "store",
39
84
  "metadata",
40
85
  "service_tier",
@@ -59,6 +104,18 @@ export function stripUnsupportedChatFields(body, extra = []) {
59
104
  }
60
105
  return dropped;
61
106
  }
107
+ export const ChatContentToTextOptionsSchema = z
108
+ .object({
109
+ separator: z
110
+ .string()
111
+ .optional()
112
+ .describe("Placed between parts. Defaults to empty, which reassembles transport-split text."),
113
+ types: z
114
+ .array(z.string())
115
+ .optional()
116
+ .describe("Restrict flattening to these part type values when set."),
117
+ })
118
+ .describe("Options for flattening structured chat content to plain text.");
62
119
  /**
63
120
  * Normalize structured chat content to an array. Providers usually emit a
64
121
  * parts array, but some compatibility layers collapse a one-part array to the
@@ -73,7 +130,10 @@ export function chatContentParts(content) {
73
130
  : undefined;
74
131
  if (!values)
75
132
  return undefined;
76
- return values.filter((part) => Boolean(part && typeof part === "object"));
133
+ return values.flatMap((part) => {
134
+ const parsed = ChatContentPartSchema.safeParse(part);
135
+ return parsed.success ? [parsed.data] : [];
136
+ });
77
137
  }
78
138
  /**
79
139
  * Flatten a message `content` value to plain text. Accepts the string form and
@@ -88,7 +148,7 @@ export function chatContentToText(content, options = {}) {
88
148
  const normalized = chatContentParts(content);
89
149
  if (!normalized)
90
150
  return "";
91
- const { separator = "", types } = options;
151
+ const { separator = "", types } = ChatContentToTextOptionsSchema.parse(options);
92
152
  const parts = [];
93
153
  for (const part of normalized) {
94
154
  if (types && (typeof part.type !== "string" || !types.includes(part.type)))
@@ -98,4 +158,4 @@ export function chatContentToText(content, options = {}) {
98
158
  }
99
159
  return parts.join(separator);
100
160
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWNoYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFpLWNoYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBa0RIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFzQjtJQUN4RCw4RUFBOEU7SUFDOUUsOEJBQThCO0lBQzlCLHFCQUFxQjtJQUNyQix5RUFBeUU7SUFDekUsT0FBTztJQUNQLFVBQVU7SUFDVixjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLG1CQUFtQjtDQUNwQixDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FDeEMsSUFBNkIsRUFDN0IsUUFBMkIsRUFBRTtJQUU3QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsdUJBQXVCLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7WUFBRSxTQUFTO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFrQkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZ0I7SUFDL0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDbkMsQ0FBQyxDQUFDLE9BQU87UUFDVCxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7WUFDdEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzlCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBMkIsRUFBRSxDQUNyRCxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBZ0IsRUFDaEIsVUFBb0MsRUFBRTtJQUV0QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUNoRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxJQUFJLENBQUMsVUFBVTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzNCLE1BQU0sRUFBRSxTQUFTLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUMxQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixJQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUFFLFNBQVM7UUFDckYsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUTtZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT3BlbkFJIENoYXQgQ29tcGxldGlvbnMgd2lyZSBzaGFwZXMsIGFzIERhdGFicmlja3MgTW9kZWwgU2VydmluZyBzcGVha3MgdGhlbS5cbiAqXG4gKiBUaGVzZSBhcmUgdGhlIHJlcXVlc3QvcmVwbHkgcGF5bG9hZCB0eXBlcyBmb3IgYC9jaGF0L2NvbXBsZXRpb25zYCBhbmQgYVxuICogc2VydmluZyBlbmRwb2ludCdzIGBpbnZvY2F0aW9uc2AgVVJMLiBUaGV5IGFyZSBkZWxpYmVyYXRlbHkgZGVjbGFyZWQgaGVyZVxuICogcmF0aGVyIHRoYW4gaW1wb3J0ZWQgZnJvbSB0aGUgT3BlbkFJIG9yIEFJIFNESyBwYWNrYWdlczogYm90aCBrZWVwIHRoZXNlXG4gKiBmaWVsZHMgdW5kZXIgaW50ZXJuYWwgbmFtZXNwYWNlcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGVpciBwdWJsaWMgQVBJLFxuICogd2hlcmVhcyB0aGUgd2lyZSBwYXlsb2FkIGl0c2VsZiBpcyB0aGUgc3RhYmxlIGNvbnRyYWN0IGV2ZXJ5IGNhbGxlciBpbiB0aGlzXG4gKiByZXBvIGFjdHVhbGx5IGNvZGVzIGFnYWluc3QuXG4gKlxuICogUHVyZSB0eXBlcyBwbHVzIG9uZSB0ZXh0LWZsYXR0ZW5pbmcgaGVscGVyIC0gbm8gem9kLCBubyBydW50aW1lIGRlcHMgLSBzbyBhXG4gKiBicm93c2VyIGNsaWVudCwgYSBOb2RlIHByb3h5LCBhbmQgYW4gQXBwS2l0IHBsdWdpbiBjYW4gYWxsIGFncmVlIG9uIHRoZSBzaGFwZVxuICogd2l0aG91dCBhbnkgb2YgdGhlbSBwdWxsaW5nIGluIHRoZSBvdGhlcnMnIGRlcGVuZGVuY2llcy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLyoqXG4gKiBUaGUgcm9sZXMgT3BlbkFJIGRlZmluZXMgZm9yIGEgY2hhdCB0dXJuLiB7QGxpbmsgQ2hhdE1lc3NhZ2Uucm9sZX0gaXMgdHlwZWQgYXNcbiAqIGEgcGxhaW4gc3RyaW5nIHJhdGhlciB0aGFuIHRoaXMgdW5pb24sIGJlY2F1c2UgcHJvdmlkZXJzIGFkZCB0aGVpciBvd24gKGZvclxuICogZXhhbXBsZSBEYXRhYnJpY2tzLWhvc3RlZCBDbGF1ZGUgcmVwbGF5cyBhIGBcInJlYXNvbmluZ1wiYCB0dXJuKTsgdXNlIHRoaXMgd2hlblxuICogeW91IHdhbnQgdGhlIHN0YW5kYXJkIHNldCBuYW1lZC5cbiAqL1xuZXhwb3J0IHR5cGUgQ2hhdFJvbGUgPSBcInN5c3RlbVwiIHwgXCJkZXZlbG9wZXJcIiB8IFwidXNlclwiIHwgXCJhc3Npc3RhbnRcIiB8IFwidG9vbFwiO1xuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiBhIHN0cnVjdHVyZWQgYGNvbnRlbnRgIGFycmF5LiBPbmx5IGB0eXBlYCBhbmQgYHRleHRgIGFyZSByZWFkXG4gKiBoZXJlOyB0aGUgaW5kZXggc2lnbmF0dXJlIGtlZXBzIHByb3ZpZGVyLXNwZWNpZmljIHBhcnRzIChpbWFnZXMsIHRoaW5raW5nXG4gKiBibG9ja3MsIGNhY2hlIG1hcmtlcnMpIGludGFjdCB0aHJvdWdoIGEgcGFyc2Uvc2VyaWFsaXplIHJvdW5kIHRyaXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbnRlbnRQYXJ0IHtcbiAgdHlwZT86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLyoqIFRoZSBmdW5jdGlvbiBhIHRvb2wgY2FsbCBpbnZva2VzLCB3aXRoIGl0cyBhcmd1bWVudHMgYXMgYSBKU09OIHN0cmluZy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFRvb2xDYWxsRnVuY3Rpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBKU09OLWVuY29kZWQgYXJndW1lbnQgb2JqZWN0LiBTdHJlYW1lZCBpbiBmcmFnbWVudHMsIHNvIGFzc2VtYmxlIGJlZm9yZSBwYXJzaW5nLiAqL1xuICBhcmd1bWVudHM6IHN0cmluZztcbn1cblxuLyoqIE9uZSB0b29sIGNhbGwgYXR0YWNoZWQgdG8gYW4gYXNzaXN0YW50IHR1cm4uICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRUb29sQ2FsbCB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBgXCJmdW5jdGlvblwiYCBpbiBwcmFjdGljZTsgd2lkZW5lZCBzbyBhbiB1bnJlY29nbml6ZWQgdHlwZSByb3VuZC10cmlwcy4gKi9cbiAgdHlwZTogc3RyaW5nO1xuICBmdW5jdGlvbjogQ2hhdFRvb2xDYWxsRnVuY3Rpb247XG59XG5cbi8qKlxuICogQSBzaW5nbGUgY2hhdCBtZXNzYWdlLiBgY29udGVudGAgaXMgbnVsbGFibGUgYmVjYXVzZSBhbiBhc3Npc3RhbnQgdHVybiB0aGF0XG4gKiBvbmx5IGNhbGxzIHRvb2xzIGNhcnJpZXMgYGNvbnRlbnQ6IG51bGxgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYXRNZXNzYWdlIHtcbiAgLyoqIFNlZSB7QGxpbmsgQ2hhdFJvbGV9IGZvciB0aGUgc3RhbmRhcmQgdmFsdWVzOyB3aWRlbmVkIGZvciBwcm92aWRlciBleHRlbnNpb25zLiAqL1xuICByb2xlOiBzdHJpbmc7XG4gIGNvbnRlbnQ/OiBzdHJpbmcgfCBDaGF0Q29udGVudFBhcnQgfCBDaGF0Q29udGVudFBhcnRbXSB8IG51bGw7XG4gIHRvb2xfY2FsbHM/OiBDaGF0VG9vbENhbGxbXTtcbiAgLyoqIFNldCBvbiBhIGB0b29sYCB0dXJuLCBrZXlpbmcgaXQgYmFjayB0byB0aGUgY2FsbCBpdCBhbnN3ZXJzLiAqL1xuICB0b29sX2NhbGxfaWQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVG9wLWxldmVsIHJlcXVlc3QgZmllbGRzIGFuIE9wZW5BSSBjbGllbnQgbWF5IHNlbmQgdGhhdCBEYXRhYnJpY2tzIE1vZGVsXG4gKiBTZXJ2aW5nIHJlamVjdHMgb3V0cmlnaHQsIGZhaWxpbmcgdGhlIHdob2xlIHR1cm4gcmF0aGVyIHRoYW4gaWdub3JpbmcgdGhlbS5cbiAqXG4gKiBEYXRhYnJpY2tzIHZhbGlkYXRlcyB0aGUgY2hhdCBib2R5IHN0cmljdGx5LCBzbyBhbiB1bnJlY29nbml6ZWQga2V5IGNvbWVzXG4gKiBiYWNrIGFzIGBwYXJhbGxlbF90b29sX2NhbGxzOiBFeHRyYSBpbnB1dHMgYXJlIG5vdCBwZXJtaXR0ZWRgICh0aGVcbiAqIGdhdGV3YXkncyBweWRhbnRpYyB2YWxpZGF0aW9uKSBvciBganNvbjogdW5rbm93biBmaWVsZCBcInBhcmFsbGVsX3Rvb2xfY2FsbHNcImBcbiAqIChpdHMgc3RyaWN0IEpTT04gZGVjb2RlKSwgZGVwZW5kaW5nIG9uIHRoZSBlbmRwb2ludC4gRXZlcnl0aGluZyBsaXN0ZWQgaGVyZVxuICogaXMgZWl0aGVyIE9wZW5BSS1wbGF0Zm9ybSBib29ra2VlcGluZyB3aXRoIG5vIGJlYXJpbmcgb24gdGhlIGNvbXBsZXRpb24sIG9yIC1cbiAqIGluIHRoZSBjYXNlIG9mIGBwYXJhbGxlbF90b29sX2NhbGxzYCAtIGEgcmVhbCBzZXR0aW5nIERhdGFicmlja3MgaGFzIG5vIHdheVxuICogdG8gYWNjZXB0LCBzbyBkcm9wcGluZyBpdCBpcyB0aGUgb25seSB3YXkgdGhlIHJlcXVlc3QgY2FuIHN1Y2NlZWQgYXQgYWxsLlxuICpcbiAqIENhbGxlcnMgdGhhdCB0cmFuc2xhdGUgYSByZXF1ZXN0IGZpZWxkLWJ5LWZpZWxkIHRocm91Z2ggYW4gYWxsb3dsaXN0IG5ldmVyXG4gKiBuZWVkIHRoaXM7IGl0IGV4aXN0cyBmb3IgdGhlXG4gKiBwYXRocyB0aGF0IGZvcndhcmQgYSBjbGllbnQgYm9keSBsYXJnZWx5IGFzLWlzLlxuICovXG5leHBvcnQgY29uc3QgVU5TVVBQT1JURURfQ0hBVF9GSUVMRFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAvLyBUb29sLWNhbGxpbmcgY29uY3VycmVuY3kgaGludC4gRGF0YWJyaWNrcyByZWplY3RzIGl0OyB0aGUgdXBzdHJlYW0gcHJvdmlkZXJcbiAgLy8gZGVjaWRlcyBwYXJhbGxlbGlzbSBpdHNlbGYuXG4gIFwicGFyYWxsZWxfdG9vbF9jYWxsc1wiLFxuICAvLyBSZXNwb25zZS1wZXJzaXN0ZW5jZSBhbmQgYm9va2tlZXBpbmcgZmllbGRzIGZvciBPcGVuQUkncyBvd24gcGxhdGZvcm0uXG4gIFwic3RvcmVcIixcbiAgXCJtZXRhZGF0YVwiLFxuICBcInNlcnZpY2VfdGllclwiLFxuICBcInByb21wdF9jYWNoZV9rZXlcIixcbiAgXCJzYWZldHlfaWRlbnRpZmllclwiLFxuXTtcblxuLyoqXG4gKiBEZWxldGUgdGhlIGZpZWxkcyBEYXRhYnJpY2tzIHJlamVjdHMgZnJvbSBhIGNoYXQgcmVxdWVzdCBib2R5LCBpbiBwbGFjZS5cbiAqIFJldHVybnMgdGhlIG5hbWVzIGFjdHVhbGx5IHJlbW92ZWQgc28gYSBjYWxsZXIgY2FuIGxvZyB3aGF0IGl0IGRyb3BwZWQuXG4gKlxuICogQHBhcmFtIGJvZHkgLSBQYXJzZWQgY2hhdCByZXF1ZXN0IGJvZHkuIE11dGF0ZWQuXG4gKiBAcGFyYW0gZXh0cmEgLSBBZGRpdGlvbmFsIGZpZWxkIG5hbWVzIHRvIGRyb3AsIGZvciBhIHdvcmtzcGFjZSBvciBlbmRwb2ludFxuICogICB0aGF0IHJlamVjdHMgc29tZXRoaW5nIG5vdCB5ZXQgaW4ge0BsaW5rIFVOU1VQUE9SVEVEX0NIQVRfRklFTERTfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVW5zdXBwb3J0ZWRDaGF0RmllbGRzKFxuICBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZXh0cmE6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGRyb3BwZWQ6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZmllbGQgb2YgWy4uLlVOU1VQUE9SVEVEX0NIQVRfRklFTERTLCAuLi5leHRyYV0pIHtcbiAgICBpZiAoIShmaWVsZCBpbiBib2R5KSkgY29udGludWU7XG4gICAgZGVsZXRlIGJvZHlbZmllbGRdO1xuICAgIGRyb3BwZWQucHVzaChmaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGRyb3BwZWQ7XG59XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgY2hhdENvbnRlbnRUb1RleHR9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGF0Q29udGVudFRvVGV4dE9wdGlvbnMge1xuICAvKipcbiAgICogUGxhY2VkIGJldHdlZW4gcGFydHMuIERlZmF1bHRzIHRvIGBcIlwiYCwgd2hpY2ggcmVhc3NlbWJsZXMgYSBtZXNzYWdlIHRoYXQgd2FzXG4gICAqIHNwbGl0IHB1cmVseSBmb3IgdHJhbnNwb3J0OyBwYXNzIGBcIlxcblxcblwiYCB3aGVuIHRoZSBwYXJ0cyBhcmUgc2VwYXJhdGVcbiAgICogcGFyYWdyYXBocyB0aGF0IGEgaHVtYW4gd2lsbCByZWFkLlxuICAgKi9cbiAgc2VwYXJhdG9yPzogc3RyaW5nO1xuICAvKipcbiAgICogUmVzdHJpY3QgdG8gdGhlc2UgYHR5cGVgIHZhbHVlcy4gRGVmYXVsdHMgdG8gYWNjZXB0aW5nIGFueSBwYXJ0IGNhcnJ5aW5nXG4gICAqIGB0ZXh0YCwgd2hpY2ggY292ZXJzIHRoZSBgaW5wdXRfdGV4dGAgLyBgb3V0cHV0X3RleHRgIC8gYHRleHRgIHNwZWxsaW5nc1xuICAgKiBkaWZmZXJlbnQgQVBJcyB1c2UgZm9yIHRoZSBzYW1lIHRoaW5nLlxuICAgKi9cbiAgdHlwZXM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgc3RydWN0dXJlZCBjaGF0IGNvbnRlbnQgdG8gYW4gYXJyYXkuIFByb3ZpZGVycyB1c3VhbGx5IGVtaXQgYVxuICogcGFydHMgYXJyYXksIGJ1dCBzb21lIGNvbXBhdGliaWxpdHkgbGF5ZXJzIGNvbGxhcHNlIGEgb25lLXBhcnQgYXJyYXkgdG8gdGhlXG4gKiBvYmplY3QgaXRzZWxmLiBSZXR1cm5zIGB1bmRlZmluZWRgIGZvciBzdHJpbmdzLCBudWxscywgYW5kIG90aGVyIHNjYWxhclxuICogdmFsdWVzIHNvIGNhbGxlcnMgY2FuIGRpc3Rpbmd1aXNoIHN0cnVjdHVyZWQgY29udGVudCBmcm9tIHBsYWluIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGF0Q29udGVudFBhcnRzKGNvbnRlbnQ6IHVua25vd24pOiBDaGF0Q29udGVudFBhcnRbXSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoY29udGVudClcbiAgICA/IGNvbnRlbnRcbiAgICA6IGNvbnRlbnQgJiYgdHlwZW9mIGNvbnRlbnQgPT09IFwib2JqZWN0XCJcbiAgICAgID8gW2NvbnRlbnRdXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCF2YWx1ZXMpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB2YWx1ZXMuZmlsdGVyKChwYXJ0KTogcGFydCBpcyBDaGF0Q29udGVudFBhcnQgPT5cbiAgICBCb29sZWFuKHBhcnQgJiYgdHlwZW9mIHBhcnQgPT09IFwib2JqZWN0XCIpLFxuICApO1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYSBtZXNzYWdlIGBjb250ZW50YCB2YWx1ZSB0byBwbGFpbiB0ZXh0LiBBY2NlcHRzIHRoZSBzdHJpbmcgZm9ybSBhbmRcbiAqIHN0cnVjdHVyZWQgY29udGVudCBhcyBlaXRoZXIgb25lIHtAbGluayBDaGF0Q29udGVudFBhcnR9IG9yIGFuIGFycmF5LCBhbmRcbiAqIHlpZWxkcyBgXCJcImAgZm9yIGFueXRoaW5nIGVsc2UgKG51bGwsIGEgbG9uZSBpbWFnZSBwYXJ0LCBhIG1hbGZvcm1lZCBwYXlsb2FkKS5cbiAqIFR5cGVkIGFzIGB1bmtub3duYCBiZWNhdXNlIG1vc3QgY2FsbGVycyBhcmUgcmVhZGluZyBhIGp1c3QtcGFyc2VkIEpTT04gYm9keSxcbiAqIGFuZCB0aGUgcG9pbnQgb2YgdGhpcyBoZWxwZXIgaXMgdGhhdCB0aGV5IGRvIG5vdCBoYXZlIHRvIHByZS1jaGVjayBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXRDb250ZW50VG9UZXh0KFxuICBjb250ZW50OiB1bmtub3duLFxuICBvcHRpb25zOiBDaGF0Q29udGVudFRvVGV4dE9wdGlvbnMgPSB7fSxcbik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnRlbnQ7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBjaGF0Q29udGVudFBhcnRzKGNvbnRlbnQpO1xuICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiBcIlwiO1xuICBjb25zdCB7IHNlcGFyYXRvciA9IFwiXCIsIHR5cGVzIH0gPSBvcHRpb25zO1xuICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIG5vcm1hbGl6ZWQpIHtcbiAgICBpZiAodHlwZXMgJiYgKHR5cGVvZiBwYXJ0LnR5cGUgIT09IFwic3RyaW5nXCIgfHwgIXR5cGVzLmluY2x1ZGVzKHBhcnQudHlwZSkpKSBjb250aW51ZTtcbiAgICBpZiAodHlwZW9mIHBhcnQudGV4dCA9PT0gXCJzdHJpbmdcIikgcGFydHMucHVzaChwYXJ0LnRleHQpO1xuICB9XG4gIHJldHVybiBwYXJ0cy5qb2luKHNlcGFyYXRvcik7XG59XG4iXX0=
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmFpLWNoYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvb3BlbmFpLWNoYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXhCLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDO0tBQzVCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUMxRCxRQUFRLENBQ1AsK0dBQStHLENBQ2hILENBQUM7QUFJSixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDO0tBQ25DLE1BQU0sQ0FBQztJQUNOLElBQUksRUFBRSxDQUFDO1NBQ0osTUFBTSxFQUFFO1NBQ1IsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLCtEQUErRCxDQUFDO0lBQzVFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLHVEQUF1RCxDQUFDO0NBQzlGLENBQUM7S0FDRCxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3JCLFFBQVEsQ0FDUCxnR0FBZ0csQ0FDakcsQ0FBQztBQUlKLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLENBQUM7S0FDeEMsTUFBTSxDQUFDO0lBQ04sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsMENBQTBDLENBQUM7SUFDckUsU0FBUyxFQUFFLENBQUM7U0FDVCxNQUFNLEVBQUU7U0FDUixRQUFRLENBQUMsa0ZBQWtGLENBQUM7Q0FDaEcsQ0FBQztLQUNELFFBQVEsQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO0FBSXRGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUM7S0FDaEMsTUFBTSxDQUFDO0lBQ04sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsMkRBQTJELENBQUM7SUFDcEYsSUFBSSxFQUFFLENBQUM7U0FDSixNQUFNLEVBQUU7U0FDUixRQUFRLENBQUMsNkVBQTZFLENBQUM7SUFDMUYsUUFBUSxFQUFFLDBCQUEwQixDQUFDLFFBQVEsQ0FDM0MsaURBQWlELENBQ2xEO0NBQ0YsQ0FBQztLQUNELFFBQVEsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0FBSTVELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUM7S0FDL0IsTUFBTSxDQUFDO0lBQ04sSUFBSSxFQUFFLENBQUM7U0FDSixNQUFNLEVBQUU7U0FDUixRQUFRLENBQ1Asd0ZBQXdGLENBQ3pGO0lBQ0gsT0FBTyxFQUFFLENBQUM7U0FDUCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7U0FDMUUsUUFBUSxFQUFFO1NBQ1YsUUFBUSxFQUFFO1NBQ1YsUUFBUSxDQUFDLDZEQUE2RCxDQUFDO0lBQzFFLFVBQVUsRUFBRSxDQUFDO1NBQ1YsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1NBQ3pCLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQywyQ0FBMkMsQ0FBQztJQUN4RCxZQUFZLEVBQUUsQ0FBQztTQUNaLE1BQU0sRUFBRTtTQUNSLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQyw0REFBNEQsQ0FBQztJQUN6RSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxvQ0FBb0MsQ0FBQztDQUMzRSxDQUFDO0tBQ0QsUUFBUSxDQUFDLDBFQUEwRSxDQUFDLENBQUM7QUFJeEY7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXNCO0lBQ3hELHFCQUFxQjtJQUNyQixPQUFPO0lBQ1AsVUFBVTtJQUNWLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsbUJBQW1CO0NBQ3BCLENBQUM7QUFFRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxJQUE2QixFQUM3QixRQUEyQixFQUFFO0lBRTdCLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUM3QixLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyx1QkFBdUIsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztZQUFFLFNBQVM7UUFDL0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLENBQUM7S0FDNUMsTUFBTSxDQUFDO0lBQ04sU0FBUyxFQUFFLENBQUM7U0FDVCxNQUFNLEVBQUU7U0FDUixRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMsa0ZBQWtGLENBQUM7SUFDL0YsS0FBSyxFQUFFLENBQUM7U0FDTCxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2pCLFFBQVEsRUFBRTtTQUNWLFFBQVEsQ0FBQyx5REFBeUQsQ0FBQztDQUN2RSxDQUFDO0tBQ0QsUUFBUSxDQUFDLCtEQUErRCxDQUFDLENBQUM7QUFJN0U7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsT0FBZ0I7SUFDL0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDbkMsQ0FBQyxDQUFDLE9BQU87UUFDVCxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7WUFDdEMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzlCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzdCLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixPQUFnQixFQUNoQixVQUFvQyxFQUFFO0lBRXRDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ2hELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLElBQUksQ0FBQyxVQUFVO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsOEJBQThCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUMzQixLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzlCLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUUsU0FBUztRQUNyRixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRO1lBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPcGVuQUkgQ2hhdCBDb21wbGV0aW9ucyB3aXJlIHNoYXBlcywgYXMgRGF0YWJyaWNrcyBNb2RlbCBTZXJ2aW5nIHNwZWFrcyB0aGVtLlxuICpcbiAqIFRoZXNlIGFyZSB0aGUgcmVxdWVzdC9yZXBseSBwYXlsb2FkIHR5cGVzIGZvciBgL2NoYXQvY29tcGxldGlvbnNgIGFuZCBhXG4gKiBzZXJ2aW5nIGVuZHBvaW50J3MgYGludm9jYXRpb25zYCBVUkwuIFRoZXkgYXJlIGRlbGliZXJhdGVseSBkZWNsYXJlZCBoZXJlXG4gKiByYXRoZXIgdGhhbiBpbXBvcnRlZCBmcm9tIHRoZSBPcGVuQUkgb3IgQUkgU0RLIHBhY2thZ2VzOiBib3RoIGtlZXAgdGhlc2VcbiAqIGZpZWxkcyB1bmRlciBpbnRlcm5hbCBuYW1lc3BhY2VzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZWlyIHB1YmxpYyBBUEksXG4gKiB3aGVyZWFzIHRoZSB3aXJlIHBheWxvYWQgaXRzZWxmIGlzIHRoZSBzdGFibGUgY29udHJhY3QgZXZlcnkgY2FsbGVyIGluIHRoaXNcbiAqIHJlcG8gYWN0dWFsbHkgY29kZXMgYWdhaW5zdC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuZXhwb3J0IGNvbnN0IENoYXRSb2xlU2NoZW1hID0gelxuICAuZW51bShbXCJzeXN0ZW1cIiwgXCJkZXZlbG9wZXJcIiwgXCJ1c2VyXCIsIFwiYXNzaXN0YW50XCIsIFwidG9vbFwiXSlcbiAgLmRlc2NyaWJlKFxuICAgIFwiU3RhbmRhcmQgT3BlbkFJIGNoYXQgcm9sZXMuIE1lc3NhZ2Uucm9sZSBzdGF5cyBhIHBsYWluIHN0cmluZyBiZWNhdXNlIHByb3ZpZGVycyBhZGQgdmFsdWVzIHN1Y2ggYXMgcmVhc29uaW5nLlwiLFxuICApO1xuXG5leHBvcnQgdHlwZSBDaGF0Um9sZSA9IHouaW5mZXI8dHlwZW9mIENoYXRSb2xlU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IENoYXRDb250ZW50UGFydFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgdHlwZTogelxuICAgICAgLnN0cmluZygpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiUGFydCBkaXNjcmltaW5hdG9yLCBzdWNoIGFzIHRleHQsIGlucHV0X3RleHQsIG9yIG91dHB1dF90ZXh0LlwiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJQbGFpbi10ZXh0IHBheWxvYWQgY2FycmllZCBieSB0aGlzIHBhcnQgd2hlbiBwcmVzZW50LlwiKSxcbiAgfSlcbiAgLmNhdGNoYWxsKHoudW5rbm93bigpKVxuICAuZGVzY3JpYmUoXG4gICAgXCJPbmUgZW50cnkgb2YgYSBzdHJ1Y3R1cmVkIGNvbnRlbnQgYXJyYXkuIEV4dHJhIHByb3ZpZGVyIGtleXMgcm91bmQtdHJpcCB0aHJvdWdoIHRoZSBjYXRjaC1hbGwuXCIsXG4gICk7XG5cbmV4cG9ydCB0eXBlIENoYXRDb250ZW50UGFydCA9IHouaW5mZXI8dHlwZW9mIENoYXRDb250ZW50UGFydFNjaGVtYT47XG5cbmV4cG9ydCBjb25zdCBDaGF0VG9vbENhbGxGdW5jdGlvblNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgbmFtZTogei5zdHJpbmcoKS5kZXNjcmliZShcIkZ1bmN0aW9uIG5hbWUgdGhlIG1vZGVsIHdhbnRzIHRvIGludm9rZS5cIiksXG4gICAgYXJndW1lbnRzOiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC5kZXNjcmliZShcIkpTT04tZW5jb2RlZCBhcmd1bWVudCBvYmplY3QuIFN0cmVhbWVkIGluIGZyYWdtZW50cywgc28gYXNzZW1ibGUgYmVmb3JlIHBhcnNpbmcuXCIpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJUaGUgZnVuY3Rpb24gYSB0b29sIGNhbGwgaW52b2tlcywgd2l0aCBpdHMgYXJndW1lbnRzIGFzIGEgSlNPTiBzdHJpbmcuXCIpO1xuXG5leHBvcnQgdHlwZSBDaGF0VG9vbENhbGxGdW5jdGlvbiA9IHouaW5mZXI8dHlwZW9mIENoYXRUb29sQ2FsbEZ1bmN0aW9uU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IENoYXRUb29sQ2FsbFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgaWQ6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUb29sLWNhbGwgaWRlbnRpZmllciBlY2hvZWQgb24gdGhlIG1hdGNoaW5nIHRvb2wgbWVzc2FnZS5cIiksXG4gICAgdHlwZTogelxuICAgICAgLnN0cmluZygpXG4gICAgICAuZGVzY3JpYmUoXCJUb29sIHR5cGUuIGZ1bmN0aW9uIGluIHByYWN0aWNlOyB3aWRlbmVkIHNvIHVucmVjb2duaXplZCB2YWx1ZXMgcm91bmQtdHJpcC5cIiksXG4gICAgZnVuY3Rpb246IENoYXRUb29sQ2FsbEZ1bmN0aW9uU2NoZW1hLmRlc2NyaWJlKFxuICAgICAgXCJGdW5jdGlvbiBuYW1lIGFuZCBKU09OIGFyZ3VtZW50cyBmb3IgdGhpcyBjYWxsLlwiLFxuICAgICksXG4gIH0pXG4gIC5kZXNjcmliZShcIk9uZSB0b29sIGNhbGwgYXR0YWNoZWQgdG8gYW4gYXNzaXN0YW50IHR1cm4uXCIpO1xuXG5leHBvcnQgdHlwZSBDaGF0VG9vbENhbGwgPSB6LmluZmVyPHR5cGVvZiBDaGF0VG9vbENhbGxTY2hlbWE+O1xuXG5leHBvcnQgY29uc3QgQ2hhdE1lc3NhZ2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHJvbGU6IHpcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIk1lc3NhZ2UgYXV0aG9yLiBTZWUgQ2hhdFJvbGUgZm9yIHRoZSBzdGFuZGFyZCB2YWx1ZXM7IHdpZGVuZWQgZm9yIHByb3ZpZGVyIGV4dGVuc2lvbnMuXCIsXG4gICAgICApLFxuICAgIGNvbnRlbnQ6IHpcbiAgICAgIC51bmlvbihbei5zdHJpbmcoKSwgQ2hhdENvbnRlbnRQYXJ0U2NoZW1hLCB6LmFycmF5KENoYXRDb250ZW50UGFydFNjaGVtYSldKVxuICAgICAgLm51bGxhYmxlKClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJNZXNzYWdlIGJvZHkuIE51bGwgd2hlbiBhbiBhc3Npc3RhbnQgdHVybiBvbmx5IGNhbGxzIHRvb2xzLlwiKSxcbiAgICB0b29sX2NhbGxzOiB6XG4gICAgICAuYXJyYXkoQ2hhdFRvb2xDYWxsU2NoZW1hKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIlRvb2wgY2FsbHMgYXR0YWNoZWQgdG8gYW4gYXNzaXN0YW50IHR1cm4uXCIpLFxuICAgIHRvb2xfY2FsbF9pZDogelxuICAgICAgLnN0cmluZygpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiU2V0IG9uIGEgdG9vbCB0dXJuLCBrZXlpbmcgaXQgYmFjayB0byB0aGUgY2FsbCBpdCBhbnN3ZXJzLlwiKSxcbiAgICBuYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJPcHRpb25hbCBzcGVha2VyIG9yIGZ1bmN0aW9uIG5hbWUuXCIpLFxuICB9KVxuICAuZGVzY3JpYmUoXCJBIHNpbmdsZSBjaGF0IG1lc3NhZ2UgaW4gYW4gT3BlbkFJIENoYXQgQ29tcGxldGlvbnMgcmVxdWVzdCBvciByZXNwb25zZS5cIik7XG5cbmV4cG9ydCB0eXBlIENoYXRNZXNzYWdlID0gei5pbmZlcjx0eXBlb2YgQ2hhdE1lc3NhZ2VTY2hlbWE+O1xuXG4vKipcbiAqIFRvcC1sZXZlbCByZXF1ZXN0IGZpZWxkcyBhbiBPcGVuQUkgY2xpZW50IG1heSBzZW5kIHRoYXQgRGF0YWJyaWNrcyBNb2RlbFxuICogU2VydmluZyByZWplY3RzIG91dHJpZ2h0LCBmYWlsaW5nIHRoZSB3aG9sZSB0dXJuIHJhdGhlciB0aGFuIGlnbm9yaW5nIHRoZW0uXG4gKlxuICogRGF0YWJyaWNrcyB2YWxpZGF0ZXMgdGhlIGNoYXQgYm9keSBzdHJpY3RseSwgc28gYW4gdW5yZWNvZ25pemVkIGtleSBjb21lc1xuICogYmFjayBhcyBgcGFyYWxsZWxfdG9vbF9jYWxsczogRXh0cmEgaW5wdXRzIGFyZSBub3QgcGVybWl0dGVkYCAodGhlXG4gKiBnYXRld2F5J3MgcHlkYW50aWMgdmFsaWRhdGlvbikgb3IgYGpzb246IHVua25vd24gZmllbGQgXCJwYXJhbGxlbF90b29sX2NhbGxzXCJgXG4gKiAoaXRzIHN0cmljdCBKU09OIGRlY29kZSksIGRlcGVuZGluZyBvbiB0aGUgZW5kcG9pbnQuIEV2ZXJ5dGhpbmcgbGlzdGVkIGhlcmVcbiAqIGlzIGVpdGhlciBPcGVuQUktcGxhdGZvcm0gYm9va2tlZXBpbmcgd2l0aCBubyBiZWFyaW5nIG9uIHRoZSBjb21wbGV0aW9uLCBvciAtXG4gKiBpbiB0aGUgY2FzZSBvZiBgcGFyYWxsZWxfdG9vbF9jYWxsc2AgLSBhIHJlYWwgc2V0dGluZyBEYXRhYnJpY2tzIGhhcyBubyB3YXlcbiAqIHRvIGFjY2VwdCwgc28gZHJvcHBpbmcgaXQgaXMgdGhlIG9ubHkgd2F5IHRoZSByZXF1ZXN0IGNhbiBzdWNjZWVkIGF0IGFsbC5cbiAqXG4gKiBDYWxsZXJzIHRoYXQgdHJhbnNsYXRlIGEgcmVxdWVzdCBmaWVsZC1ieS1maWVsZCB0aHJvdWdoIGFuIGFsbG93bGlzdCBuZXZlclxuICogbmVlZCB0aGlzOyBpdCBleGlzdHMgZm9yIHRoZVxuICogcGF0aHMgdGhhdCBmb3J3YXJkIGEgY2xpZW50IGJvZHkgbGFyZ2VseSBhcy1pcy5cbiAqL1xuZXhwb3J0IGNvbnN0IFVOU1VQUE9SVEVEX0NIQVRfRklFTERTOiByZWFkb25seSBzdHJpbmdbXSA9IFtcbiAgXCJwYXJhbGxlbF90b29sX2NhbGxzXCIsXG4gIFwic3RvcmVcIixcbiAgXCJtZXRhZGF0YVwiLFxuICBcInNlcnZpY2VfdGllclwiLFxuICBcInByb21wdF9jYWNoZV9rZXlcIixcbiAgXCJzYWZldHlfaWRlbnRpZmllclwiLFxuXTtcblxuLyoqXG4gKiBEZWxldGUgdGhlIGZpZWxkcyBEYXRhYnJpY2tzIHJlamVjdHMgZnJvbSBhIGNoYXQgcmVxdWVzdCBib2R5LCBpbiBwbGFjZS5cbiAqIFJldHVybnMgdGhlIG5hbWVzIGFjdHVhbGx5IHJlbW92ZWQgc28gYSBjYWxsZXIgY2FuIGxvZyB3aGF0IGl0IGRyb3BwZWQuXG4gKlxuICogQHBhcmFtIGJvZHkgLSBQYXJzZWQgY2hhdCByZXF1ZXN0IGJvZHkuIE11dGF0ZWQuXG4gKiBAcGFyYW0gZXh0cmEgLSBBZGRpdGlvbmFsIGZpZWxkIG5hbWVzIHRvIGRyb3AsIGZvciBhIHdvcmtzcGFjZSBvciBlbmRwb2ludFxuICogICB0aGF0IHJlamVjdHMgc29tZXRoaW5nIG5vdCB5ZXQgaW4ge0BsaW5rIFVOU1VQUE9SVEVEX0NIQVRfRklFTERTfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVW5zdXBwb3J0ZWRDaGF0RmllbGRzKFxuICBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZXh0cmE6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGRyb3BwZWQ6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZmllbGQgb2YgWy4uLlVOU1VQUE9SVEVEX0NIQVRfRklFTERTLCAuLi5leHRyYV0pIHtcbiAgICBpZiAoIShmaWVsZCBpbiBib2R5KSkgY29udGludWU7XG4gICAgZGVsZXRlIGJvZHlbZmllbGRdO1xuICAgIGRyb3BwZWQucHVzaChmaWVsZCk7XG4gIH1cbiAgcmV0dXJuIGRyb3BwZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBDaGF0Q29udGVudFRvVGV4dE9wdGlvbnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHNlcGFyYXRvcjogelxuICAgICAgLnN0cmluZygpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiUGxhY2VkIGJldHdlZW4gcGFydHMuIERlZmF1bHRzIHRvIGVtcHR5LCB3aGljaCByZWFzc2VtYmxlcyB0cmFuc3BvcnQtc3BsaXQgdGV4dC5cIiksXG4gICAgdHlwZXM6IHpcbiAgICAgIC5hcnJheSh6LnN0cmluZygpKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIlJlc3RyaWN0IGZsYXR0ZW5pbmcgdG8gdGhlc2UgcGFydCB0eXBlIHZhbHVlcyB3aGVuIHNldC5cIiksXG4gIH0pXG4gIC5kZXNjcmliZShcIk9wdGlvbnMgZm9yIGZsYXR0ZW5pbmcgc3RydWN0dXJlZCBjaGF0IGNvbnRlbnQgdG8gcGxhaW4gdGV4dC5cIik7XG5cbmV4cG9ydCB0eXBlIENoYXRDb250ZW50VG9UZXh0T3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIENoYXRDb250ZW50VG9UZXh0T3B0aW9uc1NjaGVtYT47XG5cbi8qKlxuICogTm9ybWFsaXplIHN0cnVjdHVyZWQgY2hhdCBjb250ZW50IHRvIGFuIGFycmF5LiBQcm92aWRlcnMgdXN1YWxseSBlbWl0IGFcbiAqIHBhcnRzIGFycmF5LCBidXQgc29tZSBjb21wYXRpYmlsaXR5IGxheWVycyBjb2xsYXBzZSBhIG9uZS1wYXJ0IGFycmF5IHRvIHRoZVxuICogb2JqZWN0IGl0c2VsZi4gUmV0dXJucyBgdW5kZWZpbmVkYCBmb3Igc3RyaW5ncywgbnVsbHMsIGFuZCBvdGhlciBzY2FsYXJcbiAqIHZhbHVlcyBzbyBjYWxsZXJzIGNhbiBkaXN0aW5ndWlzaCBzdHJ1Y3R1cmVkIGNvbnRlbnQgZnJvbSBwbGFpbiB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhdENvbnRlbnRQYXJ0cyhjb250ZW50OiB1bmtub3duKTogQ2hhdENvbnRlbnRQYXJ0W10gfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KGNvbnRlbnQpXG4gICAgPyBjb250ZW50XG4gICAgOiBjb250ZW50ICYmIHR5cGVvZiBjb250ZW50ID09PSBcIm9iamVjdFwiXG4gICAgICA/IFtjb250ZW50XVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmICghdmFsdWVzKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdmFsdWVzLmZsYXRNYXAoKHBhcnQpID0+IHtcbiAgICBjb25zdCBwYXJzZWQgPSBDaGF0Q29udGVudFBhcnRTY2hlbWEuc2FmZVBhcnNlKHBhcnQpO1xuICAgIHJldHVybiBwYXJzZWQuc3VjY2VzcyA/IFtwYXJzZWQuZGF0YV0gOiBbXTtcbiAgfSk7XG59XG5cbi8qKlxuICogRmxhdHRlbiBhIG1lc3NhZ2UgYGNvbnRlbnRgIHZhbHVlIHRvIHBsYWluIHRleHQuIEFjY2VwdHMgdGhlIHN0cmluZyBmb3JtIGFuZFxuICogc3RydWN0dXJlZCBjb250ZW50IGFzIGVpdGhlciBvbmUge0BsaW5rIENoYXRDb250ZW50UGFydH0gb3IgYW4gYXJyYXksIGFuZFxuICogeWllbGRzIGBcIlwiYCBmb3IgYW55dGhpbmcgZWxzZSAobnVsbCwgYSBsb25lIGltYWdlIHBhcnQsIGEgbWFsZm9ybWVkIHBheWxvYWQpLlxuICogVHlwZWQgYXMgYHVua25vd25gIGJlY2F1c2UgbW9zdCBjYWxsZXJzIGFyZSByZWFkaW5nIGEganVzdC1wYXJzZWQgSlNPTiBib2R5LFxuICogYW5kIHRoZSBwb2ludCBvZiB0aGlzIGhlbHBlciBpcyB0aGF0IHRoZXkgZG8gbm90IGhhdmUgdG8gcHJlLWNoZWNrIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhdENvbnRlbnRUb1RleHQoXG4gIGNvbnRlbnQ6IHVua25vd24sXG4gIG9wdGlvbnM6IENoYXRDb250ZW50VG9UZXh0T3B0aW9ucyA9IHt9LFxuKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSByZXR1cm4gY29udGVudDtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IGNoYXRDb250ZW50UGFydHMoY29udGVudCk7XG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIFwiXCI7XG4gIGNvbnN0IHsgc2VwYXJhdG9yID0gXCJcIiwgdHlwZXMgfSA9IENoYXRDb250ZW50VG9UZXh0T3B0aW9uc1NjaGVtYS5wYXJzZShvcHRpb25zKTtcbiAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgcGFydCBvZiBub3JtYWxpemVkKSB7XG4gICAgaWYgKHR5cGVzICYmICh0eXBlb2YgcGFydC50eXBlICE9PSBcInN0cmluZ1wiIHx8ICF0eXBlcy5pbmNsdWRlcyhwYXJ0LnR5cGUpKSkgY29udGludWU7XG4gICAgaWYgKHR5cGVvZiBwYXJ0LnRleHQgPT09IFwic3RyaW5nXCIpIHBhcnRzLnB1c2gocGFydC50ZXh0KTtcbiAgfVxuICByZXR1cm4gcGFydHMuam9pbihzZXBhcmF0b3IpO1xufVxuIl19
@@ -1 +1 @@
1
- {"root":["../src/contracts.ts","../src/display.ts","../src/model.ts","../src/openai-chat.ts","../src/generated/_schemas.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/contracts.ts","../src/display.ts","../src/model.ts","../src/openai-chat.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -9,7 +9,6 @@
9
9
  "scripts": {
10
10
  "build": "projen build",
11
11
  "compile": "projen compile",
12
- "contracts": "projen contracts",
13
12
  "default": "projen default",
14
13
  "package": "projen package",
15
14
  "post-compile": "projen post-compile",
@@ -23,7 +22,7 @@
23
22
  "typescript": "^5.9.3"
24
23
  },
25
24
  "dependencies": {
26
- "@dbx-tools/shared-core": "^0.9.40",
25
+ "@dbx-tools/shared-core": "^0.9.46",
27
26
  "zod": "4.3.6"
28
27
  },
29
28
  "main": "./lib/index.js",
@@ -56,7 +55,7 @@
56
55
  "./package.json": "./package.json"
57
56
  }
58
57
  },
59
- "version": "0.9.40",
58
+ "version": "0.9.46",
60
59
  "types": "./lib/index.d.ts",
61
60
  "dbxToolsConfig": {
62
61
  "tags": [