@crowdstrike/foundry-js 0.19.0 → 0.21.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/README.md +10 -23
- package/dist/abstraction/api-integration.d.ts +4 -4
- package/dist/abstraction/cloud-function.d.ts +1 -0
- package/dist/apis/alerts/index.d.ts +10 -20
- package/dist/apis/customobjects/index.d.ts +2 -4
- package/dist/apis/detects/index.d.ts +6 -12
- package/dist/apis/devices/index.d.ts +16 -32
- package/dist/apis/faas-gateway/index.d.ts +9 -2
- package/dist/apis/fwmgr/index.d.ts +14 -28
- package/dist/apis/incidents/index.d.ts +5 -10
- package/dist/apis/loggingapi/index.d.ts +3 -6
- package/dist/apis/plugins/index.d.ts +8 -4
- package/dist/apis/public-api.d.ts +1 -1
- package/dist/apis/remote-response/index.d.ts +3 -6
- package/dist/apis/user-management/index.d.ts +1 -2
- package/dist/apis/workflows/index.d.ts +2 -4
- package/dist/index.js +32 -8
- package/dist/lib/navigation.d.ts +3 -0
- package/package.json +30 -42
- package/dist/index.js.map +0 -1
|
@@ -39,8 +39,7 @@ export interface PostEntitiesSavedSearchesDynamicExecuteV1QueryParams extends Ba
|
|
|
39
39
|
includeTestData?: QueryParam;
|
|
40
40
|
}
|
|
41
41
|
export type PostEntitiesSavedSearchesDynamicExecuteV1ApiResponse = ApiResponsePayload;
|
|
42
|
-
export
|
|
43
|
-
}
|
|
42
|
+
export type PostEntitiesSavedSearchesDynamicExecuteV1PostData = Record<string, never>;
|
|
44
43
|
export type PostEntitiesSavedSearchesDynamicExecuteV1ResponseMessage = BaseApiResponseMessage<PostEntitiesSavedSearchesDynamicExecuteV1ApiResponse>;
|
|
45
44
|
export interface PostEntitiesSavedSearchesDynamicExecuteV1RequestMessage extends BaseApiRequestMessage<PostEntitiesSavedSearchesDynamicExecuteV1QueryParams, PostEntitiesSavedSearchesDynamicExecuteV1PostData> {
|
|
46
45
|
api: LoggingapiRequestApi;
|
|
@@ -54,8 +53,7 @@ export interface PostEntitiesSavedSearchesExecuteV1QueryParams extends BaseUrlPa
|
|
|
54
53
|
detailed?: QueryParam;
|
|
55
54
|
}
|
|
56
55
|
export type PostEntitiesSavedSearchesExecuteV1ApiResponse = ApiResponsePayload;
|
|
57
|
-
export
|
|
58
|
-
}
|
|
56
|
+
export type PostEntitiesSavedSearchesExecuteV1PostData = Record<string, never>;
|
|
59
57
|
export type PostEntitiesSavedSearchesExecuteV1ResponseMessage = BaseApiResponseMessage<PostEntitiesSavedSearchesExecuteV1ApiResponse>;
|
|
60
58
|
export interface PostEntitiesSavedSearchesExecuteV1RequestMessage extends BaseApiRequestMessage<PostEntitiesSavedSearchesExecuteV1QueryParams, PostEntitiesSavedSearchesExecuteV1PostData> {
|
|
61
59
|
api: LoggingapiRequestApi;
|
|
@@ -63,8 +61,7 @@ export interface PostEntitiesSavedSearchesExecuteV1RequestMessage extends BaseAp
|
|
|
63
61
|
}
|
|
64
62
|
export type PostEntitiesSavedSearchesIngestV1QueryParams = BaseUrlParams;
|
|
65
63
|
export type PostEntitiesSavedSearchesIngestV1ApiResponse = ApiResponsePayload;
|
|
66
|
-
export
|
|
67
|
-
}
|
|
64
|
+
export type PostEntitiesSavedSearchesIngestV1PostData = Record<string, never>;
|
|
68
65
|
export type PostEntitiesSavedSearchesIngestV1ResponseMessage = BaseApiResponseMessage<PostEntitiesSavedSearchesIngestV1ApiResponse>;
|
|
69
66
|
export interface PostEntitiesSavedSearchesIngestV1RequestMessage extends BaseApiRequestMessage<PostEntitiesSavedSearchesIngestV1QueryParams, PostEntitiesSavedSearchesIngestV1PostData> {
|
|
70
67
|
api: LoggingapiRequestApi;
|
|
@@ -33,8 +33,7 @@ export interface GetEntitiesDefinitionsV1RequestMessage extends BaseApiRequestMe
|
|
|
33
33
|
}
|
|
34
34
|
export type PostEntitiesExecuteDraftV1QueryParams = BaseUrlParams;
|
|
35
35
|
export type PostEntitiesExecuteDraftV1ApiResponse = ApiResponsePayload;
|
|
36
|
-
export
|
|
37
|
-
}
|
|
36
|
+
export type PostEntitiesExecuteDraftV1PostData = Record<string, never>;
|
|
38
37
|
export type PostEntitiesExecuteDraftV1ResponseMessage = BaseApiResponseMessage<PostEntitiesExecuteDraftV1ApiResponse>;
|
|
39
38
|
export interface PostEntitiesExecuteDraftV1RequestMessage extends BaseApiRequestMessage<PostEntitiesExecuteDraftV1QueryParams, PostEntitiesExecuteDraftV1PostData> {
|
|
40
39
|
api: PluginsRequestApi;
|
|
@@ -42,8 +41,13 @@ export interface PostEntitiesExecuteDraftV1RequestMessage extends BaseApiRequest
|
|
|
42
41
|
}
|
|
43
42
|
export type PostEntitiesExecuteV1QueryParams = BaseUrlParams;
|
|
44
43
|
export type PostEntitiesExecuteV1ApiResponse = ApiResponsePayload;
|
|
45
|
-
export
|
|
46
|
-
|
|
44
|
+
export type PostEntitiesExecuteV1PostData = {
|
|
45
|
+
resources?: Array<{
|
|
46
|
+
definition_id?: string;
|
|
47
|
+
operation_id?: string;
|
|
48
|
+
request?: Record<string, unknown>;
|
|
49
|
+
}>;
|
|
50
|
+
};
|
|
47
51
|
export type PostEntitiesExecuteV1ResponseMessage = BaseApiResponseMessage<PostEntitiesExecuteV1ApiResponse>;
|
|
48
52
|
export interface PostEntitiesExecuteV1RequestMessage extends BaseApiRequestMessage<PostEntitiesExecuteV1QueryParams, PostEntitiesExecuteV1PostData> {
|
|
49
53
|
api: PluginsRequestApi;
|
|
@@ -26,7 +26,7 @@ import { WorkflowsApiBridge } from './workflows';
|
|
|
26
26
|
import type FalconApi from '../api';
|
|
27
27
|
export default class FalconPublicApis {
|
|
28
28
|
private api;
|
|
29
|
-
constructor(api: FalconApi
|
|
29
|
+
constructor(api: FalconApi);
|
|
30
30
|
get alerts(): AlertsApiBridge;
|
|
31
31
|
get detects(): DetectsApiBridge;
|
|
32
32
|
get devices(): DevicesApiBridge;
|
|
@@ -56,8 +56,7 @@ export interface PostEntitiesAppCommandV1QueryParams extends BaseUrlParams {
|
|
|
56
56
|
appScriptVersion?: QueryParam;
|
|
57
57
|
}
|
|
58
58
|
export type PostEntitiesAppCommandV1ApiResponse = ApiResponsePayload;
|
|
59
|
-
export
|
|
60
|
-
}
|
|
59
|
+
export type PostEntitiesAppCommandV1PostData = Record<string, never>;
|
|
61
60
|
export type PostEntitiesAppCommandV1ResponseMessage = BaseApiResponseMessage<PostEntitiesAppCommandV1ApiResponse>;
|
|
62
61
|
export interface PostEntitiesAppCommandV1RequestMessage extends BaseApiRequestMessage<PostEntitiesAppCommandV1QueryParams, PostEntitiesAppCommandV1PostData> {
|
|
63
62
|
api: RemoteResponseRequestApi;
|
|
@@ -68,8 +67,7 @@ export interface PostEntitiesAppSessionsV1QueryParams extends BaseUrlParams {
|
|
|
68
67
|
timeoutDuration?: QueryParam;
|
|
69
68
|
}
|
|
70
69
|
export type PostEntitiesAppSessionsV1ApiResponse = ApiResponsePayload;
|
|
71
|
-
export
|
|
72
|
-
}
|
|
70
|
+
export type PostEntitiesAppSessionsV1PostData = Record<string, never>;
|
|
73
71
|
export type PostEntitiesAppSessionsV1ResponseMessage = BaseApiResponseMessage<PostEntitiesAppSessionsV1ApiResponse>;
|
|
74
72
|
export interface PostEntitiesAppSessionsV1RequestMessage extends BaseApiRequestMessage<PostEntitiesAppSessionsV1QueryParams, PostEntitiesAppSessionsV1PostData> {
|
|
75
73
|
api: RemoteResponseRequestApi;
|
|
@@ -77,8 +75,7 @@ export interface PostEntitiesAppSessionsV1RequestMessage extends BaseApiRequestM
|
|
|
77
75
|
}
|
|
78
76
|
export type PostEntitiesPutFilesV1QueryParams = BaseUrlParams;
|
|
79
77
|
export type PostEntitiesPutFilesV1ApiResponse = ApiResponsePayload;
|
|
80
|
-
export
|
|
81
|
-
}
|
|
78
|
+
export type PostEntitiesPutFilesV1PostData = Record<string, never>;
|
|
82
79
|
export type PostEntitiesPutFilesV1ResponseMessage = BaseApiResponseMessage<PostEntitiesPutFilesV1ApiResponse>;
|
|
83
80
|
export interface PostEntitiesPutFilesV1RequestMessage extends BaseApiRequestMessage<PostEntitiesPutFilesV1QueryParams, PostEntitiesPutFilesV1PostData> {
|
|
84
81
|
api: RemoteResponseRequestApi;
|
|
@@ -26,8 +26,7 @@ export interface GetQueriesUsersV1RequestMessage extends BaseApiRequestMessage<G
|
|
|
26
26
|
}
|
|
27
27
|
export type PostEntitiesUsersGetV1QueryParams = BaseUrlParams;
|
|
28
28
|
export type PostEntitiesUsersGetV1ApiResponse = ApiResponsePayload;
|
|
29
|
-
export
|
|
30
|
-
}
|
|
29
|
+
export type PostEntitiesUsersGetV1PostData = Record<string, never>;
|
|
31
30
|
export type PostEntitiesUsersGetV1ResponseMessage = BaseApiResponseMessage<PostEntitiesUsersGetV1ApiResponse>;
|
|
32
31
|
export interface PostEntitiesUsersGetV1RequestMessage extends BaseApiRequestMessage<PostEntitiesUsersGetV1QueryParams, PostEntitiesUsersGetV1PostData> {
|
|
33
32
|
api: UserManagementRequestApi;
|
|
@@ -28,8 +28,7 @@ export interface PostEntitiesExecuteV1QueryParams extends BaseUrlParams {
|
|
|
28
28
|
depth?: QueryParam;
|
|
29
29
|
}
|
|
30
30
|
export type PostEntitiesExecuteV1ApiResponse = ApiResponsePayload;
|
|
31
|
-
export
|
|
32
|
-
}
|
|
31
|
+
export type PostEntitiesExecuteV1PostData = Record<string, never>;
|
|
33
32
|
export type PostEntitiesExecuteV1ResponseMessage = BaseApiResponseMessage<PostEntitiesExecuteV1ApiResponse>;
|
|
34
33
|
export interface PostEntitiesExecuteV1RequestMessage extends BaseApiRequestMessage<PostEntitiesExecuteV1QueryParams, PostEntitiesExecuteV1PostData> {
|
|
35
34
|
api: WorkflowsRequestApi;
|
|
@@ -39,8 +38,7 @@ export interface PostEntitiesExecutionActionsV1QueryParams extends BaseUrlParams
|
|
|
39
38
|
actionName: QueryParam;
|
|
40
39
|
}
|
|
41
40
|
export type PostEntitiesExecutionActionsV1ApiResponse = ApiResponsePayload;
|
|
42
|
-
export
|
|
43
|
-
}
|
|
41
|
+
export type PostEntitiesExecutionActionsV1PostData = Record<string, never>;
|
|
44
42
|
export type PostEntitiesExecutionActionsV1ResponseMessage = BaseApiResponseMessage<PostEntitiesExecutionActionsV1ApiResponse>;
|
|
45
43
|
export interface PostEntitiesExecutionActionsV1RequestMessage extends BaseApiRequestMessage<PostEntitiesExecutionActionsV1QueryParams, PostEntitiesExecutionActionsV1PostData> {
|
|
46
44
|
api: WorkflowsRequestApi;
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
|
|
2
|
+
|
|
3
|
+
function validate(uuid) {
|
|
4
|
+
return typeof uuid === 'string' && REGEX.test(uuid);
|
|
5
|
+
}
|
|
6
|
+
|
|
1
7
|
const byteToHex = [];
|
|
2
8
|
for (let i = 0; i < 256; ++i) {
|
|
3
9
|
byteToHex.push((i + 0x100).toString(16).slice(1));
|
|
@@ -40,10 +46,7 @@ function rng() {
|
|
|
40
46
|
const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
|
41
47
|
var native = { randomUUID };
|
|
42
48
|
|
|
43
|
-
function
|
|
44
|
-
if (native.randomUUID && true && !options) {
|
|
45
|
-
return native.randomUUID();
|
|
46
|
-
}
|
|
49
|
+
function _v4(options, buf, offset) {
|
|
47
50
|
options = options || {};
|
|
48
51
|
const rnds = options.random ?? options.rng?.() ?? rng();
|
|
49
52
|
if (rnds.length < 16) {
|
|
@@ -53,6 +56,12 @@ function v4(options, buf, offset) {
|
|
|
53
56
|
rnds[8] = (rnds[8] & 0x3f) | 0x80;
|
|
54
57
|
return unsafeStringify(rnds);
|
|
55
58
|
}
|
|
59
|
+
function v4(options, buf, offset) {
|
|
60
|
+
if (native.randomUUID && true && !options) {
|
|
61
|
+
return native.randomUUID();
|
|
62
|
+
}
|
|
63
|
+
return _v4(options);
|
|
64
|
+
}
|
|
56
65
|
|
|
57
66
|
const VERSION = 'current';
|
|
58
67
|
|
|
@@ -70,6 +79,13 @@ event) {
|
|
|
70
79
|
const CONNECTION_TIMEOUT = 5_000;
|
|
71
80
|
const API_TIMEOUT = 30_000;
|
|
72
81
|
const NAVIGATION_TIMEOUT = 5_000;
|
|
82
|
+
function sanitizeMessageId(messageId) {
|
|
83
|
+
// Only allow valid UUID strings
|
|
84
|
+
if (typeof messageId !== 'string' || !validate(messageId)) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return messageId;
|
|
88
|
+
}
|
|
73
89
|
function timeoutForMessage(message) {
|
|
74
90
|
const timeout = message.type === 'connect'
|
|
75
91
|
? CONNECTION_TIMEOUT
|
|
@@ -161,12 +177,18 @@ class Bridge {
|
|
|
161
177
|
return;
|
|
162
178
|
}
|
|
163
179
|
const { messageId } = event.data.meta;
|
|
164
|
-
|
|
165
|
-
|
|
180
|
+
// Sanitize messageId to prevent unvalidated dynamic method calls
|
|
181
|
+
const sanitizedMessageId = sanitizeMessageId(messageId);
|
|
182
|
+
if (!sanitizedMessageId) {
|
|
183
|
+
this.throwError(`Received message with invalid messageId format`);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const callback = this.pendingMessages.get(sanitizedMessageId);
|
|
187
|
+
if (!callback || typeof callback !== 'function') {
|
|
166
188
|
this.throwError(`Received unexpected message`);
|
|
167
189
|
return;
|
|
168
190
|
}
|
|
169
|
-
this.pendingMessages.delete(
|
|
191
|
+
this.pendingMessages.delete(sanitizedMessageId);
|
|
170
192
|
callback(message.payload);
|
|
171
193
|
};
|
|
172
194
|
throwError(message) {
|
|
@@ -3243,6 +3265,9 @@ class Navigation {
|
|
|
3243
3265
|
},
|
|
3244
3266
|
});
|
|
3245
3267
|
}
|
|
3268
|
+
/**
|
|
3269
|
+
* @deprecated Use navigateTo directly
|
|
3270
|
+
*/
|
|
3246
3271
|
async onClick(event, defaultTarget = '_self', defaultType = 'falcon') {
|
|
3247
3272
|
if (!(event instanceof Event)) {
|
|
3248
3273
|
throw Error('"event" property should be subclass of Event');
|
|
@@ -3543,4 +3568,3 @@ __decorate([
|
|
|
3543
3568
|
], FalconApi.prototype, "logscale", null);
|
|
3544
3569
|
|
|
3545
3570
|
export { Bridge, FalconApi as default };
|
|
3546
|
-
//# sourceMappingURL=index.js.map
|
package/dist/lib/navigation.d.ts
CHANGED
|
@@ -13,6 +13,9 @@ export declare class Navigation<DATA extends LocalData = LocalData> {
|
|
|
13
13
|
ctrlKey?: boolean;
|
|
14
14
|
shiftKey?: boolean;
|
|
15
15
|
}): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated Use navigateTo directly
|
|
18
|
+
*/
|
|
16
19
|
onClick(event: MouseEvent | KeyboardEvent, defaultTarget?: (typeof ALLOWED_TARGETS)[number], defaultType?: NavigateToRequestMessage['payload']['type']): Promise<void>;
|
|
17
20
|
}
|
|
18
21
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crowdstrike/foundry-js",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "foundry-js is the JavaScript SDK for authoring UI Extensions for CrowdStrike's Foundry platform.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -29,54 +29,42 @@
|
|
|
29
29
|
"files": [
|
|
30
30
|
"dist"
|
|
31
31
|
],
|
|
32
|
-
"scripts": {
|
|
33
|
-
"_build": "concurrently 'npm:build:*'",
|
|
34
|
-
"_start": "concurrently 'npm:watch:*'",
|
|
35
|
-
"build": "rollup -c ./config/rollup.config.ts --configPlugin typescript",
|
|
36
|
-
"api-docs": "typedoc",
|
|
37
|
-
"lint": "concurrently 'npm:lint:*(!fix)' --names 'lint:'",
|
|
38
|
-
"lint:fix": "concurrently 'npm:lint:*:fix' --names 'fix:'",
|
|
39
|
-
"lint:js": "eslint . --cache",
|
|
40
|
-
"lint:js:fix": "eslint . --fix",
|
|
41
|
-
"lint:types": "tsc --noEmit",
|
|
42
|
-
"prepublishOnly": "yarn build",
|
|
43
|
-
"release": "changeset publish",
|
|
44
|
-
"start": "yarn build --watch",
|
|
45
|
-
"test": "vitest"
|
|
46
|
-
},
|
|
47
32
|
"dependencies": {
|
|
48
|
-
"emittery": "
|
|
49
|
-
"typescript-memoize": "
|
|
50
|
-
"uuid": "
|
|
33
|
+
"emittery": "1.2.0",
|
|
34
|
+
"typescript-memoize": "1.1.1",
|
|
35
|
+
"uuid": "13.0.0"
|
|
51
36
|
},
|
|
52
37
|
"devDependencies": {
|
|
53
|
-
"@changesets/changelog-github": "
|
|
54
|
-
"@changesets/cli": "
|
|
38
|
+
"@changesets/changelog-github": "0.5.1",
|
|
39
|
+
"@changesets/cli": "2.29.7",
|
|
40
|
+
"@eslint/js": "9.36.0",
|
|
55
41
|
"@rollup/plugin-node-resolve": "16.0.1",
|
|
56
|
-
"@rollup/plugin-replace": "
|
|
42
|
+
"@rollup/plugin-replace": "6.0.2",
|
|
57
43
|
"@rollup/plugin-typescript": "12.1.4",
|
|
58
|
-
"@types/
|
|
59
|
-
"@typescript-eslint/eslint-plugin": "
|
|
60
|
-
"@typescript-eslint/parser": "
|
|
61
|
-
"concurrently": "
|
|
62
|
-
"eslint": "
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"eslint-plugin-sort-imports-es6-autofix": "^0.6.0",
|
|
67
|
-
"happy-dom": "^18.0.1",
|
|
68
|
-
"jsdom": "^26.1.0",
|
|
69
|
-
"p-event": "^6.0.1",
|
|
70
|
-
"prettier": "^3.2.5",
|
|
71
|
-
"rollup": "4.45.1",
|
|
44
|
+
"@types/node": "25.0.3",
|
|
45
|
+
"@typescript-eslint/eslint-plugin": "8.45.0",
|
|
46
|
+
"@typescript-eslint/parser": "8.45.0",
|
|
47
|
+
"concurrently": "9.2.1",
|
|
48
|
+
"eslint": "9.39.1",
|
|
49
|
+
"happy-dom": "20.0.2",
|
|
50
|
+
"p-event": "7.0.0",
|
|
51
|
+
"rollup": "4.54.0",
|
|
72
52
|
"tslib": "2.8.1",
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"typedoc-plugin-rename-defaults": "^0.7.0",
|
|
76
|
-
"typescript": "5.8.3",
|
|
77
|
-
"vitest": "^3.1.4"
|
|
53
|
+
"typescript": "5.9.3",
|
|
54
|
+
"vitest": "4.0.13"
|
|
78
55
|
},
|
|
79
56
|
"engines": {
|
|
80
57
|
"node": ">=22"
|
|
58
|
+
},
|
|
59
|
+
"scripts": {
|
|
60
|
+
"build": "rollup -c ./config/rollup.config.ts --configPlugin typescript",
|
|
61
|
+
"lint": "concurrently 'npm:lint:*(!fix)' --names 'lint:'",
|
|
62
|
+
"lint:fix": "concurrently 'npm:lint:*:fix' --names 'fix:'",
|
|
63
|
+
"lint:js": "eslint . --cache",
|
|
64
|
+
"lint:js:fix": "eslint . --fix",
|
|
65
|
+
"lint:types": "tsc --noEmit",
|
|
66
|
+
"release": "changeset publish",
|
|
67
|
+
"start": "pnpm build --watch",
|
|
68
|
+
"test": "vitest"
|
|
81
69
|
}
|
|
82
|
-
}
|
|
70
|
+
}
|