@jupiterone/jupiterone-mcp 0.0.1
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 +89 -0
- package/dist/client/graphql/mutations.d.ts +11 -0
- package/dist/client/graphql/mutations.d.ts.map +1 -0
- package/dist/client/graphql/mutations.js +315 -0
- package/dist/client/graphql/mutations.js.map +1 -0
- package/dist/client/graphql/queries.d.ts +15 -0
- package/dist/client/graphql/queries.d.ts.map +1 -0
- package/dist/client/graphql/queries.js +692 -0
- package/dist/client/graphql/queries.js.map +1 -0
- package/dist/client/jupiterone-client.d.ts +106 -0
- package/dist/client/jupiterone-client.d.ts.map +1 -0
- package/dist/client/jupiterone-client.js +137 -0
- package/dist/client/jupiterone-client.js.map +1 -0
- package/dist/client/services/account-service.d.ts +17 -0
- package/dist/client/services/account-service.d.ts.map +1 -0
- package/dist/client/services/account-service.js +37 -0
- package/dist/client/services/account-service.js.map +1 -0
- package/dist/client/services/alert-service.d.ts +15 -0
- package/dist/client/services/alert-service.d.ts.map +1 -0
- package/dist/client/services/alert-service.js +56 -0
- package/dist/client/services/alert-service.js.map +1 -0
- package/dist/client/services/dashboard-service.d.ts +123 -0
- package/dist/client/services/dashboard-service.d.ts.map +1 -0
- package/dist/client/services/dashboard-service.js +74 -0
- package/dist/client/services/dashboard-service.js.map +1 -0
- package/dist/client/services/integration-service.d.ts +45 -0
- package/dist/client/services/integration-service.d.ts.map +1 -0
- package/dist/client/services/integration-service.js +114 -0
- package/dist/client/services/integration-service.js.map +1 -0
- package/dist/client/services/j1ql-service.d.ts +21 -0
- package/dist/client/services/j1ql-service.d.ts.map +1 -0
- package/dist/client/services/j1ql-service.js +29 -0
- package/dist/client/services/j1ql-service.js.map +1 -0
- package/dist/client/services/rule-service.d.ts +61 -0
- package/dist/client/services/rule-service.d.ts.map +1 -0
- package/dist/client/services/rule-service.js +140 -0
- package/dist/client/services/rule-service.js.map +1 -0
- package/dist/descriptions/create-dashboard-widget.md +325 -0
- package/dist/descriptions/create-dashboard.md +12 -0
- package/dist/descriptions/create-inline-question-rule.md +357 -0
- package/dist/descriptions/create-j1ql-from-natural-language.md +7 -0
- package/dist/descriptions/execute-j1ql-query.md +426 -0
- package/dist/descriptions/list-alerts.md +14 -0
- package/dist/descriptions/list-rules.md +14 -0
- package/dist/descriptions/update-dashboard.md +467 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/server/mcp-server.d.ts +10 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/server/mcp-server.js +1496 -0
- package/dist/server/mcp-server.js.map +1 -0
- package/dist/types/jupiterone.d.ts +752 -0
- package/dist/types/jupiterone.d.ts.map +1 -0
- package/dist/types/jupiterone.js +2 -0
- package/dist/types/jupiterone.js.map +1 -0
- package/dist/utils/description-loader.d.ts +2 -0
- package/dist/utils/description-loader.d.ts.map +1 -0
- package/dist/utils/description-loader.js +14 -0
- package/dist/utils/description-loader.js.map +1 -0
- package/dist/utils/load-description.d.ts +2 -0
- package/dist/utils/load-description.d.ts.map +1 -0
- package/dist/utils/load-description.js +9 -0
- package/dist/utils/load-description.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { GraphQLClient } from 'graphql-request';
|
|
2
|
+
import { IntegrationDefinitionsResponse, IntegrationInstancesResponse, IntegrationJobsResponse, IntegrationJobResponse, IntegrationEventsResponse, ListIntegrationInstancesSearchFilter, IntegrationJobStatus } from '../../types/jupiterone.js';
|
|
3
|
+
export declare class IntegrationService {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: GraphQLClient);
|
|
6
|
+
/**
|
|
7
|
+
* Get integration definitions
|
|
8
|
+
* @param cursor Optional cursor for pagination
|
|
9
|
+
* @param includeConfig Whether to include configuration fields
|
|
10
|
+
*/
|
|
11
|
+
getIntegrationDefinitions(cursor?: string, includeConfig?: boolean): Promise<IntegrationDefinitionsResponse['integrationDefinitions']>;
|
|
12
|
+
/**
|
|
13
|
+
* Get integration instances
|
|
14
|
+
* @param definitionId Optional ID to filter instances by definition
|
|
15
|
+
* @param cursor Optional cursor for pagination
|
|
16
|
+
* @param limit Optional limit for number of instances to return
|
|
17
|
+
* @param filter Optional search filter
|
|
18
|
+
*/
|
|
19
|
+
getIntegrationInstances(definitionId?: string, cursor?: string, limit?: number, filter?: ListIntegrationInstancesSearchFilter): Promise<IntegrationInstancesResponse['integrationInstancesV2']>;
|
|
20
|
+
/**
|
|
21
|
+
* Get integration jobs
|
|
22
|
+
* @param status Optional status to filter jobs
|
|
23
|
+
* @param integrationInstanceId Optional ID to filter jobs by instance
|
|
24
|
+
* @param integrationDefinitionId Optional ID to filter jobs by definition
|
|
25
|
+
* @param integrationInstanceIds Optional array of instance IDs to filter jobs
|
|
26
|
+
* @param cursor Optional cursor for pagination
|
|
27
|
+
* @param size Optional size limit for number of jobs to return
|
|
28
|
+
*/
|
|
29
|
+
getIntegrationJobs(status?: IntegrationJobStatus, integrationInstanceId?: string, integrationDefinitionId?: string, integrationInstanceIds?: string[], cursor?: string, size?: number): Promise<IntegrationJobsResponse['integrationJobs']>;
|
|
30
|
+
/**
|
|
31
|
+
* Get details for a specific integration job
|
|
32
|
+
* @param integrationJobId ID of the job to get
|
|
33
|
+
* @param integrationInstanceId ID of the instance the job belongs to
|
|
34
|
+
*/
|
|
35
|
+
getIntegrationJob(integrationJobId: string, integrationInstanceId: string): Promise<IntegrationJobResponse['integrationJob']>;
|
|
36
|
+
/**
|
|
37
|
+
* Get events for a specific integration job
|
|
38
|
+
* @param jobId ID of the job to get events for
|
|
39
|
+
* @param integrationInstanceId ID of the instance the job belongs to
|
|
40
|
+
* @param cursor Optional cursor for pagination
|
|
41
|
+
* @param size Optional size limit for number of events to return
|
|
42
|
+
*/
|
|
43
|
+
getIntegrationEvents(jobId: string, integrationInstanceId: string, cursor?: string, size?: number): Promise<IntegrationEventsResponse['integrationEvents']>;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=integration-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-service.d.ts","sourceRoot":"","sources":["../../../src/client/services/integration-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,8BAA8B,EAC9B,4BAA4B,EAC5B,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,oCAAoC,EACpC,oBAAoB,EACrB,MAAM,2BAA2B,CAAC;AASnC,qBAAa,kBAAkB;IACjB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAEzC;;;;OAIG;IACG,yBAAyB,CAC7B,MAAM,CAAC,EAAE,MAAM,EACf,aAAa,GAAE,OAAe,GAC7B,OAAO,CAAC,8BAA8B,CAAC,wBAAwB,CAAC,CAAC;IAgBpE;;;;;;OAMG;IACG,uBAAuB,CAC3B,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,oCAAoC,GAC5C,OAAO,CAAC,4BAA4B,CAAC,wBAAwB,CAAC,CAAC;IAkBlE;;;;;;;;OAQG;IACG,kBAAkB,CACtB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,qBAAqB,CAAC,EAAE,MAAM,EAC9B,uBAAuB,CAAC,EAAE,MAAM,EAChC,sBAAsB,CAAC,EAAE,MAAM,EAAE,EACjC,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;IAoBtD;;;;OAIG;IACG,iBAAiB,CACrB,gBAAgB,EAAE,MAAM,EACxB,qBAAqB,EAAE,MAAM,GAC5B,OAAO,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IAgBpD;;;;;;OAMG;IACG,oBAAoB,CACxB,KAAK,EAAE,MAAM,EACb,qBAAqB,EAAE,MAAM,EAC7B,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;CAiB3D"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { GET_INTEGRATION_DEFINITIONS, GET_INTEGRATION_INSTANCES, GET_INTEGRATION_JOBS, GET_INTEGRATION_JOB, GET_INTEGRATION_EVENTS } from '../graphql/queries.js';
|
|
2
|
+
export class IntegrationService {
|
|
3
|
+
client;
|
|
4
|
+
constructor(client) {
|
|
5
|
+
this.client = client;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Get integration definitions
|
|
9
|
+
* @param cursor Optional cursor for pagination
|
|
10
|
+
* @param includeConfig Whether to include configuration fields
|
|
11
|
+
*/
|
|
12
|
+
async getIntegrationDefinitions(cursor, includeConfig = false) {
|
|
13
|
+
try {
|
|
14
|
+
const response = await this.client.request(GET_INTEGRATION_DEFINITIONS, {
|
|
15
|
+
cursor,
|
|
16
|
+
includeConfig,
|
|
17
|
+
});
|
|
18
|
+
return response.integrationDefinitions;
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
console.error('Error getting integration definitions:', error);
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get integration instances
|
|
27
|
+
* @param definitionId Optional ID to filter instances by definition
|
|
28
|
+
* @param cursor Optional cursor for pagination
|
|
29
|
+
* @param limit Optional limit for number of instances to return
|
|
30
|
+
* @param filter Optional search filter
|
|
31
|
+
*/
|
|
32
|
+
async getIntegrationInstances(definitionId, cursor, limit, filter) {
|
|
33
|
+
try {
|
|
34
|
+
const response = await this.client.request(GET_INTEGRATION_INSTANCES, {
|
|
35
|
+
definitionId,
|
|
36
|
+
cursor,
|
|
37
|
+
limit,
|
|
38
|
+
filter,
|
|
39
|
+
});
|
|
40
|
+
return response.integrationInstancesV2;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.error('Error getting integration instances:', error);
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get integration jobs
|
|
49
|
+
* @param status Optional status to filter jobs
|
|
50
|
+
* @param integrationInstanceId Optional ID to filter jobs by instance
|
|
51
|
+
* @param integrationDefinitionId Optional ID to filter jobs by definition
|
|
52
|
+
* @param integrationInstanceIds Optional array of instance IDs to filter jobs
|
|
53
|
+
* @param cursor Optional cursor for pagination
|
|
54
|
+
* @param size Optional size limit for number of jobs to return
|
|
55
|
+
*/
|
|
56
|
+
async getIntegrationJobs(status, integrationInstanceId, integrationDefinitionId, integrationInstanceIds, cursor, size) {
|
|
57
|
+
try {
|
|
58
|
+
const response = await this.client.request(GET_INTEGRATION_JOBS, {
|
|
59
|
+
status,
|
|
60
|
+
integrationInstanceId,
|
|
61
|
+
integrationDefinitionId,
|
|
62
|
+
integrationInstanceIds,
|
|
63
|
+
cursor,
|
|
64
|
+
size,
|
|
65
|
+
});
|
|
66
|
+
return response.integrationJobs;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error('Error getting integration jobs:', error);
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get details for a specific integration job
|
|
75
|
+
* @param integrationJobId ID of the job to get
|
|
76
|
+
* @param integrationInstanceId ID of the instance the job belongs to
|
|
77
|
+
*/
|
|
78
|
+
async getIntegrationJob(integrationJobId, integrationInstanceId) {
|
|
79
|
+
try {
|
|
80
|
+
const response = await this.client.request(GET_INTEGRATION_JOB, {
|
|
81
|
+
integrationJobId,
|
|
82
|
+
integrationInstanceId,
|
|
83
|
+
});
|
|
84
|
+
return response.integrationJob;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
console.error('Error getting integration job:', error);
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get events for a specific integration job
|
|
93
|
+
* @param jobId ID of the job to get events for
|
|
94
|
+
* @param integrationInstanceId ID of the instance the job belongs to
|
|
95
|
+
* @param cursor Optional cursor for pagination
|
|
96
|
+
* @param size Optional size limit for number of events to return
|
|
97
|
+
*/
|
|
98
|
+
async getIntegrationEvents(jobId, integrationInstanceId, cursor, size) {
|
|
99
|
+
try {
|
|
100
|
+
const response = await this.client.request(GET_INTEGRATION_EVENTS, {
|
|
101
|
+
jobId,
|
|
102
|
+
integrationInstanceId,
|
|
103
|
+
cursor,
|
|
104
|
+
size,
|
|
105
|
+
});
|
|
106
|
+
return response.integrationEvents;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
console.error('Error getting integration events:', error);
|
|
110
|
+
throw error;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=integration-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration-service.js","sourceRoot":"","sources":["../../../src/client/services/integration-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { GraphQLClient } from 'graphql-request';
|
|
2
|
+
import { CreateJ1qlFromNaturalLanguageResponse } from '../../types/jupiterone.js';
|
|
3
|
+
export declare class J1qlService {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: GraphQLClient);
|
|
6
|
+
/**
|
|
7
|
+
* Convert natural language to J1QL query
|
|
8
|
+
*/
|
|
9
|
+
createJ1qlFromNaturalLanguage(naturalLanguage: string): Promise<CreateJ1qlFromNaturalLanguageResponse['createJ1qlFromNaturalLanguage']>;
|
|
10
|
+
/**
|
|
11
|
+
* Execute a J1QL query
|
|
12
|
+
*/
|
|
13
|
+
executeJ1qlQuery({ query, variables, cursor, scopeFilters, flags, }: {
|
|
14
|
+
query: string;
|
|
15
|
+
variables?: Record<string, any>;
|
|
16
|
+
cursor?: string;
|
|
17
|
+
scopeFilters?: Record<string, any>[];
|
|
18
|
+
flags?: Record<string, any>;
|
|
19
|
+
}): Promise<any>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=j1ql-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"j1ql-service.d.ts","sourceRoot":"","sources":["../../../src/client/services/j1ql-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,qCAAqC,EAAE,MAAM,2BAA2B,CAAC;AAIlF,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAEzC;;OAEG;IACG,6BAA6B,CACjC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,qCAAqC,CAAC,+BAA+B,CAAC,CAAC;IAQlF;;OAEG;IACG,gBAAgB,CAAC,EACrB,KAAK,EACL,SAAS,EACT,MAAM,EACN,YAAY,EACZ,KAAK,GACN,EAAE;QACD,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC7B,GAAG,OAAO,CAAC,GAAG,CAAC;CAajB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CREATE_J1QL_FROM_NATURAL_LANGUAGE } from '../graphql/mutations.js';
|
|
2
|
+
import { QUERY_V1 } from '../graphql/queries.js';
|
|
3
|
+
export class J1qlService {
|
|
4
|
+
client;
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Convert natural language to J1QL query
|
|
10
|
+
*/
|
|
11
|
+
async createJ1qlFromNaturalLanguage(naturalLanguage) {
|
|
12
|
+
const response = await this.client.request(CREATE_J1QL_FROM_NATURAL_LANGUAGE, { naturalLanguage });
|
|
13
|
+
return response.createJ1qlFromNaturalLanguage;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Execute a J1QL query
|
|
17
|
+
*/
|
|
18
|
+
async executeJ1qlQuery({ query, variables, cursor, scopeFilters, flags, }) {
|
|
19
|
+
const response = await this.client.request(QUERY_V1, {
|
|
20
|
+
query,
|
|
21
|
+
variables,
|
|
22
|
+
cursor,
|
|
23
|
+
scopeFilters,
|
|
24
|
+
flags,
|
|
25
|
+
});
|
|
26
|
+
return response.queryV1;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=j1ql-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"j1ql-service.js","sourceRoot":"","sources":["../../../src/client/services/j1ql-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,OAAO,WAAW;IACF;IAApB,YAAoB,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;IAAG,CAAC;IAE7C;;OAEG;IACH,KAAK,CAAC,6BAA6B,CACjC,eAAuB;QAEvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CACxC,iCAAiC,EACjC,EAAE,eAAe,EAAE,CACpB,CAAC;QACF,OAAO,QAAQ,CAAC,6BAA6B,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,EACrB,KAAK,EACL,SAAS,EACT,MAAM,EACN,YAAY,EACZ,KAAK,GAON;QACC,MAAM,QAAQ,GAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAC7C,QAAQ,EACR;YACE,KAAK;YACL,SAAS;YACT,MAAM;YACN,YAAY;YACZ,KAAK;SACN,CACF,CAAC;QACF,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { GraphQLClient } from 'graphql-request';
|
|
2
|
+
import { ListRuleInstancesResponse, ListRuleInstancesFilters, QuestionRuleInstance, InlineQuestionRuleInstance, ReferencedQuestionRuleInstance, CreateInlineQuestionRuleInstanceInput, UpdateInlineQuestionRuleInstanceInput, CreateReferencedQuestionRuleInstanceInput, UpdateReferencedQuestionRuleInstanceInput, ListRuleEvaluationsResponse, ListRuleEvaluationsFilters, RuleEvaluation, RuleEvaluationDetailsResponse, RuleEvaluationDetailsInput } from '../../types/jupiterone.js';
|
|
3
|
+
export declare class RuleService {
|
|
4
|
+
private client;
|
|
5
|
+
constructor(client: GraphQLClient);
|
|
6
|
+
/**
|
|
7
|
+
* List rule instances using the new GraphQL query
|
|
8
|
+
*/
|
|
9
|
+
listRuleInstances(limit?: number, cursor?: string, filters?: ListRuleInstancesFilters): Promise<ListRuleInstancesResponse['listRuleInstances']>;
|
|
10
|
+
/**
|
|
11
|
+
* Get all rule instances by paginating through all pages
|
|
12
|
+
*/
|
|
13
|
+
getAllRuleInstances(filters?: ListRuleInstancesFilters): Promise<QuestionRuleInstance[]>;
|
|
14
|
+
/**
|
|
15
|
+
* Create an inline question rule instance
|
|
16
|
+
*/
|
|
17
|
+
createInlineQuestionRuleInstance(instance: CreateInlineQuestionRuleInstanceInput): Promise<InlineQuestionRuleInstance>;
|
|
18
|
+
/**
|
|
19
|
+
* Update an inline question rule instance
|
|
20
|
+
*/
|
|
21
|
+
updateInlineQuestionRuleInstance(instance: UpdateInlineQuestionRuleInstanceInput): Promise<InlineQuestionRuleInstance>;
|
|
22
|
+
/**
|
|
23
|
+
* Create a referenced question rule instance
|
|
24
|
+
*/
|
|
25
|
+
createReferencedQuestionRuleInstance(instance: CreateReferencedQuestionRuleInstanceInput): Promise<ReferencedQuestionRuleInstance>;
|
|
26
|
+
/**
|
|
27
|
+
* Update a referenced question rule instance
|
|
28
|
+
*/
|
|
29
|
+
updateReferencedQuestionRuleInstance(instance: UpdateReferencedQuestionRuleInstanceInput): Promise<ReferencedQuestionRuleInstance>;
|
|
30
|
+
/**
|
|
31
|
+
* Delete a rule instance
|
|
32
|
+
*/
|
|
33
|
+
deleteRuleInstance(id: string): Promise<{
|
|
34
|
+
id: string;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* Trigger an alert rule on demand
|
|
38
|
+
*/
|
|
39
|
+
evaluateRuleInstance(id: string): Promise<{
|
|
40
|
+
id: string;
|
|
41
|
+
__typename: string;
|
|
42
|
+
}>;
|
|
43
|
+
/**
|
|
44
|
+
* List rule evaluations for a specific rule instance
|
|
45
|
+
*/
|
|
46
|
+
listRuleEvaluations(filters: ListRuleEvaluationsFilters): Promise<ListRuleEvaluationsResponse['listCollectionResults']>;
|
|
47
|
+
/**
|
|
48
|
+
* Get all rule evaluations for a specific rule instance by paginating through all pages
|
|
49
|
+
*/
|
|
50
|
+
getAllRuleEvaluations(filters: Omit<ListRuleEvaluationsFilters, 'cursor'>): Promise<RuleEvaluation[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Get detailed information about a specific rule evaluation
|
|
53
|
+
*/
|
|
54
|
+
getRuleEvaluationDetails(input: RuleEvaluationDetailsInput): Promise<RuleEvaluationDetailsResponse['ruleEvaluationDetails']>;
|
|
55
|
+
/**
|
|
56
|
+
* Get a download URL for raw data associated with a rule evaluation
|
|
57
|
+
*/
|
|
58
|
+
getRawDataDownloadUrl(rawDataKey: string): Promise<string>;
|
|
59
|
+
getRawDataResults(rawDataKey: string): Promise<any>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=rule-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-service.d.ts","sourceRoot":"","sources":["../../../src/client/services/rule-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,8BAA8B,EAC9B,qCAAqC,EACrC,qCAAqC,EACrC,yCAAyC,EACzC,yCAAyC,EACzC,2BAA2B,EAC3B,0BAA0B,EAC1B,cAAc,EACd,6BAA6B,EAC7B,0BAA0B,EAC3B,MAAM,2BAA2B,CAAC;AAgBnC,qBAAa,WAAW;IACV,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAEzC;;OAEG;IACG,iBAAiB,CACrB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;IAY1D;;OAEG;IACG,mBAAmB,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAoB9F;;OAEG;IACG,gCAAgC,CACpC,QAAQ,EAAE,qCAAqC,GAC9C,OAAO,CAAC,0BAA0B,CAAC;IAOtC;;OAEG;IACG,gCAAgC,CACpC,QAAQ,EAAE,qCAAqC,GAC9C,OAAO,CAAC,0BAA0B,CAAC;IAOtC;;OAEG;IACG,oCAAoC,CACxC,QAAQ,EAAE,yCAAyC,GAClD,OAAO,CAAC,8BAA8B,CAAC;IAO1C;;OAEG;IACG,oCAAoC,CACxC,QAAQ,EAAE,yCAAyC,GAClD,OAAO,CAAC,8BAA8B,CAAC;IAO1C;;OAEG;IACG,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAQ7D;;OAEG;IACG,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAOnF;;OAEG;IACG,mBAAmB,CACvB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,2BAA2B,CAAC,uBAAuB,CAAC,CAAC;IAOhE;;OAEG;IACG,qBAAqB,CACzB,OAAO,EAAE,IAAI,CAAC,0BAA0B,EAAE,QAAQ,CAAC,GAClD,OAAO,CAAC,cAAc,EAAE,CAAC;IA4B5B;;OAEG;IACG,wBAAwB,CAC5B,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,6BAA6B,CAAC,uBAAuB,CAAC,CAAC;IAOlE;;OAEG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ1D,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAQ1D"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { LIST_RULE_INSTANCES, LIST_RULE_EVALUATIONS, GET_RULE_EVALUATION_DETAILS, GET_RAW_DATA_DOWNLOAD_URL, } from '../graphql/queries.js';
|
|
2
|
+
import { CREATE_INLINE_QUESTION_RULE, UPDATE_INLINE_QUESTION_RULE, CREATE_REFERENCED_QUESTION_RULE, UPDATE_REFERENCED_QUESTION_RULE, DELETE_RULE, EVALUATE_RULE, } from '../graphql/mutations.js';
|
|
3
|
+
export class RuleService {
|
|
4
|
+
client;
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* List rule instances using the new GraphQL query
|
|
10
|
+
*/
|
|
11
|
+
async listRuleInstances(limit, cursor, filters) {
|
|
12
|
+
const variables = {};
|
|
13
|
+
if (limit)
|
|
14
|
+
variables.limit = limit;
|
|
15
|
+
if (cursor)
|
|
16
|
+
variables.cursor = cursor;
|
|
17
|
+
if (filters)
|
|
18
|
+
variables.filters = filters;
|
|
19
|
+
const response = await this.client.request(LIST_RULE_INSTANCES, variables);
|
|
20
|
+
return response.listRuleInstances;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get all rule instances by paginating through all pages
|
|
24
|
+
*/
|
|
25
|
+
async getAllRuleInstances(filters) {
|
|
26
|
+
const allInstances = [];
|
|
27
|
+
let cursor = null;
|
|
28
|
+
let hasNextPage = true;
|
|
29
|
+
while (hasNextPage) {
|
|
30
|
+
const response = await this.listRuleInstances(100, cursor || undefined, filters);
|
|
31
|
+
if (!response?.questionInstances) {
|
|
32
|
+
console.error('Unexpected response structure:', response);
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
allInstances.push(...response.questionInstances);
|
|
36
|
+
cursor = response.pageInfo.endCursor;
|
|
37
|
+
hasNextPage = response.pageInfo.hasNextPage;
|
|
38
|
+
}
|
|
39
|
+
return allInstances;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create an inline question rule instance
|
|
43
|
+
*/
|
|
44
|
+
async createInlineQuestionRuleInstance(instance) {
|
|
45
|
+
const response = await this.client.request(CREATE_INLINE_QUESTION_RULE, { instance });
|
|
46
|
+
return response.createInlineQuestionRuleInstance;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Update an inline question rule instance
|
|
50
|
+
*/
|
|
51
|
+
async updateInlineQuestionRuleInstance(instance) {
|
|
52
|
+
const response = await this.client.request(UPDATE_INLINE_QUESTION_RULE, { instance });
|
|
53
|
+
return response.updateInlineQuestionRuleInstance;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create a referenced question rule instance
|
|
57
|
+
*/
|
|
58
|
+
async createReferencedQuestionRuleInstance(instance) {
|
|
59
|
+
const response = await this.client.request(CREATE_REFERENCED_QUESTION_RULE, { instance });
|
|
60
|
+
return response.createReferencedQuestionRuleInstance;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Update a referenced question rule instance
|
|
64
|
+
*/
|
|
65
|
+
async updateReferencedQuestionRuleInstance(instance) {
|
|
66
|
+
const response = await this.client.request(UPDATE_REFERENCED_QUESTION_RULE, { instance });
|
|
67
|
+
return response.updateReferencedQuestionRuleInstance;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Delete a rule instance
|
|
71
|
+
*/
|
|
72
|
+
async deleteRuleInstance(id) {
|
|
73
|
+
const response = await this.client.request(DELETE_RULE, { id });
|
|
74
|
+
return response.deleteRuleInstance;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Trigger an alert rule on demand
|
|
78
|
+
*/
|
|
79
|
+
async evaluateRuleInstance(id) {
|
|
80
|
+
const response = await this.client.request(EVALUATE_RULE, { id });
|
|
81
|
+
return response.evaluateRuleInstance;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* List rule evaluations for a specific rule instance
|
|
85
|
+
*/
|
|
86
|
+
async listRuleEvaluations(filters) {
|
|
87
|
+
const response = await this.client.request(LIST_RULE_EVALUATIONS, filters);
|
|
88
|
+
return response.listCollectionResults;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Get all rule evaluations for a specific rule instance by paginating through all pages
|
|
92
|
+
*/
|
|
93
|
+
async getAllRuleEvaluations(filters) {
|
|
94
|
+
const allEvaluations = [];
|
|
95
|
+
let cursor = null;
|
|
96
|
+
let hasNextPage = true;
|
|
97
|
+
while (hasNextPage) {
|
|
98
|
+
const response = await this.listRuleEvaluations({
|
|
99
|
+
collectionType: filters.collectionType,
|
|
100
|
+
collectionOwnerId: filters.collectionOwnerId,
|
|
101
|
+
beginTimestamp: filters.beginTimestamp,
|
|
102
|
+
endTimestamp: filters.endTimestamp,
|
|
103
|
+
limit: filters.limit,
|
|
104
|
+
tag: filters.tag,
|
|
105
|
+
cursor: cursor || undefined,
|
|
106
|
+
});
|
|
107
|
+
if (!response?.results) {
|
|
108
|
+
console.error('Unexpected response structure:', response);
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
allEvaluations.push(...response.results);
|
|
112
|
+
cursor = response.pageInfo.endCursor;
|
|
113
|
+
hasNextPage = response.pageInfo.hasNextPage;
|
|
114
|
+
}
|
|
115
|
+
return allEvaluations;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get detailed information about a specific rule evaluation
|
|
119
|
+
*/
|
|
120
|
+
async getRuleEvaluationDetails(input) {
|
|
121
|
+
const response = await this.client.request(GET_RULE_EVALUATION_DETAILS, { ruleEvaluationDetailsInput: input });
|
|
122
|
+
return response.ruleEvaluationDetails;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get a download URL for raw data associated with a rule evaluation
|
|
126
|
+
*/
|
|
127
|
+
async getRawDataDownloadUrl(rawDataKey) {
|
|
128
|
+
const response = await this.client.request(GET_RAW_DATA_DOWNLOAD_URL, { rawDataKey });
|
|
129
|
+
return response.getRawDataDownloadUrl;
|
|
130
|
+
}
|
|
131
|
+
async getRawDataResults(rawDataKey) {
|
|
132
|
+
const downloadUrl = await this.getRawDataDownloadUrl(rawDataKey);
|
|
133
|
+
const response = await fetch(downloadUrl);
|
|
134
|
+
if (!response.ok) {
|
|
135
|
+
throw new Error(`Failed to fetch query results: ${response.statusText}`);
|
|
136
|
+
}
|
|
137
|
+
return response.json();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=rule-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-service.js","sourceRoot":"","sources":["../../../src/client/services/rule-service.ts"],"names":[],"mappings":"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"}
|