rez_core 3.1.86 → 3.1.87
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/module/integration/controller/integration.controller.d.ts +9 -1
- package/dist/module/integration/controller/integration.controller.js +21 -0
- package/dist/module/integration/controller/integration.controller.js.map +1 -1
- package/dist/module/integration/dto/create-config.dto.d.ts +6 -0
- package/dist/module/integration/dto/create-config.dto.js +24 -1
- package/dist/module/integration/dto/create-config.dto.js.map +1 -1
- package/dist/module/integration/service/integration.service.d.ts +8 -0
- package/dist/module/integration/service/integration.service.js +27 -1
- package/dist/module/integration/service/integration.service.js.map +1 -1
- package/dist/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.d.ts +13 -2
- package/dist/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.js +66 -112
- package/dist/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/module/integration/controller/integration.controller.ts +21 -0
- package/src/module/integration/dto/create-config.dto.ts +18 -0
- package/src/module/integration/service/integration.service.ts +61 -3
- package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +97 -155
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.TubelightWhatsAppStrategy = void 0;
|
|
11
11
|
const common_1 = require("@nestjs/common");
|
|
12
12
|
const axios_1 = require("axios");
|
|
13
|
+
const crypto_1 = require("crypto");
|
|
13
14
|
let TubelightWhatsAppStrategy = TubelightWhatsAppStrategy_1 = class TubelightWhatsAppStrategy {
|
|
14
15
|
constructor() {
|
|
15
16
|
this.logger = new common_1.Logger(TubelightWhatsAppStrategy_1.name);
|
|
@@ -26,18 +27,16 @@ let TubelightWhatsAppStrategy = TubelightWhatsAppStrategy_1 = class TubelightWha
|
|
|
26
27
|
throw new Error('Failed to authenticate with Tubelight');
|
|
27
28
|
}
|
|
28
29
|
const baseUrl = tubelightConfig.baseUrl || this.defaultBaseUrl;
|
|
29
|
-
const url = `${baseUrl}/
|
|
30
|
-
const payload = this.prepareMessagePayload(to, message, config);
|
|
30
|
+
const url = `${baseUrl}/bulk/send`;
|
|
31
|
+
const payload = [this.prepareMessagePayload(to, message, config)];
|
|
31
32
|
const response = await axios_1.default.post(url, payload, {
|
|
32
33
|
headers: {
|
|
33
|
-
'X-TENANT-ID': tubelightConfig.tenantId,
|
|
34
34
|
'Content-Type': 'application/json',
|
|
35
35
|
Authorization: `Bearer ${token}`,
|
|
36
36
|
},
|
|
37
37
|
timeout: 30000,
|
|
38
38
|
});
|
|
39
|
-
if (response.
|
|
40
|
-
(response.data?.messageId || response.data?.id)) {
|
|
39
|
+
if (response.status === 200) {
|
|
41
40
|
const messageId = response.data.messageId || response.data.id;
|
|
42
41
|
this.logger.log(`Tubelight WhatsApp message sent successfully to ${to}, messageId: ${messageId}`);
|
|
43
42
|
return {
|
|
@@ -96,82 +95,44 @@ let TubelightWhatsAppStrategy = TubelightWhatsAppStrategy_1 = class TubelightWha
|
|
|
96
95
|
}
|
|
97
96
|
prepareMessagePayload(to, message, config) {
|
|
98
97
|
const basePayload = {
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
cust_uuid: config.custUuid || (0, crypto_1.randomUUID)(),
|
|
99
|
+
to: [this.formatPhoneNumber(to)],
|
|
101
100
|
};
|
|
102
|
-
if (config.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
...basePayload,
|
|
122
|
-
messageType: 'DOCUMENT',
|
|
123
|
-
mediaUrl: config.mediaUrl,
|
|
124
|
-
filename: config.filename || 'document',
|
|
125
|
-
caption: message || config.caption || '',
|
|
126
|
-
};
|
|
127
|
-
case 'audio':
|
|
128
|
-
return {
|
|
129
|
-
...basePayload,
|
|
130
|
-
messageType: 'AUDIO',
|
|
131
|
-
mediaUrl: config.mediaUrl,
|
|
132
|
-
};
|
|
133
|
-
case 'video':
|
|
134
|
-
return {
|
|
135
|
-
...basePayload,
|
|
136
|
-
messageType: 'VIDEO',
|
|
137
|
-
mediaUrl: config.mediaUrl,
|
|
138
|
-
caption: message || config.caption || '',
|
|
139
|
-
};
|
|
140
|
-
case 'location':
|
|
141
|
-
return {
|
|
142
|
-
...basePayload,
|
|
143
|
-
messageType: 'LOCATION',
|
|
144
|
-
latitude: config.latitude,
|
|
145
|
-
longitude: config.longitude,
|
|
146
|
-
name: config.locationName || '',
|
|
147
|
-
address: config.locationAddress || '',
|
|
148
|
-
};
|
|
149
|
-
case 'interactive':
|
|
150
|
-
return {
|
|
151
|
-
...basePayload,
|
|
152
|
-
messageType: 'INTERACTIVE',
|
|
153
|
-
interactiveType: config.interactiveType || 'button',
|
|
154
|
-
text: message,
|
|
155
|
-
buttons: config.buttons || [],
|
|
156
|
-
sections: config.sections || [],
|
|
157
|
-
header: config.header,
|
|
158
|
-
footer: config.footer,
|
|
159
|
-
};
|
|
160
|
-
default:
|
|
161
|
-
break;
|
|
101
|
+
if (config.templateId || config.templateName) {
|
|
102
|
+
const messagePayload = {
|
|
103
|
+
type: 'template',
|
|
104
|
+
template_name: config.templateId || config.templateName,
|
|
105
|
+
language: config.templateLanguage || 'en',
|
|
106
|
+
};
|
|
107
|
+
if (config.variables) {
|
|
108
|
+
try {
|
|
109
|
+
const parsedVariables = typeof config.variables === 'string'
|
|
110
|
+
? JSON.parse(config.variables)
|
|
111
|
+
: config.variables;
|
|
112
|
+
messagePayload.body_params = Array.isArray(parsedVariables)
|
|
113
|
+
? parsedVariables
|
|
114
|
+
: Object.values(parsedVariables);
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
this.logger.error('Failed to parse variables JSON:', e.message);
|
|
118
|
+
messagePayload.body_params = [];
|
|
119
|
+
}
|
|
162
120
|
}
|
|
121
|
+
return {
|
|
122
|
+
...basePayload,
|
|
123
|
+
message: messagePayload,
|
|
124
|
+
};
|
|
163
125
|
}
|
|
164
126
|
return {
|
|
165
127
|
...basePayload,
|
|
166
|
-
|
|
167
|
-
|
|
128
|
+
message: {
|
|
129
|
+
type: 'text',
|
|
130
|
+
text: message,
|
|
131
|
+
},
|
|
168
132
|
};
|
|
169
133
|
}
|
|
170
134
|
formatPhoneNumber(phoneNumber) {
|
|
171
|
-
let formatted = phoneNumber.replace(/
|
|
172
|
-
if (!formatted.startsWith('+')) {
|
|
173
|
-
formatted = `+${formatted}`;
|
|
174
|
-
}
|
|
135
|
+
let formatted = phoneNumber.replace(/\D/g, '');
|
|
175
136
|
return formatted;
|
|
176
137
|
}
|
|
177
138
|
extractErrorMessage(error) {
|
|
@@ -196,37 +157,6 @@ let TubelightWhatsAppStrategy = TubelightWhatsAppStrategy_1 = class TubelightWha
|
|
|
196
157
|
if (!config.userName || !config.password || !config.tenantId) {
|
|
197
158
|
return false;
|
|
198
159
|
}
|
|
199
|
-
if (config.messageType) {
|
|
200
|
-
switch (config.messageType) {
|
|
201
|
-
case 'template':
|
|
202
|
-
if (!config.templateId) {
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
break;
|
|
206
|
-
case 'image':
|
|
207
|
-
case 'document':
|
|
208
|
-
case 'audio':
|
|
209
|
-
case 'video':
|
|
210
|
-
if (!config.mediaUrl) {
|
|
211
|
-
return false;
|
|
212
|
-
}
|
|
213
|
-
break;
|
|
214
|
-
case 'location':
|
|
215
|
-
if (typeof config.latitude !== 'number' ||
|
|
216
|
-
typeof config.longitude !== 'number') {
|
|
217
|
-
return false;
|
|
218
|
-
}
|
|
219
|
-
break;
|
|
220
|
-
case 'interactive':
|
|
221
|
-
if (!config.buttons &&
|
|
222
|
-
!config.sections &&
|
|
223
|
-
(!config.interactiveType ||
|
|
224
|
-
!['button', 'list'].includes(config.interactiveType))) {
|
|
225
|
-
return false;
|
|
226
|
-
}
|
|
227
|
-
break;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
160
|
return true;
|
|
231
161
|
}
|
|
232
162
|
async getAccountInfo(config) {
|
|
@@ -239,7 +169,6 @@ let TubelightWhatsAppStrategy = TubelightWhatsAppStrategy_1 = class TubelightWha
|
|
|
239
169
|
const url = `${baseUrl}/account/info`;
|
|
240
170
|
const response = await axios_1.default.get(url, {
|
|
241
171
|
headers: {
|
|
242
|
-
'X-TENANT-ID': config.tenantId,
|
|
243
172
|
Authorization: `Bearer ${token}`,
|
|
244
173
|
},
|
|
245
174
|
});
|
|
@@ -257,18 +186,44 @@ let TubelightWhatsAppStrategy = TubelightWhatsAppStrategy_1 = class TubelightWha
|
|
|
257
186
|
throw new Error('Authentication failed');
|
|
258
187
|
}
|
|
259
188
|
const baseUrl = config.baseUrl || this.defaultBaseUrl;
|
|
260
|
-
const url = `${baseUrl}/
|
|
261
|
-
const response = await axios_1.default.
|
|
189
|
+
const url = `${baseUrl}/retreive/template`;
|
|
190
|
+
const response = await axios_1.default.post(url, {}, {
|
|
262
191
|
headers: {
|
|
263
|
-
'
|
|
192
|
+
'Content-Type': 'application/json',
|
|
264
193
|
Authorization: `Bearer ${token}`,
|
|
265
194
|
},
|
|
266
195
|
});
|
|
267
|
-
|
|
196
|
+
const templates = response.data?.data || response.data?.templates || response.data || [];
|
|
197
|
+
const formattedTemplates = Array.isArray(templates)
|
|
198
|
+
? templates.map((template) => ({
|
|
199
|
+
label: template.templateName,
|
|
200
|
+
value: template.templateName,
|
|
201
|
+
}))
|
|
202
|
+
: [];
|
|
203
|
+
return {
|
|
204
|
+
success: true,
|
|
205
|
+
data: formattedTemplates,
|
|
206
|
+
};
|
|
268
207
|
}
|
|
269
208
|
catch (error) {
|
|
270
|
-
|
|
271
|
-
|
|
209
|
+
let errorMessage = 'Failed to fetch Tubelight templates';
|
|
210
|
+
if (error.response?.status === 401) {
|
|
211
|
+
errorMessage = 'Authentication failed';
|
|
212
|
+
}
|
|
213
|
+
else if (error.response?.data?.message) {
|
|
214
|
+
errorMessage = error.response.data.message;
|
|
215
|
+
}
|
|
216
|
+
else if (error.response?.data?.error) {
|
|
217
|
+
errorMessage = error.response.data.error;
|
|
218
|
+
}
|
|
219
|
+
else if (error.message) {
|
|
220
|
+
errorMessage = error.message;
|
|
221
|
+
}
|
|
222
|
+
this.logger.error('Failed to get Tubelight templates', errorMessage);
|
|
223
|
+
return {
|
|
224
|
+
success: false,
|
|
225
|
+
error: errorMessage,
|
|
226
|
+
};
|
|
272
227
|
}
|
|
273
228
|
}
|
|
274
229
|
async getMessageStatus(config, messageId) {
|
|
@@ -281,7 +236,6 @@ let TubelightWhatsAppStrategy = TubelightWhatsAppStrategy_1 = class TubelightWha
|
|
|
281
236
|
const url = `${baseUrl}/messages/${messageId}/status`;
|
|
282
237
|
const response = await axios_1.default.get(url, {
|
|
283
238
|
headers: {
|
|
284
|
-
'X-TENANT-ID': config.tenantId,
|
|
285
239
|
Authorization: `Bearer ${token}`,
|
|
286
240
|
},
|
|
287
241
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tubelight-whatsapp.strategy.js","sourceRoot":"","sources":["../../../../../src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAoD;AACpD,iCAA6C;
|
|
1
|
+
{"version":3,"file":"tubelight-whatsapp.strategy.js","sourceRoot":"","sources":["../../../../../src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts"],"names":[],"mappings":"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"}
|