@thinkhive/sdk 4.1.0 → 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.
@@ -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 };
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * ThinkHive SDK - Signals API
4
+ *
5
+ * Behavioral signal management for detecting patterns in agent interactions
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.default = exports.signals = void 0;
9
+ const client_1 = require("../core/client");
10
+ // ============================================================================
11
+ // SIGNALS API CLIENT
12
+ // ============================================================================
13
+ /**
14
+ * Signals API client for managing behavioral signal detection
15
+ */
16
+ exports.signals = {
17
+ /**
18
+ * List all signals with optional filters
19
+ *
20
+ * @param opts - Filter options for group, source, or enabled status
21
+ * @returns List of signals
22
+ */
23
+ async list(opts) {
24
+ const params = new URLSearchParams();
25
+ if (opts?.group)
26
+ params.set('group', opts.group);
27
+ if (opts?.source)
28
+ params.set('source', opts.source);
29
+ if (opts?.isEnabled !== undefined)
30
+ params.set('isEnabled', String(opts.isEnabled));
31
+ const query = params.toString();
32
+ return (0, client_1.apiRequestWithData)(`/signals/${query ? `?${query}` : ''}`, {
33
+ apiVersion: 'v1',
34
+ });
35
+ },
36
+ /**
37
+ * Create a new behavioral signal
38
+ *
39
+ * @param name - Signal name
40
+ * @param group - Signal group/category
41
+ * @param detectionConfig - Detection configuration
42
+ * @param opts - Additional signal options
43
+ * @returns The created signal
44
+ */
45
+ async create(name, group, detectionConfig, opts) {
46
+ return (0, client_1.apiRequestWithData)('/signals/', {
47
+ method: 'POST',
48
+ body: { name, group, detectionConfig, ...opts },
49
+ apiVersion: 'v1',
50
+ });
51
+ },
52
+ /**
53
+ * Update an existing signal
54
+ *
55
+ * @param id - Signal ID to update
56
+ * @param opts - Fields to update
57
+ * @returns The updated signal
58
+ */
59
+ async update(id, opts) {
60
+ return (0, client_1.apiRequestWithData)(`/signals/${id}`, {
61
+ method: 'PUT',
62
+ body: opts,
63
+ apiVersion: 'v1',
64
+ });
65
+ },
66
+ /**
67
+ * Delete a signal
68
+ *
69
+ * @param id - Signal ID to delete
70
+ */
71
+ async remove(id) {
72
+ return (0, client_1.apiRequest)(`/signals/${id}`, {
73
+ method: 'DELETE',
74
+ apiVersion: 'v1',
75
+ });
76
+ },
77
+ /**
78
+ * Seed default signal definitions
79
+ *
80
+ * @returns List of seeded signals
81
+ */
82
+ async seedDefaults() {
83
+ return (0, client_1.apiRequestWithData)('/signals/seed', {
84
+ method: 'POST',
85
+ apiVersion: 'v1',
86
+ });
87
+ },
88
+ /**
89
+ * Get signal statistics
90
+ *
91
+ * @param opts - Date range and agent filter options
92
+ * @returns Signal statistics
93
+ */
94
+ async getStats(opts) {
95
+ const params = new URLSearchParams();
96
+ if (opts?.startDate)
97
+ params.set('startDate', opts.startDate);
98
+ if (opts?.endDate)
99
+ params.set('endDate', opts.endDate);
100
+ if (opts?.agentId)
101
+ params.set('agentId', opts.agentId);
102
+ const query = params.toString();
103
+ return (0, client_1.apiRequestWithData)(`/signals/stats${query ? `?${query}` : ''}`, {
104
+ apiVersion: 'v1',
105
+ });
106
+ },
107
+ /**
108
+ * Get signal trend data over time
109
+ *
110
+ * @param opts - Date range, agent, and granularity options
111
+ * @returns Signal trend data points
112
+ */
113
+ async getTrends(opts) {
114
+ const params = new URLSearchParams();
115
+ if (opts?.startDate)
116
+ params.set('startDate', opts.startDate);
117
+ if (opts?.endDate)
118
+ params.set('endDate', opts.endDate);
119
+ if (opts?.agentId)
120
+ params.set('agentId', opts.agentId);
121
+ if (opts?.granularity)
122
+ params.set('granularity', opts.granularity);
123
+ const query = params.toString();
124
+ return (0, client_1.apiRequestWithData)(`/signals/trends${query ? `?${query}` : ''}`, {
125
+ apiVersion: 'v1',
126
+ });
127
+ },
128
+ /**
129
+ * Get traces that triggered a specific signal
130
+ *
131
+ * @param id - Signal ID
132
+ * @param opts - Pagination and filter options
133
+ * @returns Traces associated with the signal
134
+ */
135
+ async getTraces(id, opts) {
136
+ const params = new URLSearchParams();
137
+ if (opts?.limit !== undefined)
138
+ params.set('limit', String(opts.limit));
139
+ if (opts?.offset !== undefined)
140
+ params.set('offset', String(opts.offset));
141
+ if (opts?.startDate)
142
+ params.set('startDate', opts.startDate);
143
+ if (opts?.endDate)
144
+ params.set('endDate', opts.endDate);
145
+ if (opts?.agentId)
146
+ params.set('agentId', opts.agentId);
147
+ const query = params.toString();
148
+ return (0, client_1.apiRequestWithData)(`/signals/${id}/traces${query ? `?${query}` : ''}`, {
149
+ apiVersion: 'v1',
150
+ });
151
+ },
152
+ /**
153
+ * Get events for a specific signal
154
+ *
155
+ * @param id - Signal ID
156
+ * @param opts - Pagination options
157
+ * @returns Signal events
158
+ */
159
+ async getEvents(id, opts) {
160
+ const params = new URLSearchParams();
161
+ if (opts?.limit !== undefined)
162
+ params.set('limit', String(opts.limit));
163
+ if (opts?.offset !== undefined)
164
+ params.set('offset', String(opts.offset));
165
+ const query = params.toString();
166
+ return (0, client_1.apiRequestWithData)(`/signals/${id}/events${query ? `?${query}` : ''}`, {
167
+ apiVersion: 'v1',
168
+ });
169
+ },
170
+ };
171
+ exports.default = exports.signals;
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbmFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvc2lnbmFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7R0FJRzs7O0FBRUgsMkNBQWdFO0FBMkdoRSwrRUFBK0U7QUFDL0UscUJBQXFCO0FBQ3JCLCtFQUErRTtBQUUvRTs7R0FFRztBQUNVLFFBQUEsT0FBTyxHQUFHO0lBQ3JCOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUF5QjtRQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLElBQUksSUFBSSxFQUFFLEtBQUs7WUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxJQUFJLEVBQUUsTUFBTTtZQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxJQUFJLElBQUksRUFBRSxTQUFTLEtBQUssU0FBUztZQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUVuRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsT0FBTyxJQUFBLDJCQUFrQixFQUFXLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUMxRSxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsTUFBTSxDQUNWLElBQVksRUFDWixLQUFhLEVBQ2IsZUFBZ0MsRUFDaEMsSUFBMEI7UUFFMUIsT0FBTyxJQUFBLDJCQUFrQixFQUFTLFdBQVcsRUFBRTtZQUM3QyxNQUFN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QUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksSUFBSSxFQUFFLE1BQU0sS0FBSyxTQUFTO1lBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRTFFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUEsMkJBQWtCLEVBQUMsWUFBWSxFQUFFLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUM1RSxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YsQ0FBQztBQUVrQixrQkF2S1AsZUFBTyxDQXVLTyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyAtIFNpZ25hbHMgQVBJXG4gKlxuICogQmVoYXZpb3JhbCBzaWduYWwgbWFuYWdlbWVudCBmb3IgZGV0ZWN0aW5nIHBhdHRlcm5zIGluIGFnZW50IGludGVyYWN0aW9uc1xuICovXG5cbmltcG9ydCB7IGFwaVJlcXVlc3QsIGFwaVJlcXVlc3RXaXRoRGF0YSB9IGZyb20gJy4uL2NvcmUvY2xpZW50JztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVFlQRVNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIFNpZ25hbCBkZXRlY3Rpb24gY29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXRlY3Rpb25Db25maWcge1xuICB0eXBlOiBzdHJpbmc7XG4gIHRocmVzaG9sZD86IG51bWJlcjtcbiAgcGF0dGVybj86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgc2lnbmFsICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVNpZ25hbE9wdGlvbnMge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaXNFbmFibGVkPzogYm9vbGVhbjtcbiAgc2V2ZXJpdHk/OiBzdHJpbmc7XG59XG5cbi8qKiBPcHRpb25zIGZvciB1cGRhdGluZyBhIHNpZ25hbCAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVTaWduYWxPcHRpb25zIHtcbiAgbmFtZT86IHN0cmluZztcbiAgZ3JvdXA/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBkZXRlY3Rpb25Db25maWc/OiBEZXRlY3Rpb25Db25maWc7XG4gIGlzRW5hYmxlZD86IGJvb2xlYW47XG4gIHNldmVyaXR5Pzogc3RyaW5nO1xufVxuXG4vKiogT3B0aW9ucyBmb3IgbGlzdGluZyBzaWduYWxzICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RTaWduYWxzT3B0aW9ucyB7XG4gIGdyb3VwPzogc3RyaW5nO1xuICBzb3VyY2U/OiBzdHJpbmc7XG4gIGlzRW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKiBPcHRpb25zIGZvciBnZXR0aW5nIHNpZ25hbCBzdGF0cyAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduYWxTdGF0c09wdGlvbnMge1xuICBzdGFydERhdGU/OiBzdHJpbmc7XG4gIGVuZERhdGU/OiBzdHJpbmc7XG4gIGFnZW50SWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBPcHRpb25zIGZvciBnZXR0aW5nIHNpZ25hbCB0cmVuZHMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsVHJlbmRzT3B0aW9ucyB7XG4gIHN0YXJ0RGF0ZT86IHN0cmluZztcbiAgZW5kRGF0ZT86IHN0cmluZztcbiAgYWdlbnRJZD86IHN0cmluZztcbiAgZ3JhbnVsYXJpdHk/OiAnaG91cicgfCAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCc7XG59XG5cbi8qKiBPcHRpb25zIGZvciBnZXR0aW5nIHNpZ25hbCB0cmFjZXMgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsVHJhY2VzT3B0aW9ucyB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBvZmZzZXQ/OiBudW1iZXI7XG4gIHN0YXJ0RGF0ZT86IHN0cmluZztcbiAgZW5kRGF0ZT86IHN0cmluZztcbiAgYWdlbnRJZD86IHN0cmluZztcbn1cblxuLyoqIE9wdGlvbnMgZm9yIGdldHRpbmcgc2lnbmFsIGV2ZW50cyAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduYWxFdmVudHNPcHRpb25zIHtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIG9mZnNldD86IG51bWJlcjtcbn1cblxuLyoqIEEgYmVoYXZpb3JhbCBzaWduYWwgZGVmaW5pdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduYWwge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGdyb3VwOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBkZXRlY3Rpb25Db25maWc6IERldGVjdGlvbkNvbmZpZztcbiAgaXNFbmFibGVkOiBib29sZWFuO1xuICBzZXZlcml0eT86IHN0cmluZztcbiAgc291cmNlPzogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXBkYXRlZEF0OiBzdHJpbmc7XG59XG5cbi8qKiBTaWduYWwgc3RhdGlzdGljcyAqL1xuZXhwb3J0IGludGVyZmFjZSBTaWduYWxTdGF0cyB7XG4gIHNpZ25hbElkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZXZlbnRDb3VudDogbnVtYmVyO1xuICB0cmFjZUNvdW50OiBudW1iZXI7XG4gIGxhc3RUcmlnZ2VyZWRBdD86IHN0cmluZztcbn1cblxuLyoqIFNpZ25hbCB0cmVuZCBkYXRhIHBvaW50ICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hbFRyZW5kUG9pbnQge1xuICBwZXJpb2Q6IHN0cmluZztcbiAgZXZlbnRDb3VudDogbnVtYmVyO1xuICB0cmFjZUNvdW50OiBudW1iZXI7XG59XG5cbi8qKiBBIHNpZ25hbCBldmVudCBvY2N1cnJlbmNlICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hbEV2ZW50IHtcbiAgaWQ6IHN0cmluZztcbiAgc2lnbmFsSWQ6IHN0cmluZztcbiAgdHJhY2VJZDogc3RyaW5nO1xuICBkZXRlY3RlZEF0OiBzdHJpbmc7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNJR05BTFMgQVBJIENMSUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFNpZ25hbHMgQVBJIGNsaWVudCBmb3IgbWFuYWdpbmcgYmVoYXZpb3JhbCBzaWduYWwgZGV0ZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBzaWduYWxzID0ge1xuICAvKipcbiAgICogTGlzdCBhbGwgc2lnbmFscyB3aXRoIG9wdGlvbmFsIGZpbHRlcnNcbiAgICpcbiAgICogQHBhcmFtIG9wdHMgLSBGaWx0ZXIgb3B0aW9ucyBmb3IgZ3JvdXAsIHNvdXJjZSwgb3IgZW5hYmxlZCBzdGF0dXNcbiAgICogQHJldHVybnMgTGlzdCBvZiBzaWduYWxzXG4gICAqL1xuICBhc3luYyBsaXN0KG9wdHM/OiBMaXN0U2lnbmFsc09wdGlvbnMpOiBQcm9taXNlPFNpZ25hbFtdPiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcHRzPy5ncm91cCkgcGFyYW1zLnNldCgnZ3JvdXAnLCBvcHRzLmdyb3VwKTtcbiAgICBpZiAob3B0cz8uc291cmNlKSBwYXJhbXMuc2V0KCdzb3VyY2UnLCBvcHRzLnNvdXJjZSk7XG4gICAgaWYgKG9wdHM/LmlzRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSBwYXJhbXMuc2V0KCdpc0VuYWJsZWQnLCBTdHJpbmcob3B0cy5pc0VuYWJsZWQpKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxTaWduYWxbXT4oYC9zaWduYWxzLyR7cXVlcnkgPyBgPyR7cXVlcnl9YCA6ICcnfWAsIHtcbiAgICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBiZWhhdmlvcmFsIHNpZ25hbFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFNpZ25hbCBuYW1lXG4gICAqIEBwYXJhbSBncm91cCAtIFNpZ25hbCBncm91cC9jYXRlZ29yeVxuICAgKiBAcGFyYW0gZGV0ZWN0aW9uQ29uZmlnIC0gRGV0ZWN0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIG9wdHMgLSBBZGRpdGlvbmFsIHNpZ25hbCBvcHRpb25zXG4gICAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIHNpZ25hbFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBncm91cDogc3RyaW5nLFxuICAgIGRldGVjdGlvbkNvbmZpZzogRGV0ZWN0aW9uQ29uZmlnLFxuICAgIG9wdHM/OiBDcmVhdGVTaWduYWxPcHRpb25zXG4gICk6IFByb21pc2U8U2lnbmFsPiB7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxTaWduYWw+KCcvc2lnbmFscy8nLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHsgbmFtZSwgZ3JvdXAsIGRldGVjdGlvbkNvbmZpZywgLi4ub3B0cyB9LFxuICAgICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogVXBkYXRlIGFuIGV4aXN0aW5nIHNpZ25hbFxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBTaWduYWwgSUQgdG8gdXBkYXRlXG4gICAqIEBwYXJhbSBvcHRzIC0gRmllbGRzIHRvIHVwZGF0ZVxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBzaWduYWxcbiAgICovXG4gIGFzeW5jIHVwZGF0ZShpZDogc3RyaW5nLCBvcHRzOiBVcGRhdGVTaWduYWxPcHRpb25zKTogUHJvbWlzZTxTaWduYWw+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPFNpZ25hbD4oYC9zaWduYWxzLyR7aWR9YCwge1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIGJvZHk6IG9wdHMsXG4gICAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGUgYSBzaWduYWxcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gU2lnbmFsIElEIHRvIGRlbGV0ZVxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gYXBpUmVxdWVzdDx2b2lkPihgL3NpZ25hbHMvJHtpZH1gLCB7XG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxuICAgICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogU2VlZCBkZWZhdWx0IHNpZ25hbCBkZWZpbml0aW9uc1xuICAgKlxuICAgKiBAcmV0dXJucyBMaXN0IG9mIHNlZWRlZCBzaWduYWxzXG4gICAqL1xuICBhc3luYyBzZWVkRGVmYXVsdHMoKTogUHJvbWlzZTxTaWduYWxbXT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8U2lnbmFsW10+KCcvc2lnbmFscy9zZWVkJywge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgc2lnbmFsIHN0YXRpc3RpY3NcbiAgICpcbiAgICogQHBhcmFtIG9wdHMgLSBEYXRlIHJhbmdlIGFuZCBhZ2VudCBmaWx0ZXIgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBTaWduYWwgc3RhdGlzdGljc1xuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHMob3B0cz86IFNpZ25hbFN0YXRzT3B0aW9ucyk6IFByb21pc2U8U2lnbmFsU3RhdHNbXT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3B0cz8uc3RhcnREYXRlKSBwYXJhbXMuc2V0KCdzdGFydERhdGUnLCBvcHRzLnN0YXJ0RGF0ZSk7XG4gICAgaWYgKG9wdHM/LmVuZERhdGUpIHBhcmFtcy5zZXQoJ2VuZERhdGUnLCBvcHRzLmVuZERhdGUpO1xuICAgIGlmIChvcHRzPy5hZ2VudElkKSBwYXJhbXMuc2V0KCdhZ2VudElkJywgb3B0cy5hZ2VudElkKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YTxTaWduYWxTdGF0c1tdPihgL3NpZ25hbHMvc3RhdHMke3F1ZXJ5ID8gYD8ke3F1ZXJ5fWAgOiAnJ31gLCB7XG4gICAgICBhcGlWZXJzaW9uOiAndjEnLFxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgc2lnbmFsIHRyZW5kIGRhdGEgb3ZlciB0aW1lXG4gICAqXG4gICAqIEBwYXJhbSBvcHRzIC0gRGF0ZSByYW5nZSwgYWdlbnQsIGFuZCBncmFudWxhcml0eSBvcHRpb25zXG4gICAqIEByZXR1cm5zIFNpZ25hbCB0cmVuZCBkYXRhIHBvaW50c1xuICAgKi9cbiAgYXN5bmMgZ2V0VHJlbmRzKG9wdHM/OiBTaWduYWxUcmVuZHNPcHRpb25zKTogUHJvbWlzZTxTaWduYWxUcmVuZFBvaW50W10+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKG9wdHM/LnN0YXJ0RGF0ZSkgcGFyYW1zLnNldCgnc3RhcnREYXRlJywgb3B0cy5zdGFydERhdGUpO1xuICAgIGlmIChvcHRzPy5lbmREYXRlKSBwYXJhbXMuc2V0KCdlbmREYXRlJywgb3B0cy5lbmREYXRlKTtcbiAgICBpZiAob3B0cz8uYWdlbnRJZCkgcGFyYW1zLnNldCgnYWdlbnRJZCcsIG9wdHMuYWdlbnRJZCk7XG4gICAgaWYgKG9wdHM/LmdyYW51bGFyaXR5KSBwYXJhbXMuc2V0KCdncmFudWxhcml0eScsIG9wdHMuZ3JhbnVsYXJpdHkpO1xuXG4gICAgY29uc3QgcXVlcnkgPSBwYXJhbXMudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gYXBpUmVxdWVzdFdpdGhEYXRhPFNpZ25hbFRyZW5kUG9pbnRbXT4oYC9zaWduYWxzL3RyZW5kcyR7cXVlcnkgPyBgPyR7cXVlcnl9YCA6ICcnfWAsIHtcbiAgICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCB0cmFjZXMgdGhhdCB0cmlnZ2VyZWQgYSBzcGVjaWZpYyBzaWduYWxcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gU2lnbmFsIElEXG4gICAqIEBwYXJhbSBvcHRzIC0gUGFnaW5hdGlvbiBhbmQgZmlsdGVyIG9wdGlvbnNcbiAgICogQHJldHVybnMgVHJhY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2lnbmFsXG4gICAqL1xuICBhc3luYyBnZXRUcmFjZXMoaWQ6IHN0cmluZywgb3B0cz86IFNpZ25hbFRyYWNlc09wdGlvbnMpOiBQcm9taXNlPHtcbiAgICB0cmFjZXM6IGFueVtdO1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgb2Zmc2V0OiBudW1iZXI7XG4gICAgaGFzTW9yZTogYm9vbGVhbjtcbiAgfT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBpZiAob3B0cz8ubGltaXQgIT09IHVuZGVmaW5lZCkgcGFyYW1zLnNldCgnbGltaXQnLCBTdHJpbmcob3B0cy5saW1pdCkpO1xuICAgIGlmIChvcHRzPy5vZmZzZXQgIT09IHVuZGVmaW5lZCkgcGFyYW1zLnNldCgnb2Zmc2V0JywgU3RyaW5nKG9wdHMub2Zmc2V0KSk7XG4gICAgaWYgKG9wdHM/LnN0YXJ0RGF0ZSkgcGFyYW1zLnNldCgnc3RhcnREYXRlJywgb3B0cy5zdGFydERhdGUpO1xuICAgIGlmIChvcHRzPy5lbmREYXRlKSBwYXJhbXMuc2V0KCdlbmREYXRlJywgb3B0cy5lbmREYXRlKTtcbiAgICBpZiAob3B0cz8uYWdlbnRJZCkgcGFyYW1zLnNldCgnYWdlbnRJZCcsIG9wdHMuYWdlbnRJZCk7XG5cbiAgICBjb25zdCBxdWVyeSA9IHBhcmFtcy50b1N0cmluZygpO1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGEoYC9zaWduYWxzLyR7aWR9L3RyYWNlcyR7cXVlcnkgPyBgPyR7cXVlcnl9YCA6ICcnfWAsIHtcbiAgICAgIGFwaVZlcnNpb246ICd2MScsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEdldCBldmVudHMgZm9yIGEgc3BlY2lmaWMgc2lnbmFsXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFNpZ25hbCBJRFxuICAgKiBAcGFyYW0gb3B0cyAtIFBhZ2luYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJucyBTaWduYWwgZXZlbnRzXG4gICAqL1xuICBhc3luYyBnZXRFdmVudHMoaWQ6IHN0cmluZywgb3B0cz86IFNpZ25hbEV2ZW50c09wdGlvbnMpOiBQcm9taXNlPHtcbiAgICBldmVudHM6IFNpZ25hbEV2ZW50W107XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICBvZmZzZXQ6IG51bWJlcjtcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuICB9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChvcHRzPy5saW1pdCAhPT0gdW5kZWZpbmVkKSBwYXJhbXMuc2V0KCdsaW1pdCcsIFN0cmluZyhvcHRzLmxpbWl0KSk7XG4gICAgaWYgKG9wdHM/Lm9mZnNldCAhPT0gdW5kZWZpbmVkKSBwYXJhbXMuc2V0KCdvZmZzZXQnLCBTdHJpbmcob3B0cy5vZmZzZXQpKTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIGFwaVJlcXVlc3RXaXRoRGF0YShgL3NpZ25hbHMvJHtpZH0vZXZlbnRzJHtxdWVyeSA/IGA/JHtxdWVyeX1gIDogJyd9YCwge1xuICAgICAgYXBpVmVyc2lvbjogJ3YxJyxcbiAgICB9KTtcbiAgfSxcbn07XG5cbmV4cG9ydCB7IHNpZ25hbHMgYXMgZGVmYXVsdCB9O1xuIl19
@@ -13,6 +13,8 @@ export interface RequestOptions {
13
13
  maxRetries?: number;
14
14
  /** Request timeout in milliseconds */
15
15
  timeout?: number;
16
+ /** Use path as-is without prepending /api/ prefix (for routes like /v1/guardrails/scan) */
17
+ rawPath?: boolean;
16
18
  }
17
19
  /**
18
20
  * Make an authenticated API request with retry logic
@@ -37,9 +37,15 @@ function sleep(ms) {
37
37
  */
38
38
  async function apiRequest(path, options = {}) {
39
39
  const config = (0, config_1.getConfig)();
40
- const { method = 'GET', body, headers = {}, apiVersion, maxRetries, timeout } = options;
41
- const version = apiVersion === 'none' ? '' : (apiVersion || '');
42
- const url = version ? `${config.endpoint}/api/${version}${path}` : `${config.endpoint}/api${path}`;
40
+ const { method = 'GET', body, headers = {}, apiVersion, maxRetries, timeout, rawPath } = options;
41
+ let url;
42
+ if (rawPath) {
43
+ url = `${config.endpoint}${path}`;
44
+ }
45
+ else {
46
+ const version = apiVersion === 'none' ? '' : (apiVersion || '');
47
+ url = version ? `${config.endpoint}/api/${version}${path}` : `${config.endpoint}/api${path}`;
48
+ }
43
49
  const retries = maxRetries ?? MAX_RETRIES;
44
50
  const requestTimeout = timeout ?? 30000; // Default 30s
45
51
  const requestHeaders = {
@@ -281,4 +287,4 @@ class IpWhitelistError extends ThinkHiveError {
281
287
  }
282
288
  }
283
289
  exports.IpWhitelistError = IpWhitelistError;
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFtREgsZ0NBcUpDO0FBS0QsZ0RBYUM7QUF4TkQscUNBQTREO0FBRzVELCtFQUErRTtBQUMvRSxzQkFBc0I7QUFDdEIsK0VBQStFO0FBRS9FLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLO0FBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUs7QUFDL0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFaEU7O0dBRUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLE9BQWUsRUFBRSxVQUFtQjtJQUM1RCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtJQUMzRSxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxLQUFLLENBQUMsRUFBVTtJQUN2QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQWtCRDs7R0FFRztBQUNJLEtB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RCxxQkFBcUIsRUFDckIsR0FBRyxFQUNILEVBQUUsVUFBVSxFQUFFLENBQ2YsQ0FBQztRQVBjLGVBQVUsR0FBVixVQUFVLENBQVE7UUFRbEMsSUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0NBQ0Y7QUFaRCx3Q0FZQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxjQUFjO0lBQ2xELFlBQVksUUFBZ0I7UUFDMUIsS0FBSyxDQUNILHVEQUF1RCxFQUN2RCx3QkFBd0IsRUFDeEIsR0FBRyxFQUNILEVBQUUsUUFBUSxFQUFFLENBQ2IsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBVkQsNENBVUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaW5rSGl2ZSBTREsgdjMuMCAtIEhUVFAgQ2xpZW50XG4gKlxuICogQ2VudHJhbGl6ZWQgSFRUUCBjbGllbnQgd2l0aCBhdXRoZW50aWNhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmdcbiAqL1xuXG5pbXBvcnQgeyBnZXRDb25maWcsIGRlYnVnTG9nLCBTREtfVkVSU0lPTiB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB0eXBlIHsgQXBpUmVzcG9uc2UgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUkVUUlkgQ09ORklHVVJBVElPTlxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBNQVhfUkVUUklFUyA9IDM7XG5jb25zdCBJTklUSUFMX0JBQ0tPRkYgPSA1MDA7IC8vIG1zXG5jb25zdCBNQVhfQkFDS09GRiA9IDgwMDA7IC8vIG1zXG5jb25zdCBSRVRSWUFCTEVfQ09ERVMgPSBuZXcgU2V0KFs0MDgsIDQyOSwgNTAwLCA1MDIsIDUwMywgNTA0XSk7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGJhY2tvZmYgdGltZSBmb3IgcmV0cnkgYXR0ZW1wdFxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVCYWNrb2ZmKGF0dGVtcHQ6IG51bWJlciwgcmV0cnlBZnRlcj86IG51bWJlcik6IG51bWJlciB7XG4gIGlmIChyZXRyeUFmdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gTWF0aC5taW4ocmV0cnlBZnRlciAqIDEwMDAsIE1BWF9CQUNLT0ZGKTsgLy8gQ29udmVydCBzZWNvbmRzIHRvIG1zXG4gIH1cbiAgY29uc3QgYmFja29mZiA9IElOSVRJQUxfQkFDS09GRiAqIE1hdGgucG93KDIsIGF0dGVtcHQpO1xuICByZXR1cm4gTWF0aC5taW4oYmFja29mZiwgTUFYX0JBQ0tPRkYpO1xufVxuXG4vKipcbiAqIFNsZWVwIGZvciBhIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHNcbiAqL1xuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSFRUUCBDTElFTlRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIG1ldGhvZD86ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnIHwgJ0RFTEVURSc7XG4gIGJvZHk/OiB1bmtub3duO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIE92ZXJyaWRlIEFQSSB2ZXJzaW9uIGZvciB0aGlzIHJlcXVlc3QuIFVzZSAnbm9uZScgZm9yIHVudmVyc2lvbmVkIHJvdXRlcyAoZS5nLiwgL2FwaS9hZ2VudHMpLiAqL1xuICBhcGlWZXJzaW9uPzogJ3YxJyB8ICd2MicgfCAndjMnIHwgJ25vbmUnO1xuICAvKiogT3ZlcnJpZGUgbWF4IHJldHJpZXMgZm9yIHRoaXMgcmVxdWVzdCAqL1xuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xuICAvKiogUmVxdWVzdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gYXV0aGVudGljYXRlZCBBUEkgcmVxdWVzdCB3aXRoIHJldHJ5IGxvZ2ljXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcGlSZXF1ZXN0PFQ+KFxuICBwYXRoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgY29uc3QgeyBtZXRob2QgPSAnR0VUJywgYm9keSwgaGVhZGVycyA9IHt9LCBhcGlWZXJzaW9uLCBtYXhSZXRyaWVzLCB0aW1lb3V0IH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IHZlcnNpb24gPSBhcGlWZXJzaW9uID09PSAnbm9uZScgPyAnJyA6IChhcGlWZXJzaW9uIHx8ICcnKTtcbiAgY29uc3QgdXJsID0gdmVyc2lvbiA/IGAke2NvbmZpZy5lbmRwb2ludH0vYXBpLyR7dmVyc2lvbn0ke3BhdGh9YCA6IGAke2NvbmZpZy5lbmRwb2ludH0vYXBpJHtwYXRofWA7XG4gIGNvbnN0IHJldHJpZXMgPSBtYXhSZXRyaWVzID8/IE1BWF9SRVRSSUVTO1xuICBjb25zdCByZXF1ZXN0VGltZW91dCA9IHRpbWVvdXQgPz8gMzAwMDA7IC8vIERlZmF1bHQgMzBzXG5cbiAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAnWC1TREstVmVyc2lvbic6IFNES19WRVJTSU9OLFxuICAgIC4uLmhlYWRlcnMsXG4gIH07XG5cbiAgaWYgKGNvbmZpZy5hcGlLZXkpIHtcbiAgICByZXF1ZXN0SGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke2NvbmZpZy5hcGlLZXl9YDtcbiAgfSBlbHNlIGlmIChjb25maWcuYWdlbnRJZCkge1xuICAgIHJlcXVlc3RIZWFkZXJzWydYLUFnZW50LUlEJ10gPSBjb25maWcuYWdlbnRJZDtcbiAgfVxuXG4gIGRlYnVnTG9nKGAke21ldGhvZH0gJHt1cmx9YCk7XG5cbiAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCBudWxsID0gbnVsbDtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSByZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIGFib3J0IGNvbnRyb2xsZXIgZm9yIHRpbWVvdXRcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgcmVxdWVzdFRpbWVvdXQpO1xuXG4gICAgICBsZXQgcmVzcG9uc2U6IFJlc3BvbnNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgICAgYm9keTogYm9keSA/IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBkZXByZWNhdGlvbiB3YXJuaW5nc1xuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuaGFzKCdEZXByZWNhdGlvbicpKSB7XG4gICAgICAgIGNvbnN0IHN1bnNldCA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdTdW5zZXQnKTtcbiAgICAgICAgY29uc3QgbGluayA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdMaW5rJyk7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW1RoaW5rSGl2ZV0gRGVwcmVjYXRpb24gd2FybmluZzogVGhpcyBlbmRwb2ludCBpcyBkZXByZWNhdGVkLmAgK1xuICAgICAgICAgICAgKHN1bnNldCA/IGAgU3Vuc2V0OiAke3N1bnNldH1gIDogJycpICtcbiAgICAgICAgICAgIChsaW5rID8gYCBTdWNjZXNzb3I6ICR7bGlua31gIDogJycpXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHJlc3BvbnNlIGlzIHJldHJ5YWJsZVxuICAgICAgaWYgKFJFVFJZQUJMRV9DT0RFUy5oYXMocmVzcG9uc2Uuc3RhdHVzKSAmJiBhdHRlbXB0IDwgcmV0cmllcykge1xuICAgICAgICAvLyBHZXQgUmV0cnktQWZ0ZXIgaGVhZGVyIGlmIHByZXNlbnQgKGZvciA0MjkgcmVzcG9uc2VzKVxuICAgICAgICBsZXQgcmV0cnlBZnRlcjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MjkpIHtcbiAgICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1JldHJ5LUFmdGVyJyk7XG4gICAgICAgICAgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHtcbiAgICAgICAgICAgIHJldHJ5QWZ0ZXIgPSBwYXJzZUZsb2F0KHJldHJ5QWZ0ZXJIZWFkZXIpO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHJldHJ5QWZ0ZXIpKSB7XG4gICAgICAgICAgICAgIHJldHJ5QWZ0ZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmFja29mZiA9IGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdCwgcmV0cnlBZnRlcik7XG4gICAgICAgIGRlYnVnTG9nKGBSZXRyeWluZyBhZnRlciAke2JhY2tvZmZ9bXMgKGF0dGVtcHQgJHthdHRlbXB0ICsgMX0vJHtyZXRyaWVzfSlgKTtcbiAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgbGV0IGVycm9yRGF0YTogeyBtZXNzYWdlPzogc3RyaW5nOyBjb2RlPzogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlcnJvckRhdGEgPSBKU09OLnBhcnNlKGVycm9yVGV4dCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGVycm9yRGF0YSA9IHsgbWVzc2FnZTogZXJyb3JUZXh0IH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgcmF0ZSBsaW1pdCBzcGVjaWZpY2FsbHlcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDI5KSB7XG4gICAgICAgICAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdSZXRyeS1BZnRlcicpO1xuICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSByZXRyeUFmdGVySGVhZGVyID8gcGFyc2VGbG9hdChyZXRyeUFmdGVySGVhZGVyKSAqIDEwMDAgOiA2MDAwMDtcbiAgICAgICAgICB0aHJvdyBuZXcgUmF0ZUxpbWl0RXJyb3IocmV0cnlBZnRlcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVGhpbmtIaXZlQXBpRXJyb3IoXG4gICAgICAgICAgZXJyb3JEYXRhLm1lc3NhZ2UgfHwgYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCxcbiAgICAgICAgICByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgZXJyb3JEYXRhLmNvZGVcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIDIwNCBObyBDb250ZW50IChlLmcuLCBzdWNjZXNzZnVsIERFTEVURSlcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKSBhcyBQcm9taXNlPFQ+O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgYWJvcnQgKHRpbWVvdXQpXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgbGFzdEVycm9yID0gbmV3IFRoaW5rSGl2ZUFwaUVycm9yKGBSZXF1ZXN0IHRpbWVkIG91dCBhZnRlciAke3JlcXVlc3RUaW1lb3V0fW1zYCwgNDA4KTtcbiAgICAgICAgaWYgKGF0dGVtcHQgPCByZXRyaWVzKSB7XG4gICAgICAgICAgY29uc3QgYmFja29mZiA9IGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdCk7XG4gICAgICAgICAgZGVidWdMb2coYFJlcXVlc3QgdGltZWQgb3V0LCByZXRyeWluZyBhZnRlciAke2JhY2tvZmZ9bXMgKGF0dGVtcHQgJHthdHRlbXB0ICsgMX0vJHtyZXRyaWVzfSlgKTtcbiAgICAgICAgICBhd2FpdCBzbGVlcChiYWNrb2ZmKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBsYXN0RXJyb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBuZXR3b3JrIGVycm9ycyAoVHlwZUVycm9yIGZyb20gZmV0Y2gpXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgbGFzdEVycm9yID0gbmV3IFRoaW5rSGl2ZUFwaUVycm9yKGBOZXR3b3JrIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgNTAzKTtcbiAgICAgICAgaWYgKGF0dGVtcHQgPCByZXRyaWVzKSB7XG4gICAgICAgICAgY29uc3QgYmFja29mZiA9IGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdCk7XG4gICAgICAgICAgZGVidWdMb2coYE5ldHdvcmsgZXJyb3IsIHJldHJ5aW5nIGFmdGVyICR7YmFja29mZn1tcyAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke3JldHJpZXN9KWApO1xuICAgICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmYpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGxhc3RFcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gUmUtdGhyb3cgVGhpbmtIaXZlIGVycm9ycyAobm9uLXJldHJ5YWJsZSlcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFRoaW5rSGl2ZUVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICAvLyBVbmtub3duIGVycm9yXG4gICAgICBsYXN0RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XG4gICAgICBpZiAoYXR0ZW1wdCA8IHJldHJpZXMpIHtcbiAgICAgICAgY29uc3QgYmFja29mZiA9IGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdCk7XG4gICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmYpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBUaGlua0hpdmVBcGlFcnJvcihgUmVxdWVzdCBmYWlsZWQ6ICR7bGFzdEVycm9yLm1lc3NhZ2V9YCwgNTAwKTtcbiAgICB9XG4gIH1cblxuICAvLyBTaG91bGQgbm90IHJlYWNoIGhlcmUsIGJ1dCBqdXN0IGluIGNhc2VcbiAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBUaGlua0hpdmVBcGlFcnJvcignUmVxdWVzdCBmYWlsZWQgYWZ0ZXIgYWxsIHJldHJpZXMnLCA1MDApO1xufVxuXG4vKipcbiAqIE1ha2UgYW4gQVBJIHJlcXVlc3QgYW5kIGV4dHJhY3QgZGF0YSBmcm9tIHJlc3BvbnNlIHdyYXBwZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaVJlcXVlc3RXaXRoRGF0YTxUPihcbiAgcGF0aDogc3RyaW5nLFxuICBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGlSZXF1ZXN0PEFwaVJlc3BvbnNlPFQ+PihwYXRoLCBvcHRpb25zKTtcbiAgaWYgKCFyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgdGhyb3cgbmV3IFRoaW5rSGl2ZUFwaUVycm9yKFxuICAgICAgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3InLFxuICAgICAgNTAwLFxuICAgICAgcmVzcG9uc2UuZXJyb3I/LmNvZGVcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNwb25zZS5kYXRhIGFzIFQ7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEVSUk9SU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEJhc2UgZXJyb3IgY2xhc3MgZm9yIFRoaW5rSGl2ZSBTREsgZXJyb3JzXG4gKi9cbmV4cG9ydCBjbGFzcyBUaGlua0hpdmVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU/OiBudW1iZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IGRldGFpbHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVGhpbmtIaXZlRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZXJyb3IgLSByZXR1cm5lZCBmcm9tIFRoaW5rSGl2ZSBzZXJ2ZXJcbiAqL1xuZXhwb3J0IGNsYXNzIFRoaW5rSGl2ZUFwaUVycm9yIGV4dGVuZHMgVGhpbmtIaXZlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgc3RhdHVzQ29kZTogbnVtYmVyLFxuICAgIGNvZGU/OiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgY29kZSB8fCAnQVBJX0VSUk9SJywgc3RhdHVzQ29kZSk7XG4gICAgdGhpcy5uYW1lID0gJ1RoaW5rSGl2ZUFwaUVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRpb24gZXJyb3IgLSBpbnZhbGlkIGlucHV0IHBhcmFtZXRlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFRoaW5rSGl2ZVZhbGlkYXRpb25FcnJvciBleHRlbmRzIFRoaW5rSGl2ZUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZD86IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCAnVkFMSURBVElPTl9FUlJPUicsIDQwMCwgZmllbGQgPyB7IGZpZWxkIH0gOiB1bmRlZmluZWQpO1xuICAgIHRoaXMubmFtZSA9ICdUaGlua0hpdmVWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogUGVybWlzc2lvbiBkZW5pZWQgZXJyb3IgLSBBUEkga2V5IGxhY2tzIHJlcXVpcmVkIHBlcm1pc3Npb25zXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgYXdhaXQgdGhpbmtIaXZlLnRyYWNlcy5jcmVhdGUoLi4uKTtcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFBlcm1pc3Npb25EZW5pZWRFcnJvcikge1xuICogICAgIGNvbnNvbGUubG9nKCdBUEkga2V5IG5lZWRzIHdyaXRlIHBlcm1pc3Npb24nKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uRGVuaWVkRXJyb3IgZXh0ZW5kcyBUaGlua0hpdmVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB7XG4gICAgc3VwZXIobWVzc2FnZSwgJ1BFUk1JU1NJT05fREVOSUVEJywgNDAzLCBkZXRhaWxzKTtcbiAgICB0aGlzLm5hbWUgPSAnUGVybWlzc2lvbkRlbmllZEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEFnZW50IHNjb3BlIHZpb2xhdGlvbiBlcnJvciAtIEFQSSBrZXkgbm90IGF1dGhvcml6ZWQgZm9yIHRoaXMgYWdlbnRcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBDcmVhdGUga2V5IHNjb3BlZCB0byBzcGVjaWZpYyBhZ2VudHNcbiAqIGNvbnN0IGtleSA9IGF3YWl0IHRoaW5rSGl2ZS5hcGlLZXlzLmNyZWF0ZSh7XG4gKiAgIG5hbWU6ICdBZ2VudCBBIEtleScsXG4gKiAgIGFsbG93ZWRBZ2VudElkczogWydhZ2VudC1hLWlkJ11cbiAqIH0pO1xuICpcbiAqIC8vIEF0dGVtcHRpbmcgdG8gdXNlIGZvciBBZ2VudCBCIHdpbGwgdGhyb3cgQWdlbnRTY29wZUVycm9yXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEFnZW50U2NvcGVFcnJvciBleHRlbmRzIFRoaW5rSGl2ZUVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgYWdlbnRJZDogc3RyaW5nLFxuICAgIGFsbG93ZWRBZ2VudHM6IHN0cmluZ1tdXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgYEFQSSBrZXkgbm90IGF1dGhvcml6ZWQgZm9yIGFnZW50ICR7YWdlbnRJZH1gLFxuICAgICAgJ0FHRU5UX1NDT1BFX1ZJT0xBVElPTicsXG4gICAgICA0MDMsXG4gICAgICB7IGFnZW50SWQsIGFsbG93ZWRBZ2VudHMgfVxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ0FnZW50U2NvcGVFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBSYXRlIGxpbWl0IGV4Y2VlZGVkIGVycm9yXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdHJ5IHtcbiAqICAgYXdhaXQgdGhpbmtIaXZlLnRyYWNlcy5jcmVhdGUoLi4uKTtcbiAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFJhdGVMaW1pdEVycm9yKSB7XG4gKiAgICAgLy8gV2FpdCBhbmQgcmV0cnlcbiAqICAgICBhd2FpdCBzbGVlcChlcnJvci5yZXRyeUFmdGVyKTtcbiAqICAgICBhd2FpdCB0aGlua0hpdmUudHJhY2VzLmNyZWF0ZSguLi4pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFJhdGVMaW1pdEVycm9yIGV4dGVuZHMgVGhpbmtIaXZlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmV0cnlBZnRlcjogbnVtYmVyXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgYFJhdGUgbGltaXQgZXhjZWVkZWQuIFJldHJ5IGFmdGVyICR7cmV0cnlBZnRlcn1tc2AsXG4gICAgICAnUkFURV9MSU1JVF9FWENFRURFRCcsXG4gICAgICA0MjksXG4gICAgICB7IHJldHJ5QWZ0ZXIgfVxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ1JhdGVMaW1pdEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIElQIHdoaXRlbGlzdCB2aW9sYXRpb24gZXJyb3JcbiAqL1xuZXhwb3J0IGNsYXNzIElwV2hpdGVsaXN0RXJyb3IgZXh0ZW5kcyBUaGlua0hpdmVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGNsaWVudElwOiBzdHJpbmcpIHtcbiAgICBzdXBlcihcbiAgICAgICdSZXF1ZXN0IElQIGFkZHJlc3MgaXMgbm90IGF1dGhvcml6ZWQgZm9yIHRoaXMgQVBJIGtleScsXG4gICAgICAnSVBfV0hJVEVMSVNUX1ZJT0xBVElPTicsXG4gICAgICA0MDMsXG4gICAgICB7IGNsaWVudElwIH1cbiAgICApO1xuICAgIHRoaXMubmFtZSA9ICdJcFdoaXRlbGlzdEVycm9yJztcbiAgfVxufVxuIl19
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOzs7QUFxREgsZ0NBMEpDO0FBS0QsZ0RBYUM7QUEvTkQscUNBQTREO0FBRzVELCtFQUErRTtBQUMvRSxzQkFBc0I7QUFDdEIsK0VBQStFO0FBRS9FLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxLQUFLO0FBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUs7QUFDL0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFaEU7O0dBRUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLE9BQWUsRUFBRSxVQUFtQjtJQUM1RCxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtJQUMzRSxDQUFDO0lBQ0QsTUFBTSxPQUFPLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyxLQUFLLENBQUMsRUFBVTtJQUN2QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQW9CRDs7R0FFRztBQUNJLEtB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QixDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQWJELDBDQWFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFhLGNBQWUsU0FBUSxjQUFjO0lBQ2hELFlBQ2tCLFVBQWtCO1FBRWxDLEtBQUssQ0FDSCxvQ0FBb0MsVUFBVSxJQUFJLEVBQ2xELHFCQUFxQixFQUNyQixHQUFHLEVBQ0gsRUFBRSxVQUFVLEVBQUUsQ0FDZixDQUFDO1FBUGMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQVFsQyxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7Q0FDRjtBQVpELHdDQVlDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLGNBQWM7SUFDbEQsWUFBWSxRQUFnQjtRQUMxQixLQUFLLENBQ0gsdURBQXVELEVBQ3ZELHdCQUF3QixFQUN4QixHQUFHLEVBQ0gsRUFBRSxRQUFRLEVBQUUsQ0FDYixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFWRCw0Q0FVQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpbmtIaXZlIFNESyB2My4wIC0gSFRUUCBDbGllbnRcbiAqXG4gKiBDZW50cmFsaXplZCBIVFRQIGNsaWVudCB3aXRoIGF1dGhlbnRpY2F0aW9uIGFuZCBlcnJvciBoYW5kbGluZ1xuICovXG5cbmltcG9ydCB7IGdldENvbmZpZywgZGVidWdMb2csIFNES19WRVJTSU9OIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBBcGlSZXNwb25zZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSRVRSWSBDT05GSUdVUkFUSU9OXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IE1BWF9SRVRSSUVTID0gMztcbmNvbnN0IElOSVRJQUxfQkFDS09GRiA9IDUwMDsgLy8gbXNcbmNvbnN0IE1BWF9CQUNLT0ZGID0gODAwMDsgLy8gbXNcbmNvbnN0IFJFVFJZQUJMRV9DT0RFUyA9IG5ldyBTZXQoWzQwOCwgNDI5LCA1MDAsIDUwMiwgNTAzLCA1MDRdKTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgYmFja29mZiB0aW1lIGZvciByZXRyeSBhdHRlbXB0XG4gKi9cbmZ1bmN0aW9uIGNhbGN1bGF0ZUJhY2tvZmYoYXR0ZW1wdDogbnVtYmVyLCByZXRyeUFmdGVyPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKHJldHJ5QWZ0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBNYXRoLm1pbihyZXRyeUFmdGVyICogMTAwMCwgTUFYX0JBQ0tPRkYpOyAvLyBDb252ZXJ0IHNlY29uZHMgdG8gbXNcbiAgfVxuICBjb25zdCBiYWNrb2ZmID0gSU5JVElBTF9CQUNLT0ZGICogTWF0aC5wb3coMiwgYXR0ZW1wdCk7XG4gIHJldHVybiBNYXRoLm1pbihiYWNrb2ZmLCBNQVhfQkFDS09GRik7XG59XG5cbi8qKlxuICogU2xlZXAgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kc1xuICovXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIVFRQIENMSUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RPcHRpb25zIHtcbiAgbWV0aG9kPzogJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyB8ICdQQVRDSCcgfCAnREVMRVRFJztcbiAgYm9keT86IHVua25vd247XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogT3ZlcnJpZGUgQVBJIHZlcnNpb24gZm9yIHRoaXMgcmVxdWVzdC4gVXNlICdub25lJyBmb3IgdW52ZXJzaW9uZWQgcm91dGVzIChlLmcuLCAvYXBpL2FnZW50cykuICovXG4gIGFwaVZlcnNpb24/OiAndjEnIHwgJ3YyJyB8ICd2MycgfCAnbm9uZSc7XG4gIC8qKiBPdmVycmlkZSBtYXggcmV0cmllcyBmb3IgdGhpcyByZXF1ZXN0ICovXG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG4gIC8qKiBSZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBVc2UgcGF0aCBhcy1pcyB3aXRob3V0IHByZXBlbmRpbmcgL2FwaS8gcHJlZml4IChmb3Igcm91dGVzIGxpa2UgL3YxL2d1YXJkcmFpbHMvc2NhbikgKi9cbiAgcmF3UGF0aD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTWFrZSBhbiBhdXRoZW50aWNhdGVkIEFQSSByZXF1ZXN0IHdpdGggcmV0cnkgbG9naWNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwaVJlcXVlc3Q8VD4oXG4gIHBhdGg6IHN0cmluZyxcbiAgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBjb25zdCB7IG1ldGhvZCA9ICdHRVQnLCBib2R5LCBoZWFkZXJzID0ge30sIGFwaVZlcnNpb24sIG1heFJldHJpZXMsIHRpbWVvdXQsIHJhd1BhdGggfSA9IG9wdGlvbnM7XG5cbiAgbGV0IHVybDogc3RyaW5nO1xuICBpZiAocmF3UGF0aCkge1xuICAgIHVybCA9IGAke2NvbmZpZy5lbmRwb2ludH0ke3BhdGh9YDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gYXBpVmVyc2lvbiA9PT0gJ25vbmUnID8gJycgOiAoYXBpVmVyc2lvbiB8fCAnJyk7XG4gICAgdXJsID0gdmVyc2lvbiA/IGAke2NvbmZpZy5lbmRwb2ludH0vYXBpLyR7dmVyc2lvbn0ke3BhdGh9YCA6IGAke2NvbmZpZy5lbmRwb2ludH0vYXBpJHtwYXRofWA7XG4gIH1cbiAgY29uc3QgcmV0cmllcyA9IG1heFJldHJpZXMgPz8gTUFYX1JFVFJJRVM7XG4gIGNvbnN0IHJlcXVlc3RUaW1lb3V0ID0gdGltZW91dCA/PyAzMDAwMDsgLy8gRGVmYXVsdCAzMHNcblxuICBjb25zdCByZXF1ZXN0SGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICdYLVNESy1WZXJzaW9uJzogU0RLX1ZFUlNJT04sXG4gICAgLi4uaGVhZGVycyxcbiAgfTtcblxuICBpZiAoY29uZmlnLmFwaUtleSkge1xuICAgIHJlcXVlc3RIZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Y29uZmlnLmFwaUtleX1gO1xuICB9IGVsc2UgaWYgKGNvbmZpZy5hZ2VudElkKSB7XG4gICAgcmVxdWVzdEhlYWRlcnNbJ1gtQWdlbnQtSUQnXSA9IGNvbmZpZy5hZ2VudElkO1xuICB9XG5cbiAgZGVidWdMb2coYCR7bWV0aG9kfSAke3VybH1gKTtcblxuICBsZXQgbGFzdEVycm9yOiBFcnJvciB8IG51bGwgPSBudWxsO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDw9IHJldHJpZXM7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICAvLyBDcmVhdGUgYWJvcnQgY29udHJvbGxlciBmb3IgdGltZW91dFxuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCByZXF1ZXN0VGltZW91dCk7XG5cbiAgICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgICB0cnkge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgICBib2R5OiBib2R5ID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgfSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGRlcHJlY2F0aW9uIHdhcm5pbmdzXG4gICAgICBpZiAocmVzcG9uc2UuaGVhZGVycy5oYXMoJ0RlcHJlY2F0aW9uJykpIHtcbiAgICAgICAgY29uc3Qgc3Vuc2V0ID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1N1bnNldCcpO1xuICAgICAgICBjb25zdCBsaW5rID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ0xpbmsnKTtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbVGhpbmtIaXZlXSBEZXByZWNhdGlvbiB3YXJuaW5nOiBUaGlzIGVuZHBvaW50IGlzIGRlcHJlY2F0ZWQuYCArXG4gICAgICAgICAgICAoc3Vuc2V0ID8gYCBTdW5zZXQ6ICR7c3Vuc2V0fWAgOiAnJykgK1xuICAgICAgICAgICAgKGxpbmsgPyBgIFN1Y2Nlc3NvcjogJHtsaW5rfWAgOiAnJylcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgcmVzcG9uc2UgaXMgcmV0cnlhYmxlXG4gICAgICBpZiAoUkVUUllBQkxFX0NPREVTLmhhcyhyZXNwb25zZS5zdGF0dXMpICYmIGF0dGVtcHQgPCByZXRyaWVzKSB7XG4gICAgICAgIC8vIEdldCBSZXRyeS1BZnRlciBoZWFkZXIgaWYgcHJlc2VudCAoZm9yIDQyOSByZXNwb25zZXMpXG4gICAgICAgIGxldCByZXRyeUFmdGVyOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnUmV0cnktQWZ0ZXInKTtcbiAgICAgICAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgICAgICAgcmV0cnlBZnRlciA9IHBhcnNlRmxvYXQocmV0cnlBZnRlckhlYWRlcik7XG4gICAgICAgICAgICBpZiAoaXNOYU4ocmV0cnlBZnRlcikpIHtcbiAgICAgICAgICAgICAgcmV0cnlBZnRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYWNrb2ZmID0gY2FsY3VsYXRlQmFja29mZihhdHRlbXB0LCByZXRyeUFmdGVyKTtcbiAgICAgICAgZGVidWdMb2coYFJldHJ5aW5nIGFmdGVyICR7YmFja29mZn1tcyAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke3JldHJpZXN9KWApO1xuICAgICAgICBhd2FpdCBzbGVlcChiYWNrb2ZmKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICBsZXQgZXJyb3JEYXRhOiB7IG1lc3NhZ2U/OiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfSA9IHt9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGVycm9yRGF0YSA9IEpTT04ucGFyc2UoZXJyb3JUZXh0KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgZXJyb3JEYXRhID0geyBtZXNzYWdlOiBlcnJvclRleHQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhbmRsZSByYXRlIGxpbWl0IHNwZWNpZmljYWxseVxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MjkpIHtcbiAgICAgICAgICBjb25zdCByZXRyeUFmdGVySGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ1JldHJ5LUFmdGVyJyk7XG4gICAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IHJldHJ5QWZ0ZXJIZWFkZXIgPyBwYXJzZUZsb2F0KHJldHJ5QWZ0ZXJIZWFkZXIpICogMTAwMCA6IDYwMDAwO1xuICAgICAgICAgIHRocm93IG5ldyBSYXRlTGltaXRFcnJvcihyZXRyeUFmdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUaGlua0hpdmVBcGlFcnJvcihcbiAgICAgICAgICBlcnJvckRhdGEubWVzc2FnZSB8fCBgSFRUUCAke3Jlc3BvbnNlLnN0YXR1c31gLFxuICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICBlcnJvckRhdGEuY29kZVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgMjA0IE5vIENvbnRlbnQgKGUuZy4sIHN1Y2Nlc3NmdWwgREVMRVRFKVxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyBUO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpIGFzIFByb21pc2U8VD47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBhYm9ydCAodGltZW91dClcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICBsYXN0RXJyb3IgPSBuZXcgVGhpbmtIaXZlQXBpRXJyb3IoYFJlcXVlc3QgdGltZWQgb3V0IGFmdGVyICR7cmVxdWVzdFRpbWVvdXR9bXNgLCA0MDgpO1xuICAgICAgICBpZiAoYXR0ZW1wdCA8IHJldHJpZXMpIHtcbiAgICAgICAgICBjb25zdCBiYWNrb2ZmID0gY2FsY3VsYXRlQmFja29mZihhdHRlbXB0KTtcbiAgICAgICAgICBkZWJ1Z0xvZyhgUmVxdWVzdCB0aW1lZCBvdXQsIHJldHJ5aW5nIGFmdGVyICR7YmFja29mZn1tcyAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke3JldHJpZXN9KWApO1xuICAgICAgICAgIGF3YWl0IHNsZWVwKGJhY2tvZmYpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGxhc3RFcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIG5ldHdvcmsgZXJyb3JzIChUeXBlRXJyb3IgZnJvbSBmZXRjaClcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcikge1xuICAgICAgICBsYXN0RXJyb3IgPSBuZXcgVGhpbmtIaXZlQXBpRXJyb3IoYE5ldHdvcmsgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCA1MDMpO1xuICAgICAgICBpZiAoYXR0ZW1wdCA8IHJldHJpZXMpIHtcbiAgICAgICAgICBjb25zdCBiYWNrb2ZmID0gY2FsY3VsYXRlQmFja29mZihhdHRlbXB0KTtcbiAgICAgICAgICBkZWJ1Z0xvZyhgTmV0d29yayBlcnJvciwgcmV0cnlpbmcgYWZ0ZXIgJHtiYWNrb2ZmfW1zIChhdHRlbXB0ICR7YXR0ZW1wdCArIDF9LyR7cmV0cmllc30pYCk7XG4gICAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbGFzdEVycm9yO1xuICAgICAgfVxuXG4gICAgICAvLyBSZS10aHJvdyBUaGlua0hpdmUgZXJyb3JzIChub24tcmV0cnlhYmxlKVxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVGhpbmtIaXZlRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIC8vIFVua25vd24gZXJyb3JcbiAgICAgIGxhc3RFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcbiAgICAgIGlmIChhdHRlbXB0IDwgcmV0cmllcykge1xuICAgICAgICBjb25zdCBiYWNrb2ZmID0gY2FsY3VsYXRlQmFja29mZihhdHRlbXB0KTtcbiAgICAgICAgYXdhaXQgc2xlZXAoYmFja29mZik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IFRoaW5rSGl2ZUFwaUVycm9yKGBSZXF1ZXN0IGZhaWxlZDogJHtsYXN0RXJyb3IubWVzc2FnZX1gLCA1MDApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNob3VsZCBub3QgcmVhY2ggaGVyZSwgYnV0IGp1c3QgaW4gY2FzZVxuICB0aHJvdyBsYXN0RXJyb3IgfHwgbmV3IFRoaW5rSGl2ZUFwaUVycm9yKCdSZXF1ZXN0IGZhaWxlZCBhZnRlciBhbGwgcmV0cmllcycsIDUwMCk7XG59XG5cbi8qKlxuICogTWFrZSBhbiBBUEkgcmVxdWVzdCBhbmQgZXh0cmFjdCBkYXRhIGZyb20gcmVzcG9uc2Ugd3JhcHBlclxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBpUmVxdWVzdFdpdGhEYXRhPFQ+KFxuICBwYXRoOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaVJlcXVlc3Q8QXBpUmVzcG9uc2U8VD4+KHBhdGgsIG9wdGlvbnMpO1xuICBpZiAoIXJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgVGhpbmtIaXZlQXBpRXJyb3IoXG4gICAgICByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXG4gICAgICA1MDAsXG4gICAgICByZXNwb25zZS5lcnJvcj8uY29kZVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGEgYXMgVDtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRVJST1JTXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQmFzZSBlcnJvciBjbGFzcyBmb3IgVGhpbmtIaXZlIFNESyBlcnJvcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFRoaW5rSGl2ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGNvZGU6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZT86IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdUaGlua0hpdmVFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCBlcnJvciAtIHJldHVybmVkIGZyb20gVGhpbmtIaXZlIHNlcnZlclxuICovXG5leHBvcnQgY2xhc3MgVGhpbmtIaXZlQXBpRXJyb3IgZXh0ZW5kcyBUaGlua0hpdmVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gICAgY29kZT86IHN0cmluZ1xuICApIHtcbiAgICBzdXBlcihtZXNzYWdlLCBjb2RlIHx8ICdBUElfRVJST1InLCBzdGF0dXNDb2RlKTtcbiAgICB0aGlzLm5hbWUgPSAnVGhpbmtIaXZlQXBpRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGlvbiBlcnJvciAtIGludmFsaWQgaW5wdXQgcGFyYW1ldGVyc1xuICovXG5leHBvcnQgY2xhc3MgVGhpbmtIaXZlVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgVGhpbmtIaXZlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGZpZWxkPzogc3RyaW5nXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UsICdWQUxJREFUSU9OX0VSUk9SJywgNDAwLCBmaWVsZCA/IHsgZmllbGQgfSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5uYW1lID0gJ1RoaW5rSGl2ZVZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBQZXJtaXNzaW9uIGRlbmllZCBlcnJvciAtIEFQSSBrZXkgbGFja3MgcmVxdWlyZWQgcGVybWlzc2lvbnNcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0cnkge1xuICogICBhd2FpdCB0aGlua0hpdmUudHJhY2VzLmNyZWF0ZSguLi4pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUGVybWlzc2lvbkRlbmllZEVycm9yKSB7XG4gKiAgICAgY29uc29sZS5sb2coJ0FQSSBrZXkgbmVlZHMgd3JpdGUgcGVybWlzc2lvbicpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25EZW5pZWRFcnJvciBleHRlbmRzIFRoaW5rSGl2ZUVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHtcbiAgICBzdXBlcihtZXNzYWdlLCAnUEVSTUlTU0lPTl9ERU5JRUQnLCA0MDMsIGRldGFpbHMpO1xuICAgIHRoaXMubmFtZSA9ICdQZXJtaXNzaW9uRGVuaWVkRXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogQWdlbnQgc2NvcGUgdmlvbGF0aW9uIGVycm9yIC0gQVBJIGtleSBub3QgYXV0aG9yaXplZCBmb3IgdGhpcyBhZ2VudFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyZWF0ZSBrZXkgc2NvcGVkIHRvIHNwZWNpZmljIGFnZW50c1xuICogY29uc3Qga2V5ID0gYXdhaXQgdGhpbmtIaXZlLmFwaUtleXMuY3JlYXRlKHtcbiAqICAgbmFtZTogJ0FnZW50IEEgS2V5JyxcbiAqICAgYWxsb3dlZEFnZW50SWRzOiBbJ2FnZW50LWEtaWQnXVxuICogfSk7XG4gKlxuICogLy8gQXR0ZW1wdGluZyB0byB1c2UgZm9yIEFnZW50IEIgd2lsbCB0aHJvdyBBZ2VudFNjb3BlRXJyb3JcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQWdlbnRTY29wZUVycm9yIGV4dGVuZHMgVGhpbmtIaXZlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBhZ2VudElkOiBzdHJpbmcsXG4gICAgYWxsb3dlZEFnZW50czogc3RyaW5nW11cbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBgQVBJIGtleSBub3QgYXV0aG9yaXplZCBmb3IgYWdlbnQgJHthZ2VudElkfWAsXG4gICAgICAnQUdFTlRfU0NPUEVfVklPTEFUSU9OJyxcbiAgICAgIDQwMyxcbiAgICAgIHsgYWdlbnRJZCwgYWxsb3dlZEFnZW50cyB9XG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnQWdlbnRTY29wZUVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIFJhdGUgbGltaXQgZXhjZWVkZWQgZXJyb3JcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0cnkge1xuICogICBhd2FpdCB0aGlua0hpdmUudHJhY2VzLmNyZWF0ZSguLi4pO1xuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKGVycm9yIGluc3RhbmNlb2YgUmF0ZUxpbWl0RXJyb3IpIHtcbiAqICAgICAvLyBXYWl0IGFuZCByZXRyeVxuICogICAgIGF3YWl0IHNsZWVwKGVycm9yLnJldHJ5QWZ0ZXIpO1xuICogICAgIGF3YWl0IHRoaW5rSGl2ZS50cmFjZXMuY3JlYXRlKC4uLik7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUmF0ZUxpbWl0RXJyb3IgZXh0ZW5kcyBUaGlua0hpdmVFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSByZXRyeUFmdGVyOiBudW1iZXJcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBgUmF0ZSBsaW1pdCBleGNlZWRlZC4gUmV0cnkgYWZ0ZXIgJHtyZXRyeUFmdGVyfW1zYCxcbiAgICAgICdSQVRFX0xJTUlUX0VYQ0VFREVEJyxcbiAgICAgIDQyOSxcbiAgICAgIHsgcmV0cnlBZnRlciB9XG4gICAgKTtcbiAgICB0aGlzLm5hbWUgPSAnUmF0ZUxpbWl0RXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogSVAgd2hpdGVsaXN0IHZpb2xhdGlvbiBlcnJvclxuICovXG5leHBvcnQgY2xhc3MgSXBXaGl0ZWxpc3RFcnJvciBleHRlbmRzIFRoaW5rSGl2ZUVycm9yIHtcbiAgY29uc3RydWN0b3IoY2xpZW50SXA6IHN0cmluZykge1xuICAgIHN1cGVyKFxuICAgICAgJ1JlcXVlc3QgSVAgYWRkcmVzcyBpcyBub3QgYXV0aG9yaXplZCBmb3IgdGhpcyBBUEkga2V5JyxcbiAgICAgICdJUF9XSElURUxJU1RfVklPTEFUSU9OJyxcbiAgICAgIDQwMyxcbiAgICAgIHsgY2xpZW50SXAgfVxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gJ0lwV2hpdGVsaXN0RXJyb3InO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,70 @@
1
+ /**
2
+ * ThinkHive Guardrails SDK Module
3
+ * Real-time content scanning using centralized SDK configuration
4
+ */
5
+ export interface ScanRequest {
6
+ input?: string;
7
+ output?: string;
8
+ toolCall?: {
9
+ name: string;
10
+ arguments: Record<string, unknown>;
11
+ };
12
+ scanners?: string[];
13
+ policyId?: string;
14
+ config?: Record<string, Record<string, unknown>>;
15
+ options?: {
16
+ timeout?: number;
17
+ failOpen?: boolean;
18
+ shortCircuit?: boolean;
19
+ returnRedacted?: boolean;
20
+ };
21
+ }
22
+ export interface Finding {
23
+ type: string;
24
+ value: string;
25
+ start: number;
26
+ end: number;
27
+ confidence: number;
28
+ metadata?: Record<string, unknown>;
29
+ }
30
+ export interface ScannerResult {
31
+ scanner: string;
32
+ status: 'completed' | 'timeout' | 'error';
33
+ action: 'pass' | 'block' | 'redact' | 'flag';
34
+ findings: Finding[];
35
+ latencyMs: number;
36
+ sanitizedContent?: string;
37
+ }
38
+ export interface ScanResponse {
39
+ action: 'pass' | 'block' | 'redact' | 'flag';
40
+ actionReason?: string;
41
+ redactedInput?: string;
42
+ redactedOutput?: string;
43
+ results: Record<string, ScannerResult>;
44
+ metadata: {
45
+ scanId: string;
46
+ totalLatencyMs: number;
47
+ scannersExecuted: number;
48
+ scannersBlocked: number;
49
+ scannersFlagged: number;
50
+ scannersTimedOut: number;
51
+ cached: boolean;
52
+ };
53
+ }
54
+ /**
55
+ * Guardrails API client
56
+ * Real-time content scanning for PII, secrets, keywords, and more
57
+ */
58
+ export declare const guardrails: {
59
+ /**
60
+ * Scan content for policy violations
61
+ */
62
+ scan(request: ScanRequest): Promise<ScanResponse>;
63
+ /**
64
+ * List available scanners
65
+ */
66
+ listScanners(): Promise<Array<{
67
+ name: string;
68
+ description: string;
69
+ }>>;
70
+ };
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ /**
3
+ * ThinkHive Guardrails SDK Module
4
+ * Real-time content scanning using centralized SDK configuration
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.guardrails = void 0;
8
+ const client_1 = require("./core/client");
9
+ /**
10
+ * Guardrails API client
11
+ * Real-time content scanning for PII, secrets, keywords, and more
12
+ */
13
+ exports.guardrails = {
14
+ /**
15
+ * Scan content for policy violations
16
+ */
17
+ async scan(request) {
18
+ return (0, client_1.apiRequestWithData)('/v1/guardrails/scan', {
19
+ method: 'POST',
20
+ body: request,
21
+ rawPath: true,
22
+ });
23
+ },
24
+ /**
25
+ * List available scanners
26
+ */
27
+ async listScanners() {
28
+ const result = await (0, client_1.apiRequestWithData)('/v1/guardrails/scanners', {
29
+ rawPath: true,
30
+ });
31
+ return result.scanners;
32
+ },
33
+ };
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRyYWlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ndWFyZHJhaWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILDBDQUFtRDtBQW9EbkQ7OztHQUdHO0FBQ1UsUUFBQSxVQUFVLEdBQUc7SUFDeEI7O09BRUc7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQW9CO1FBQzdCLE9BQU8sSUFBQSwyQkFBa0IsRUFBZSxxQkFBcUIsRUFBRTtZQUM3RCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxPQUFPO1lBQ2IsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWTtRQUNoQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsMkJBQWtCLEVBQTZELHlCQUF5QixFQUFFO1lBQzdILE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlua0hpdmUgR3VhcmRyYWlscyBTREsgTW9kdWxlXG4gKiBSZWFsLXRpbWUgY29udGVudCBzY2FubmluZyB1c2luZyBjZW50cmFsaXplZCBTREsgY29uZmlndXJhdGlvblxuICovXG5cbmltcG9ydCB7IGFwaVJlcXVlc3RXaXRoRGF0YSB9IGZyb20gJy4vY29yZS9jbGllbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjYW5SZXF1ZXN0IHtcbiAgaW5wdXQ/OiBzdHJpbmc7XG4gIG91dHB1dD86IHN0cmluZztcbiAgdG9vbENhbGw/OiB7IG5hbWU6IHN0cmluZzsgYXJndW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9O1xuICBzY2FubmVycz86IHN0cmluZ1tdO1xuICBwb2xpY3lJZD86IHN0cmluZztcbiAgY29uZmlnPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBvcHRpb25zPzoge1xuICAgIHRpbWVvdXQ/OiBudW1iZXI7XG4gICAgZmFpbE9wZW4/OiBib29sZWFuO1xuICAgIHNob3J0Q2lyY3VpdD86IGJvb2xlYW47XG4gICAgcmV0dXJuUmVkYWN0ZWQ/OiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbmRpbmcge1xuICB0eXBlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHN0YXJ0OiBudW1iZXI7XG4gIGVuZDogbnVtYmVyO1xuICBjb25maWRlbmNlOiBudW1iZXI7XG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Nhbm5lclJlc3VsdCB7XG4gIHNjYW5uZXI6IHN0cmluZztcbiAgc3RhdHVzOiAnY29tcGxldGVkJyB8ICd0aW1lb3V0JyB8ICdlcnJvcic7XG4gIGFjdGlvbjogJ3Bhc3MnIHwgJ2Jsb2NrJyB8ICdyZWRhY3QnIHwgJ2ZsYWcnO1xuICBmaW5kaW5nczogRmluZGluZ1tdO1xuICBsYXRlbmN5TXM6IG51bWJlcjtcbiAgc2FuaXRpemVkQ29udGVudD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTY2FuUmVzcG9uc2Uge1xuICBhY3Rpb246ICdwYXNzJyB8ICdibG9jaycgfCAncmVkYWN0JyB8ICdmbGFnJztcbiAgYWN0aW9uUmVhc29uPzogc3RyaW5nO1xuICByZWRhY3RlZElucHV0Pzogc3RyaW5nO1xuICByZWRhY3RlZE91dHB1dD86IHN0cmluZztcbiAgcmVzdWx0czogUmVjb3JkPHN0cmluZywgU2Nhbm5lclJlc3VsdD47XG4gIG1ldGFkYXRhOiB7XG4gICAgc2NhbklkOiBzdHJpbmc7XG4gICAgdG90YWxMYXRlbmN5TXM6IG51bWJlcjtcbiAgICBzY2FubmVyc0V4ZWN1dGVkOiBudW1iZXI7XG4gICAgc2Nhbm5lcnNCbG9ja2VkOiBudW1iZXI7XG4gICAgc2Nhbm5lcnNGbGFnZ2VkOiBudW1iZXI7XG4gICAgc2Nhbm5lcnNUaW1lZE91dDogbnVtYmVyO1xuICAgIGNhY2hlZDogYm9vbGVhbjtcbiAgfTtcbn1cblxuLyoqXG4gKiBHdWFyZHJhaWxzIEFQSSBjbGllbnRcbiAqIFJlYWwtdGltZSBjb250ZW50IHNjYW5uaW5nIGZvciBQSUksIHNlY3JldHMsIGtleXdvcmRzLCBhbmQgbW9yZVxuICovXG5leHBvcnQgY29uc3QgZ3VhcmRyYWlscyA9IHtcbiAgLyoqXG4gICAqIFNjYW4gY29udGVudCBmb3IgcG9saWN5IHZpb2xhdGlvbnNcbiAgICovXG4gIGFzeW5jIHNjYW4ocmVxdWVzdDogU2NhblJlcXVlc3QpOiBQcm9taXNlPFNjYW5SZXNwb25zZT4ge1xuICAgIHJldHVybiBhcGlSZXF1ZXN0V2l0aERhdGE8U2NhblJlc3BvbnNlPignL3YxL2d1YXJkcmFpbHMvc2NhbicsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keTogcmVxdWVzdCxcbiAgICAgIHJhd1BhdGg6IHRydWUsXG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExpc3QgYXZhaWxhYmxlIHNjYW5uZXJzXG4gICAqL1xuICBhc3luYyBsaXN0U2Nhbm5lcnMoKTogUHJvbWlzZTxBcnJheTx7IG5hbWU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9Pj4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaVJlcXVlc3RXaXRoRGF0YTx7IHNjYW5uZXJzOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgZGVzY3JpcHRpb246IHN0cmluZyB9PiB9PignL3YxL2d1YXJkcmFpbHMvc2Nhbm5lcnMnLCB7XG4gICAgICByYXdQYXRoOiB0cnVlLFxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQuc2Nhbm5lcnM7XG4gIH0sXG59O1xuIl19