dcos-core-monalisav2-latam 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +130 -0
  2. package/index.js +350 -0
  3. package/package.json +52 -0
  4. package/src/auth/handler.js +3 -0
  5. package/src/common/MondelezCastOrder.js +449 -0
  6. package/src/common/utils/AuthSecurity.js +46 -0
  7. package/src/common/utils/account-error-handler.js +279 -0
  8. package/src/common/utils/account-error-helper.js +231 -0
  9. package/src/common/utils/account-properties-handler.js +355 -0
  10. package/src/common/utils/api-response.js +62 -0
  11. package/src/common/utils/aws-services.js +186 -0
  12. package/src/common/utils/constants/account-error-codes.json +801 -0
  13. package/src/common/utils/constants.js +37 -0
  14. package/src/common/utils/convert/MondelezClientsItemsCast.js +52 -0
  15. package/src/common/utils/convert/MondelezInventoryItemsCast.js +15 -0
  16. package/src/common/utils/convert/MondelezOrderStatusCast.js +34 -0
  17. package/src/common/utils/convert/MondelezPricesItemsCast.js +37 -0
  18. package/src/common/utils/cron-ftp-get.js +143 -0
  19. package/src/common/utils/data-tables-helper.js +213 -0
  20. package/src/common/utils/date-range-calculator.js +113 -0
  21. package/src/common/utils/delay.js +17 -0
  22. package/src/common/utils/ftp-sftp.js +320 -0
  23. package/src/common/utils/logger.js +126 -0
  24. package/src/common/utils/nodemailerLib.js +61 -0
  25. package/src/common/utils/product-unit-converter.js +168 -0
  26. package/src/common/utils/schemas-utils.js +101 -0
  27. package/src/common/utils/seller-email-sharing-service.js +441 -0
  28. package/src/common/utils/sftp-utils.js +202 -0
  29. package/src/common/utils/status.js +15 -0
  30. package/src/common/utils/util.js +236 -0
  31. package/src/common/utils/validate-state-order.js +35 -0
  32. package/src/common/utils/validateProviders.js +67 -0
  33. package/src/common/utils/validation-data.js +45 -0
  34. package/src/common/utils/vtex/save-hooks.js +65 -0
  35. package/src/common/utils/vtex/save-schemas.js +65 -0
  36. package/src/common/utils/vtex-hook-handler.js +71 -0
  37. package/src/common/validation/AccountCoordinatesValidation.js +350 -0
  38. package/src/common/validation/GeneralErrorValidation.js +11 -0
  39. package/src/common/validation/MainErrorValidation.js +8 -0
  40. package/src/entities/account.js +639 -0
  41. package/src/entities/clients.js +104 -0
  42. package/src/entities/controlprice.js +196 -0
  43. package/src/entities/controlstock.js +206 -0
  44. package/src/entities/cron.js +77 -0
  45. package/src/entities/cronjob.js +71 -0
  46. package/src/entities/orders.js +195 -0
  47. package/src/entities/sftp-inbound.js +88 -0
  48. package/src/entities/sku.js +220 -0
  49. package/src/entities/taxpromotion.js +249 -0
  50. package/src/functions/account/account-get.js +262 -0
  51. package/src/functions/account/account-handler.js +299 -0
  52. package/src/functions/account/clients.js +10 -0
  53. package/src/functions/account/index.js +208 -0
  54. package/src/functions/actions/save-promotions-order-history.js +324 -0
  55. package/src/functions/affiliates/affiliates-hook-consumer.js +87 -0
  56. package/src/functions/affiliates/affiliates-hook-producer.js +45 -0
  57. package/src/functions/clients/clients-audience.js +62 -0
  58. package/src/functions/clients/clients-consumer.js +648 -0
  59. package/src/functions/clients/clients-producer.js +362 -0
  60. package/src/functions/clients/clients-suggested-product-consumer.js +166 -0
  61. package/src/functions/clients/helpers/suggested-product-mdlz.js +233 -0
  62. package/src/functions/clients_peru/email.html +129 -0
  63. package/src/functions/clients_peru/splitfile.js +357 -0
  64. package/src/functions/clients_peru/updateClients.js +1334 -0
  65. package/src/functions/clients_peru/utils.js +243 -0
  66. package/src/functions/cronjobs/cron-jobs-manager.js +40 -0
  67. package/src/functions/cronjobs/cron-jobs.js +171 -0
  68. package/src/functions/crons/cron.js +39 -0
  69. package/src/functions/distributors/distributor-handler.js +81 -0
  70. package/src/functions/distributors/distributor.js +535 -0
  71. package/src/functions/distributors/index.js +60 -0
  72. package/src/functions/financialpolicy/assign-financialpolicy.js +111 -0
  73. package/src/functions/financialpolicy/get-financialpolicy.js +91 -0
  74. package/src/functions/financialpolicy/index.js +28 -0
  75. package/src/functions/inventory/catalog-sync-consumer.js +17 -0
  76. package/src/functions/inventory/catalog-sync-handler.js +311 -0
  77. package/src/functions/inventory/inventory-consumer.js +119 -0
  78. package/src/functions/inventory/inventory-producer.js +197 -0
  79. package/src/functions/multiPresentation/multipre-queue.js +155 -0
  80. package/src/functions/multiPresentation/multipres.js +459 -0
  81. package/src/functions/nodeflow/index.js +83 -0
  82. package/src/functions/nodeflow/nodeflow-cron.js +200 -0
  83. package/src/functions/nodeflow/nodeflow-pub.js +203 -0
  84. package/src/functions/nodeflow/nodeflow-pvt.js +266 -0
  85. package/src/functions/notifications/download-leads-handler.js +67 -0
  86. package/src/functions/notifications/new-leads-notification-consumer.js +17 -0
  87. package/src/functions/notifications/new-leads-notification-handler.js +359 -0
  88. package/src/functions/notifications/order-status-notification-handler.js +482 -0
  89. package/src/functions/notifications/promotion-notification-handler.js +193 -0
  90. package/src/functions/orders/index.js +32 -0
  91. package/src/functions/orders/orders-cancel-handler.js +74 -0
  92. package/src/functions/orders/orders-handler.js +280 -0
  93. package/src/functions/orders/orders-hook-consumer.js +137 -0
  94. package/src/functions/orders/orders-hook-producer.js +170 -0
  95. package/src/functions/orders/orders-notifications-handler.js +137 -0
  96. package/src/functions/orders/orders-status-consumer.js +461 -0
  97. package/src/functions/orders/orders-status-producer.js +443 -0
  98. package/src/functions/prices/index.js +75 -0
  99. package/src/functions/prices/prices-consumer.js +236 -0
  100. package/src/functions/prices/prices-producer.js +323 -0
  101. package/src/functions/prices/promotion-and-tax.js +1284 -0
  102. package/src/functions/routesflow/assign-routeflow-queue.js +77 -0
  103. package/src/functions/schemas/vtex/handle-schemas.js +102 -0
  104. package/src/functions/security/process_gas.js +221 -0
  105. package/src/functions/security/security-handler.js +950 -0
  106. package/src/functions/sftp/sftp-consumer.js +453 -0
  107. package/src/functions/sftpIntegrations/processes/redirectServices.js +184 -0
  108. package/src/functions/sftpIntegrations/processes/validateFileSchema.js +226 -0
  109. package/src/functions/sftpIntegrations/schemas/credential-schema.js +123 -0
  110. package/src/functions/sftpIntegrations/schemas/record-schema.js +131 -0
  111. package/src/functions/sftpIntegrations/schemas/sftp_required_fields.json +3 -0
  112. package/src/functions/sftpIntegrations/sftp-config-producer.js +112 -0
  113. package/src/functions/sftpIntegrations/sftp-consumer.js +700 -0
  114. package/src/functions/sftpIntegrations/test/validateFile.test.js +122 -0
  115. package/src/functions/sftpIntegrations/utils/connect-dynamo.js +29 -0
  116. package/src/functions/sftpIntegrations/utils/split-data.js +25 -0
  117. package/src/functions/utils/index.js +130 -0
  118. package/src/functions/vtex/vtex-helpers.js +694 -0
  119. package/src/integrations/accountErrors/AccountErrorManager.js +437 -0
  120. package/src/integrations/audience/Audience.js +70 -0
  121. package/src/integrations/financialPolicy/FinancialPolicyApi.js +377 -0
  122. package/src/integrations/index.js +0 -0
  123. package/src/integrations/mobilvendor/MobilvendorApi.js +405 -0
  124. package/src/integrations/productmultipresentation/ProductMultiPresentation.js +200 -0
  125. package/src/mdlz/auth/SecretManagerApi.js +77 -0
  126. package/src/mdlz/client/MdlzApi.js +70 -0
  127. package/src/vtex/clients/ProvidersApi.js +51 -0
  128. package/src/vtex/clients/VtexApi.js +511 -0
  129. package/src/vtex/models/VtexOrder.js +87 -0
@@ -0,0 +1,200 @@
1
+ const AWSServices = require("../../common/utils/aws-services");
2
+ const AccountData = require("../../entities/account");
3
+ const Crons = require("../../entities/cron");
4
+ const ApiResponse = require("../../common/utils/api-response");
5
+ const Logger = require("../../common/utils/logger");
6
+
7
+ const SQS_NODEFLOW_QUEUE_URL = process?.env?.SQS_NODEFLOW_QUEUE_URL;
8
+ const CronIdFlowsActions= process?.env?.CRON_ID ?? null;
9
+ const BRUNO_LOCAL = process?.env?.DB_CONNECTION == 'bruno_local' ? true : false;
10
+
11
+ const nodeCron = require('node-cron');
12
+ const parser = require('cron-parser');
13
+
14
+ module.exports.run = async (event, context) => {
15
+ Logger.debug(`Your cron function "${context?.functionName ?? 'main'}" ran`);
16
+ const { httpMethod } = event;
17
+ // Se consulta la lista de cron jobs registrada en base de datos
18
+ const promises = [], cronJobs = await getCronJobs();
19
+ for (let cronJob of cronJobs) {
20
+ const { Name, Actived, Cron, Values, SourcesName, AccountName, AppToken, AppKey, Offset } = cronJob;
21
+ // Se valida si el cron job está activo
22
+ const currentDate= new Date()
23
+ try{
24
+ if(Offset){
25
+ // Fecha actual del sistema
26
+ if(Offset > 0){
27
+ currentDate.setHours(currentDate.getHours()+parseFloat(Offset));
28
+ }else{
29
+ currentDate.setHours(currentDate.getHours()-(parseFloat(Offset)*-1));
30
+ }
31
+ }
32
+ } catch (eee){
33
+ Logger.error("error set Offset", eee);
34
+ }
35
+ Logger.debug(`Query date: ${currentDate.toString()}`);
36
+
37
+ if (Actived && SourcesName) {
38
+ Logger.debug(`Validating cron: ${Name}`);
39
+ // Se valida si el valor del cron corresponde al formato requerido
40
+ if (nodeCron.validate(Cron)) {
41
+ // Se verifica si la fecha y hora de sistema corresponde al cron
42
+ if (timeMatch(Cron, currentDate)) {
43
+ Logger.debug(`Adding cron: ${Name}`);
44
+ // Se inserta la ejecución del flujo como una Promise
45
+ promises.push(new Promise((resolve, reject) => {
46
+ let valuesNode = Values ? Values : {}
47
+
48
+ let request= {
49
+ body: valuesNode,
50
+ queryStringParameters:{
51
+ an: AccountName
52
+ },
53
+ pathParameters: {
54
+ sourceName: SourcesName
55
+ },
56
+ headers:{
57
+ "x-app-key": AppKey,
58
+ "x-app-token": AppToken
59
+ }
60
+ };
61
+
62
+ sendSqs(request, AccountName, (err, res) => {
63
+ err ? reject(err) : resolve(res);
64
+ });
65
+ }));
66
+ }
67
+ } else {
68
+ Logger.debug(`Cron value is not valid: ${cron}`);
69
+ }
70
+ }
71
+ }
72
+
73
+ // Se ejecuta cada una de las promises indicadas (si aplica)
74
+ if (promises.length) {
75
+ await Promise.allSettled(promises);
76
+ }
77
+
78
+ Logger.debug('End loop');
79
+ if(httpMethod){
80
+ return ApiResponse.response(200, "Message accepted!");;
81
+ }
82
+ };
83
+
84
+ /**
85
+ * Obtiene las posibles combinaciones de un cron job para una determinada fecha.
86
+ * @param {Date} date Fecha a partir de la cual se desea obtener las posibles combinaciones de cron.
87
+ * @returns Lista de cron asociados a la fecha.
88
+ */
89
+ const getCronJobs = async () => {
90
+ return new Promise(async function (resolve, reject) {
91
+ let list= [];
92
+
93
+ try{
94
+ const listcrons= await Crons.getPerId(CronIdFlowsActions);
95
+
96
+ if(listcrons && listcrons?.Crons){
97
+ list= listcrons?.Crons;
98
+ }
99
+
100
+ } catch (e) {
101
+ Logger.error(e);
102
+ }
103
+
104
+ let listProcess= list.map(i=>({
105
+ Name: i?.Name,
106
+ Actived: i?.Actived ?? false,
107
+ Cron: i?.Cron ?? "* * * * *",
108
+ Values: i?.Values ?? {},
109
+ SourcesName: i?.SourcesName,
110
+ AccountName: i?.AccountName,
111
+ AppToken: i?.AppToken,
112
+ AppKey: i?.AppKey,
113
+ Offset: i?.Offset ?? -5
114
+ }));
115
+
116
+ Logger.debug('Crons list', listProcess);
117
+ resolve(listProcess);
118
+ });
119
+ }
120
+
121
+ /**
122
+ * Valida si una fecha corresponde a un cron job.
123
+ * @param {string} cron Valor del cron.
124
+ * @param {Date} date Fecha a validar.
125
+ * @return Valor de verdad que indica si la fecha corresponde o no al cron (TRUE o FALSE).
126
+ */
127
+ const timeMatch = (cron, date) => {
128
+ let interval = parser.parseExpression(cron);
129
+
130
+ const { minute, hour, dayOfMonth, month, dayOfWeek } = interval.fields;
131
+
132
+ return minute.includes(date.getMinutes()) &&
133
+ hour.includes(date.getHours()) &&
134
+ dayOfMonth.includes(date.getDate()) &&
135
+ month.includes(date.getMonth() + 1) &&
136
+ dayOfWeek.includes(date.getDay());
137
+ }
138
+
139
+ /**
140
+ * Funcion para el seteo de credendiales para asignacion de flujo
141
+ **/
142
+ const setCredentialsSQS = async function(accountName) {
143
+ if(accountName){
144
+ const account = await AccountData.getAccountDataByAccountName(accountName);
145
+ if(!account || !account?.Credentials || !account?.Credentials?.key || !account?.Credentials?.token ){
146
+ return null;
147
+ }
148
+ if(BRUNO_LOCAL===true){
149
+ return {
150
+ DB_PATH: account?.NodeFlow?.DB_PATH || 'endpoints',
151
+ DB_PATH_ENV: account?.NodeFlow?.DB_PATH_ENV || 'environments/local',
152
+ DB_EXTENSION_BRU: account?.NodeFlow?.DB_EXTENSION_BRU || 'bru',
153
+ DB_MODULES_LOCAL: account?.NodeFlow?.DB_MODULES_LOCAL || 'sources,actions_types,settings',
154
+ ACTIONS_TYPES: [
155
+ "action_type_http_request",
156
+ "action_type_process_data",
157
+ "action_type_emails",
158
+ "action_type_database_rds",
159
+ "action_type_jwt",
160
+ "action_type_md5",
161
+ "action_type_ssh2"
162
+ ],
163
+ DB_PATHNAME_SETTINGS: account?.NodeFlow?.DB_PATHNAME_SETTINGS || 'settings',
164
+ ENV: account?.NodeFlow?.ENV || null
165
+ };
166
+ }else {
167
+ return {
168
+ key: account?.Credentials?.key,
169
+ token: account?.Credentials?.token,
170
+ url: `https://${accountName}.vtexcommercestable.com.br`
171
+ };
172
+ }
173
+ }else{
174
+ return null;
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Funcion para el envio de a la cola
180
+ **/
181
+ const sendSqs= async (req, accountName, callback)=>{
182
+ if(!accountName){
183
+ return null;
184
+ }
185
+ let setC= await setCredentialsSQS(accountName);
186
+ if(!setC){
187
+ callback("accountName not found", null);
188
+ }
189
+
190
+ await AWSServices.sendSQSMessage(SQS_NODEFLOW_QUEUE_URL, {
191
+ request:req,
192
+ account: setC,
193
+ sourcesProcess: "app cron job"
194
+ });
195
+
196
+ if(typeof callback === 'function'){
197
+ callback(null, 'success');
198
+ }
199
+
200
+ }
@@ -0,0 +1,203 @@
1
+ const AWSServices = require("../../common/utils/aws-services");
2
+ const ApiResponse = require("../../common/utils/api-response");
3
+ const SQS_NODEFLOW_QUEUE_URL = process?.env?.SQS_NODEFLOW_QUEUE_URL;
4
+ const SQS_NODEFLOW_DQL_QUEUE_URL = process?.env?.SQS_NODEFLOW_DQL_QUEUE_URL;
5
+ const MAX_ATTEMPS = process?.env?.MAX_ATTEMPS;
6
+ const BRUNO_LOCAL = process?.env?.DB_CONNECTION == 'bruno_local' ? true : false;
7
+
8
+ /**
9
+ * Carga controladores
10
+ */
11
+ const {InputsUpdatesController} = require('node-flow-br')
12
+ const AccountData = require("../../entities/account");
13
+
14
+ const setPerBrunoLocal= (account, envLocal=null, pathLocal=null) =>{
15
+ let replaceDir= new RegExp("--", 'g');
16
+ return {
17
+ config: {
18
+ DB_PATH: account?.NodeFlow?.DB_PATH ?? pathLocal?.replace(replaceDir, '/') ?? 'endpoints',
19
+ DB_PATH_ENV: account?.NodeFlow?.DB_PATH_ENV ?? envLocal?.replace(replaceDir, '/') ?? 'environments/local',
20
+ DB_EXTENSION_BRU: account?.NodeFlow?.DB_EXTENSION_BRU || 'bru',
21
+ DB_MODULES_LOCAL: account?.NodeFlow?.DB_MODULES_LOCAL || 'sources,actions_types,settings',
22
+ ACTIONS_TYPES: [
23
+ "action_type_http_request",
24
+ "action_type_process_data",
25
+ "action_type_emails",
26
+ "action_type_database_rds",
27
+ "action_type_jwt",
28
+ "action_type_md5",
29
+ "action_type_ssh2"
30
+ ],
31
+ DB_PATHNAME_SETTINGS: account?.NodeFlow?.DB_PATHNAME_SETTINGS || 'settings',
32
+ ENV: account?.NodeFlow?.ENV || null,
33
+ },
34
+ bruno: BRUNO_LOCAL
35
+ };
36
+ };
37
+
38
+ const setCredentials = async function(accountName, envLocal=null, pathLocal=null) {
39
+ if(accountName){
40
+ try {
41
+ const account = await AccountData.getAccountDataByAccountName(accountName);
42
+ if(!account || !account?.Credentials || !account?.Credentials?.key || !account?.Credentials?.token ){
43
+ throw "not account";
44
+ }
45
+
46
+ const setBruno= setPerBrunoLocal(account, envLocal, pathLocal);
47
+ if(setBruno?.bruno === true){
48
+ return setBruno?.config;
49
+ }else{
50
+ await InputsUpdatesController.setApiKey(account?.Credentials?.key);
51
+ await InputsUpdatesController.setApiToken(account?.Credentials?.token);
52
+ await InputsUpdatesController.setUrl(`https://${accountName}.vtexcommercestable.com.br`);
53
+ return true;
54
+ }
55
+ } catch (e) {
56
+ console.error(e);
57
+ if(envLocal && pathLocal){
58
+ const setBruno= setPerBrunoLocal({}, envLocal, pathLocal);
59
+ if(setBruno?.bruno === true){
60
+ return setBruno?.config;
61
+ }else{
62
+ return false;
63
+ }
64
+ }else {
65
+ return false;
66
+ }
67
+
68
+ }
69
+ }else{
70
+ return false;
71
+ }
72
+ }
73
+
74
+ const setCredentialsSQS = async function(accountName) {
75
+ if(accountName){
76
+ const account = await AccountData.getAccountDataByAccountName(accountName);
77
+ if(!account || !account?.Credentials || !account?.Credentials?.key || !account?.Credentials?.token ){
78
+ return null;
79
+ }
80
+ const setBruno= setPerBrunoLocal(account);
81
+ if(setBruno?.bruno === true){
82
+ return setBruno?.config;
83
+ }else{
84
+ return {
85
+ key: account?.Credentials?.key,
86
+ token: account?.Credentials?.token,
87
+ url: `https://${accountName}.vtexcommercestable.com.br`
88
+ };
89
+ }
90
+ }else{
91
+ return null;
92
+ }
93
+ }
94
+
95
+ module.exports.handler= async (req,res)=>{
96
+ req.params= req.pathParameters;
97
+ req.body= JSON.parse(req.body) ?? {};
98
+
99
+ let accountName= req.queryStringParameters.an ?? null;
100
+ let envLocal= req.queryStringParameters.envLocal ?? null;
101
+ let pathLocal= req.queryStringParameters.pathLocal ?? null;
102
+ if(!accountName){
103
+ return ApiResponse.response(400, "Bad request an is required ");
104
+ }
105
+ let setC= await setCredentials(accountName, envLocal, pathLocal);
106
+ if(!setC || setC===false){
107
+ return ApiResponse.response(400, "Bad request in "+accountName);
108
+ }
109
+ let connetionLocal= typeof setC === 'object' ? await InputsUpdatesController.createConnection(setC) : null;
110
+ return new Promise(async (resolve, reject) =>{
111
+ InputsUpdatesController.insertSourceName(req, (res)=>{
112
+ if(res){
113
+ resolve(res);
114
+ }else{
115
+ resolve(null);
116
+ }
117
+ }, connetionLocal);
118
+ });
119
+
120
+ }
121
+
122
+ module.exports.handlerSqs= async (req,res)=>{
123
+ req.params= req?.pathParameters;
124
+ req.body= JSON.parse(req?.body) ?? {};
125
+
126
+ let accountName= req?.queryStringParameters?.an ?? null;
127
+ if(!accountName){
128
+ return ApiResponse.response(400, "Bad request an is required ");
129
+ }
130
+ let setC= await setCredentialsSQS(accountName);
131
+ if(!setC){
132
+ return ApiResponse.response(400, "Bad request in "+accountName);
133
+ }
134
+
135
+ await AWSServices.sendSQSMessage(SQS_NODEFLOW_QUEUE_URL, {
136
+ request:req,
137
+ account: setC
138
+ });
139
+
140
+ return ApiResponse.response(200, "Message accepted!");
141
+
142
+ }
143
+
144
+ module.exports.handlerSqsWorker= async (event)=>{
145
+ if(event?.Records && event?.Records.length > 0){
146
+ for (var i = 0; i < event.Records.length; i++) {
147
+ let data= JSON.parse(event.Records[i]?.body);
148
+ let req= data?.request;
149
+ let account= data?.account;
150
+
151
+ if(!req || !account){
152
+ console.error("error account");
153
+ return;
154
+ }
155
+
156
+ const attemps = data?.attemps ?? -1;
157
+ data.attemps= (parseFloat(attemps)+1);
158
+ req.params= req?.pathParameters;
159
+
160
+ let accountName= req?.queryStringParameters?.an ?? null;
161
+ if(!accountName){
162
+ console.error("accountName not found");
163
+ return;
164
+ }
165
+ try{
166
+ let connetionLocal= null;
167
+ if(BRUNO_LOCAL){
168
+ connetionLocal= await InputsUpdatesController.createConnection(account);
169
+ }else{
170
+ InputsUpdatesController.setApiKey(account?.key);
171
+ InputsUpdatesController.setApiToken(account?.token);
172
+ InputsUpdatesController.setUrl(account?.url);
173
+ }
174
+
175
+ console.log("start action");
176
+ await new Promise(async(resolve, reject)=>{
177
+ InputsUpdatesController.insertSourceName(req, async (res)=>{
178
+ if(res && res.statusCode > 399 && attemps <= MAX_ATTEMPS){
179
+ console.log('response worker error',res);
180
+ setTimeout(async function() {
181
+ await AWSServices.sendSQSMessage(SQS_NODEFLOW_QUEUE_URL, data);
182
+ resolve(res);
183
+ }, 5000);
184
+ }else if(res){
185
+ console.log('response worker node',res);
186
+ resolve(res);
187
+ }
188
+ }, connetionLocal)
189
+ });
190
+ } catch (error) {
191
+ console.error(error);
192
+ if(attemps <= MAX_ATTEMPS){
193
+ setTimeout(async function() {
194
+ await AWSServices.sendSQSMessage(SQS_NODEFLOW_QUEUE_URL, data);
195
+ }, 5000);
196
+ }
197
+ }
198
+ }
199
+ }else{
200
+ console.error('not data record.');
201
+ }
202
+
203
+ }
@@ -0,0 +1,266 @@
1
+
2
+ /**
3
+ * Carga controladores
4
+ */
5
+ const {SettingsController, ActionsTypesController, NodesFlowsController, SourcesController} = require('node-flow-br');
6
+ const AccountData = require("../../entities/account");
7
+ const BRUNO_LOCAL = process?.env?.DB_CONNECTION == 'bruno_local' ? true : false;
8
+
9
+ const setPerBrunoLocal= (account) =>{
10
+ return {
11
+ config: {
12
+ DB_PATH: account?.NodeFlow?.DB_PATH || 'endpoints',
13
+ DB_PATH_ENV: account?.NodeFlow?.DB_PATH_ENV || 'environments/local',
14
+ DB_EXTENSION_BRU: account?.NodeFlow?.DB_EXTENSION_BRU || 'bru',
15
+ DB_MODULES_LOCAL: account?.NodeFlow?.DB_MODULES_LOCAL || 'sources,actions_types,settings',
16
+ ACTIONS_TYPES: [
17
+ "action_type_http_request",
18
+ "action_type_process_data",
19
+ "action_type_emails",
20
+ "action_type_database_rds",
21
+ "action_type_jwt",
22
+ "action_type_md5",
23
+ "action_type_ssh2"
24
+ ],
25
+ DB_PATHNAME_SETTINGS: account?.NodeFlow?.DB_PATHNAME_SETTINGS || 'settings',
26
+ },
27
+ bruno: BRUNO_LOCAL
28
+ };
29
+ };
30
+
31
+ const setCredentials = async function(accountName) {
32
+ if(accountName){
33
+ const account = await AccountData.getAccountDataByAccountName(accountName);
34
+ if(!account || !account?.Credentials || !account?.Credentials?.key || !account?.Credentials?.token ){
35
+ return false;
36
+ }
37
+
38
+ const setBruno= setPerBrunoLocal(account);
39
+ if(setBruno?.bruno === true){
40
+ return setBruno?.config;
41
+ }else{
42
+ await SettingsController.setApiKey(account?.Credentials?.key);
43
+ await SettingsController.setApiToken(account?.Credentials?.token);
44
+ await SettingsController.setUrl(`https://${accountName}.vtexcommercestable.com.br`);
45
+
46
+ await ActionsTypesController.setApiKey(account?.Credentials?.key);
47
+ await ActionsTypesController.setApiToken(account?.Credentials?.token);
48
+ await ActionsTypesController.setUrl(`https://${accountName}.vtexcommercestable.com.br`);
49
+
50
+ await NodesFlowsController.setApiKey(account?.Credentials?.key);
51
+ await NodesFlowsController.setApiToken(account?.Credentials?.token);
52
+ await NodesFlowsController.setUrl(`https://${accountName}.vtexcommercestable.com.br`);
53
+
54
+ await SourcesController.setApiKey(account?.Credentials?.key);
55
+ await SourcesController.setApiToken(account?.Credentials?.token);
56
+ await SourcesController.setUrl(`https://${accountName}.vtexcommercestable.com.br`);
57
+
58
+ return true;
59
+ }
60
+ }else{
61
+ return false;
62
+ }
63
+ }
64
+
65
+ module.exports.getSettings= async (req,res)=>{
66
+ req.params= req.pathParameters;
67
+
68
+ let accountName= req.queryStringParameters.an ?? null;
69
+ if(!accountName){
70
+ return null;
71
+ }
72
+ let setC= await setCredentials(accountName);
73
+ if(!setC || setC===false){return null;}
74
+
75
+ let connetionLocal= typeof setC === 'object' ? await SettingsController.createConnection(setC) : null;
76
+ return new Promise((resolve, reject) =>{
77
+ SettingsController.findAll(req, (res)=>{
78
+ if(res){
79
+ resolve(res);
80
+ }else{
81
+ resolve(null);
82
+ }
83
+ }, connetionLocal);
84
+ });
85
+ }
86
+
87
+ module.exports.createSettings= async (req,res)=>{
88
+ req.params= req.pathParameters;
89
+ req.body= JSON.parse(req.body) ?? {};
90
+
91
+ let accountName= req.queryStringParameters.an ?? null;
92
+ if(!accountName){
93
+ return null;
94
+ }
95
+ let setC= await setCredentials(accountName);
96
+ if(!setC || setC===false){return null;}
97
+
98
+ let connetionLocal= typeof setC === 'object' ? await SettingsController.createConnection(setC) : null;
99
+ return new Promise((resolve, reject) =>{
100
+ SettingsController.save(req, (res)=>{
101
+ if(res){
102
+ resolve(res);
103
+ }else{
104
+ resolve(null);
105
+ }
106
+ }, connetionLocal);
107
+ });
108
+ }
109
+
110
+ module.exports.getActionsType= async (req,res)=>{
111
+ req.params= req.pathParameters;
112
+
113
+ let accountName= req.queryStringParameters.an ?? null;
114
+ if(!accountName){
115
+ return null;
116
+ }
117
+ let setC= await setCredentials(accountName);
118
+ if(!setC || setC===false){return null;}
119
+
120
+ let connetionLocal= typeof setC === 'object' ? await ActionsTypesController.createConnection(setC) : null;
121
+ return new Promise((resolve, reject) =>{
122
+ ActionsTypesController.findAll(req, (res)=>{
123
+ if(res){
124
+ resolve(res);
125
+ }else{
126
+ resolve(null);
127
+ }
128
+ }, connetionLocal);
129
+ });
130
+ }
131
+
132
+ module.exports.createActionsType= async (req,res)=>{
133
+ req.params= req.pathParameters;
134
+ req.body= JSON.parse(req.body) ?? {};
135
+
136
+ let accountName= req.queryStringParameters.an ?? null;
137
+ if(!accountName){
138
+ return null;
139
+ }
140
+ let setC= await setCredentials(accountName);
141
+ if(!setC || setC===false){return null;}
142
+
143
+ let connetionLocal= typeof setC === 'object' ? await ActionsTypesController.createConnection(setC) : null;
144
+ return new Promise((resolve, reject) =>{
145
+ ActionsTypesController.create(req, (res)=>{
146
+ if(res){
147
+ resolve(res);
148
+ }else{
149
+ resolve(null);
150
+ }
151
+ }, connetionLocal);
152
+ });
153
+ }
154
+
155
+ module.exports.createNodeFlow= async (req,res)=>{
156
+ req.params= req.pathParameters;
157
+ req.body= JSON.parse(req.body) ?? {};
158
+
159
+ let accountName= req.queryStringParameters.an ?? null;
160
+ if(!accountName){
161
+ return null;
162
+ }
163
+ let setC= await setCredentials(accountName);
164
+ if(!setC || setC===false){return null;}
165
+
166
+ let connetionLocal= typeof setC === 'object' ? await NodesFlowsController.createConnection(setC) : null;
167
+ return new Promise((resolve, reject) =>{
168
+ NodesFlowsController.create(req, (res)=>{
169
+ if(res){
170
+ resolve(res);
171
+ }else{
172
+ resolve(null);
173
+ }
174
+ }, connetionLocal);
175
+ });
176
+ }
177
+
178
+
179
+ module.exports.treeNodeFlow= async (req,res)=>{
180
+ req.params= req.pathParameters;
181
+
182
+ let accountName= req.queryStringParameters.an ?? null;
183
+ if(!accountName){
184
+ return null;
185
+ }
186
+ let setC= await setCredentials(accountName);
187
+ if(!setC || setC===false){return null;}
188
+
189
+ let connetionLocal= typeof setC === 'object' ? await NodesFlowsController.createConnection(setC) : null;
190
+ return new Promise((resolve, reject) =>{
191
+ NodesFlowsController.getTreeNode(req, (res)=>{
192
+ if(res){
193
+ resolve(res);
194
+ }else{
195
+ resolve(null);
196
+ }
197
+ }, connetionLocal);
198
+ });
199
+ }
200
+
201
+ module.exports.getSources= async (req,res)=>{
202
+ req.params= req.pathParameters;
203
+
204
+ let accountName= req.queryStringParameters.an ?? null;
205
+ if(!accountName){
206
+ return null;
207
+ }
208
+ let setC= await setCredentials(accountName);
209
+ if(!setC || setC===false){return null;}
210
+
211
+ let connetionLocal= typeof setC === 'object' ? await SourcesController.createConnection(setC) : null;
212
+ return new Promise((resolve, reject) =>{
213
+ SourcesController.findAll(req, (res)=>{
214
+ if(res){
215
+ resolve(res);
216
+ }else{
217
+ resolve(null);
218
+ }
219
+ }, connetionLocal);
220
+ });
221
+ }
222
+
223
+ module.exports.createSources= async (req,res)=>{
224
+ req.params= req.pathParameters;
225
+ req.body= JSON.parse(req.body) ?? {};
226
+
227
+ let accountName= req.queryStringParameters.an ?? null;
228
+ if(!accountName){
229
+ return null;
230
+ }
231
+ let setC= await setCredentials(accountName);
232
+ if(!setC || setC===false){return null;}
233
+
234
+ let connetionLocal= typeof setC === 'object' ? await SourcesController.createConnection(setC) : null;
235
+ return new Promise((resolve, reject) =>{
236
+ SourcesController.create(req, (res)=>{
237
+ if(res){
238
+ resolve(res);
239
+ }else{
240
+ resolve(null);
241
+ }
242
+ }, connetionLocal);
243
+ });
244
+ }
245
+
246
+ module.exports.deleteSources= async (req,res)=>{
247
+ req.params= req.pathParameters;
248
+
249
+ let accountName= req.queryStringParameters.an ?? null;
250
+ if(!accountName){
251
+ return null;
252
+ }
253
+ let setC= await setCredentials(accountName);
254
+ if(!setC || setC===false){return null;}
255
+
256
+ let connetionLocal= typeof setC === 'object' ? await SourcesController.createConnection(setC) : null;
257
+ return new Promise((resolve, reject) =>{
258
+ SourcesController.delete(req, (res)=>{
259
+ if(res){
260
+ resolve(res);
261
+ }else{
262
+ resolve(null);
263
+ }
264
+ }, connetionLocal);
265
+ });
266
+ }