n8n-nodes-msdefender 1.0.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.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/credentials/MsdefenderOAuth2Api.credentials.d.ts +9 -0
  4. package/dist/credentials/MsdefenderOAuth2Api.credentials.js +49 -0
  5. package/dist/credentials/MsdefenderOAuth2Api.credentials.js.map +1 -0
  6. package/dist/icons/ms-defender.dark.svg +1 -0
  7. package/dist/icons/ms-defender.svg +1 -0
  8. package/dist/images/app-permissions.png +0 -0
  9. package/dist/nodes/Msdefender/Msdefender.node.d.ts +4 -0
  10. package/dist/nodes/Msdefender/Msdefender.node.js +99 -0
  11. package/dist/nodes/Msdefender/Msdefender.node.js.map +1 -0
  12. package/dist/nodes/Msdefender/Msdefender.node.json +20 -0
  13. package/dist/nodes/Msdefender/resources/advancedQuery/index.d.ts +2 -0
  14. package/dist/nodes/Msdefender/resources/advancedQuery/index.js +35 -0
  15. package/dist/nodes/Msdefender/resources/advancedQuery/index.js.map +1 -0
  16. package/dist/nodes/Msdefender/resources/advancedQuery/run.d.ts +2 -0
  17. package/dist/nodes/Msdefender/resources/advancedQuery/run.js +29 -0
  18. package/dist/nodes/Msdefender/resources/advancedQuery/run.js.map +1 -0
  19. package/dist/nodes/Msdefender/resources/exposure/index.d.ts +2 -0
  20. package/dist/nodes/Msdefender/resources/exposure/index.js +45 -0
  21. package/dist/nodes/Msdefender/resources/exposure/index.js.map +1 -0
  22. package/dist/nodes/Msdefender/resources/machine/addOrRemoveTag.d.ts +2 -0
  23. package/dist/nodes/Msdefender/resources/machine/addOrRemoveTag.js +80 -0
  24. package/dist/nodes/Msdefender/resources/machine/addOrRemoveTag.js.map +1 -0
  25. package/dist/nodes/Msdefender/resources/machine/findByTag.d.ts +2 -0
  26. package/dist/nodes/Msdefender/resources/machine/findByTag.js +47 -0
  27. package/dist/nodes/Msdefender/resources/machine/findByTag.js.map +1 -0
  28. package/dist/nodes/Msdefender/resources/machine/getAll.d.ts +2 -0
  29. package/dist/nodes/Msdefender/resources/machine/getAll.js +116 -0
  30. package/dist/nodes/Msdefender/resources/machine/getAll.js.map +1 -0
  31. package/dist/nodes/Msdefender/resources/machine/getSecurityRecommendations.d.ts +2 -0
  32. package/dist/nodes/Msdefender/resources/machine/getSecurityRecommendations.js +29 -0
  33. package/dist/nodes/Msdefender/resources/machine/getSecurityRecommendations.js.map +1 -0
  34. package/dist/nodes/Msdefender/resources/machine/index.d.ts +2 -0
  35. package/dist/nodes/Msdefender/resources/machine/index.js +67 -0
  36. package/dist/nodes/Msdefender/resources/machine/index.js.map +1 -0
  37. package/dist/nodes/Msdefender/resources/machine/listSoftware.d.ts +2 -0
  38. package/dist/nodes/Msdefender/resources/machine/listSoftware.js +29 -0
  39. package/dist/nodes/Msdefender/resources/machine/listSoftware.js.map +1 -0
  40. package/dist/nodes/Msdefender/resources/machineAction/cancelMachineAction.d.ts +2 -0
  41. package/dist/nodes/Msdefender/resources/machineAction/cancelMachineAction.js +27 -0
  42. package/dist/nodes/Msdefender/resources/machineAction/cancelMachineAction.js.map +1 -0
  43. package/dist/nodes/Msdefender/resources/machineAction/index.d.ts +2 -0
  44. package/dist/nodes/Msdefender/resources/machineAction/index.js +75 -0
  45. package/dist/nodes/Msdefender/resources/machineAction/index.js.map +1 -0
  46. package/dist/nodes/Msdefender/resources/machineAction/isolateDevice.d.ts +2 -0
  47. package/dist/nodes/Msdefender/resources/machineAction/isolateDevice.js +37 -0
  48. package/dist/nodes/Msdefender/resources/machineAction/isolateDevice.js.map +1 -0
  49. package/dist/nodes/Msdefender/resources/machineAction/listMachineActions.d.ts +2 -0
  50. package/dist/nodes/Msdefender/resources/machineAction/listMachineActions.js +116 -0
  51. package/dist/nodes/Msdefender/resources/machineAction/listMachineActions.js.map +1 -0
  52. package/dist/nodes/Msdefender/resources/machineAction/offboardMachine.d.ts +2 -0
  53. package/dist/nodes/Msdefender/resources/machineAction/offboardMachine.js +29 -0
  54. package/dist/nodes/Msdefender/resources/machineAction/offboardMachine.js.map +1 -0
  55. package/dist/nodes/Msdefender/resources/machineAction/releaseFromIsolation.d.ts +2 -0
  56. package/dist/nodes/Msdefender/resources/machineAction/releaseFromIsolation.js +37 -0
  57. package/dist/nodes/Msdefender/resources/machineAction/releaseFromIsolation.js.map +1 -0
  58. package/dist/nodes/Msdefender/resources/machineAction/runAntivirusScan.d.ts +2 -0
  59. package/dist/nodes/Msdefender/resources/machineAction/runAntivirusScan.js +73 -0
  60. package/dist/nodes/Msdefender/resources/machineAction/runAntivirusScan.js.map +1 -0
  61. package/dist/nodes/Msdefender/shared/odataProperties.d.ts +2 -0
  62. package/dist/nodes/Msdefender/shared/odataProperties.js +91 -0
  63. package/dist/nodes/Msdefender/shared/odataProperties.js.map +1 -0
  64. package/dist/nodes/Msdefender/shared/utils.d.ts +1 -0
  65. package/dist/nodes/Msdefender/shared/utils.js +20 -0
  66. package/dist/nodes/Msdefender/shared/utils.js.map +1 -0
  67. package/dist/nodes/Msdefender/vulnerability/getAll.d.ts +2 -0
  68. package/dist/nodes/Msdefender/vulnerability/getAll.js +78 -0
  69. package/dist/nodes/Msdefender/vulnerability/getAll.js.map +1 -0
  70. package/dist/nodes/Msdefender/vulnerability/getByCve.d.ts +2 -0
  71. package/dist/nodes/Msdefender/vulnerability/getByCve.js +30 -0
  72. package/dist/nodes/Msdefender/vulnerability/getByCve.js.map +1 -0
  73. package/dist/nodes/Msdefender/vulnerability/getByMachineAndSoftware.d.ts +2 -0
  74. package/dist/nodes/Msdefender/vulnerability/getByMachineAndSoftware.js +116 -0
  75. package/dist/nodes/Msdefender/vulnerability/getByMachineAndSoftware.js.map +1 -0
  76. package/dist/nodes/Msdefender/vulnerability/getMachinesByCve.d.ts +2 -0
  77. package/dist/nodes/Msdefender/vulnerability/getMachinesByCve.js +30 -0
  78. package/dist/nodes/Msdefender/vulnerability/getMachinesByCve.js.map +1 -0
  79. package/dist/nodes/Msdefender/vulnerability/index.d.ts +2 -0
  80. package/dist/nodes/Msdefender/vulnerability/index.js +65 -0
  81. package/dist/nodes/Msdefender/vulnerability/index.js.map +1 -0
  82. package/dist/package.json +50 -0
  83. package/dist/tsconfig.tsbuildinfo +1 -0
  84. package/package.json +50 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Frode Hus
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,83 @@
1
+ # n8n-nodes-msdefender
2
+
3
+ [![CI](https://github.com/FrodeHus/n8n-nodes-msdefender/actions/workflows/ci.yml/badge.svg)](https://github.com/FrodeHus/n8n-nodes-msdefender/actions/workflows/ci.yml)
4
+
5
+
6
+ This is an n8n community node. It lets you use Microsoft Defender in your n8n workflows.
7
+
8
+ Microsoft Defender is a comprehensive security solution that helps protect your devices and data from threats.
9
+ This node allows you to interact with the Microsoft Defender API to perform various security operations, such as managing devices, retrieving threat intelligence, and more.
10
+
11
+ [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/sustainable-use-license/) workflow automation platform.
12
+
13
+ [Installation](#installation)
14
+ [Operations](#operations)
15
+ [Credentials](#credentials)
16
+ [Compatibility](#compatibility)
17
+ [Usage](#usage)
18
+ [Resources](#resources)
19
+ [Version history](#version-history)
20
+
21
+ ## Installation
22
+
23
+ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes/installation/) in the n8n community nodes documentation.
24
+
25
+ ## Operations
26
+
27
+ - Advanced Query: Run advanced queries against Microsoft Defender.
28
+ - Machine: Manage and retrieve information about devices.
29
+ - Add Or Remove Tag For Machine
30
+ - Find By Tag
31
+ - Get Many: Retrieve many machines.
32
+ - Get Security Recommendations For Machine
33
+ - List Installed Software For Machine
34
+ - Exposure
35
+ - Get Current Exposure Score
36
+ - Get Exposure Score By Machine Groups.
37
+ - Machine Actions
38
+ - Isolate Machine
39
+ - Release Machine from Isolation
40
+ - List Machine Actions
41
+ - Offboard Machine
42
+ - Cancel Machine Action
43
+ - Run Antivirus Scan
44
+ - Vulnerability
45
+ - Get All Vulnerabilities
46
+ - Get Machines By CVE
47
+ - Get By Machine And Software
48
+
49
+ ## Credentials
50
+
51
+ To use this node, you need to set up an Entra ID (Azure AD) application and obtain the necessary credentials to access the Microsoft Defender API.
52
+
53
+ 1. Register an application in the [Azure Portal](https://portal.azure.com/).
54
+ 2. Assign the required API permissions to the application for Microsoft Defender.
55
+ - Application permissions: `AdvancedQuery.Read.All`, `Machine.Read.All`, `Score.Read.All`, `Machine.Isolate`
56
+ 3. Grant admin consent for the permissions.
57
+ 4. Generate a client secret for the application.
58
+ 5. Note down the Application (client) ID, Directory (tenant) ID, and client secret.
59
+
60
+ ![Entra ID App Permissions](/images/app-permissions.png)
61
+
62
+ When configuring the Microsoft Defender node in n8n, use the following credentials:
63
+ - **Client ID**: The Application (client) ID from your Azure AD application.
64
+ - **Client Secret**: The client secret generated for your Azure AD application.
65
+ - **Access Token URL**: https://login.microsoftonline.com/<your-tenant-id>/oauth2/v2.0/token
66
+
67
+
68
+
69
+ ## Compatibility
70
+
71
+ This node is compatible with latest n8n versions.
72
+
73
+ ## Usage
74
+
75
+ [Try it out](https://docs.n8n.io/try-it-out/)
76
+
77
+ ## Resources
78
+
79
+ * [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
80
+
81
+ ## Version history
82
+
83
+ - 0.1.0 Initial release with Advanced Query and Machine operations.
@@ -0,0 +1,9 @@
1
+ import type { Icon, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class MsdefenderOAuth2Api implements ICredentialType {
3
+ name: string;
4
+ extends: string[];
5
+ displayName: string;
6
+ icon: Icon;
7
+ documentationUrl: string;
8
+ properties: INodeProperties[];
9
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MsdefenderOAuth2Api = void 0;
4
+ class MsdefenderOAuth2Api {
5
+ constructor() {
6
+ this.name = 'msdefenderOAuth2Api';
7
+ this.extends = ['oAuth2Api'];
8
+ this.displayName = 'Microsoft Defender OAuth2 API';
9
+ this.icon = {
10
+ light: 'file:../icons/ms-defender.svg',
11
+ dark: 'file:../icons/ms-defender.dark.svg',
12
+ };
13
+ this.documentationUrl = 'https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-client-creds-grant-flow';
14
+ this.properties = [
15
+ {
16
+ displayName: 'Grant Type',
17
+ name: 'grantType',
18
+ type: 'hidden',
19
+ default: 'clientCredentials',
20
+ },
21
+ {
22
+ displayName: 'Access Token URL',
23
+ name: 'accessTokenUrl',
24
+ type: 'string',
25
+ default: 'https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token',
26
+ },
27
+ {
28
+ displayName: 'Auth URI Query Parameters',
29
+ name: 'authQueryParameters',
30
+ type: 'hidden',
31
+ default: '',
32
+ },
33
+ {
34
+ displayName: 'Scope',
35
+ name: 'scope',
36
+ type: 'hidden',
37
+ default: 'https://api.securitycenter.microsoft.com/.default',
38
+ },
39
+ {
40
+ displayName: 'Authentication',
41
+ name: 'authentication',
42
+ type: 'hidden',
43
+ default: 'body',
44
+ },
45
+ ];
46
+ }
47
+ }
48
+ exports.MsdefenderOAuth2Api = MsdefenderOAuth2Api;
49
+ //# sourceMappingURL=MsdefenderOAuth2Api.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MsdefenderOAuth2Api.credentials.js","sourceRoot":"","sources":["../../credentials/MsdefenderOAuth2Api.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,mBAAmB;IAAhC;QACC,SAAI,GAAG,qBAAqB,CAAC;QAE7B,YAAO,GAAG,CAAC,WAAW,CAAC,CAAC;QAExB,gBAAW,GAAG,+BAA+B,CAAC;QAC9C,SAAI,GAAS;YACZ,KAAK,EAAE,+BAA+B;YACtC,IAAI,EAAE,oCAAoC;SAC1C,CAAC;QAGF,qBAAgB,GACf,6FAA6F,CAAC;QAE/F,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,mBAAmB;aAC5B;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,8DAA8D;aACvE;YACD;gBACC,WAAW,EAAE,2BAA2B;gBACxC,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,mDAAmD;aAC5D;YACD;gBACC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;aACf;SACD,CAAC;IACH,CAAC;CAAA;AA/CD,kDA+CC"}
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="240px" height="240px"><path fill="#0370c8" d="M24,44c-0.552,0-1-0.448-1-1s0.448-1,1-1V44z"/><path fill="#0f5094" d="M25,43c0,0.552-0.448,1-1,1v-2C24.552,42,25,42.448,25,43z"/><circle cx="42" cy="11" r="1" fill="#0883d9"/><circle cx="6" cy="11" r="1" fill="#33bff0"/><path fill="#0f5094" d="M24,43l0.427,0.907c0,0,15.144-7.9,18.08-19.907H24V43z"/><path fill="#0883d9" d="M43,11l-1-1c-11.122,0-11.278-6-18-6v20h18.507C42.822,22.712,43,21.378,43,20C43,16.856,43,11,43,11 z"/><path fill="#0370c8" d="M24,43l-0.427,0.907c0,0-15.144-7.9-18.08-19.907H24V43z"/><path fill="#33bff0" d="M5,11l1-1c11.122,0,11.278-6,18-6v20H5.493C5.178,22.712,5,21.378,5,20C5,16.856,5,11,5,11z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="240px" height="240px"><path fill="#0370c8" d="M24,44c-0.552,0-1-0.448-1-1s0.448-1,1-1V44z"/><path fill="#0f5094" d="M25,43c0,0.552-0.448,1-1,1v-2C24.552,42,25,42.448,25,43z"/><circle cx="42" cy="11" r="1" fill="#0883d9"/><circle cx="6" cy="11" r="1" fill="#33bff0"/><path fill="#0f5094" d="M24,43l0.427,0.907c0,0,15.144-7.9,18.08-19.907H24V43z"/><path fill="#0883d9" d="M43,11l-1-1c-11.122,0-11.278-6-18-6v20h18.507C42.822,22.712,43,21.378,43,20C43,16.856,43,11,43,11 z"/><path fill="#0370c8" d="M24,43l-0.427,0.907c0,0-15.144-7.9-18.08-19.907H24V43z"/><path fill="#33bff0" d="M5,11l1-1c11.122,0,11.278-6,18-6v20H5.493C5.178,22.712,5,21.378,5,20C5,16.856,5,11,5,11z"/></svg>
Binary file
@@ -0,0 +1,4 @@
1
+ import { type INodeType, type INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class Msdefender implements INodeType {
3
+ description: INodeTypeDescription;
4
+ }
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Msdefender = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const machine_1 = require("./resources/machine");
6
+ const advancedQuery_1 = require("./resources/advancedQuery");
7
+ const exposure_1 = require("./resources/exposure");
8
+ const machineAction_1 = require("./resources/machineAction");
9
+ const vulnerability_1 = require("./vulnerability");
10
+ class Msdefender {
11
+ constructor() {
12
+ this.description = {
13
+ displayName: 'Microsoft Defender API',
14
+ name: 'msdefender',
15
+ icon: {
16
+ light: 'file:../../icons/ms-defender.svg',
17
+ dark: 'file:../../icons/ms-defender.dark.svg',
18
+ },
19
+ group: ['transform'],
20
+ version: 1,
21
+ subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
22
+ description: 'Interact with the Microsoft Defender API',
23
+ defaults: {
24
+ name: 'Microsoft Defender API',
25
+ },
26
+ usableAsTool: true,
27
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
28
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
29
+ credentials: [
30
+ {
31
+ name: 'msdefenderOAuth2Api',
32
+ required: true,
33
+ displayOptions: {
34
+ show: {
35
+ authentication: ['oAuth2'],
36
+ },
37
+ },
38
+ },
39
+ ],
40
+ requestDefaults: {
41
+ baseURL: 'https://api.securitycenter.microsoft.com/',
42
+ headers: {
43
+ Accept: 'application/json',
44
+ 'Content-Type': 'application/json',
45
+ },
46
+ },
47
+ properties: [
48
+ {
49
+ displayName: 'Authentication',
50
+ name: 'authentication',
51
+ type: 'options',
52
+ options: [
53
+ {
54
+ name: 'OAuth2',
55
+ value: 'oAuth2',
56
+ },
57
+ ],
58
+ default: 'oAuth2',
59
+ },
60
+ {
61
+ displayName: 'Resource',
62
+ name: 'resource',
63
+ type: 'options',
64
+ noDataExpression: true,
65
+ options: [
66
+ {
67
+ name: 'Advanced Query',
68
+ value: 'advancedQuery',
69
+ },
70
+ {
71
+ name: 'Exposure Score',
72
+ value: 'exposure',
73
+ },
74
+ {
75
+ name: 'Machine',
76
+ value: 'machine',
77
+ },
78
+ {
79
+ name: 'Machine Action',
80
+ value: 'machineAction',
81
+ },
82
+ {
83
+ name: 'Vulnerability',
84
+ value: 'vulnerability',
85
+ },
86
+ ],
87
+ default: 'advancedQuery',
88
+ },
89
+ ...machine_1.machineDescription,
90
+ ...advancedQuery_1.advancedQueryDescription,
91
+ ...exposure_1.exposureDescription,
92
+ ...machineAction_1.machineActionsDescription,
93
+ ...vulnerability_1.vulnerabilityDescription,
94
+ ],
95
+ };
96
+ }
97
+ }
98
+ exports.Msdefender = Msdefender;
99
+ //# sourceMappingURL=Msdefender.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Msdefender.node.js","sourceRoot":"","sources":["../../../nodes/Msdefender/Msdefender.node.ts"],"names":[],"mappings":";;;AAAA,+CAA8F;AAC9F,iDAAyD;AACzD,6DAAqE;AACrE,mDAA2D;AAC3D,6DAAsE;AACtE,mDAA2D;AAE3D,MAAa,UAAU;IAAvB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,wBAAwB;YACrC,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE;gBACL,KAAK,EAAE,kCAAkC;gBACzC,IAAI,EAAE,uCAAuC;aAC7C;YACD,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,0CAA0C;YACvD,QAAQ,EAAE;gBACT,IAAI,EAAE,wBAAwB;aAC9B;YACD,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,qBAAqB;oBAC3B,QAAQ,EAAE,IAAI;oBACd,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,cAAc,EAAE,CAAC,QAAQ,CAAC;yBAC1B;qBACD;iBACD;aACD;YACD,eAAe,EAAE;gBAChB,OAAO,EAAE,2CAA2C;gBACpD,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,cAAc,EAAE,kBAAkB;iBAClC;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,gBAAgB;oBAC7B,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,QAAQ;4BACd,KAAK,EAAE,QAAQ;yBACf;qBACD;oBACD,OAAO,EAAE,QAAQ;iBACjB;gBACD;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,gBAAgB;4BACtB,KAAK,EAAE,eAAe;yBACtB;wBACD;4BACC,IAAI,EAAE,gBAAgB;4BACtB,KAAK,EAAE,UAAU;yBACjB;wBACD;4BACC,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,SAAS;yBAChB;wBACD;4BACC,IAAI,EAAE,gBAAgB;4BACtB,KAAK,EAAE,eAAe;yBACtB;wBACD;4BACC,IAAI,EAAE,eAAe;4BACrB,KAAK,EAAE,eAAe;yBACtB;qBACD;oBACD,OAAO,EAAE,eAAe;iBACxB;gBACD,GAAG,4BAAkB;gBACrB,GAAG,wCAAwB;gBAC3B,GAAG,8BAAmB;gBACtB,GAAG,yCAAyB;gBAC5B,GAAG,wCAAwB;aAC3B;SACD,CAAC;IACH,CAAC;CAAA;AArFD,gCAqFC"}
@@ -0,0 +1,20 @@
1
+ {
2
+ "node": "n8n-nodes-msdefender",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": [
6
+ "Development"
7
+ ],
8
+ "resources": {
9
+ "credentialDocumentation": [
10
+ {
11
+ "url": "https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-client-creds-grant-flow"
12
+ }
13
+ ],
14
+ "primaryDocumentation": [
15
+ {
16
+ "url": "https://github.com/frodehus/n8n-nodes-msdefender"
17
+ }
18
+ ]
19
+ }
20
+ }
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const advancedQueryDescription: INodeProperties[];
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.advancedQueryDescription = void 0;
4
+ const run_1 = require("./run");
5
+ const showOnlyForAdvancedQuery = {
6
+ resource: ['advancedQuery'],
7
+ };
8
+ exports.advancedQueryDescription = [
9
+ {
10
+ displayName: 'Operation',
11
+ name: 'operation',
12
+ type: 'options',
13
+ noDataExpression: true,
14
+ displayOptions: {
15
+ show: showOnlyForAdvancedQuery,
16
+ },
17
+ options: [
18
+ {
19
+ name: 'Run',
20
+ value: 'run',
21
+ action: 'Run advanced query',
22
+ description: 'Run advanced query using KQL',
23
+ routing: {
24
+ request: {
25
+ method: 'POST',
26
+ url: '/api/advancedqueries/run',
27
+ },
28
+ },
29
+ },
30
+ ],
31
+ default: 'run',
32
+ },
33
+ ...run_1.advancedQueryRunDescription,
34
+ ];
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../nodes/Msdefender/resources/advancedQuery/index.ts"],"names":[],"mappings":";;;AACA,+BAAoD;AAEpD,MAAM,wBAAwB,GAAG;IAChC,QAAQ,EAAE,CAAC,eAAe,CAAC;CAC3B,CAAC;AAEW,QAAA,wBAAwB,GAAsB;IAC1D;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE;YACf,IAAI,EAAE,wBAAwB;SAC9B;QACD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,oBAAoB;gBAC5B,WAAW,EAAE,8BAA8B;gBAC3C,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,MAAM;wBACd,GAAG,EAAE,0BAA0B;qBAC/B;iBACD;aACD;SACD;QACD,OAAO,EAAE,KAAK;KACd;IACD,GAAG,iCAA2B;CAC9B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const advancedQueryRunDescription: INodeProperties[];
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.advancedQueryRunDescription = void 0;
4
+ const showOnlyForAdvancedQueryRun = {
5
+ operation: ['run'],
6
+ resource: ['advancedQuery'],
7
+ };
8
+ exports.advancedQueryRunDescription = [
9
+ {
10
+ displayName: 'KQL Query',
11
+ name: 'kqlQuery',
12
+ required: true,
13
+ type: 'string',
14
+ displayOptions: {
15
+ show: {
16
+ ...showOnlyForAdvancedQueryRun,
17
+ },
18
+ },
19
+ default: 'DeviceInfo | take 5',
20
+ routing: {
21
+ send: {
22
+ type: 'body',
23
+ property: 'Query',
24
+ },
25
+ },
26
+ description: 'KQL query to run',
27
+ },
28
+ ];
29
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../../nodes/Msdefender/resources/advancedQuery/run.ts"],"names":[],"mappings":";;;AAEA,MAAM,2BAA2B,GAAG;IACnC,SAAS,EAAE,CAAC,KAAK,CAAC;IAClB,QAAQ,EAAE,CAAC,eAAe,CAAC;CAC3B,CAAC;AAEW,QAAA,2BAA2B,GAAsB;IAC7D;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE;YACf,IAAI,EAAE;gBACL,GAAG,2BAA2B;aAC9B;SACD;QACD,OAAO,EAAE,qBAAqB;QAC9B,OAAO,EAAE;YACR,IAAI,EAAE;gBACL,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO;aACjB;SACD;QACD,WAAW,EAAE,kBAAkB;KAC/B;CACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const exposureDescription: INodeProperties[];
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exposureDescription = void 0;
4
+ const showOnlyForExposure = {
5
+ resource: ['exposure'],
6
+ };
7
+ exports.exposureDescription = [
8
+ {
9
+ displayName: 'Operation',
10
+ name: 'operation',
11
+ type: 'options',
12
+ noDataExpression: true,
13
+ displayOptions: {
14
+ show: showOnlyForExposure,
15
+ },
16
+ options: [
17
+ {
18
+ name: 'Current Exposure Score',
19
+ value: 'currentExposureScore',
20
+ action: 'Get current exposure score',
21
+ description: 'Get the exposure score',
22
+ routing: {
23
+ request: {
24
+ method: 'GET',
25
+ url: '/api/exposureScore',
26
+ },
27
+ },
28
+ },
29
+ {
30
+ name: 'Get By Machine Groups',
31
+ value: 'getByMachineGroups',
32
+ action: 'Get many exposure scores',
33
+ description: 'Retrieve exposure scores by machine groups',
34
+ routing: {
35
+ request: {
36
+ method: 'GET',
37
+ url: '/api/exposureScore/ByMachineGroups',
38
+ },
39
+ },
40
+ },
41
+ ],
42
+ default: 'currentExposureScore',
43
+ },
44
+ ];
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../nodes/Msdefender/resources/exposure/index.ts"],"names":[],"mappings":";;;AAEA,MAAM,mBAAmB,GAAG;IACxB,QAAQ,EAAE,CAAC,UAAU,CAAC;CACzB,CAAC;AAEW,QAAA,mBAAmB,GAAsB;IACrD;QACC,WAAW,EAAE,WAAW;QACxB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,SAAS;QACf,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE;YACf,IAAI,EAAE,mBAAmB;SACzB;QACD,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,wBAAwB;gBAC9B,KAAK,EAAE,sBAAsB;gBAC7B,MAAM,EAAE,4BAA4B;gBACpC,WAAW,EAAE,wBAAwB;gBACrC,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,oBAAoB;qBACzB;iBACD;aACD;YACD;gBACC,IAAI,EAAE,uBAAuB;gBAC7B,KAAK,EAAE,oBAAoB;gBAC3B,MAAM,EAAE,0BAA0B;gBAClC,WAAW,EAAE,4CAA4C;gBACzD,OAAO,EAAE;oBACR,OAAO,EAAE;wBACR,MAAM,EAAE,KAAK;wBACb,GAAG,EAAE,oCAAoC;qBACzC;iBACD;aACD;SACD;QACD,OAAO,EAAE,sBAAsB;KAC/B;CACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { INodeProperties } from "n8n-workflow";
2
+ export declare const addOrRemoveTagDescription: INodeProperties[];
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addOrRemoveTagDescription = void 0;
4
+ const showOnlyForAddOrRemoveTags = {
5
+ operation: ['addOrRemoveTag'],
6
+ resource: ['machine'],
7
+ };
8
+ exports.addOrRemoveTagDescription = [
9
+ {
10
+ displayName: 'Machine ID',
11
+ name: 'machineId',
12
+ type: 'string',
13
+ displayOptions: {
14
+ show: {
15
+ ...showOnlyForAddOrRemoveTags,
16
+ },
17
+ },
18
+ default: '',
19
+ required: true,
20
+ description: 'The ID of the machine to add or remove tags for',
21
+ routing: {
22
+ request: {
23
+ method: 'POST',
24
+ url: '=/api/machines/{{ $parameter.machineId }}/tags',
25
+ },
26
+ },
27
+ },
28
+ {
29
+ displayName: 'Tag',
30
+ name: 'tag',
31
+ type: 'string',
32
+ displayOptions: {
33
+ show: {
34
+ ...showOnlyForAddOrRemoveTags,
35
+ },
36
+ },
37
+ default: '',
38
+ required: true,
39
+ description: 'Tag to add or remove from the machine',
40
+ routing: {
41
+ send: {
42
+ type: 'body',
43
+ property: 'Value',
44
+ },
45
+ },
46
+ },
47
+ {
48
+ displayName: 'Action',
49
+ name: 'action',
50
+ type: 'options',
51
+ displayOptions: {
52
+ show: {
53
+ ...showOnlyForAddOrRemoveTags,
54
+ },
55
+ },
56
+ options: [
57
+ {
58
+ name: 'Add',
59
+ action: 'Add tag to machine',
60
+ value: 'add',
61
+ description: 'Add the tag to the machine',
62
+ },
63
+ {
64
+ name: 'Remove',
65
+ action: 'Remove tag from machine',
66
+ value: 'remove',
67
+ description: 'Remove the tag from the machine',
68
+ },
69
+ ],
70
+ default: 'add',
71
+ description: 'Whether to add or remove the tag from the machine',
72
+ routing: {
73
+ send: {
74
+ type: 'body',
75
+ property: 'Action',
76
+ },
77
+ },
78
+ }
79
+ ];
80
+ //# sourceMappingURL=addOrRemoveTag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addOrRemoveTag.js","sourceRoot":"","sources":["../../../../../nodes/Msdefender/resources/machine/addOrRemoveTag.ts"],"names":[],"mappings":";;;AAEA,MAAM,0BAA0B,GAAG;IAC/B,SAAS,EAAE,CAAC,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,CAAC,SAAS,CAAC;CACxB,CAAC;AAEW,QAAA,yBAAyB,GAAsB;IACxD;QACI,WAAW,EAAE,YAAY;QACzB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE;YACZ,IAAI,EAAE;gBACF,GAAG,0BAA0B;aAChC;SACJ;QACD,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,iDAAiD;QAC9D,OAAO,EAAE;YACL,OAAO,EAAE;gBACL,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,gDAAgD;aACxD;SACJ;KACJ;IACD;QACI,WAAW,EAAE,KAAK;QAClB,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE;YACZ,IAAI,EAAE;gBACF,GAAG,0BAA0B;aAChC;SACJ;QACD,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,uCAAuC;QACpD,OAAO,EAAE;YACL,IAAI,EAAE;gBACF,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,OAAO;aACpB;SACJ;KACJ;IACD;QACI,WAAW,EAAE,QAAQ;QACrB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,SAAS;QACf,cAAc,EAAE;YACZ,IAAI,EAAE;gBACF,GAAG,0BAA0B;aAChC;SACJ;QACD,OAAO,EAAE;YACL;gBACI,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,oBAAoB;gBAC5B,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,4BAA4B;aAC5C;YACD;gBACI,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,yBAAyB;gBACjC,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,iCAAiC;aACjD;SACJ;QACD,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE;YACL,IAAI,EAAE;gBACF,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,QAAQ;aACrB;SACJ;KACJ;CACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { INodeProperties } from "n8n-workflow";
2
+ export declare const findByTagDescription: INodeProperties[];
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findByTagDescription = void 0;
4
+ const showOnlyForFindByTag = {
5
+ operation: ['findByTag'],
6
+ resource: ['machine'],
7
+ };
8
+ exports.findByTagDescription = [
9
+ {
10
+ displayName: 'Tag Name',
11
+ name: 'tagName',
12
+ type: 'string',
13
+ displayOptions: {
14
+ show: {
15
+ ...showOnlyForFindByTag,
16
+ },
17
+ },
18
+ default: '',
19
+ required: true,
20
+ description: 'The name of the tag to find machines by',
21
+ routing: {
22
+ request: {
23
+ method: 'GET',
24
+ url: '=/api/machines/findByTag/?tag={{ $parameter.tagName }}',
25
+ },
26
+ },
27
+ },
28
+ {
29
+ displayName: 'Use StartsWith Filter',
30
+ name: 'useStartsWithFilter',
31
+ type: 'boolean',
32
+ displayOptions: {
33
+ show: {
34
+ ...showOnlyForFindByTag,
35
+ },
36
+ },
37
+ default: false,
38
+ description: 'Whether to use a startsWith filter for the tag name',
39
+ routing: {
40
+ send: {
41
+ type: 'query',
42
+ property: 'useStartsWithFilter',
43
+ },
44
+ },
45
+ },
46
+ ];
47
+ //# sourceMappingURL=findByTag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findByTag.js","sourceRoot":"","sources":["../../../../../nodes/Msdefender/resources/machine/findByTag.ts"],"names":[],"mappings":";;;AAEA,MAAM,oBAAoB,GAAG;IACzB,SAAS,EAAE,CAAC,WAAW,CAAC;IACxB,QAAQ,EAAE,CAAC,SAAS,CAAC;CACxB,CAAC;AAEW,QAAA,oBAAoB,GAAsB;IACtD;QACC,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE;YACf,IAAI,EAAE;gBACL,GAAG,oBAAoB;aACvB;SACD;QACD,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,yCAAyC;QACtD,OAAO,EAAE;YACR,OAAO,EAAE;gBACR,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,wDAAwD;aAC7D;SACD;KACD;IACD;QACC,WAAW,EAAE,uBAAuB;QACpC,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,SAAS;QACf,cAAc,EAAE;YACf,IAAI,EAAE;gBACL,GAAG,oBAAoB;aACvB;SACD;QACD,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,qDAAqD;QAClE,OAAO,EAAE;YACR,IAAI,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,qBAAqB;aAC/B;SACD;KACD;CACD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const getAllMachineDescription: INodeProperties[];