n8n-nodes-base 1.92.0 → 1.94.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/dist/credentials/AirtopApi.credentials.js +2 -1
- package/dist/credentials/AirtopApi.credentials.js.map +1 -1
- package/dist/credentials/JinaAiApi.credentials.js +1 -1
- package/dist/credentials/JinaAiApi.credentials.js.map +1 -1
- package/dist/credentials/MicrosoftSharePointOAuth2Api.credentials.js +0 -9
- package/dist/credentials/MicrosoftSharePointOAuth2Api.credentials.js.map +1 -1
- package/dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js +13 -0
- package/dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js.map +1 -1
- package/dist/credentials/Snowflake.credentials.js +46 -2
- package/dist/credentials/Snowflake.credentials.js.map +1 -1
- package/dist/known/credentials.json +10 -1
- package/dist/known/nodes.json +20 -4
- package/dist/methods/defined.json +6 -0
- package/dist/methods/referenced.json +3 -0
- package/dist/nodes/Airtop/Airtop.node.js +14 -8
- package/dist/nodes/Airtop/Airtop.node.js.map +1 -1
- package/dist/nodes/Airtop/GenericFunctions.js +87 -15
- package/dist/nodes/Airtop/GenericFunctions.js.map +1 -1
- package/dist/nodes/Airtop/actions/common/fields.js +9 -0
- package/dist/nodes/Airtop/actions/common/fields.js.map +1 -1
- package/dist/nodes/Airtop/actions/common/output.utils.js +79 -0
- package/dist/nodes/Airtop/actions/common/output.utils.js.map +1 -0
- package/dist/nodes/Airtop/actions/common/session.utils.js +2 -2
- package/dist/nodes/Airtop/actions/common/session.utils.js.map +1 -1
- package/dist/nodes/Airtop/actions/extraction/getPaginated.operation.js +13 -4
- package/dist/nodes/Airtop/actions/extraction/getPaginated.operation.js.map +1 -1
- package/dist/nodes/Airtop/actions/extraction/query.operation.js +21 -3
- package/dist/nodes/Airtop/actions/extraction/query.operation.js.map +1 -1
- package/dist/nodes/Airtop/actions/extraction/scrape.operation.js +2 -1
- package/dist/nodes/Airtop/actions/extraction/scrape.operation.js.map +1 -1
- package/dist/nodes/Airtop/actions/file/File.resource.js +104 -0
- package/dist/nodes/Airtop/actions/file/File.resource.js.map +1 -0
- package/dist/nodes/Airtop/actions/file/delete.operation.js +60 -0
- package/dist/nodes/Airtop/actions/file/delete.operation.js.map +1 -0
- package/dist/nodes/Airtop/actions/file/get.operation.js +91 -0
- package/dist/nodes/Airtop/actions/file/get.operation.js.map +1 -0
- package/dist/nodes/Airtop/actions/file/getMany.operation.js +100 -0
- package/dist/nodes/Airtop/actions/file/getMany.operation.js.map +1 -0
- package/dist/nodes/Airtop/actions/file/helpers.js +199 -0
- package/dist/nodes/Airtop/actions/file/helpers.js.map +1 -0
- package/dist/nodes/Airtop/actions/file/load.operation.js +85 -0
- package/dist/nodes/Airtop/actions/file/load.operation.js.map +1 -0
- package/dist/nodes/Airtop/actions/file/upload.operation.js +186 -0
- package/dist/nodes/Airtop/actions/file/upload.operation.js.map +1 -0
- package/dist/nodes/Airtop/actions/interaction/Interaction.resource.js +22 -1
- package/dist/nodes/Airtop/actions/interaction/Interaction.resource.js.map +1 -1
- package/dist/nodes/Airtop/actions/interaction/fill.operation.js +89 -0
- package/dist/nodes/Airtop/actions/interaction/fill.operation.js.map +1 -0
- package/dist/nodes/Airtop/actions/interaction/scroll.operation.js +219 -0
- package/dist/nodes/Airtop/actions/interaction/scroll.operation.js.map +1 -0
- package/dist/nodes/Airtop/actions/node.type.js.map +1 -1
- package/dist/nodes/Airtop/actions/router.js +13 -4
- package/dist/nodes/Airtop/actions/router.js.map +1 -1
- package/dist/nodes/Airtop/actions/session/create.operation.js +85 -32
- package/dist/nodes/Airtop/actions/session/create.operation.js.map +1 -1
- package/dist/nodes/Airtop/actions/window/Window.resource.js +2 -1
- package/dist/nodes/Airtop/actions/window/Window.resource.js.map +1 -1
- package/dist/nodes/Airtop/actions/window/create.operation.js +1 -1
- package/dist/nodes/Airtop/actions/window/create.operation.js.map +1 -1
- package/dist/nodes/Airtop/actions/window/takeScreenshot.operation.js +26 -3
- package/dist/nodes/Airtop/actions/window/takeScreenshot.operation.js.map +1 -1
- package/dist/nodes/Airtop/constants.js +38 -5
- package/dist/nodes/Airtop/constants.js.map +1 -1
- package/dist/nodes/Airtop/countries.js +1026 -0
- package/dist/nodes/Airtop/countries.js.map +1 -0
- package/dist/nodes/Airtop/transport/index.js +6 -3
- package/dist/nodes/Airtop/transport/index.js.map +1 -1
- package/dist/nodes/Airtop/transport/types.js.map +1 -1
- package/dist/nodes/Aws/IAM/AwsIam.node.js +95 -0
- package/dist/nodes/Aws/IAM/AwsIam.node.js.map +1 -0
- package/dist/nodes/Aws/IAM/AwsIam.node.json +18 -0
- package/dist/nodes/Aws/IAM/AwsIam.svg +18 -0
- package/dist/nodes/Aws/IAM/descriptions/common.js +188 -0
- package/dist/nodes/Aws/IAM/descriptions/common.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/group/Group.resource.js +175 -0
- package/dist/nodes/Aws/IAM/descriptions/group/Group.resource.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/group/create.operation.js +66 -0
- package/dist/nodes/Aws/IAM/descriptions/group/create.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/group/delete.operation.js +43 -0
- package/dist/nodes/Aws/IAM/descriptions/group/delete.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/group/get.operation.js +50 -0
- package/dist/nodes/Aws/IAM/descriptions/group/get.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/group/getAll.operation.js +47 -0
- package/dist/nodes/Aws/IAM/descriptions/group/getAll.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/group/update.operation.js +70 -0
- package/dist/nodes/Aws/IAM/descriptions/group/update.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/index.js +42 -0
- package/dist/nodes/Aws/IAM/descriptions/index.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/user/User.resource.js +231 -0
- package/dist/nodes/Aws/IAM/descriptions/user/User.resource.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/user/addToGroup.operation.js +47 -0
- package/dist/nodes/Aws/IAM/descriptions/user/addToGroup.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/user/create.operation.js +118 -0
- package/dist/nodes/Aws/IAM/descriptions/user/create.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/user/delete.operation.js +43 -0
- package/dist/nodes/Aws/IAM/descriptions/user/delete.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/user/get.operation.js +43 -0
- package/dist/nodes/Aws/IAM/descriptions/user/get.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/user/getAll.operation.js +66 -0
- package/dist/nodes/Aws/IAM/descriptions/user/getAll.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/user/removeFromGroup.operation.js +74 -0
- package/dist/nodes/Aws/IAM/descriptions/user/removeFromGroup.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/descriptions/user/update.operation.js +68 -0
- package/dist/nodes/Aws/IAM/descriptions/user/update.operation.js.map +1 -0
- package/dist/nodes/Aws/IAM/helpers/constants.js +47 -0
- package/dist/nodes/Aws/IAM/helpers/constants.js.map +1 -0
- package/dist/nodes/Aws/IAM/helpers/errorHandler.js +90 -0
- package/dist/nodes/Aws/IAM/helpers/errorHandler.js.map +1 -0
- package/dist/nodes/Aws/IAM/helpers/types.js +17 -0
- package/dist/nodes/Aws/IAM/helpers/types.js.map +1 -0
- package/dist/nodes/Aws/IAM/helpers/utils.js +279 -0
- package/dist/nodes/Aws/IAM/helpers/utils.js.map +1 -0
- package/dist/nodes/Aws/IAM/methods/index.js +39 -0
- package/dist/nodes/Aws/IAM/methods/index.js.map +1 -0
- package/dist/nodes/Aws/IAM/methods/listSearch.js +132 -0
- package/dist/nodes/Aws/IAM/methods/listSearch.js.map +1 -0
- package/dist/nodes/Aws/IAM/transport/index.js +64 -0
- package/dist/nodes/Aws/IAM/transport/index.js.map +1 -0
- package/dist/nodes/Cron/Cron.node.js +1 -1
- package/dist/nodes/Cron/Cron.node.js.map +1 -1
- package/dist/nodes/EmailReadImap/v1/EmailReadImapV1.node.js +2 -2
- package/dist/nodes/EmailReadImap/v1/EmailReadImapV1.node.js.map +1 -1
- package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js +2 -2
- package/dist/nodes/EmailReadImap/v2/EmailReadImapV2.node.js.map +1 -1
- package/dist/nodes/Evaluation/Evaluation/Description.node.js +146 -0
- package/dist/nodes/Evaluation/Evaluation/Description.node.js.map +1 -0
- package/dist/nodes/Evaluation/Evaluation/Evaluation.node.ee.js +117 -0
- package/dist/nodes/Evaluation/Evaluation/Evaluation.node.ee.js.map +1 -0
- package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js +187 -0
- package/dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js.map +1 -0
- package/dist/nodes/Evaluation/methods/index.js +42 -0
- package/dist/nodes/Evaluation/methods/index.js.map +1 -0
- package/dist/nodes/Evaluation/methods/loadOptions.js +40 -0
- package/dist/nodes/Evaluation/methods/loadOptions.js.map +1 -0
- package/dist/nodes/Evaluation/utils/evaluationTriggerUtils.js +119 -0
- package/dist/nodes/Evaluation/utils/evaluationTriggerUtils.js.map +1 -0
- package/dist/nodes/Evaluation/utils/evaluationUtils.js +171 -0
- package/dist/nodes/Evaluation/utils/evaluationUtils.js.map +1 -0
- package/dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js +4 -3
- package/dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js.map +1 -1
- package/dist/nodes/Form/common.descriptions.js +2 -2
- package/dist/nodes/Form/common.descriptions.js.map +1 -1
- package/dist/nodes/Google/Drive/v2/actions/file/upload.operation.js +4 -1
- package/dist/nodes/Google/Drive/v2/actions/file/upload.operation.js.map +1 -1
- package/dist/nodes/Google/Firebase/CloudFirestore/GenericFunctions.js +1 -2
- package/dist/nodes/Google/Firebase/CloudFirestore/GenericFunctions.js.map +1 -1
- package/dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js +113 -107
- package/dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js.map +1 -1
- package/dist/nodes/Google/Sheet/v2/actions/sheet/read.operation.js +52 -106
- package/dist/nodes/Google/Sheet/v2/actions/sheet/read.operation.js.map +1 -1
- package/dist/nodes/Google/Sheet/v2/actions/utils/readOperation.js +97 -0
- package/dist/nodes/Google/Sheet/v2/actions/utils/readOperation.js.map +1 -0
- package/dist/nodes/Google/Sheet/v2/actions/versionDescription.js +20 -17
- package/dist/nodes/Google/Sheet/v2/actions/versionDescription.js.map +1 -1
- package/dist/nodes/Google/YouTube/YouTube.node.js +4 -2
- package/dist/nodes/Google/YouTube/YouTube.node.js.map +1 -1
- package/dist/nodes/HttpRequest/GenericFunctions.js +1 -1
- package/dist/nodes/HttpRequest/GenericFunctions.js.map +1 -1
- package/dist/nodes/Interval/Interval.node.js +1 -1
- package/dist/nodes/Interval/Interval.node.js.map +1 -1
- package/dist/nodes/Jira/Jira.node.js +34 -15
- package/dist/nodes/Jira/Jira.node.js.map +1 -1
- package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js +2 -2
- package/dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js.map +1 -1
- package/dist/nodes/MQTT/MqttTrigger.node.js +2 -2
- package/dist/nodes/MQTT/MqttTrigger.node.js.map +1 -1
- package/dist/nodes/ManualTrigger/ManualTrigger.node.js +1 -1
- package/dist/nodes/ManualTrigger/ManualTrigger.node.js.map +1 -1
- package/dist/nodes/Merge/Merge.node.js +3 -2
- package/dist/nodes/Merge/Merge.node.js.map +1 -1
- package/dist/nodes/Merge/v3/actions/mode/combineBySql.js +42 -4
- package/dist/nodes/Merge/v3/actions/mode/combineBySql.js.map +1 -1
- package/dist/nodes/Merge/v3/actions/versionDescription.js +1 -1
- package/dist/nodes/Merge/v3/actions/versionDescription.js.map +1 -1
- package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js +93 -0
- package/dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/MicrosoftSharepoint.node.json +18 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/common.descriptions.js +190 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/common.descriptions.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/file/File.resource.js +108 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/file/File.resource.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/file/download.operation.js +62 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/file/download.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/file/update.operation.js +129 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/file/update.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/file/upload.operation.js +77 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/file/upload.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/index.js +45 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/index.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/Item.resource.js +175 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/Item.resource.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/create.operation.js +100 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/create.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/delete.operation.js +62 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/delete.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/get.operation.js +83 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/get.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/getAll.operation.js +203 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/getAll.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/update.operation.js +100 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/update.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/upsert.operation.js +100 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/item/upsert.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/list/List.resource.js +99 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/list/List.resource.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/list/get.operation.js +65 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/list/get.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/list/getAll.operation.js +105 -0
- package/dist/nodes/Microsoft/SharePoint/descriptions/list/getAll.operation.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/helpers/interfaces.js +17 -0
- package/dist/nodes/Microsoft/SharePoint/helpers/interfaces.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/helpers/utils.js +252 -0
- package/dist/nodes/Microsoft/SharePoint/helpers/utils.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/methods/index.js +42 -0
- package/dist/nodes/Microsoft/SharePoint/methods/index.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/methods/listSearch.js +222 -0
- package/dist/nodes/Microsoft/SharePoint/methods/listSearch.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/methods/resourceMapping.js +104 -0
- package/dist/nodes/Microsoft/SharePoint/methods/resourceMapping.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/test/credentials.js +54 -0
- package/dist/nodes/Microsoft/SharePoint/test/credentials.js.map +1 -0
- package/dist/nodes/Microsoft/SharePoint/transport/index.js +46 -0
- package/dist/nodes/Microsoft/SharePoint/transport/index.js.map +1 -0
- package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.js +387 -0
- package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.js.map +1 -0
- package/dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.json +18 -0
- package/dist/nodes/Microsoft/Teams/v2/helpers/types.js +17 -0
- package/dist/nodes/Microsoft/Teams/v2/helpers/types.js.map +1 -0
- package/dist/nodes/Microsoft/Teams/v2/helpers/utils-trigger.js +147 -0
- package/dist/nodes/Microsoft/Teams/v2/helpers/utils-trigger.js.map +1 -0
- package/dist/nodes/Microsoft/Teams/v2/transport/index.js.map +1 -1
- package/dist/nodes/MongoDb/GenericFunctions.js +9 -2
- package/dist/nodes/MongoDb/GenericFunctions.js.map +1 -1
- package/dist/nodes/MongoDb/MongoDb.node.js +25 -5
- package/dist/nodes/MongoDb/MongoDb.node.js.map +1 -1
- package/dist/nodes/PostBin/BinDescription.js +1 -1
- package/dist/nodes/PostBin/BinDescription.js.map +1 -1
- package/dist/nodes/PostBin/GenericFunctions.js +5 -5
- package/dist/nodes/PostBin/GenericFunctions.js.map +1 -1
- package/dist/nodes/PostBin/PostBin.node.js +1 -1
- package/dist/nodes/PostBin/PostBin.node.js.map +1 -1
- package/dist/nodes/PostBin/RequestDescription.js +2 -2
- package/dist/nodes/PostBin/RequestDescription.js.map +1 -1
- package/dist/nodes/Postgres/PostgresTrigger.node.js +2 -2
- package/dist/nodes/Postgres/PostgresTrigger.node.js.map +1 -1
- package/dist/nodes/RabbitMQ/RabbitMQTrigger.node.js +2 -2
- package/dist/nodes/RabbitMQ/RabbitMQTrigger.node.js.map +1 -1
- package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js +8 -3
- package/dist/nodes/RespondToWebhook/RespondToWebhook.node.js.map +1 -1
- package/dist/nodes/RespondToWebhook/utils.js +43 -0
- package/dist/nodes/RespondToWebhook/utils.js.map +1 -0
- package/dist/nodes/Schedule/ScheduleTrigger.node.js +1 -1
- package/dist/nodes/Schedule/ScheduleTrigger.node.js.map +1 -1
- package/dist/nodes/Snowflake/GenericFunctions.js +34 -2
- package/dist/nodes/Snowflake/GenericFunctions.js.map +1 -1
- package/dist/nodes/Snowflake/Snowflake.node.js +5 -7
- package/dist/nodes/Snowflake/Snowflake.node.js.map +1 -1
- package/dist/nodes/SseTrigger/SseTrigger.node.js +2 -2
- package/dist/nodes/SseTrigger/SseTrigger.node.js.map +1 -1
- package/dist/nodes/Telegram/Telegram.node.js +5 -1
- package/dist/nodes/Telegram/Telegram.node.js.map +1 -1
- package/dist/nodes/Transform/Summarize/utils.js +2 -1
- package/dist/nodes/Transform/Summarize/utils.js.map +1 -1
- package/dist/test/setup.js +1 -0
- package/dist/test/setup.js.map +1 -1
- package/dist/types/credentials.json +7 -7
- package/dist/types/nodes.json +27 -23
- package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js +12 -2
- package/dist/utils/workflowInputsResourceMapping/GenericFunctions.js.map +1 -1
- package/package.json +15 -12
- package/dist/nodes/EvaluationMetrics/EvaluationMetrics.node.js +0 -119
- package/dist/nodes/EvaluationMetrics/EvaluationMetrics.node.js.map +0 -1
- package/dist/nodes/EvaluationMetrics/EvaluationMetrics.node.json +0 -14
- /package/dist/{credentials/icons/SharePoint.svg → nodes/Microsoft/SharePoint/microsoftSharePoint.svg} +0 -0
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var utils_exports = {};
|
|
20
|
+
__export(utils_exports, {
|
|
21
|
+
deleteGroupMembers: () => deleteGroupMembers,
|
|
22
|
+
encodeBodyAsFormUrlEncoded: () => encodeBodyAsFormUrlEncoded,
|
|
23
|
+
findUsersForGroup: () => findUsersForGroup,
|
|
24
|
+
preprocessTags: () => preprocessTags,
|
|
25
|
+
removeUserFromGroups: () => removeUserFromGroups,
|
|
26
|
+
simplifyGetAllGroupsResponse: () => simplifyGetAllGroupsResponse,
|
|
27
|
+
simplifyGetAllUsersResponse: () => simplifyGetAllUsersResponse,
|
|
28
|
+
simplifyGetGroupsResponse: () => simplifyGetGroupsResponse,
|
|
29
|
+
validateName: () => validateName,
|
|
30
|
+
validatePath: () => validatePath,
|
|
31
|
+
validatePermissionsBoundary: () => validatePermissionsBoundary,
|
|
32
|
+
validateUserPath: () => validateUserPath
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(utils_exports);
|
|
35
|
+
var import_n8n_workflow = require("n8n-workflow");
|
|
36
|
+
var import_constants = require("./constants");
|
|
37
|
+
var import_listSearch = require("../methods/listSearch");
|
|
38
|
+
var import_transport = require("../transport");
|
|
39
|
+
async function encodeBodyAsFormUrlEncoded(requestOptions) {
|
|
40
|
+
if (requestOptions.body) {
|
|
41
|
+
requestOptions.body = new URLSearchParams(
|
|
42
|
+
requestOptions.body
|
|
43
|
+
).toString();
|
|
44
|
+
}
|
|
45
|
+
return requestOptions;
|
|
46
|
+
}
|
|
47
|
+
async function findUsersForGroup(groupName) {
|
|
48
|
+
const options = {
|
|
49
|
+
method: "POST",
|
|
50
|
+
url: "",
|
|
51
|
+
body: new URLSearchParams({
|
|
52
|
+
Action: "GetGroup",
|
|
53
|
+
Version: import_constants.CURRENT_VERSION,
|
|
54
|
+
GroupName: groupName
|
|
55
|
+
}).toString()
|
|
56
|
+
};
|
|
57
|
+
const responseData = await import_transport.awsApiRequest.call(this, options);
|
|
58
|
+
return responseData?.GetGroupResponse?.GetGroupResult?.Users ?? [];
|
|
59
|
+
}
|
|
60
|
+
async function simplifyGetGroupsResponse(_, response) {
|
|
61
|
+
const includeUsers = this.getNodeParameter("includeUsers", false);
|
|
62
|
+
const responseBody = response.body;
|
|
63
|
+
const groupData = responseBody.GetGroupResponse.GetGroupResult;
|
|
64
|
+
const group = groupData.Group;
|
|
65
|
+
return [
|
|
66
|
+
{ json: includeUsers ? { ...group, Users: groupData.Users ?? [] } : group }
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
async function simplifyGetAllGroupsResponse(items, response) {
|
|
70
|
+
const includeUsers = this.getNodeParameter("includeUsers", false);
|
|
71
|
+
const responseBody = response.body;
|
|
72
|
+
const groups = responseBody.ListGroupsResponse.ListGroupsResult.Groups ?? [];
|
|
73
|
+
if (groups.length === 0) {
|
|
74
|
+
return items;
|
|
75
|
+
}
|
|
76
|
+
if (!includeUsers) {
|
|
77
|
+
return this.helpers.returnJsonArray(groups);
|
|
78
|
+
}
|
|
79
|
+
const processedItems = [];
|
|
80
|
+
for (const group of groups) {
|
|
81
|
+
const users = await findUsersForGroup.call(this, group.GroupName);
|
|
82
|
+
processedItems.push({ ...group, Users: users });
|
|
83
|
+
}
|
|
84
|
+
return this.helpers.returnJsonArray(processedItems);
|
|
85
|
+
}
|
|
86
|
+
async function simplifyGetAllUsersResponse(_items, response) {
|
|
87
|
+
if (!response.body) {
|
|
88
|
+
return [];
|
|
89
|
+
}
|
|
90
|
+
const responseBody = response.body;
|
|
91
|
+
const users = responseBody?.ListUsersResponse?.ListUsersResult?.Users ?? [];
|
|
92
|
+
return this.helpers.returnJsonArray(users);
|
|
93
|
+
}
|
|
94
|
+
async function deleteGroupMembers(requestOptions) {
|
|
95
|
+
const groupName = this.getNodeParameter("group", void 0, { extractValue: true });
|
|
96
|
+
const users = await findUsersForGroup.call(this, groupName);
|
|
97
|
+
if (!users.length) {
|
|
98
|
+
return requestOptions;
|
|
99
|
+
}
|
|
100
|
+
await Promise.all(
|
|
101
|
+
users.map(async (user) => {
|
|
102
|
+
const userName = user.UserName;
|
|
103
|
+
if (!user.UserName) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
await import_transport.awsApiRequest.call(this, {
|
|
108
|
+
method: "POST",
|
|
109
|
+
url: "",
|
|
110
|
+
body: {
|
|
111
|
+
Action: "RemoveUserFromGroup",
|
|
112
|
+
GroupName: groupName,
|
|
113
|
+
UserName: userName,
|
|
114
|
+
Version: import_constants.CURRENT_VERSION
|
|
115
|
+
},
|
|
116
|
+
ignoreHttpStatusErrors: true
|
|
117
|
+
});
|
|
118
|
+
} catch (error) {
|
|
119
|
+
throw new import_n8n_workflow.NodeApiError(this.getNode(), error, {
|
|
120
|
+
message: `Failed to remove user "${userName}" from "${groupName}"!`
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
})
|
|
124
|
+
);
|
|
125
|
+
return requestOptions;
|
|
126
|
+
}
|
|
127
|
+
async function validatePath(requestOptions) {
|
|
128
|
+
const path = this.getNodeParameter("additionalFields.path");
|
|
129
|
+
if (path.length < 1 || path.length > 512) {
|
|
130
|
+
throw new import_n8n_workflow.NodeOperationError(
|
|
131
|
+
this.getNode(),
|
|
132
|
+
'The "Path" parameter must be between 1 and 512 characters long.'
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
const validPathRegex = /^\/[\u0021-\u007E]*\/$/;
|
|
136
|
+
if (!validPathRegex.test(path) && path !== "/") {
|
|
137
|
+
throw new import_n8n_workflow.NodeOperationError(
|
|
138
|
+
this.getNode(),
|
|
139
|
+
"Ensure the path is structured correctly, e.g. /division_abc/subdivision_xyz/"
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
return requestOptions;
|
|
143
|
+
}
|
|
144
|
+
async function validateUserPath(requestOptions) {
|
|
145
|
+
const prefix = this.getNodeParameter("additionalFields.pathPrefix");
|
|
146
|
+
let formattedPrefix = prefix;
|
|
147
|
+
if (!formattedPrefix.startsWith("/")) {
|
|
148
|
+
formattedPrefix = "/" + formattedPrefix;
|
|
149
|
+
}
|
|
150
|
+
if (!formattedPrefix.endsWith("/") && formattedPrefix !== "/") {
|
|
151
|
+
formattedPrefix = formattedPrefix + "/";
|
|
152
|
+
}
|
|
153
|
+
if (requestOptions.body && typeof requestOptions.body === "object") {
|
|
154
|
+
Object.assign(requestOptions.body, { PathPrefix: formattedPrefix });
|
|
155
|
+
}
|
|
156
|
+
const options = {
|
|
157
|
+
method: "POST",
|
|
158
|
+
url: "",
|
|
159
|
+
body: {
|
|
160
|
+
Action: "ListUsers",
|
|
161
|
+
Version: import_constants.CURRENT_VERSION
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
const responseData = await import_transport.awsApiRequest.call(this, options);
|
|
165
|
+
const users = responseData.ListUsersResponse.ListUsersResult.Users;
|
|
166
|
+
if (!users || users.length === 0) {
|
|
167
|
+
throw new import_n8n_workflow.NodeOperationError(
|
|
168
|
+
this.getNode(),
|
|
169
|
+
'No users found. Please adjust the "Path" parameter and try again.'
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
const userPaths = users.map((user) => user.Path).filter(Boolean);
|
|
173
|
+
const isPathValid = userPaths.some((path) => path?.startsWith(formattedPrefix));
|
|
174
|
+
if (!isPathValid) {
|
|
175
|
+
throw new import_n8n_workflow.NodeOperationError(
|
|
176
|
+
this.getNode(),
|
|
177
|
+
`The "${formattedPrefix}" path was not found in your users. Try entering a different path.`
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
return requestOptions;
|
|
181
|
+
}
|
|
182
|
+
async function validateName(requestOptions) {
|
|
183
|
+
const resource = this.getNodeParameter("resource");
|
|
184
|
+
const nameParam = resource === "user" ? "userName" : "groupName";
|
|
185
|
+
const name = this.getNodeParameter(nameParam);
|
|
186
|
+
const maxLength = resource === "user" ? 64 : 128;
|
|
187
|
+
const capitalizedResource = resource.replace(/^./, (c) => c.toUpperCase());
|
|
188
|
+
const validNamePattern = /^[a-zA-Z0-9-_]+$/;
|
|
189
|
+
const isInvalid = !validNamePattern.test(name) || name.length > maxLength;
|
|
190
|
+
if (/\s/.test(name)) {
|
|
191
|
+
throw new import_n8n_workflow.NodeOperationError(
|
|
192
|
+
this.getNode(),
|
|
193
|
+
`${capitalizedResource} name should not contain spaces.`
|
|
194
|
+
);
|
|
195
|
+
}
|
|
196
|
+
if (isInvalid) {
|
|
197
|
+
throw new import_n8n_workflow.NodeOperationError(
|
|
198
|
+
this.getNode(),
|
|
199
|
+
`${capitalizedResource} name can have up to ${maxLength} characters. Valid characters: letters, numbers, hyphens (-), and underscores (_).`
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
return requestOptions;
|
|
203
|
+
}
|
|
204
|
+
async function validatePermissionsBoundary(requestOptions) {
|
|
205
|
+
const permissionsBoundary = this.getNodeParameter(
|
|
206
|
+
"additionalFields.permissionsBoundary"
|
|
207
|
+
);
|
|
208
|
+
if (permissionsBoundary) {
|
|
209
|
+
const arnPattern = /^arn:aws:iam::\d{12}:policy\/[\w\-+\/=._]+$/;
|
|
210
|
+
if (!arnPattern.test(permissionsBoundary)) {
|
|
211
|
+
throw new import_n8n_workflow.NodeOperationError(
|
|
212
|
+
this.getNode(),
|
|
213
|
+
"Permissions boundaries must be provided in ARN format (e.g. arn:aws:iam::123456789012:policy/ExampleBoundaryPolicy). These can be found at the top of the permissions boundary detail page in the IAM dashboard."
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
if (requestOptions.body) {
|
|
217
|
+
Object.assign(requestOptions.body, { PermissionsBoundary: permissionsBoundary });
|
|
218
|
+
} else {
|
|
219
|
+
requestOptions.body = {
|
|
220
|
+
PermissionsBoundary: permissionsBoundary
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return requestOptions;
|
|
225
|
+
}
|
|
226
|
+
async function preprocessTags(requestOptions) {
|
|
227
|
+
const tagsData = this.getNodeParameter("additionalFields.tags");
|
|
228
|
+
const tags = tagsData?.tags || [];
|
|
229
|
+
let bodyObj = {};
|
|
230
|
+
if (typeof requestOptions.body === "string") {
|
|
231
|
+
const params = new URLSearchParams(requestOptions.body);
|
|
232
|
+
bodyObj = Object.fromEntries(params.entries());
|
|
233
|
+
}
|
|
234
|
+
tags.forEach((tag, index) => {
|
|
235
|
+
if (!tag.key || !tag.value) {
|
|
236
|
+
throw new import_n8n_workflow.NodeOperationError(
|
|
237
|
+
this.getNode(),
|
|
238
|
+
`Tag at position ${index + 1} is missing '${!tag.key ? "Key" : "Value"}'. Both 'Key' and 'Value' are required.`
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
bodyObj[`Tags.member.${index + 1}.Key`] = tag.key;
|
|
242
|
+
bodyObj[`Tags.member.${index + 1}.Value`] = tag.value;
|
|
243
|
+
});
|
|
244
|
+
requestOptions.body = new URLSearchParams(bodyObj).toString();
|
|
245
|
+
return requestOptions;
|
|
246
|
+
}
|
|
247
|
+
async function removeUserFromGroups(requestOptions) {
|
|
248
|
+
const userName = this.getNodeParameter("user", void 0, { extractValue: true });
|
|
249
|
+
const userGroups = await import_listSearch.searchGroupsForUser.call(this);
|
|
250
|
+
for (const group of userGroups.results) {
|
|
251
|
+
await import_transport.awsApiRequest.call(this, {
|
|
252
|
+
method: "POST",
|
|
253
|
+
url: "",
|
|
254
|
+
body: {
|
|
255
|
+
Action: "RemoveUserFromGroup",
|
|
256
|
+
Version: import_constants.CURRENT_VERSION,
|
|
257
|
+
GroupName: group.value,
|
|
258
|
+
UserName: userName
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
return requestOptions;
|
|
263
|
+
}
|
|
264
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
265
|
+
0 && (module.exports = {
|
|
266
|
+
deleteGroupMembers,
|
|
267
|
+
encodeBodyAsFormUrlEncoded,
|
|
268
|
+
findUsersForGroup,
|
|
269
|
+
preprocessTags,
|
|
270
|
+
removeUserFromGroups,
|
|
271
|
+
simplifyGetAllGroupsResponse,
|
|
272
|
+
simplifyGetAllUsersResponse,
|
|
273
|
+
simplifyGetGroupsResponse,
|
|
274
|
+
validateName,
|
|
275
|
+
validatePath,
|
|
276
|
+
validatePermissionsBoundary,
|
|
277
|
+
validateUserPath
|
|
278
|
+
});
|
|
279
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../nodes/Aws/IAM/helpers/utils.ts"],"sourcesContent":["import type {\n\tIHttpRequestOptions,\n\tIDataObject,\n\tIExecuteSingleFunctions,\n\tIN8nHttpFullResponse,\n\tINodeExecutionData,\n\tJsonObject,\n} from 'n8n-workflow';\nimport { NodeApiError, NodeOperationError } from 'n8n-workflow';\n\nimport { CURRENT_VERSION } from './constants';\nimport type {\n\tGetAllGroupsResponseBody,\n\tGetAllUsersResponseBody,\n\tGetGroupResponseBody,\n\tTags,\n} from './types';\nimport { searchGroupsForUser } from '../methods/listSearch';\nimport { awsApiRequest } from '../transport';\n\nexport async function encodeBodyAsFormUrlEncoded(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tif (requestOptions.body) {\n\t\trequestOptions.body = new URLSearchParams(\n\t\t\trequestOptions.body as Record<string, string>,\n\t\t).toString();\n\t}\n\treturn requestOptions;\n}\n\nexport async function findUsersForGroup(\n\tthis: IExecuteSingleFunctions,\n\tgroupName: string,\n): Promise<IDataObject[]> {\n\tconst options: IHttpRequestOptions = {\n\t\tmethod: 'POST',\n\t\turl: '',\n\t\tbody: new URLSearchParams({\n\t\t\tAction: 'GetGroup',\n\t\t\tVersion: CURRENT_VERSION,\n\t\t\tGroupName: groupName,\n\t\t}).toString(),\n\t};\n\tconst responseData = (await awsApiRequest.call(this, options)) as GetGroupResponseBody;\n\treturn responseData?.GetGroupResponse?.GetGroupResult?.Users ?? [];\n}\n\nexport async function simplifyGetGroupsResponse(\n\tthis: IExecuteSingleFunctions,\n\t_: INodeExecutionData[],\n\tresponse: IN8nHttpFullResponse,\n): Promise<INodeExecutionData[]> {\n\tconst includeUsers = this.getNodeParameter('includeUsers', false);\n\tconst responseBody = response.body as GetGroupResponseBody;\n\tconst groupData = responseBody.GetGroupResponse.GetGroupResult;\n\tconst group = groupData.Group;\n\treturn [\n\t\t{ json: includeUsers ? { ...group, Users: groupData.Users ?? [] } : group },\n\t] as INodeExecutionData[];\n}\n\nexport async function simplifyGetAllGroupsResponse(\n\tthis: IExecuteSingleFunctions,\n\titems: INodeExecutionData[],\n\tresponse: IN8nHttpFullResponse,\n): Promise<INodeExecutionData[]> {\n\tconst includeUsers = this.getNodeParameter('includeUsers', false);\n\tconst responseBody = response.body as GetAllGroupsResponseBody;\n\tconst groups = responseBody.ListGroupsResponse.ListGroupsResult.Groups ?? [];\n\n\tif (groups.length === 0) {\n\t\treturn items;\n\t}\n\n\tif (!includeUsers) {\n\t\treturn this.helpers.returnJsonArray(groups);\n\t}\n\n\tconst processedItems: IDataObject[] = [];\n\tfor (const group of groups) {\n\t\tconst users = await findUsersForGroup.call(this, group.GroupName);\n\t\tprocessedItems.push({ ...group, Users: users });\n\t}\n\treturn this.helpers.returnJsonArray(processedItems);\n}\n\nexport async function simplifyGetAllUsersResponse(\n\tthis: IExecuteSingleFunctions,\n\t_items: INodeExecutionData[],\n\tresponse: IN8nHttpFullResponse,\n): Promise<INodeExecutionData[]> {\n\tif (!response.body) {\n\t\treturn [];\n\t}\n\tconst responseBody = response.body as GetAllUsersResponseBody;\n\tconst users = responseBody?.ListUsersResponse?.ListUsersResult?.Users ?? [];\n\treturn this.helpers.returnJsonArray(users);\n}\n\nexport async function deleteGroupMembers(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst groupName = this.getNodeParameter('group', undefined, { extractValue: true }) as string;\n\n\tconst users = await findUsersForGroup.call(this, groupName);\n\tif (!users.length) {\n\t\treturn requestOptions;\n\t}\n\n\tawait Promise.all(\n\t\tusers.map(async (user) => {\n\t\t\tconst userName = user.UserName as string;\n\t\t\tif (!user.UserName) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait awsApiRequest.call(this, {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\turl: '',\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tAction: 'RemoveUserFromGroup',\n\t\t\t\t\t\tGroupName: groupName,\n\t\t\t\t\t\tUserName: userName,\n\t\t\t\t\t\tVersion: CURRENT_VERSION,\n\t\t\t\t\t},\n\t\t\t\t\tignoreHttpStatusErrors: true,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, {\n\t\t\t\t\tmessage: `Failed to remove user \"${userName}\" from \"${groupName}\"!`,\n\t\t\t\t});\n\t\t\t}\n\t\t}),\n\t);\n\n\treturn requestOptions;\n}\n\nexport async function validatePath(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst path = this.getNodeParameter('additionalFields.path') as string;\n\tif (path.length < 1 || path.length > 512) {\n\t\tthrow new NodeOperationError(\n\t\t\tthis.getNode(),\n\t\t\t'The \"Path\" parameter must be between 1 and 512 characters long.',\n\t\t);\n\t}\n\n\tconst validPathRegex = /^\\/[\\u0021-\\u007E]*\\/$/;\n\tif (!validPathRegex.test(path) && path !== '/') {\n\t\tthrow new NodeOperationError(\n\t\t\tthis.getNode(),\n\t\t\t'Ensure the path is structured correctly, e.g. /division_abc/subdivision_xyz/',\n\t\t);\n\t}\n\n\treturn requestOptions;\n}\n\nexport async function validateUserPath(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst prefix = this.getNodeParameter('additionalFields.pathPrefix') as string;\n\n\tlet formattedPrefix = prefix;\n\tif (!formattedPrefix.startsWith('/')) {\n\t\tformattedPrefix = '/' + formattedPrefix;\n\t}\n\tif (!formattedPrefix.endsWith('/') && formattedPrefix !== '/') {\n\t\tformattedPrefix = formattedPrefix + '/';\n\t}\n\n\tif (requestOptions.body && typeof requestOptions.body === 'object') {\n\t\tObject.assign(requestOptions.body, { PathPrefix: formattedPrefix });\n\t}\n\n\tconst options: IHttpRequestOptions = {\n\t\tmethod: 'POST',\n\t\turl: '',\n\t\tbody: {\n\t\t\tAction: 'ListUsers',\n\t\t\tVersion: CURRENT_VERSION,\n\t\t},\n\t};\n\tconst responseData = (await awsApiRequest.call(this, options)) as GetAllUsersResponseBody;\n\n\tconst users = responseData.ListUsersResponse.ListUsersResult.Users;\n\tif (!users || users.length === 0) {\n\t\tthrow new NodeOperationError(\n\t\t\tthis.getNode(),\n\t\t\t'No users found. Please adjust the \"Path\" parameter and try again.',\n\t\t);\n\t}\n\n\tconst userPaths = users.map((user) => user.Path).filter(Boolean);\n\tconst isPathValid = userPaths.some((path) => path?.startsWith(formattedPrefix));\n\tif (!isPathValid) {\n\t\tthrow new NodeOperationError(\n\t\t\tthis.getNode(),\n\t\t\t`The \"${formattedPrefix}\" path was not found in your users. Try entering a different path.`,\n\t\t);\n\t}\n\treturn requestOptions;\n}\n\nexport async function validateName(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst resource = this.getNodeParameter('resource') as string;\n\tconst nameParam = resource === 'user' ? 'userName' : 'groupName';\n\tconst name = this.getNodeParameter(nameParam) as string;\n\n\tconst maxLength = resource === 'user' ? 64 : 128;\n\tconst capitalizedResource = resource.replace(/^./, (c) => c.toUpperCase());\n\tconst validNamePattern = /^[a-zA-Z0-9-_]+$/;\n\n\tconst isInvalid = !validNamePattern.test(name) || name.length > maxLength;\n\n\tif (/\\s/.test(name)) {\n\t\tthrow new NodeOperationError(\n\t\t\tthis.getNode(),\n\t\t\t`${capitalizedResource} name should not contain spaces.`,\n\t\t);\n\t}\n\n\tif (isInvalid) {\n\t\tthrow new NodeOperationError(\n\t\t\tthis.getNode(),\n\t\t\t`${capitalizedResource} name can have up to ${maxLength} characters. Valid characters: letters, numbers, hyphens (-), and underscores (_).`,\n\t\t);\n\t}\n\n\treturn requestOptions;\n}\n\nexport async function validatePermissionsBoundary(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst permissionsBoundary = this.getNodeParameter(\n\t\t'additionalFields.permissionsBoundary',\n\t) as string;\n\n\tif (permissionsBoundary) {\n\t\tconst arnPattern = /^arn:aws:iam::\\d{12}:policy\\/[\\w\\-+\\/=._]+$/;\n\n\t\tif (!arnPattern.test(permissionsBoundary)) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.getNode(),\n\t\t\t\t'Permissions boundaries must be provided in ARN format (e.g. arn:aws:iam::123456789012:policy/ExampleBoundaryPolicy). These can be found at the top of the permissions boundary detail page in the IAM dashboard.',\n\t\t\t);\n\t\t}\n\n\t\tif (requestOptions.body) {\n\t\t\tObject.assign(requestOptions.body, { PermissionsBoundary: permissionsBoundary });\n\t\t} else {\n\t\t\trequestOptions.body = {\n\t\t\t\tPermissionsBoundary: permissionsBoundary,\n\t\t\t};\n\t\t}\n\t}\n\treturn requestOptions;\n}\n\nexport async function preprocessTags(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst tagsData = this.getNodeParameter('additionalFields.tags') as Tags;\n\tconst tags = tagsData?.tags || [];\n\n\tlet bodyObj: Record<string, string> = {};\n\tif (typeof requestOptions.body === 'string') {\n\t\tconst params = new URLSearchParams(requestOptions.body);\n\t\tbodyObj = Object.fromEntries(params.entries());\n\t}\n\n\ttags.forEach((tag, index) => {\n\t\tif (!tag.key || !tag.value) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.getNode(),\n\t\t\t\t`Tag at position ${index + 1} is missing '${!tag.key ? 'Key' : 'Value'}'. Both 'Key' and 'Value' are required.`,\n\t\t\t);\n\t\t}\n\t\tbodyObj[`Tags.member.${index + 1}.Key`] = tag.key;\n\t\tbodyObj[`Tags.member.${index + 1}.Value`] = tag.value;\n\t});\n\n\trequestOptions.body = new URLSearchParams(bodyObj).toString();\n\n\treturn requestOptions;\n}\n\nexport async function removeUserFromGroups(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst userName = this.getNodeParameter('user', undefined, { extractValue: true });\n\tconst userGroups = await searchGroupsForUser.call(this);\n\n\tfor (const group of userGroups.results) {\n\t\tawait awsApiRequest.call(this, {\n\t\t\tmethod: 'POST',\n\t\t\turl: '',\n\t\t\tbody: {\n\t\t\t\tAction: 'RemoveUserFromGroup',\n\t\t\t\tVersion: CURRENT_VERSION,\n\t\t\t\tGroupName: group.value,\n\t\t\t\tUserName: userName,\n\t\t\t},\n\t\t});\n\t}\n\n\treturn requestOptions;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var methods_exports = {};
|
|
30
|
+
__export(methods_exports, {
|
|
31
|
+
listSearch: () => listSearch
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(methods_exports);
|
|
34
|
+
var listSearch = __toESM(require("./listSearch"));
|
|
35
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
36
|
+
0 && (module.exports = {
|
|
37
|
+
listSearch
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../nodes/Aws/IAM/methods/index.ts"],"sourcesContent":["export * as listSearch from './listSearch';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA4B;","names":[]}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var listSearch_exports = {};
|
|
20
|
+
__export(listSearch_exports, {
|
|
21
|
+
searchGroups: () => searchGroups,
|
|
22
|
+
searchGroupsForUser: () => searchGroupsForUser,
|
|
23
|
+
searchUsers: () => searchUsers
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(listSearch_exports);
|
|
26
|
+
var import_n8n_workflow = require("n8n-workflow");
|
|
27
|
+
var import_constants = require("../helpers/constants");
|
|
28
|
+
var import_transport = require("../transport");
|
|
29
|
+
function formatSearchResults(items, propertyName, filter) {
|
|
30
|
+
return items.map((item) => ({
|
|
31
|
+
name: String(item[propertyName] ?? ""),
|
|
32
|
+
value: String(item[propertyName] ?? "")
|
|
33
|
+
})).filter(({ name }) => !filter || name.includes(filter)).sort((a, b) => a.name.localeCompare(b.name));
|
|
34
|
+
}
|
|
35
|
+
async function searchUsers(filter, paginationToken) {
|
|
36
|
+
const options = {
|
|
37
|
+
method: "POST",
|
|
38
|
+
url: "",
|
|
39
|
+
body: {
|
|
40
|
+
Action: "ListUsers",
|
|
41
|
+
Version: import_constants.CURRENT_VERSION,
|
|
42
|
+
...paginationToken ? { Marker: paginationToken } : {}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
const responseData = await import_transport.awsApiRequest.call(this, options);
|
|
46
|
+
const users = responseData.ListUsersResponse.ListUsersResult.Users || [];
|
|
47
|
+
const nextMarker = responseData.ListUsersResponse.ListUsersResult.IsTruncated ? responseData.ListUsersResponse.ListUsersResult.Marker : void 0;
|
|
48
|
+
return {
|
|
49
|
+
results: formatSearchResults(users, "UserName", filter),
|
|
50
|
+
paginationToken: nextMarker
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async function searchGroups(filter, paginationToken) {
|
|
54
|
+
const options = {
|
|
55
|
+
method: "POST",
|
|
56
|
+
url: "",
|
|
57
|
+
body: {
|
|
58
|
+
Action: "ListGroups",
|
|
59
|
+
Version: import_constants.CURRENT_VERSION,
|
|
60
|
+
...paginationToken ? { Marker: paginationToken } : {}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const responseData = await import_transport.awsApiRequest.call(this, options);
|
|
64
|
+
const groups = responseData.ListGroupsResponse.ListGroupsResult.Groups || [];
|
|
65
|
+
const nextMarker = responseData.ListGroupsResponse.ListGroupsResult.IsTruncated ? responseData.ListGroupsResponse.ListGroupsResult.Marker : void 0;
|
|
66
|
+
return {
|
|
67
|
+
results: formatSearchResults(groups, "GroupName", filter),
|
|
68
|
+
paginationToken: nextMarker
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async function searchGroupsForUser(filter) {
|
|
72
|
+
const userName = this.getNodeParameter("user", void 0, { extractValue: true });
|
|
73
|
+
let allGroups = [];
|
|
74
|
+
let nextMarkerGroups;
|
|
75
|
+
do {
|
|
76
|
+
const options = {
|
|
77
|
+
method: "POST",
|
|
78
|
+
url: "",
|
|
79
|
+
body: {
|
|
80
|
+
Action: "ListGroups",
|
|
81
|
+
Version: import_constants.CURRENT_VERSION,
|
|
82
|
+
...nextMarkerGroups ? { Marker: nextMarkerGroups } : {}
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const groupsData = await import_transport.awsApiRequest.call(this, options);
|
|
86
|
+
const groups = groupsData.ListGroupsResponse?.ListGroupsResult?.Groups || [];
|
|
87
|
+
nextMarkerGroups = groupsData.ListGroupsResponse?.ListGroupsResult?.IsTruncated ? groupsData.ListGroupsResponse?.ListGroupsResult?.Marker : void 0;
|
|
88
|
+
allGroups = [...allGroups, ...groups];
|
|
89
|
+
} while (nextMarkerGroups);
|
|
90
|
+
if (allGroups.length === 0) {
|
|
91
|
+
return { results: [] };
|
|
92
|
+
}
|
|
93
|
+
const groupCheckPromises = allGroups.map(async (group) => {
|
|
94
|
+
const groupName = group.GroupName;
|
|
95
|
+
if (!groupName) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
const options = {
|
|
100
|
+
method: "POST",
|
|
101
|
+
url: "",
|
|
102
|
+
body: {
|
|
103
|
+
Action: "GetGroup",
|
|
104
|
+
Version: import_constants.CURRENT_VERSION,
|
|
105
|
+
GroupName: groupName
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const getGroupResponse = await import_transport.awsApiRequest.call(this, options);
|
|
109
|
+
const groupResult = getGroupResponse?.GetGroupResponse?.GetGroupResult;
|
|
110
|
+
const userExists = groupResult?.Users?.some((user) => user.UserName === userName);
|
|
111
|
+
if (userExists) {
|
|
112
|
+
return { UserName: userName, GroupName: groupName };
|
|
113
|
+
}
|
|
114
|
+
} catch (error) {
|
|
115
|
+
throw new import_n8n_workflow.NodeApiError(this.getNode(), error, {
|
|
116
|
+
message: `Failed to get group ${groupName}: ${error?.message ?? "Unknown error"}`
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
});
|
|
121
|
+
const validUserGroups = (await Promise.all(groupCheckPromises)).filter(Boolean);
|
|
122
|
+
return {
|
|
123
|
+
results: formatSearchResults(validUserGroups, "GroupName", filter)
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
127
|
+
0 && (module.exports = {
|
|
128
|
+
searchGroups,
|
|
129
|
+
searchGroupsForUser,
|
|
130
|
+
searchUsers
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=listSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../nodes/Aws/IAM/methods/listSearch.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIExecuteSingleFunctions,\n\tIHttpRequestOptions,\n\tILoadOptionsFunctions,\n\tINodeListSearchItems,\n\tINodeListSearchResult,\n\tJsonObject,\n} from 'n8n-workflow';\nimport { NodeApiError } from 'n8n-workflow';\n\nimport { CURRENT_VERSION } from '../helpers/constants';\nimport type {\n\tGetAllGroupsResponseBody,\n\tGetAllUsersResponseBody,\n\tGetGroupResponseBody,\n} from '../helpers/types';\nimport { awsApiRequest } from '../transport';\n\nfunction formatSearchResults(\n\titems: IDataObject[],\n\tpropertyName: string,\n\tfilter?: string,\n): INodeListSearchItems[] {\n\treturn items\n\t\t.map((item) => ({\n\t\t\tname: String(item[propertyName] ?? ''),\n\t\t\tvalue: String(item[propertyName] ?? ''),\n\t\t}))\n\t\t.filter(({ name }) => !filter || name.includes(filter))\n\t\t.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function searchUsers(\n\tthis: ILoadOptionsFunctions,\n\tfilter?: string,\n\tpaginationToken?: string,\n): Promise<INodeListSearchResult> {\n\tconst options: IHttpRequestOptions = {\n\t\tmethod: 'POST',\n\t\turl: '',\n\t\tbody: {\n\t\t\tAction: 'ListUsers',\n\t\t\tVersion: CURRENT_VERSION,\n\t\t\t...(paginationToken ? { Marker: paginationToken } : {}),\n\t\t},\n\t};\n\tconst responseData = (await awsApiRequest.call(this, options)) as GetAllUsersResponseBody;\n\n\tconst users = responseData.ListUsersResponse.ListUsersResult.Users || [];\n\tconst nextMarker = responseData.ListUsersResponse.ListUsersResult.IsTruncated\n\t\t? responseData.ListUsersResponse.ListUsersResult.Marker\n\t\t: undefined;\n\n\treturn {\n\t\tresults: formatSearchResults(users, 'UserName', filter),\n\t\tpaginationToken: nextMarker,\n\t};\n}\n\nexport async function searchGroups(\n\tthis: ILoadOptionsFunctions,\n\tfilter?: string,\n\tpaginationToken?: string,\n): Promise<INodeListSearchResult> {\n\tconst options: IHttpRequestOptions = {\n\t\tmethod: 'POST',\n\t\turl: '',\n\t\tbody: {\n\t\t\tAction: 'ListGroups',\n\t\t\tVersion: CURRENT_VERSION,\n\t\t\t...(paginationToken ? { Marker: paginationToken } : {}),\n\t\t},\n\t};\n\n\tconst responseData = (await awsApiRequest.call(this, options)) as GetAllGroupsResponseBody;\n\n\tconst groups = responseData.ListGroupsResponse.ListGroupsResult.Groups || [];\n\tconst nextMarker = responseData.ListGroupsResponse.ListGroupsResult.IsTruncated\n\t\t? responseData.ListGroupsResponse.ListGroupsResult.Marker\n\t\t: undefined;\n\n\treturn {\n\t\tresults: formatSearchResults(groups, 'GroupName', filter),\n\t\tpaginationToken: nextMarker,\n\t};\n}\n\nexport async function searchGroupsForUser(\n\tthis: ILoadOptionsFunctions | IExecuteSingleFunctions,\n\tfilter?: string,\n): Promise<INodeListSearchResult> {\n\tconst userName = this.getNodeParameter('user', undefined, { extractValue: true });\n\tlet allGroups: IDataObject[] = [];\n\tlet nextMarkerGroups: string | undefined;\n\tdo {\n\t\tconst options: IHttpRequestOptions = {\n\t\t\tmethod: 'POST',\n\t\t\turl: '',\n\t\t\tbody: {\n\t\t\t\tAction: 'ListGroups',\n\t\t\t\tVersion: CURRENT_VERSION,\n\t\t\t\t...(nextMarkerGroups ? { Marker: nextMarkerGroups } : {}),\n\t\t\t},\n\t\t};\n\n\t\tconst groupsData = (await awsApiRequest.call(this, options)) as GetAllGroupsResponseBody;\n\n\t\tconst groups = groupsData.ListGroupsResponse?.ListGroupsResult?.Groups || [];\n\t\tnextMarkerGroups = groupsData.ListGroupsResponse?.ListGroupsResult?.IsTruncated\n\t\t\t? groupsData.ListGroupsResponse?.ListGroupsResult?.Marker\n\t\t\t: undefined;\n\n\t\tallGroups = [...allGroups, ...groups];\n\t} while (nextMarkerGroups);\n\n\tif (allGroups.length === 0) {\n\t\treturn { results: [] };\n\t}\n\n\tconst groupCheckPromises = allGroups.map(async (group) => {\n\t\tconst groupName = group.GroupName as string;\n\t\tif (!groupName) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tconst options: IHttpRequestOptions = {\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: '',\n\t\t\t\tbody: {\n\t\t\t\t\tAction: 'GetGroup',\n\t\t\t\t\tVersion: CURRENT_VERSION,\n\t\t\t\t\tGroupName: groupName,\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst getGroupResponse = (await awsApiRequest.call(this, options)) as GetGroupResponseBody;\n\t\t\tconst groupResult = getGroupResponse?.GetGroupResponse?.GetGroupResult;\n\t\t\tconst userExists = groupResult?.Users?.some((user) => user.UserName === userName);\n\n\t\t\tif (userExists) {\n\t\t\t\treturn { UserName: userName, GroupName: groupName };\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject, {\n\t\t\t\tmessage: `Failed to get group ${groupName}: ${error?.message ?? 'Unknown error'}`,\n\t\t\t});\n\t\t}\n\n\t\treturn null;\n\t});\n\n\tconst validUserGroups = (await Promise.all(groupCheckPromises)).filter(Boolean) as IDataObject[];\n\n\treturn {\n\t\tresults: formatSearchResults(validUserGroups, 'GroupName', filter),\n\t};\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var transport_exports = {};
|
|
20
|
+
__export(transport_exports, {
|
|
21
|
+
awsApiRequest: () => awsApiRequest
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(transport_exports);
|
|
24
|
+
var import_n8n_workflow = require("n8n-workflow");
|
|
25
|
+
var import_constants = require("../helpers/constants");
|
|
26
|
+
const errorMapping = {
|
|
27
|
+
403: "The AWS credentials are not valid!"
|
|
28
|
+
};
|
|
29
|
+
async function awsApiRequest(opts) {
|
|
30
|
+
const requestOptions = {
|
|
31
|
+
baseURL: import_constants.BASE_URL,
|
|
32
|
+
json: true,
|
|
33
|
+
...opts,
|
|
34
|
+
headers: {
|
|
35
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
36
|
+
...opts.headers ?? {}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
if (opts.body) {
|
|
40
|
+
requestOptions.body = new URLSearchParams(opts.body).toString();
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const response = await this.helpers.requestWithAuthentication.call(
|
|
44
|
+
this,
|
|
45
|
+
"aws",
|
|
46
|
+
requestOptions
|
|
47
|
+
);
|
|
48
|
+
return response;
|
|
49
|
+
} catch (error) {
|
|
50
|
+
const statusCode = error?.statusCode || error?.cause?.statusCode;
|
|
51
|
+
if (statusCode && errorMapping[statusCode]) {
|
|
52
|
+
throw new import_n8n_workflow.NodeApiError(this.getNode(), {
|
|
53
|
+
message: `AWS error response [${statusCode}]: ${errorMapping[statusCode]}`
|
|
54
|
+
});
|
|
55
|
+
} else {
|
|
56
|
+
throw new import_n8n_workflow.NodeApiError(this.getNode(), error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
61
|
+
0 && (module.exports = {
|
|
62
|
+
awsApiRequest
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../nodes/Aws/IAM/transport/index.ts"],"sourcesContent":["import type {\n\tIExecuteSingleFunctions,\n\tIDataObject,\n\tIHttpRequestOptions,\n\tILoadOptionsFunctions,\n\tIPollFunctions,\n\tJsonObject,\n} from 'n8n-workflow';\nimport { NodeApiError } from 'n8n-workflow';\n\nimport { BASE_URL } from '../helpers/constants';\n\nconst errorMapping: IDataObject = {\n\t403: 'The AWS credentials are not valid!',\n};\n\nexport async function awsApiRequest(\n\tthis: ILoadOptionsFunctions | IPollFunctions | IExecuteSingleFunctions,\n\topts: IHttpRequestOptions,\n): Promise<IDataObject> {\n\tconst requestOptions: IHttpRequestOptions = {\n\t\tbaseURL: BASE_URL,\n\t\tjson: true,\n\t\t...opts,\n\t\theaders: {\n\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\n\t\t\t...(opts.headers ?? {}),\n\t\t},\n\t};\n\n\tif (opts.body) {\n\t\trequestOptions.body = new URLSearchParams(opts.body as Record<string, string>).toString();\n\t}\n\n\ttry {\n\t\tconst response = (await this.helpers.requestWithAuthentication.call(\n\t\t\tthis,\n\t\t\t'aws',\n\t\t\trequestOptions,\n\t\t)) as IDataObject;\n\n\t\treturn response;\n\t} catch (error) {\n\t\tconst statusCode = (error?.statusCode || error?.cause?.statusCode) as string;\n\n\t\tif (statusCode && errorMapping[statusCode]) {\n\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\tmessage: `AWS error response [${statusCode}]: ${errorMapping[statusCode] as string}`,\n\t\t\t});\n\t\t} else {\n\t\t\tthrow new NodeApiError(this.getNode(), error as JsonObject);\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,0BAA6B;AAE7B,uBAAyB;AAEzB,MAAM,eAA4B;AAAA,EACjC,KAAK;AACN;AAEA,eAAsB,cAErB,MACuB;AACvB,QAAM,iBAAsC;AAAA,IAC3C,SAAS;AAAA,IACT,MAAM;AAAA,IACN,GAAG;AAAA,IACH,SAAS;AAAA,MACR,gBAAgB;AAAA,MAChB,GAAI,KAAK,WAAW,CAAC;AAAA,IACtB;AAAA,EACD;AAEA,MAAI,KAAK,MAAM;AACd,mBAAe,OAAO,IAAI,gBAAgB,KAAK,IAA8B,EAAE,SAAS;AAAA,EACzF;AAEA,MAAI;AACH,UAAM,WAAY,MAAM,KAAK,QAAQ,0BAA0B;AAAA,MAC9D;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAEA,WAAO;AAAA,EACR,SAAS,OAAO;AACf,UAAM,aAAc,OAAO,cAAc,OAAO,OAAO;AAEvD,QAAI,cAAc,aAAa,UAAU,GAAG;AAC3C,YAAM,IAAI,iCAAa,KAAK,QAAQ,GAAG;AAAA,QACtC,SAAS,uBAAuB,UAAU,MAAM,aAAa,UAAU,CAAW;AAAA,MACnF,CAAC;AAAA,IACF,OAAO;AACN,YAAM,IAAI,iCAAa,KAAK,QAAQ,GAAG,KAAmB;AAAA,IAC3D;AAAA,EACD;AACD;","names":[]}
|
|
@@ -42,7 +42,7 @@ class Cron {
|
|
|
42
42
|
outputs: [import_n8n_workflow.NodeConnectionTypes.Main],
|
|
43
43
|
properties: [
|
|
44
44
|
{
|
|
45
|
-
displayName: `This workflow will run on the schedule you define here once you <a data-key="activate">activate</a> it.<br><br>For testing, you can also trigger it manually: by going back to the canvas and clicking '
|
|
45
|
+
displayName: `This workflow will run on the schedule you define here once you <a data-key="activate">activate</a> it.<br><br>For testing, you can also trigger it manually: by going back to the canvas and clicking 'execute workflow'`,
|
|
46
46
|
name: "notice",
|
|
47
47
|
type: "notice",
|
|
48
48
|
default: ""
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../nodes/Cron/Cron.node.ts"],"sourcesContent":["import type {\n\tITriggerFunctions,\n\tINodeType,\n\tINodeTypeDescription,\n\tITriggerResponse,\n\tTriggerTime,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeHelpers, toCronExpression } from 'n8n-workflow';\n\nexport class Cron implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Cron',\n\t\tname: 'cron',\n\t\ticon: 'fa:clock',\n\t\tgroup: ['trigger', 'schedule'],\n\t\tversion: 1,\n\t\thidden: true,\n\t\tdescription: 'Triggers the workflow at a specific time',\n\t\teventTriggerDescription: '',\n\t\tactivationMessage:\n\t\t\t'Your cron trigger will now trigger executions on the schedule you have defined.',\n\t\tdefaults: {\n\t\t\tname: 'Cron',\n\t\t\tcolor: '#29a568',\n\t\t},\n\n\t\tinputs: [],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'This workflow will run on the schedule you define here once you <a data-key=\"activate\">activate</a> it.<br><br>For testing, you can also trigger it manually: by going back to the canvas and clicking \\'
|
|
1
|
+
{"version":3,"sources":["../../../nodes/Cron/Cron.node.ts"],"sourcesContent":["import type {\n\tITriggerFunctions,\n\tINodeType,\n\tINodeTypeDescription,\n\tITriggerResponse,\n\tTriggerTime,\n} from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeHelpers, toCronExpression } from 'n8n-workflow';\n\nexport class Cron implements INodeType {\n\tdescription: INodeTypeDescription = {\n\t\tdisplayName: 'Cron',\n\t\tname: 'cron',\n\t\ticon: 'fa:clock',\n\t\tgroup: ['trigger', 'schedule'],\n\t\tversion: 1,\n\t\thidden: true,\n\t\tdescription: 'Triggers the workflow at a specific time',\n\t\teventTriggerDescription: '',\n\t\tactivationMessage:\n\t\t\t'Your cron trigger will now trigger executions on the schedule you have defined.',\n\t\tdefaults: {\n\t\t\tname: 'Cron',\n\t\t\tcolor: '#29a568',\n\t\t},\n\n\t\tinputs: [],\n\t\toutputs: [NodeConnectionTypes.Main],\n\t\tproperties: [\n\t\t\t{\n\t\t\t\tdisplayName:\n\t\t\t\t\t'This workflow will run on the schedule you define here once you <a data-key=\"activate\">activate</a> it.<br><br>For testing, you can also trigger it manually: by going back to the canvas and clicking \\'execute workflow\\'',\n\t\t\t\tname: 'notice',\n\t\t\t\ttype: 'notice',\n\t\t\t\tdefault: '',\n\t\t\t},\n\t\t\t{\n\t\t\t\tdisplayName: 'Trigger Times',\n\t\t\t\tname: 'triggerTimes',\n\t\t\t\ttype: 'fixedCollection',\n\t\t\t\ttypeOptions: {\n\t\t\t\t\tmultipleValues: true,\n\t\t\t\t\tmultipleValueButtonText: 'Add Time',\n\t\t\t\t},\n\t\t\t\tdefault: {},\n\t\t\t\tdescription: 'Triggers for the workflow',\n\t\t\t\tplaceholder: 'Add Cron Time',\n\t\t\t\toptions: NodeHelpers.cronNodeOptions,\n\t\t\t},\n\t\t],\n\t};\n\n\tasync trigger(this: ITriggerFunctions): Promise<ITriggerResponse> {\n\t\tconst triggerTimes = this.getNodeParameter('triggerTimes') as unknown as {\n\t\t\titem: TriggerTime[];\n\t\t};\n\n\t\t// Get all the trigger times\n\t\tconst cronTimes = (triggerTimes.item || []).map(toCronExpression);\n\n\t\t// The trigger function to execute when the cron-time got reached\n\t\t// or when manually triggered\n\t\tconst executeTrigger = () => {\n\t\t\tthis.emit([this.helpers.returnJsonArray([{}])]);\n\t\t};\n\n\t\t// Register the cron-jobs\n\t\tcronTimes.forEach((cronTime) => this.helpers.registerCron(cronTime, executeTrigger));\n\n\t\treturn {\n\t\t\tmanualTriggerFunction: async () => executeTrigger(),\n\t\t};\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,0BAAmE;AAE5D,MAAM,KAA0B;AAAA,EAAhC;AACN,uBAAoC;AAAA,MACnC,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO,CAAC,WAAW,UAAU;AAAA,MAC7B,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,yBAAyB;AAAA,MACzB,mBACC;AAAA,MACD,UAAU;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MACR;AAAA,MAEA,QAAQ,CAAC;AAAA,MACT,SAAS,CAAC,wCAAoB,IAAI;AAAA,MAClC,YAAY;AAAA,QACX;AAAA,UACC,aACC;AAAA,UACD,MAAM;AAAA,UACN,MAAM;AAAA,UACN,SAAS;AAAA,QACV;AAAA,QACA;AAAA,UACC,aAAa;AAAA,UACb,MAAM;AAAA,UACN,MAAM;AAAA,UACN,aAAa;AAAA,YACZ,gBAAgB;AAAA,YAChB,yBAAyB;AAAA,UAC1B;AAAA,UACA,SAAS,CAAC;AAAA,UACV,aAAa;AAAA,UACb,aAAa;AAAA,UACb,SAAS,gCAAY;AAAA,QACtB;AAAA,MACD;AAAA,IACD;AAAA;AAAA,EAEA,MAAM,UAA4D;AACjE,UAAM,eAAe,KAAK,iBAAiB,cAAc;AAKzD,UAAM,aAAa,aAAa,QAAQ,CAAC,GAAG,IAAI,oCAAgB;AAIhE,UAAM,iBAAiB,MAAM;AAC5B,WAAK,KAAK,CAAC,KAAK,QAAQ,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,IAC/C;AAGA,cAAU,QAAQ,CAAC,aAAa,KAAK,QAAQ,aAAa,UAAU,cAAc,CAAC;AAEnF,WAAO;AAAA,MACN,uBAAuB,YAAY,eAAe;AAAA,IACnD;AAAA,EACD;AACD;","names":[]}
|
|
@@ -77,8 +77,8 @@ const versionDescription = {
|
|
|
77
77
|
triggerPanel: {
|
|
78
78
|
header: "",
|
|
79
79
|
executionsHelp: {
|
|
80
|
-
inactive: "<b>While building your workflow</b>, click the '
|
|
81
|
-
active: "<b>While building your workflow</b>, click the '
|
|
80
|
+
inactive: "<b>While building your workflow</b>, click the 'execute step' button, then send an email to make an event happen. This will trigger an execution, which will show up in this editor.<br /> <br /><b>Once you're happy with your workflow</b>, <a data-key='activate'>activate</a> it. Then every time an email is received, the workflow will execute. These executions will show up in the <a data-key='executions'>executions list</a>, but not in the editor.",
|
|
81
|
+
active: "<b>While building your workflow</b>, click the 'execute step' button, then send an email to make an event happen. This will trigger an execution, which will show up in this editor.<br /> <br /><b>Your workflow will also execute automatically</b>, since it's activated. Every time an email is received, this node will trigger an execution. These executions will show up in the <a data-key='executions'>executions list</a>, but not in the editor."
|
|
82
82
|
},
|
|
83
83
|
activationHint: "Once you\u2019ve finished building your workflow, <a data-key='activate'>activate</a> it to have it also listen continuously (you just won\u2019t see those executions here)."
|
|
84
84
|
},
|