@thinkhive/sdk 4.0.1 → 4.2.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.
@@ -164,6 +164,69 @@ exports.roiAnalytics = {
164
164
  const response = await (0, client_1.apiRequest)(`/analytics/roi/correlations?${params.toString()}`, { apiVersion: 'v1' });
165
165
  return response.data.analysis;
166
166
  },
167
+ /**
168
+ * Get ROI configuration (V3)
169
+ */
170
+ async getConfig() {
171
+ return (0, client_1.apiRequestWithData)('/roi/config', { apiVersion: 'v3' });
172
+ },
173
+ /**
174
+ * Create ROI configuration (V3)
175
+ */
176
+ async createConfig(data) {
177
+ return (0, client_1.apiRequestWithData)('/roi/config', {
178
+ method: 'POST',
179
+ apiVersion: 'v3',
180
+ body: data,
181
+ });
182
+ },
183
+ /**
184
+ * Update ROI configuration (V3) - creates new version
185
+ */
186
+ async updateConfig(data) {
187
+ return (0, client_1.apiRequestWithData)('/roi/config', {
188
+ method: 'PUT',
189
+ apiVersion: 'v3',
190
+ body: data,
191
+ });
192
+ },
193
+ /**
194
+ * List ROI config versions (V3)
195
+ */
196
+ async configVersions(options) {
197
+ const params = new URLSearchParams();
198
+ if (options?.limit)
199
+ params.set('limit', options.limit.toString());
200
+ if (options?.offset)
201
+ params.set('offset', options.offset.toString());
202
+ return (0, client_1.apiRequestWithData)(`/roi/config/versions?${params.toString()}`, { apiVersion: 'v3' });
203
+ },
204
+ /**
205
+ * Calculate ROI using V3 configurable engine
206
+ */
207
+ async calculateV3(options) {
208
+ return (0, client_1.apiRequestWithData)('/roi/calculate', {
209
+ method: 'POST',
210
+ apiVersion: 'v3',
211
+ body: {
212
+ ...options,
213
+ startDate: new Date(options.startDate).toISOString(),
214
+ endDate: new Date(options.endDate).toISOString(),
215
+ },
216
+ });
217
+ },
218
+ /**
219
+ * Get ROI trend over time (V3)
220
+ */
221
+ async trendV3(options) {
222
+ const params = new URLSearchParams();
223
+ if (options.agentId)
224
+ params.set('agentId', options.agentId);
225
+ params.set('granularity', options.granularity);
226
+ params.set('startDate', new Date(options.startDate).toISOString());
227
+ params.set('endDate', new Date(options.endDate).toISOString());
228
+ return (0, client_1.apiRequestWithData)(`/roi/trend?${params.toString()}`, { apiVersion: 'v3' });
229
+ },
167
230
  };
168
231
  // ============================================================================
169
232
  // HELPER FUNCTIONS
@@ -201,4 +264,4 @@ function getROIQuality(totalFinancialImpact) {
201
264
  return 'moderate';
202
265
  return 'poor';
203
266
  }
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
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9pLWFuYWx5dGljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvcm9pLWFuYWx5dGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBb2VILHdEQU1DO0FBS0QsZ0VBS0M7QUFLRCx3Q0FLQztBQUtELHNDQU9DO0FBeGdCRCwyQ0FBZ0U7QUE2SGhFLCtFQUErRTtBQUMvRSwyQkFBMkI7QUFDM0IsK0VBQStFO0FBRS9FOztHQUVHO0FBQ1UsUUFBQSxZQUFZLEdBQUc7SUFDMUI7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLFVBSVYsRUFBRTtRQUNKLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFDckMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxtQkFBVSxFQUMvQiwwQkFBMEIsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQzdDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUNyQixDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUMsSUFBSyxD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QUM7SUFDdEQsSUFBSSxvQkFBb0IsR0FBRyxLQUFLO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDaEQsSUFBSSxvQkFBb0IsR0FBRyxLQUFLO1FBQUUsT0FBTyxVQUFVLENBQUM7SUFDcEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4xIC0gUk9JIEFuYWx5dGljcyBBUElcbiAqXG4gKiBCdXNpbmVzcyBST0kgJiBNZXRyaWNzIEVuZ2luZSBmb3IgY2FsY3VsYXRpbmcgZmluYW5jaWFsIGltcGFjdFxuICovXG5cbmltcG9ydCB7IGFwaVJlcXVlc3QsIGFwaVJlcXVlc3RXaXRoRGF0YSB9IGZyb20gJy4uL2NvcmUvY2xpZW50JztcbmltcG9ydCB0eXBlIHsgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi9jb3JlL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBJbmR1c3RyeS1zcGVjaWZpYyBST0kgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZHVzdHJ5Q29uZmlnIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBhdmdUcmFuc2FjdGlvblZhbHVlOiBudW1iZXI7XG4gIGF2Z0N1c3RvbWVyTFRWOiBudW1iZXI7XG4gIGF2Z1N1cHBvcnRDb3N0OiBudW1iZXI7XG4gIGF2Z0VzY2FsYXRpb25Db3N0OiBudW1iZXI7XG4gIGF2Z1Jlc29sdXRpb25UaW1lOiBudW1iZXI7XG59XG5cbi8qKlxuICogQ3VzdG9tIGluZHVzdHJ5IGNvbmZpZyBpbnB1dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUluZHVzdHJ5Q29uZmlnIHtcbiAgaW5kdXN0cnk/OiBzdHJpbmc7XG4gIGF2Z1RyYW5zYWN0aW9uVmFsdWU/OiBudW1iZXI7XG4gIGF2Z0N1c3RvbWVyTFRWPzogbnVtYmVyO1xuICBhdmdTdXBwb3J0Q29zdD86IG51bWJlcjtcbiAgYXZnRXNjYWxhdGlvbkNvc3Q/OiBudW1iZXI7XG4gIGNodXJuSW1wYWN0TXVsdGlwbGllcj86IG51bWJlcjtcbiAgYXZnUmVzb2x1dGlvblRpbWU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUk9JIG1ldHJpY3Mgc3VtbWFyeVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJPSU1ldHJpY3Mge1xuICByb2lDYXRlZ29yeTogc3RyaW5nO1xuICB0b3RhbEZpbmFuY2lhbEltcGFjdDogbnVtYmVyO1xuICByZXZlbnVlUHJvdGVjdGVkOiBudW1iZXI7XG4gIGNvc3RTYXZpbmdzOiBudW1iZXI7XG4gIGVmZmljaWVuY3lHYWluOiBudW1iZXI7XG59XG5cbi8qKlxuICogQnVzaW5lc3MgaW1wYWN0IGFuYWx5c2lzIHJlc3VsdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzSW1wYWN0IHtcbiAgaW1wYWN0U2NvcmU6IG51bWJlcjtcbiAgcmV2ZW51ZVJpc2s6IG51bWJlcjtcbiAgYnJhbmRSaXNrOiBudW1iZXI7XG4gIGNvbXBsaWFuY2VSaXNrOiBudW1iZXI7XG4gIG9wZXJhdGlvbmFsSW1wYWN0OiBudW1iZXI7XG4gIGN1c3RvbWVyU2F0aXNmYWN0aW9uOiBudW1iZXI7XG4gIHJlY29tbWVuZGF0aW9uczogc3RyaW5nW107XG4gIHJvaTogUk9JTWV0cmljcztcbn1cblxuLyoqXG4gKiBST0kgc3VtbWFyeSBmb3IgYSBkYXRlIHJhbmdlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUk9JU3VtbWFyeSB7XG4gIGRhdGVSYW5nZTogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9O1xuICB0cmFjZUNvdW50OiBudW1iZXI7XG4gIHN1Y2Nlc3NmdWxJbnRlcmFjdGlvbnM6IG51bWJlcjtcbiAgZmFpbGVkSW50ZXJhY3Rpb25zOiBudW1iZXI7XG4gIHN1Y2Nlc3NSYXRlOiBudW1iZXI7XG4gIHJvaTogUk9JTWV0cmljcztcbiAgcmV2ZW51ZVByb3RlY3RlZDogbnVtYmVyO1xuICBlc3RpbWF0ZWRTYXZpbmdzOiBudW1iZXI7XG59XG5cbi8qKlxuICogRGFpbHkgdHJlbmQgZGF0YSBwb2ludFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZW5kRGF0YVBvaW50IHtcbiAgZGF0ZTogc3RyaW5nO1xuICB0cmFjZUNvdW50OiBudW1iZXI7XG4gIHN1Y2Nlc3NDb3VudDogbnVtYmVyO1xuICBmYWlsdXJlQ291bnQ6IG51bWJlcjtcbiAgc3VjY2Vzc1JhdGU6IG51bWJlcjtcbiAgYXZnSW1wYWN0U2NvcmU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb3JyZWxhdGlvbiBmaW5kaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ycmVsYXRpb24ge1xuICB0eXBlOiBzdHJpbmc7XG4gIHN0cmVuZ3RoOiBzdHJpbmc7XG4gIGNvZWZmaWNpZW50OiBudW1iZXI7XG4gIGNvbmZpZGVuY2U6IG51bWJlcjtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaW5zaWdodDogc3RyaW5nO1xuICByZWNvbW1lbmRhdGlvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhdHRlcm4gY2x1c3RlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdHRlcm5DbHVzdGVyIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBtYXRjaENvdW50OiBudW1iZXI7XG4gIGF2Z0ltcGFjdFNjb3JlOiBudW1iZXI7XG4gIGF2Z0NodXJuUmlzazogbnVtYmVyO1xuICB0cmVuZDogc3RyaW5nO1xuICBleGFtcGxlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29ycmVsYXRpb24gYW5hbHlzaXMgcmVzdWx0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ycmVsYXRpb25BbmFseXNpcyB7XG4gIGFuYWx5c2lzSWQ6IHN0cmluZztcbiAgYW5hbHl6ZWRBdDogc3RyaW5nO1xuICB0cmFjZUNvdW50OiBudW1iZXI7XG4gIHRpbWVSYW5nZTogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9O1xuICBvdmVyYWxsSGVhbHRoU2NvcmU6IG51bWJlcjtcbiAgdG9wSW5zaWdodHM6IHN0cmluZ1tdO1xuICByZWNvbW1lbmRhdGlvbnM6IHN0cmluZ1tdO1xuICBjb3JyZWxhdGlvbnM6IENvcnJlbGF0aW9uW107XG4gIHBhdHRlcm5DbHVzdGVyczogUGF0dGVybkNsdXN0ZXJbXTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUk9JIEFOQUxZVElDUyBBUEkgQ0xJRU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUk9JIEFuYWx5dGljcyBBUEkgY2xpZW50IGZvciBidXNpbmVzcyBpbXBhY3QgYW5hbHlzaXNcbiAqL1xuZXhwb3J0IGNvbnN0IHJvaUFuYWx5dGljcyA9IHtcbiAgLyoqXG4gICAqIEdldCBhZ2dyZWdhdGVkIFJPSSBzdW1tYXJ5IGZvciB0cmFjZXMgaW4gZGF0ZSByYW5nZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCByb2lBbmFseXRpY3Muc3VtbWFyeSh7XG4gICAqICAgc3RhcnREYXRlOiAnMjAyNC0wMS0wMScsXG4gICAqICAgZW5kRGF0ZTogJzIwMjQtMDEtMzEnLFxuICAgKiB9KTtcbiAgICogY29uc29sZS5sb2coYFJldmVudWUgcHJvdGVjdGVkOiAkJHtzdW1tYXJ5LnJldmVudWVQcm90ZWN0ZWR9YCk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgc3VtbWFyeShvcHRpb25zOiB7XG4gICAgc3RhcnREYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgICBlbmREYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgICBhZ2VudElkPzogc3RyaW5nO1xuICB9ID0ge30pOiBQcm9taXNlPFJPSVN1bW1hcnk+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9wdGlvbnMuc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXMuc2V0KCdzdGFydERhdGUnLCBuZXcgRGF0ZShvcHRpb25zLnN0YXJ0RGF0ZSkudG9JU09TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVuZERhdGUpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ2VuZERhdGUnLCBuZXcgRGF0ZShvcHRpb25zLmVuZERhdGUpLnRvSVNPU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5hZ2VudElkKSB7XG4gICAgICBwYXJhbXMuc2V0KCdhZ2VudElkJywgb3B0aW9ucy5hZ2VudElkKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3Q8QXBpUmVzcG9uc2U8eyBzdW1tYXJ5OiBST0lTdW1tYXJ5IH0+PihcbiAgICAgIGAvYW5hbHl0aWNzL3JvaS9zdW1tYXJ5PyR7cGFyYW1zLnRvU3RyaW5nKCl9YCxcbiAgICAgIHsgYXBpVmVyc2lvbjogJ3YxJyB9XG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YSEuc3VtbWFyeTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IFJPSSBtZXRyaWNzIGZvciBhIHNwZWNpZmljIGFnZW50XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgYWdlbnRST0kgPSBhd2FpdCByb2lBbmFseXRpY3MuYnlBZ2VudCgnYWdlbnRfMTIzJywge1xuICAgKiAgIHN0YXJ0RGF0ZTogJzIwMjQtMDEtMDEnLFxuICAgKiB9KTtcbiAgICogY29uc29sZS5sb2coYEFnZW50OiAke2FnZW50Uk9JLmFnZW50Lm5hbWV9YCk7XG4gICAqIGNvbnNvbGUubG9nKGBST0k6ICR7YWdlbnRST0kucm9pLnRvdGFsRmluYW5jaWFsSW1wYWN0fWApO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGJ5QWdlbnQoXG4gICAgYWdlbnRJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHN0YXJ0RGF0ZT86IHN0cmluZyB8IERhdGU7XG4gICAgICBlbmREYXRlPzogc3RyaW5nIHwgRGF0ZTtcbiAgICB9ID0ge31cbiAgKTogUHJvbWlzZTx7XG4gICAgYWdlbnQ6IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBpbmR1c3RyeTogc3RyaW5nIH07XG4gICAgaW5kdXN0cnlDb25maWc6IFBhcnRpYWw8SW5kdXN0cnlDb25maWc+O1xuICAgIHJvaTogUk9JTWV0cmljcztcbiAgICByZWNlbnRJbXBhY3RzOiBBcnJheTx7XG4gICAgICBpbXBhY3RTY29yZTogbnVtYmVyO1xuICAgICAgcmV2ZW51ZVJpc2s6IG51bWJlcjtcbiAgICAgIHJvaUNhdGVnb3J5OiBzdHJpbmc7XG4gICAgICB0b3RhbEZpbmFuY2lhbEltcGFjdDogbnVtYmVyO1xuICAgIH0+O1xuICB9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcHRpb25zLnN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zLnNldCgnc3RhcnREYXRlJywgbmV3IERhdGUob3B0aW9ucy5zdGFydERhdGUpLnRvSVNPU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmREYXRlKSB7XG4gICAgICBwYXJhbXMuc2V0KCdlbmREYXRlJywgbmV3IERhdGUob3B0aW9ucy5lbmREYXRlKS50b0lTT1N0cmluZygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhKFxuICAgICAgYC9hbmFseXRpY3Mvcm9pL2J5LWFnZW50LyR7YWdlbnRJZH0/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxuICAgICAgeyBhcGlWZXJzaW9uOiAndjEnIH1cbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgUk9JIHRyZW5kcyBvdmVyIHRpbWVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB0cmVuZHMgPSBhd2FpdCByb2lBbmFseXRpY3MudHJlbmRzKHtcbiAgICogICBzdGFydERhdGU6ICcyMDI0LTAxLTAxJyxcbiAgICogICBlbmREYXRlOiAnMjAyNC0wMS0zMScsXG4gICAqIH0pO1xuICAgKiBmb3IgKGNvbnN0IGRheSBvZiB0cmVuZHMpIHtcbiAgICogICBjb25zb2xlLmxvZyhgJHtkYXkuZGF0ZX06ICR7ZGF5LnN1Y2Nlc3NSYXRlfSUgc3VjY2Vzc2ApO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgdHJlbmRzKG9wdGlvbnM6IHtcbiAgICBzdGFydERhdGU/OiBzdHJpbmcgfCBEYXRlO1xuICAgIGVuZERhdGU/OiBzdHJpbmcgfCBEYXRlO1xuICAgIGFnZW50SWQ/OiBzdHJpbmc7XG4gIH0gPSB7fSk6IFByb21pc2U8VHJlbmREYXRhUG9pbnRbXT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3B0aW9ucy5zdGFydERhdGUpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ3N0YXJ0RGF0ZScsIG5ldyBEYXRlKG9wdGlvbnMuc3RhcnREYXRlKS50b0lTT1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZW5kRGF0ZSkge1xuICAgICAgcGFyYW1zLnNldCgnZW5kRGF0ZScsIG5ldyBEYXRlKG9wdGlvbnMuZW5kRGF0ZSkudG9JU09TdHJpbmcoKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmFnZW50SWQpIHtcbiAgICAgIHBhcmFtcy5zZXQoJ2FnZW50SWQnLCBvcHRpb25zLmFnZW50SWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpUmVxdWVzdDxBcGlSZXNwb25zZTx7IHRyZW5kczogVHJlbmREYXRhUG9pbnRbXSB9Pj4oXG4gICAgICBgL2FuYWx5dGljcy9yb2kvdHJlbmRzPyR7cGFyYW1zLnRvU3RyaW5nKCl9YCxcbiAgICAgIHsgYXBpVmVyc2lvbjogJ3YxJyB9XG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YSEudHJlbmRzO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgUk9JIGZvciBhIHRyYWNlIG9yIHByb3ZpZGVkIG1lc3NhZ2UgZGF0YVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIENhbGN1bGF0ZSBmb3IgZXhpc3RpbmcgdHJhY2VcbiAgICogY29uc3QgaW1wYWN0ID0gYXdhaXQgcm9pQW5hbHl0aWNzLmNhbGN1bGF0ZSh7XG4gICAqICAgdHJhY2VJZDogJ3RyYWNlX2FiYzEyMycsXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBDYWxjdWxhdGUgZm9yIG5ldyBkYXRhIHdpdGggY3VzdG9tIGNvbmZpZ1xuICAgKiBjb25zdCBpbXBhY3QgPSBhd2FpdCByb2lBbmFseXRpY3MuY2FsY3VsYXRlKHtcbiAgICogICB1c2VyTWVzc2FnZTogJ0hlbHAgbWUgY2FuY2VsIG15IHN1YnNjcmlwdGlvbicsXG4gICAqICAgYWdlbnRSZXNwb25zZTogJ0kgY2FuIGhlbHAgd2l0aCB0aGF0Li4uJyxcbiAgICogICBpbmR1c3RyeUNvbmZpZzogeyBpbmR1c3RyeTogJ3NhYXMnLCBhdmdDdXN0b21lckxUVjogMTAwMDAgfSxcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgY2FsY3VsYXRlKG9wdGlvbnM6IHtcbiAgICB0cmFjZUlkPzogc3RyaW5nO1xuICAgIHVzZXJNZXNzYWdlPzogc3RyaW5nO1xuICAgIGFnZW50UmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgaW5kdXN0cnlDb25maWc/OiBDdXN0b21JbmR1c3RyeUNvbmZpZztcbiAgfSk6IFByb21pc2U8QnVzaW5lc3NJbXBhY3Q+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3Q8QXBpUmVzcG9uc2U8eyBpbXBhY3Q6IEJ1c2luZXNzSW1wYWN0IH0+PihcbiAgICAgICcvYW5hbHl0aWNzL3JvaS9jYWxjdWxhdGUnLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhIS5pbXBhY3Q7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBhdmFpbGFibGUgaW5kdXN0cnkgY29uZmlndXJhdGlvbnNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBpbmR1c3RyaWVzID0gYXdhaXQgcm9pQW5hbHl0aWNzLmluZHVzdHJpZXMoKTtcbiAgICogZm9yIChjb25zdCBjb25maWcgb2YgaW5kdXN0cmllcykge1xuICAgKiAgIGNvbnNvbGUubG9nKGAke2NvbmZpZy5uYW1lfTogJCR7Y29uZmlnLmF2Z0N1c3RvbWVyTFRWfSBMVFZgKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGluZHVzdHJpZXMoKTogUHJvbWlzZTxJbmR1c3RyeUNvbmZpZ1tdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0PEFwaVJlc3BvbnNlPHsgaW5kdXN0cmllczogSW5kdXN0cnlDb25maWdbXSB9Pj4oXG4gICAgICAnL2FuYWx5dGljcy9yb2kvaW5kdXN0cmllcycsXG4gICAgICB7IGFwaVZlcnNpb246ICd2MScgfVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEhLmluZHVzdHJpZXM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBjb3JyZWxhdGlvbiBhbmFseXNpcyBmb3IgdHJhY2VzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgYW5hbHlzaXMgPSBhd2FpdCByb2lBbmFseXRpY3MuY29ycmVsYXRpb25zKHtcbiAgICogICBzdGFydERhdGU6ICcyMDI0LTAxLTAxJyxcbiAgICogICBhZ2VudElkOiAnYWdlbnRfMTIzJyxcbiAgICogfSk7XG4gICAqIGNvbnNvbGUubG9nKGBIZWFsdGggc2NvcmU6ICR7YW5hbHlzaXMub3ZlcmFsbEhlYWx0aFNjb3JlfWApO1xuICAgKiBmb3IgKGNvbnN0IGluc2lnaHQgb2YgYW5hbHlzaXMudG9wSW5zaWdodHMpIHtcbiAgICogICBjb25zb2xlLmxvZyhgLSAke2luc2lnaHR9YCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBjb3JyZWxhdGlvbnMob3B0aW9uczoge1xuICAgIHN0YXJ0RGF0ZT86IHN0cmluZyB8IERhdGU7XG4gICAgZW5kRGF0ZT86IHN0cmluZyB8IERhdGU7XG4gICAgYWdlbnRJZD86IHN0cmluZztcbiAgfSA9IHt9KTogUHJvbWlzZTxDb3JyZWxhdGlvbkFuYWx5c2lzPiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcHRpb25zLnN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zLnNldCgnc3RhcnREYXRlJywgbmV3IERhdGUob3B0aW9ucy5zdGFydERhdGUpLnRvSVNPU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmREYXRlKSB7XG4gICAgICBwYXJhbXMuc2V0KCdlbmREYXRlJywgbmV3IERhdGUob3B0aW9ucy5lbmREYXRlKS50b0lTT1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYWdlbnRJZCkge1xuICAgICAgcGFyYW1zLnNldCgnYWdlbnRJZCcsIG9wdGlvbnMuYWdlbnRJZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0PEFwaVJlc3BvbnNlPHsgYW5hbHlzaXM6IENvcnJlbGF0aW9uQW5hbHlzaXMgfT4+KFxuICAgICAgYC9hbmFseXRpY3Mvcm9pL2NvcnJlbGF0aW9ucz8ke3BhcmFtcy50b1N0cmluZygpfWAsXG4gICAgICB7IGFwaVZlcnNpb246ICd2MScgfVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEhLmFuYWx5c2lzO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgUk9JIGNvbmZpZ3VyYXRpb24gKFYzKVxuICAgKi9cbiAgYXN5bmMgZ2V0Q29uZmlnKCk6IFByb21pc2U8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29tcGFueUlkOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogbnVtYmVyO1xuICAgIGlzQWN0aXZlOiBib29sZWFuO1xuICAgIGNvc3RDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGRlZmxlY3Rpb25Db25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlc29sdXRpb25Db25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGF0dHJpYnV0aW9uQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzbGFDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGRpc3BsYXlDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAgIHVwZGF0ZWRBdDogc3RyaW5nO1xuICB9PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YSgnL3JvaS9jb25maWcnLCB7IGFwaVZlcnNpb246ICd2MycgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBST0kgY29uZmlndXJhdGlvbiAoVjMpXG4gICAqL1xuICBhc3luYyBjcmVhdGVDb25maWcoZGF0YToge1xuICAgIGNvc3RDb25maWc/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBkZWZsZWN0aW9uQ29uZmlnPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmVzb2x1dGlvbkNvbmZpZz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGF0dHJpYnV0aW9uQ29uZmlnPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgc2xhQ29uZmlnPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZGlzcGxheUNvbmZpZz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9KTogUHJvbWlzZTx7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb21wYW55SWQ6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBudW1iZXI7XG4gICAgaXNBY3RpdmU6IGJvb2xlYW47XG4gICAgY29zdENvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZGVmbGVjdGlvbkNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmVzb2x1dGlvbkNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgYXR0cmlidXRpb25Db25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHNsYUNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZGlzcGxheUNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgdXBkYXRlZEF0OiBzdHJpbmc7XG4gIH0+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhKCcvcm9pL2NvbmZpZycsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYXBpVmVyc2lvbjogJ3YzJyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBST0kgY29uZmlndXJhdGlvbiAoVjMpIC0gY3JlYXRlcyBuZXcgdmVyc2lvblxuICAgKi9cbiAgYXN5bmMgdXBkYXRlQ29uZmlnKGRhdGE6IHtcbiAgICBjb3N0Q29uZmlnPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZGVmbGVjdGlvbkNvbmZpZz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlc29sdXRpb25Db25maWc/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBhdHRyaWJ1dGlvbkNvbmZpZz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHNsYUNvbmZpZz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGRpc3BsYXlDb25maWc/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSk6IFByb21pc2U8e1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29tcGFueUlkOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogbnVtYmVyO1xuICAgIGlzQWN0aXZlOiBib29sZWFuO1xuICAgIGNvc3RDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGRlZmxlY3Rpb25Db25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlc29sdXRpb25Db25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGF0dHJpYnV0aW9uQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzbGFDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGRpc3BsYXlDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAgIHVwZGF0ZWRBdDogc3RyaW5nO1xuICB9PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YSgnL3JvaS9jb25maWcnLCB7XG4gICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgYXBpVmVyc2lvbjogJ3YzJyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExpc3QgUk9JIGNvbmZpZyB2ZXJzaW9ucyAoVjMpXG4gICAqL1xuICBhc3luYyBjb25maWdWZXJzaW9ucyhvcHRpb25zPzogeyBsaW1pdD86IG51bWJlcjsgb2Zmc2V0PzogbnVtYmVyIH0pOiBQcm9taXNlPHtcbiAgICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuICAgIHBhZ2luYXRpb246IHsgbGltaXQ6IG51bWJlcjsgb2Zmc2V0OiBudW1iZXI7IGhhc01vcmU6IGJvb2xlYW4gfTtcbiAgfT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3B0aW9ucz8ubGltaXQpIHBhcmFtcy5zZXQoJ2xpbWl0Jywgb3B0aW9ucy5saW1pdC50b1N0cmluZygpKTtcbiAgICBpZiAob3B0aW9ucz8ub2Zmc2V0KSBwYXJhbXMuc2V0KCdvZmZzZXQnLCBvcHRpb25zLm9mZnNldC50b1N0cmluZygpKTtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhKGAvcm9pL2NvbmZpZy92ZXJzaW9ucz8ke3BhcmFtcy50b1N0cmluZygpfWAsIHsgYXBpVmVyc2lvbjogJ3YzJyB9KTtcbiAgfSxcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIFJPSSB1c2luZyBWMyBjb25maWd1cmFibGUgZW5naW5lXG4gICAqL1xuICBhc3luYyBjYWxjdWxhdGVWMyhvcHRpb25zOiB7XG4gICAgYWdlbnRJZD86IHN0cmluZztcbiAgICBzdGFydERhdGU6IHN0cmluZyB8IERhdGU7XG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgRGF0ZTtcbiAgICBjb25maWd1cmF0aW9uVmVyc2lvbj86IG51bWJlcjtcbiAgICBpbmNsdWRlQnJlYWtkb3duPzogYm9vbGVhbjtcbiAgICBpbmNsdWRlQ29uZmlkZW5jZUludGVydmFscz86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YSgnL3JvaS9jYWxjdWxhdGUnLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGFwaVZlcnNpb246ICd2MycsXG4gICAgICBib2R5OiB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIHN0YXJ0RGF0ZTogbmV3IERhdGUob3B0aW9ucy5zdGFydERhdGUpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGVuZERhdGU6IG5ldyBEYXRlKG9wdGlvbnMuZW5kRGF0ZSkudG9JU09TdHJpbmcoKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBST0kgdHJlbmQgb3ZlciB0aW1lIChWMylcbiAgICovXG4gIGFzeW5jIHRyZW5kVjMob3B0aW9uczoge1xuICAgIGFnZW50SWQ/OiBzdHJpbmc7XG4gICAgZ3JhbnVsYXJpdHk6ICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJztcbiAgICBzdGFydERhdGU6IHN0cmluZyB8IERhdGU7XG4gICAgZW5kRGF0ZTogc3RyaW5nIHwgRGF0ZTtcbiAgfSk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9wdGlvbnMuYWdlbnRJZCkgcGFyYW1zLnNldCgnYWdlbnRJZCcsIG9wdGlvbnMuYWdlbnRJZCk7XG4gICAgcGFyYW1zLnNldCgnZ3JhbnVsYXJpdHknLCBvcHRpb25zLmdyYW51bGFyaXR5KTtcbiAgICBwYXJhbXMuc2V0KCdzdGFydERhdGUnLCBuZXcgRGF0ZShvcHRpb25zLnN0YXJ0RGF0ZSkudG9JU09TdHJpbmcoKSk7XG4gICAgcGFyYW1zLnNldCgnZW5kRGF0ZScsIG5ldyBEYXRlKG9wdGlvbnMuZW5kRGF0ZSkudG9JU09TdHJpbmcoKSk7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YShgL3JvaS90cmVuZD8ke3BhcmFtcy50b1N0cmluZygpfWAsIHsgYXBpVmVyc2lvbjogJ3YzJyB9KTtcbiAgfSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBDYWxjdWxhdGUgZXN0aW1hdGVkIHJldmVudWUgYXQgcmlza1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlUmV2ZW51ZUF0UmlzayhcbiAgZmFpbHVyZVJhdGU6IG51bWJlcixcbiAgYXZnVHJhbnNhY3Rpb25WYWx1ZTogbnVtYmVyLFxuICB0b3RhbEludGVyYWN0aW9uczogbnVtYmVyXG4pOiBudW1iZXIge1xuICByZXR1cm4gZmFpbHVyZVJhdGUgKiBhdmdUcmFuc2FjdGlvblZhbHVlICogdG90YWxJbnRlcmFjdGlvbnM7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGVzdGltYXRlZCBzYXZpbmdzIGZyb20gYXV0b21hdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlQXV0b21hdGlvblNhdmluZ3MoXG4gIHN1Y2Nlc3NmdWxJbnRlcmFjdGlvbnM6IG51bWJlcixcbiAgYXZnU3VwcG9ydENvc3Q6IG51bWJlclxuKTogbnVtYmVyIHtcbiAgcmV0dXJuIHN1Y2Nlc3NmdWxJbnRlcmFjdGlvbnMgKiBhdmdTdXBwb3J0Q29zdDtcbn1cblxuLyoqXG4gKiBGb3JtYXQgY3VycmVuY3kgZm9yIGRpc3BsYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEN1cnJlbmN5KGFtb3VudDogbnVtYmVyLCBjdXJyZW5jeSA9ICdVU0QnKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgnZW4tVVMnLCB7XG4gICAgc3R5bGU6ICdjdXJyZW5jeScsXG4gICAgY3VycmVuY3ksXG4gIH0pLmZvcm1hdChhbW91bnQpO1xufVxuXG4vKipcbiAqIEdldCBST0kgcXVhbGl0eSBsYWJlbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Uk9JUXVhbGl0eShcbiAgdG90YWxGaW5hbmNpYWxJbXBhY3Q6IG51bWJlclxuKTogJ2V4Y2VsbGVudCcgfCAnZ29vZCcgfCAnbW9kZXJhdGUnIHwgJ3Bvb3InIHtcbiAgaWYgKHRvdGFsRmluYW5jaWFsSW1wYWN0ID4gMTAwMDAwKSByZXR1cm4gJ2V4Y2VsbGVudCc7XG4gIGlmICh0b3RhbEZpbmFuY2lhbEltcGFjdCA+IDUwMDAwKSByZXR1cm4gJ2dvb2QnO1xuICBpZiAodG90YWxGaW5hbmNpYWxJbXBhY3QgPiAxMDAwMCkgcmV0dXJuICdtb2RlcmF0ZSc7XG4gIHJldHVybiAncG9vcic7XG59XG4iXX0=
@@ -0,0 +1,57 @@
1
+ /**
2
+ * ThinkHive SDK - Sessions API
3
+ *
4
+ * Trace session grouping for multi-turn conversation tracking
5
+ */
6
+ /** Options for listing sessions */
7
+ export interface ListSessionsOptions {
8
+ limit?: number;
9
+ offset?: number;
10
+ }
11
+ /** A trace session */
12
+ export interface Session {
13
+ sessionId: string;
14
+ agentId: string;
15
+ traceCount: number;
16
+ firstTraceAt: string;
17
+ lastTraceAt: string;
18
+ metadata?: Record<string, unknown>;
19
+ }
20
+ /** A trace within a session */
21
+ export interface SessionTrace {
22
+ id: string;
23
+ agentId: string;
24
+ sessionId: string;
25
+ input?: unknown;
26
+ output?: unknown;
27
+ status: string;
28
+ createdAt: string;
29
+ [key: string]: unknown;
30
+ }
31
+ /**
32
+ * Sessions API client for trace session grouping
33
+ */
34
+ export declare const sessions: {
35
+ /**
36
+ * List sessions for an agent
37
+ *
38
+ * @param agentId - The agent ID
39
+ * @param opts - Pagination options
40
+ * @returns List of sessions
41
+ */
42
+ list(agentId: string, opts?: ListSessionsOptions): Promise<{
43
+ sessions: Session[];
44
+ limit: number;
45
+ offset: number;
46
+ hasMore: boolean;
47
+ }>;
48
+ /**
49
+ * Get traces for a specific session
50
+ *
51
+ * @param sessionId - The session ID
52
+ * @param agentId - The agent ID
53
+ * @returns List of traces in the session
54
+ */
55
+ getTraces(sessionId: string, agentId: string): Promise<SessionTrace[]>;
56
+ };
57
+ export { sessions as default };
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ /**
3
+ * ThinkHive SDK - Sessions API
4
+ *
5
+ * Trace session grouping for multi-turn conversation tracking
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.default = exports.sessions = void 0;
9
+ const client_1 = require("../core/client");
10
+ // ============================================================================
11
+ // SESSIONS API CLIENT
12
+ // ============================================================================
13
+ /**
14
+ * Sessions API client for trace session grouping
15
+ */
16
+ exports.sessions = {
17
+ /**
18
+ * List sessions for an agent
19
+ *
20
+ * @param agentId - The agent ID
21
+ * @param opts - Pagination options
22
+ * @returns List of sessions
23
+ */
24
+ async list(agentId, opts) {
25
+ const params = new URLSearchParams({ agentId });
26
+ if (opts?.limit !== undefined)
27
+ params.set('limit', String(opts.limit));
28
+ if (opts?.offset !== undefined)
29
+ params.set('offset', String(opts.offset));
30
+ return (0, client_1.apiRequestWithData)(`/traces/sessions?${params}`, {
31
+ apiVersion: 'none',
32
+ });
33
+ },
34
+ /**
35
+ * Get traces for a specific session
36
+ *
37
+ * @param sessionId - The session ID
38
+ * @param agentId - The agent ID
39
+ * @returns List of traces in the session
40
+ */
41
+ async getTraces(sessionId, agentId) {
42
+ const params = new URLSearchParams({ agentId, sessionId });
43
+ return (0, client_1.apiRequestWithData)(`/traces?${params}`, {
44
+ apiVersion: 'none',
45
+ });
46
+ },
47
+ };
48
+ exports.default = exports.sessions;
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL3Nlc3Npb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFFSCwyQ0FBb0Q7QUFrQ3BELCtFQUErRTtBQUMvRSxzQkFBc0I7QUFDdEIsK0VBQStFO0FBRS9FOztHQUVHO0FBQ1UsUUFBQSxRQUFRLEdBQUc7SUFDdEI7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFlLEVBQUUsSUFBMEI7UUFNcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELElBQUksSUFBSSxFQUFFLEtBQUssS0FBSyxTQUFTO1lBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksSUFBSSxFQUFFLE1BQU0sS0FBSyxTQUFTO1lBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTFFLE9BQU8sSUFBQSwyQkFBa0IsRUFBQyxvQkFBb0IsTUFBTSxFQUFFLEVBQUU7WUFDdEQsVUFBVSxFQUFFLE1BQU07U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQUMsU0FBaUIsRUFBRSxPQUFlO1FBQ2hELE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFBLDJCQUFrQixFQUFpQixXQUFXLE1BQU0sRUFBRSxFQUFFO1lBQzdELFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFDO0FBRW1CLGtCQXRDUixnQkFBUSxDQXNDTyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyAtIFNlc3Npb25zIEFQSVxuICpcbiAqIFRyYWNlIHNlc3Npb24gZ3JvdXBpbmcgZm9yIG11bHRpLXR1cm4gY29udmVyc2F0aW9uIHRyYWNraW5nXG4gKi9cblxuaW1wb3J0IHsgYXBpUmVxdWVzdFdpdGhEYXRhIH0gZnJvbSAnLi4vY29yZS9jbGllbnQnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBUWVBFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogT3B0aW9ucyBmb3IgbGlzdGluZyBzZXNzaW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0U2Vzc2lvbnNPcHRpb25zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIG9mZnNldD86IG51bWJlcjtcbn1cblxuLyoqIEEgdHJhY2Ugc2Vzc2lvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uIHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIGFnZW50SWQ6IHN0cmluZztcbiAgdHJhY2VDb3VudDogbnVtYmVyO1xuICBmaXJzdFRyYWNlQXQ6IHN0cmluZztcbiAgbGFzdFRyYWNlQXQ6IHN0cmluZztcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIEEgdHJhY2Ugd2l0aGluIGEgc2Vzc2lvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uVHJhY2Uge1xuICBpZDogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBpbnB1dD86IHVua25vd247XG4gIG91dHB1dD86IHVua25vd247XG4gIHN0YXR1czogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU0VTU0lPTlMgQVBJIENMSUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFNlc3Npb25zIEFQSSBjbGllbnQgZm9yIHRyYWNlIHNlc3Npb24gZ3JvdXBpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHNlc3Npb25zID0ge1xuICAvKipcbiAgICogTGlzdCBzZXNzaW9ucyBmb3IgYW4gYWdlbnRcbiAgICpcbiAgICogQHBhcmFtIGFnZW50SWQgLSBUaGUgYWdlbnQgSURcbiAgICogQHBhcmFtIG9wdHMgLSBQYWdpbmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybnMgTGlzdCBvZiBzZXNzaW9uc1xuICAgKi9cbiAgYXN5bmMgbGlzdChhZ2VudElkOiBzdHJpbmcsIG9wdHM/OiBMaXN0U2Vzc2lvbnNPcHRpb25zKTogUHJvbWlzZTx7XG4gICAgc2Vzc2lvbnM6IFNlc3Npb25bXTtcbiAgICBsaW1pdDogbnVtYmVyO1xuICAgIG9mZnNldDogbnVtYmVyO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG4gIH0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgYWdlbnRJZCB9KTtcbiAgICBpZiAob3B0cz8ubGltaXQgIT09IHVuZGVmaW5lZCkgcGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcob3B0cy5saW1pdCkpO1xuICAgIGlmIChvcHRzPy5vZmZzZXQgIT09IHVuZGVmaW5lZCkgcGFyYW1zLnNldCgnb2Zmc2V0JywgU3RyaW5nKG9wdHMub2Zmc2V0KSk7XG5cbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhKGAvdHJhY2VzL3Nlc3Npb25zPyR7cGFyYW1zfWAsIHtcbiAgICAgIGFwaVZlcnNpb246ICdub25lJyxcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IHRyYWNlcyBmb3IgYSBzcGVjaWZpYyBzZXNzaW9uXG4gICAqXG4gICAqIEBwYXJhbSBzZXNzaW9uSWQgLSBUaGUgc2Vzc2lvbiBJRFxuICAgKiBAcGFyYW0gYWdlbnRJZCAtIFRoZSBhZ2VudCBJRFxuICAgKiBAcmV0dXJucyBMaXN0IG9mIHRyYWNlcyBpbiB0aGUgc2Vzc2lvblxuICAgKi9cbiAgYXN5bmMgZ2V0VHJhY2VzKHNlc3Npb25JZDogc3RyaW5nLCBhZ2VudElkOiBzdHJpbmcpOiBQcm9taXNlPFNlc3Npb25UcmFjZVtdPiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGFnZW50SWQsIHNlc3Npb25JZCB9KTtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPFNlc3Npb25UcmFjZVtdPihgL3RyYWNlcz8ke3BhcmFtc31gLCB7XG4gICAgICBhcGlWZXJzaW9uOiAnbm9uZScsXG4gICAgfSk7XG4gIH0sXG59O1xuXG5leHBvcnQgeyBzZXNzaW9ucyBhcyBkZWZhdWx0IH07XG4iXX0=
@@ -0,0 +1,78 @@
1
+ /**
2
+ * ThinkHive SDK - Shadow Tests API
3
+ *
4
+ * Shadow test execution for validating proposed fixes
5
+ */
6
+ /** Data for creating a shadow test */
7
+ export interface CreateShadowTestData {
8
+ fixId: string;
9
+ agentId: string;
10
+ testName: string;
11
+ inputData: unknown;
12
+ expectedOutput: unknown;
13
+ }
14
+ /** Data for updating a shadow test */
15
+ export interface UpdateShadowTestData {
16
+ testName?: string;
17
+ status?: string;
18
+ actualOutput?: unknown;
19
+ passed?: boolean;
20
+ metadata?: Record<string, unknown>;
21
+ }
22
+ /** A shadow test record */
23
+ export interface ShadowTest {
24
+ id: string;
25
+ fixId: string;
26
+ agentId: string;
27
+ testName: string;
28
+ inputData: unknown;
29
+ expectedOutput: unknown;
30
+ actualOutput?: unknown;
31
+ status: string;
32
+ passed?: boolean;
33
+ createdAt: string;
34
+ completedAt?: string;
35
+ metadata?: Record<string, unknown>;
36
+ }
37
+ /**
38
+ * Shadow tests API client for managing shadow test execution
39
+ */
40
+ export declare const shadowTests: {
41
+ /**
42
+ * List shadow tests for an agent
43
+ *
44
+ * @param agentId - The agent ID
45
+ * @returns List of shadow tests
46
+ */
47
+ list(agentId: string): Promise<ShadowTest[]>;
48
+ /**
49
+ * Get a shadow test by ID
50
+ *
51
+ * @param id - The shadow test ID
52
+ * @returns The shadow test details
53
+ */
54
+ get(id: string): Promise<ShadowTest>;
55
+ /**
56
+ * Get shadow tests for a specific fix
57
+ *
58
+ * @param fixId - The fix ID
59
+ * @returns List of shadow tests for the fix
60
+ */
61
+ getByFix(fixId: string): Promise<ShadowTest[]>;
62
+ /**
63
+ * Create a new shadow test
64
+ *
65
+ * @param data - Shadow test configuration
66
+ * @returns The created shadow test
67
+ */
68
+ create(data: CreateShadowTestData): Promise<ShadowTest>;
69
+ /**
70
+ * Update a shadow test
71
+ *
72
+ * @param id - The shadow test ID to update
73
+ * @param data - Fields to update
74
+ * @returns The updated shadow test
75
+ */
76
+ update(id: string, data: UpdateShadowTestData): Promise<ShadowTest>;
77
+ };
78
+ export { shadowTests as default };
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * ThinkHive SDK - Shadow Tests API
4
+ *
5
+ * Shadow test execution for validating proposed fixes
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.default = exports.shadowTests = void 0;
9
+ const client_1 = require("../core/client");
10
+ // ============================================================================
11
+ // SHADOW TESTS API CLIENT
12
+ // ============================================================================
13
+ /**
14
+ * Shadow tests API client for managing shadow test execution
15
+ */
16
+ exports.shadowTests = {
17
+ /**
18
+ * List shadow tests for an agent
19
+ *
20
+ * @param agentId - The agent ID
21
+ * @returns List of shadow tests
22
+ */
23
+ async list(agentId) {
24
+ const params = new URLSearchParams({ agentId });
25
+ return (0, client_1.apiRequestWithData)(`/shadow-tests?${params}`, {
26
+ apiVersion: 'none',
27
+ });
28
+ },
29
+ /**
30
+ * Get a shadow test by ID
31
+ *
32
+ * @param id - The shadow test ID
33
+ * @returns The shadow test details
34
+ */
35
+ async get(id) {
36
+ return (0, client_1.apiRequestWithData)(`/shadow-tests/${id}`, {
37
+ apiVersion: 'none',
38
+ });
39
+ },
40
+ /**
41
+ * Get shadow tests for a specific fix
42
+ *
43
+ * @param fixId - The fix ID
44
+ * @returns List of shadow tests for the fix
45
+ */
46
+ async getByFix(fixId) {
47
+ return (0, client_1.apiRequestWithData)(`/fixes/${fixId}/shadow-tests`, {
48
+ apiVersion: 'none',
49
+ });
50
+ },
51
+ /**
52
+ * Create a new shadow test
53
+ *
54
+ * @param data - Shadow test configuration
55
+ * @returns The created shadow test
56
+ */
57
+ async create(data) {
58
+ return (0, client_1.apiRequestWithData)('/shadow-tests', {
59
+ method: 'POST',
60
+ body: data,
61
+ apiVersion: 'none',
62
+ });
63
+ },
64
+ /**
65
+ * Update a shadow test
66
+ *
67
+ * @param id - The shadow test ID to update
68
+ * @param data - Fields to update
69
+ * @returns The updated shadow test
70
+ */
71
+ async update(id, data) {
72
+ return (0, client_1.apiRequestWithData)(`/shadow-tests/${id}`, {
73
+ method: 'PATCH',
74
+ body: data,
75
+ apiVersion: 'none',
76
+ });
77
+ },
78
+ };
79
+ exports.default = exports.shadowTests;
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93LXRlc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9zaGFkb3ctdGVzdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7O0dBSUc7OztBQUVILDJDQUFvRDtBQXdDcEQsK0VBQStFO0FBQy9FLDBCQUEwQjtBQUMxQiwrRUFBK0U7QUFFL0U7O0dBRUc7QUFDVSxRQUFBLFdBQVcsR0FBRztJQUN6Qjs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBZTtRQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEQsT0FBTyxJQUFBLDJCQUFrQixFQUFlLGlCQUFpQixNQUFNLEVBQUUsRUFBRTtZQUNqRSxVQUFVLEVBQUUsTUFBTTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQVU7UUFDbEIsT0FBTyxJQUFBLDJCQUFrQixFQUFhLGlCQUFpQixFQUFFLEVBQUUsRUFBRTtZQUMzRCxVQUFVLEVBQUUsTUFBTTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQWE7UUFDMUIsT0FBTyxJQUFBLDJCQUFrQixFQUFlLFVBQVUsS0FBSyxlQUFlLEVBQUU7WUFDdEUsVUFBVSxFQUFFLE1BQU07U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUEwQjtRQUNyQyxPQUFPLElBQUEsMkJBQWtCLEVBQWEsZUFBZSxFQUFFO1lBQ3JELE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFLElBQUk7WUFDVixVQUFVLEVBQUUsTUFBTTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFVLEVBQUUsSUFBMEI7UUFDakQsT0FBTyxJQUFBLDJCQUFrQixFQUFhLGlCQUFpQixFQUFFLEVBQUUsRUFBRTtZQUMzRCxNQUFNLEVBQUUsT0FBTztZQUNmLElBQUksRUFBRSxJQUFJO1lBQ1YsVUFBVSxFQUFFLE1BQU07U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGLENBQUM7QUFFc0Isa0JBcEVYLG1CQUFXLENBb0VPIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgU0RLIC0gU2hhZG93IFRlc3RzIEFQSVxuICpcbiAqIFNoYWRvdyB0ZXN0IGV4ZWN1dGlvbiBmb3IgdmFsaWRhdGluZyBwcm9wb3NlZCBmaXhlc1xuICovXG5cbmltcG9ydCB7IGFwaVJlcXVlc3RXaXRoRGF0YSB9IGZyb20gJy4uL2NvcmUvY2xpZW50JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIERhdGEgZm9yIGNyZWF0aW5nIGEgc2hhZG93IHRlc3QgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlU2hhZG93VGVzdERhdGEge1xuICBmaXhJZDogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIHRlc3ROYW1lOiBzdHJpbmc7XG4gIGlucHV0RGF0YTogdW5rbm93bjtcbiAgZXhwZWN0ZWRPdXRwdXQ6IHVua25vd247XG59XG5cbi8qKiBEYXRhIGZvciB1cGRhdGluZyBhIHNoYWRvdyB0ZXN0ICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVNoYWRvd1Rlc3REYXRhIHtcbiAgdGVzdE5hbWU/OiBzdHJpbmc7XG4gIHN0YXR1cz86IHN0cmluZztcbiAgYWN0dWFsT3V0cHV0PzogdW5rbm93bjtcbiAgcGFzc2VkPzogYm9vbGVhbjtcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqIEEgc2hhZG93IHRlc3QgcmVjb3JkICovXG5leHBvcnQgaW50ZXJmYWNlIFNoYWRvd1Rlc3Qge1xuICBpZDogc3RyaW5nO1xuICBmaXhJZDogc3RyaW5nO1xuICBhZ2VudElkOiBzdHJpbmc7XG4gIHRlc3ROYW1lOiBzdHJpbmc7XG4gIGlucHV0RGF0YTogdW5rbm93bjtcbiAgZXhwZWN0ZWRPdXRwdXQ6IHVua25vd247XG4gIGFjdHVhbE91dHB1dD86IHVua25vd247XG4gIHN0YXR1czogc3RyaW5nO1xuICBwYXNzZWQ/OiBib29sZWFuO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgY29tcGxldGVkQXQ/OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNIQURPVyBURVNUUyBBUEkgQ0xJRU5UXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU2hhZG93IHRlc3RzIEFQSSBjbGllbnQgZm9yIG1hbmFnaW5nIHNoYWRvdyB0ZXN0IGV4ZWN1dGlvblxuICovXG5leHBvcnQgY29uc3Qgc2hhZG93VGVzdHMgPSB7XG4gIC8qKlxuICAgKiBMaXN0IHNoYWRvdyB0ZXN0cyBmb3IgYW4gYWdlbnRcbiAgICpcbiAgICogQHBhcmFtIGFnZW50SWQgLSBUaGUgYWdlbnQgSURcbiAgICogQHJldHVybnMgTGlzdCBvZiBzaGFkb3cgdGVzdHNcbiAgICovXG4gIGFzeW5jIGxpc3QoYWdlbnRJZDogc3RyaW5nKTogUHJvbWlzZTxTaGFkb3dUZXN0W10+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHsgYWdlbnRJZCB9KTtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPFNoYWRvd1Rlc3RbXT4oYC9zaGFkb3ctdGVzdHM/JHtwYXJhbXN9YCwge1xuICAgICAgYXBpVmVyc2lvbjogJ25vbmUnLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSBzaGFkb3cgdGVzdCBieSBJRFxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgc2hhZG93IHRlc3QgSURcbiAgICogQHJldHVybnMgVGhlIHNoYWRvdyB0ZXN0IGRldGFpbHNcbiAgICovXG4gIGFzeW5jIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxTaGFkb3dUZXN0PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxTaGFkb3dUZXN0PihgL3NoYWRvdy10ZXN0cy8ke2lkfWAsIHtcbiAgICAgIGFwaVZlcnNpb246ICdub25lJyxcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IHNoYWRvdyB0ZXN0cyBmb3IgYSBzcGVjaWZpYyBmaXhcbiAgICpcbiAgICogQHBhcmFtIGZpeElkIC0gVGhlIGZpeCBJRFxuICAgKiBAcmV0dXJucyBMaXN0IG9mIHNoYWRvdyB0ZXN0cyBmb3IgdGhlIGZpeFxuICAgKi9cbiAgYXN5bmMgZ2V0QnlGaXgoZml4SWQ6IHN0cmluZyk6IFByb21pc2U8U2hhZG93VGVzdFtdPiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxTaGFkb3dUZXN0W10+KGAvZml4ZXMvJHtmaXhJZH0vc2hhZG93LXRlc3RzYCwge1xuICAgICAgYXBpVmVyc2lvbjogJ25vbmUnLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgc2hhZG93IHRlc3RcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgLSBTaGFkb3cgdGVzdCBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIHNoYWRvdyB0ZXN0XG4gICAqL1xuICBhc3luYyBjcmVhdGUoZGF0YTogQ3JlYXRlU2hhZG93VGVzdERhdGEpOiBQcm9taXNlPFNoYWRvd1Rlc3Q+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPFNoYWRvd1Rlc3Q+KCcvc2hhZG93LXRlc3RzJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgYXBpVmVyc2lvbjogJ25vbmUnLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYSBzaGFkb3cgdGVzdFxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUaGUgc2hhZG93IHRlc3QgSUQgdG8gdXBkYXRlXG4gICAqIEBwYXJhbSBkYXRhIC0gRmllbGRzIHRvIHVwZGF0ZVxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBzaGFkb3cgdGVzdFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlKGlkOiBzdHJpbmcsIGRhdGE6IFVwZGF0ZVNoYWRvd1Rlc3REYXRhKTogUHJvbWlzZTxTaGFkb3dUZXN0PiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxTaGFkb3dUZXN0PihgL3NoYWRvdy10ZXN0cy8ke2lkfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BBVENIJyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBhcGlWZXJzaW9uOiAnbm9uZScsXG4gICAgfSk7XG4gIH0sXG59O1xuXG5leHBvcnQgeyBzaGFkb3dUZXN0cyBhcyBkZWZhdWx0IH07XG4iXX0=
@@ -0,0 +1,177 @@
1
+ /**
2
+ * ThinkHive SDK - Signals API
3
+ *
4
+ * Behavioral signal management for detecting patterns in agent interactions
5
+ */
6
+ /** Signal detection configuration */
7
+ export interface DetectionConfig {
8
+ type: string;
9
+ threshold?: number;
10
+ pattern?: string;
11
+ [key: string]: unknown;
12
+ }
13
+ /** Options for creating a signal */
14
+ export interface CreateSignalOptions {
15
+ description?: string;
16
+ isEnabled?: boolean;
17
+ severity?: string;
18
+ }
19
+ /** Options for updating a signal */
20
+ export interface UpdateSignalOptions {
21
+ name?: string;
22
+ group?: string;
23
+ description?: string;
24
+ detectionConfig?: DetectionConfig;
25
+ isEnabled?: boolean;
26
+ severity?: string;
27
+ }
28
+ /** Options for listing signals */
29
+ export interface ListSignalsOptions {
30
+ group?: string;
31
+ source?: string;
32
+ isEnabled?: boolean;
33
+ }
34
+ /** Options for getting signal stats */
35
+ export interface SignalStatsOptions {
36
+ startDate?: string;
37
+ endDate?: string;
38
+ agentId?: string;
39
+ }
40
+ /** Options for getting signal trends */
41
+ export interface SignalTrendsOptions {
42
+ startDate?: string;
43
+ endDate?: string;
44
+ agentId?: string;
45
+ granularity?: 'hour' | 'day' | 'week' | 'month';
46
+ }
47
+ /** Options for getting signal traces */
48
+ export interface SignalTracesOptions {
49
+ limit?: number;
50
+ offset?: number;
51
+ startDate?: string;
52
+ endDate?: string;
53
+ agentId?: string;
54
+ }
55
+ /** Options for getting signal events */
56
+ export interface SignalEventsOptions {
57
+ limit?: number;
58
+ offset?: number;
59
+ }
60
+ /** A behavioral signal definition */
61
+ export interface Signal {
62
+ id: string;
63
+ name: string;
64
+ group: string;
65
+ description?: string;
66
+ detectionConfig: DetectionConfig;
67
+ isEnabled: boolean;
68
+ severity?: string;
69
+ source?: string;
70
+ createdAt: string;
71
+ updatedAt: string;
72
+ }
73
+ /** Signal statistics */
74
+ export interface SignalStats {
75
+ signalId: string;
76
+ name: string;
77
+ eventCount: number;
78
+ traceCount: number;
79
+ lastTriggeredAt?: string;
80
+ }
81
+ /** Signal trend data point */
82
+ export interface SignalTrendPoint {
83
+ period: string;
84
+ eventCount: number;
85
+ traceCount: number;
86
+ }
87
+ /** A signal event occurrence */
88
+ export interface SignalEvent {
89
+ id: string;
90
+ signalId: string;
91
+ traceId: string;
92
+ detectedAt: string;
93
+ metadata?: Record<string, unknown>;
94
+ }
95
+ /**
96
+ * Signals API client for managing behavioral signal detection
97
+ */
98
+ export declare const signals: {
99
+ /**
100
+ * List all signals with optional filters
101
+ *
102
+ * @param opts - Filter options for group, source, or enabled status
103
+ * @returns List of signals
104
+ */
105
+ list(opts?: ListSignalsOptions): Promise<Signal[]>;
106
+ /**
107
+ * Create a new behavioral signal
108
+ *
109
+ * @param name - Signal name
110
+ * @param group - Signal group/category
111
+ * @param detectionConfig - Detection configuration
112
+ * @param opts - Additional signal options
113
+ * @returns The created signal
114
+ */
115
+ create(name: string, group: string, detectionConfig: DetectionConfig, opts?: CreateSignalOptions): Promise<Signal>;
116
+ /**
117
+ * Update an existing signal
118
+ *
119
+ * @param id - Signal ID to update
120
+ * @param opts - Fields to update
121
+ * @returns The updated signal
122
+ */
123
+ update(id: string, opts: UpdateSignalOptions): Promise<Signal>;
124
+ /**
125
+ * Delete a signal
126
+ *
127
+ * @param id - Signal ID to delete
128
+ */
129
+ remove(id: string): Promise<void>;
130
+ /**
131
+ * Seed default signal definitions
132
+ *
133
+ * @returns List of seeded signals
134
+ */
135
+ seedDefaults(): Promise<Signal[]>;
136
+ /**
137
+ * Get signal statistics
138
+ *
139
+ * @param opts - Date range and agent filter options
140
+ * @returns Signal statistics
141
+ */
142
+ getStats(opts?: SignalStatsOptions): Promise<SignalStats[]>;
143
+ /**
144
+ * Get signal trend data over time
145
+ *
146
+ * @param opts - Date range, agent, and granularity options
147
+ * @returns Signal trend data points
148
+ */
149
+ getTrends(opts?: SignalTrendsOptions): Promise<SignalTrendPoint[]>;
150
+ /**
151
+ * Get traces that triggered a specific signal
152
+ *
153
+ * @param id - Signal ID
154
+ * @param opts - Pagination and filter options
155
+ * @returns Traces associated with the signal
156
+ */
157
+ getTraces(id: string, opts?: SignalTracesOptions): Promise<{
158
+ traces: any[];
159
+ limit: number;
160
+ offset: number;
161
+ hasMore: boolean;
162
+ }>;
163
+ /**
164
+ * Get events for a specific signal
165
+ *
166
+ * @param id - Signal ID
167
+ * @param opts - Pagination options
168
+ * @returns Signal events
169
+ */
170
+ getEvents(id: string, opts?: SignalEventsOptions): Promise<{
171
+ events: SignalEvent[];
172
+ limit: number;
173
+ offset: number;
174
+ hasMore: boolean;
175
+ }>;
176
+ };
177
+ export { signals as default };