@grepr/cli 1.1.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.
- package/LICENSE +21 -0
- package/README.md +71 -0
- package/build/dist/commands/base-command.d.ts +13 -0
- package/build/dist/commands/base-command.d.ts.map +1 -0
- package/build/dist/commands/base-command.js +28 -0
- package/build/dist/commands/base-command.js.map +1 -0
- package/build/dist/commands/config-command.d.ts +19 -0
- package/build/dist/commands/config-command.d.ts.map +1 -0
- package/build/dist/commands/config-command.js +108 -0
- package/build/dist/commands/config-command.js.map +1 -0
- package/build/dist/commands/crud-command.d.ts +117 -0
- package/build/dist/commands/crud-command.d.ts.map +1 -0
- package/build/dist/commands/crud-command.js +264 -0
- package/build/dist/commands/crud-command.js.map +1 -0
- package/build/dist/commands/dataset-command.d.ts +45 -0
- package/build/dist/commands/dataset-command.d.ts.map +1 -0
- package/build/dist/commands/dataset-command.js +139 -0
- package/build/dist/commands/dataset-command.js.map +1 -0
- package/build/dist/commands/integration-command.d.ts +30 -0
- package/build/dist/commands/integration-command.d.ts.map +1 -0
- package/build/dist/commands/integration-command.js +80 -0
- package/build/dist/commands/integration-command.js.map +1 -0
- package/build/dist/commands/job-command.d.ts +92 -0
- package/build/dist/commands/job-command.d.ts.map +1 -0
- package/build/dist/commands/job-command.js +294 -0
- package/build/dist/commands/job-command.js.map +1 -0
- package/build/dist/commands/list-command.d.ts +69 -0
- package/build/dist/commands/list-command.d.ts.map +1 -0
- package/build/dist/commands/list-command.js +130 -0
- package/build/dist/commands/list-command.js.map +1 -0
- package/build/dist/commands/query-command.d.ts +20 -0
- package/build/dist/commands/query-command.d.ts.map +1 -0
- package/build/dist/commands/query-command.js +167 -0
- package/build/dist/commands/query-command.js.map +1 -0
- package/build/dist/grepr.d.ts +3 -0
- package/build/dist/grepr.d.ts.map +1 -0
- package/build/dist/grepr.js +155 -0
- package/build/dist/grepr.js.map +1 -0
- package/build/dist/lib/api-client-factory.d.ts +21 -0
- package/build/dist/lib/api-client-factory.d.ts.map +1 -0
- package/build/dist/lib/api-client-factory.js +23 -0
- package/build/dist/lib/api-client-factory.js.map +1 -0
- package/build/dist/lib/api-client.d.ts +2 -0
- package/build/dist/lib/api-client.d.ts.map +1 -0
- package/build/dist/lib/api-client.js +3 -0
- package/build/dist/lib/api-client.js.map +1 -0
- package/build/dist/lib/auth.d.ts +104 -0
- package/build/dist/lib/auth.d.ts.map +1 -0
- package/build/dist/lib/auth.js +312 -0
- package/build/dist/lib/auth.js.map +1 -0
- package/build/dist/lib/command-registry.d.ts +35 -0
- package/build/dist/lib/command-registry.d.ts.map +1 -0
- package/build/dist/lib/command-registry.js +33 -0
- package/build/dist/lib/command-registry.js.map +1 -0
- package/build/dist/lib/config.d.ts +40 -0
- package/build/dist/lib/config.d.ts.map +1 -0
- package/build/dist/lib/config.js +114 -0
- package/build/dist/lib/config.js.map +1 -0
- package/build/dist/lib/grepr-api-client.d.ts +216 -0
- package/build/dist/lib/grepr-api-client.d.ts.map +1 -0
- package/build/dist/lib/grepr-api-client.js +424 -0
- package/build/dist/lib/grepr-api-client.js.map +1 -0
- package/build/dist/lib/heartbeat.d.ts +17 -0
- package/build/dist/lib/heartbeat.d.ts.map +1 -0
- package/build/dist/lib/heartbeat.js +56 -0
- package/build/dist/lib/heartbeat.js.map +1 -0
- package/build/dist/lib/json-formatter.d.ts +135 -0
- package/build/dist/lib/json-formatter.d.ts.map +1 -0
- package/build/dist/lib/json-formatter.js +658 -0
- package/build/dist/lib/json-formatter.js.map +1 -0
- package/build/dist/lib/parser.d.ts +26 -0
- package/build/dist/lib/parser.d.ts.map +1 -0
- package/build/dist/lib/parser.js +95 -0
- package/build/dist/lib/parser.js.map +1 -0
- package/build/dist/lib/streaming-job-executor.d.ts +31 -0
- package/build/dist/lib/streaming-job-executor.d.ts.map +1 -0
- package/build/dist/lib/streaming-job-executor.js +281 -0
- package/build/dist/lib/streaming-job-executor.js.map +1 -0
- package/build/dist/lib/time-utils.d.ts +28 -0
- package/build/dist/lib/time-utils.d.ts.map +1 -0
- package/build/dist/lib/time-utils.js +87 -0
- package/build/dist/lib/time-utils.js.map +1 -0
- package/build/dist/openapi/openApiTypes.d.ts +10430 -0
- package/build/dist/openapi/openApiTypes.d.ts.map +1 -0
- package/build/dist/openapi/openApiTypes.js +571 -0
- package/build/dist/openapi/openApiTypes.js.map +1 -0
- package/build/dist/types.d.ts +168 -0
- package/build/dist/types.d.ts.map +1 -0
- package/build/dist/types.js +20 -0
- package/build/dist/types.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { paths, PathsV1JobsGetParametersQueryExecution, PathsV1JobsGetParametersQueryProcessing, PathsV1JobsGetParametersQueryState } from '../openapi/openApiTypes.js';
|
|
2
|
+
import { ApiClientConfig } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Main API client for the Grepr CLI using openapi-fetch.
|
|
5
|
+
* This follows the same patterns as the frontend API client.
|
|
6
|
+
*/
|
|
7
|
+
export declare class GreprApiClient {
|
|
8
|
+
private config;
|
|
9
|
+
private client;
|
|
10
|
+
private auth;
|
|
11
|
+
constructor(config: ApiClientConfig);
|
|
12
|
+
/**
|
|
13
|
+
* Get the underlying openapi-fetch client for direct access.
|
|
14
|
+
* This allows for full flexibility while maintaining type safety.
|
|
15
|
+
*/
|
|
16
|
+
getClient(): import("openapi-fetch").Client<paths, `${string}/${string}`>;
|
|
17
|
+
listJobs(params?: {
|
|
18
|
+
since?: string;
|
|
19
|
+
execution?: PathsV1JobsGetParametersQueryExecution;
|
|
20
|
+
processing?: PathsV1JobsGetParametersQueryProcessing;
|
|
21
|
+
latest?: boolean;
|
|
22
|
+
state?: PathsV1JobsGetParametersQueryState[];
|
|
23
|
+
name?: string[];
|
|
24
|
+
id?: string[];
|
|
25
|
+
}): Promise<{
|
|
26
|
+
items?: import("../openapi/openApiTypes.js").components["schemas"]["ReadJob"][];
|
|
27
|
+
} | undefined>;
|
|
28
|
+
getJob(id: string, version?: number, resolved?: boolean): Promise<{
|
|
29
|
+
id: string;
|
|
30
|
+
version: number;
|
|
31
|
+
organizationId: string;
|
|
32
|
+
name: string;
|
|
33
|
+
execution: PathsV1JobsGetParametersQueryExecution;
|
|
34
|
+
processing: PathsV1JobsGetParametersQueryProcessing;
|
|
35
|
+
state: PathsV1JobsGetParametersQueryState;
|
|
36
|
+
desiredState: PathsV1JobsGetParametersQueryState;
|
|
37
|
+
jobGraph: import("../openapi/openApiTypes.js").components["schemas"]["GreprJobGraph"];
|
|
38
|
+
tags: {
|
|
39
|
+
[key: string]: string;
|
|
40
|
+
};
|
|
41
|
+
createdAt: string;
|
|
42
|
+
updatedAt: string;
|
|
43
|
+
startedAt?: string;
|
|
44
|
+
endedAt?: string;
|
|
45
|
+
greprVersion?: string;
|
|
46
|
+
teamIds?: string[];
|
|
47
|
+
} | undefined>;
|
|
48
|
+
createAsyncJob(job: any): Promise<{
|
|
49
|
+
id: string;
|
|
50
|
+
version: number;
|
|
51
|
+
organizationId: string;
|
|
52
|
+
name: string;
|
|
53
|
+
execution: PathsV1JobsGetParametersQueryExecution;
|
|
54
|
+
processing: PathsV1JobsGetParametersQueryProcessing;
|
|
55
|
+
state: PathsV1JobsGetParametersQueryState;
|
|
56
|
+
desiredState: PathsV1JobsGetParametersQueryState;
|
|
57
|
+
jobGraph: import("../openapi/openApiTypes.js").components["schemas"]["GreprJobGraph"];
|
|
58
|
+
tags: {
|
|
59
|
+
[key: string]: string;
|
|
60
|
+
};
|
|
61
|
+
createdAt: string;
|
|
62
|
+
updatedAt: string;
|
|
63
|
+
startedAt?: string;
|
|
64
|
+
endedAt?: string;
|
|
65
|
+
greprVersion?: string;
|
|
66
|
+
teamIds?: string[];
|
|
67
|
+
} | undefined>;
|
|
68
|
+
updateJob(id: string, job: any, rollbackEnabled?: boolean): Promise<undefined>;
|
|
69
|
+
deleteJob(id: string): Promise<void>;
|
|
70
|
+
listDatasets(): Promise<{
|
|
71
|
+
id: string;
|
|
72
|
+
name: string;
|
|
73
|
+
organizationId: string;
|
|
74
|
+
integrationId: string;
|
|
75
|
+
teamIds?: string[];
|
|
76
|
+
}[]>;
|
|
77
|
+
getDataset(id: string): Promise<{
|
|
78
|
+
id: string;
|
|
79
|
+
name: string;
|
|
80
|
+
organizationId: string;
|
|
81
|
+
integrationId: string;
|
|
82
|
+
teamIds?: string[];
|
|
83
|
+
} | undefined>;
|
|
84
|
+
createDataset(dataset: any): Promise<{
|
|
85
|
+
id: string;
|
|
86
|
+
name: string;
|
|
87
|
+
organizationId: string;
|
|
88
|
+
integrationId: string;
|
|
89
|
+
teamIds?: string[];
|
|
90
|
+
}>;
|
|
91
|
+
updateDataset(id: string, dataset: any): Promise<{
|
|
92
|
+
id: string;
|
|
93
|
+
name: string;
|
|
94
|
+
organizationId: string;
|
|
95
|
+
integrationId: string;
|
|
96
|
+
teamIds?: string[];
|
|
97
|
+
} | undefined>;
|
|
98
|
+
deleteDataset(id: string, deleteFiles?: boolean): Promise<void>;
|
|
99
|
+
listDatadogIntegrations(): Promise<{
|
|
100
|
+
items?: import("../openapi/openApiTypes.js").components["schemas"]["ReadDatadog"][];
|
|
101
|
+
} | undefined>;
|
|
102
|
+
getDatadogIntegration(id: string): Promise<{
|
|
103
|
+
name: string;
|
|
104
|
+
version: number;
|
|
105
|
+
payload: import("../openapi/openApiTypes.js").components["schemas"]["Datadog"];
|
|
106
|
+
teamIds?: string[];
|
|
107
|
+
id: string;
|
|
108
|
+
organizationId: string;
|
|
109
|
+
jobIds: string[];
|
|
110
|
+
readonly createdAt: string;
|
|
111
|
+
readonly updatedAt: string;
|
|
112
|
+
type: import("../openapi/openApiTypes.js").ReadDatadogType;
|
|
113
|
+
} | undefined>;
|
|
114
|
+
listDataWarehouseIntegrations(): Promise<{
|
|
115
|
+
items?: import("../openapi/openApiTypes.js").components["schemas"]["ReadDataWarehouse"][];
|
|
116
|
+
} | undefined>;
|
|
117
|
+
getDataWarehouseIntegration(id: string): Promise<{
|
|
118
|
+
name: string;
|
|
119
|
+
version: number;
|
|
120
|
+
payload: import("../openapi/openApiTypes.js").components["schemas"]["DataWarehouse"];
|
|
121
|
+
teamIds?: string[];
|
|
122
|
+
id: string;
|
|
123
|
+
organizationId: string;
|
|
124
|
+
jobIds: string[];
|
|
125
|
+
readonly createdAt: string;
|
|
126
|
+
readonly updatedAt: string;
|
|
127
|
+
type: import("../openapi/openApiTypes.js").ReadDataWarehouseType;
|
|
128
|
+
} | undefined>;
|
|
129
|
+
listS3DataWarehouseIntegrations(): Promise<{
|
|
130
|
+
items?: import("../openapi/openApiTypes.js").components["schemas"]["ReadS3DataWarehouse"][];
|
|
131
|
+
} | undefined>;
|
|
132
|
+
getS3DataWarehouseIntegration(id: string): Promise<{
|
|
133
|
+
name: string;
|
|
134
|
+
version: number;
|
|
135
|
+
payload: import("../openapi/openApiTypes.js").components["schemas"]["S3DataWarehouse"];
|
|
136
|
+
teamIds?: string[];
|
|
137
|
+
id: string;
|
|
138
|
+
organizationId: string;
|
|
139
|
+
jobIds: string[];
|
|
140
|
+
readonly createdAt: string;
|
|
141
|
+
readonly updatedAt: string;
|
|
142
|
+
type: import("../openapi/openApiTypes.js").ReadS3DataWarehouseType;
|
|
143
|
+
} | undefined>;
|
|
144
|
+
listNewRelicIntegrations(): Promise<{
|
|
145
|
+
items?: import("../openapi/openApiTypes.js").components["schemas"]["ReadNewRelic"][];
|
|
146
|
+
} | undefined>;
|
|
147
|
+
getNewRelicIntegration(id: string): Promise<{
|
|
148
|
+
name: string;
|
|
149
|
+
version: number;
|
|
150
|
+
payload: import("../openapi/openApiTypes.js").components["schemas"]["NewRelic"];
|
|
151
|
+
teamIds?: string[];
|
|
152
|
+
id: string;
|
|
153
|
+
organizationId: string;
|
|
154
|
+
jobIds: string[];
|
|
155
|
+
readonly createdAt: string;
|
|
156
|
+
readonly updatedAt: string;
|
|
157
|
+
type: import("../openapi/openApiTypes.js").ReadNewRelicType;
|
|
158
|
+
} | undefined>;
|
|
159
|
+
listOtlpIntegrations(): Promise<{
|
|
160
|
+
items?: import("../openapi/openApiTypes.js").components["schemas"]["ReadOtlp"][];
|
|
161
|
+
} | undefined>;
|
|
162
|
+
getOtlpIntegration(id: string): Promise<{
|
|
163
|
+
name: string;
|
|
164
|
+
version: number;
|
|
165
|
+
payload: import("../openapi/openApiTypes.js").components["schemas"]["Otlp"];
|
|
166
|
+
teamIds?: string[];
|
|
167
|
+
id: string;
|
|
168
|
+
organizationId: string;
|
|
169
|
+
jobIds: string[];
|
|
170
|
+
readonly createdAt: string;
|
|
171
|
+
readonly updatedAt: string;
|
|
172
|
+
type: import("../openapi/openApiTypes.js").ReadOtlpType;
|
|
173
|
+
} | undefined>;
|
|
174
|
+
listSplunkIntegrations(): Promise<{
|
|
175
|
+
items?: import("../openapi/openApiTypes.js").components["schemas"]["ReadSplunk"][];
|
|
176
|
+
} | undefined>;
|
|
177
|
+
getSplunkIntegration(id: string): Promise<{
|
|
178
|
+
name: string;
|
|
179
|
+
version: number;
|
|
180
|
+
payload: import("../openapi/openApiTypes.js").components["schemas"]["Splunk"];
|
|
181
|
+
teamIds?: string[];
|
|
182
|
+
id: string;
|
|
183
|
+
organizationId: string;
|
|
184
|
+
jobIds: string[];
|
|
185
|
+
readonly createdAt: string;
|
|
186
|
+
readonly updatedAt: string;
|
|
187
|
+
type: import("../openapi/openApiTypes.js").ReadSplunkType;
|
|
188
|
+
} | undefined>;
|
|
189
|
+
listSumoIntegrations(): Promise<{
|
|
190
|
+
items?: import("../openapi/openApiTypes.js").components["schemas"]["ReadSumo"][];
|
|
191
|
+
} | undefined>;
|
|
192
|
+
getSumoIntegration(id: string): Promise<{
|
|
193
|
+
name: string;
|
|
194
|
+
version: number;
|
|
195
|
+
payload: import("../openapi/openApiTypes.js").components["schemas"]["Sumo"];
|
|
196
|
+
teamIds?: string[];
|
|
197
|
+
id: string;
|
|
198
|
+
organizationId: string;
|
|
199
|
+
jobIds: string[];
|
|
200
|
+
readonly createdAt: string;
|
|
201
|
+
readonly updatedAt: string;
|
|
202
|
+
type: import("../openapi/openApiTypes.js").ReadSumoType;
|
|
203
|
+
} | undefined>;
|
|
204
|
+
getAllIntegrations(): Promise<Array<{
|
|
205
|
+
type: string;
|
|
206
|
+
items: any[];
|
|
207
|
+
}>>;
|
|
208
|
+
getIntegrationById(id: string): Promise<{
|
|
209
|
+
type: string;
|
|
210
|
+
integration: any;
|
|
211
|
+
} | null>;
|
|
212
|
+
sendHeartbeat(heartbeatToken: string): Promise<void>;
|
|
213
|
+
lookupDataset(nameOrId: string): Promise<any>;
|
|
214
|
+
submitSyncJob(jobDefinition: any): Promise<NodeJS.ReadableStream>;
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=grepr-api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grepr-api-client.d.ts","sourceRoot":"","sources":["../../../src/main/typescript/lib/grepr-api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,424 @@
|
|
|
1
|
+
// CLI API client using openapi-fetch with the same patterns as the frontend
|
|
2
|
+
import createClient from 'openapi-fetch';
|
|
3
|
+
import { HeaderAuth, GreprAuth } from './auth.js';
|
|
4
|
+
/**
|
|
5
|
+
* Main API client for the Grepr CLI using openapi-fetch.
|
|
6
|
+
* This follows the same patterns as the frontend API client.
|
|
7
|
+
*/
|
|
8
|
+
export class GreprApiClient {
|
|
9
|
+
config;
|
|
10
|
+
client;
|
|
11
|
+
auth;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
// Create the fetch client with base configuration
|
|
15
|
+
this.client = createClient({
|
|
16
|
+
baseUrl: config.apiBaseUrl,
|
|
17
|
+
});
|
|
18
|
+
// Set up authentication
|
|
19
|
+
if (config.authMethod === 'header') {
|
|
20
|
+
this.auth = new HeaderAuth(config);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
this.auth = new GreprAuth(config);
|
|
24
|
+
}
|
|
25
|
+
// Add auth middleware
|
|
26
|
+
// noinspection JSUnusedGlobalSymbols
|
|
27
|
+
this.client.use({
|
|
28
|
+
onRequest: async ({ request }) => {
|
|
29
|
+
const headers = await this.auth.getAuthHeaders();
|
|
30
|
+
Object.entries(headers).forEach(([key, value]) => {
|
|
31
|
+
request.headers.set(key, value);
|
|
32
|
+
});
|
|
33
|
+
if (config.debug) {
|
|
34
|
+
console.log('Request:', request.method, request.url);
|
|
35
|
+
console.log('Headers:', Object.fromEntries(request.headers.entries()));
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
onResponse: async ({ response }) => {
|
|
39
|
+
if (config.debug) {
|
|
40
|
+
console.log('Response:', response.status, response.url);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get the underlying openapi-fetch client for direct access.
|
|
47
|
+
* This allows for full flexibility while maintaining type safety.
|
|
48
|
+
*/
|
|
49
|
+
getClient() {
|
|
50
|
+
return this.client;
|
|
51
|
+
}
|
|
52
|
+
// Job Management Methods
|
|
53
|
+
async listJobs(params) {
|
|
54
|
+
const { data, error } = await this.client.GET('/v1/jobs', {
|
|
55
|
+
...(params && {
|
|
56
|
+
params: {
|
|
57
|
+
query: params,
|
|
58
|
+
}
|
|
59
|
+
})
|
|
60
|
+
});
|
|
61
|
+
if (error) {
|
|
62
|
+
throw new Error(`Failed to list jobs: ${JSON.stringify(error)}`);
|
|
63
|
+
}
|
|
64
|
+
return data;
|
|
65
|
+
}
|
|
66
|
+
async getJob(id, version, resolved) {
|
|
67
|
+
const queryParams = {};
|
|
68
|
+
if (version !== undefined)
|
|
69
|
+
queryParams.version = version;
|
|
70
|
+
if (resolved !== undefined)
|
|
71
|
+
queryParams.resolved = resolved;
|
|
72
|
+
const { data, error } = await this.client.GET('/v1/jobs/{id}', {
|
|
73
|
+
params: {
|
|
74
|
+
path: { id },
|
|
75
|
+
...(Object.keys(queryParams).length > 0 && { query: queryParams })
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
if (error) {
|
|
79
|
+
throw new Error(`Failed to get job ${id}: ${JSON.stringify(error)}`);
|
|
80
|
+
}
|
|
81
|
+
return data;
|
|
82
|
+
}
|
|
83
|
+
async createAsyncJob(job) {
|
|
84
|
+
const { data, error } = await this.client.POST('/v1/jobs/async', {
|
|
85
|
+
body: job,
|
|
86
|
+
});
|
|
87
|
+
if (error) {
|
|
88
|
+
throw new Error(`Failed to create job: ${JSON.stringify(error)}`);
|
|
89
|
+
}
|
|
90
|
+
return data;
|
|
91
|
+
}
|
|
92
|
+
async updateJob(id, job, rollbackEnabled = false) {
|
|
93
|
+
const { data, error } = await this.client.PUT('/v1/jobs/{id}', {
|
|
94
|
+
params: {
|
|
95
|
+
path: { id },
|
|
96
|
+
query: { rollbackEnabled },
|
|
97
|
+
},
|
|
98
|
+
body: job,
|
|
99
|
+
});
|
|
100
|
+
if (error) {
|
|
101
|
+
throw new Error(`Failed to update job ${id}: ${JSON.stringify(error)}`);
|
|
102
|
+
}
|
|
103
|
+
return data;
|
|
104
|
+
}
|
|
105
|
+
async deleteJob(id) {
|
|
106
|
+
const { error } = await this.client.DELETE('/v1/jobs/{id}', {
|
|
107
|
+
params: {
|
|
108
|
+
path: { id },
|
|
109
|
+
},
|
|
110
|
+
});
|
|
111
|
+
if (error) {
|
|
112
|
+
throw new Error(`Failed to delete job ${id}: ${JSON.stringify(error)}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Dataset Management Methods
|
|
116
|
+
async listDatasets() {
|
|
117
|
+
const { data, error } = await this.client.GET('/v1/datasets');
|
|
118
|
+
if (error) {
|
|
119
|
+
throw new Error(`Failed to list datasets: ${JSON.stringify(error)}`);
|
|
120
|
+
}
|
|
121
|
+
return data;
|
|
122
|
+
}
|
|
123
|
+
async getDataset(id) {
|
|
124
|
+
const { data, error } = await this.client.GET('/v1/datasets/{id}', {
|
|
125
|
+
params: {
|
|
126
|
+
path: { id },
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
if (error) {
|
|
130
|
+
throw new Error(`Failed to get dataset ${id}: ${JSON.stringify(error)}`);
|
|
131
|
+
}
|
|
132
|
+
return data;
|
|
133
|
+
}
|
|
134
|
+
async createDataset(dataset) {
|
|
135
|
+
const { data, error } = await this.client.POST('/v1/datasets', {
|
|
136
|
+
body: dataset,
|
|
137
|
+
});
|
|
138
|
+
if (error) {
|
|
139
|
+
throw new Error(`Failed to create dataset: ${JSON.stringify(error)}`);
|
|
140
|
+
}
|
|
141
|
+
return data;
|
|
142
|
+
}
|
|
143
|
+
async updateDataset(id, dataset) {
|
|
144
|
+
const { data, error } = await this.client.PUT('/v1/datasets/{id}', {
|
|
145
|
+
params: {
|
|
146
|
+
path: { id },
|
|
147
|
+
},
|
|
148
|
+
body: dataset,
|
|
149
|
+
});
|
|
150
|
+
if (error) {
|
|
151
|
+
throw new Error(`Failed to update dataset ${id}: ${JSON.stringify(error)}`);
|
|
152
|
+
}
|
|
153
|
+
return data;
|
|
154
|
+
}
|
|
155
|
+
async deleteDataset(id, deleteFiles = false) {
|
|
156
|
+
const { error } = await this.client.DELETE('/v1/datasets/{id}', {
|
|
157
|
+
params: {
|
|
158
|
+
path: { id },
|
|
159
|
+
query: { deleteFiles },
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
if (error) {
|
|
163
|
+
throw new Error(`Failed to delete dataset ${id}: ${JSON.stringify(error)}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Integration Management Methods
|
|
167
|
+
// Datadog Integration Methods
|
|
168
|
+
async listDatadogIntegrations() {
|
|
169
|
+
const { data, error } = await this.client.GET('/v1/integrations/datadog');
|
|
170
|
+
if (error) {
|
|
171
|
+
throw new Error(`Failed to list Datadog integrations: ${JSON.stringify(error)}`);
|
|
172
|
+
}
|
|
173
|
+
return data;
|
|
174
|
+
}
|
|
175
|
+
async getDatadogIntegration(id) {
|
|
176
|
+
const { data, error } = await this.client.GET('/v1/integrations/datadog/{id}', {
|
|
177
|
+
params: {
|
|
178
|
+
path: { id },
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
if (error) {
|
|
182
|
+
throw new Error(`Failed to get Datadog integration ${id}: ${JSON.stringify(error)}`);
|
|
183
|
+
}
|
|
184
|
+
return data;
|
|
185
|
+
}
|
|
186
|
+
// Data Warehouse Integration Methods
|
|
187
|
+
async listDataWarehouseIntegrations() {
|
|
188
|
+
const { data, error } = await this.client.GET('/v1/integrations/data-warehouse');
|
|
189
|
+
if (error) {
|
|
190
|
+
throw new Error(`Failed to list Data Warehouse integrations: ${JSON.stringify(error)}`);
|
|
191
|
+
}
|
|
192
|
+
return data;
|
|
193
|
+
}
|
|
194
|
+
async getDataWarehouseIntegration(id) {
|
|
195
|
+
const { data, error } = await this.client.GET('/v1/integrations/data-warehouse/{id}', {
|
|
196
|
+
params: {
|
|
197
|
+
path: { id },
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
if (error) {
|
|
201
|
+
throw new Error(`Failed to get Data Warehouse integration ${id}: ${JSON.stringify(error)}`);
|
|
202
|
+
}
|
|
203
|
+
return data;
|
|
204
|
+
}
|
|
205
|
+
// S3 Data Warehouse Integration Methods
|
|
206
|
+
async listS3DataWarehouseIntegrations() {
|
|
207
|
+
const { data, error } = await this.client.GET('/v1/integrations/s3-data-warehouse');
|
|
208
|
+
if (error) {
|
|
209
|
+
throw new Error(`Failed to list S3 Data Warehouse integrations: ${JSON.stringify(error)}`);
|
|
210
|
+
}
|
|
211
|
+
return data;
|
|
212
|
+
}
|
|
213
|
+
async getS3DataWarehouseIntegration(id) {
|
|
214
|
+
const { data, error } = await this.client.GET('/v1/integrations/s3-data-warehouse/{id}', {
|
|
215
|
+
params: {
|
|
216
|
+
path: { id },
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
if (error) {
|
|
220
|
+
throw new Error(`Failed to get S3 Data Warehouse integration ${id}: ${JSON.stringify(error)}`);
|
|
221
|
+
}
|
|
222
|
+
return data;
|
|
223
|
+
}
|
|
224
|
+
// New Relic Integration Methods
|
|
225
|
+
async listNewRelicIntegrations() {
|
|
226
|
+
const { data, error } = await this.client.GET('/v1/integrations/newrelic');
|
|
227
|
+
if (error) {
|
|
228
|
+
throw new Error(`Failed to list New Relic integrations: ${JSON.stringify(error)}`);
|
|
229
|
+
}
|
|
230
|
+
return data;
|
|
231
|
+
}
|
|
232
|
+
async getNewRelicIntegration(id) {
|
|
233
|
+
const { data, error } = await this.client.GET('/v1/integrations/newrelic/{id}', {
|
|
234
|
+
params: {
|
|
235
|
+
path: { id },
|
|
236
|
+
},
|
|
237
|
+
});
|
|
238
|
+
if (error) {
|
|
239
|
+
throw new Error(`Failed to get New Relic integration ${id}: ${JSON.stringify(error)}`);
|
|
240
|
+
}
|
|
241
|
+
return data;
|
|
242
|
+
}
|
|
243
|
+
// OTLP Integration Methods
|
|
244
|
+
async listOtlpIntegrations() {
|
|
245
|
+
const { data, error } = await this.client.GET('/v1/integrations/otlp');
|
|
246
|
+
if (error) {
|
|
247
|
+
throw new Error(`Failed to list OTLP integrations: ${JSON.stringify(error)}`);
|
|
248
|
+
}
|
|
249
|
+
return data;
|
|
250
|
+
}
|
|
251
|
+
async getOtlpIntegration(id) {
|
|
252
|
+
const { data, error } = await this.client.GET('/v1/integrations/otlp/{id}', {
|
|
253
|
+
params: {
|
|
254
|
+
path: { id },
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
if (error) {
|
|
258
|
+
throw new Error(`Failed to get OTLP integration ${id}: ${JSON.stringify(error)}`);
|
|
259
|
+
}
|
|
260
|
+
return data;
|
|
261
|
+
}
|
|
262
|
+
// Splunk Integration Methods
|
|
263
|
+
async listSplunkIntegrations() {
|
|
264
|
+
const { data, error } = await this.client.GET('/v1/integrations/splunk');
|
|
265
|
+
if (error) {
|
|
266
|
+
throw new Error(`Failed to list Splunk integrations: ${JSON.stringify(error)}`);
|
|
267
|
+
}
|
|
268
|
+
return data;
|
|
269
|
+
}
|
|
270
|
+
async getSplunkIntegration(id) {
|
|
271
|
+
const { data, error } = await this.client.GET('/v1/integrations/splunk/{id}', {
|
|
272
|
+
params: {
|
|
273
|
+
path: { id },
|
|
274
|
+
},
|
|
275
|
+
});
|
|
276
|
+
if (error) {
|
|
277
|
+
throw new Error(`Failed to get Splunk integration ${id}: ${JSON.stringify(error)}`);
|
|
278
|
+
}
|
|
279
|
+
return data;
|
|
280
|
+
}
|
|
281
|
+
// Sumo Logic Integration Methods
|
|
282
|
+
async listSumoIntegrations() {
|
|
283
|
+
const { data, error } = await this.client.GET('/v1/integrations/sumo');
|
|
284
|
+
if (error) {
|
|
285
|
+
throw new Error(`Failed to list Sumo Logic integrations: ${JSON.stringify(error)}`);
|
|
286
|
+
}
|
|
287
|
+
return data;
|
|
288
|
+
}
|
|
289
|
+
async getSumoIntegration(id) {
|
|
290
|
+
const { data, error } = await this.client.GET('/v1/integrations/sumo/{id}', {
|
|
291
|
+
params: {
|
|
292
|
+
path: { id },
|
|
293
|
+
},
|
|
294
|
+
});
|
|
295
|
+
if (error) {
|
|
296
|
+
throw new Error(`Failed to get Sumo Logic integration ${id}: ${JSON.stringify(error)}`);
|
|
297
|
+
}
|
|
298
|
+
return data;
|
|
299
|
+
}
|
|
300
|
+
// Helper methods for generic integration operations
|
|
301
|
+
async getAllIntegrations() {
|
|
302
|
+
const integrationTypes = [
|
|
303
|
+
{ type: 'datadog', listMethod: this.listDatadogIntegrations.bind(this) },
|
|
304
|
+
{ type: 'data-warehouse', listMethod: this.listDataWarehouseIntegrations.bind(this) },
|
|
305
|
+
{ type: 's3-data-warehouse', listMethod: this.listS3DataWarehouseIntegrations.bind(this) },
|
|
306
|
+
{ type: 'newrelic', listMethod: this.listNewRelicIntegrations.bind(this) },
|
|
307
|
+
{ type: 'otlp', listMethod: this.listOtlpIntegrations.bind(this) },
|
|
308
|
+
{ type: 'splunk', listMethod: this.listSplunkIntegrations.bind(this) },
|
|
309
|
+
{ type: 'sumo', listMethod: this.listSumoIntegrations.bind(this) },
|
|
310
|
+
];
|
|
311
|
+
const results = [];
|
|
312
|
+
for (const { type, listMethod } of integrationTypes) {
|
|
313
|
+
try {
|
|
314
|
+
const data = await listMethod();
|
|
315
|
+
results.push({ type, items: data?.items || [] });
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
// Skip types that fail (might not be configured or accessible)
|
|
319
|
+
console.warn(`Warning: Could not list integrations for type "${type}": ${error.message}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
return results;
|
|
323
|
+
}
|
|
324
|
+
async getIntegrationById(id) {
|
|
325
|
+
const getMethods = [
|
|
326
|
+
{ type: 'datadog', getMethod: this.getDatadogIntegration.bind(this) },
|
|
327
|
+
{ type: 'data-warehouse', getMethod: this.getDataWarehouseIntegration.bind(this) },
|
|
328
|
+
{ type: 's3-data-warehouse', getMethod: this.getS3DataWarehouseIntegration.bind(this) },
|
|
329
|
+
{ type: 'newrelic', getMethod: this.getNewRelicIntegration.bind(this) },
|
|
330
|
+
{ type: 'otlp', getMethod: this.getOtlpIntegration.bind(this) },
|
|
331
|
+
{ type: 'splunk', getMethod: this.getSplunkIntegration.bind(this) },
|
|
332
|
+
{ type: 'sumo', getMethod: this.getSumoIntegration.bind(this) },
|
|
333
|
+
];
|
|
334
|
+
for (const { type, getMethod } of getMethods) {
|
|
335
|
+
try {
|
|
336
|
+
const integration = await getMethod(id);
|
|
337
|
+
if (integration) {
|
|
338
|
+
return { type, integration };
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
// Continue trying other types
|
|
343
|
+
if (this.config.debug) {
|
|
344
|
+
console.log(`Info: Integration with ID "${id}" not found in type "${type}". Trying next type.`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
350
|
+
// Legacy methods for backward compatibility
|
|
351
|
+
async sendHeartbeat(heartbeatToken) {
|
|
352
|
+
const { error } = await this.client.POST('/v1/jobs/sync/heartbeat', {
|
|
353
|
+
body: heartbeatToken,
|
|
354
|
+
});
|
|
355
|
+
if (error) {
|
|
356
|
+
throw new Error(`Failed to send heartbeat: ${JSON.stringify(error)}`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
async lookupDataset(nameOrId) {
|
|
360
|
+
// If the input looks like a dataset ID, try direct lookup first
|
|
361
|
+
if (/^[a-zA-Z0-9_-]+$/.test(nameOrId) && nameOrId.length > 5) {
|
|
362
|
+
try {
|
|
363
|
+
return await this.getDataset(nameOrId);
|
|
364
|
+
}
|
|
365
|
+
catch (error) {
|
|
366
|
+
// If direct lookup fails, fall through to name search
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// Search by name
|
|
370
|
+
const datasets = await this.listDatasets();
|
|
371
|
+
const matchingDataset = datasets.find((dataset) => dataset.name === nameOrId);
|
|
372
|
+
if (!matchingDataset) {
|
|
373
|
+
throw new Error(`Dataset not found: "${nameOrId}". Available datasets: ${datasets.map((d) => d.name).join(', ')}`);
|
|
374
|
+
}
|
|
375
|
+
return matchingDataset;
|
|
376
|
+
}
|
|
377
|
+
// Sync job submission for the existing sync command - using fetch directly due to streaming
|
|
378
|
+
async submitSyncJob(jobDefinition) {
|
|
379
|
+
const baseUrl = this.auth.config.apiBaseUrl;
|
|
380
|
+
const response = await fetch(`${baseUrl}/v1/jobs/sync`, {
|
|
381
|
+
method: 'POST',
|
|
382
|
+
headers: {
|
|
383
|
+
'Content-Type': 'application/json',
|
|
384
|
+
...(await this.auth.getAuthHeaders()),
|
|
385
|
+
},
|
|
386
|
+
body: JSON.stringify(jobDefinition),
|
|
387
|
+
});
|
|
388
|
+
if (!response.ok) {
|
|
389
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
390
|
+
}
|
|
391
|
+
if (!response.body) {
|
|
392
|
+
throw new Error('No response body received');
|
|
393
|
+
}
|
|
394
|
+
// Convert Web ReadableStream to Node.js ReadableStream
|
|
395
|
+
const webStream = response.body;
|
|
396
|
+
const { Readable } = await import('stream');
|
|
397
|
+
// Create a Node.js readable stream from the web stream
|
|
398
|
+
const nodeStream = new Readable({
|
|
399
|
+
read() {
|
|
400
|
+
// This will be handled by the async conversion
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
// Convert the web stream to node stream manually
|
|
404
|
+
const reader = webStream.getReader();
|
|
405
|
+
const pump = async () => {
|
|
406
|
+
try {
|
|
407
|
+
while (true) {
|
|
408
|
+
const { done, value } = await reader.read();
|
|
409
|
+
if (done) {
|
|
410
|
+
nodeStream.push(null); // End the stream
|
|
411
|
+
break;
|
|
412
|
+
}
|
|
413
|
+
nodeStream.push(Buffer.from(value));
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
catch (error) {
|
|
417
|
+
nodeStream.destroy(error);
|
|
418
|
+
}
|
|
419
|
+
};
|
|
420
|
+
pump();
|
|
421
|
+
return nodeStream;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
//# sourceMappingURL=grepr-api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grepr-api-client.js","sourceRoot":"","sources":["../../../src/main/typescript/lib/grepr-api-client.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGlD;;;GAGG;AACH,MAAM,OAAO,cAAc;IACjB,MAAM,CAAkB;IACxB,MAAM,CAAyC;IAC/C,IAAI,CAAyB;IAErC,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,kDAAkD;QAClD,IAAI,CAAC,MAAM,GAAG,YAAY,CAAQ;YAChC,OAAO,EAAE,MAAM,CAAC,UAAU;SAC3B,CAAC,CAAC;QAEH,wBAAwB;QACxB,IAAI,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QAED,sBAAsB;QACtB,qCAAqC;QACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YACd,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;gBAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACjD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC/C,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;oBACrD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACzE,CAAC;YACH,CAAC;YAED,UAAU,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACjC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,yBAAyB;IACzB,KAAK,CAAC,QAAQ,CAAC,MAQd;QACC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE;YACxD,GAAG,CAAC,MAAM,IAAI;gBACZ,MAAM,EAAE;oBACN,KAAK,EAAE,MAAM;iBACd;aACF,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,OAAgB,EAAE,QAAkB;QAC3D,MAAM,WAAW,GAA6C,EAAE,CAAC;QACjE,IAAI,OAAO,KAAK,SAAS;YAAE,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC;QACzD,IAAI,QAAQ,KAAK,SAAS;YAAE,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE5D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE;YAC7D,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;gBACZ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;aACnE;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qBAAqB,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAQ;QAC3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC/D,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,GAAQ,EAAE,eAAe,GAAG,KAAK;QAC3D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE;YAC7D,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;gBACZ,KAAK,EAAE,EAAE,eAAe,EAAE;aAC3B;YACD,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAU;QACxB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE;YAC1D,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,YAAY;QAChB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE9D,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE;YACjE,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAY;QAC9B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;YAC7D,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,OAAY;QAC1C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE;YACjE,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;aACb;YACD,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,WAAW,GAAG,KAAK;QACjD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE;YAC9D,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;gBACZ,KAAK,EAAE,EAAE,WAAW,EAAE;aACvB;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,iCAAiC;IAEjC,8BAA8B;IAC9B,KAAK,CAAC,uBAAuB;QAC3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAE1E,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,EAAU;QACpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE;YAC7E,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qCAAqC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,6BAA6B;QACjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAEjF,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,EAAU;QAC1C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sCAAsC,EAAE;YACpF,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,4CAA4C,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,+BAA+B;QACnC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAEpF,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,kDAAkD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,6BAA6B,CAAC,EAAU;QAC5C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,EAAE;YACvF,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,+CAA+C,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gCAAgC;IAChC,KAAK,CAAC,wBAAwB;QAC5B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAE3E,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,EAAU;QACrC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,EAAE;YAC9E,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,uCAAuC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,oBAAoB;QACxB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAEvE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAU;QACjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE;YAC1E,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,kCAAkC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,sBAAsB;QAC1B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAEzE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EAAU;QACnC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,EAAE;YAC5E,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iCAAiC;IACjC,KAAK,CAAC,oBAAoB;QACxB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAEvE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAU;QACjC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE;YAC1E,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE,EAAE,EAAE;aACb;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,wCAAwC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,kBAAkB;QACtB,MAAM,gBAAgB,GAAG;YACvB,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxE,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACrF,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1F,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1E,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAClE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACnE,CAAC;QAEF,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,gBAAgB,EAAE,CAAC;YACpD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,UAAU,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,+DAA+D;gBAC/D,OAAO,CAAC,IAAI,CAAC,kDAAkD,IAAI,MAAO,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;YAAA,CAAC;QAC1G,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAU;QACjC,MAAM,UAAU,GAAG;YACjB,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACrE,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAClF,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvF,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACvE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC/D,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAChE,CAAC;QAEF,KAAK,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,UAAU,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;gBACxC,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;gBAC/B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE,wBAAwB,IAAI,sBAAsB,CAAC,CAAC;gBAClG,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,aAAa,CAAC,cAAsB;QACxC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE;YAClE,IAAI,EAAE,cAAc;SACrB,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,QAAgB;QAClC,gEAAgE;QAChE,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,sDAAsD;YACxD,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QAEnF,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,0BAA0B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1H,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,4FAA4F;IAC5F,KAAK,CAAC,aAAa,CAAC,aAAkB;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,eAAe,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;aACtC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,uDAAuD;QACvD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC;QAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE5C,uDAAuD;QACvD,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC;YAC9B,IAAI;gBACF,+CAA+C;YACjD,CAAC;SACF,CAAC,CAAC;QAEH,iDAAiD;QACjD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;QAErC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC5C,IAAI,IAAI,EAAE,CAAC;wBACT,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB;wBACxC,MAAM;oBACR,CAAC;oBACD,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,UAAU,CAAC,OAAO,CAAC,KAAc,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,EAAE,CAAC;QAEP,OAAO,UAAU,CAAC;IACpB,CAAC;CACF"}
|