webfast 0.1.52 → 0.1.54
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 +45 -1
- package/modules/bots/applications/telegram/get.js +1 -1
- package/modules/bots/applications/telegram/set.js +3 -4
- package/modules/data/mongo/file.js +45 -23
- package/modules/data/mongo/find.js +92 -8
- package/modules/express/init.js +65 -3
- package/package.json +1 -1
@@ -127,8 +127,52 @@ web.fast.connectWebSocket = function(socketURL,maxRetries = 40, retries = 0) {
|
|
127
127
|
};
|
128
128
|
|
129
129
|
ws.onmessage = (event) => {
|
130
|
-
|
130
|
+
console.log('Received:', event.data);
|
131
131
|
// Handle received data
|
132
|
+
// Check if type user then we will walk through the data to set the data for the user
|
133
|
+
const json = JSON.parse(event.data);
|
134
|
+
if (json.type == `user`) {
|
135
|
+
// We have user data
|
136
|
+
console.log(`Set User Data`);
|
137
|
+
// Now go Through to set all data
|
138
|
+
// Get all webfast client
|
139
|
+
jQuery(`[webfast-client]`).each(function(){
|
140
|
+
// Get type
|
141
|
+
const clientType = jQuery(this).attr(`webfast-client`);
|
142
|
+
console.log(`Client Type`);
|
143
|
+
// Check split
|
144
|
+
const split = clientType.replace(/ /g,``).split(`||`);
|
145
|
+
|
146
|
+
// set check
|
147
|
+
let setted = false;
|
148
|
+
for (let s in split) {
|
149
|
+
// Get value
|
150
|
+
let getValue = split[s];
|
151
|
+
// Get value from json.data
|
152
|
+
if (json.data[getValue] != undefined && setted == false) {
|
153
|
+
const toSetValue = json.data[getValue];
|
154
|
+
console.log(`Set Value`,toSetValue);
|
155
|
+
jQuery(this).html(toSetValue)
|
156
|
+
setted = true;
|
157
|
+
}
|
158
|
+
}
|
159
|
+
})
|
160
|
+
|
161
|
+
if (json.data.images != undefined) {
|
162
|
+
console.log(`Set Images`,json.data.images);
|
163
|
+
const oneImage = json.data.images[json.data.images.length-1];
|
164
|
+
console.log(oneImage);
|
165
|
+
jQuery(`[webfast-client="image"]`).each(function(){
|
166
|
+
console.log(`Setted`);
|
167
|
+
jQuery(this).css({
|
168
|
+
'background-image': `url(${oneImage})`,
|
169
|
+
'background-size': 'cover',
|
170
|
+
'background-position': 'center'
|
171
|
+
});
|
172
|
+
});
|
173
|
+
}
|
174
|
+
}
|
175
|
+
|
132
176
|
web.fast.que.state = Date.now();
|
133
177
|
web.fast.receive(`socket`,event.data); // Placeholder for processing response
|
134
178
|
};
|
@@ -62,7 +62,7 @@ module.exports = {
|
|
62
62
|
downloadAndConvertToBase64 : async (program, photoURL, callback,data) => {
|
63
63
|
try {
|
64
64
|
// Use wget to download the image
|
65
|
-
const { stdout, stderr } = await program.exec(`${program.set.wget} -O - ${photoURL}`, { encoding: 'buffer' });
|
65
|
+
const { stdout, stderr } = await program.exec(`${program.set.wget} -O - "${photoURL}"`, { encoding: 'buffer' });
|
66
66
|
|
67
67
|
// Check if the download was successful
|
68
68
|
const errBuf = Buffer.from(stderr);
|
@@ -14,7 +14,7 @@ module.exports = {
|
|
14
14
|
try {
|
15
15
|
await client.connect();
|
16
16
|
const db = client.db('eventgo');
|
17
|
-
const collection = db.collection(collectionName);
|
17
|
+
const collection = await db.collection(collectionName);
|
18
18
|
|
19
19
|
// Check if the field is an array in the existing document
|
20
20
|
const existingDocument = await collection.findOne(search);
|
@@ -22,17 +22,16 @@ module.exports = {
|
|
22
22
|
|
23
23
|
if (isFieldArray) {
|
24
24
|
// Field is an array, push the data
|
25
|
-
await collection.updateOne(
|
25
|
+
await collection.updateOne(search, { $addToSet: { [fieldName]: { $each: data } } });
|
26
26
|
} else {
|
27
27
|
// Field is not an array, save the array
|
28
|
-
await collection.updateOne(
|
28
|
+
await collection.updateOne(search, { $set: { [fieldName]: data } }, { upsert: true });
|
29
29
|
}
|
30
30
|
|
31
31
|
console.log('Data added to the collection successfully.');
|
32
32
|
} catch (error) {
|
33
33
|
console.error('Error:', error.message);
|
34
34
|
} finally {
|
35
|
-
await client.close();
|
36
35
|
}
|
37
36
|
}
|
38
37
|
}
|
@@ -32,29 +32,51 @@ module.exports = {
|
|
32
32
|
},
|
33
33
|
|
34
34
|
downloadBuffer: async function (filename, dbName = 'media') {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
const
|
54
|
-
|
35
|
+
try {
|
36
|
+
await client.connect();
|
37
|
+
const db = client.db(dbName);
|
38
|
+
|
39
|
+
// Find all files with the given filename
|
40
|
+
const filesCollection = db.collection('fs.files');
|
41
|
+
const files = await filesCollection.find({ filename: filename }).toArray();
|
42
|
+
|
43
|
+
// If no files found, return null
|
44
|
+
if (files.length === 0) {
|
45
|
+
return null;
|
46
|
+
}
|
47
|
+
|
48
|
+
// Initialize an array to store download promises
|
49
|
+
const downloadPromises = [];
|
50
|
+
|
51
|
+
// Loop through each file and download it
|
52
|
+
files.forEach(file => {
|
53
|
+
const bucket = new GridFSBucket(db);
|
54
|
+
const downloadStream = bucket.openDownloadStreamByName(filename);
|
55
|
+
downloadPromises.push(new Promise((resolve, reject) => {
|
56
|
+
const chunks = [];
|
57
|
+
downloadStream.on('data', (chunk) => {
|
58
|
+
chunks.push(chunk);
|
59
|
+
});
|
60
|
+
downloadStream.on('end', () => {
|
61
|
+
const buffer = Buffer.concat(chunks);
|
62
|
+
const metadata = downloadStream.s.file.metadata;
|
63
|
+
resolve({ buffer, metadata });
|
64
|
+
});
|
65
|
+
downloadStream.on('error', reject);
|
66
|
+
}));
|
55
67
|
});
|
56
|
-
|
57
|
-
|
58
|
-
|
68
|
+
|
69
|
+
// Wait for all download promises to resolve
|
70
|
+
const results = await Promise.all(downloadPromises);
|
71
|
+
|
72
|
+
return results;
|
73
|
+
} catch (error) {
|
74
|
+
console.error('Error downloading file:', error);
|
75
|
+
throw error;
|
76
|
+
} finally {
|
77
|
+
// Close the MongoDB connection
|
78
|
+
await client.close();
|
79
|
+
}
|
59
80
|
}
|
81
|
+
|
60
82
|
};
|
@@ -1,11 +1,25 @@
|
|
1
1
|
const { MongoClient } = require('mongodb');
|
2
|
-
module.exports = function(db,collection) {
|
2
|
+
module.exports = async function(db,collection,query,one = false,array) {
|
3
3
|
// Ensure the MongoDB connection string is provided
|
4
|
+
const program = array.program;
|
5
|
+
let callback;
|
6
|
+
if (array.function != undefined) {
|
7
|
+
callback = array.function;
|
8
|
+
}
|
4
9
|
if (!process.env.mongo) {
|
5
10
|
console.error('MongoDB connection string not provided. Set process.env.mongo.');
|
6
11
|
process.exit(1);
|
7
12
|
}
|
8
13
|
|
14
|
+
function routeExists(path) {
|
15
|
+
return program.express.app._router.stack.some(layer => {
|
16
|
+
if (layer.route) {
|
17
|
+
return layer.route.path === path;
|
18
|
+
}
|
19
|
+
return false;
|
20
|
+
});
|
21
|
+
}
|
22
|
+
|
9
23
|
// Define the MongoDB URI
|
10
24
|
const uri = process.env.mongo;
|
11
25
|
|
@@ -14,11 +28,10 @@ module.exports = function(db,collection) {
|
|
14
28
|
const collectionName = collection;
|
15
29
|
|
16
30
|
// Define the query you want to perform
|
17
|
-
const query = { /* Your query goes here */ };
|
18
31
|
|
19
32
|
async function main() {
|
20
33
|
// Create a new MongoClient
|
21
|
-
const client = new MongoClient(uri);
|
34
|
+
const client = await new MongoClient(uri);
|
22
35
|
|
23
36
|
try {
|
24
37
|
// Connect to the MongoDB server
|
@@ -26,17 +39,88 @@ module.exports = function(db,collection) {
|
|
26
39
|
console.log('Connected to the MongoDB server');
|
27
40
|
|
28
41
|
// Select the database
|
29
|
-
const database = client.db(dbName);
|
42
|
+
const database = await client.db(dbName);
|
30
43
|
|
31
44
|
// Select the collection
|
32
|
-
const collection = database.collection(collectionName);
|
45
|
+
const collection = await database.collection(collectionName);
|
33
46
|
|
34
47
|
// Perform the find query
|
35
|
-
|
48
|
+
result = await collection.find(query).toArray();
|
36
49
|
|
50
|
+
if (one == true) {
|
51
|
+
result = result[0];
|
52
|
+
}
|
37
53
|
// Process the result
|
38
54
|
console.log('Query result:', result);
|
39
|
-
|
55
|
+
|
56
|
+
// Check if profile image to get it from db
|
57
|
+
if (result.profileImage != undefined && array.image == true) {
|
58
|
+
const profileImage = await program.modules.data.file.downloadBuffer(result.profileImage,`eventgo`);
|
59
|
+
|
60
|
+
// Set in dynamic routing for serving
|
61
|
+
let sizeMeta = {};
|
62
|
+
let other = {}
|
63
|
+
for (let pi in profileImage) {
|
64
|
+
// Profile image
|
65
|
+
const theImage = profileImage[pi];
|
66
|
+
|
67
|
+
// Get the meta
|
68
|
+
const imageMeta = theImage.metadata;
|
69
|
+
|
70
|
+
// Sizes
|
71
|
+
const size = imageMeta.size;
|
72
|
+
|
73
|
+
const sizeKey = `${size.width}x${size.height}`;
|
74
|
+
const setUUID = program.uuid.v4();
|
75
|
+
sizeMeta[setUUID] = {
|
76
|
+
buffer : theImage.buffer,
|
77
|
+
meta : imageMeta
|
78
|
+
}
|
79
|
+
console.log(`The Size Meta`);
|
80
|
+
}
|
81
|
+
|
82
|
+
// Now we have sizes thingy so create a route for this specific uuid
|
83
|
+
const dynamicLink = `/dynamic/${result.profileImage}/list`;
|
84
|
+
result.imageList = `${process.env.url}${dynamicLink.slice(1)}`;
|
85
|
+
result.images = sizeMeta;
|
86
|
+
|
87
|
+
const routeCheck = await routeExists(dynamicLink);
|
88
|
+
if (!routeCheck) {
|
89
|
+
program.express.app.get(dynamicLink, async (req, res) => {
|
90
|
+
// Requesting image
|
91
|
+
console.log(`Requesting dynamic link`);
|
92
|
+
// Send buffer image as image
|
93
|
+
// Set content type header to indicate that you're sending an image
|
94
|
+
res.setHeader('Content-Type', 'application/json');
|
95
|
+
|
96
|
+
// Send the image buffer as the response body
|
97
|
+
for (let sizeKey in sizeMeta) {
|
98
|
+
const item = sizeMeta[sizeKey];
|
99
|
+
other[sizeKey] = item.meta;
|
100
|
+
|
101
|
+
// Create dynamic url for this on
|
102
|
+
const imageDynamicPath = `/dynamic/${sizeKey}.${item.meta.type}`;
|
103
|
+
const imageLinkURL = `https://${process.env.url}${imageDynamicPath.slice(1)}`
|
104
|
+
//other[sizeKey].link = imageLinkURL;
|
105
|
+
|
106
|
+
// generate dynamic url
|
107
|
+
|
108
|
+
}
|
109
|
+
|
110
|
+
res.send(JSON.stringify(other, null, 2));
|
111
|
+
});
|
112
|
+
}
|
113
|
+
console.log(`Profile Image`);
|
114
|
+
|
115
|
+
// generate paths
|
116
|
+
}
|
117
|
+
|
118
|
+
if (callback != undefined) {
|
119
|
+
|
120
|
+
callback(program,result);
|
121
|
+
} else {
|
122
|
+
return result;
|
123
|
+
}
|
40
124
|
} finally {
|
41
125
|
// Close the MongoClient
|
42
126
|
await client.close();
|
@@ -45,6 +129,6 @@ module.exports = function(db,collection) {
|
|
45
129
|
}
|
46
130
|
|
47
131
|
// Execute the main function
|
48
|
-
main().catch(console.error);
|
132
|
+
await main().catch(console.error);
|
49
133
|
|
50
134
|
}
|
package/modules/express/init.js
CHANGED
@@ -224,7 +224,7 @@ module.exports = async function (program) {
|
|
224
224
|
const wss = new WebSocket.Server({ port: PORT });
|
225
225
|
|
226
226
|
|
227
|
-
wss.on('connection', (ws, req) => {
|
227
|
+
wss.on('connection', async (ws, req) => {
|
228
228
|
console.log(`Socket Connected`);
|
229
229
|
|
230
230
|
// Generate a unique ID for the WebSocket connection
|
@@ -283,13 +283,75 @@ module.exports = async function (program) {
|
|
283
283
|
console.error('Received data has been tampered with');
|
284
284
|
}
|
285
285
|
|
286
|
-
console.log(parsedQuery);
|
287
286
|
|
288
287
|
// Store the WebSocket connection with its ID in the map
|
289
288
|
clients.set(clientId, ws);
|
290
289
|
|
291
290
|
// Send the client ID to the connected client
|
292
|
-
|
291
|
+
let getUser;
|
292
|
+
if (parsedQuery.user != undefined) {
|
293
|
+
// Get user
|
294
|
+
const userJSON = JSON.parse(JSON.parse(parsedQuery.user));
|
295
|
+
getUser = await program.modules.data.find(`eventgo`,`telegram`,{
|
296
|
+
id : userJSON.id
|
297
|
+
},true,{image:true,program,async function(program,json){
|
298
|
+
// Get firs timage
|
299
|
+
console.log(`User JSON`);
|
300
|
+
let image;
|
301
|
+
let allImages = [];
|
302
|
+
if (json.images != undefined) {
|
303
|
+
image = json.images[Object.keys(json.images)[0]];
|
304
|
+
|
305
|
+
// Create path if not exists
|
306
|
+
async function routeExists(path) {
|
307
|
+
return program.express.app._router.stack.some(layer => {
|
308
|
+
if (layer.route) {
|
309
|
+
return layer.route.path === path;
|
310
|
+
}
|
311
|
+
return false;
|
312
|
+
});
|
313
|
+
}
|
314
|
+
|
315
|
+
for (const image in json.images) {
|
316
|
+
console.log(`Set image url's`);
|
317
|
+
|
318
|
+
const imagePath = `/user/dynamic/image/${image}.${json.images[image].meta.type}`;
|
319
|
+
const routeCheck = await routeExists(imagePath);
|
320
|
+
const fullPath = `${process.env.url}${imagePath.slice(1)}`;
|
321
|
+
allImages.push(fullPath);
|
322
|
+
if (!routeCheck) {
|
323
|
+
// Create route
|
324
|
+
const fullImageData = json.images[image];
|
325
|
+
program.express.app.get(imagePath, async (req,res) => {
|
326
|
+
console.log(`Request for`,imagePath);
|
327
|
+
// set headers
|
328
|
+
res.set('Content-Type', `image/${fullImageData.meta.type}`);
|
329
|
+
res.send(fullImageData.buffer);
|
330
|
+
})
|
331
|
+
}
|
332
|
+
}
|
333
|
+
}
|
334
|
+
// Now we have the image data
|
335
|
+
console.log(`Image Data`);
|
336
|
+
// Further more we want to send some data
|
337
|
+
const sendKeys = [`id`,`first_name`,`username`,`uuid`];
|
338
|
+
|
339
|
+
// Crerate little loop for the data to be send in json format to be processed
|
340
|
+
let sendData = {};
|
341
|
+
for (let sd in sendKeys) {
|
342
|
+
let key = sendKeys[sd];
|
343
|
+
// Get object
|
344
|
+
if (json[key] != undefined) {
|
345
|
+
sendData[key] = json[key];
|
346
|
+
}
|
347
|
+
}
|
348
|
+
console.log(`Preparing for sending`);
|
349
|
+
sendData.images = allImages;
|
350
|
+
ws.send(JSON.stringify({ type: 'user', clientId: clientId, data : sendData }));
|
351
|
+
|
352
|
+
}});
|
353
|
+
}
|
354
|
+
//ws.send(JSON.stringify({ type: 'clientId', id: clientId, params: parsedQuery }));
|
293
355
|
|
294
356
|
// Set up a ping interval to keep the connection alive
|
295
357
|
const pingInterval = setInterval(() => {
|