Compare commits
7 Commits
bffcdafe7a
...
e2bd0bafea
Author | SHA1 | Date | |
---|---|---|---|
|
e2bd0bafea | ||
|
1a63b3154a | ||
|
053213eecb | ||
|
34c6a43fdc | ||
|
d39d66195a | ||
|
e0482eb511 | ||
|
94c7a7176b |
17
back/controllers/members.js
Normal file
17
back/controllers/members.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
const statusCode = require("../utils/statusCodes").statusCodes;
|
||||||
|
const { getMembers } = require("../db/api.js");
|
||||||
|
const { logger } = require("../system/Logger");
|
||||||
|
|
||||||
|
async function members(body, res) {
|
||||||
|
const { roomId } = body;
|
||||||
|
getMembers(roomId).then((addresses) => {
|
||||||
|
res.status(statusCode.OK).json(addresses);
|
||||||
|
}).catch((err) => {
|
||||||
|
logger.error(err)
|
||||||
|
res.status(statusCode.INTERNAL_SERVER_ERROR);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
members,
|
||||||
|
};
|
@ -1,12 +1,13 @@
|
|||||||
const statusCode = require("../utils/statusCodes").statusCodes;
|
const statusCode = require("../utils/statusCodes").statusCodes;
|
||||||
const { getMessages } = require("../db/api.js");
|
const { getMessages } = require("../db/api.js");
|
||||||
|
const { logger } = require("../system/Logger");
|
||||||
|
|
||||||
async function messages(body, res) {
|
async function messages(body, res) {
|
||||||
const { roomId } = body;
|
const { roomId } = body;
|
||||||
getMessages(roomId).then((messages) => {
|
getMessages(roomId).then((messages) => {
|
||||||
res.status(statusCode.OK).json(messages);
|
res.status(statusCode.OK).json(messages);
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
console.log(err)
|
logger.err(err)
|
||||||
res.status(statusCode.INTERNAL_SERVER_ERROR);
|
res.status(statusCode.INTERNAL_SERVER_ERROR);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
const statusCode = require("../utils/statusCodes").statusCodes;
|
const statusCode = require("../utils/statusCodes").statusCodes;
|
||||||
const { getRooms } = require("../db/api.js");
|
const { getRooms } = require("../db/api.js");
|
||||||
|
const { logger } = require("../system/Logger");
|
||||||
|
|
||||||
async function rooms(body, res) {
|
async function rooms(body, res) {
|
||||||
const { mailboxId, offset, limit } = body;
|
const { mailboxId, offset, limit } = body;
|
||||||
getRooms(mailboxId).then((rooms) => {
|
getRooms(mailboxId).then((rooms) => {
|
||||||
res.status(statusCode.OK).json(rooms);
|
res.status(statusCode.OK).json(rooms);
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
console.log(err)
|
logger.error(err)
|
||||||
res.status(statusCode.INTERNAL_SERVER_ERROR);
|
res.status(statusCode.INTERNAL_SERVER_ERROR);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
const { db, execQueryAsync, execQueryAsyncWithId } = require("./db.js");
|
const { execQueryAsync, execQueryAsyncWithId } = require("./db.js");
|
||||||
const { queryCcId, queryToId, queryFromId } = require("./utils/addressQueries.js");
|
const { queryCcId, queryToId, queryFromId } = require("./utils/addressQueries.js");
|
||||||
const DEBUG = require("../utils/debug").DEBUG;
|
|
||||||
|
|
||||||
async function registerAccount(userId, pwd, xoauth, xoauth2, host, port, tls) {
|
async function registerAccount(userId, pwd, xoauth, xoauth2, host, port, tls) {
|
||||||
const query = `
|
const query = `
|
||||||
@ -98,9 +97,24 @@ async function getMessages(roomId) {
|
|||||||
return await execQueryAsync(query, values);
|
return await execQueryAsync(query, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getMembers(roomId) {
|
||||||
|
const query = `
|
||||||
|
SELECT
|
||||||
|
address.address_id,
|
||||||
|
address.address_name,
|
||||||
|
address.email
|
||||||
|
FROM app_room_member
|
||||||
|
INNER JOIN address ON address.address_id = app_room_member.member_id
|
||||||
|
WHERE app_room_member.room_id = ?
|
||||||
|
`;
|
||||||
|
const values = [roomId];
|
||||||
|
return await execQueryAsync(query, values);
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
registerAccount,
|
registerAccount,
|
||||||
getAccounts,
|
getAccounts,
|
||||||
getRooms,
|
getRooms,
|
||||||
getMessages
|
getMessages,
|
||||||
|
getMembers
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
const mysql = require("mysql");
|
const mysql = require("mysql");
|
||||||
|
const { logger } = require("../system/Logger");
|
||||||
const MYSQL = require("./config.json").mysql;
|
const MYSQL = require("./config.json").mysql;
|
||||||
const DEBUG = require("../utils/debug.js").DEBUG;
|
|
||||||
|
|
||||||
|
|
||||||
const db = mysql.createConnection({
|
const db = mysql.createConnection({
|
||||||
host: MYSQL.host,
|
host: MYSQL.host,
|
||||||
@ -12,9 +11,9 @@ const db = mysql.createConnection({
|
|||||||
|
|
||||||
db.connect(function (err) {
|
db.connect(function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
DEBUG.log("Impossible de se connecter", err.code);
|
logger.error(`Unable to connect database ${err.code}`);
|
||||||
} else {
|
} else {
|
||||||
DEBUG.log("Database successfully connected");
|
logger.log("Database successfully connected");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -45,7 +44,7 @@ function execQueryAsyncWithId(query, values) {
|
|||||||
function execQuery(query, values) {
|
function execQuery(query, values) {
|
||||||
db.query(query, values, (err, results, fields) => {
|
db.query(query, values, (err, results, fields) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
DEBUG.log(err);
|
logger.error(err);
|
||||||
throw (err);
|
throw (err);
|
||||||
}
|
}
|
||||||
return results;
|
return results;
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
const { execQueryAsync, execQueryAsyncWithId } = require("./db.js");
|
const { execQueryAsync, execQueryAsyncWithId } = require("./db.js");
|
||||||
const DEBUG = require("../utils/debug").DEBUG;
|
|
||||||
|
|
||||||
|
|
||||||
async function getAddresseId(email, name) {
|
async function getAddresseId(email, name) {
|
||||||
const localpart = email.split("@")[0];
|
const localpart = email.split("@")[0];
|
||||||
@ -24,8 +22,20 @@ async function findRoomByOwner(ownerId) {
|
|||||||
return await execQueryAsync(query, values);
|
return await execQueryAsync(query, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getUserIdOfMailbox(boxId) {
|
||||||
|
const query = `
|
||||||
|
SELECT app_account.user_id
|
||||||
|
FROM mailbox
|
||||||
|
INNER JOIN app_account ON app_account.account_id = mailbox.account_id
|
||||||
|
WHERE mailbox.mailbox_id = ?
|
||||||
|
`;
|
||||||
|
const values = [boxId];
|
||||||
|
return await execQueryAsync(query, values);
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
getAddresseId,
|
getAddresseId,
|
||||||
getFieldId,
|
getFieldId,
|
||||||
findRoomByOwner,
|
findRoomByOwner,
|
||||||
|
getUserIdOfMailbox
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
const { transformEmojis } = require("../utils/string.js");
|
const { transformEmojis } = require("../utils/string.js");
|
||||||
const { db, execQuery, execQueryAsync, execQueryAsyncWithId } = require("./db.js");
|
const { db, execQuery, execQueryAsync, execQueryAsyncWithId } = require("./db.js");
|
||||||
const DEBUG = require("../utils/debug").DEBUG;
|
|
||||||
|
|
||||||
async function registerMessage(timestamp, rfc822size, messageId) {
|
async function registerMessage(timestamp, rfc822size, messageId) {
|
||||||
const query = `
|
const query = `
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
const { transformEmojis } = require("../utils/string.js");
|
const { transformEmojis } = require("../utils/string.js");
|
||||||
const { db, execQueryAsync, execQueryAsyncWithId, execQuery } = require("./db.js");
|
const { db, execQueryAsync, execQueryAsyncWithId, execQuery } = require("./db.js");
|
||||||
const { queryFromId, queryToId, queryCcId } = require("./utils/addressQueries.js");
|
const { queryFromId, queryToId, queryCcId } = require("./utils/addressQueries.js");
|
||||||
const DEBUG = require("../utils/debug").DEBUG;
|
|
||||||
|
|
||||||
async function createRoom(roomName, ownerId, messageId) {
|
async function createRoom(roomName, ownerId, messageId) {
|
||||||
|
if (!roomName) roomName = "No room name";
|
||||||
roomName = transformEmojis(roomName);
|
roomName = transformEmojis(roomName);
|
||||||
const query = `INSERT INTO app_room (room_name, owner_id, message_id) VALUES (?, ?, ?)`;
|
const query = `INSERT IGNORE INTO app_room (room_name, owner_id, message_id) VALUES (?, ?, ?)`;
|
||||||
const values = [roomName.substring(0, 255), ownerId, messageId];
|
const values = [roomName.substring(0, 255), ownerId, messageId];
|
||||||
return await execQueryAsyncWithId(query, values);
|
return await execQueryAsyncWithId(query, values);
|
||||||
// todo add members
|
// todo add members
|
||||||
@ -55,7 +55,7 @@ function updateLastUpdateThread(threadId) {
|
|||||||
|
|
||||||
function incrementNotSeenThread(threadId) {
|
function incrementNotSeenThread(threadId) {
|
||||||
// todo
|
// todo
|
||||||
// also increment parent room
|
// also increment root room
|
||||||
}
|
}
|
||||||
|
|
||||||
async function isRoomGroup(roomId) {
|
async function isRoomGroup(roomId) {
|
||||||
|
@ -126,6 +126,7 @@ CREATE TABLE app_room (
|
|||||||
notSeen INT NOT NULL DEFAULT 0,
|
notSeen INT NOT NULL DEFAULT 0,
|
||||||
lastUpdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
|
lastUpdate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
|
||||||
PRIMARY KEY (room_id),
|
PRIMARY KEY (room_id),
|
||||||
|
UNIQUE KEY (owner_id, message_id, isGroup),
|
||||||
FOREIGN KEY (owner_id) REFERENCES address(address_id),
|
FOREIGN KEY (owner_id) REFERENCES address(address_id),
|
||||||
FOREIGN KEY (message_id) REFERENCES message(message_id)
|
FOREIGN KEY (message_id) REFERENCES message(message_id)
|
||||||
);
|
);
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
const { getMailbox, updateMailbox } = require("../../db/imap/imap");
|
const { getMailbox, updateMailbox } = require("../../db/imap/imap");
|
||||||
const { DEBUG } = require("../../utils/debug");
|
const { logger } = require("../../system/Logger");
|
||||||
const { registerMessageInApp } = require("../saveMessage");
|
const { registerMessageInApp } = require("../saveMessage");
|
||||||
const { saveMessage } = require("../storeMessage");
|
const { saveMessage } = require("../storeMessage");
|
||||||
|
|
||||||
class Box {
|
class Box {
|
||||||
constructor(_imap, boxId, _boxName) {
|
constructor(_imap, _boxId, _boxName) {
|
||||||
this.imap = _imap;
|
this.imap = _imap;
|
||||||
this.boxName = _boxName;
|
this.boxName = _boxName;
|
||||||
this.id = boxId;
|
this.id = _boxId;
|
||||||
this.box;
|
this.box;
|
||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
@ -17,7 +17,7 @@ class Box {
|
|||||||
|
|
||||||
const readOnly = true;
|
const readOnly = true;
|
||||||
this.imap.openBox(this.boxName, readOnly, (err, box) => {
|
this.imap.openBox(this.boxName, readOnly, (err, box) => {
|
||||||
if (err) DEBUG.log(err);
|
if (err) logger.error(err);
|
||||||
this.sync(this.box.uidnext, box.uidnext);
|
this.sync(this.box.uidnext, box.uidnext);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -25,6 +25,7 @@ class Box {
|
|||||||
sync(savedUid, currentUid) {
|
sync(savedUid, currentUid) {
|
||||||
const promises = [];
|
const promises = [];
|
||||||
const mails = [];
|
const mails = [];
|
||||||
|
logger.log(`Syncing from ${savedUid} to ${currentUid} uid`);
|
||||||
const f = this.imap.seq.fetch(`${savedUid}:${currentUid}`, {
|
const f = this.imap.seq.fetch(`${savedUid}:${currentUid}`, {
|
||||||
size: true,
|
size: true,
|
||||||
envelope: true,
|
envelope: true,
|
||||||
@ -38,16 +39,33 @@ class Box {
|
|||||||
});
|
});
|
||||||
|
|
||||||
f.once("error", (err) => {
|
f.once("error", (err) => {
|
||||||
DEBUG.log("Fetch error: " + err);
|
logger.error("Fetch error: " + err);
|
||||||
});
|
});
|
||||||
|
|
||||||
f.once("end", async () => {
|
f.once("end", async () => {
|
||||||
await Promise.all(promises).then(async (res) => {
|
let step = 20;
|
||||||
for (let i = 0; i < mails.length; i++) {
|
for (let i = 0; i < promises.length; i += step) {
|
||||||
console.log(i, mails[i].uid)
|
for (let j = i; j < (i + step && promises.length); j++) {
|
||||||
await registerMessageInApp(res[i], mails[i]);
|
console.log(j, promises.length, promises[j])
|
||||||
|
await new Promise((resolve, reject) => {
|
||||||
|
promises[j]
|
||||||
|
.then(async (res) => {
|
||||||
|
await registerMessageInApp(res, mails[j], this.id);
|
||||||
|
resolve();
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
logger.log(`Saved messages ${i + step > promises.length ? promises.length : i + step}/${mails.length}`);
|
||||||
|
updateMailbox(this.id, mails[i].uid);
|
||||||
|
}
|
||||||
|
// await Promise.all(promises).then(async (res) => {
|
||||||
|
// for (let i = 0; i < mails.length; i++) {
|
||||||
|
// logger.log(`Saved message ${i}/${mails.length}`);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
updateMailbox(this.id, currentUid);
|
updateMailbox(this.id, currentUid);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
const Imap = require("imap");
|
const Imap = require("imap");
|
||||||
const { getAllMailboxes, registerMailbox } = require("../../db/imap/imap");
|
const { getAllMailboxes, registerMailbox } = require("../../db/imap/imap");
|
||||||
const { DEBUG } = require("../../utils/debug");
|
const { logger } = require("../../system/Logger");
|
||||||
const { Box } = require("./Box");
|
const { Box } = require("./Box");
|
||||||
|
|
||||||
class ImapInstance {
|
class ImapInstance {
|
||||||
@ -13,7 +13,6 @@ class ImapInstance {
|
|||||||
port: account.port,
|
port: account.port,
|
||||||
tls: account.tls,
|
tls: account.tls,
|
||||||
});
|
});
|
||||||
|
|
||||||
this.account = account;
|
this.account = account;
|
||||||
this.boxes = [];
|
this.boxes = [];
|
||||||
|
|
||||||
@ -21,16 +20,16 @@ class ImapInstance {
|
|||||||
* IMAP
|
* IMAP
|
||||||
*/
|
*/
|
||||||
this.imap.once("ready", () => {
|
this.imap.once("ready", () => {
|
||||||
DEBUG.log("imap connected")
|
logger.log("Imap connected for " + this.account.user);
|
||||||
this.imapReady();
|
this.imapReady();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.imap.once("error", function (err) {
|
this.imap.once("error", (err) => {
|
||||||
DEBUG.log(err);
|
logger.error("Imap error for " + this.account.user + ": " + err);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.imap.once("end", function () {
|
this.imap.once("end", () => {
|
||||||
DEBUG.log("Connection ended");
|
logger.log("Connection ended for " + this.account.user);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.imap.connect();
|
this.imap.connect();
|
||||||
@ -41,8 +40,8 @@ class ImapInstance {
|
|||||||
if (mailboxes.length > 0) {
|
if (mailboxes.length > 0) {
|
||||||
this.boxes.push(new Box(this.imap, mailboxes[0].mailbox_id, mailboxes[0].mailbox_name));
|
this.boxes.push(new Box(this.imap, mailboxes[0].mailbox_id, mailboxes[0].mailbox_name));
|
||||||
} else {
|
} else {
|
||||||
this.imap.getBoxes('', (err, boxes) => {
|
this.imap.getBoxes("", (err, boxes) => {
|
||||||
if (err) DEBUG.log(err);
|
if (err) logger.error(err);
|
||||||
const allBoxName = this.getAllBox(boxes);
|
const allBoxName = this.getAllBox(boxes);
|
||||||
registerMailbox(this.account.id, allBoxName).then((mailboxId) => {
|
registerMailbox(this.account.id, allBoxName).then((mailboxId) => {
|
||||||
this.boxes.push(new Box(this.imap, mailboxId, allBoxName));
|
this.boxes.push(new Box(this.imap, mailboxId, allBoxName));
|
||||||
@ -54,20 +53,23 @@ class ImapInstance {
|
|||||||
|
|
||||||
getAllBox(boxes) {
|
getAllBox(boxes) {
|
||||||
// ideally we should get the all box to get all messages
|
// ideally we should get the all box to get all messages
|
||||||
let allBox;
|
let allBox = '';
|
||||||
Object.keys(boxes).forEach(key => {
|
Object.keys(boxes).forEach((key) => {
|
||||||
if (key === 'INBOX') return;
|
if (key === "INBOX") return;
|
||||||
|
if (allBox.includes("/")) return; // already found
|
||||||
|
if (!boxes[key].children) return; // no children
|
||||||
allBox = key;
|
allBox = key;
|
||||||
Object.keys(boxes[key].children).forEach((childBoxes) => {
|
Object.keys(boxes[key].children).forEach((childBoxes) => {
|
||||||
if (boxes[key].children[childBoxes].attribs.includes('\\All')) {
|
if (boxes[key].children[childBoxes].attribs.includes("\\All")) {
|
||||||
allBox += '/' + childBoxes;
|
allBox += "/" + childBoxes;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
if (!allBox.includes("/")) logger.warn("Did not find 'All' mailbox");
|
||||||
return allBox;
|
return allBox;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
ImapInstance
|
ImapInstance,
|
||||||
}
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
const { getAllAccounts } = require("../../db/imap/imap");
|
const { getAllAccounts } = require("../../db/imap/imap");
|
||||||
const { DEBUG } = require("../../utils/debug");
|
const { logger } = require("../../system/Logger");
|
||||||
const { ImapInstance } = require("./ImapInstance");
|
const { ImapInstance } = require("./ImapInstance");
|
||||||
|
|
||||||
class ImapSync {
|
class ImapSync {
|
||||||
@ -14,7 +14,7 @@ class ImapSync {
|
|||||||
this.addInstance(accounts[i]);
|
this.addInstance(accounts[i]);
|
||||||
}
|
}
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
DEBUG.log(err);
|
logger.error(err);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ const {
|
|||||||
hasSameMembersAsParent,
|
hasSameMembersAsParent,
|
||||||
} = require("../db/saveMessageApp");
|
} = require("../db/saveMessageApp");
|
||||||
|
|
||||||
const { findRoomByOwner, getAddresseId } = require("../db/mail");
|
const { findRoomByOwner, getAddresseId, getUserIdOfMailbox } = require("../db/mail");
|
||||||
const { isDmOnEnvelope } = require("./utils/statusUtils");
|
const { nbMembers } = require("./utils/statusUtils");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* take object address and join mailbox and host to return mailbox@host
|
* take object address and join mailbox and host to return mailbox@host
|
||||||
@ -18,78 +18,128 @@ function createAddress(elt) {
|
|||||||
return `${elt.mailbox}@${elt.host}`;
|
return `${elt.mailbox}@${elt.host}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function registerMessageInApp(messageId, attrs) {
|
async function initiateRoom(envelope, ownerId, messageId, isSeen) {
|
||||||
const isSeen = attrs.flags.includes("Seen") ? 1 : 0; // todo verify
|
await createRoom(envelope.subject, ownerId, messageId).then(async (roomId) => {
|
||||||
const envelope = attrs.envelope;
|
// todo register members
|
||||||
|
await registerMessageInRoom(messageId, roomId, isSeen, envelope.date);
|
||||||
await getAddresseId(createAddress(envelope.sender[0])).then(async (ownerId) => {
|
|
||||||
if (envelope.inReplyTo) {
|
|
||||||
await registerReplyMessage(envelope, messageId, isSeen, ownerId);
|
|
||||||
} else {
|
|
||||||
await findRoomByOwner(ownerId).then(async (res) => {
|
|
||||||
if (res.length == 0) {
|
|
||||||
// first message of this sender
|
|
||||||
await createRoom(envelope.subject, ownerId, messageId).then(async (roomId) => {
|
|
||||||
await registerMessageInRoom(messageId, roomId, isSeen, envelope.date);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
// not a reply, add to the list of message if this sender
|
|
||||||
await registerMessageInRoom(messageId, res[0].room_id, isSeen, envelope.date);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function registerReplyMessage(envelope, messageId, isSeen, ownerId) {
|
const roomType = {
|
||||||
const messageID = envelope.messageId;
|
ROOM: 'room',
|
||||||
await findRoomsFromMessage(messageId).then(async (rooms) => {
|
CHANNEL: 'channel',
|
||||||
if (rooms.length == 0) {
|
GROUP: 'group',
|
||||||
// no rooms, so is a transfer
|
DM: 'dm',
|
||||||
// todo test if members of transferred message are included
|
THREAD: 'thread'
|
||||||
} else if (rooms.length === 1) {
|
}
|
||||||
// only one room so message is only in a room and not in a thread
|
|
||||||
// as a thread is associated to a room to begin
|
class registerMessageInApp {
|
||||||
await isRoomGroup(rooms[0].room_id).then(async (isGroup) => {
|
constructor(_messageId, _attrs, _boxId) {
|
||||||
if (isGroup) {
|
this.messageId = _messageId;
|
||||||
const hasSameMembers = await hasSameMembersAsParent(messageID, envelope.inReplyTo);
|
this.attrs = _attrs;
|
||||||
if (hasSameMembers) {
|
this.envelope = this.attrs.envelope;
|
||||||
await registerMessageInRoom(messageId, rooms[0].room_id, isSeen, envelope.date);
|
this.messageID = this.envelope.messageId;
|
||||||
} else {
|
this.boxId = _boxId;
|
||||||
// is a group and has not the same member as the previous message
|
this.isSeen = this.attrs.flags.includes("\\Seen") ? 1 : 0;
|
||||||
// some recipient has been removed create a thread
|
this.ownerId;
|
||||||
const isDm = isDmOnEnvelope(envelope);
|
this.userId;
|
||||||
await createThread(envelope.subject, ownerId, messageId, rooms[0].room_id, isDm).then(async (threadId) => {
|
}
|
||||||
await registerMessageInThread(messageId, threadId, isSeen);
|
|
||||||
});
|
async init() {
|
||||||
}
|
this.ownerId = await getAddresseId(createAddress(this.envelope.from[0])); // todo use sender or from ?
|
||||||
} else {
|
}
|
||||||
// reply from channel
|
|
||||||
// todo
|
isDm = () => nbMembers(this.envelope) == 2;
|
||||||
// if (sender == owner) { // correction from the original sender
|
|
||||||
// // leave in the same channel
|
async isFromUs() {
|
||||||
// }
|
if (!this.userId) this.userId = (await getUserIdOfMailbox(this.boxId))[0]?.user_id;
|
||||||
}
|
return this.ownerId == this.userId;
|
||||||
});
|
}
|
||||||
} else if (rooms.length > 1) {
|
|
||||||
// get the lowest thread (order by room_id)
|
async initiateRoom(owner, roomType) {
|
||||||
const room = rooms[rooms.length-1];
|
// todo roomType
|
||||||
const hasSameMembers = await hasSameMembersAsParent(messageID, envelope.inReplyTo);
|
await createRoom(this.envelope.subject, owner, this.messageId).then(async (roomId) => {
|
||||||
if (hasSameMembers) {
|
// todo register members
|
||||||
await registerMessageInThread(messageId, room.room_id, isSeen);
|
await registerMessageInRoom(this.messageId, roomId, this.isSeen, this.envelope.date);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async createOrRegisterOnExistence(owner, roomType) {
|
||||||
|
await findRoomByOwner(owner).then(async (res) => {
|
||||||
|
if (res.length == 0) {
|
||||||
|
// first message with this sender
|
||||||
|
await initiateRoom(owner, roomType);
|
||||||
} else {
|
} else {
|
||||||
// has not the same members so it is a derivation of this thread
|
// not a reply, add to the list of message if this sender
|
||||||
// todo put this in a function and add default message in the reply chain
|
await registerMessageInRoom(this.messageId, res[0].room_id, this.isSeen, this.envelope.date);
|
||||||
const isDm = isDmOnEnvelope(envelope);
|
}
|
||||||
await createThread(envelope.subject, ownerId, messageId, room.room_id, isDm).then(async (threadId) => {
|
});
|
||||||
await registerMessageInThread(messageId, threadId, isSeen);
|
}
|
||||||
});
|
|
||||||
|
async createOrRegisterOnMembers(roomId) {
|
||||||
|
const hasSameMembers = await hasSameMembersAsParent(this.messageID, this.envelope.inReplyTo);
|
||||||
|
if (hasSameMembers) {
|
||||||
|
await registerMessageInRoom(this.messageId, roomId, this.isSeen, this.envelope.date);
|
||||||
|
} else {
|
||||||
|
await createThread(this.envelope.subject, this.ownerId, this.messageId, roomId, this.isDm()).then(
|
||||||
|
async (threadId) => {
|
||||||
|
await registerMessageInThread(this.messageId, threadId, this.isSeen);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async save() {
|
||||||
|
await this.init();
|
||||||
|
if (this.envelope.inReplyTo) {
|
||||||
|
this.saveReply();
|
||||||
|
} else {
|
||||||
|
if (await this.isFromUs()) {
|
||||||
|
if (this.isDm()) {
|
||||||
|
// create or add new message to DM
|
||||||
|
const userTo = await getAddresseId(createAddress(this.envelope.to[0]));
|
||||||
|
await this.createOrRegisterOnExistence(userTo, roomType.DM);
|
||||||
|
} else {
|
||||||
|
// it is not a reply and not a dm
|
||||||
|
// so it is a channel, which can be possibly a group
|
||||||
|
initiateRoom(this.envelope, this.ownerId, this.messageId, this.isSeen);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await this.createOrRegisterOnExistence(this.ownerId, roomType.ROOM);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
|
async saveReply() {
|
||||||
|
const messageID = envelope.messageId;
|
||||||
|
await findRoomsFromMessage(messageId).then(async (rooms) => {
|
||||||
|
if (rooms.length == 0) {
|
||||||
|
// no rooms, so is a transfer
|
||||||
|
// todo test if members of transferred message are included
|
||||||
|
} else if (rooms.length === 1) {
|
||||||
|
// only one room so message is only in a room and not in a thread
|
||||||
|
// as a thread is associated to a room
|
||||||
|
await isRoomGroup(rooms[0].room_id).then(async (isGroup) => {
|
||||||
|
if (isGroup) {
|
||||||
|
this.createOrRegisterOnMembers(rooms[0].room_id);
|
||||||
|
} else {
|
||||||
|
// reply from channel
|
||||||
|
// todo
|
||||||
|
// if (sender == owner) { // correction from the original sender
|
||||||
|
// // leave in the same channel
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (rooms.length > 1) {
|
||||||
|
// get the lowest thread (order by room_id)
|
||||||
|
const roomId = rooms[rooms.length - 1].room_id;
|
||||||
|
this.createOrRegisterOnMembers(roomId);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
registerMessageInApp
|
registerMessageInApp,
|
||||||
|
roomType
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
const { getAddresseId } = require("../db/mail");
|
const { getAddresseId } = require("../db/mail");
|
||||||
const { DEBUG } = require("../utils/debug");
|
|
||||||
const { simpleParser } = require("mailparser");
|
const { simpleParser } = require("mailparser");
|
||||||
const moment = require("moment");
|
const moment = require("moment");
|
||||||
const {
|
const {
|
||||||
@ -13,6 +12,7 @@ const {
|
|||||||
} = require("../db/saveMessage");
|
} = require("../db/saveMessage");
|
||||||
|
|
||||||
const { getFieldId } = require("../db/mail");
|
const { getFieldId } = require("../db/mail");
|
||||||
|
const { logger } = require("../system/Logger");
|
||||||
|
|
||||||
function saveMessage(attrs, mailboxId, imap) {
|
function saveMessage(attrs, mailboxId, imap) {
|
||||||
const envelope = attrs.envelope;
|
const envelope = attrs.envelope;
|
||||||
@ -23,8 +23,8 @@ function saveMessage(attrs, mailboxId, imap) {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
registerMessage(ts, rfc822size, messageID)
|
registerMessage(ts, rfc822size, messageID)
|
||||||
.then((messageId) => {
|
.then((messageId) => {
|
||||||
const isSeen = attrs.flags.includes("Seen") ? 1 : 0; // todo verify
|
const isSeen = attrs.flags.includes("\\Seen") ? 1 : 0; // todo verify
|
||||||
const deleted = attrs.flags.includes("Deleted") ? 1 : 0; // todo verify
|
const deleted = attrs.flags.includes("\\Deleted") ? 1 : 0; // todo verify
|
||||||
|
|
||||||
registerMailbox_message(mailboxId, attrs.uid, messageId, attrs.modseq, isSeen, deleted);
|
registerMailbox_message(mailboxId, attrs.uid, messageId, attrs.modseq, isSeen, deleted);
|
||||||
const f = imap.fetch(attrs.uid, { bodies: "" });
|
const f = imap.fetch(attrs.uid, { bodies: "" });
|
||||||
@ -54,14 +54,14 @@ function saveMessage(attrs, mailboxId, imap) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
f.once("error", function (err) {
|
f.once("error", function (err) {
|
||||||
console.log("Fetch error: " + err);
|
logger.warn("Fetch error: " + err);
|
||||||
});
|
});
|
||||||
f.once("end", function () {
|
f.once("end", function () {
|
||||||
DEBUG.log("Done fetching data of "+messageID);
|
// logger.log("Done fetching data of " + messageID); // todo
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
DEBUG.log("Unable to register message: " + err);
|
logger.warn("Unable to register message: " + err);
|
||||||
reject(err);
|
reject(err);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -81,8 +81,9 @@ async function saveFromParsedData(parsed, messageId) {
|
|||||||
});
|
});
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
} else if (["subject", "inReplyTo"].includes(key)) {
|
} else if (["subject", "inReplyTo", "references"].includes(key)) {
|
||||||
// todo : "references" (array)
|
// todo : "references" (array)
|
||||||
|
if (key == "references") return;
|
||||||
promises.push(
|
promises.push(
|
||||||
getFieldId(key).then(async (fieldId) => {
|
getFieldId(key).then(async (fieldId) => {
|
||||||
await saveHeader_fields(messageId, fieldId, undefined, undefined, parsed[key]);
|
await saveHeader_fields(messageId, fieldId, undefined, undefined, parsed[key]);
|
||||||
@ -91,15 +92,15 @@ async function saveFromParsedData(parsed, messageId) {
|
|||||||
} else if (["html", "text", "textAsHtml"].includes(key)) {
|
} else if (["html", "text", "textAsHtml"].includes(key)) {
|
||||||
const hash = "0";
|
const hash = "0";
|
||||||
const size = "0";
|
const size = "0";
|
||||||
|
let partType = "text/plain";
|
||||||
|
if (key == "html") {
|
||||||
|
partType = "text/html";
|
||||||
|
} else if (key == "textAsHtml") {
|
||||||
|
partType = "text/TexAsHtml";
|
||||||
|
}
|
||||||
saveBodypart(size, hash, parsed[key], "").then((bodypartId) => {
|
saveBodypart(size, hash, parsed[key], "").then((bodypartId) => {
|
||||||
getFieldId(key).then((fieldId) => {
|
getFieldId(key).then((fieldId) => {
|
||||||
saveHeader_fields(
|
saveHeader_fields(messageId, fieldId, bodypartId, partType, undefined);
|
||||||
messageId,
|
|
||||||
fieldId,
|
|
||||||
bodypartId,
|
|
||||||
undefined, // todo ?
|
|
||||||
undefined
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else if (key == "attachments") {
|
} else if (key == "attachments") {
|
||||||
@ -109,7 +110,7 @@ async function saveFromParsedData(parsed, messageId) {
|
|||||||
// other field are not important and can be retrieved in source
|
// other field are not important and can be retrieved in source
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
DEBUG.log("doesn't know key: " + key);
|
logger.warn("doesn't know key: " + key);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -121,8 +122,8 @@ module.exports = {
|
|||||||
saveMessage,
|
saveMessage,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (process.env['NODE_DEV'] == 'TEST') {
|
if (process.env["NODE_DEV"] == "TEST") {
|
||||||
module.exports = {
|
module.exports = {
|
||||||
saveFromParsedData
|
saveFromParsedData,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,18 @@
|
|||||||
function isDmOnEnvelope(envelope) {
|
function nbMembers(envelope) {
|
||||||
const members =
|
let nbMembers =
|
||||||
envelope.bcc?.length +
|
(envelope.bcc?.length ?? 0) +
|
||||||
envelope.cc?.length +
|
(envelope.cc?.length ?? 0) +
|
||||||
envelope.to?.length +
|
(envelope.to?.length ?? 0) +
|
||||||
envelope.sender?.length +
|
(envelope.from?.length ?? 0);
|
||||||
envelope.from?.length;
|
if (
|
||||||
return members === 2;
|
envelope.sender?.length > 0 &&
|
||||||
|
!(envelope.sender[0].mailbox == envelope.from[0].mailbox && envelope.sender[0].host == envelope.from[0].host)
|
||||||
|
) {
|
||||||
|
nbMembers += envelope.sender?.length ?? 0;
|
||||||
|
}
|
||||||
|
return nbMembers;
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
isDmOnEnvelope,
|
nbMembers,
|
||||||
};
|
};
|
||||||
|
@ -12,11 +12,9 @@
|
|||||||
"vue-router": "^4.1.6"
|
"vue-router": "^4.1.6"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"jest": "^29.5.0",
|
"jest": "^29.5.0"
|
||||||
"jest-mysql": "^2.0.0"
|
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"preset": "jest-mysql",
|
|
||||||
"testMatch": [
|
"testMatch": [
|
||||||
"<rootDir>/test//**/*-test.[jt]s?(x)"
|
"<rootDir>/test//**/*-test.[jt]s?(x)"
|
||||||
]
|
]
|
||||||
|
@ -33,6 +33,11 @@ router.get("/:roomId/messages", async (req, res) => {
|
|||||||
await messages(req.params, res);
|
await messages(req.params, res);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
router.get("/:roomId/members", async (req, res) => {
|
||||||
|
const { roomId } = req.params;
|
||||||
|
await members(req.params, res);
|
||||||
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a new mailbox inside the app
|
* Register a new mailbox inside the app
|
||||||
*/
|
*/
|
||||||
|
42
back/saveLogic.js
Normal file
42
back/saveLogic.js
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
if (message.isReply()) {
|
||||||
|
// todo transfer
|
||||||
|
if (message.replyToThread()) {
|
||||||
|
if (message.hasSameMember(parent)) {
|
||||||
|
addToThread();
|
||||||
|
} else {
|
||||||
|
createThread();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (message.isInGroup()) {
|
||||||
|
if (message.hasSameMember(parent)) {
|
||||||
|
addToGroup();
|
||||||
|
} else {
|
||||||
|
createThread();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (message.isFromChannelOwner()) {
|
||||||
|
addToChannel(); // todo not sure (with references)
|
||||||
|
} else {
|
||||||
|
createThread();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (message.isFromUser()) {
|
||||||
|
if (message.isDm()) {
|
||||||
|
if (firstMessage()) {
|
||||||
|
createDM();
|
||||||
|
} else {
|
||||||
|
addToDm();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
createRoom();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (firstMessage()) {
|
||||||
|
createRoom();
|
||||||
|
} else {
|
||||||
|
addToRoom();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
45
back/system/Logger.js
Normal file
45
back/system/Logger.js
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
class Logger {
|
||||||
|
constructor() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
log(content) {
|
||||||
|
console.log(this._prefix("log"), content);
|
||||||
|
}
|
||||||
|
|
||||||
|
warn(content) {
|
||||||
|
console.warn(this._prefix("warn"), content);
|
||||||
|
}
|
||||||
|
|
||||||
|
error(content) {
|
||||||
|
console.error(this._prefix("err"), content);
|
||||||
|
}
|
||||||
|
|
||||||
|
_prefix(type) {
|
||||||
|
let typeStr = "";
|
||||||
|
switch (type) {
|
||||||
|
case "log":
|
||||||
|
typeStr = "LOG"
|
||||||
|
break;
|
||||||
|
case "warn":
|
||||||
|
typeStr = "WARN"
|
||||||
|
break;
|
||||||
|
case "err":
|
||||||
|
typeStr = "ERR"
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return `[${typeStr}: ${this._timestamp()}]`;
|
||||||
|
}
|
||||||
|
|
||||||
|
_timestamp() {
|
||||||
|
return new Date().toLocaleString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const logger = new Logger();
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
logger,
|
||||||
|
}
|
@ -1,52 +1,41 @@
|
|||||||
process.env["NODE_DEV"] = "TEST";
|
const { getAddresseId, getUserIdOfMailbox } = require("../../db/mail");
|
||||||
const { saveFromParsedData } = require("../../mails/storeMessage");
|
const { generateAttrs, generateUsers } = require("../test-utils/test-attrsUtils");
|
||||||
const { TestDb } = require("../sql/test-utilsDb");
|
const { registerMessageInApp, roomType } = require("../../mails/saveMessage");
|
||||||
const MYSQL = require("../../db/config.json").MYSQL;
|
|
||||||
|
|
||||||
let db;
|
jest.mock("../../db/mail");
|
||||||
beforeAll(async () => {
|
|
||||||
const options = {
|
|
||||||
databaseOptions: {
|
|
||||||
host: "localhost",
|
|
||||||
port: 3306,
|
|
||||||
user: MYSQL.user,
|
|
||||||
password: MYSQL.pwd,
|
|
||||||
database: "mail_test",
|
|
||||||
},
|
|
||||||
dbSchema: "../../sql/structureV2.sql",
|
|
||||||
};
|
|
||||||
db = new TestDb(options);
|
|
||||||
await db.init();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(async () => {
|
// todo mock db
|
||||||
db.cleanTables();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("saveMessage", async () => {
|
describe("saveMessage", () => {
|
||||||
describe("rooms", async () => {
|
describe("is not a reply", () => {
|
||||||
it("messages not related and from same sender should be in the same room", async () => {
|
it("DM from user should be assigned to other user", async () => {
|
||||||
await saveFromParsedData(
|
const users = generateUsers(2);
|
||||||
{
|
const attrs = generateAttrs({ from: [users[0].user], to: [users[1].user] });
|
||||||
to: { value: [{ address: "address1@email.com" }] },
|
|
||||||
from: { value: [{ address: "address2@email.com" }] },
|
getUserIdOfMailbox.mockReturnValue([{ user_id: users[0].id }]);
|
||||||
messageId: "<messageId1>",
|
getAddresseId.mockImplementation((email) => {
|
||||||
},
|
const match = users.find((user) => user.user.mailbox + "@" + user.user.host == email);
|
||||||
1,
|
return match.id;
|
||||||
);
|
});
|
||||||
await saveFromParsedData(
|
|
||||||
{
|
const register = new registerMessageInApp(1, attrs, 1);
|
||||||
to: { value: [{ address: "address1@email.com" }] },
|
|
||||||
from: { value: [{ address: "address2@email.com" }] },
|
const createOrRegisterOnExistence = jest
|
||||||
messageId: "<messageId2>",
|
.spyOn(register, "createOrRegisterOnExistence")
|
||||||
},
|
.mockImplementation(() => undefined);
|
||||||
2,
|
|
||||||
);
|
await register.save();
|
||||||
// todo call parser
|
|
||||||
const query = ""
|
expect(createOrRegisterOnExistence).toHaveBeenCalledWith(users[1].id, roomType.DM);
|
||||||
db.execQueryAsync().then((res) => {
|
|
||||||
expect(res.length).toBe(2);
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("DM message from user should be added to DM room", async () => {
|
||||||
|
// todo multiple messages
|
||||||
|
});
|
||||||
|
// it("first GROUP message should create a group", () => {});
|
||||||
});
|
});
|
||||||
|
describe("replies", () => {
|
||||||
|
it("", () => {});
|
||||||
|
});
|
||||||
|
describe("", () => {});
|
||||||
});
|
});
|
||||||
|
40
back/test/mail/utils/statusUtils-test.js
Normal file
40
back/test/mail/utils/statusUtils-test.js
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
const { nbMembers } = require("../../../mails/utils/statusUtils");
|
||||||
|
|
||||||
|
describe("statusUtils", () => {
|
||||||
|
it("sender and from shouldn't be counted twice if there are the same", () => {
|
||||||
|
const envelope = {
|
||||||
|
from: [{ name: "", mailbox: "user_1", host: "provider.com" }],
|
||||||
|
sender: [{ name: "", mailbox: "user_1", host: "provider.com" }],
|
||||||
|
replyTo: [{ name: "", mailbox: "user_1", host: "provider.com" }],
|
||||||
|
to: null,
|
||||||
|
cc: null,
|
||||||
|
bcc: null,
|
||||||
|
inReplyTo: null,
|
||||||
|
};
|
||||||
|
expect(nbMembers(envelope)).toBe(1);
|
||||||
|
});
|
||||||
|
it("sender and from shoud be counted twice if there are the same", () => {
|
||||||
|
const envelope = {
|
||||||
|
from: [{ name: "", mailbox: "user_1", host: "provider.com" }],
|
||||||
|
sender: [{ name: "", mailbox: "user_2", host: "provider.com" }],
|
||||||
|
replyTo: [{ name: "", mailbox: "user_1", host: "provider.com" }],
|
||||||
|
to: null,
|
||||||
|
cc: null,
|
||||||
|
bcc: null,
|
||||||
|
inReplyTo: null,
|
||||||
|
};
|
||||||
|
expect(nbMembers(envelope)).toBe(2);
|
||||||
|
});
|
||||||
|
it("should count every members", () => {
|
||||||
|
const envelope = {
|
||||||
|
from: [{ name: "", mailbox: "user_1", host: "provider.com" }],
|
||||||
|
sender: [{ name: "", mailbox: "user_2", host: "provider.com" }],
|
||||||
|
replyTo: [{ name: "", mailbox: "user_1", host: "provider.com" }],
|
||||||
|
to: [{ name: "", mailbox: "user_1", host: "provider.com" }],
|
||||||
|
cc: [{ name: "", mailbox: "user_1", host: "provider.com" }],
|
||||||
|
bcc: [{ name: "", mailbox: "user_1", host: "provider.com" }],
|
||||||
|
inReplyTo: null,
|
||||||
|
};
|
||||||
|
expect(nbMembers(envelope)).toBe(5);
|
||||||
|
});
|
||||||
|
});
|
206
back/test/test-utils/names.js
Normal file
206
back/test/test-utils/names.js
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
const names = [
|
||||||
|
"James",
|
||||||
|
"Mary",
|
||||||
|
"Robert",
|
||||||
|
"Patricia",
|
||||||
|
"John",
|
||||||
|
"Jennifer",
|
||||||
|
"Michael",
|
||||||
|
"Linda",
|
||||||
|
"David",
|
||||||
|
"Elizabeth",
|
||||||
|
"William",
|
||||||
|
"Barbara",
|
||||||
|
"Richard",
|
||||||
|
"Susan",
|
||||||
|
"Joseph",
|
||||||
|
"Jessica",
|
||||||
|
"Thomas",
|
||||||
|
"Sarah",
|
||||||
|
"Charles",
|
||||||
|
"Karen",
|
||||||
|
"Christopher",
|
||||||
|
"Lisa",
|
||||||
|
"Daniel",
|
||||||
|
"Nancy",
|
||||||
|
"Matthew",
|
||||||
|
"Betty",
|
||||||
|
"Anthony",
|
||||||
|
"Margaret",
|
||||||
|
"Mark",
|
||||||
|
"Sandra",
|
||||||
|
"Donald",
|
||||||
|
"Ashley",
|
||||||
|
"Steven",
|
||||||
|
"Kimberly",
|
||||||
|
"Paul",
|
||||||
|
"Emily",
|
||||||
|
"Andrew",
|
||||||
|
"Donna",
|
||||||
|
"Joshua",
|
||||||
|
"Michelle",
|
||||||
|
"Kenneth",
|
||||||
|
"Carol",
|
||||||
|
"Kevin",
|
||||||
|
"Amanda",
|
||||||
|
"Brian",
|
||||||
|
"Dorothy",
|
||||||
|
"George",
|
||||||
|
"Melissa",
|
||||||
|
"Timothy",
|
||||||
|
"Deborah",
|
||||||
|
"Ronald",
|
||||||
|
"Stephanie",
|
||||||
|
"Edward",
|
||||||
|
"Rebecca",
|
||||||
|
"Jason",
|
||||||
|
"Sharon",
|
||||||
|
"Jeffrey",
|
||||||
|
"Laura",
|
||||||
|
"Ryan",
|
||||||
|
"Cynthia",
|
||||||
|
"Jacob",
|
||||||
|
"Kathleen",
|
||||||
|
"Gary",
|
||||||
|
"Amy",
|
||||||
|
"Nicholas",
|
||||||
|
"Angela",
|
||||||
|
"Eric",
|
||||||
|
"Shirley",
|
||||||
|
"Jonathan",
|
||||||
|
"Anna",
|
||||||
|
"Stephen",
|
||||||
|
"Brenda",
|
||||||
|
"Larry",
|
||||||
|
"Pamela",
|
||||||
|
"Justin",
|
||||||
|
"Emma",
|
||||||
|
"Scott",
|
||||||
|
"Nicole",
|
||||||
|
"Brandon",
|
||||||
|
"Helen",
|
||||||
|
"Benjamin",
|
||||||
|
"Samantha",
|
||||||
|
"Samuel",
|
||||||
|
"Katherine",
|
||||||
|
"Gregory",
|
||||||
|
"Christine",
|
||||||
|
"Alexander",
|
||||||
|
"Debra",
|
||||||
|
"Frank",
|
||||||
|
"Rachel",
|
||||||
|
"Patrick",
|
||||||
|
"Carolyn",
|
||||||
|
"Raymond",
|
||||||
|
"Janet",
|
||||||
|
"Jack",
|
||||||
|
"Catherine",
|
||||||
|
"Dennis",
|
||||||
|
"Maria",
|
||||||
|
"Jerry",
|
||||||
|
"Heather",
|
||||||
|
"Tyler",
|
||||||
|
"Diane",
|
||||||
|
"Aaron",
|
||||||
|
"Ruth",
|
||||||
|
"Jose",
|
||||||
|
"Julie",
|
||||||
|
"Adam",
|
||||||
|
"Olivia",
|
||||||
|
"Nathan",
|
||||||
|
"Joyce",
|
||||||
|
"Henry",
|
||||||
|
"Virginia",
|
||||||
|
"Douglas",
|
||||||
|
"Victoria",
|
||||||
|
"Zachary",
|
||||||
|
"Kelly",
|
||||||
|
"Peter",
|
||||||
|
"Lauren",
|
||||||
|
"Kyle",
|
||||||
|
"Christina",
|
||||||
|
"Ethan",
|
||||||
|
"Joan",
|
||||||
|
"Walter",
|
||||||
|
"Evelyn",
|
||||||
|
"Noah",
|
||||||
|
"Judith",
|
||||||
|
"Jeremy",
|
||||||
|
"Megan",
|
||||||
|
"Christian",
|
||||||
|
"Andrea",
|
||||||
|
"Keith",
|
||||||
|
"Cheryl",
|
||||||
|
"Roger",
|
||||||
|
"Hannah",
|
||||||
|
"Terry",
|
||||||
|
"Jacqueline",
|
||||||
|
"Gerald",
|
||||||
|
"Martha",
|
||||||
|
"Harold",
|
||||||
|
"Gloria",
|
||||||
|
"Sean",
|
||||||
|
"Teresa",
|
||||||
|
"Austin",
|
||||||
|
"Ann",
|
||||||
|
"Carl",
|
||||||
|
"Sara",
|
||||||
|
"Arthur",
|
||||||
|
"Madison",
|
||||||
|
"Lawrence",
|
||||||
|
"Frances",
|
||||||
|
"Dylan",
|
||||||
|
"Kathryn",
|
||||||
|
"Jesse",
|
||||||
|
"Janice",
|
||||||
|
"Jordan",
|
||||||
|
"Jean",
|
||||||
|
"Bryan",
|
||||||
|
"Abigail",
|
||||||
|
"Billy",
|
||||||
|
"Alice",
|
||||||
|
"Joe",
|
||||||
|
"Julia",
|
||||||
|
"Bruce",
|
||||||
|
"Judy",
|
||||||
|
"Gabriel",
|
||||||
|
"Sophia",
|
||||||
|
"Logan",
|
||||||
|
"Grace",
|
||||||
|
"Albert",
|
||||||
|
"Denise",
|
||||||
|
"Willie",
|
||||||
|
"Amber",
|
||||||
|
"Alan",
|
||||||
|
"Doris",
|
||||||
|
"Juan",
|
||||||
|
"Marilyn",
|
||||||
|
"Wayne",
|
||||||
|
"Danielle",
|
||||||
|
"Elijah",
|
||||||
|
"Beverly",
|
||||||
|
"Randy",
|
||||||
|
"Isabella",
|
||||||
|
"Roy",
|
||||||
|
"Theresa",
|
||||||
|
"Vincent",
|
||||||
|
"Diana",
|
||||||
|
"Ralph",
|
||||||
|
"Natalie",
|
||||||
|
"Eugene",
|
||||||
|
"Brittany",
|
||||||
|
"Russell",
|
||||||
|
"Charlotte",
|
||||||
|
"Bobby",
|
||||||
|
"Marie",
|
||||||
|
"Mason",
|
||||||
|
"Kayla",
|
||||||
|
"Philip",
|
||||||
|
"Alexis",
|
||||||
|
"Louis",
|
||||||
|
"Lori",
|
||||||
|
];
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
names,
|
||||||
|
};
|
@ -1,9 +0,0 @@
|
|||||||
const DEBUG = (function () {
|
|
||||||
const timestamp = function () {};
|
|
||||||
timestamp.toString = () => "[" + new Date().toLocaleString() + "]";
|
|
||||||
return { log: console.log.bind(console, "%s", timestamp) };
|
|
||||||
})();
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
DEBUG,
|
|
||||||
};
|
|
342
back/yarn.lock
342
back/yarn.lock
@ -22,7 +22,7 @@
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/@babel/compat-data/-/compat-data-7.21.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/@babel/compat-data/-/compat-data-7.21.0.tgz"
|
||||||
integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==
|
integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==
|
||||||
|
|
||||||
"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.8.0":
|
"@babel/core@^7.11.6", "@babel/core@^7.12.3":
|
||||||
version "7.21.0"
|
version "7.21.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/@babel/core/-/core-7.21.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/@babel/core/-/core-7.21.0.tgz"
|
||||||
integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==
|
integrity sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==
|
||||||
@ -157,7 +157,7 @@
|
|||||||
chalk "^2.0.0"
|
chalk "^2.0.0"
|
||||||
js-tokens "^4.0.0"
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.4", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2":
|
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.21.2":
|
||||||
version "7.21.2"
|
version "7.21.2"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/@babel/parser/-/parser-7.21.2.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/@babel/parser/-/parser-7.21.2.tgz"
|
||||||
integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==
|
integrity sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==
|
||||||
@ -534,7 +534,7 @@
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/@jridgewell/set-array/-/set-array-1.1.2.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/@jridgewell/set-array/-/set-array-1.1.2.tgz"
|
||||||
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
|
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
|
||||||
|
|
||||||
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@1.4.14":
|
"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10":
|
||||||
version "1.4.14"
|
version "1.4.14"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz"
|
||||||
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
|
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
|
||||||
@ -660,101 +660,11 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/yargs-parser" "*"
|
"@types/yargs-parser" "*"
|
||||||
|
|
||||||
"@vue/compiler-core@3.2.47":
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz"
|
|
||||||
integrity sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==
|
|
||||||
dependencies:
|
|
||||||
"@babel/parser" "^7.16.4"
|
|
||||||
"@vue/shared" "3.2.47"
|
|
||||||
estree-walker "^2.0.2"
|
|
||||||
source-map "^0.6.1"
|
|
||||||
|
|
||||||
"@vue/compiler-dom@3.2.47":
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz"
|
|
||||||
integrity sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==
|
|
||||||
dependencies:
|
|
||||||
"@vue/compiler-core" "3.2.47"
|
|
||||||
"@vue/shared" "3.2.47"
|
|
||||||
|
|
||||||
"@vue/compiler-sfc@3.2.47":
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz"
|
|
||||||
integrity sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==
|
|
||||||
dependencies:
|
|
||||||
"@babel/parser" "^7.16.4"
|
|
||||||
"@vue/compiler-core" "3.2.47"
|
|
||||||
"@vue/compiler-dom" "3.2.47"
|
|
||||||
"@vue/compiler-ssr" "3.2.47"
|
|
||||||
"@vue/reactivity-transform" "3.2.47"
|
|
||||||
"@vue/shared" "3.2.47"
|
|
||||||
estree-walker "^2.0.2"
|
|
||||||
magic-string "^0.25.7"
|
|
||||||
postcss "^8.1.10"
|
|
||||||
source-map "^0.6.1"
|
|
||||||
|
|
||||||
"@vue/compiler-ssr@3.2.47":
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz"
|
|
||||||
integrity sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==
|
|
||||||
dependencies:
|
|
||||||
"@vue/compiler-dom" "3.2.47"
|
|
||||||
"@vue/shared" "3.2.47"
|
|
||||||
|
|
||||||
"@vue/devtools-api@^6.4.5":
|
"@vue/devtools-api@^6.4.5":
|
||||||
version "6.5.0"
|
version "6.5.0"
|
||||||
resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz"
|
resolved "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz"
|
||||||
integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==
|
integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==
|
||||||
|
|
||||||
"@vue/reactivity-transform@3.2.47":
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz"
|
|
||||||
integrity sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==
|
|
||||||
dependencies:
|
|
||||||
"@babel/parser" "^7.16.4"
|
|
||||||
"@vue/compiler-core" "3.2.47"
|
|
||||||
"@vue/shared" "3.2.47"
|
|
||||||
estree-walker "^2.0.2"
|
|
||||||
magic-string "^0.25.7"
|
|
||||||
|
|
||||||
"@vue/reactivity@3.2.47":
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz"
|
|
||||||
integrity sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==
|
|
||||||
dependencies:
|
|
||||||
"@vue/shared" "3.2.47"
|
|
||||||
|
|
||||||
"@vue/runtime-core@3.2.47":
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz"
|
|
||||||
integrity sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==
|
|
||||||
dependencies:
|
|
||||||
"@vue/reactivity" "3.2.47"
|
|
||||||
"@vue/shared" "3.2.47"
|
|
||||||
|
|
||||||
"@vue/runtime-dom@3.2.47":
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz"
|
|
||||||
integrity sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==
|
|
||||||
dependencies:
|
|
||||||
"@vue/runtime-core" "3.2.47"
|
|
||||||
"@vue/shared" "3.2.47"
|
|
||||||
csstype "^2.6.8"
|
|
||||||
|
|
||||||
"@vue/server-renderer@3.2.47":
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz"
|
|
||||||
integrity sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==
|
|
||||||
dependencies:
|
|
||||||
"@vue/compiler-ssr" "3.2.47"
|
|
||||||
"@vue/shared" "3.2.47"
|
|
||||||
|
|
||||||
"@vue/shared@3.2.47":
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz"
|
|
||||||
integrity sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==
|
|
||||||
|
|
||||||
accepts@~1.3.8:
|
accepts@~1.3.8:
|
||||||
version "1.3.8"
|
version "1.3.8"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/accepts/-/accepts-1.3.8.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/accepts/-/accepts-1.3.8.tgz"
|
||||||
@ -934,7 +844,7 @@ braces@^3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
fill-range "^7.0.1"
|
fill-range "^7.0.1"
|
||||||
|
|
||||||
browserslist@^4.21.3, "browserslist@>= 4.21.0":
|
browserslist@^4.21.3:
|
||||||
version "4.21.5"
|
version "4.21.5"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/browserslist/-/browserslist-4.21.5.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/browserslist/-/browserslist-4.21.5.tgz"
|
||||||
integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==
|
integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==
|
||||||
@ -1054,16 +964,16 @@ color-convert@^2.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
color-name "~1.1.4"
|
color-name "~1.1.4"
|
||||||
|
|
||||||
color-name@~1.1.4:
|
|
||||||
version "1.1.4"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/color-name/-/color-name-1.1.4.tgz"
|
|
||||||
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
|
||||||
|
|
||||||
color-name@1.1.3:
|
color-name@1.1.3:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/color-name/-/color-name-1.1.3.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/color-name/-/color-name-1.1.3.tgz"
|
||||||
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
|
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
|
||||||
|
|
||||||
|
color-name@~1.1.4:
|
||||||
|
version "1.1.4"
|
||||||
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/color-name/-/color-name-1.1.4.tgz"
|
||||||
|
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||||
|
|
||||||
concat-map@0.0.1:
|
concat-map@0.0.1:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/concat-map/-/concat-map-0.0.1.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/concat-map/-/concat-map-0.0.1.tgz"
|
||||||
@ -1081,12 +991,7 @@ content-type@~1.0.4:
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/content-type/-/content-type-1.0.5.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/content-type/-/content-type-1.0.5.tgz"
|
||||||
integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
|
integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
|
||||||
|
|
||||||
convert-source-map@^1.6.0:
|
convert-source-map@^1.6.0, convert-source-map@^1.7.0:
|
||||||
version "1.9.0"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/convert-source-map/-/convert-source-map-1.9.0.tgz"
|
|
||||||
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
|
|
||||||
|
|
||||||
convert-source-map@^1.7.0:
|
|
||||||
version "1.9.0"
|
version "1.9.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/convert-source-map/-/convert-source-map-1.9.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/convert-source-map/-/convert-source-map-1.9.0.tgz"
|
||||||
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
|
integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==
|
||||||
@ -1128,26 +1033,6 @@ cross-spawn@^7.0.3:
|
|||||||
shebang-command "^2.0.0"
|
shebang-command "^2.0.0"
|
||||||
which "^2.0.1"
|
which "^2.0.1"
|
||||||
|
|
||||||
csstype@^2.6.8:
|
|
||||||
version "2.6.21"
|
|
||||||
resolved "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz"
|
|
||||||
integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==
|
|
||||||
|
|
||||||
cwd@^0.10.0:
|
|
||||||
version "0.10.0"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/cwd/-/cwd-0.10.0.tgz"
|
|
||||||
integrity sha512-YGZxdTTL9lmLkCUTpg4j0zQ7IhRB5ZmqNBbGCl3Tg6MP/d5/6sY7L5mmTjzbc6JKgVZYiqTQTNhPFsbXNGlRaA==
|
|
||||||
dependencies:
|
|
||||||
find-pkg "^0.1.2"
|
|
||||||
fs-exists-sync "^0.1.0"
|
|
||||||
|
|
||||||
debug@^4.1.0, debug@^4.1.1, debug@^4.2.0:
|
|
||||||
version "4.3.4"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/debug/-/debug-4.3.4.tgz"
|
|
||||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
|
||||||
dependencies:
|
|
||||||
ms "2.1.2"
|
|
||||||
|
|
||||||
debug@2.6.9:
|
debug@2.6.9:
|
||||||
version "2.6.9"
|
version "2.6.9"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/debug/-/debug-2.6.9.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/debug/-/debug-2.6.9.tgz"
|
||||||
@ -1155,6 +1040,13 @@ debug@2.6.9:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
|
debug@^4.1.0, debug@^4.1.1:
|
||||||
|
version "4.3.4"
|
||||||
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/debug/-/debug-4.3.4.tgz"
|
||||||
|
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||||
|
dependencies:
|
||||||
|
ms "2.1.2"
|
||||||
|
|
||||||
dedent@^0.7.0:
|
dedent@^0.7.0:
|
||||||
version "0.7.0"
|
version "0.7.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/dedent/-/dedent-0.7.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/dedent/-/dedent-0.7.0.tgz"
|
||||||
@ -1282,11 +1174,6 @@ esprima@^4.0.0:
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/esprima/-/esprima-4.0.1.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/esprima/-/esprima-4.0.1.tgz"
|
||||||
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
||||||
|
|
||||||
estree-walker@^2.0.2:
|
|
||||||
version "2.0.2"
|
|
||||||
resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz"
|
|
||||||
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
|
|
||||||
|
|
||||||
etag@~1.8.1:
|
etag@~1.8.1:
|
||||||
version "1.8.1"
|
version "1.8.1"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/etag/-/etag-1.8.1.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/etag/-/etag-1.8.1.tgz"
|
||||||
@ -1312,13 +1199,6 @@ exit@^0.1.2:
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/exit/-/exit-0.1.2.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/exit/-/exit-0.1.2.tgz"
|
||||||
integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
|
integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
|
||||||
|
|
||||||
expand-tilde@^1.2.2:
|
|
||||||
version "1.2.2"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/expand-tilde/-/expand-tilde-1.2.2.tgz"
|
|
||||||
integrity sha512-rtmc+cjLZqnu9dSYosX9EWmSJhTwpACgJQTfj4hgg2JjOD/6SIQalZrt4a3aQeh++oNxkazcaxrhPUj6+g5G/Q==
|
|
||||||
dependencies:
|
|
||||||
os-homedir "^1.0.1"
|
|
||||||
|
|
||||||
expect@^29.5.0:
|
expect@^29.5.0:
|
||||||
version "29.5.0"
|
version "29.5.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/expect/-/expect-29.5.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/expect/-/expect-29.5.0.tgz"
|
||||||
@ -1404,21 +1284,6 @@ finalhandler@1.2.0:
|
|||||||
statuses "2.0.1"
|
statuses "2.0.1"
|
||||||
unpipe "~1.0.0"
|
unpipe "~1.0.0"
|
||||||
|
|
||||||
find-file-up@^0.1.2:
|
|
||||||
version "0.1.3"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/find-file-up/-/find-file-up-0.1.3.tgz"
|
|
||||||
integrity sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A==
|
|
||||||
dependencies:
|
|
||||||
fs-exists-sync "^0.1.0"
|
|
||||||
resolve-dir "^0.1.0"
|
|
||||||
|
|
||||||
find-pkg@^0.1.2:
|
|
||||||
version "0.1.2"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/find-pkg/-/find-pkg-0.1.2.tgz"
|
|
||||||
integrity sha512-0rnQWcFwZr7eO0513HahrWafsc3CTFioEB7DRiEYCUM/70QXSY8f3mCST17HXLcPvEhzH/Ty/Bxd72ZZsr/yvw==
|
|
||||||
dependencies:
|
|
||||||
find-file-up "^0.1.2"
|
|
||||||
|
|
||||||
find-up@^4.0.0, find-up@^4.1.0:
|
find-up@^4.0.0, find-up@^4.1.0:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/find-up/-/find-up-4.1.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/find-up/-/find-up-4.1.0.tgz"
|
||||||
@ -1437,16 +1302,16 @@ fresh@0.5.2:
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/fresh/-/fresh-0.5.2.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/fresh/-/fresh-0.5.2.tgz"
|
||||||
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
|
integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
|
||||||
|
|
||||||
fs-exists-sync@^0.1.0:
|
|
||||||
version "0.1.0"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz"
|
|
||||||
integrity sha512-cR/vflFyPZtrN6b38ZyWxpWdhlXrzZEBawlpBQMq7033xVY7/kg0GDMBK5jg8lDYQckdJ5x/YC88lM3C7VMsLg==
|
|
||||||
|
|
||||||
fs.realpath@^1.0.0:
|
fs.realpath@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/fs.realpath/-/fs.realpath-1.0.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/fs.realpath/-/fs.realpath-1.0.0.tgz"
|
||||||
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
|
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
|
||||||
|
|
||||||
|
fsevents@^2.3.2:
|
||||||
|
version "2.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||||
|
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||||
|
|
||||||
function-bind@^1.1.1:
|
function-bind@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/function-bind/-/function-bind-1.1.1.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/function-bind/-/function-bind-1.1.1.tgz"
|
||||||
@ -1493,24 +1358,6 @@ glob@^7.1.3, glob@^7.1.4:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
path-is-absolute "^1.0.0"
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
global-modules@^0.2.3:
|
|
||||||
version "0.2.3"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/global-modules/-/global-modules-0.2.3.tgz"
|
|
||||||
integrity sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==
|
|
||||||
dependencies:
|
|
||||||
global-prefix "^0.1.4"
|
|
||||||
is-windows "^0.2.0"
|
|
||||||
|
|
||||||
global-prefix@^0.1.4:
|
|
||||||
version "0.1.5"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/global-prefix/-/global-prefix-0.1.5.tgz"
|
|
||||||
integrity sha512-gOPiyxcD9dJGCEArAhF4Hd0BAqvAe/JzERP7tYumE4yIkmIedPUVXcJFWbV3/p/ovIIvKjkrTk+f1UVkq7vvbw==
|
|
||||||
dependencies:
|
|
||||||
homedir-polyfill "^1.0.0"
|
|
||||||
ini "^1.3.4"
|
|
||||||
is-windows "^0.2.0"
|
|
||||||
which "^1.2.12"
|
|
||||||
|
|
||||||
globals@^11.1.0:
|
globals@^11.1.0:
|
||||||
version "11.12.0"
|
version "11.12.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/globals/-/globals-11.12.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/globals/-/globals-11.12.0.tgz"
|
||||||
@ -1548,13 +1395,6 @@ he@1.2.0:
|
|||||||
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
|
resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz"
|
||||||
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
||||||
|
|
||||||
homedir-polyfill@^1.0.0:
|
|
||||||
version "1.0.3"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz"
|
|
||||||
integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
|
|
||||||
dependencies:
|
|
||||||
parse-passwd "^1.0.0"
|
|
||||||
|
|
||||||
html-escaper@^2.0.0:
|
html-escaper@^2.0.0:
|
||||||
version "2.0.2"
|
version "2.0.2"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/html-escaper/-/html-escaper-2.0.2.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/html-escaper/-/html-escaper-2.0.2.tgz"
|
||||||
@ -1597,7 +1437,7 @@ human-signals@^2.1.0:
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/human-signals/-/human-signals-2.1.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/human-signals/-/human-signals-2.1.0.tgz"
|
||||||
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
|
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
|
||||||
|
|
||||||
iconv-lite@~0.4.13, iconv-lite@0.4.24:
|
iconv-lite@0.4.24, iconv-lite@~0.4.13:
|
||||||
version "0.4.24"
|
version "0.4.24"
|
||||||
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
|
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
|
||||||
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
||||||
@ -1652,16 +1492,11 @@ inflight@^1.0.4:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
inherits@~2.0.1, inherits@~2.0.3, inherits@2, inherits@2.0.4:
|
inherits@2, inherits@2.0.4, inherits@~2.0.1, inherits@~2.0.3:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
|
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
|
||||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
|
|
||||||
ini@^1.3.4:
|
|
||||||
version "1.3.8"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/ini/-/ini-1.3.8.tgz"
|
|
||||||
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
|
|
||||||
|
|
||||||
ipaddr.js@1.9.1:
|
ipaddr.js@1.9.1:
|
||||||
version "1.9.1"
|
version "1.9.1"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
|
||||||
@ -1704,21 +1539,16 @@ is-stream@^2.0.0:
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/is-stream/-/is-stream-2.0.1.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/is-stream/-/is-stream-2.0.1.tgz"
|
||||||
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
|
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
|
||||||
|
|
||||||
is-windows@^0.2.0:
|
isarray@0.0.1:
|
||||||
version "0.2.0"
|
version "0.0.1"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/is-windows/-/is-windows-0.2.0.tgz"
|
resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
|
||||||
integrity sha512-n67eJYmXbniZB7RF4I/FTjK1s6RPOCTxhYrVYLRaCt3lF0mpWZPKr3T2LSZAqyjQsxR2qMmGYXXzK0YWwcPM1Q==
|
integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
|
||||||
|
|
||||||
isarray@~1.0.0:
|
isarray@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/isarray/-/isarray-1.0.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/isarray/-/isarray-1.0.0.tgz"
|
||||||
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
|
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
|
||||||
|
|
||||||
isarray@0.0.1:
|
|
||||||
version "0.0.1"
|
|
||||||
resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
|
|
||||||
integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
|
|
||||||
|
|
||||||
isexe@^2.0.0:
|
isexe@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/isexe/-/isexe-2.0.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/isexe/-/isexe-2.0.0.tgz"
|
||||||
@ -1952,14 +1782,6 @@ jest-mock@^29.5.0:
|
|||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
jest-util "^29.5.0"
|
jest-util "^29.5.0"
|
||||||
|
|
||||||
jest-mysql@^2.0.0:
|
|
||||||
version "2.0.0"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/jest-mysql/-/jest-mysql-2.0.0.tgz"
|
|
||||||
integrity sha512-j8vsJn4FFcif1QJPBwmDG5B36r9xExm8TVFP0qjOl+tzn50hsf9yiRBxYhNHZ7A691WYfS1/ZPQwRoJH0rY9qg==
|
|
||||||
dependencies:
|
|
||||||
cwd "^0.10.0"
|
|
||||||
debug "^4.2.0"
|
|
||||||
|
|
||||||
jest-pnp-resolver@^1.2.2:
|
jest-pnp-resolver@^1.2.2:
|
||||||
version "1.2.3"
|
version "1.2.3"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz"
|
||||||
@ -1978,7 +1800,7 @@ jest-resolve-dependencies@^29.5.0:
|
|||||||
jest-regex-util "^29.4.3"
|
jest-regex-util "^29.4.3"
|
||||||
jest-snapshot "^29.5.0"
|
jest-snapshot "^29.5.0"
|
||||||
|
|
||||||
jest-resolve@*, jest-resolve@^29.5.0:
|
jest-resolve@^29.5.0:
|
||||||
version "29.5.0"
|
version "29.5.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/jest-resolve/-/jest-resolve-29.5.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/jest-resolve/-/jest-resolve-29.5.0.tgz"
|
||||||
integrity sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==
|
integrity sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==
|
||||||
@ -2125,7 +1947,7 @@ jest-worker@^29.5.0:
|
|||||||
merge-stream "^2.0.0"
|
merge-stream "^2.0.0"
|
||||||
supports-color "^8.0.0"
|
supports-color "^8.0.0"
|
||||||
|
|
||||||
jest@^29.5.0, jest@29.x.x:
|
jest@^29.5.0:
|
||||||
version "29.5.0"
|
version "29.5.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/jest/-/jest-29.5.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/jest/-/jest-29.5.0.tgz"
|
||||||
integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==
|
integrity sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==
|
||||||
@ -2236,13 +2058,6 @@ lru-cache@^6.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
yallist "^4.0.0"
|
yallist "^4.0.0"
|
||||||
|
|
||||||
magic-string@^0.25.7:
|
|
||||||
version "0.25.9"
|
|
||||||
resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz"
|
|
||||||
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
|
|
||||||
dependencies:
|
|
||||||
sourcemap-codec "^1.4.8"
|
|
||||||
|
|
||||||
mailparser@^3.6.3:
|
mailparser@^3.6.3:
|
||||||
version "3.6.3"
|
version "3.6.3"
|
||||||
resolved "https://registry.npmjs.org/mailparser/-/mailparser-3.6.3.tgz"
|
resolved "https://registry.npmjs.org/mailparser/-/mailparser-3.6.3.tgz"
|
||||||
@ -2358,7 +2173,7 @@ ms@2.1.3:
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/ms/-/ms-2.1.3.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/ms/-/ms-2.1.3.tgz"
|
||||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||||
|
|
||||||
mysql@^2.18.1, mysql@2.x.x:
|
mysql@^2.18.1:
|
||||||
version "2.18.1"
|
version "2.18.1"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/mysql/-/mysql-2.18.1.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/mysql/-/mysql-2.18.1.tgz"
|
||||||
integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==
|
integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==
|
||||||
@ -2368,11 +2183,6 @@ mysql@^2.18.1, mysql@2.x.x:
|
|||||||
safe-buffer "5.1.2"
|
safe-buffer "5.1.2"
|
||||||
sqlstring "2.3.1"
|
sqlstring "2.3.1"
|
||||||
|
|
||||||
nanoid@^3.3.4:
|
|
||||||
version "3.3.4"
|
|
||||||
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz"
|
|
||||||
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
|
|
||||||
|
|
||||||
natural-compare@^1.4.0:
|
natural-compare@^1.4.0:
|
||||||
version "1.4.0"
|
version "1.4.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/natural-compare/-/natural-compare-1.4.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/natural-compare/-/natural-compare-1.4.0.tgz"
|
||||||
@ -2449,11 +2259,6 @@ onetime@^5.1.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mimic-fn "^2.1.0"
|
mimic-fn "^2.1.0"
|
||||||
|
|
||||||
os-homedir@^1.0.1:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/os-homedir/-/os-homedir-1.0.2.tgz"
|
|
||||||
integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==
|
|
||||||
|
|
||||||
p-limit@^2.2.0:
|
p-limit@^2.2.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/p-limit/-/p-limit-2.3.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/p-limit/-/p-limit-2.3.0.tgz"
|
||||||
@ -2490,11 +2295,6 @@ parse-json@^5.2.0:
|
|||||||
json-parse-even-better-errors "^2.3.0"
|
json-parse-even-better-errors "^2.3.0"
|
||||||
lines-and-columns "^1.1.6"
|
lines-and-columns "^1.1.6"
|
||||||
|
|
||||||
parse-passwd@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/parse-passwd/-/parse-passwd-1.0.0.tgz"
|
|
||||||
integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==
|
|
||||||
|
|
||||||
parseley@^0.11.0:
|
parseley@^0.11.0:
|
||||||
version "0.11.0"
|
version "0.11.0"
|
||||||
resolved "https://registry.npmjs.org/parseley/-/parseley-0.11.0.tgz"
|
resolved "https://registry.npmjs.org/parseley/-/parseley-0.11.0.tgz"
|
||||||
@ -2560,15 +2360,6 @@ pkg-dir@^4.2.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
find-up "^4.0.0"
|
find-up "^4.0.0"
|
||||||
|
|
||||||
postcss@^8.1.10:
|
|
||||||
version "8.4.21"
|
|
||||||
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz"
|
|
||||||
integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==
|
|
||||||
dependencies:
|
|
||||||
nanoid "^3.3.4"
|
|
||||||
picocolors "^1.0.0"
|
|
||||||
source-map-js "^1.0.2"
|
|
||||||
|
|
||||||
pretty-format@^29.5.0:
|
pretty-format@^29.5.0:
|
||||||
version "29.5.0"
|
version "29.5.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/pretty-format/-/pretty-format-29.5.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/pretty-format/-/pretty-format-29.5.0.tgz"
|
||||||
@ -2690,14 +2481,6 @@ resolve-cwd@^3.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
resolve-from "^5.0.0"
|
resolve-from "^5.0.0"
|
||||||
|
|
||||||
resolve-dir@^0.1.0:
|
|
||||||
version "0.1.1"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/resolve-dir/-/resolve-dir-0.1.1.tgz"
|
|
||||||
integrity sha512-QxMPqI6le2u0dCLyiGzgy92kjkkL6zO0XyvHzjdTNH3zM6e5Hz3BwG6+aEyNgiQ5Xz6PwTwgQEj3U50dByPKIA==
|
|
||||||
dependencies:
|
|
||||||
expand-tilde "^1.2.2"
|
|
||||||
global-modules "^0.2.3"
|
|
||||||
|
|
||||||
resolve-from@^5.0.0:
|
resolve-from@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/resolve-from/-/resolve-from-5.0.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/resolve-from/-/resolve-from-5.0.0.tgz"
|
||||||
@ -2717,7 +2500,7 @@ resolve@^1.20.0:
|
|||||||
path-parse "^1.0.7"
|
path-parse "^1.0.7"
|
||||||
supports-preserve-symlinks-flag "^1.0.0"
|
supports-preserve-symlinks-flag "^1.0.0"
|
||||||
|
|
||||||
safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2:
|
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||||
version "5.1.2"
|
version "5.1.2"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/safe-buffer/-/safe-buffer-5.1.2.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/safe-buffer/-/safe-buffer-5.1.2.tgz"
|
||||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||||
@ -2739,12 +2522,7 @@ selderee@^0.10.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
parseley "^0.11.0"
|
parseley "^0.11.0"
|
||||||
|
|
||||||
semver@^6.0.0:
|
semver@^6.0.0, semver@^6.3.0:
|
||||||
version "6.3.0"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/semver/-/semver-6.3.0.tgz"
|
|
||||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
|
||||||
|
|
||||||
semver@^6.3.0:
|
|
||||||
version "6.3.0"
|
version "6.3.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/semver/-/semver-6.3.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/semver/-/semver-6.3.0.tgz"
|
||||||
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||||
@ -2831,11 +2609,6 @@ slash@^3.0.0:
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/slash/-/slash-3.0.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/slash/-/slash-3.0.0.tgz"
|
||||||
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
|
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
|
||||||
|
|
||||||
source-map-js@^1.0.2:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
|
|
||||||
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
|
|
||||||
|
|
||||||
source-map-support@0.5.13:
|
source-map-support@0.5.13:
|
||||||
version "0.5.13"
|
version "0.5.13"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/source-map-support/-/source-map-support-0.5.13.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/source-map-support/-/source-map-support-0.5.13.tgz"
|
||||||
@ -2849,11 +2622,6 @@ source-map@^0.6.0, source-map@^0.6.1:
|
|||||||
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
|
resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
|
||||||
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||||
|
|
||||||
sourcemap-codec@^1.4.8:
|
|
||||||
version "1.4.8"
|
|
||||||
resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz"
|
|
||||||
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
|
|
||||||
|
|
||||||
sprintf-js@~1.0.2:
|
sprintf-js@~1.0.2:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/sprintf-js/-/sprintf-js-1.0.3.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/sprintf-js/-/sprintf-js-1.0.3.tgz"
|
||||||
@ -2876,18 +2644,6 @@ statuses@2.0.1:
|
|||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/statuses/-/statuses-2.0.1.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/statuses/-/statuses-2.0.1.tgz"
|
||||||
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
|
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
|
||||||
|
|
||||||
string_decoder@~0.10.x:
|
|
||||||
version "0.10.31"
|
|
||||||
resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
|
|
||||||
integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
|
|
||||||
|
|
||||||
string_decoder@~1.1.1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/string_decoder/-/string_decoder-1.1.1.tgz"
|
|
||||||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
|
|
||||||
dependencies:
|
|
||||||
safe-buffer "~5.1.0"
|
|
||||||
|
|
||||||
string-length@^4.0.1:
|
string-length@^4.0.1:
|
||||||
version "4.0.2"
|
version "4.0.2"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/string-length/-/string-length-4.0.2.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/string-length/-/string-length-4.0.2.tgz"
|
||||||
@ -2905,6 +2661,18 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
|||||||
is-fullwidth-code-point "^3.0.0"
|
is-fullwidth-code-point "^3.0.0"
|
||||||
strip-ansi "^6.0.1"
|
strip-ansi "^6.0.1"
|
||||||
|
|
||||||
|
string_decoder@~0.10.x:
|
||||||
|
version "0.10.31"
|
||||||
|
resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
|
||||||
|
integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
|
||||||
|
|
||||||
|
string_decoder@~1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/string_decoder/-/string_decoder-1.1.1.tgz"
|
||||||
|
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
|
||||||
|
dependencies:
|
||||||
|
safe-buffer "~5.1.0"
|
||||||
|
|
||||||
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||||
version "6.0.1"
|
version "6.0.1"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/strip-ansi/-/strip-ansi-6.0.1.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/strip-ansi/-/strip-ansi-6.0.1.tgz"
|
||||||
@ -3012,7 +2780,7 @@ uc.micro@^1.0.1:
|
|||||||
resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz"
|
resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz"
|
||||||
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
|
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
|
||||||
|
|
||||||
unpipe@~1.0.0, unpipe@1.0.0:
|
unpipe@1.0.0, unpipe@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/unpipe/-/unpipe-1.0.0.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/unpipe/-/unpipe-1.0.0.tgz"
|
||||||
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
||||||
@ -3080,17 +2848,6 @@ vue-router@^4.1.6:
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@vue/devtools-api" "^6.4.5"
|
"@vue/devtools-api" "^6.4.5"
|
||||||
|
|
||||||
vue@^3.2.0, vue@3.2.47:
|
|
||||||
version "3.2.47"
|
|
||||||
resolved "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz"
|
|
||||||
integrity sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==
|
|
||||||
dependencies:
|
|
||||||
"@vue/compiler-dom" "3.2.47"
|
|
||||||
"@vue/compiler-sfc" "3.2.47"
|
|
||||||
"@vue/runtime-dom" "3.2.47"
|
|
||||||
"@vue/server-renderer" "3.2.47"
|
|
||||||
"@vue/shared" "3.2.47"
|
|
||||||
|
|
||||||
walker@^1.0.8:
|
walker@^1.0.8:
|
||||||
version "1.0.8"
|
version "1.0.8"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/walker/-/walker-1.0.8.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/walker/-/walker-1.0.8.tgz"
|
||||||
@ -3098,13 +2855,6 @@ walker@^1.0.8:
|
|||||||
dependencies:
|
dependencies:
|
||||||
makeerror "1.0.12"
|
makeerror "1.0.12"
|
||||||
|
|
||||||
which@^1.2.12:
|
|
||||||
version "1.3.1"
|
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/which/-/which-1.3.1.tgz"
|
|
||||||
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
|
|
||||||
dependencies:
|
|
||||||
isexe "^2.0.0"
|
|
||||||
|
|
||||||
which@^2.0.1:
|
which@^2.0.1:
|
||||||
version "2.0.2"
|
version "2.0.2"
|
||||||
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/which/-/which-2.0.2.tgz"
|
resolved "https://repo.plus4u.net/operatorGate/repository/public-javascript/which/-/which-2.0.2.tgz"
|
||||||
|
@ -12,5 +12,8 @@ export default {
|
|||||||
},
|
},
|
||||||
getMessages(roomId) {
|
getMessages(roomId) {
|
||||||
return API().get(`/mail/${roomId}/messages`);
|
return API().get(`/mail/${roomId}/messages`);
|
||||||
}
|
},
|
||||||
|
getMembers(roomId) {
|
||||||
|
return API().get(`/mail/${roomId}/members`);
|
||||||
|
},
|
||||||
}
|
}
|
@ -12,9 +12,9 @@ export default class Room {
|
|||||||
|
|
||||||
if (!thread) {
|
if (!thread) {
|
||||||
this.threads = [
|
this.threads = [
|
||||||
new Room({id:12, user: this.user, roomName: "thread 1", mailbboxId:this.mailboxId}, true),
|
// new Room({id:12, user: this.user, roomName: "thread 1", mailbboxId:this.mailboxId}, true),
|
||||||
new Room({id:12, user: this.user, roomName: "thread 1", mailbboxId:this.mailboxId}, true),
|
// new Room({id:12, user: this.user, roomName: "thread 1", mailbboxId:this.mailboxId}, true),
|
||||||
new Room({id:12, user: this.user, roomName: "thread 1", mailbboxId:this.mailboxId}, true),
|
// new Room({id:12, user: this.user, roomName: "thread 1", mailbboxId:this.mailboxId}, true),
|
||||||
];
|
];
|
||||||
} else {
|
} else {
|
||||||
this.threads = [];
|
this.threads = [];
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
export default class Thread {
|
||||||
|
constructor (roomId, name) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -6,7 +6,7 @@ import Account from "./models/Account";
|
|||||||
const store = createStore({
|
const store = createStore({
|
||||||
state() {
|
state() {
|
||||||
return {
|
return {
|
||||||
rooms: [new Room({id:12, user: "user", roomName: "room name", mailbboxId:2})],
|
rooms: [new Room({ id: 12, user: "user", roomName: "room name", mailbboxId: 2 })],
|
||||||
messages: [],
|
messages: [],
|
||||||
accounts: [new Account(0, "ALL")],
|
accounts: [new Account(0, "ALL")],
|
||||||
activeAccount: 0,
|
activeAccount: 0,
|
||||||
@ -44,6 +44,12 @@ const store = createStore({
|
|||||||
});
|
});
|
||||||
room.messagesFetched = true;
|
room.messagesFetched = true;
|
||||||
},
|
},
|
||||||
|
addAddress(state, payload) {
|
||||||
|
// todo add if not exist
|
||||||
|
payload.addresses.forEach((address) => {
|
||||||
|
state.addresses.push(address);
|
||||||
|
});
|
||||||
|
},
|
||||||
},
|
},
|
||||||
getters: {
|
getters: {
|
||||||
rooms: (state) => () => {
|
rooms: (state) => () => {
|
||||||
@ -83,6 +89,7 @@ const store = createStore({
|
|||||||
},
|
},
|
||||||
fetchMessages: async (context, data) => {
|
fetchMessages: async (context, data) => {
|
||||||
if (!data.room || data.room?.fetched == false) {
|
if (!data.room || data.room?.fetched == false) {
|
||||||
|
store.dispatch("fetchAddress", { roomId: data.roomId });
|
||||||
API.getMessages(data.roomId)
|
API.getMessages(data.roomId)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
context.commit("addMessages", { messages: res.data, roomId: data.roomId });
|
context.commit("addMessages", { messages: res.data, roomId: data.roomId });
|
||||||
@ -92,6 +99,15 @@ const store = createStore({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
fetchRoomMembers: async (context, data) => {
|
||||||
|
API.getMembers(data.roomId)
|
||||||
|
.then((res) => {
|
||||||
|
context.commit("addAddress", { addresses: res.data, roomId: data.roomId });
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log(err);
|
||||||
|
});
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ onMounted(() => {
|
|||||||
<template>
|
<template>
|
||||||
<div class="message">
|
<div class="message">
|
||||||
<div id="context">
|
<div id="context">
|
||||||
<div class="left" id="profile">Carrefour@emailing .carrefor.fr "carrefour"</div>
|
<div class="left" id="profile">{{ props.data.fromA }}</div>
|
||||||
<div class="middle">{{ decodeEmojis(props.data.subject) }}</div>
|
<div class="middle">{{ decodeEmojis(props.data.subject) }}</div>
|
||||||
<div class="right" id="date">
|
<div class="right" id="date">
|
||||||
{{
|
{{
|
||||||
@ -78,6 +78,7 @@ iframe {
|
|||||||
max-height: 300px;
|
max-height: 300px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: 750px; /* template width being 600px to 640px up to 750px (experiment and test) */
|
max-width: 750px; /* template width being 600px to 640px up to 750px (experiment and test) */
|
||||||
|
background-color: rgb(234, 234, 234);;
|
||||||
}
|
}
|
||||||
|
|
||||||
.left,
|
.left,
|
||||||
|
@ -31,8 +31,8 @@ console.log(props.thread)
|
|||||||
}
|
}
|
||||||
|
|
||||||
.room::before {
|
.room::before {
|
||||||
content: "|";
|
border-right: 1px solid white;
|
||||||
margin: 0 10px;
|
margin: 0 10px;
|
||||||
color: white;
|
content: "";
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
Loading…
Reference in New Issue
Block a user