@thinkhive/sdk 3.1.1 → 4.0.0

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.
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ /**
3
+ * ThinkHive SDK v3.1 - ROI Analytics API
4
+ *
5
+ * Business ROI & Metrics Engine for calculating financial impact
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.roiAnalytics = void 0;
9
+ exports.calculateRevenueAtRisk = calculateRevenueAtRisk;
10
+ exports.calculateAutomationSavings = calculateAutomationSavings;
11
+ exports.formatCurrency = formatCurrency;
12
+ exports.getROIQuality = getROIQuality;
13
+ const client_1 = require("../core/client");
14
+ // ============================================================================
15
+ // ROI ANALYTICS API CLIENT
16
+ // ============================================================================
17
+ /**
18
+ * ROI Analytics API client for business impact analysis
19
+ */
20
+ exports.roiAnalytics = {
21
+ /**
22
+ * Get aggregated ROI summary for traces in date range
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const summary = await roiAnalytics.summary({
27
+ * startDate: '2024-01-01',
28
+ * endDate: '2024-01-31',
29
+ * });
30
+ * console.log(`Revenue protected: $${summary.revenueProtected}`);
31
+ * ```
32
+ */
33
+ async summary(options = {}) {
34
+ const params = new URLSearchParams();
35
+ if (options.startDate) {
36
+ params.set('startDate', new Date(options.startDate).toISOString());
37
+ }
38
+ if (options.endDate) {
39
+ params.set('endDate', new Date(options.endDate).toISOString());
40
+ }
41
+ if (options.agentId) {
42
+ params.set('agentId', options.agentId);
43
+ }
44
+ const response = await (0, client_1.apiRequest)(`/analytics/roi/summary?${params.toString()}`, { apiVersion: 'v1' });
45
+ return response.data.summary;
46
+ },
47
+ /**
48
+ * Get ROI metrics for a specific agent
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const agentROI = await roiAnalytics.byAgent('agent_123', {
53
+ * startDate: '2024-01-01',
54
+ * });
55
+ * console.log(`Agent: ${agentROI.agent.name}`);
56
+ * console.log(`ROI: ${agentROI.roi.totalFinancialImpact}`);
57
+ * ```
58
+ */
59
+ async byAgent(agentId, options = {}) {
60
+ const params = new URLSearchParams();
61
+ if (options.startDate) {
62
+ params.set('startDate', new Date(options.startDate).toISOString());
63
+ }
64
+ if (options.endDate) {
65
+ params.set('endDate', new Date(options.endDate).toISOString());
66
+ }
67
+ return (0, client_1.apiRequestWithData)(`/analytics/roi/by-agent/${agentId}?${params.toString()}`, { apiVersion: 'v1' });
68
+ },
69
+ /**
70
+ * Get ROI trends over time
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * const trends = await roiAnalytics.trends({
75
+ * startDate: '2024-01-01',
76
+ * endDate: '2024-01-31',
77
+ * });
78
+ * for (const day of trends) {
79
+ * console.log(`${day.date}: ${day.successRate}% success`);
80
+ * }
81
+ * ```
82
+ */
83
+ async trends(options = {}) {
84
+ const params = new URLSearchParams();
85
+ if (options.startDate) {
86
+ params.set('startDate', new Date(options.startDate).toISOString());
87
+ }
88
+ if (options.endDate) {
89
+ params.set('endDate', new Date(options.endDate).toISOString());
90
+ }
91
+ if (options.agentId) {
92
+ params.set('agentId', options.agentId);
93
+ }
94
+ const response = await (0, client_1.apiRequest)(`/analytics/roi/trends?${params.toString()}`, { apiVersion: 'v1' });
95
+ return response.data.trends;
96
+ },
97
+ /**
98
+ * Calculate ROI for a trace or provided message data
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * // Calculate for existing trace
103
+ * const impact = await roiAnalytics.calculate({
104
+ * traceId: 'trace_abc123',
105
+ * });
106
+ *
107
+ * // Calculate for new data with custom config
108
+ * const impact = await roiAnalytics.calculate({
109
+ * userMessage: 'Help me cancel my subscription',
110
+ * agentResponse: 'I can help with that...',
111
+ * industryConfig: { industry: 'saas', avgCustomerLTV: 10000 },
112
+ * });
113
+ * ```
114
+ */
115
+ async calculate(options) {
116
+ const response = await (0, client_1.apiRequest)('/analytics/roi/calculate', {
117
+ method: 'POST',
118
+ body: options,
119
+ apiVersion: 'v1',
120
+ });
121
+ return response.data.impact;
122
+ },
123
+ /**
124
+ * Get available industry configurations
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * const industries = await roiAnalytics.industries();
129
+ * for (const config of industries) {
130
+ * console.log(`${config.name}: $${config.avgCustomerLTV} LTV`);
131
+ * }
132
+ * ```
133
+ */
134
+ async industries() {
135
+ const response = await (0, client_1.apiRequest)('/analytics/roi/industries', { apiVersion: 'v1' });
136
+ return response.data.industries;
137
+ },
138
+ /**
139
+ * Get correlation analysis for traces
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * const analysis = await roiAnalytics.correlations({
144
+ * startDate: '2024-01-01',
145
+ * agentId: 'agent_123',
146
+ * });
147
+ * console.log(`Health score: ${analysis.overallHealthScore}`);
148
+ * for (const insight of analysis.topInsights) {
149
+ * console.log(`- ${insight}`);
150
+ * }
151
+ * ```
152
+ */
153
+ async correlations(options = {}) {
154
+ const params = new URLSearchParams();
155
+ if (options.startDate) {
156
+ params.set('startDate', new Date(options.startDate).toISOString());
157
+ }
158
+ if (options.endDate) {
159
+ params.set('endDate', new Date(options.endDate).toISOString());
160
+ }
161
+ if (options.agentId) {
162
+ params.set('agentId', options.agentId);
163
+ }
164
+ const response = await (0, client_1.apiRequest)(`/analytics/roi/correlations?${params.toString()}`, { apiVersion: 'v1' });
165
+ return response.data.analysis;
166
+ },
167
+ };
168
+ // ============================================================================
169
+ // HELPER FUNCTIONS
170
+ // ============================================================================
171
+ /**
172
+ * Calculate estimated revenue at risk
173
+ */
174
+ function calculateRevenueAtRisk(failureRate, avgTransactionValue, totalInteractions) {
175
+ return failureRate * avgTransactionValue * totalInteractions;
176
+ }
177
+ /**
178
+ * Calculate estimated savings from automation
179
+ */
180
+ function calculateAutomationSavings(successfulInteractions, avgSupportCost) {
181
+ return successfulInteractions * avgSupportCost;
182
+ }
183
+ /**
184
+ * Format currency for display
185
+ */
186
+ function formatCurrency(amount, currency = 'USD') {
187
+ return new Intl.NumberFormat('en-US', {
188
+ style: 'currency',
189
+ currency,
190
+ }).format(amount);
191
+ }
192
+ /**
193
+ * Get ROI quality label
194
+ */
195
+ function getROIQuality(totalFinancialImpact) {
196
+ if (totalFinancialImpact > 100000)
197
+ return 'excellent';
198
+ if (totalFinancialImpact > 50000)
199
+ return 'good';
200
+ if (totalFinancialImpact > 10000)
201
+ return 'moderate';
202
+ return 'poor';
203
+ }
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9pLWFuYWx5dGljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm9pLWFuYWx5dGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBOFZILHdEQU1DO0FBS0QsZ0VBS0M7QUFLRCx3Q0FLQztBQUtELHNDQU9DO0FBbFlELDJDQUFnRTtBQTZIaEUsK0VBQStFO0FBQy9FLDJCQUEyQjtBQUMzQiwrRUFBK0U7QUFFL0U7O0dBRUc7QUFDVSxRQUFBLFlBQVksR0FBRztJQUMxQjs7Ozs7Ozs7Ozs7T0FXRztJQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsVUFJVixFQUFFO1FBQ0osTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLG1CQUFVLEVBQy9CLDBCQUEwQixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFDN0MsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQ3JCLENBQUM7UUFDRixPQUFPLFFBQVEsQ0FBQyxJQUFLLENB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QUFNLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQzNCLG9CQUE0QjtJQUU1QixJQUFJLG9CQUFvQixHQUFHLE1BQU07UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUN0RCxJQUFJLG9CQUFvQixHQUFHLEtBQUs7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNoRCxJQUFJLG9CQUFvQixHQUFHLEtBQUs7UUFBRSxPQUFPLFVBQVUsQ0FBQztJQUNwRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIHYzLjEgLSBST0kgQW5hbHl0aWNzIEFQSVxuICpcbiAqIEJ1c2luZXNzIFJPSSAmIE1ldHJpY3MgRW5naW5lIGZvciBjYWxjdWxhdGluZyBmaW5hbmNpYWwgaW1wYWN0XG4gKi9cblxuaW1wb3J0IHsgYXBpUmVxdWVzdCwgYXBpUmVxdWVzdFdpdGhEYXRhIH0gZnJvbSAnLi4vY29yZS9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBBcGlSZXNwb25zZSB9IGZyb20gJy4uL2NvcmUvdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEluZHVzdHJ5LXNwZWNpZmljIFJPSSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kdXN0cnlDb25maWcge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGF2Z1RyYW5zYWN0aW9uVmFsdWU6IG51bWJlcjtcbiAgYXZnQ3VzdG9tZXJMVFY6IG51bWJlcjtcbiAgYXZnU3VwcG9ydENvc3Q6IG51bWJlcjtcbiAgYXZnRXNjYWxhdGlvbkNvc3Q6IG51bWJlcjtcbiAgYXZnUmVzb2x1dGlvblRpbWU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDdXN0b20gaW5kdXN0cnkgY29uZmlnIGlucHV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tSW5kdXN0cnlDb25maWcge1xuICBpbmR1c3RyeT86IHN0cmluZztcbiAgYXZnVHJhbnNhY3Rpb25WYWx1ZT86IG51bWJlcjtcbiAgYXZnQ3VzdG9tZXJMVFY/OiBudW1iZXI7XG4gIGF2Z1N1cHBvcnRDb3N0PzogbnVtYmVyO1xuICBhdmdFc2NhbGF0aW9uQ29zdD86IG51bWJlcjtcbiAgY2h1cm5JbXBhY3RNdWx0aXBsaWVyPzogbnVtYmVyO1xuICBhdmdSZXNvbHV0aW9uVGltZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBST0kgbWV0cmljcyBzdW1tYXJ5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUk9JTWV0cmljcyB7XG4gIHJvaUNhdGVnb3J5OiBzdHJpbmc7XG4gIHRvdGFsRmluYW5jaWFsSW1wYWN0OiBudW1iZXI7XG4gIHJldmVudWVQcm90ZWN0ZWQ6IG51bWJlcjtcbiAgY29zdFNhdmluZ3M6IG51bWJlcjtcbiAgZWZmaWNpZW5jeUdhaW46IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCdXNpbmVzcyBpbXBhY3QgYW5hbHlzaXMgcmVzdWx0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVzaW5lc3NJbXBhY3Qge1xuICBpbXBhY3RTY29yZTogbnVtYmVyO1xuICByZXZlbnVlUmlzazogbnVtYmVyO1xuICBicmFuZFJpc2s6IG51bWJlcjtcbiAgY29tcGxpYW5jZVJpc2s6IG51bWJlcjtcbiAgb3BlcmF0aW9uYWxJbXBhY3Q6IG51bWJlcjtcbiAgY3VzdG9tZXJTYXRpc2ZhY3Rpb246IG51bWJlcjtcbiAgcmVjb21tZW5kYXRpb25zOiBzdHJpbmdbXTtcbiAgcm9pOiBST0lNZXRyaWNzO1xufVxuXG4vKipcbiAqIFJPSSBzdW1tYXJ5IGZvciBhIGRhdGUgcmFuZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBST0lTdW1tYXJ5IHtcbiAgZGF0ZVJhbmdlOiB7IHN0YXJ0OiBzdHJpbmc7IGVuZDogc3RyaW5nIH07XG4gIHRyYWNlQ291bnQ6IG51bWJlcjtcbiAgc3VjY2Vzc2Z1bEludGVyYWN0aW9uczogbnVtYmVyO1xuICBmYWlsZWRJbnRlcmFjdGlvbnM6IG51bWJlcjtcbiAgc3VjY2Vzc1JhdGU6IG51bWJlcjtcbiAgcm9pOiBST0lNZXRyaWNzO1xuICByZXZlbnVlUHJvdGVjdGVkOiBudW1iZXI7XG4gIGVzdGltYXRlZFNhdmluZ3M6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBEYWlseSB0cmVuZCBkYXRhIHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJlbmREYXRhUG9pbnQge1xuICBkYXRlOiBzdHJpbmc7XG4gIHRyYWNlQ291bnQ6IG51bWJlcjtcbiAgc3VjY2Vzc0NvdW50OiBudW1iZXI7XG4gIGZhaWx1cmVDb3VudDogbnVtYmVyO1xuICBzdWNjZXNzUmF0ZTogbnVtYmVyO1xuICBhdmdJbXBhY3RTY29yZTogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvcnJlbGF0aW9uIGZpbmRpbmdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb3JyZWxhdGlvbiB7XG4gIHR5cGU6IHN0cmluZztcbiAgc3RyZW5ndGg6IHN0cmluZztcbiAgY29lZmZpY2llbnQ6IG51bWJlcjtcbiAgY29uZmlkZW5jZTogbnVtYmVyO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBpbnNpZ2h0OiBzdHJpbmc7XG4gIHJlY29tbWVuZGF0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGF0dGVybiBjbHVzdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0dGVybkNsdXN0ZXIge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG1hdGNoQ291bnQ6IG51bWJlcjtcbiAgYXZnSW1wYWN0U2NvcmU6IG51bWJlcjtcbiAgYXZnQ2h1cm5SaXNrOiBudW1iZXI7XG4gIHRyZW5kOiBzdHJpbmc7XG4gIGV4YW1wbGVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb3JyZWxhdGlvbiBhbmFseXNpcyByZXN1bHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb3JyZWxhdGlvbkFuYWx5c2lzIHtcbiAgYW5hbHlzaXNJZDogc3RyaW5nO1xuICBhbmFseXplZEF0OiBzdHJpbmc7XG4gIHRyYWNlQ291bnQ6IG51bWJlcjtcbiAgdGltZVJhbmdlOiB7IHN0YXJ0OiBzdHJpbmc7IGVuZDogc3RyaW5nIH07XG4gIG92ZXJhbGxIZWFsdGhTY29yZTogbnVtYmVyO1xuICB0b3BJbnNpZ2h0czogc3RyaW5nW107XG4gIHJlY29tbWVuZGF0aW9uczogc3RyaW5nW107XG4gIGNvcnJlbGF0aW9uczogQ29ycmVsYXRpb25bXTtcbiAgcGF0dGVybkNsdXN0ZXJzOiBQYXR0ZXJuQ2x1c3RlcltdO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBST0kgQU5BTFlUSUNTIEFQSSBDTElFTlRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBST0kgQW5hbHl0aWNzIEFQSSBjbGllbnQgZm9yIGJ1c2luZXNzIGltcGFjdCBhbmFseXNpc1xuICovXG5leHBvcnQgY29uc3Qgcm9pQW5hbHl0aWNzID0ge1xuICAvKipcbiAgICogR2V0IGFnZ3JlZ2F0ZWQgUk9JIHN1bW1hcnkgZm9yIHRyYWNlcyBpbiBkYXRlIHJhbmdlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgc3VtbWFyeSA9IGF3YWl0IHJvaUFuYWx5dGljcy5zdW1tYXJ5KHtcbiAgICogICBzdGFydERhdGU6ICcyMDI0LTAxLTAxJyxcbiAgICogICBlbmREYXRlOiAnMjAyNC0wMS0zMScsXG4gICAqIH0pO1xuICAgKiBjb25zb2xlLmxvZyhgUmV2ZW51ZSBwcm90ZWN0ZWQ6ICQke3N1bW1hcnkucmV2ZW51ZVByb3RlY3RlZH1gKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBzdW1tYXJ5KG9wdGlvbnM6IHtcbiAgICBzdGFydERhdGU/OiBzdHJpbmcgfCBEYXRlO1xuICAgIGVuZERhdGU/OiBzdHJpbmcgfCBEYXRlO1xuICAgIGFnZW50SWQ/OiBzdHJpbmc7XG4gIH0gPSB7fSk6IFByb21pc2U8Uk9JU3VtbWFyeT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3B0aW9ucy5zdGFydERhdGUpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ3N0YXJ0RGF0ZScsIG5ldyBEYXRlKG9wdGlvbnMuc3RhcnREYXRlKS50b0lTT1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZW5kRGF0ZSkge1xuICAgICAgcGFyYW1zLnNldCgnZW5kRGF0ZScsIG5ldyBEYXRlKG9wdGlvbnMuZW5kRGF0ZSkudG9JU09TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFnZW50SWQpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ2FnZW50SWQnLCBvcHRpb25zLmFnZW50SWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdDxBcGlSZXNwb25zZTx7IHN1bW1hcnk6IFJPSVN1bW1hcnkgfT4+KFxuICAgICAgYC9hbmFseXRpY3Mvcm9pL3N1bW1hcnk/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxuICAgICAgeyBhcGlWZXJzaW9uOiAndjEnIH1cbiAgICApO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhIS5zdW1tYXJ5O1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgUk9JIG1ldHJpY3MgZm9yIGEgc3BlY2lmaWMgYWdlbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBhZ2VudFJPSSA9IGF3YWl0IHJvaUFuYWx5dGljcy5ieUFnZW50KCdhZ2VudF8xMjMnLCB7XG4gICAqICAgc3RhcnREYXRlOiAnMjAyNC0wMS0wMScsXG4gICAqIH0pO1xuICAgKiBjb25zb2xlLmxvZyhgQWdlbnQ6ICR7YWdlbnRST0kuYWdlbnQubmFtZX1gKTtcbiAgICogY29uc29sZS5sb2coYFJPSTogJHthZ2VudFJPSS5yb2kudG90YWxGaW5hbmNpYWxJbXBhY3R9YCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgYnlBZ2VudChcbiAgICBhZ2VudElkOiBzdHJpbmcsXG4gICAgb3B0aW9uczoge1xuICAgICAgc3RhcnREYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgICAgIGVuZERhdGU/OiBzdHJpbmcgfCBEYXRlO1xuICAgIH0gPSB7fVxuICApOiBQcm9taXNlPHtcbiAgICBhZ2VudDogeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGluZHVzdHJ5OiBzdHJpbmcgfTtcbiAgICBpbmR1c3RyeUNvbmZpZzogUGFydGlhbDxJbmR1c3RyeUNvbmZpZz47XG4gICAgcm9pOiBST0lNZXRyaWNzO1xuICAgIHJlY2VudEltcGFjdHM6IEFycmF5PHtcbiAgICAgIGltcGFjdFNjb3JlOiBudW1iZXI7XG4gICAgICByZXZlbnVlUmlzazogbnVtYmVyO1xuICAgICAgcm9pQ2F0ZWdvcnk6IHN0cmluZztcbiAgICAgIHRvdGFsRmluYW5jaWFsSW1wYWN0OiBudW1iZXI7XG4gICAgfT47XG4gIH0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9wdGlvbnMuc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXMuc2V0KCdzdGFydERhdGUnLCBuZXcgRGF0ZShvcHRpb25zLnN0YXJ0RGF0ZSkudG9JU09TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVuZERhdGUpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ2VuZERhdGUnLCBuZXcgRGF0ZShvcHRpb25zLmVuZERhdGUpLnRvSVNPU3RyaW5nKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGEoXG4gICAgICBgL2FuYWx5dGljcy9yb2kvYnktYWdlbnQvJHthZ2VudElkfT8ke3BhcmFtcy50b1N0cmluZygpfWAsXG4gICAgICB7IGFwaVZlcnNpb246ICd2MScgfVxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBST0kgdHJlbmRzIG92ZXIgdGltZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRyZW5kcyA9IGF3YWl0IHJvaUFuYWx5dGljcy50cmVuZHMoe1xuICAgKiAgIHN0YXJ0RGF0ZTogJzIwMjQtMDEtMDEnLFxuICAgKiAgIGVuZERhdGU6ICcyMDI0LTAxLTMxJyxcbiAgICogfSk7XG4gICAqIGZvciAoY29uc3QgZGF5IG9mIHRyZW5kcykge1xuICAgKiAgIGNvbnNvbGUubG9nKGAke2RheS5kYXRlfTogJHtkYXkuc3VjY2Vzc1JhdGV9JSBzdWNjZXNzYCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyB0cmVuZHMob3B0aW9uczoge1xuICAgIHN0YXJ0RGF0ZT86IHN0cmluZyB8IERhdGU7XG4gICAgZW5kRGF0ZT86IHN0cmluZyB8IERhdGU7XG4gICAgYWdlbnRJZD86IHN0cmluZztcbiAgfSA9IHt9KTogUHJvbWlzZTxUcmVuZERhdGFQb2ludFtdPiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcHRpb25zLnN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zLnNldCgnc3RhcnREYXRlJywgbmV3IERhdGUob3B0aW9ucy5zdGFydERhdGUpLnRvSVNPU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmREYXRlKSB7XG4gICAgICBwYXJhbXMuc2V0KCdlbmREYXRlJywgbmV3IERhdGUob3B0aW9ucy5lbmREYXRlKS50b0lTT1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYWdlbnRJZCkge1xuICAgICAgcGFyYW1zLnNldCgnYWdlbnRJZCcsIG9wdGlvbnMuYWdlbnRJZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0PEFwaVJlc3BvbnNlPHsgdHJlbmRzOiBUcmVuZERhdGFQb2ludFtdIH0+PihcbiAgICAgIGAvYW5hbHl0aWNzL3JvaS90cmVuZHM/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxuICAgICAgeyBhcGlWZXJzaW9uOiAndjEnIH1cbiAgICApO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhIS50cmVuZHM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBST0kgZm9yIGEgdHJhY2Ugb3IgcHJvdmlkZWQgbWVzc2FnZSBkYXRhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gQ2FsY3VsYXRlIGZvciBleGlzdGluZyB0cmFjZVxuICAgKiBjb25zdCBpbXBhY3QgPSBhd2FpdCByb2lBbmFseXRpY3MuY2FsY3VsYXRlKHtcbiAgICogICB0cmFjZUlkOiAndHJhY2VfYWJjMTIzJyxcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIENhbGN1bGF0ZSBmb3IgbmV3IGRhdGEgd2l0aCBjdXN0b20gY29uZmlnXG4gICAqIGNvbnN0IGltcGFjdCA9IGF3YWl0IHJvaUFuYWx5dGljcy5jYWxjdWxhdGUoe1xuICAgKiAgIHVzZXJNZXNzYWdlOiAnSGVscCBtZSBjYW5jZWwgbXkgc3Vic2NyaXB0aW9uJyxcbiAgICogICBhZ2VudFJlc3BvbnNlOiAnSSBjYW4gaGVscCB3aXRoIHRoYXQuLi4nLFxuICAgKiAgIGluZHVzdHJ5Q29uZmlnOiB7IGluZHVzdHJ5OiAnc2FhcycsIGF2Z0N1c3RvbWVyTFRWOiAxMDAwMCB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBjYWxjdWxhdGUob3B0aW9uczoge1xuICAgIHRyYWNlSWQ/OiBzdHJpbmc7XG4gICAgdXNlck1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgYWdlbnRSZXNwb25zZT86IHN0cmluZztcbiAgICBpbmR1c3RyeUNvbmZpZz86IEN1c3RvbUluZHVzdHJ5Q29uZmlnO1xuICB9KTogUHJvbWlzZTxCdXNpbmVzc0ltcGFjdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdDxBcGlSZXNwb25zZTx7IGltcGFjdDogQnVzaW5lc3NJbXBhY3QgfT4+KFxuICAgICAgJy9hbmFseXRpY3Mvcm9pL2NhbGN1bGF0ZScsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEhLmltcGFjdDtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGF2YWlsYWJsZSBpbmR1c3RyeSBjb25maWd1cmF0aW9uc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGluZHVzdHJpZXMgPSBhd2FpdCByb2lBbmFseXRpY3MuaW5kdXN0cmllcygpO1xuICAgKiBmb3IgKGNvbnN0IGNvbmZpZyBvZiBpbmR1c3RyaWVzKSB7XG4gICAqICAgY29uc29sZS5sb2coYCR7Y29uZmlnLm5hbWV9OiAkJHtjb25maWcuYXZnQ3VzdG9tZXJMVFZ9IExUVmApO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgaW5kdXN0cmllcygpOiBQcm9taXNlPEluZHVzdHJ5Q29uZmlnW10+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3Q8QXBpUmVzcG9uc2U8eyBpbmR1c3RyaWVzOiBJbmR1c3RyeUNvbmZpZ1tdIH0+PihcbiAgICAgICcvYW5hbHl0aWNzL3JvaS9pbmR1c3RyaWVzJyxcbiAgICAgIHsgYXBpVmVyc2lvbjogJ3YxJyB9XG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YSEuaW5kdXN0cmllcztcbiAgfSxcblxuICAvKipcbiAgICogR2V0IGNvcnJlbGF0aW9uIGFuYWx5c2lzIGZvciB0cmFjZXNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBhbmFseXNpcyA9IGF3YWl0IHJvaUFuYWx5dGljcy5jb3JyZWxhdGlvbnMoe1xuICAgKiAgIHN0YXJ0RGF0ZTogJzIwMjQtMDEtMDEnLFxuICAgKiAgIGFnZW50SWQ6ICdhZ2VudF8xMjMnLFxuICAgKiB9KTtcbiAgICogY29uc29sZS5sb2coYEhlYWx0aCBzY29yZTogJHthbmFseXNpcy5vdmVyYWxsSGVhbHRoU2NvcmV9YCk7XG4gICAqIGZvciAoY29uc3QgaW5zaWdodCBvZiBhbmFseXNpcy50b3BJbnNpZ2h0cykge1xuICAgKiAgIGNvbnNvbGUubG9nKGAtICR7aW5zaWdodH1gKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGNvcnJlbGF0aW9ucyhvcHRpb25zOiB7XG4gICAgc3RhcnREYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgICBlbmREYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgICBhZ2VudElkPzogc3RyaW5nO1xuICB9ID0ge30pOiBQcm9taXNlPENvcnJlbGF0aW9uQW5hbHlzaXM+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9wdGlvbnMuc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXMuc2V0KCdzdGFydERhdGUnLCBuZXcgRGF0ZShvcHRpb25zLnN0YXJ0RGF0ZSkudG9JU09TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVuZERhdGUpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ2VuZERhdGUnLCBuZXcgRGF0ZShvcHRpb25zLmVuZERhdGUpLnRvSVNPU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hZ2VudElkKSB7XG4gICAgICBwYXJhbXMuc2V0KCdhZ2VudElkJywgb3B0aW9ucy5hZ2VudElkKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3Q8QXBpUmVzcG9uc2U8eyBhbmFseXNpczogQ29ycmVsYXRpb25BbmFseXNpcyB9Pj4oXG4gICAgICBgL2FuYWx5dGljcy9yb2kvY29ycmVsYXRpb25zPyR7cGFyYW1zLnRvU3RyaW5nKCl9YCxcbiAgICAgIHsgYXBpVmVyc2lvbjogJ3YxJyB9XG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YSEuYW5hbHlzaXM7XG4gIH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQ2FsY3VsYXRlIGVzdGltYXRlZCByZXZlbnVlIGF0IHJpc2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVJldmVudWVBdFJpc2soXG4gIGZhaWx1cmVSYXRlOiBudW1iZXIsXG4gIGF2Z1RyYW5zYWN0aW9uVmFsdWU6IG51bWJlcixcbiAgdG90YWxJbnRlcmFjdGlvbnM6IG51bWJlclxuKTogbnVtYmVyIHtcbiAgcmV0dXJuIGZhaWx1cmVSYXRlICogYXZnVHJhbnNhY3Rpb25WYWx1ZSAqIHRvdGFsSW50ZXJhY3Rpb25zO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBlc3RpbWF0ZWQgc2F2aW5ncyBmcm9tIGF1dG9tYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUF1dG9tYXRpb25TYXZpbmdzKFxuICBzdWNjZXNzZnVsSW50ZXJhY3Rpb25zOiBudW1iZXIsXG4gIGF2Z1N1cHBvcnRDb3N0OiBudW1iZXJcbik6IG51bWJlciB7XG4gIHJldHVybiBzdWNjZXNzZnVsSW50ZXJhY3Rpb25zICogYXZnU3VwcG9ydENvc3Q7XG59XG5cbi8qKlxuICogRm9ybWF0IGN1cnJlbmN5IGZvciBkaXNwbGF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRDdXJyZW5jeShhbW91bnQ6IG51bWJlciwgY3VycmVuY3kgPSAnVVNEJyk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ2VuLVVTJywge1xuICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgIGN1cnJlbmN5LFxuICB9KS5mb3JtYXQoYW1vdW50KTtcbn1cblxuLyoqXG4gKiBHZXQgUk9JIHF1YWxpdHkgbGFiZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJPSVF1YWxpdHkoXG4gIHRvdGFsRmluYW5jaWFsSW1wYWN0OiBudW1iZXJcbik6ICdleGNlbGxlbnQnIHwgJ2dvb2QnIHwgJ21vZGVyYXRlJyB8ICdwb29yJyB7XG4gIGlmICh0b3RhbEZpbmFuY2lhbEltcGFjdCA+IDEwMDAwMCkgcmV0dXJuICdleGNlbGxlbnQnO1xuICBpZiAodG90YWxGaW5hbmNpYWxJbXBhY3QgPiA1MDAwMCkgcmV0dXJuICdnb29kJztcbiAgaWYgKHRvdGFsRmluYW5jaWFsSW1wYWN0ID4gMTAwMDApIHJldHVybiAnbW9kZXJhdGUnO1xuICByZXR1cm4gJ3Bvb3InO1xufVxuIl19
package/dist/api/runs.js CHANGED
@@ -52,10 +52,12 @@ exports.runs = {
52
52
  sessionId: options.sessionId,
53
53
  customerContext: options.customerContext,
54
54
  metadata: options.metadata,
55
+ metrics: options.metrics,
55
56
  };
56
57
  return (0, client_1.apiRequestWithData)('/runs', {
57
58
  method: 'POST',
58
59
  body: payload,
60
+ apiVersion: 'v3',
59
61
  });
60
62
  },
61
63
  /**
@@ -67,7 +69,7 @@ exports.runs = {
67
69
  * ```
68
70
  */
69
71
  async get(runId) {
70
- return (0, client_1.apiRequestWithData)(`/runs/${runId}`);
72
+ return (0, client_1.apiRequestWithData)(`/runs/${runId}`, { apiVersion: 'v3' });
71
73
  },
72
74
  /**
73
75
  * List runs with filters
@@ -101,7 +103,7 @@ exports.runs = {
101
103
  params.set('limit', String(options.limit));
102
104
  if (options.offset)
103
105
  params.set('offset', String(options.offset));
104
- const response = await (0, client_1.apiRequest)(`/runs?${params.toString()}`);
106
+ const response = await (0, client_1.apiRequest)(`/runs?${params.toString()}`, { apiVersion: 'v3' });
105
107
  return response.data;
106
108
  },
107
109
  /**
@@ -119,6 +121,7 @@ exports.runs = {
119
121
  return (0, client_1.apiRequestWithData)(`/runs/${runId}`, {
120
122
  method: 'PUT',
121
123
  body: updates,
124
+ apiVersion: 'v3',
122
125
  });
123
126
  },
124
127
  /**
@@ -130,7 +133,7 @@ exports.runs = {
130
133
  * ```
131
134
  */
132
135
  async delete(runId) {
133
- await (0, client_1.apiRequest)(`/runs/${runId}`, { method: 'DELETE' });
136
+ await (0, client_1.apiRequest)(`/runs/${runId}`, { method: 'DELETE', apiVersion: 'v3' });
134
137
  },
135
138
  /**
136
139
  * Create multiple runs in batch
@@ -158,10 +161,12 @@ exports.runs = {
158
161
  sessionId: r.sessionId,
159
162
  customerContext: r.customerContext,
160
163
  metadata: r.metadata,
164
+ metrics: r.metrics,
161
165
  }));
162
166
  return (0, client_1.apiRequestWithData)('/runs/batch', {
163
167
  method: 'POST',
164
168
  body: { runs: payload },
169
+ apiVersion: 'v3',
165
170
  });
166
171
  },
167
172
  /**
@@ -181,7 +186,7 @@ exports.runs = {
181
186
  params.set('from', new Date(options.from).toISOString());
182
187
  if (options.to)
183
188
  params.set('to', new Date(options.to).toISOString());
184
- return (0, client_1.apiRequestWithData)(`/runs/stats/${agentId}?${params.toString()}`);
189
+ return (0, client_1.apiRequestWithData)(`/runs/stats/${agentId}?${params.toString()}`, { apiVersion: 'v3' });
185
190
  },
186
191
  /**
187
192
  * Get traces for a run
@@ -192,7 +197,7 @@ exports.runs = {
192
197
  * ```
193
198
  */
194
199
  async getTraces(runId) {
195
- return (0, client_1.apiRequestWithData)(`/runs/${runId}/traces`);
200
+ return (0, client_1.apiRequestWithData)(`/runs/${runId}/traces`, { apiVersion: 'v3' });
196
201
  },
197
202
  /**
198
203
  * Add a trace to a run
@@ -209,6 +214,7 @@ exports.runs = {
209
214
  return (0, client_1.apiRequestWithData)(`/runs/${runId}/traces`, {
210
215
  method: 'POST',
211
216
  body: traceData,
217
+ apiVersion: 'v3',
212
218
  });
213
219
  },
214
220
  };
@@ -259,4 +265,4 @@ function fromOpenAIMessages(messages) {
259
265
  content: m.content,
260
266
  }));
261
267
  }
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcnVucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBZ1NILG9EQWFDO0FBS0QsNENBT0M7QUFLRCxnREFPQztBQW5VRCwyQ0FBZ0U7QUEwQ2hFOztHQUVHO0FBQ1UsUUFBQSxJQUFJLEdBQUc7SUFDbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQW1CO1FBQzlCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTO1lBQ2pDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQzNDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTdCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFNBQVM7WUFDVCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3RCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUN6QyxDQUFDLENBQUMsU0FBUztZQUNiLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDcEMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLG9CQUFvQjtZQUNsRCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1lBQ3BDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7WUFDeEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1NBQzNCLENBQUM7UUFFRixPQUFPLElBQUEsMkJBQWtCLEVBQWMsT0FBTyxFQUFFO1lBQzlD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Q0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQ2hDLFFBQWtEO0lBRWxELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQW1DO1FBQzNDLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztLQUNuQixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaW5rSGl2ZSBTREsgdjMuMCAtIFJ1bnMgQVBJXG4gKlxuICogUnVuLWNlbnRyaWMgQVBJIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgcnVucyAodGhlIGF0b21pYyB1bml0IGluIHYzKVxuICovXG5cbmltcG9ydCB7IGFwaVJlcXVlc3QsIGFwaVJlcXVlc3RXaXRoRGF0YSB9IGZyb20gJy4uL2NvcmUvY2xpZW50JztcbmltcG9ydCB0eXBlIHtcbiAgUnVuT3B0aW9ucyxcbiAgUnVuUmVzcG9uc2UsXG4gIEFwaVJlc3BvbnNlLFxuICBQYWdpbmF0ZWRSZXNwb25zZSxcbiAgQ3VzdG9tZXJDb250ZXh0U25hcHNob3QsXG4gIENvbnZlcnNhdGlvbk1lc3NhZ2UsXG4gIFJ1bk91dGNvbWUsXG59IGZyb20gJy4uL2NvcmUvdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSVU5TIEFQSSBDTElFTlRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBMaXN0IHJ1bnMgcXVlcnkgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RSdW5zT3B0aW9ucyB7XG4gIGFnZW50SWQ/OiBzdHJpbmc7XG4gIHRpY2tldElkPzogc3RyaW5nO1xuICBjdXN0b21lckFjY291bnRJZD86IHN0cmluZztcbiAgb3V0Y29tZT86IFJ1bk91dGNvbWU7XG4gIHN0YXJ0ZWRBZnRlcj86IHN0cmluZyB8IERhdGU7XG4gIHN0YXJ0ZWRCZWZvcmU/OiBzdHJpbmcgfCBEYXRlO1xuICBsaW1pdD86IG51bWJlcjtcbiAgb2Zmc2V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJ1biBzdGF0cyByZXNwb25zZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1blN0YXRzIHtcbiAgYWdlbnRJZDogc3RyaW5nO1xuICBwZXJpb2Q6IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH07XG4gIHRvdGFsUnVuczogbnVtYmVyO1xuICBvdXRjb21lQnJlYWtkb3duOiBSZWNvcmQ8UnVuT3V0Y29tZSwgbnVtYmVyPjtcbiAgYXZnRHVyYXRpb25NczogbnVtYmVyO1xuICBsaW5rZWRUaWNrZXRzOiBudW1iZXI7XG4gIHVubGlua2VkUnVuczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJ1bnMgQVBJIGNsaWVudCBmb3IgdjMgcnVuLWNlbnRyaWMgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgY29uc3QgcnVucyA9IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBydW5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBydW4gPSBhd2FpdCBydW5zLmNyZWF0ZSh7XG4gICAqICAgYWdlbnRJZDogJ2FnZW50XzEyMycsXG4gICAqICAgY29udmVyc2F0aW9uTWVzc2FnZXM6IFtcbiAgICogICAgIHsgcm9sZTogJ3VzZXInLCBjb250ZW50OiAnSGVscCBtZSB3aXRoIG15IG9yZGVyJyB9LFxuICAgKiAgICAgeyByb2xlOiAnYXNzaXN0YW50JywgY29udGVudDogJ0kgY2FuIGhlbHAgd2l0aCB0aGF0Li4uJyB9LFxuICAgKiAgIF0sXG4gICAqICAgb3V0Y29tZTogJ3Jlc29sdmVkJyxcbiAgICogICBjdXN0b21lckNvbnRleHQ6IHtcbiAgICogICAgIGFycjogNTAwMDAsXG4gICAqICAgICBoZWFsdGhTY29yZTogODUsXG4gICAqICAgICBzZWdtZW50OiAnZW50ZXJwcmlzZScsXG4gICAqICAgfSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlKG9wdGlvbnM6IFJ1bk9wdGlvbnMpOiBQcm9taXNlPFJ1blJlc3BvbnNlPiB7XG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gb3B0aW9ucy5zdGFydGVkQXRcbiAgICAgID8gbmV3IERhdGUob3B0aW9ucy5zdGFydGVkQXQpLnRvSVNPU3RyaW5nKClcbiAgICAgIDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGFnZW50SWQ6IG9wdGlvbnMuYWdlbnRJZCxcbiAgICAgIHN0YXJ0ZWRBdCxcbiAgICAgIGVuZGVkQXQ6IG9wdGlvbnMuZW5kZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMuZW5kZWRBdCkudG9JU09TdHJpbmcoKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIG91dGNvbWU6IG9wdGlvbnMub3V0Y29tZSxcbiAgICAgIG91dGNvbWVSZWFzb246IG9wdGlvbnMub3V0Y29tZVJlYXNvbixcbiAgICAgIGNvbnZlcnNhdGlvbk1lc3NhZ2VzOiBvcHRpb25zLmNvbnZlcnNhdGlvbk1lc3NhZ2VzLFxuICAgICAgbW9kZWxJZDogb3B0aW9ucy5tb2RlbElkLFxuICAgICAgcHJvbXB0VmVyc2lvbjogb3B0aW9ucy5wcm9tcHRWZXJzaW9uLFxuICAgICAgc2Vzc2lvbklkOiBvcHRpb25zLnNlc3Npb25JZCxcbiAgICAgIGN1c3RvbWVyQ29udGV4dDogb3B0aW9ucy5jdXN0b21lckNvbnRleHQsXG4gICAgICBtZXRhZGF0YTogb3B0aW9ucy5tZXRhZGF0YSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxSdW5SZXNwb25zZT4oJy9ydW5zJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBwYXlsb2FkLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSBydW4gYnkgSURcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBydW4gPSBhd2FpdCBydW5zLmdldCgncnVuX2FiYzEyMycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldChydW5JZDogc3RyaW5nKTogUHJvbWlzZTxSdW5SZXNwb25zZT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8UnVuUmVzcG9uc2U+KGAvcnVucy8ke3J1bklkfWApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMaXN0IHJ1bnMgd2l0aCBmaWx0ZXJzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgeyBpdGVtcywgaGFzTW9yZSB9ID0gYXdhaXQgcnVucy5saXN0KHtcbiAgICogICBhZ2VudElkOiAnYWdlbnRfMTIzJyxcbiAgICogICBvdXRjb21lOiAnZmFpbGVkJyxcbiAgICogICBsaW1pdDogMjAsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGxpc3QoXG4gICAgb3B0aW9uczogTGlzdFJ1bnNPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTx7IGl0ZW1zOiBSdW5SZXNwb25zZVtdOyBsaW1pdDogbnVtYmVyOyBvZmZzZXQ6IG51bWJlcjsgaGFzTW9yZTogYm9vbGVhbiB9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcHRpb25zLmFnZW50SWQpIHBhcmFtcy5zZXQoJ2FnZW50SWQnLCBvcHRpb25zLmFnZW50SWQpO1xuICAgIGlmIChvcHRpb25zLnRpY2tldElkKSBwYXJhbXMuc2V0KCd0aWNrZXRJZCcsIG9wdGlvbnMudGlja2V0SWQpO1xuICAgIGlmIChvcHRpb25zLmN1c3RvbWVyQWNjb3VudElkKSBwYXJhbXMuc2V0KCdjdXN0b21lckFjY291bnRJZCcsIG9wdGlvbnMuY3VzdG9tZXJBY2NvdW50SWQpO1xuICAgIGlmIChvcHRpb25zLm91dGNvbWUpIHBhcmFtcy5zZXQoJ291dGNvbWUnLCBvcHRpb25zLm91dGNvbWUpO1xuICAgIGlmIChvcHRpb25zLnN0YXJ0ZWRBZnRlcikge1xuICAgICAgcGFyYW1zLnNldCgnc3RhcnRlZEFmdGVyJywgbmV3IERhdGUob3B0aW9ucy5zdGFydGVkQWZ0ZXIpLnRvSVNPU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zdGFydGVkQmVmb3JlKSB7XG4gICAgICBwYXJhbXMuc2V0KCdzdGFydGVkQmVmb3JlJywgbmV3IERhdGUob3B0aW9ucy5zdGFydGVkQmVmb3JlKS50b0lTT1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGltaXQpIHBhcmFtcy5zZXQoJ2xpbWl0JywgU3RyaW5nKG9wdGlvbnMubGltaXQpKTtcbiAgICBpZiAob3B0aW9ucy5vZmZzZXQpIHBhcmFtcy5zZXQoJ29mZnNldCcsIFN0cmluZyhvcHRpb25zLm9mZnNldCkpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0PFBhZ2luYXRlZFJlc3BvbnNlPFJ1blJlc3BvbnNlPj4oXG4gICAgICBgL3J1bnM/JHtwYXJhbXMudG9TdHJpbmcoKX1gXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlIGEgcnVuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgcnVucy51cGRhdGUoJ3J1bl9hYmMxMjMnLCB7XG4gICAqICAgb3V0Y29tZTogJ3Jlc29sdmVkJyxcbiAgICogICBvdXRjb21lUmVhc29uOiAnQ3VzdG9tZXIgY29uZmlybWVkIGlzc3VlIHJlc29sdmVkJyxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlKFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxQaWNrPFJ1bk9wdGlvbnMsICdvdXRjb21lJyB8ICdvdXRjb21lUmVhc29uJyB8ICdlbmRlZEF0JyB8ICdtZXRhZGF0YSc+PlxuICApOiBQcm9taXNlPFJ1blJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxSdW5SZXNwb25zZT4oYC9ydW5zLyR7cnVuSWR9YCwge1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIGJvZHk6IHVwZGF0ZXMsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhIHJ1blxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IHJ1bnMuZGVsZXRlKCdydW5fYWJjMTIzJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKHJ1bklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBhcGlSZXF1ZXN0KGAvcnVucy8ke3J1bklkfWAsIHsgbWV0aG9kOiAnREVMRVRFJyB9KTtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlIG11bHRpcGxlIHJ1bnMgaW4gYmF0Y2hcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB7IGNyZWF0ZWQsIGZhaWxlZCB9ID0gYXdhaXQgcnVucy5iYXRjaChbXG4gICAqICAgeyBhZ2VudElkOiAnYWdlbnRfMScsIGNvbnZlcnNhdGlvbk1lc3NhZ2VzOiBbLi4uXSB9LFxuICAgKiAgIHsgYWdlbnRJZDogJ2FnZW50XzEnLCBjb252ZXJzYXRpb25NZXNzYWdlczogWy4uLl0gfSxcbiAgICogXSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgYmF0Y2goXG4gICAgcnVuc0RhdGE6IFJ1bk9wdGlvbnNbXVxuICApOiBQcm9taXNlPHsgY3JlYXRlZDogUnVuUmVzcG9uc2VbXTsgZmFpbGVkOiBBcnJheTx7IGluZGV4OiBudW1iZXI7IGVycm9yOiBzdHJpbmcgfT4gfT4ge1xuICAgIGNvbnN0IHBheWxvYWQgPSBydW5zRGF0YS5tYXAoKHIpID0+ICh7XG4gICAgICBhZ2VudElkOiByLmFnZW50SWQsXG4gICAgICBzdGFydGVkQXQ6IHIuc3RhcnRlZEF0XG4gICAgICAgID8gbmV3IERhdGUoci5zdGFydGVkQXQpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBlbmRlZEF0OiByLmVuZGVkQXQgPyBuZXcgRGF0ZShyLmVuZGVkQXQpLnRvSVNPU3RyaW5nKCkgOiB1bmRlZmluZWQsXG4gICAgICBvdXRjb21lOiByLm91dGNvbWUsXG4gICAgICBvdXRjb21lUmVhc29uOiByLm91dGNvbWVSZWFzb24sXG4gICAgICBjb252ZXJzYXRpb25NZXNzYWdlczogci5jb252ZXJzYXRpb25NZXNzYWdlcyxcbiAgICAgIG1vZGVsSWQ6IHIubW9kZWxJZCxcbiAgICAgIHByb21wdFZlcnNpb246IHIucHJvbXB0VmVyc2lvbixcbiAgICAgIHNlc3Npb25JZDogci5zZXNzaW9uSWQsXG4gICAgICBjdXN0b21lckNvbnRleHQ6IHIuY3VzdG9tZXJDb250ZXh0LFxuICAgICAgbWV0YWRhdGE6IHIubWV0YWRhdGEsXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YSgnL3J1bnMvYmF0Y2gnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHsgcnVuczogcGF5bG9hZCB9LFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgcnVuIHN0YXRpc3RpY3MgZm9yIGFuIGFnZW50XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgc3RhdHMgPSBhd2FpdCBydW5zLnN0YXRzKCdhZ2VudF8xMjMnLCB7XG4gICAqICAgZnJvbTogJzIwMjQtMDEtMDEnLFxuICAgKiAgIHRvOiAnMjAyNC0wMS0zMScsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHN0YXRzKFxuICAgIGFnZW50SWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IGZyb20/OiBzdHJpbmcgfCBEYXRlOyB0bz86IHN0cmluZyB8IERhdGUgfSA9IHt9XG4gICk6IFByb21pc2U8UnVuU3RhdHM+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9wdGlvbnMuZnJvbSkgcGFyYW1zLnNldCgnZnJvbScsIG5ldyBEYXRlKG9wdGlvbnMuZnJvbSkudG9JU09TdHJpbmcoKSk7XG4gICAgaWYgKG9wdGlvbnMudG8pIHBhcmFtcy5zZXQoJ3RvJywgbmV3IERhdGUob3B0aW9ucy50bykudG9JU09TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPFJ1blN0YXRzPihcbiAgICAgIGAvcnVucy9zdGF0cy8ke2FnZW50SWR9PyR7cGFyYW1zLnRvU3RyaW5nKCl9YFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCB0cmFjZXMgZm9yIGEgcnVuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdHJhY2VzID0gYXdhaXQgcnVucy5nZXRUcmFjZXMoJ3J1bl9hYmMxMjMnKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXRUcmFjZXMocnVuSWQ6IHN0cmluZyk6IFByb21pc2U8dW5rbm93bltdPiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTx1bmtub3duW10+KGAvcnVucy8ke3J1bklkfS90cmFjZXNgKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGEgdHJhY2UgdG8gYSBydW5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhd2FpdCBydW5zLmFkZFRyYWNlKCdydW5fYWJjMTIzJywge1xuICAgKiAgIHNwYW5zOiBbLi4uXSxcbiAgICogICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgYWRkVHJhY2UoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICB0cmFjZURhdGE6IHsgc3BhbnM/OiB1bmtub3duW107IHRpbWVzdGFtcD86IHN0cmluZzsgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9XG4gICk6IFByb21pc2U8eyB0cmFjZUlkOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGEoYC9ydW5zLyR7cnVuSWR9L3RyYWNlc2AsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogdHJhY2VEYXRhLFxuICAgIH0pO1xuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENyZWF0ZSBhIHJ1biB3aXRoIGN1c3RvbWVyIGNvbnRleHQgc25hcHNob3RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcnVuID0gYXdhaXQgY3JlYXRlUnVuV2l0aENvbnRleHQoe1xuICogICBhZ2VudElkOiAnYWdlbnRfMTIzJyxcbiAqICAgY29udmVyc2F0aW9uTWVzc2FnZXM6IFsuLi5dLFxuICogICBjdXN0b21lckNvbnRleHQ6IHtcbiAqICAgICBhcnI6IDEwMDAwMCxcbiAqICAgICBoZWFsdGhTY29yZTogOTIsXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUnVuV2l0aENvbnRleHQoXG4gIG9wdGlvbnM6IFJ1bk9wdGlvbnMgJiB7IGN1c3RvbWVyQ29udGV4dDogQ3VzdG9tZXJDb250ZXh0U25hcHNob3QgfVxuKTogUHJvbWlzZTxSdW5SZXNwb25zZT4ge1xuICAvLyBFbnN1cmUgY2FwdHVyZWRBdCBpcyBzZXRcbiAgY29uc3QgY3VzdG9tZXJDb250ZXh0OiBDdXN0b21lckNvbnRleHRTbmFwc2hvdCA9IHtcbiAgICAuLi5vcHRpb25zLmN1c3RvbWVyQ29udGV4dCxcbiAgICBjYXB0dXJlZEF0OiBvcHRpb25zLmN1c3RvbWVyQ29udGV4dC5jYXB0dXJlZEF0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfTtcblxuICByZXR1cm4gcnVucy5jcmVhdGUoe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY3VzdG9tZXJDb250ZXh0LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGNvbnZlcnNhdGlvbiBtZXNzYWdlcyB0byBPcGVuQUkgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b09wZW5BSU1lc3NhZ2VzKFxuICBtZXNzYWdlczogQ29udmVyc2F0aW9uTWVzc2FnZVtdXG4pOiBBcnJheTx7IHJvbGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIG1lc3NhZ2VzLm1hcCgobSkgPT4gKHtcbiAgICByb2xlOiBtLnJvbGUsXG4gICAgY29udGVudDogbS5jb250ZW50LFxuICB9KSk7XG59XG5cbi8qKlxuICogQ29udmVydCBPcGVuQUkgZm9ybWF0IG1lc3NhZ2VzIHRvIFRoaW5rSGl2ZSBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21PcGVuQUlNZXNzYWdlcyhcbiAgbWVzc2FnZXM6IEFycmF5PHsgcm9sZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT5cbik6IENvbnZlcnNhdGlvbk1lc3NhZ2VbXSB7XG4gIHJldHVybiBtZXNzYWdlcy5tYXAoKG0pID0+ICh7XG4gICAgcm9sZTogbS5yb2xlIGFzIENvbnZlcnNhdGlvbk1lc3NhZ2VbJ3JvbGUnXSxcbiAgICBjb250ZW50OiBtLmNvbnRlbnQsXG4gIH0pKTtcbn1cbiJdfQ==
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcnVucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBd1NILG9EQWFDO0FBS0QsNENBT0M7QUFLRCxnREFPQztBQTNVRCwyQ0FBZ0U7QUEwQ2hFOztHQUVHO0FBQ1UsUUFBQSxJQUFJLEdBQUc7SUFDbEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtQkc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQW1CO1FBQzlCLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTO1lBQ2pDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQzNDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTdCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFNBQVM7WUFDVCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3RCLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFO2dCQUN6QyxDQUFDLENBQUMsU0FBUztZQUNiLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDcEMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLG9CQUFvQjtZQUNsRCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1lBQ3BDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7WUFDeEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztTQUN6QixDQUFDO1FBRUYsT0FBTyxJ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RUFBRTtLQUMzRSxDQUFDO0lBRUYsT0FBTyxZQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pCLEdBQUcsT0FBTztRQUNWLGVBQWU7S0FDaEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLFFBQStCO0lBRS9CLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUk7UUFDWixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87S0FDbkIsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FDaEMsUUFBa0Q7SUFFbEQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBbUM7UUFDM0MsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPO0tBQ25CLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4wIC0gUnVucyBBUElcbiAqXG4gKiBSdW4tY2VudHJpYyBBUEkgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyBydW5zICh0aGUgYXRvbWljIHVuaXQgaW4gdjMpXG4gKi9cblxuaW1wb3J0IHsgYXBpUmVxdWVzdCwgYXBpUmVxdWVzdFdpdGhEYXRhIH0gZnJvbSAnLi4vY29yZS9jbGllbnQnO1xuaW1wb3J0IHR5cGUge1xuICBSdW5PcHRpb25zLFxuICBSdW5SZXNwb25zZSxcbiAgQXBpUmVzcG9uc2UsXG4gIFBhZ2luYXRlZFJlc3BvbnNlLFxuICBDdXN0b21lckNvbnRleHRTbmFwc2hvdCxcbiAgQ29udmVyc2F0aW9uTWVzc2FnZSxcbiAgUnVuT3V0Y29tZSxcbn0gZnJvbSAnLi4vY29yZS90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJVTlMgQVBJIENMSUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIExpc3QgcnVucyBxdWVyeSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFJ1bnNPcHRpb25zIHtcbiAgYWdlbnRJZD86IHN0cmluZztcbiAgdGlja2V0SWQ/OiBzdHJpbmc7XG4gIGN1c3RvbWVyQWNjb3VudElkPzogc3RyaW5nO1xuICBvdXRjb21lPzogUnVuT3V0Y29tZTtcbiAgc3RhcnRlZEFmdGVyPzogc3RyaW5nIHwgRGF0ZTtcbiAgc3RhcnRlZEJlZm9yZT86IHN0cmluZyB8IERhdGU7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUnVuIHN0YXRzIHJlc3BvbnNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuU3RhdHMge1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIHBlcmlvZDogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfTtcbiAgdG90YWxSdW5zOiBudW1iZXI7XG4gIG91dGNvbWVCcmVha2Rvd246IFJlY29yZDxSdW5PdXRjb21lLCBudW1iZXI+O1xuICBhdmdEdXJhdGlvbk1zOiBudW1iZXI7XG4gIGxpbmtlZFRpY2tldHM6IG51bWJlcjtcbiAgdW5saW5rZWRSdW5zOiBudW1iZXI7XG59XG5cbi8qKlxuICogUnVucyBBUEkgY2xpZW50IGZvciB2MyBydW4tY2VudHJpYyBvcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBydW5zID0ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHJ1blxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJ1biA9IGF3YWl0IHJ1bnMuY3JlYXRlKHtcbiAgICogICBhZ2VudElkOiAnYWdlbnRfMTIzJyxcbiAgICogICBjb252ZXJzYXRpb25NZXNzYWdlczogW1xuICAgKiAgICAgeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6ICdIZWxwIG1lIHdpdGggbXkgb3JkZXInIH0sXG4gICAqICAgICB7IHJvbGU6ICdhc3Npc3RhbnQnLCBjb250ZW50OiAnSSBjYW4gaGVscCB3aXRoIHRoYXQuLi4nIH0sXG4gICAqICAgXSxcbiAgICogICBvdXRjb21lOiAncmVzb2x2ZWQnLFxuICAgKiAgIGN1c3RvbWVyQ29udGV4dDoge1xuICAgKiAgICAgYXJyOiA1MDAwMCxcbiAgICogICAgIGhlYWx0aFNjb3JlOiA4NSxcbiAgICogICAgIHNlZ21lbnQ6ICdlbnRlcnByaXNlJyxcbiAgICogICB9LFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBjcmVhdGUob3B0aW9uczogUnVuT3B0aW9ucyk6IFByb21pc2U8UnVuUmVzcG9uc2U+IHtcbiAgICBjb25zdCBzdGFydGVkQXQgPSBvcHRpb25zLnN0YXJ0ZWRBdFxuICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnN0YXJ0ZWRBdCkudG9JU09TdHJpbmcoKVxuICAgICAgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgYWdlbnRJZDogb3B0aW9ucy5hZ2VudElkLFxuICAgICAgc3RhcnRlZEF0LFxuICAgICAgZW5kZWRBdDogb3B0aW9ucy5lbmRlZEF0XG4gICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5lbmRlZEF0KS50b0lTT1N0cmluZygpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgb3V0Y29tZTogb3B0aW9ucy5vdXRjb21lLFxuICAgICAgb3V0Y29tZVJlYXNvbjogb3B0aW9ucy5vdXRjb21lUmVhc29uLFxuICAgICAgY29udmVyc2F0aW9uTWVzc2FnZXM6IG9wdGlvbnMuY29udmVyc2F0aW9uTWVzc2FnZXMsXG4gICAgICBtb2RlbElkOiBvcHRpb25zLm1vZGVsSWQsXG4gICAgICBwcm9tcHRWZXJzaW9uOiBvcHRpb25zLnByb21wdFZlcnNpb24sXG4gICAgICBzZXNzaW9uSWQ6IG9wdGlvbnMuc2Vzc2lvbklkLFxuICAgICAgY3VzdG9tZXJDb250ZXh0OiBvcHRpb25zLmN1c3RvbWVyQ29udGV4dCxcbiAgICAgIG1ldGFkYXRhOiBvcHRpb25zLm1ldGFkYXRhLFxuICAgICAgbWV0cmljczogb3B0aW9ucy5tZXRyaWNzLFxuICAgIH07XG5cbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPFJ1blJlc3BvbnNlPignL3J1bnMnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHBheWxvYWQsXG4gICAgICBhcGlWZXJzaW9uOiAndjMnLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSBydW4gYnkgSURcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBydW4gPSBhd2FpdCBydW5zLmdldCgncnVuX2FiYzEyMycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldChydW5JZDogc3RyaW5nKTogUHJvbWlzZTxSdW5SZXNwb25zZT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8UnVuUmVzcG9uc2U+KGAvcnVucy8ke3J1bklkfWAsIHsgYXBpVmVyc2lvbjogJ3YzJyB9KTtcbiAgfSxcblxuICAvKipcbiAgICogTGlzdCBydW5zIHdpdGggZmlsdGVyc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHsgaXRlbXMsIGhhc01vcmUgfSA9IGF3YWl0IHJ1bnMubGlzdCh7XG4gICAqICAgYWdlbnRJZDogJ2FnZW50XzEyMycsXG4gICAqICAgb3V0Y29tZTogJ2ZhaWxlZCcsXG4gICAqICAgbGltaXQ6IDIwLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBsaXN0KFxuICAgIG9wdGlvbnM6IExpc3RSdW5zT3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8eyBpdGVtczogUnVuUmVzcG9uc2VbXTsgbGltaXQ6IG51bWJlcjsgb2Zmc2V0OiBudW1iZXI7IGhhc01vcmU6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3B0aW9ucy5hZ2VudElkKSBwYXJhbXMuc2V0KCdhZ2VudElkJywgb3B0aW9ucy5hZ2VudElkKTtcbiAgICBpZiAob3B0aW9ucy50aWNrZXRJZCkgcGFyYW1zLnNldCgndGlja2V0SWQnLCBvcHRpb25zLnRpY2tldElkKTtcbiAgICBpZiAob3B0aW9ucy5jdXN0b21lckFjY291bnRJZCkgcGFyYW1zLnNldCgnY3VzdG9tZXJBY2NvdW50SWQnLCBvcHRpb25zLmN1c3RvbWVyQWNjb3VudElkKTtcbiAgICBpZiAob3B0aW9ucy5vdXRjb21lKSBwYXJhbXMuc2V0KCdvdXRjb21lJywgb3B0aW9ucy5vdXRjb21lKTtcbiAgICBpZiAob3B0aW9ucy5zdGFydGVkQWZ0ZXIpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ3N0YXJ0ZWRBZnRlcicsIG5ldyBEYXRlKG9wdGlvbnMuc3RhcnRlZEFmdGVyKS50b0lTT1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3RhcnRlZEJlZm9yZSkge1xuICAgICAgcGFyYW1zLnNldCgnc3RhcnRlZEJlZm9yZScsIG5ldyBEYXRlKG9wdGlvbnMuc3RhcnRlZEJlZm9yZSkudG9JU09TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxpbWl0KSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhvcHRpb25zLmxpbWl0KSk7XG4gICAgaWYgKG9wdGlvbnMub2Zmc2V0KSBwYXJhbXMuc2V0KCdvZmZzZXQnLCBTdHJpbmcob3B0aW9ucy5vZmZzZXQpKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdDxQYWdpbmF0ZWRSZXNwb25zZTxSdW5SZXNwb25zZT4+KFxuICAgICAgYC9ydW5zPyR7cGFyYW1zLnRvU3RyaW5nKCl9YCxcbiAgICAgIHsgYXBpVmVyc2lvbjogJ3YzJyB9XG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlIGEgcnVuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgcnVucy51cGRhdGUoJ3J1bl9hYmMxMjMnLCB7XG4gICAqICAgb3V0Y29tZTogJ3Jlc29sdmVkJyxcbiAgICogICBvdXRjb21lUmVhc29uOiAnQ3VzdG9tZXIgY29uZmlybWVkIGlzc3VlIHJlc29sdmVkJyxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlKFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgdXBkYXRlczogUGFydGlhbDxQaWNrPFJ1bk9wdGlvbnMsICdvdXRjb21lJyB8ICdvdXRjb21lUmVhc29uJyB8ICdlbmRlZEF0JyB8ICdtZXRhZGF0YSc+PlxuICApOiBQcm9taXNlPFJ1blJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxSdW5SZXNwb25zZT4oYC9ydW5zLyR7cnVuSWR9YCwge1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIGJvZHk6IHVwZGF0ZXMsXG4gICAgICBhcGlWZXJzaW9uOiAndjMnLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSBydW5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhd2FpdCBydW5zLmRlbGV0ZSgncnVuX2FiYzEyMycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRlbGV0ZShydW5JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgYXBpUmVxdWVzdChgL3J1bnMvJHtydW5JZH1gLCB7IG1ldGhvZDogJ0RFTEVURScsIGFwaVZlcnNpb246ICd2MycgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBtdWx0aXBsZSBydW5zIGluIGJhdGNoXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgeyBjcmVhdGVkLCBmYWlsZWQgfSA9IGF3YWl0IHJ1bnMuYmF0Y2goW1xuICAgKiAgIHsgYWdlbnRJZDogJ2FnZW50XzEnLCBjb252ZXJzYXRpb25NZXNzYWdlczogWy4uLl0gfSxcbiAgICogICB7IGFnZW50SWQ6ICdhZ2VudF8xJywgY29udmVyc2F0aW9uTWVzc2FnZXM6IFsuLi5dIH0sXG4gICAqIF0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGJhdGNoKFxuICAgIHJ1bnNEYXRhOiBSdW5PcHRpb25zW11cbiAgKTogUHJvbWlzZTx7IGNyZWF0ZWQ6IFJ1blJlc3BvbnNlW107IGZhaWxlZDogQXJyYXk8eyBpbmRleDogbnVtYmVyOyBlcnJvcjogc3RyaW5nIH0+IH0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcnVuc0RhdGEubWFwKChyKSA9PiAoe1xuICAgICAgYWdlbnRJZDogci5hZ2VudElkLFxuICAgICAgc3RhcnRlZEF0OiByLnN0YXJ0ZWRBdFxuICAgICAgICA/IG5ldyBEYXRlKHIuc3RhcnRlZEF0KS50b0lTT1N0cmluZygpXG4gICAgICAgIDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgZW5kZWRBdDogci5lbmRlZEF0ID8gbmV3IERhdGUoci5lbmRlZEF0KS50b0lTT1N0cmluZygpIDogdW5kZWZpbmVkLFxuICAgICAgb3V0Y29tZTogci5vdXRjb21lLFxuICAgICAgb3V0Y29tZVJlYXNvbjogci5vdXRjb21lUmVhc29uLFxuICAgICAgY29udmVyc2F0aW9uTWVzc2FnZXM6IHIuY29udmVyc2F0aW9uTWVzc2FnZXMsXG4gICAgICBtb2RlbElkOiByLm1vZGVsSWQsXG4gICAgICBwcm9tcHRWZXJzaW9uOiByLnByb21wdFZlcnNpb24sXG4gICAgICBzZXNzaW9uSWQ6IHIuc2Vzc2lvbklkLFxuICAgICAgY3VzdG9tZXJDb250ZXh0OiByLmN1c3RvbWVyQ29udGV4dCxcbiAgICAgIG1ldGFkYXRhOiByLm1ldGFkYXRhLFxuICAgICAgbWV0cmljczogci5tZXRyaWNzLFxuICAgIH0pKTtcblxuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGEoJy9ydW5zL2JhdGNoJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB7IHJ1bnM6IHBheWxvYWQgfSxcbiAgICAgIGFwaVZlcnNpb246ICd2MycsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBydW4gc3RhdGlzdGljcyBmb3IgYW4gYWdlbnRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBzdGF0cyA9IGF3YWl0IHJ1bnMuc3RhdHMoJ2FnZW50XzEyMycsIHtcbiAgICogICBmcm9tOiAnMjAyNC0wMS0wMScsXG4gICAqICAgdG86ICcyMDI0LTAxLTMxJyxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc3RhdHMoXG4gICAgYWdlbnRJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgZnJvbT86IHN0cmluZyB8IERhdGU7IHRvPzogc3RyaW5nIHwgRGF0ZSB9ID0ge31cbiAgKTogUHJvbWlzZTxSdW5TdGF0cz4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3B0aW9ucy5mcm9tKSBwYXJhbXMuc2V0KCdmcm9tJywgbmV3IERhdGUob3B0aW9ucy5mcm9tKS50b0lTT1N0cmluZygpKTtcbiAgICBpZiAob3B0aW9ucy50bykgcGFyYW1zLnNldCgndG8nLCBuZXcgRGF0ZShvcHRpb25zLnRvKS50b0lTT1N0cmluZygpKTtcblxuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8UnVuU3RhdHM+KFxuICAgICAgYC9ydW5zL3N0YXRzLyR7YWdlbnRJZH0/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxuICAgICAgeyBhcGlWZXJzaW9uOiAndjMnIH1cbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgdHJhY2VzIGZvciBhIHJ1blxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRyYWNlcyA9IGF3YWl0IHJ1bnMuZ2V0VHJhY2VzKCdydW5fYWJjMTIzJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0VHJhY2VzKHJ1bklkOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd25bXT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8dW5rbm93bltdPihgL3J1bnMvJHtydW5JZH0vdHJhY2VzYCwgeyBhcGlWZXJzaW9uOiAndjMnIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSB0cmFjZSB0byBhIHJ1blxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IHJ1bnMuYWRkVHJhY2UoJ3J1bl9hYmMxMjMnLCB7XG4gICAqICAgc3BhbnM6IFsuLi5dLFxuICAgKiAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBhZGRUcmFjZShcbiAgICBydW5JZDogc3RyaW5nLFxuICAgIHRyYWNlRGF0YTogeyBzcGFucz86IHVua25vd25bXTsgdGltZXN0YW1wPzogc3RyaW5nOyBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH1cbiAgKTogUHJvbWlzZTx7IHRyYWNlSWQ6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YShgL3J1bnMvJHtydW5JZH0vdHJhY2VzYCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiB0cmFjZURhdGEsXG4gICAgICBhcGlWZXJzaW9uOiAndjMnLFxuICAgIH0pO1xuICB9LFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENyZWF0ZSBhIHJ1biB3aXRoIGN1c3RvbWVyIGNvbnRleHQgc25hcHNob3RcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcnVuID0gYXdhaXQgY3JlYXRlUnVuV2l0aENvbnRleHQoe1xuICogICBhZ2VudElkOiAnYWdlbnRfMTIzJyxcbiAqICAgY29udmVyc2F0aW9uTWVzc2FnZXM6IFsuLi5dLFxuICogICBjdXN0b21lckNvbnRleHQ6IHtcbiAqICAgICBhcnI6IDEwMDAwMCxcbiAqICAgICBoZWFsdGhTY29yZTogOTIsXG4gKiAgIH0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlUnVuV2l0aENvbnRleHQoXG4gIG9wdGlvbnM6IFJ1bk9wdGlvbnMgJiB7IGN1c3RvbWVyQ29udGV4dDogQ3VzdG9tZXJDb250ZXh0U25hcHNob3QgfVxuKTogUHJvbWlzZTxSdW5SZXNwb25zZT4ge1xuICAvLyBFbnN1cmUgY2FwdHVyZWRBdCBpcyBzZXRcbiAgY29uc3QgY3VzdG9tZXJDb250ZXh0OiBDdXN0b21lckNvbnRleHRTbmFwc2hvdCA9IHtcbiAgICAuLi5vcHRpb25zLmN1c3RvbWVyQ29udGV4dCxcbiAgICBjYXB0dXJlZEF0OiBvcHRpb25zLmN1c3RvbWVyQ29udGV4dC5jYXB0dXJlZEF0IHx8IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgfTtcblxuICByZXR1cm4gcnVucy5jcmVhdGUoe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgY3VzdG9tZXJDb250ZXh0LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGNvbnZlcnNhdGlvbiBtZXNzYWdlcyB0byBPcGVuQUkgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b09wZW5BSU1lc3NhZ2VzKFxuICBtZXNzYWdlczogQ29udmVyc2F0aW9uTWVzc2FnZVtdXG4pOiBBcnJheTx7IHJvbGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIG1lc3NhZ2VzLm1hcCgobSkgPT4gKHtcbiAgICByb2xlOiBtLnJvbGUsXG4gICAgY29udGVudDogbS5jb250ZW50LFxuICB9KSk7XG59XG5cbi8qKlxuICogQ29udmVydCBPcGVuQUkgZm9ybWF0IG1lc3NhZ2VzIHRvIFRoaW5rSGl2ZSBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21PcGVuQUlNZXNzYWdlcyhcbiAgbWVzc2FnZXM6IEFycmF5PHsgcm9sZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT5cbik6IENvbnZlcnNhdGlvbk1lc3NhZ2VbXSB7XG4gIHJldHVybiBtZXNzYWdlcy5tYXAoKG0pID0+ICh7XG4gICAgcm9sZTogbS5yb2xlIGFzIENvbnZlcnNhdGlvbk1lc3NhZ2VbJ3JvbGUnXSxcbiAgICBjb250ZW50OiBtLmNvbnRlbnQsXG4gIH0pKTtcbn1cbiJdfQ==
@@ -0,0 +1,204 @@
1
+ /**
2
+ * ThinkHive SDK v3.0 - Transcript Patterns API
3
+ *
4
+ * API for transcript pattern detection and analysis
5
+ */
6
+ export type PatternCategory = 'frustration' | 'confusion' | 'success' | 'failure' | 'escalation' | 'pii_exposure' | 'hallucination' | 'custom';
7
+ export type PatternOutcome = 'success' | 'failure' | 'escalation' | 'neutral';
8
+ export type PatternSeverity = 'info' | 'warning' | 'critical';
9
+ export type DetectionType = 'sequence' | 'keywords' | 'regex';
10
+ export interface PatternMatch {
11
+ patternId: string;
12
+ patternName: string;
13
+ category: PatternCategory;
14
+ matchedText?: string;
15
+ position?: {
16
+ start: number;
17
+ end: number;
18
+ };
19
+ confidence: number;
20
+ severity: PatternSeverity;
21
+ }
22
+ export interface PatternInsight {
23
+ type: string;
24
+ message: string;
25
+ severity: PatternSeverity;
26
+ recommendation?: string;
27
+ }
28
+ export interface AnalysisResult {
29
+ traceId: string;
30
+ sessionId?: string;
31
+ patternsMatched: number;
32
+ riskScore: number;
33
+ predictedOutcome?: PatternOutcome;
34
+ predictionConfidence?: number;
35
+ matches: PatternMatch[];
36
+ insights: PatternInsight[];
37
+ sentimentScores?: {
38
+ overall: number;
39
+ byTurn?: Array<{
40
+ turn: number;
41
+ sentiment: number;
42
+ confidence: number;
43
+ }>;
44
+ };
45
+ }
46
+ export interface BulkAnalysisResult {
47
+ results: Array<AnalysisResult & {
48
+ error?: string;
49
+ }>;
50
+ summary: {
51
+ tracesAnalyzed: number;
52
+ totalMatches: number;
53
+ tracesWithMatches: number;
54
+ };
55
+ }
56
+ export interface PatternCategoryInfo {
57
+ id: PatternCategory;
58
+ name: string;
59
+ description: string;
60
+ indicators: string[];
61
+ }
62
+ export interface BuiltInPattern {
63
+ id: string;
64
+ name: string;
65
+ category: PatternCategory;
66
+ detectionType: DetectionType;
67
+ description: string;
68
+ }
69
+ /**
70
+ * Transcript Patterns API client for pattern detection and analysis
71
+ */
72
+ export declare const transcriptPatterns: {
73
+ /**
74
+ * Analyze a trace for patterns
75
+ *
76
+ * @example
77
+ * ```typescript
78
+ * const result = await transcriptPatterns.analyze('trace_123');
79
+ * console.log(`Found ${result.patternsMatched} patterns`);
80
+ * console.log(`Risk score: ${result.riskScore}`);
81
+ * ```
82
+ */
83
+ analyze(traceId: string): Promise<AnalysisResult>;
84
+ /**
85
+ * Analyze multiple traces for patterns
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * const { results, summary } = await transcriptPatterns.bulkAnalyze([
90
+ * 'trace_1', 'trace_2', 'trace_3'
91
+ * ]);
92
+ * console.log(`${summary.tracesWithMatches} traces have patterns`);
93
+ * ```
94
+ */
95
+ bulkAnalyze(traceIds: string[]): Promise<BulkAnalysisResult>;
96
+ /**
97
+ * Get available pattern categories with descriptions
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * const categories = await transcriptPatterns.getCategories();
102
+ * for (const category of categories) {
103
+ * console.log(`${category.name}: ${category.description}`);
104
+ * }
105
+ * ```
106
+ */
107
+ getCategories(): Promise<PatternCategoryInfo[]>;
108
+ /**
109
+ * Get built-in patterns
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * const patterns = await transcriptPatterns.getBuiltInPatterns();
114
+ * const frustrationPatterns = patterns.filter(p => p.category === 'frustration');
115
+ * ```
116
+ */
117
+ getBuiltInPatterns(): Promise<BuiltInPattern[]>;
118
+ };
119
+ /**
120
+ * Check if analysis result indicates high risk
121
+ *
122
+ * @param result - Analysis result to check
123
+ * @param threshold - Risk score threshold (default 70)
124
+ * @returns Whether the result indicates high risk
125
+ */
126
+ export declare function isHighRisk(result: AnalysisResult, threshold?: number): boolean;
127
+ /**
128
+ * Get matches by category
129
+ *
130
+ * @param result - Analysis result
131
+ * @param category - Pattern category to filter by
132
+ * @returns Filtered pattern matches
133
+ */
134
+ export declare function getMatchesByCategory(result: AnalysisResult, category: PatternCategory): PatternMatch[];
135
+ /**
136
+ * Get critical insights from analysis
137
+ *
138
+ * @param result - Analysis result
139
+ * @returns Critical severity insights
140
+ */
141
+ export declare function getCriticalInsights(result: AnalysisResult): PatternInsight[];
142
+ /**
143
+ * Check if analysis detected PII
144
+ *
145
+ * @param result - Analysis result
146
+ * @returns Whether PII was detected
147
+ */
148
+ export declare function hasPiiExposure(result: AnalysisResult): boolean;
149
+ /**
150
+ * Check if analysis detected frustration
151
+ *
152
+ * @param result - Analysis result
153
+ * @returns Whether frustration was detected
154
+ */
155
+ export declare function hasFrustrationSignals(result: AnalysisResult): boolean;
156
+ /**
157
+ * Check if analysis detected escalation request
158
+ *
159
+ * @param result - Analysis result
160
+ * @returns Whether escalation was requested
161
+ */
162
+ export declare function hasEscalationRequest(result: AnalysisResult): boolean;
163
+ /**
164
+ * Calculate category distribution
165
+ *
166
+ * @param result - Analysis result
167
+ * @returns Object with counts per category
168
+ */
169
+ export declare function getCategoryDistribution(result: AnalysisResult): Record<PatternCategory, number>;
170
+ /**
171
+ * Get actionable recommendations from insights
172
+ *
173
+ * @param result - Analysis result
174
+ * @returns Array of recommendation strings
175
+ */
176
+ export declare function getRecommendations(result: AnalysisResult): string[];
177
+ /**
178
+ * Calculate overall sentiment from analysis
179
+ *
180
+ * @param result - Analysis result
181
+ * @returns Sentiment score (-1 to 1) or null if not available
182
+ */
183
+ export declare function getOverallSentiment(result: AnalysisResult): number | null;
184
+ /**
185
+ * Determine if conversation needs attention based on patterns
186
+ *
187
+ * @param result - Analysis result
188
+ * @returns Whether the conversation needs attention
189
+ */
190
+ export declare function needsAttention(result: AnalysisResult): boolean;
191
+ /**
192
+ * Get severity level as numeric value
193
+ *
194
+ * @param severity - Pattern severity
195
+ * @returns Numeric severity (1-3)
196
+ */
197
+ export declare function getSeverityLevel(severity: PatternSeverity): number;
198
+ /**
199
+ * Sort matches by severity (critical first)
200
+ *
201
+ * @param matches - Pattern matches to sort
202
+ * @returns Sorted matches
203
+ */
204
+ export declare function sortMatchesBySeverity(matches: PatternMatch[]): PatternMatch[];