n8n-nodes-base 1.91.1 → 1.92.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 (150) hide show
  1. package/dist/credentials/Aws.credentials.js +0 -2
  2. package/dist/credentials/Aws.credentials.js.map +1 -1
  3. package/dist/credentials/JinaAiApi.credentials.js +61 -0
  4. package/dist/credentials/JinaAiApi.credentials.js.map +1 -0
  5. package/dist/credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js +1 -1
  6. package/dist/credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js.map +1 -1
  7. package/dist/known/credentials.json +8 -0
  8. package/dist/known/nodes.json +8 -0
  9. package/dist/nodes/Affinity/__schema__/v1.0.0/listEntry/getAll.json +1 -4
  10. package/dist/nodes/Airtop/__schema__/v1.0.0/extraction/query.json +47 -0
  11. package/dist/nodes/Aws/Cognito/AwsCognito.node.js +102 -0
  12. package/dist/nodes/Aws/Cognito/AwsCognito.node.js.map +1 -0
  13. package/dist/nodes/Aws/Cognito/AwsCognito.node.json +18 -0
  14. package/dist/nodes/Aws/Cognito/cognito.svg +1 -0
  15. package/dist/nodes/Aws/Cognito/descriptions/common.description.js +160 -0
  16. package/dist/nodes/Aws/Cognito/descriptions/common.description.js.map +1 -0
  17. package/dist/nodes/Aws/Cognito/descriptions/group/Group.resource.js +189 -0
  18. package/dist/nodes/Aws/Cognito/descriptions/group/Group.resource.js.map +1 -0
  19. package/dist/nodes/Aws/Cognito/descriptions/group/create.operation.js +126 -0
  20. package/dist/nodes/Aws/Cognito/descriptions/group/create.operation.js.map +1 -0
  21. package/dist/nodes/Aws/Cognito/descriptions/group/delete.operation.js +47 -0
  22. package/dist/nodes/Aws/Cognito/descriptions/group/delete.operation.js.map +1 -0
  23. package/dist/nodes/Aws/Cognito/descriptions/group/get.operation.js +54 -0
  24. package/dist/nodes/Aws/Cognito/descriptions/group/get.operation.js.map +1 -0
  25. package/dist/nodes/Aws/Cognito/descriptions/group/getAll.operation.js +95 -0
  26. package/dist/nodes/Aws/Cognito/descriptions/group/getAll.operation.js.map +1 -0
  27. package/dist/nodes/Aws/Cognito/descriptions/group/update.operation.js +120 -0
  28. package/dist/nodes/Aws/Cognito/descriptions/group/update.operation.js.map +1 -0
  29. package/dist/nodes/Aws/Cognito/descriptions/index.js +45 -0
  30. package/dist/nodes/Aws/Cognito/descriptions/index.js.map +1 -0
  31. package/dist/nodes/Aws/Cognito/descriptions/user/User.resource.js +263 -0
  32. package/dist/nodes/Aws/Cognito/descriptions/user/User.resource.js.map +1 -0
  33. package/dist/nodes/Aws/Cognito/descriptions/user/addToGroup.operation.js +51 -0
  34. package/dist/nodes/Aws/Cognito/descriptions/user/addToGroup.operation.js.map +1 -0
  35. package/dist/nodes/Aws/Cognito/descriptions/user/create.operation.js +299 -0
  36. package/dist/nodes/Aws/Cognito/descriptions/user/create.operation.js.map +1 -0
  37. package/dist/nodes/Aws/Cognito/descriptions/user/delete.operation.js +47 -0
  38. package/dist/nodes/Aws/Cognito/descriptions/user/delete.operation.js.map +1 -0
  39. package/dist/nodes/Aws/Cognito/descriptions/user/get.operation.js +54 -0
  40. package/dist/nodes/Aws/Cognito/descriptions/user/get.operation.js.map +1 -0
  41. package/dist/nodes/Aws/Cognito/descriptions/user/getAll.operation.js +187 -0
  42. package/dist/nodes/Aws/Cognito/descriptions/user/getAll.operation.js.map +1 -0
  43. package/dist/nodes/Aws/Cognito/descriptions/user/removeFromGroup.operation.js +60 -0
  44. package/dist/nodes/Aws/Cognito/descriptions/user/removeFromGroup.operation.js.map +1 -0
  45. package/dist/nodes/Aws/Cognito/descriptions/user/update.operation.js +189 -0
  46. package/dist/nodes/Aws/Cognito/descriptions/user/update.operation.js.map +1 -0
  47. package/dist/nodes/Aws/Cognito/descriptions/userPool/UserPool.resource.js +81 -0
  48. package/dist/nodes/Aws/Cognito/descriptions/userPool/UserPool.resource.js.map +1 -0
  49. package/dist/nodes/Aws/Cognito/descriptions/userPool/get.operation.js +50 -0
  50. package/dist/nodes/Aws/Cognito/descriptions/userPool/get.operation.js.map +1 -0
  51. package/dist/nodes/Aws/Cognito/helpers/constants.js +91 -0
  52. package/dist/nodes/Aws/Cognito/helpers/constants.js.map +1 -0
  53. package/dist/nodes/Aws/Cognito/helpers/errorHandler.js +109 -0
  54. package/dist/nodes/Aws/Cognito/helpers/errorHandler.js.map +1 -0
  55. package/dist/nodes/Aws/Cognito/helpers/interfaces.js +17 -0
  56. package/dist/nodes/Aws/Cognito/helpers/interfaces.js.map +1 -0
  57. package/dist/nodes/Aws/Cognito/helpers/utils.js +318 -0
  58. package/dist/nodes/Aws/Cognito/helpers/utils.js.map +1 -0
  59. package/dist/nodes/Aws/Cognito/methods/index.js +39 -0
  60. package/dist/nodes/Aws/Cognito/methods/index.js.map +1 -0
  61. package/dist/nodes/Aws/Cognito/methods/listSearch.js +157 -0
  62. package/dist/nodes/Aws/Cognito/methods/listSearch.js.map +1 -0
  63. package/dist/nodes/Aws/Cognito/transport/index.js +72 -0
  64. package/dist/nodes/Aws/Cognito/transport/index.js.map +1 -0
  65. package/dist/nodes/Aws/S3/__schema__/v2.0.0/file/getAll.json +1 -7
  66. package/dist/nodes/BambooHr/__schema__/v1.0.0/employee/get.json +10 -1
  67. package/dist/nodes/Dropcontact/__schema__/v1.0.0/contact/enrich.json +7 -15
  68. package/dist/nodes/EmailSend/__schema__/v2.1.0/email/send.json +7 -1
  69. package/dist/nodes/Github/__schema__/v1.1.0/file/list.json +44 -0
  70. package/dist/nodes/Gitlab/__schema__/v1.0.0/file/get.json +1 -4
  71. package/dist/nodes/Google/BusinessProfile/__schema__/v1.0.0/review/getAll.json +1 -12
  72. package/dist/nodes/Google/Calendar/__schema__/v1.3.0/event/getAll.json +4 -7
  73. package/dist/nodes/Google/Contacts/__schema__/v1.0.0/contact/getAll.json +1 -12
  74. package/dist/nodes/Google/Drive/__schema__/v3.0.0/file/download.json +9 -0
  75. package/dist/nodes/Google/Firebase/CloudFirestore/__schema__/v1.1.0/document/query.json +7 -1
  76. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/message/addLabels.json +1 -13
  77. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/message/get.json +7 -1
  78. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/message/getAll.json +29 -113
  79. package/dist/nodes/Google/Gmail/__schema__/v2.1.0/thread/get.json +1 -60
  80. package/dist/nodes/Google/Sheet/GoogleSheets.node.js +3 -2
  81. package/dist/nodes/Google/Sheet/GoogleSheets.node.js.map +1 -1
  82. package/dist/nodes/Google/Sheet/v2/actions/sheet/read.operation.js +2 -1
  83. package/dist/nodes/Google/Sheet/v2/actions/sheet/read.operation.js.map +1 -1
  84. package/dist/nodes/Google/Sheet/v2/actions/versionDescription.js +1 -1
  85. package/dist/nodes/Google/Sheet/v2/actions/versionDescription.js.map +1 -1
  86. package/dist/nodes/Google/Sheet/v2/helpers/GoogleSheet.js +4 -0
  87. package/dist/nodes/Google/Sheet/v2/helpers/GoogleSheet.js.map +1 -1
  88. package/dist/nodes/Google/Task/__schema__/v1.0.0/task/getAll.json +1 -4
  89. package/dist/nodes/Google/YouTube/__schema__/v1.0.0/video/get.json +35 -1
  90. package/dist/nodes/Hubspot/__schema__/v2.1.0/company/getAll.json +4 -1
  91. package/dist/nodes/Hubspot/__schema__/v2.1.0/contact/search.json +1 -4
  92. package/dist/nodes/Hubspot/__schema__/v2.1.0/deal/getAll.json +45 -11
  93. package/dist/nodes/Hubspot/__schema__/v2.1.0/deal/search.json +2 -5
  94. package/dist/nodes/Hubspot/__schema__/v2.1.0/ticket/get.json +4 -4
  95. package/dist/nodes/ItemLists/__schema__/v3.0.0/itemList/limit.json +4 -1
  96. package/dist/nodes/JinaAI/JinaAi.node.js +486 -0
  97. package/dist/nodes/JinaAI/JinaAi.node.js.map +1 -0
  98. package/dist/nodes/JinaAI/JinaAi.node.json +18 -0
  99. package/dist/nodes/JinaAI/jinaAi.dark.svg +6 -0
  100. package/dist/nodes/JinaAI/jinaAi.svg +6 -0
  101. package/dist/nodes/Jira/__schema__/v1.0.0/issue/get.json +259 -1
  102. package/dist/nodes/Jira/__schema__/v1.0.0/issue/getAll.json +57 -37
  103. package/dist/nodes/Linear/__schema__/v1.0.0/issue/getAll.json +1 -12
  104. package/dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.json +2 -2
  105. package/dist/nodes/Microsoft/Entra/MicrosoftEntra.node.js +2 -2
  106. package/dist/nodes/Microsoft/Entra/MicrosoftEntra.node.js.map +1 -1
  107. package/dist/nodes/Microsoft/Entra/__schema__/v1.0.0/user/getAll.json +1 -7
  108. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/event/getAll.json +4 -1
  109. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/folderMessage/getAll.json +8 -47
  110. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/message/get.json +124 -1
  111. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/message/getAll.json +40 -20
  112. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/message/sendAndWait.json +12 -11
  113. package/dist/nodes/Microsoft/Outlook/__schema__/v2.0.0/messageAttachment/get.json +13 -1
  114. package/dist/nodes/Microsoft/Storage/__schema__/v1.0.0/blob/getAll.json +44 -0
  115. package/dist/nodes/Microsoft/Teams/__schema__/v2.0.0/channel/getAll.json +1 -4
  116. package/dist/nodes/Microsoft/ToDo/__schema__/v1.0.0/task/getAll.json +21 -5
  117. package/dist/nodes/Notion/__schema__/v2.2.0/database/get.json +149 -2
  118. package/dist/nodes/Odoo/__schema__/v1.0.0/contact/getAll.json +10 -1
  119. package/dist/nodes/Odoo/__schema__/v1.0.0/custom/getAll.json +1 -4
  120. package/dist/nodes/Odoo/__schema__/v1.0.0/opportunity/getAll.json +49 -1
  121. package/dist/nodes/OpenAi/__schema__/v1.1.0/chat/complete.json +1 -29
  122. package/dist/nodes/Pipedrive/__schema__/v1.0.0/organization/search.json +20 -25
  123. package/dist/nodes/Pipedrive/__schema__/v1.0.0/person/search.json +1 -18
  124. package/dist/nodes/Plivo/__schema__/v1.0.0/call/make.json +15 -0
  125. package/dist/nodes/QuickBooks/__schema__/v1.0.0/transaction/getReport.json +1 -4
  126. package/dist/nodes/Salesforce/__schema__/v1.0.0/customObject/getAll.json +2 -2
  127. package/dist/nodes/Salesforce/__schema__/v1.0.0/opportunity/getAll.json +5 -2
  128. package/dist/nodes/Salesforce/__schema__/v1.0.0/task/getAll.json +4 -1
  129. package/dist/nodes/SeaTable/__schema__/v2.0.0/row/list.json +30 -0
  130. package/dist/nodes/ServiceNow/__schema__/v1.0.0/tableRecord/getAll.json +1 -4
  131. package/dist/nodes/Slack/__schema__/v2.3.0/channel/history.json +49 -3
  132. package/dist/nodes/Slack/__schema__/v2.3.0/message/post.json +4 -1
  133. package/dist/nodes/Ssh/__schema__/v1.0.0/command/execute.json +4 -1
  134. package/dist/nodes/Strapi/__schema__/v1.0.0/entry/get.json +32 -0
  135. package/dist/nodes/Strapi/__schema__/v1.0.0/entry/getAll.json +1 -4
  136. package/dist/nodes/Telegram/__schema__/v1.2.0/chat/get.json +27 -1
  137. package/dist/nodes/Telegram/__schema__/v1.2.0/chat/member.json +7 -1
  138. package/dist/nodes/Telegram/__schema__/v1.2.0/message/sendMessage.json +1 -4
  139. package/dist/nodes/Telegram/__schema__/v1.2.0/message/sendPhoto.json +4 -1
  140. package/dist/nodes/Trello/__schema__/v1.0.0/list/getAll.json +7 -1
  141. package/dist/nodes/Trello/__schema__/v1.0.0/list/getCards.json +13 -1
  142. package/dist/nodes/Wordpress/PageDescription.js +0 -17
  143. package/dist/nodes/Wordpress/PageDescription.js.map +1 -1
  144. package/dist/nodes/Wordpress/__schema__/v1.0.0/post/get.json +7 -1
  145. package/dist/nodes/Zoho/__schema__/v1.0.0/contact/getAll.json +15 -16
  146. package/dist/nodes/Zoho/__schema__/v1.0.0/lead/getAll.json +1 -122
  147. package/dist/nodes/Zoom/__schema__/v1.0.0/meeting/getAll.json +1 -4
  148. package/dist/types/credentials.json +3 -2
  149. package/dist/types/nodes.json +9 -7
  150. package/package.json +9 -6
@@ -0,0 +1,318 @@
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
+ getUserNameFromExistingUsers: () => getUserNameFromExistingUsers,
22
+ getUserPool: () => getUserPool,
23
+ getUsersInGroup: () => getUsersInGroup,
24
+ preSendAttributes: () => preSendAttributes,
25
+ preSendDesiredDeliveryMediums: () => preSendDesiredDeliveryMediums,
26
+ preSendStringifyBody: () => preSendStringifyBody,
27
+ preSendUserFields: () => preSendUserFields,
28
+ processGroup: () => processGroup,
29
+ simplifyUser: () => simplifyUser,
30
+ simplifyUserPool: () => simplifyUserPool,
31
+ validateArn: () => validateArn
32
+ });
33
+ module.exports = __toCommonJS(utils_exports);
34
+ var import_n8n_workflow = require("n8n-workflow");
35
+ var import_transport = require("../transport");
36
+ const validateEmail = (email) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
37
+ const validatePhoneNumber = (phone) => /^\+[0-9]\d{1,14}$/.test(phone);
38
+ async function preSendStringifyBody(requestOptions) {
39
+ if (requestOptions.body) {
40
+ requestOptions.body = JSON.stringify(requestOptions.body);
41
+ }
42
+ return requestOptions;
43
+ }
44
+ async function getUserPool(userPoolId) {
45
+ if (!userPoolId) {
46
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), "User Pool ID is required");
47
+ }
48
+ const response = await import_transport.awsApiRequest.call(
49
+ this,
50
+ "POST",
51
+ "DescribeUserPool",
52
+ JSON.stringify({ UserPoolId: userPoolId })
53
+ );
54
+ if (!response?.UserPool) {
55
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), "User Pool not found in response");
56
+ }
57
+ return response.UserPool;
58
+ }
59
+ async function getUsersInGroup(groupName, userPoolId) {
60
+ if (!userPoolId) {
61
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), "User Pool ID is required");
62
+ }
63
+ const requestBody = {
64
+ UserPoolId: userPoolId,
65
+ GroupName: groupName
66
+ };
67
+ const allUsers = await import_transport.awsApiRequestAllItems.call(
68
+ this,
69
+ "POST",
70
+ "ListUsersInGroup",
71
+ requestBody,
72
+ "Users"
73
+ );
74
+ return allUsers;
75
+ }
76
+ async function getUserNameFromExistingUsers(userName, userPoolId, isEmailOrPhone) {
77
+ if (isEmailOrPhone) {
78
+ return userName;
79
+ }
80
+ const usersResponse = await import_transport.awsApiRequest.call(
81
+ this,
82
+ "POST",
83
+ "ListUsers",
84
+ JSON.stringify({
85
+ UserPoolId: userPoolId,
86
+ Filter: `sub = "${userName}"`
87
+ })
88
+ );
89
+ const username = usersResponse.Users && usersResponse.Users.length > 0 ? usersResponse.Users[0].Username : void 0;
90
+ return username;
91
+ }
92
+ async function preSendUserFields(requestOptions) {
93
+ const operation = this.getNodeParameter("operation");
94
+ const userPoolId = this.getNodeParameter("userPool", void 0, {
95
+ extractValue: true
96
+ });
97
+ const userPool = await getUserPool.call(this, userPoolId);
98
+ const usernameAttributes = userPool.UsernameAttributes ?? [];
99
+ const isEmailAuth = usernameAttributes.includes("email");
100
+ const isPhoneAuth = usernameAttributes.includes("phone_number");
101
+ const isEmailOrPhone = isEmailAuth || isPhoneAuth;
102
+ const getValidatedNewUserName = () => {
103
+ const newUsername = this.getNodeParameter("newUserName");
104
+ if (isEmailAuth && !validateEmail(newUsername)) {
105
+ throw new import_n8n_workflow.NodeApiError(this.getNode(), {
106
+ message: "Invalid email format",
107
+ description: "Please provide a valid email (e.g., name@gmail.com)"
108
+ });
109
+ }
110
+ if (isPhoneAuth && !validatePhoneNumber(newUsername)) {
111
+ throw new import_n8n_workflow.NodeApiError(this.getNode(), {
112
+ message: "Invalid phone number format",
113
+ description: "Please provide a valid phone number (e.g., +14155552671)"
114
+ });
115
+ }
116
+ return newUsername;
117
+ };
118
+ const finalUserName = operation === "create" ? getValidatedNewUserName() : await getUserNameFromExistingUsers.call(
119
+ this,
120
+ this.getNodeParameter("user", void 0, { extractValue: true }),
121
+ userPoolId,
122
+ isEmailOrPhone
123
+ );
124
+ const body = (0, import_n8n_workflow.jsonParse)(String(requestOptions.body), {
125
+ acceptJSObject: true,
126
+ errorMessage: "Invalid request body. Request body must be valid JSON."
127
+ });
128
+ return {
129
+ ...requestOptions,
130
+ body: JSON.stringify({
131
+ ...body,
132
+ ...finalUserName ? { Username: finalUserName } : {}
133
+ })
134
+ };
135
+ }
136
+ async function processGroup(items, response) {
137
+ const userPoolId = this.getNodeParameter("userPool", void 0, {
138
+ extractValue: true
139
+ });
140
+ const includeUsers = this.getNodeParameter("includeUsers");
141
+ const body = response.body;
142
+ if (body.Group) {
143
+ const group = body.Group;
144
+ if (!includeUsers) {
145
+ return this.helpers.returnJsonArray({ ...group });
146
+ }
147
+ const users = await getUsersInGroup.call(this, group.GroupName, userPoolId);
148
+ return this.helpers.returnJsonArray({ ...group, Users: users });
149
+ }
150
+ const groups = response.body.Groups ?? [];
151
+ if (!includeUsers) {
152
+ return items;
153
+ }
154
+ const processedGroups = [];
155
+ for (const group of groups) {
156
+ const users = await getUsersInGroup.call(this, group.GroupName, userPoolId);
157
+ processedGroups.push({
158
+ ...group,
159
+ Users: users
160
+ });
161
+ }
162
+ return items.map((item) => ({ json: { ...item.json, Groups: processedGroups } }));
163
+ }
164
+ async function validateArn(requestOptions) {
165
+ const arn = this.getNodeParameter("additionalFields.arn", "");
166
+ const arnRegex = /^arn:[-.\w+=/,@]+:[-.\w+=/,@]+:([-.\w+=/,@]*)?:[0-9]+:[-.\w+=/,@]+(:[-.\w+=/,@]+)?(:[-.\w+=/,@]+)?$/;
167
+ if (!arnRegex.test(arn)) {
168
+ throw new import_n8n_workflow.NodeApiError(this.getNode(), {
169
+ message: "Invalid ARN format",
170
+ description: "Please provide a valid AWS ARN (e.g., arn:aws:iam::123456789012:role/GroupRole)."
171
+ });
172
+ }
173
+ return requestOptions;
174
+ }
175
+ async function simplifyUserPool(items, _response) {
176
+ const simple = this.getNodeParameter("simple");
177
+ if (!simple) {
178
+ return items;
179
+ }
180
+ return items.map((item) => {
181
+ const data = item.json?.UserPool;
182
+ if (!data) {
183
+ return;
184
+ }
185
+ const {
186
+ AccountRecoverySetting,
187
+ AdminCreateUserConfig,
188
+ EmailConfiguration,
189
+ LambdaConfig,
190
+ Policies,
191
+ SchemaAttributes,
192
+ UserAttributeUpdateSettings,
193
+ UserPoolTags,
194
+ UserPoolTier,
195
+ VerificationMessageTemplate,
196
+ ...selectedData
197
+ } = data;
198
+ return { json: { UserPool: { ...selectedData } } };
199
+ }).filter(Boolean);
200
+ }
201
+ async function simplifyUser(items, _response) {
202
+ const simple = this.getNodeParameter("simple");
203
+ if (!simple) {
204
+ return items;
205
+ }
206
+ return items.map((item) => {
207
+ const data = item.json;
208
+ if (!data) {
209
+ return;
210
+ }
211
+ if (Array.isArray(data.Users)) {
212
+ const users = data.Users;
213
+ const simplifiedUsers = users.map((user) => {
214
+ const attributesArray = user.Attributes ?? [];
215
+ const userAttributes = Object.fromEntries(
216
+ attributesArray.filter(({ Name }) => Name?.trim()).map(({ Name, Value }) => [Name, Value ?? ""])
217
+ );
218
+ const { Attributes, ...rest } = user;
219
+ return { ...rest, ...userAttributes };
220
+ });
221
+ return { json: { ...data, Users: simplifiedUsers } };
222
+ }
223
+ if (Array.isArray(data.UserAttributes)) {
224
+ const attributesArray = data.UserAttributes;
225
+ const userAttributes = Object.fromEntries(
226
+ attributesArray.filter(({ Name }) => Name?.trim()).map(({ Name, Value }) => [Name, Value ?? ""])
227
+ );
228
+ const { UserAttributes, ...rest } = data;
229
+ return { json: { ...rest, ...userAttributes } };
230
+ }
231
+ return item;
232
+ }).filter(Boolean);
233
+ }
234
+ async function preSendAttributes(requestOptions) {
235
+ const operation = this.getNodeParameter("operation", 0);
236
+ const parameterName = operation === "create" ? "additionalFields.userAttributes.attributes" : "userAttributes.attributes";
237
+ const attributes = this.getNodeParameter(parameterName, []);
238
+ if (operation === "update" && (!attributes || attributes.length === 0)) {
239
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), "No user attributes provided", {
240
+ description: "At least one user attribute must be provided for the update operation."
241
+ });
242
+ }
243
+ if (operation === "create") {
244
+ const hasEmail = attributes.some((a) => a.standardName === "email");
245
+ const hasEmailVerified = attributes.some(
246
+ (a) => a.standardName === "email_verified" && a.value === "true"
247
+ );
248
+ if (hasEmailVerified && !hasEmail) {
249
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), 'Missing required "email" attribute', {
250
+ description: '"email_verified" is set to true, but the corresponding "email" attribute is not provided.'
251
+ });
252
+ }
253
+ const hasPhone = attributes.some((a) => a.standardName === "phone_number");
254
+ const hasPhoneVerified = attributes.some(
255
+ (a) => a.standardName === "phone_number_verified" && a.value === "true"
256
+ );
257
+ if (hasPhoneVerified && !hasPhone) {
258
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), 'Missing required "phone_number" attribute', {
259
+ description: '"phone_number_verified" is set to true, but the corresponding "phone_number" attribute is not provided.'
260
+ });
261
+ }
262
+ }
263
+ const body = (0, import_n8n_workflow.jsonParse)(String(requestOptions.body), {
264
+ acceptJSObject: true,
265
+ errorMessage: "Invalid request body. Request body must be valid JSON."
266
+ });
267
+ body.UserAttributes = attributes.map(({ attributeType, standardName, customName, value }) => {
268
+ if (!value || !attributeType || !(standardName ?? customName)) {
269
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), "Invalid User Attribute", {
270
+ description: "Each attribute must have a valid name and value."
271
+ });
272
+ }
273
+ const attributeName = attributeType === "standard" ? standardName : `custom:${customName?.startsWith("custom:") ? customName : customName}`;
274
+ return { Name: attributeName, Value: value };
275
+ });
276
+ requestOptions.body = JSON.stringify(body);
277
+ return requestOptions;
278
+ }
279
+ async function preSendDesiredDeliveryMediums(requestOptions) {
280
+ const desiredDeliveryMediums = this.getNodeParameter(
281
+ "additionalFields.desiredDeliveryMediums",
282
+ []
283
+ );
284
+ const attributes = this.getNodeParameter(
285
+ "additionalFields.userAttributes.attributes",
286
+ []
287
+ );
288
+ const hasEmail = attributes.some((attr) => attr.standardName === "email" && !!attr.value?.trim());
289
+ const hasPhone = attributes.some(
290
+ (attr) => attr.standardName === "phone_number" && !!attr.value?.trim()
291
+ );
292
+ if (desiredDeliveryMediums.includes("EMAIL") && !hasEmail) {
293
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), 'Missing required "email" attribute', {
294
+ description: "Email is selected as a delivery medium but no email attribute is provided."
295
+ });
296
+ }
297
+ if (desiredDeliveryMediums.includes("SMS") && !hasPhone) {
298
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), 'Missing required "phone_number" attribute', {
299
+ description: "SMS is selected as a delivery medium but no phone_number attribute is provided."
300
+ });
301
+ }
302
+ return requestOptions;
303
+ }
304
+ // Annotate the CommonJS export names for ESM import in node:
305
+ 0 && (module.exports = {
306
+ getUserNameFromExistingUsers,
307
+ getUserPool,
308
+ getUsersInGroup,
309
+ preSendAttributes,
310
+ preSendDesiredDeliveryMediums,
311
+ preSendStringifyBody,
312
+ preSendUserFields,
313
+ processGroup,
314
+ simplifyUser,
315
+ simplifyUserPool,
316
+ validateArn
317
+ });
318
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../nodes/Aws/Cognito/helpers/utils.ts"],"sourcesContent":["import type {\n\tIHttpRequestOptions,\n\tILoadOptionsFunctions,\n\tIDataObject,\n\tIExecuteSingleFunctions,\n\tIN8nHttpFullResponse,\n\tINodeExecutionData,\n} from 'n8n-workflow';\nimport { jsonParse, NodeApiError, NodeOperationError } from 'n8n-workflow';\n\nimport type {\n\tIGroup,\n\tIGroupWithUserResponse,\n\tIListGroupsResponse,\n\tIUser,\n\tIUserAttribute,\n\tIUserAttributeInput,\n\tIUserPool,\n} from './interfaces';\nimport { awsApiRequest, awsApiRequestAllItems } from '../transport';\n\nconst validateEmail = (email: string): boolean => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\nconst validatePhoneNumber = (phone: string): boolean => /^\\+[0-9]\\d{1,14}$/.test(phone);\n\nexport async function preSendStringifyBody(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tif (requestOptions.body) {\n\t\trequestOptions.body = JSON.stringify(requestOptions.body);\n\t}\n\treturn requestOptions;\n}\n\nexport async function getUserPool(\n\tthis: IExecuteSingleFunctions | ILoadOptionsFunctions,\n\tuserPoolId: string,\n): Promise<IUserPool> {\n\tif (!userPoolId) {\n\t\tthrow new NodeOperationError(this.getNode(), 'User Pool ID is required');\n\t}\n\n\tconst response = (await awsApiRequest.call(\n\t\tthis,\n\t\t'POST',\n\t\t'DescribeUserPool',\n\t\tJSON.stringify({ UserPoolId: userPoolId }),\n\t)) as { UserPool: IUserPool };\n\n\tif (!response?.UserPool) {\n\t\tthrow new NodeOperationError(this.getNode(), 'User Pool not found in response');\n\t}\n\n\treturn response.UserPool;\n}\n\nexport async function getUsersInGroup(\n\tthis: IExecuteSingleFunctions | ILoadOptionsFunctions,\n\tgroupName: string,\n\tuserPoolId: string,\n): Promise<IUser[]> {\n\tif (!userPoolId) {\n\t\tthrow new NodeOperationError(this.getNode(), 'User Pool ID is required');\n\t}\n\n\tconst requestBody: IDataObject = {\n\t\tUserPoolId: userPoolId,\n\t\tGroupName: groupName,\n\t};\n\n\tconst allUsers = (await awsApiRequestAllItems.call(\n\t\tthis,\n\t\t'POST',\n\t\t'ListUsersInGroup',\n\t\trequestBody,\n\t\t'Users',\n\t)) as unknown as IUser[];\n\n\treturn allUsers;\n}\n\nexport async function getUserNameFromExistingUsers(\n\tthis: IExecuteSingleFunctions | ILoadOptionsFunctions,\n\tuserName: string,\n\tuserPoolId: string,\n\tisEmailOrPhone: boolean,\n): Promise<string | undefined> {\n\tif (isEmailOrPhone) {\n\t\treturn userName;\n\t}\n\n\tconst usersResponse = (await awsApiRequest.call(\n\t\tthis,\n\t\t'POST',\n\t\t'ListUsers',\n\t\tJSON.stringify({\n\t\t\tUserPoolId: userPoolId,\n\t\t\tFilter: `sub = \"${userName}\"`,\n\t\t}),\n\t)) as { Users: IUser[] };\n\n\tconst username =\n\t\tusersResponse.Users && usersResponse.Users.length > 0\n\t\t\t? usersResponse.Users[0].Username\n\t\t\t: undefined;\n\n\treturn username;\n}\n\nexport async function preSendUserFields(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst operation = this.getNodeParameter('operation') as string;\n\tconst userPoolId = this.getNodeParameter('userPool', undefined, {\n\t\textractValue: true,\n\t}) as string;\n\n\tconst userPool = await getUserPool.call(this, userPoolId);\n\n\tconst usernameAttributes = userPool.UsernameAttributes ?? [];\n\tconst isEmailAuth = usernameAttributes.includes('email');\n\tconst isPhoneAuth = usernameAttributes.includes('phone_number');\n\tconst isEmailOrPhone = isEmailAuth || isPhoneAuth;\n\n\tconst getValidatedNewUserName = (): string => {\n\t\tconst newUsername = this.getNodeParameter('newUserName') as string;\n\n\t\tif (isEmailAuth && !validateEmail(newUsername)) {\n\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\tmessage: 'Invalid email format',\n\t\t\t\tdescription: 'Please provide a valid email (e.g., name@gmail.com)',\n\t\t\t});\n\t\t}\n\t\tif (isPhoneAuth && !validatePhoneNumber(newUsername)) {\n\t\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\t\tmessage: 'Invalid phone number format',\n\t\t\t\tdescription: 'Please provide a valid phone number (e.g., +14155552671)',\n\t\t\t});\n\t\t}\n\n\t\treturn newUsername;\n\t};\n\n\tconst finalUserName =\n\t\toperation === 'create'\n\t\t\t? getValidatedNewUserName()\n\t\t\t: await getUserNameFromExistingUsers.call(\n\t\t\t\t\tthis,\n\t\t\t\t\tthis.getNodeParameter('user', undefined, { extractValue: true }) as string,\n\t\t\t\t\tuserPoolId,\n\t\t\t\t\tisEmailOrPhone,\n\t\t\t\t);\n\n\tconst body = jsonParse<IDataObject>(String(requestOptions.body), {\n\t\tacceptJSObject: true,\n\t\terrorMessage: 'Invalid request body. Request body must be valid JSON.',\n\t});\n\n\treturn {\n\t\t...requestOptions,\n\t\tbody: JSON.stringify({\n\t\t\t...body,\n\t\t\t...(finalUserName ? { Username: finalUserName } : {}),\n\t\t}),\n\t};\n}\n\nexport async function processGroup(\n\tthis: IExecuteSingleFunctions,\n\titems: INodeExecutionData[],\n\tresponse: IN8nHttpFullResponse,\n): Promise<INodeExecutionData[]> {\n\tconst userPoolId = this.getNodeParameter('userPool', undefined, {\n\t\textractValue: true,\n\t}) as string;\n\tconst includeUsers = this.getNodeParameter('includeUsers') as boolean;\n\tconst body = response.body as IDataObject;\n\n\tif (body.Group) {\n\t\tconst group = body.Group as IGroup;\n\n\t\tif (!includeUsers) {\n\t\t\treturn this.helpers.returnJsonArray({ ...group });\n\t\t}\n\n\t\tconst users = await getUsersInGroup.call(this, group.GroupName, userPoolId);\n\t\treturn this.helpers.returnJsonArray({ ...group, Users: users });\n\t}\n\n\tconst groups = (response.body as IListGroupsResponse).Groups ?? [];\n\n\tif (!includeUsers) {\n\t\treturn items;\n\t}\n\n\tconst processedGroups: IGroupWithUserResponse[] = [];\n\tfor (const group of groups) {\n\t\tconst users = await getUsersInGroup.call(this, group.GroupName, userPoolId);\n\t\tprocessedGroups.push({\n\t\t\t...group,\n\t\t\tUsers: users,\n\t\t});\n\t}\n\n\treturn items.map((item) => ({ json: { ...item.json, Groups: processedGroups } }));\n}\n\nexport async function validateArn(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst arn = this.getNodeParameter('additionalFields.arn', '') as string;\n\tconst arnRegex =\n\t\t/^arn:[-.\\w+=/,@]+:[-.\\w+=/,@]+:([-.\\w+=/,@]*)?:[0-9]+:[-.\\w+=/,@]+(:[-.\\w+=/,@]+)?(:[-.\\w+=/,@]+)?$/;\n\n\tif (!arnRegex.test(arn)) {\n\t\tthrow new NodeApiError(this.getNode(), {\n\t\t\tmessage: 'Invalid ARN format',\n\t\t\tdescription:\n\t\t\t\t'Please provide a valid AWS ARN (e.g., arn:aws:iam::123456789012:role/GroupRole).',\n\t\t});\n\t}\n\n\treturn requestOptions;\n}\n\nexport async function simplifyUserPool(\n\tthis: IExecuteSingleFunctions,\n\titems: INodeExecutionData[],\n\t_response: IN8nHttpFullResponse,\n): Promise<INodeExecutionData[]> {\n\tconst simple = this.getNodeParameter('simple') as boolean;\n\n\tif (!simple) {\n\t\treturn items;\n\t}\n\n\treturn items\n\t\t.map((item) => {\n\t\t\tconst data = item.json?.UserPool as IUserPool;\n\n\t\t\tif (!data) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tAccountRecoverySetting,\n\t\t\t\tAdminCreateUserConfig,\n\t\t\t\tEmailConfiguration,\n\t\t\t\tLambdaConfig,\n\t\t\t\tPolicies,\n\t\t\t\tSchemaAttributes,\n\t\t\t\tUserAttributeUpdateSettings,\n\t\t\t\tUserPoolTags,\n\t\t\t\tUserPoolTier,\n\t\t\t\tVerificationMessageTemplate,\n\t\t\t\t...selectedData\n\t\t\t} = data;\n\n\t\t\treturn { json: { UserPool: { ...selectedData } } };\n\t\t})\n\t\t.filter(Boolean) as INodeExecutionData[];\n}\n\nexport async function simplifyUser(\n\tthis: IExecuteSingleFunctions,\n\titems: INodeExecutionData[],\n\t_response: IN8nHttpFullResponse,\n): Promise<INodeExecutionData[]> {\n\tconst simple = this.getNodeParameter('simple') as boolean;\n\n\tif (!simple) {\n\t\treturn items;\n\t}\n\n\treturn items\n\t\t.map((item) => {\n\t\t\tconst data = item.json;\n\n\t\t\tif (!data) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (Array.isArray(data.Users)) {\n\t\t\t\tconst users = data.Users as IUser[];\n\n\t\t\t\tconst simplifiedUsers = users.map((user) => {\n\t\t\t\t\tconst attributesArray = user.Attributes ?? [];\n\n\t\t\t\t\tconst userAttributes = Object.fromEntries(\n\t\t\t\t\t\tattributesArray\n\t\t\t\t\t\t\t.filter(({ Name }) => Name?.trim())\n\t\t\t\t\t\t\t.map(({ Name, Value }) => [Name, Value ?? '']),\n\t\t\t\t\t);\n\n\t\t\t\t\tconst { Attributes, ...rest } = user;\n\t\t\t\t\treturn { ...rest, ...userAttributes };\n\t\t\t\t});\n\n\t\t\t\treturn { json: { ...data, Users: simplifiedUsers } };\n\t\t\t}\n\n\t\t\tif (Array.isArray(data.UserAttributes)) {\n\t\t\t\tconst attributesArray = data.UserAttributes as IUserAttribute[];\n\n\t\t\t\tconst userAttributes = Object.fromEntries(\n\t\t\t\t\tattributesArray\n\t\t\t\t\t\t.filter(({ Name }) => Name?.trim())\n\t\t\t\t\t\t.map(({ Name, Value }) => [Name, Value ?? '']),\n\t\t\t\t);\n\n\t\t\t\tconst { UserAttributes, ...rest } = data;\n\t\t\t\treturn { json: { ...rest, ...userAttributes } };\n\t\t\t}\n\n\t\t\treturn item;\n\t\t})\n\t\t.filter(Boolean) as INodeExecutionData[];\n}\n\nexport async function preSendAttributes(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst operation = this.getNodeParameter('operation', 0) as string;\n\n\tconst parameterName =\n\t\toperation === 'create'\n\t\t\t? 'additionalFields.userAttributes.attributes'\n\t\t\t: 'userAttributes.attributes';\n\tconst attributes = this.getNodeParameter(parameterName, []) as IUserAttributeInput[];\n\n\tif (operation === 'update' && (!attributes || attributes.length === 0)) {\n\t\tthrow new NodeOperationError(this.getNode(), 'No user attributes provided', {\n\t\t\tdescription: 'At least one user attribute must be provided for the update operation.',\n\t\t});\n\t}\n\n\tif (operation === 'create') {\n\t\tconst hasEmail = attributes.some((a) => a.standardName === 'email');\n\t\tconst hasEmailVerified = attributes.some(\n\t\t\t(a) => a.standardName === 'email_verified' && a.value === 'true',\n\t\t);\n\n\t\tif (hasEmailVerified && !hasEmail) {\n\t\t\tthrow new NodeOperationError(this.getNode(), 'Missing required \"email\" attribute', {\n\t\t\t\tdescription:\n\t\t\t\t\t'\"email_verified\" is set to true, but the corresponding \"email\" attribute is not provided.',\n\t\t\t});\n\t\t}\n\n\t\tconst hasPhone = attributes.some((a) => a.standardName === 'phone_number');\n\t\tconst hasPhoneVerified = attributes.some(\n\t\t\t(a) => a.standardName === 'phone_number_verified' && a.value === 'true',\n\t\t);\n\n\t\tif (hasPhoneVerified && !hasPhone) {\n\t\t\tthrow new NodeOperationError(this.getNode(), 'Missing required \"phone_number\" attribute', {\n\t\t\t\tdescription:\n\t\t\t\t\t'\"phone_number_verified\" is set to true, but the corresponding \"phone_number\" attribute is not provided.',\n\t\t\t});\n\t\t}\n\t}\n\n\tconst body = jsonParse<IDataObject>(String(requestOptions.body), {\n\t\tacceptJSObject: true,\n\t\terrorMessage: 'Invalid request body. Request body must be valid JSON.',\n\t});\n\n\tbody.UserAttributes = attributes.map(({ attributeType, standardName, customName, value }) => {\n\t\tif (!value || !attributeType || !(standardName ?? customName)) {\n\t\t\tthrow new NodeOperationError(this.getNode(), 'Invalid User Attribute', {\n\t\t\t\tdescription: 'Each attribute must have a valid name and value.',\n\t\t\t});\n\t\t}\n\n\t\tconst attributeName =\n\t\t\tattributeType === 'standard'\n\t\t\t\t? standardName\n\t\t\t\t: `custom:${customName?.startsWith('custom:') ? customName : customName}`;\n\n\t\treturn { Name: attributeName, Value: value };\n\t});\n\n\trequestOptions.body = JSON.stringify(body);\n\n\treturn requestOptions;\n}\n\nexport async function preSendDesiredDeliveryMediums(\n\tthis: IExecuteSingleFunctions,\n\trequestOptions: IHttpRequestOptions,\n): Promise<IHttpRequestOptions> {\n\tconst desiredDeliveryMediums = this.getNodeParameter(\n\t\t'additionalFields.desiredDeliveryMediums',\n\t\t[],\n\t) as string[];\n\n\tconst attributes = this.getNodeParameter(\n\t\t'additionalFields.userAttributes.attributes',\n\t\t[],\n\t) as IUserAttributeInput[];\n\n\tconst hasEmail = attributes.some((attr) => attr.standardName === 'email' && !!attr.value?.trim());\n\tconst hasPhone = attributes.some(\n\t\t(attr) => attr.standardName === 'phone_number' && !!attr.value?.trim(),\n\t);\n\n\tif (desiredDeliveryMediums.includes('EMAIL') && !hasEmail) {\n\t\tthrow new NodeOperationError(this.getNode(), 'Missing required \"email\" attribute', {\n\t\t\tdescription: 'Email is selected as a delivery medium but no email attribute is provided.',\n\t\t});\n\t}\n\n\tif (desiredDeliveryMediums.includes('SMS') && !hasPhone) {\n\t\tthrow new NodeOperationError(this.getNode(), 'Missing required \"phone_number\" attribute', {\n\t\t\tdescription:\n\t\t\t\t'SMS is selected as a delivery medium but no phone_number attribute is provided.',\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/Cognito/methods/index.ts"],"sourcesContent":["export * as listSearch from './listSearch';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA4B;","names":[]}
@@ -0,0 +1,157 @@
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
+ searchUserPools: () => searchUserPools,
24
+ searchUsers: () => searchUsers
25
+ });
26
+ module.exports = __toCommonJS(listSearch_exports);
27
+ var import_n8n_workflow = require("n8n-workflow");
28
+ var import_utils = require("../helpers/utils");
29
+ var import_transport = require("../transport");
30
+ function formatResults(items, filter) {
31
+ return items.map(({ id, name }) => ({
32
+ name: String(name).replace(/ /g, ""),
33
+ value: String(id)
34
+ })).filter(({ name }) => !filter || name.toLowerCase().includes(filter.toLowerCase())).sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));
35
+ }
36
+ async function searchGroups(filter, paginationToken) {
37
+ const userPoolId = this.getNodeParameter("userPool", void 0, {
38
+ extractValue: true
39
+ });
40
+ if (!userPoolId) {
41
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), "User Pool ID is required to search groups");
42
+ }
43
+ const responseData = await import_transport.awsApiRequest.call(
44
+ this,
45
+ "POST",
46
+ "ListGroups",
47
+ JSON.stringify({ UserPoolId: userPoolId, Limit: 50, NextToken: paginationToken })
48
+ );
49
+ const groups = responseData.Groups;
50
+ const groupsMapped = groups.map(({ GroupName }) => ({
51
+ id: GroupName,
52
+ name: GroupName
53
+ }));
54
+ const formattedResults = formatResults(groupsMapped, filter);
55
+ return { results: formattedResults, paginationToken: responseData.NextToken };
56
+ }
57
+ async function searchGroupsForUser(filter) {
58
+ const userPoolId = this.getNodeParameter("userPool", void 0, {
59
+ extractValue: true
60
+ });
61
+ const inputUser = this.getNodeParameter("user", void 0, {
62
+ extractValue: true
63
+ });
64
+ if (!userPoolId || !inputUser) {
65
+ return { results: [] };
66
+ }
67
+ const userPool = await import_utils.getUserPool.call(this, userPoolId);
68
+ const usernameAttributes = userPool.UsernameAttributes ?? [];
69
+ const isEmailAuth = usernameAttributes.includes("email");
70
+ const isPhoneAuth = usernameAttributes.includes("phone_number");
71
+ const isEmailOrPhone = isEmailAuth || isPhoneAuth;
72
+ const userName = await import_utils.getUserNameFromExistingUsers.call(
73
+ this,
74
+ inputUser,
75
+ userPoolId,
76
+ isEmailOrPhone
77
+ );
78
+ if (!userName) {
79
+ return { results: [] };
80
+ }
81
+ const groups = await import_transport.awsApiRequestAllItems.call(
82
+ this,
83
+ "POST",
84
+ "AdminListGroupsForUser",
85
+ {
86
+ Username: userName,
87
+ UserPoolId: userPoolId
88
+ },
89
+ "Groups"
90
+ );
91
+ const resultGroups = groups.filter((group) => !filter || group.GroupName.toLowerCase().includes(filter.toLowerCase())).map((group) => ({
92
+ name: group.GroupName,
93
+ value: group.GroupName
94
+ })).sort((a, b) => a.name.localeCompare(b.name));
95
+ return { results: resultGroups };
96
+ }
97
+ async function searchUsers(filter, paginationToken) {
98
+ const userPoolId = this.getNodeParameter("userPool", void 0, { extractValue: true });
99
+ if (!userPoolId) {
100
+ throw new import_n8n_workflow.NodeOperationError(this.getNode(), "User Pool ID is required to search users");
101
+ }
102
+ const userPoolData = await import_transport.awsApiRequest.call(
103
+ this,
104
+ "POST",
105
+ "DescribeUserPool",
106
+ JSON.stringify({ UserPoolId: userPoolId })
107
+ );
108
+ const userPool = userPoolData.UserPool;
109
+ const usernameAttributes = userPool.UsernameAttributes;
110
+ const responseData = await import_transport.awsApiRequest.call(
111
+ this,
112
+ "POST",
113
+ "ListUsers",
114
+ JSON.stringify({
115
+ UserPoolId: userPoolId,
116
+ Limit: 50,
117
+ NextToken: paginationToken
118
+ })
119
+ );
120
+ const users = responseData.Users;
121
+ if (!users.length) {
122
+ return { results: [] };
123
+ }
124
+ const userResults = users.map((user) => {
125
+ const attributes = user.Attributes ?? [];
126
+ const username = user.Username;
127
+ const email = attributes.find((attr) => attr.Name === "email")?.Value ?? "";
128
+ const phoneNumber = attributes.find((attr) => attr.Name === "phone_number")?.Value ?? "";
129
+ const sub = attributes.find((attr) => attr.Name === "sub")?.Value ?? "";
130
+ const name = usernameAttributes?.includes("email") ? email : usernameAttributes?.includes("phone_number") ? phoneNumber : username;
131
+ return { id: sub, name, value: sub };
132
+ });
133
+ return { results: formatResults(userResults, filter), paginationToken: responseData.NextToken };
134
+ }
135
+ async function searchUserPools(filter, paginationToken) {
136
+ const responseData = await import_transport.awsApiRequest.call(
137
+ this,
138
+ "POST",
139
+ "ListUserPools",
140
+ JSON.stringify({ Limit: 50, NextToken: paginationToken })
141
+ );
142
+ const userPools = responseData.UserPools;
143
+ const userPoolsMapped = userPools.map((userPool) => ({
144
+ id: userPool.Id,
145
+ name: userPool.Name
146
+ }));
147
+ const formattedResults = formatResults(userPoolsMapped, filter);
148
+ return { results: formattedResults, paginationToken: responseData.NextToken };
149
+ }
150
+ // Annotate the CommonJS export names for ESM import in node:
151
+ 0 && (module.exports = {
152
+ searchGroups,
153
+ searchGroupsForUser,
154
+ searchUserPools,
155
+ searchUsers
156
+ });
157
+ //# sourceMappingURL=listSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../nodes/Aws/Cognito/methods/listSearch.ts"],"sourcesContent":["import type {\n\tIDataObject,\n\tIExecuteSingleFunctions,\n\tILoadOptionsFunctions,\n\tINodeListSearchItems,\n\tINodeListSearchResult,\n} from 'n8n-workflow';\nimport { NodeOperationError } from 'n8n-workflow';\n\nimport type { IGroup, IUser, IUserAttribute, IUserPool } from '../helpers/interfaces';\nimport { getUserNameFromExistingUsers, getUserPool } from '../helpers/utils';\nimport { awsApiRequest, awsApiRequestAllItems } from '../transport';\n\nfunction formatResults(items: IDataObject[], filter?: string): INodeListSearchItems[] {\n\treturn items\n\t\t.map(({ id, name }) => ({\n\t\t\tname: String(name).replace(/ /g, ''),\n\t\t\tvalue: String(id),\n\t\t}))\n\t\t.filter(({ name }) => !filter || name.toLowerCase().includes(filter.toLowerCase()))\n\t\t.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));\n}\n\nexport async function searchGroups(\n\tthis: ILoadOptionsFunctions,\n\tfilter?: string,\n\tpaginationToken?: string,\n): Promise<INodeListSearchResult> {\n\tconst userPoolId = this.getNodeParameter('userPool', undefined, {\n\t\textractValue: true,\n\t}) as string;\n\tif (!userPoolId) {\n\t\tthrow new NodeOperationError(this.getNode(), 'User Pool ID is required to search groups');\n\t}\n\n\tconst responseData = (await awsApiRequest.call(\n\t\tthis,\n\t\t'POST',\n\t\t'ListGroups',\n\t\tJSON.stringify({ UserPoolId: userPoolId, Limit: 50, NextToken: paginationToken }),\n\t)) as IDataObject;\n\n\tconst groups = responseData.Groups as IDataObject[];\n\n\tconst groupsMapped = groups.map(({ GroupName }) => ({\n\t\tid: GroupName,\n\t\tname: GroupName,\n\t}));\n\n\tconst formattedResults = formatResults(groupsMapped, filter);\n\n\treturn { results: formattedResults, paginationToken: responseData.NextToken };\n}\n\nexport async function searchGroupsForUser(\n\tthis: ILoadOptionsFunctions,\n\tfilter?: string,\n): Promise<INodeListSearchResult> {\n\tconst userPoolId = this.getNodeParameter('userPool', undefined, {\n\t\textractValue: true,\n\t}) as string;\n\tconst inputUser = this.getNodeParameter('user', undefined, {\n\t\textractValue: true,\n\t}) as string;\n\n\tif (!userPoolId || !inputUser) {\n\t\treturn { results: [] };\n\t}\n\n\tconst userPool = await getUserPool.call(this, userPoolId);\n\n\tconst usernameAttributes = userPool.UsernameAttributes ?? [];\n\tconst isEmailAuth = usernameAttributes.includes('email');\n\tconst isPhoneAuth = usernameAttributes.includes('phone_number');\n\tconst isEmailOrPhone = isEmailAuth || isPhoneAuth;\n\n\tconst userName = await getUserNameFromExistingUsers.call(\n\t\tthis,\n\t\tinputUser,\n\t\tuserPoolId,\n\t\tisEmailOrPhone,\n\t);\n\n\tif (!userName) {\n\t\treturn { results: [] };\n\t}\n\n\tconst groups = (await awsApiRequestAllItems.call(\n\t\tthis,\n\t\t'POST',\n\t\t'AdminListGroupsForUser',\n\t\t{\n\t\t\tUsername: userName,\n\t\t\tUserPoolId: userPoolId,\n\t\t},\n\t\t'Groups',\n\t)) as unknown as IGroup[];\n\n\tconst resultGroups = groups\n\t\t.filter((group) => !filter || group.GroupName.toLowerCase().includes(filter.toLowerCase()))\n\t\t.map((group) => ({\n\t\t\tname: group.GroupName,\n\t\t\tvalue: group.GroupName,\n\t\t}))\n\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\n\treturn { results: resultGroups };\n}\n\nexport async function searchUsers(\n\tthis: IExecuteSingleFunctions | ILoadOptionsFunctions,\n\tfilter?: string,\n\tpaginationToken?: string,\n): Promise<INodeListSearchResult> {\n\tconst userPoolId = this.getNodeParameter('userPool', undefined, { extractValue: true }) as string;\n\n\tif (!userPoolId) {\n\t\tthrow new NodeOperationError(this.getNode(), 'User Pool ID is required to search users');\n\t}\n\n\tconst userPoolData = (await awsApiRequest.call(\n\t\tthis,\n\t\t'POST',\n\t\t'DescribeUserPool',\n\t\tJSON.stringify({ UserPoolId: userPoolId }),\n\t)) as IDataObject;\n\n\tconst userPool = userPoolData.UserPool as IUserPool;\n\tconst usernameAttributes = userPool.UsernameAttributes;\n\n\tconst responseData = (await awsApiRequest.call(\n\t\tthis,\n\t\t'POST',\n\t\t'ListUsers',\n\t\tJSON.stringify({\n\t\t\tUserPoolId: userPoolId,\n\t\t\tLimit: 50,\n\t\t\tNextToken: paginationToken,\n\t\t}),\n\t)) as IDataObject;\n\n\tconst users = responseData.Users as IUser[];\n\n\tif (!users.length) {\n\t\treturn { results: [] };\n\t}\n\n\tconst userResults = users.map((user) => {\n\t\tconst attributes: IUserAttribute[] = user.Attributes ?? [];\n\t\tconst username = user.Username;\n\n\t\tconst email = attributes.find((attr) => attr.Name === 'email')?.Value ?? '';\n\t\tconst phoneNumber = attributes.find((attr) => attr.Name === 'phone_number')?.Value ?? '';\n\t\tconst sub = attributes.find((attr) => attr.Name === 'sub')?.Value ?? '';\n\n\t\tconst name = usernameAttributes?.includes('email')\n\t\t\t? email\n\t\t\t: usernameAttributes?.includes('phone_number')\n\t\t\t\t? phoneNumber\n\t\t\t\t: username;\n\n\t\treturn { id: sub, name, value: sub };\n\t});\n\n\treturn { results: formatResults(userResults, filter), paginationToken: responseData.NextToken };\n}\n\nexport async function searchUserPools(\n\tthis: ILoadOptionsFunctions,\n\tfilter?: string,\n\tpaginationToken?: string,\n): Promise<INodeListSearchResult> {\n\tconst responseData = (await awsApiRequest.call(\n\t\tthis,\n\t\t'POST',\n\t\t'ListUserPools',\n\t\tJSON.stringify({ Limit: 50, NextToken: paginationToken }),\n\t)) as IDataObject;\n\n\tconst userPools = responseData.UserPools as IUserPool[];\n\n\tconst userPoolsMapped = userPools.map((userPool) => ({\n\t\tid: userPool.Id,\n\t\tname: userPool.Name,\n\t}));\n\n\tconst formattedResults = formatResults(userPoolsMapped, filter);\n\n\treturn { results: formattedResults, paginationToken: responseData.NextToken };\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,72 @@
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
+ awsApiRequestAllItems: () => awsApiRequestAllItems
23
+ });
24
+ module.exports = __toCommonJS(transport_exports);
25
+ async function awsApiRequest(method, action, body) {
26
+ const credentialsType = "aws";
27
+ const credentials = await this.getCredentials(credentialsType);
28
+ const requestOptions = {
29
+ url: "",
30
+ method,
31
+ body,
32
+ headers: {
33
+ "Content-Type": "application/x-amz-json-1.1",
34
+ "X-Amz-Target": `AWSCognitoIdentityProviderService.${action}`
35
+ },
36
+ qs: {
37
+ service: "cognito-idp",
38
+ _region: credentials.region
39
+ }
40
+ };
41
+ return await this.helpers.httpRequestWithAuthentication.call(
42
+ this,
43
+ credentialsType,
44
+ requestOptions
45
+ );
46
+ }
47
+ async function awsApiRequestAllItems(method, action, body, propertyName) {
48
+ const returnData = [];
49
+ let nextToken;
50
+ do {
51
+ const requestBody = {
52
+ ...body,
53
+ ...nextToken ? { NextToken: nextToken } : {}
54
+ };
55
+ const response = await awsApiRequest.call(
56
+ this,
57
+ method,
58
+ action,
59
+ JSON.stringify(requestBody)
60
+ );
61
+ const items = response[propertyName] ?? [];
62
+ returnData.push(...items);
63
+ nextToken = response.NextToken;
64
+ } while (nextToken);
65
+ return returnData;
66
+ }
67
+ // Annotate the CommonJS export names for ESM import in node:
68
+ 0 && (module.exports = {
69
+ awsApiRequest,
70
+ awsApiRequestAllItems
71
+ });
72
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../nodes/Aws/Cognito/transport/index.ts"],"sourcesContent":["import type {\n\tILoadOptionsFunctions,\n\tIPollFunctions,\n\tIHttpRequestOptions,\n\tIExecuteSingleFunctions,\n\tIDataObject,\n\tIHttpRequestMethods,\n} from 'n8n-workflow';\n\nimport type { AwsCredentialsType } from '../../../../credentials/Aws.credentials';\n\nexport async function awsApiRequest(\n\tthis: ILoadOptionsFunctions | IPollFunctions | IExecuteSingleFunctions,\n\tmethod: IHttpRequestMethods,\n\taction: string,\n\tbody: string,\n): Promise<any> {\n\tconst credentialsType = 'aws';\n\tconst credentials = await this.getCredentials<AwsCredentialsType>(credentialsType);\n\n\tconst requestOptions: IHttpRequestOptions = {\n\t\turl: '',\n\t\tmethod,\n\t\tbody,\n\t\theaders: {\n\t\t\t'Content-Type': 'application/x-amz-json-1.1',\n\t\t\t'X-Amz-Target': `AWSCognitoIdentityProviderService.${action}`,\n\t\t},\n\t\tqs: {\n\t\t\tservice: 'cognito-idp',\n\t\t\t_region: credentials.region,\n\t\t},\n\t};\n\n\treturn await this.helpers.httpRequestWithAuthentication.call(\n\t\tthis,\n\t\tcredentialsType,\n\t\trequestOptions,\n\t);\n}\n\nexport async function awsApiRequestAllItems(\n\tthis: ILoadOptionsFunctions | IPollFunctions | IExecuteSingleFunctions,\n\tmethod: IHttpRequestMethods,\n\taction: string,\n\tbody: IDataObject,\n\tpropertyName: string,\n): Promise<IDataObject[]> {\n\tconst returnData: IDataObject[] = [];\n\tlet nextToken: string | undefined;\n\n\tdo {\n\t\tconst requestBody: IDataObject = {\n\t\t\t...body,\n\t\t\t...(nextToken ? { NextToken: nextToken } : {}),\n\t\t};\n\n\t\tconst response = (await awsApiRequest.call(\n\t\t\tthis,\n\t\t\tmethod,\n\t\t\taction,\n\t\t\tJSON.stringify(requestBody),\n\t\t)) as IDataObject;\n\n\t\tconst items = (response[propertyName] ?? []) as IDataObject[];\n\t\treturnData.push(...items);\n\n\t\tnextToken = response.NextToken as string | undefined;\n\t} while (nextToken);\n\n\treturn returnData;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,eAAsB,cAErB,QACA,QACA,MACe;AACf,QAAM,kBAAkB;AACxB,QAAM,cAAc,MAAM,KAAK,eAAmC,eAAe;AAEjF,QAAM,iBAAsC;AAAA,IAC3C,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACR,gBAAgB;AAAA,MAChB,gBAAgB,qCAAqC,MAAM;AAAA,IAC5D;AAAA,IACA,IAAI;AAAA,MACH,SAAS;AAAA,MACT,SAAS,YAAY;AAAA,IACtB;AAAA,EACD;AAEA,SAAO,MAAM,KAAK,QAAQ,8BAA8B;AAAA,IACvD;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;AAEA,eAAsB,sBAErB,QACA,QACA,MACA,cACyB;AACzB,QAAM,aAA4B,CAAC;AACnC,MAAI;AAEJ,KAAG;AACF,UAAM,cAA2B;AAAA,MAChC,GAAG;AAAA,MACH,GAAI,YAAY,EAAE,WAAW,UAAU,IAAI,CAAC;AAAA,IAC7C;AAEA,UAAM,WAAY,MAAM,cAAc;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK,UAAU,WAAW;AAAA,IAC3B;AAEA,UAAM,QAAS,SAAS,YAAY,KAAK,CAAC;AAC1C,eAAW,KAAK,GAAG,KAAK;AAExB,gBAAY,SAAS;AAAA,EACtB,SAAS;AAET,SAAO;AACR;","names":[]}