
- Complete NestJS TypeScript implementation with WebSocket support - Direct messaging (DM) and group chat functionality - End-to-end encryption with AES encryption and key pairs - Media file support (images, videos, audio, documents) up to 100MB - Push notifications with Firebase Cloud Messaging integration - Mention alerts and real-time typing indicators - User authentication with JWT and Passport - SQLite database with TypeORM entities and relationships - Comprehensive API documentation with Swagger/OpenAPI - File upload handling with secure access control - Online/offline status tracking and presence management - Message editing, deletion, and reply functionality - Notification management with automatic cleanup - Health check endpoint for monitoring - CORS configuration for cross-origin requests - Environment-based configuration management - Structured for Flutter SDK integration Features implemented: ✅ Real-time messaging with Socket.IO ✅ User registration and authentication ✅ Direct messages and group chats ✅ Media file uploads and management ✅ End-to-end encryption ✅ Push notifications ✅ Mention alerts ✅ Typing indicators ✅ Message read receipts ✅ Online status tracking ✅ File access control ✅ Comprehensive API documentation Ready for Flutter SDK development and production deployment.
90 lines
3.7 KiB
JavaScript
90 lines
3.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.toBig = exports.shrSL = exports.shrSH = exports.rotrSL = exports.rotrSH = exports.rotrBL = exports.rotrBH = exports.rotr32L = exports.rotr32H = exports.rotlSL = exports.rotlSH = exports.rotlBL = exports.rotlBH = exports.add5L = exports.add5H = exports.add4L = exports.add4H = exports.add3L = exports.add3H = void 0;
|
|
exports.add = add;
|
|
exports.fromBig = fromBig;
|
|
exports.split = split;
|
|
/**
|
|
* Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.
|
|
* @todo re-check https://issues.chromium.org/issues/42212588
|
|
* @module
|
|
*/
|
|
const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);
|
|
const _32n = /* @__PURE__ */ BigInt(32);
|
|
function fromBig(n, le = false) {
|
|
if (le)
|
|
return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };
|
|
return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };
|
|
}
|
|
function split(lst, le = false) {
|
|
const len = lst.length;
|
|
let Ah = new Uint32Array(len);
|
|
let Al = new Uint32Array(len);
|
|
for (let i = 0; i < len; i++) {
|
|
const { h, l } = fromBig(lst[i], le);
|
|
[Ah[i], Al[i]] = [h, l];
|
|
}
|
|
return [Ah, Al];
|
|
}
|
|
const toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);
|
|
exports.toBig = toBig;
|
|
// for Shift in [0, 32)
|
|
const shrSH = (h, _l, s) => h >>> s;
|
|
exports.shrSH = shrSH;
|
|
const shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);
|
|
exports.shrSL = shrSL;
|
|
// Right rotate for Shift in [1, 32)
|
|
const rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));
|
|
exports.rotrSH = rotrSH;
|
|
const rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);
|
|
exports.rotrSL = rotrSL;
|
|
// Right rotate for Shift in (32, 64), NOTE: 32 is special case.
|
|
const rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));
|
|
exports.rotrBH = rotrBH;
|
|
const rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));
|
|
exports.rotrBL = rotrBL;
|
|
// Right rotate for shift===32 (just swaps l&h)
|
|
const rotr32H = (_h, l) => l;
|
|
exports.rotr32H = rotr32H;
|
|
const rotr32L = (h, _l) => h;
|
|
exports.rotr32L = rotr32L;
|
|
// Left rotate for Shift in [1, 32)
|
|
const rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));
|
|
exports.rotlSH = rotlSH;
|
|
const rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));
|
|
exports.rotlSL = rotlSL;
|
|
// Left rotate for Shift in (32, 64), NOTE: 32 is special case.
|
|
const rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));
|
|
exports.rotlBH = rotlBH;
|
|
const rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));
|
|
exports.rotlBL = rotlBL;
|
|
// JS uses 32-bit signed integers for bitwise operations which means we cannot
|
|
// simple take carry out of low bit sum by shift, we need to use division.
|
|
function add(Ah, Al, Bh, Bl) {
|
|
const l = (Al >>> 0) + (Bl >>> 0);
|
|
return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };
|
|
}
|
|
// Addition with more than 2 elements
|
|
const add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);
|
|
exports.add3L = add3L;
|
|
const add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;
|
|
exports.add3H = add3H;
|
|
const add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);
|
|
exports.add4L = add4L;
|
|
const add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;
|
|
exports.add4H = add4H;
|
|
const add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);
|
|
exports.add5L = add5L;
|
|
const add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;
|
|
exports.add5H = add5H;
|
|
// prettier-ignore
|
|
const u64 = {
|
|
fromBig, split, toBig,
|
|
shrSH, shrSL,
|
|
rotrSH, rotrSL, rotrBH, rotrBL,
|
|
rotr32H, rotr32L,
|
|
rotlSH, rotlSL, rotlBH, rotlBL,
|
|
add, add3L, add3H, add4L, add4H, add5H, add5L,
|
|
};
|
|
exports.default = u64;
|
|
//# sourceMappingURL=_u64.js.map
|