webfast 0.1.87 → 0.1.88
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/app/content/js/webfast.js +63 -6
- package/modules/bots/applications/telegram/send.js +11 -3
- package/modules/express/init.js +14 -9
- package/modules/payment/providers/mollie/create.js +132 -0
- package/modules/payment/providers/mollie/startup.js +235 -5
- package/modules/request/functions/post.js +10 -0
- package/package.json +4 -2
|
@@ -5,14 +5,64 @@ web.fast = {
|
|
|
5
5
|
action : function(data,ell) {
|
|
6
6
|
console.log(`Action Function`,data,ell);
|
|
7
7
|
},
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
getCookieValue : function(cookieName) {
|
|
9
|
+
let allCookies = document.cookie;
|
|
10
|
+
let cookies = document.cookie.split("; ");
|
|
11
|
+
for (let i = 0; i < cookies.length; i++) {
|
|
12
|
+
let cookie = cookies[i].split("=");
|
|
13
|
+
if (cookie[0] === cookieName) {
|
|
14
|
+
return decodeURIComponent(cookie[1]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return null; // Cookie not found
|
|
18
|
+
},
|
|
19
|
+
redirect :async function(data) {
|
|
20
|
+
console.log(`Received Redirect`,data.event);
|
|
21
|
+
const state = data.event.type;
|
|
22
|
+
if (state == true && web.fast.redirected == undefined) {
|
|
12
23
|
// Redirect
|
|
13
|
-
|
|
24
|
+
console.log(`Replace to : `, data.event.url);
|
|
25
|
+
web.fast.redirected = Date.now();
|
|
26
|
+
|
|
27
|
+
let replacedURL = data.event.url.replace(`https://`,``);
|
|
28
|
+
if (data.event.full == true) {
|
|
29
|
+
replacedURL = data.event.url;
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
// check if new hash
|
|
33
|
+
const sendData = telegram.initData.replace(`__order`,``)
|
|
34
|
+
|
|
35
|
+
const id = data.event.requestID;
|
|
36
|
+
if (web.fast.user != undefined && jQuery(`[wbfst-frame="${id}"]`).length == 0 && data.event.full != true) {
|
|
37
|
+
//const myUrl = new URL(data.event.url);
|
|
38
|
+
//history.pushState({}, null, myUrl); // Update the URL without reloading the page
|
|
39
|
+
//window.location.hash = window.location.hash.replace(`__order`,``);
|
|
40
|
+
window.Telegram.WebView.onEvent(`back_button_pressed`, function(event){
|
|
41
|
+
console.log(`Back Button Event Pressed`,event);
|
|
42
|
+
const frame = jQuery(`[wbfst-frame="${id}"]`);
|
|
43
|
+
jQuery(frame).animate({ opacity:0 }, 600,function(){
|
|
44
|
+
jQuery(this).remove();
|
|
45
|
+
});
|
|
46
|
+
window.Telegram.WebApp.BackButton.hide();
|
|
47
|
+
})
|
|
48
|
+
await web.fast.telegram(`frame`).set(id,replacedURL,async function(id){
|
|
49
|
+
console.log(`Clicked Close`,id);
|
|
50
|
+
const frame = jQuery(`[wbfst-frame="${id}"]`);
|
|
51
|
+
console.log(`The Frame`,frame);
|
|
52
|
+
jQuery(frame).animate({ opacity:0 }, 600,function(){
|
|
53
|
+
jQuery(this).remove();
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
});
|
|
57
|
+
}else if (data.event.full == true && web.fast.user != undefined) {
|
|
58
|
+
// typeof order.state
|
|
59
|
+
window.Telegram.WebApp.disableClosingConfirmation(false);
|
|
60
|
+
window.Telegram.WebApp.close();
|
|
61
|
+
} else {
|
|
62
|
+
window.location.replace(data.event.url);
|
|
63
|
+
}
|
|
14
64
|
} else {
|
|
15
|
-
console.error(`Something wrong redirect`,event);
|
|
65
|
+
//console.error(`Something wrong redirect`,data.event);
|
|
16
66
|
}
|
|
17
67
|
},
|
|
18
68
|
functions : {
|
|
@@ -182,11 +232,18 @@ if (webfastSocket == undefined) {
|
|
|
182
232
|
}
|
|
183
233
|
|
|
184
234
|
let setData;
|
|
235
|
+
// Split hash
|
|
236
|
+
const locSplit = window.location.hash.split(`__`);
|
|
237
|
+
|
|
238
|
+
//alert(locSplit);
|
|
185
239
|
if (telegram.initData == ``) {
|
|
186
240
|
setData = `hybrid.institute.anonymous`
|
|
241
|
+
} else if (locSplit.length > 1 && locSplit[1] == `redirected`) {
|
|
242
|
+
setData = telegram.initData.replace(`__order&`,`&`);
|
|
187
243
|
} else {
|
|
188
244
|
setData = telegram.initData;
|
|
189
245
|
}
|
|
246
|
+
//alert(setData);
|
|
190
247
|
|
|
191
248
|
const socketURL = `wss://${webfastSocket.replace(`https://`,``)}socket.io/?qbt=${setData}`;
|
|
192
249
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
module.exports = async function(program,message,id,buttons) {
|
|
1
|
+
module.exports = async function(program,message,id,buttons,messageID) {
|
|
2
2
|
console.log(`Telegram Send`);
|
|
3
3
|
// Create Request for send
|
|
4
4
|
let telegramURL = `https://api.telegram.org/bot${process.env.telegram}`;
|
|
@@ -20,7 +20,7 @@ module.exports = async function(program,message,id,buttons) {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
let body = {
|
|
24
24
|
text: message,
|
|
25
25
|
disable_web_page_preview: false,
|
|
26
26
|
disable_notification: false,
|
|
@@ -30,7 +30,7 @@ module.exports = async function(program,message,id,buttons) {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
// Check if object
|
|
33
|
-
if (typeof message == `object`) {
|
|
33
|
+
if (typeof message == `object` && messageID == undefined) {
|
|
34
34
|
if (message.text != undefined && message.image == undefined) {
|
|
35
35
|
body.text = message.text;
|
|
36
36
|
telegramURL = `${telegramURL}/sendMessage`;
|
|
@@ -44,6 +44,14 @@ module.exports = async function(program,message,id,buttons) {
|
|
|
44
44
|
delete body.reply_to_message_id;
|
|
45
45
|
telegramURL = `${telegramURL}/sendPhoto`;
|
|
46
46
|
}
|
|
47
|
+
} else if (messageID != undefined) {
|
|
48
|
+
body = {
|
|
49
|
+
chat_id : id,
|
|
50
|
+
message_id : messageID,
|
|
51
|
+
text : message,
|
|
52
|
+
parse_mode : `HTML`
|
|
53
|
+
}
|
|
54
|
+
telegramURL = `${telegramURL}/editMessageText`;
|
|
47
55
|
} else {
|
|
48
56
|
telegramURL = `${telegramURL}/sendMessage`;
|
|
49
57
|
}
|
package/modules/express/init.js
CHANGED
|
@@ -365,15 +365,20 @@ wss.on('connection', async (ws, req) => {
|
|
|
365
365
|
if (parsedQuery.start_param != undefined) {
|
|
366
366
|
const startSplit = parsedQuery.start_param.split(`__`);
|
|
367
367
|
const uuid = startSplit[0];
|
|
368
|
-
const action = startSplit[1];
|
|
369
368
|
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
//
|
|
376
|
-
|
|
369
|
+
if (startSplit.length <= 1) {
|
|
370
|
+
console.log(`Start split is one`);
|
|
371
|
+
} else {
|
|
372
|
+
const action = startSplit[1];
|
|
373
|
+
|
|
374
|
+
// Check action and if we have this action in custom routes thingy
|
|
375
|
+
try {
|
|
376
|
+
const userJSON = JSON.parse(JSON.parse(parsedQuery.user));
|
|
377
|
+
await program.express.process.params(program,ws,action,uuid,parsedQuery,clientId,userJSON);
|
|
378
|
+
} catch (err) {
|
|
379
|
+
// Error for params
|
|
380
|
+
console.error(`Error for program params start_param`);
|
|
381
|
+
}
|
|
377
382
|
}
|
|
378
383
|
}
|
|
379
384
|
|
|
@@ -409,7 +414,7 @@ wss.on('connection', async (ws, req) => {
|
|
|
409
414
|
// Check if function is running in program modules that you can add in the init scirpt when using remote
|
|
410
415
|
if (program.express.process != undefined) {
|
|
411
416
|
try {
|
|
412
|
-
let resp = await program.express.process[split[0]][split[1]][split[2]](program,ws,json,data,path,clientId,ws);
|
|
417
|
+
let resp = await program.express.process[split[0]][split[1]][split[2]](program,ws,json,data,path,clientId,ws,parsedQuery);
|
|
413
418
|
if (resp != false) {
|
|
414
419
|
ws.send(JSON.stringify(resp));
|
|
415
420
|
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
module.exports = async function(program,json) {
|
|
2
|
+
console.log(`Init Create with json data`);
|
|
3
|
+
return async function(program,order,payment,price,currency) {
|
|
4
|
+
console.log(`Create Payment`);
|
|
5
|
+
//const price = Number(order.price).toFixed(2);
|
|
6
|
+
// Get order info data
|
|
7
|
+
let pipeline = [
|
|
8
|
+
{
|
|
9
|
+
$match: {
|
|
10
|
+
uuid: order.package
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
];
|
|
14
|
+
let package = await program.modules.data.aggregate(program,process.env.dbName, 'pricing', pipeline);
|
|
15
|
+
if (package.length == 0) {
|
|
16
|
+
throw new Error(`No Package found for payment`);
|
|
17
|
+
} else {
|
|
18
|
+
package = package[0];
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// create redirect url
|
|
22
|
+
let webhookURL = program.modules.payment.mollie.webhookURL;
|
|
23
|
+
// create new payment uuid
|
|
24
|
+
const paymentUUID = program.uuid.v4();
|
|
25
|
+
|
|
26
|
+
const redirectURL = webhookURL.replace(`:orderId`,paymentUUID).replace(`:action`,`redirect`);
|
|
27
|
+
const cancelURL = webhookURL.replace(`:orderId`,paymentUUID).replace(`:action`,`cancel`);
|
|
28
|
+
const pageRedirect = webhookURL.replace(`:orderId`,paymentUUID).replace(`:action`,`page-redirect`);
|
|
29
|
+
webhookURL = webhookURL.replace(`:orderId`,paymentUUID).replace(`:action`,`update`);
|
|
30
|
+
|
|
31
|
+
const paramsArray = {
|
|
32
|
+
amount : {
|
|
33
|
+
currency : String(currency).toUpperCase(),
|
|
34
|
+
value : String(Number(price/100).toFixed(2))
|
|
35
|
+
},
|
|
36
|
+
description : `eSimCo. ${package.name.toUpperCase()}`,
|
|
37
|
+
redirectUrl : redirectURL,
|
|
38
|
+
cancelUrl : cancelURL,
|
|
39
|
+
webhookUrl : webhookURL,
|
|
40
|
+
locale : 'en_US',
|
|
41
|
+
method : payment.provider
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// We have now method etc. let's build up the call
|
|
45
|
+
const getURL = `${json.url}/v2/payments`
|
|
46
|
+
const request = await program.modules.payment.mollie.post(program,getURL,paramsArray,{
|
|
47
|
+
'Authorization': `Bearer ${json.key}`,
|
|
48
|
+
'content-type': 'application/json'
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
// WE made request
|
|
52
|
+
request.uuid = paymentUUID;
|
|
53
|
+
request.package = order.package;
|
|
54
|
+
request.user = order.user;
|
|
55
|
+
request.order = order.uuid;
|
|
56
|
+
|
|
57
|
+
// Now save to request DB
|
|
58
|
+
const create = await program.modules.data.insert(process.env.dbName,`payment`,request);
|
|
59
|
+
|
|
60
|
+
// Now upate
|
|
61
|
+
let newState = order.state;
|
|
62
|
+
newState[`waiting`] = Date.now();
|
|
63
|
+
|
|
64
|
+
console.log(`Updated`);
|
|
65
|
+
|
|
66
|
+
console.log(`Made Request`,request);
|
|
67
|
+
|
|
68
|
+
// Now send response
|
|
69
|
+
let redirect = {
|
|
70
|
+
type : true,
|
|
71
|
+
url : request._links.checkout.href,
|
|
72
|
+
requestID : program.uuid.v4(),
|
|
73
|
+
full : true
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Check url
|
|
77
|
+
redirect.url = pageRedirect;
|
|
78
|
+
|
|
79
|
+
// Send Payment info per bot and link for order
|
|
80
|
+
console.log(`Send Payment info link per bot`);
|
|
81
|
+
// create payment url
|
|
82
|
+
const orderURL = `${process.env.webURL.slice(0,-1)}/concepts/esimco/order#${request.order}__redirect`;
|
|
83
|
+
// create order url redirect url
|
|
84
|
+
const paymentRedirect = `${process.env.url.slice(0,-1)}/webhooks/orders/${request.uuid}/bot-redirect`;
|
|
85
|
+
|
|
86
|
+
// Create message
|
|
87
|
+
let payIcon = `!`;
|
|
88
|
+
if (request.amount.currency.toUpperCase() == `USD`) {
|
|
89
|
+
payIcon = `$`;
|
|
90
|
+
}
|
|
91
|
+
if (request.amount.currency.toUpperCase() == `EUR`) {
|
|
92
|
+
payIcon = `€`;
|
|
93
|
+
}
|
|
94
|
+
const textMessage = `<b>⚠️ Your order is created but unpaid!</b>\n<span class="tg-spoiler">Order ID: <b>${request.order}</b></span>\n\nTo receive your order we would like to ask you to fullfill the payment for the remaining amount of <span class="tg-spoiler"><b>${payIcon} ${request.amount.value}</b></span>.\n\nClick on <u>Pay Now</u> to fullfill your payment or click <u>view order</u> to view your order.`
|
|
95
|
+
try {
|
|
96
|
+
let telegramSend = await program.modules.telegram.functions.send(program,textMessage,request.user,[
|
|
97
|
+
[
|
|
98
|
+
//{ text: 'View Order', web_app : { url : orderURL}},
|
|
99
|
+
{ text: 'Pay Order', web_app : { url : paymentRedirect}}
|
|
100
|
+
]
|
|
101
|
+
]);
|
|
102
|
+
|
|
103
|
+
// Now we have message id set that to the order
|
|
104
|
+
|
|
105
|
+
// Add update to message order thingy
|
|
106
|
+
|
|
107
|
+
const updated =await program.modules.data.update(process.env.dbName,`order`,{
|
|
108
|
+
uuid : order.uuid
|
|
109
|
+
},{
|
|
110
|
+
$set: {
|
|
111
|
+
state : newState,
|
|
112
|
+
payment : paymentUUID,
|
|
113
|
+
messages : [telegramSend.result.uuid]
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
console.log(`Telegram Send`);
|
|
117
|
+
} catch (err) {
|
|
118
|
+
console.error(err);
|
|
119
|
+
console.error(`Error with sending to client`);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
const sendArray = {
|
|
124
|
+
func : `redirect`,
|
|
125
|
+
data : {
|
|
126
|
+
event : redirect
|
|
127
|
+
},
|
|
128
|
+
js : `delete web.fast.tmp.sending;`
|
|
129
|
+
};
|
|
130
|
+
return sendArray;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -13,6 +13,7 @@ module.exports = async function(program,json) {
|
|
|
13
13
|
const functionPath = program.path.join(json.path,`functions`);
|
|
14
14
|
console.log(`Function Path`);
|
|
15
15
|
let restArray = {
|
|
16
|
+
create : await require(program.path.join(__dirname,`create.js`))(program,json),
|
|
16
17
|
get : async function(url,params) {
|
|
17
18
|
console.log(`GET`);
|
|
18
19
|
|
|
@@ -35,9 +36,11 @@ module.exports = async function(program,json) {
|
|
|
35
36
|
|
|
36
37
|
return data;
|
|
37
38
|
},
|
|
38
|
-
post : async function(url,
|
|
39
|
+
post : async function(program,url,body,headers) {
|
|
39
40
|
console.log(`POST`);
|
|
40
|
-
|
|
41
|
+
|
|
42
|
+
const requestPOST = await program.modules.request.post(program,url,body,headers);
|
|
43
|
+
return requestPOST;
|
|
41
44
|
}
|
|
42
45
|
}
|
|
43
46
|
|
|
@@ -64,13 +67,15 @@ module.exports = async function(program,json) {
|
|
|
64
67
|
const requestUSD = await restArray.get(getURL,{
|
|
65
68
|
locale : "en_US",
|
|
66
69
|
'amount[value]' : "100.00",
|
|
67
|
-
'amount[currency]' : "USD"
|
|
70
|
+
'amount[currency]' : "USD",
|
|
71
|
+
"include" : "pricing"
|
|
68
72
|
})
|
|
69
73
|
|
|
70
74
|
const requestEU = await restArray.get(getURL,{
|
|
71
75
|
locale : "en_US",
|
|
72
76
|
'amount[value]' : "100.00",
|
|
73
|
-
'amount[currency]' : "EUR"
|
|
77
|
+
'amount[currency]' : "EUR",
|
|
78
|
+
"include" : "pricing"
|
|
74
79
|
})
|
|
75
80
|
|
|
76
81
|
// Process both
|
|
@@ -106,10 +111,78 @@ module.exports = async function(program,json) {
|
|
|
106
111
|
status : itemData.status,
|
|
107
112
|
res : itemData.resource,
|
|
108
113
|
images : itemData.image,
|
|
109
|
-
currency : {}
|
|
114
|
+
currency : {},
|
|
115
|
+
pricing : {
|
|
116
|
+
items : itemData.pricing
|
|
117
|
+
}
|
|
110
118
|
}
|
|
111
119
|
}
|
|
112
120
|
|
|
121
|
+
// Now loop through pricing to see max and min
|
|
122
|
+
let allPricing = [];
|
|
123
|
+
|
|
124
|
+
let maxPers = 0;
|
|
125
|
+
let minPers = 0;
|
|
126
|
+
let maxFix = 0;
|
|
127
|
+
let minFix = 0;
|
|
128
|
+
let pricingCurrency = [];
|
|
129
|
+
for (let prI in itemData.pricing) {
|
|
130
|
+
// get item
|
|
131
|
+
const pricing = itemData.pricing[prI];
|
|
132
|
+
|
|
133
|
+
let setPricing = {};
|
|
134
|
+
|
|
135
|
+
for (let key in pricing) {
|
|
136
|
+
switch (key) {
|
|
137
|
+
case `variable`:
|
|
138
|
+
const thePerc = Number(pricing[key]);
|
|
139
|
+
if (thePerc > maxPers) {
|
|
140
|
+
maxPers = thePerc;
|
|
141
|
+
}
|
|
142
|
+
if (thePerc < minPers || minPers == 0) {
|
|
143
|
+
minPers = thePerc;
|
|
144
|
+
}
|
|
145
|
+
setPricing.percentage = thePerc;
|
|
146
|
+
break;
|
|
147
|
+
case `fixed`:
|
|
148
|
+
const fixPrice = Number(pricing[key].value);
|
|
149
|
+
// Set fix price
|
|
150
|
+
if (fixPrice > maxFix) {
|
|
151
|
+
maxFix = fixPrice;
|
|
152
|
+
}
|
|
153
|
+
if (fixPrice < minFix || minFix == 0) {
|
|
154
|
+
minFix = fixPrice;
|
|
155
|
+
}
|
|
156
|
+
pricing[key].value = Number(pricing[key].value);
|
|
157
|
+
setPricing[key] = pricing[key];
|
|
158
|
+
|
|
159
|
+
// check if in array
|
|
160
|
+
if (pricingCurrency.indexOf(pricing[key].currency) == -1) {
|
|
161
|
+
pricingCurrency.push(pricing[key].currency)
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
default:
|
|
165
|
+
console.log(`Set Just: ${key}`);
|
|
166
|
+
setPricing[key] = pricing[key];
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
allPricing.push(setPricing);
|
|
170
|
+
}
|
|
171
|
+
console.log(`We have all pricing per item now`);
|
|
172
|
+
itemData.pricing = {
|
|
173
|
+
all : allPricing,
|
|
174
|
+
perc : {
|
|
175
|
+
min : minPers,
|
|
176
|
+
max : maxPers
|
|
177
|
+
},
|
|
178
|
+
fix : {
|
|
179
|
+
min : minFix,
|
|
180
|
+
max : maxFix
|
|
181
|
+
},
|
|
182
|
+
currencies : pricingCurrency
|
|
183
|
+
}
|
|
184
|
+
payar[itemData.id].pricing = itemData.pricing;
|
|
185
|
+
|
|
113
186
|
// Now grab currency
|
|
114
187
|
const currency = {
|
|
115
188
|
max : itemData.maximumAmount.value,
|
|
@@ -126,5 +199,162 @@ module.exports = async function(program,json) {
|
|
|
126
199
|
|
|
127
200
|
restArray.methods = payar;
|
|
128
201
|
|
|
202
|
+
// Create dynamic app get for receiving data
|
|
203
|
+
const fullPath = `${process.env.url.slice(0,-1)}/webhooks/orders/:orderId/:action`;
|
|
204
|
+
// setup dynamic routing
|
|
205
|
+
restArray.webhookURL = fullPath;
|
|
206
|
+
async function functionRequest(req,res,type) {
|
|
207
|
+
const orderId = req.params.orderId;
|
|
208
|
+
const action = req.params.action;
|
|
209
|
+
console.log(`Received data for payment`,type);
|
|
210
|
+
|
|
211
|
+
// Get body Data
|
|
212
|
+
const body = req.body;
|
|
213
|
+
|
|
214
|
+
// First grab order
|
|
215
|
+
let pipeline = [
|
|
216
|
+
{
|
|
217
|
+
$match: {
|
|
218
|
+
uuid: orderId
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
];
|
|
222
|
+
|
|
223
|
+
let payment = await program.modules.data.aggregate(program,process.env.dbName, 'payment', pipeline);
|
|
224
|
+
if (payment.length == 0) {
|
|
225
|
+
res.status(500);
|
|
226
|
+
res.send(`FALSE`);
|
|
227
|
+
} else {
|
|
228
|
+
payment = payment[0];
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
console.log(`We have payment data`);
|
|
232
|
+
|
|
233
|
+
// Check if cancel
|
|
234
|
+
let order = await program.modules.data.aggregate(program,process.env.dbName, 'order', [
|
|
235
|
+
{
|
|
236
|
+
$match: {
|
|
237
|
+
uuid: payment.order
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
]);
|
|
241
|
+
order = order[0];
|
|
242
|
+
|
|
243
|
+
// We have order add action to state
|
|
244
|
+
const typeOf = typeof order.state;
|
|
245
|
+
if (typeOf != `object`) {
|
|
246
|
+
order.state = [];
|
|
247
|
+
}
|
|
248
|
+
order.state[action] = Date.now();
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
// Get id
|
|
252
|
+
if (type == `post`) {
|
|
253
|
+
const paymentID = body.id;
|
|
254
|
+
|
|
255
|
+
// Now check payment
|
|
256
|
+
const getURL = `${json.url}/v2/payments/${paymentID}`
|
|
257
|
+
const validate = await restArray.get(getURL);
|
|
258
|
+
|
|
259
|
+
// Okay we have new data
|
|
260
|
+
const status = validate.status;
|
|
261
|
+
|
|
262
|
+
order.state[status] = Date.now();
|
|
263
|
+
|
|
264
|
+
console.log(`To Validate Payment`);
|
|
265
|
+
|
|
266
|
+
// Add completed to state if finished
|
|
267
|
+
if (status == `paid`) {
|
|
268
|
+
const paidDate = new Date(validate.paidAt);
|
|
269
|
+
const unixTimestamp = Math.floor(paidDate.getTime() / 1000);
|
|
270
|
+
order.state[`completed`] = unixTimestamp;
|
|
271
|
+
|
|
272
|
+
// Update
|
|
273
|
+
const updatedFinal =await program.modules.data.update(process.env.dbName,`order`,{
|
|
274
|
+
uuid : orderId
|
|
275
|
+
},{
|
|
276
|
+
$set: {
|
|
277
|
+
payed : unixTimestamp,
|
|
278
|
+
paymentDetails : validate.details,
|
|
279
|
+
countryCode : validate.countryCode,
|
|
280
|
+
mode : validate.mode,
|
|
281
|
+
state : true,
|
|
282
|
+
paid : Date.now()
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
console.log(`Final Update`,updatedFinal);
|
|
286
|
+
|
|
287
|
+
// Check also for message now
|
|
288
|
+
// Grab message
|
|
289
|
+
try {
|
|
290
|
+
const lastMessageId = order.messages[0];
|
|
291
|
+
let messageData = await program.modules.data.aggregate(program,process.env.dbName, 'send', [{$match: {uuid: lastMessageId}}]);
|
|
292
|
+
if (messageData.length == 0) {
|
|
293
|
+
// No message send
|
|
294
|
+
console.error(`No Message Send`);
|
|
295
|
+
} else {
|
|
296
|
+
messageData = messageData[0];
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const packageID = order.package;
|
|
300
|
+
|
|
301
|
+
let packageLine = [{$match: {uuid:packageID}},{$project: {name: 1,description: 1, price:1}}];
|
|
302
|
+
let packageData = await program.modules.data.aggregate(program,process.env.dbName, 'pricing', packageLine);
|
|
303
|
+
|
|
304
|
+
// Okay we have message data
|
|
305
|
+
const orderURL = `${process.env.webURL.slice(0,-1)}/concepts/esimco/order#${payment.uuid}__redirect`;
|
|
306
|
+
const howToURL = `${process.env.webURL.slice(0,-1)}/concepts/esimco/order#${payment.uuid}__how-to`;
|
|
307
|
+
const referralURL = `${process.env.webURL.slice(0,-1)}/concepts/esimco/order#${payment.uuid}__referral`;
|
|
308
|
+
|
|
309
|
+
const textMessage = `<b>✅ Your payment is received!</b>\n<span class="tg-spoiler">Order ID: <b>${order.uuid}</b></span>\n\nWe are now matching your order and payment. You will receive your ordered prodcut in a few minutes: <b>${String(packageData[0].description).toUpperCase()}</b>`
|
|
310
|
+
try {
|
|
311
|
+
let telegramSend = await program.modules.telegram.functions.send(program,textMessage,order.user,[
|
|
312
|
+
[
|
|
313
|
+
{ text: 'View Order', web_app : { url : orderURL}},
|
|
314
|
+
{ text: 'How to?', web_app : { url : howToURL}},
|
|
315
|
+
{ text: 'Referral', web_app : { url : referralURL}}
|
|
316
|
+
]
|
|
317
|
+
],messageData.message_id);
|
|
318
|
+
|
|
319
|
+
console.log(`Sending telegram`);
|
|
320
|
+
} catch(err) {
|
|
321
|
+
console.error(err);
|
|
322
|
+
console.error(`Error updating message`);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
} catch (err) {
|
|
326
|
+
console.error(err);
|
|
327
|
+
console.error(`Something with message`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
const updated =await program.modules.data.update(process.env.dbName,`order`,{
|
|
334
|
+
uuid : order.uuid
|
|
335
|
+
},{
|
|
336
|
+
$set: {
|
|
337
|
+
state : order.state
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
// Updated state in order
|
|
342
|
+
// Now redirect doesn't matter in what
|
|
343
|
+
const fullPath = `${process.env.webURL.slice(0,-1)}/concepts/esimco/order#${order.uuid}__redirect`;
|
|
344
|
+
if (type == `post`) {
|
|
345
|
+
res.send(`OK`);
|
|
346
|
+
res.status(200);
|
|
347
|
+
} else if (action == `page-redirect` || action == `bot-redirect`) {
|
|
348
|
+
res.redirect(payment._links.checkout.href)
|
|
349
|
+
} else {
|
|
350
|
+
res.redirect(fullPath);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
program.express.app.get(`/webhooks/orders/:orderId/:action`, async function(req,res){
|
|
354
|
+
return await functionRequest(req,res,`get`);
|
|
355
|
+
})
|
|
356
|
+
program.express.app.post(`/webhooks/orders/:orderId/:action`, async function(req,res){
|
|
357
|
+
return await functionRequest(req,res,`post`);
|
|
358
|
+
})
|
|
129
359
|
return restArray;
|
|
130
360
|
}
|
|
@@ -24,7 +24,17 @@ module.exports = async function(program, url, body,headers) {
|
|
|
24
24
|
const respHeaders = response.headers;
|
|
25
25
|
|
|
26
26
|
if (!response.ok) {
|
|
27
|
+
if (respBody.parameters != undefined) {
|
|
28
|
+
// Probably some wait
|
|
29
|
+
if (respBody.parameters.retry_after != undefined) {
|
|
30
|
+
const timeOUtAmount = respBody.parameters.retry_after * 1000*60; // for 1 minute if retry_ is 1 minute
|
|
31
|
+
await setTimeout(async function(){
|
|
32
|
+
return await program.modules.request.post(program,url,body,headers);
|
|
33
|
+
},timeOUtAmount);
|
|
34
|
+
}
|
|
35
|
+
} else {
|
|
27
36
|
throw new Error(`HTTP error! Status: ${response.status}`);
|
|
37
|
+
}
|
|
28
38
|
}
|
|
29
39
|
|
|
30
40
|
const responseData = respBody;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "webfast",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.88",
|
|
4
4
|
"description": "WebFast! Bot Application, including TON mini-apps for makign it easy and fast to build ini-apps",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"repository": {
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
"ideal",
|
|
42
42
|
"creditcard",
|
|
43
43
|
"applepay",
|
|
44
|
-
"googlepay"
|
|
44
|
+
"googlepay",
|
|
45
|
+
"mollie pay",
|
|
46
|
+
"payments"
|
|
45
47
|
],
|
|
46
48
|
"author": "Kai Gartner",
|
|
47
49
|
"license": "ISC",
|