@lyxa.ai/core 1.0.270 → 1.0.271
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/libraries/event/SocketEmitEvent.d.ts +9 -0
- package/dist/libraries/event/SocketEmitEvent.js +29 -0
- package/dist/libraries/event/SocketEmitEvent.js.map +1 -0
- package/dist/libraries/event/index.js +6 -8
- package/dist/libraries/event/index.js.map +1 -1
- package/dist/libraries/mongo/models/user.model.d.ts +1 -1
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/dist/utilities/instance.utils.d.ts +1 -0
- package/dist/utilities/instance.utils.js +12 -0
- package/dist/utilities/instance.utils.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BaseEvent } from './BaseEvent';
|
|
2
|
+
export type SocketEventParams<TData = any> = {
|
|
3
|
+
eventType: string;
|
|
4
|
+
socketIds: string[];
|
|
5
|
+
data: TData;
|
|
6
|
+
};
|
|
7
|
+
export declare class SocketEmitEvent<TPayload = any> extends BaseEvent<SocketEventParams<TPayload>> {
|
|
8
|
+
constructor(instanceId: string, parameters: SocketEventParams<TPayload>);
|
|
9
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SocketEmitEvent = void 0;
|
|
13
|
+
const BaseEvent_1 = require("./BaseEvent");
|
|
14
|
+
const metadata_1 = require("./decorators/metadata");
|
|
15
|
+
let SocketEmitEvent = class SocketEmitEvent extends BaseEvent_1.BaseEvent {
|
|
16
|
+
constructor(instanceId, parameters) {
|
|
17
|
+
super(`socket.emit.${instanceId}`, parameters);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
exports.SocketEmitEvent = SocketEmitEvent;
|
|
21
|
+
exports.SocketEmitEvent = SocketEmitEvent = __decorate([
|
|
22
|
+
(0, metadata_1.EventMetadata)('socket.emit', [
|
|
23
|
+
{ name: 'eventType', type: 'string' },
|
|
24
|
+
{ name: 'socketIds', type: 'array' },
|
|
25
|
+
{ name: 'data', type: 'object' },
|
|
26
|
+
]),
|
|
27
|
+
__metadata("design:paramtypes", [String, Object])
|
|
28
|
+
], SocketEmitEvent);
|
|
29
|
+
//# sourceMappingURL=SocketEmitEvent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SocketEmitEvent.js","sourceRoot":"/","sources":["libraries/event/SocketEmitEvent.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAwC;AACxC,oDAAsD;AAa/C,IAAM,eAAe,GAArB,MAAM,eAAgC,SAAQ,qBAAsC;IAC1F,YAAY,UAAkB,EAAE,UAAuC;QACtE,KAAK,CAAC,eAAe,UAAU,EAAE,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;CACD,CAAA;AAJY,0CAAe;0BAAf,eAAe;IAL3B,IAAA,wBAAa,EAAC,aAAa,EAAE;QAC7B,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;QACrC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE;QACpC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;KAChC,CAAC;;GACW,eAAe,CAI3B","sourcesContent":["import { BaseEvent } from './BaseEvent';\nimport { EventMetadata } from './decorators/metadata';\n\nexport type SocketEventParams<TData = any> = {\n\teventType: string;\n\tsocketIds: string[];\n\tdata: TData;\n};\n\n@EventMetadata('socket.emit', [\n\t{ name: 'eventType', type: 'string' },\n\t{ name: 'socketIds', type: 'array' },\n\t{ name: 'data', type: 'object' },\n])\nexport class SocketEmitEvent<TPayload = any> extends BaseEvent<SocketEventParams<TPayload>> {\n\tconstructor(instanceId: string, parameters: SocketEventParams<TPayload>) {\n\t\tsuper(`socket.emit.${instanceId}`, parameters);\n\t}\n}\n"]}
|
|
@@ -8,17 +8,15 @@ exports.publishEvent = publishEvent;
|
|
|
8
8
|
exports.subscribeToEvent = subscribeToEvent;
|
|
9
9
|
exports.closeEventBus = closeEventBus;
|
|
10
10
|
const amqplib_1 = __importDefault(require("amqplib"));
|
|
11
|
-
const
|
|
11
|
+
const instance_utils_1 = require("../../utilities/instance.utils");
|
|
12
12
|
let connection;
|
|
13
13
|
let channel;
|
|
14
|
-
let instanceId;
|
|
15
14
|
const EXCHANGE_NAME = 'lyxa.events';
|
|
16
15
|
async function initEventBus(rabbitUrl) {
|
|
17
16
|
connection = await amqplib_1.default.connect(rabbitUrl);
|
|
18
17
|
channel = await connection.createChannel();
|
|
19
|
-
instanceId = (0, crypto_1.randomUUID)();
|
|
20
18
|
await channel.assertExchange(EXCHANGE_NAME, 'topic', { durable: true });
|
|
21
|
-
console.log(`EventBus initialized with instance ID: ${
|
|
19
|
+
console.log(`EventBus initialized with instance ID: ${(0, instance_utils_1.getInstanceId)()}`);
|
|
22
20
|
}
|
|
23
21
|
async function publishEvent(event) {
|
|
24
22
|
if (!channel)
|
|
@@ -32,7 +30,7 @@ async function publishEvent(event) {
|
|
|
32
30
|
async function subscribeToEvent(eventId, onMessage) {
|
|
33
31
|
if (!channel)
|
|
34
32
|
throw new Error('Channel not initialized. Call initEventBus first.');
|
|
35
|
-
const queueName = `${eventId}-${
|
|
33
|
+
const queueName = `${eventId}-${(0, instance_utils_1.getInstanceId)()}`;
|
|
36
34
|
await channel.assertQueue(queueName, {
|
|
37
35
|
durable: false,
|
|
38
36
|
exclusive: true,
|
|
@@ -48,17 +46,17 @@ async function subscribeToEvent(eventId, onMessage) {
|
|
|
48
46
|
channel.ack(msg);
|
|
49
47
|
}
|
|
50
48
|
catch (err) {
|
|
51
|
-
console.error(`Error handling event [${eventId}] on instance [${
|
|
49
|
+
console.error(`Error handling event [${eventId}] on instance [${(0, instance_utils_1.getInstanceId)()}]`, err);
|
|
52
50
|
}
|
|
53
51
|
}
|
|
54
52
|
}, { noAck: false });
|
|
55
|
-
console.log(`Subscribed to event [${eventId}] on queue [${queueName}] for instance [${
|
|
53
|
+
console.log(`Subscribed to event [${eventId}] on queue [${queueName}] for instance [${(0, instance_utils_1.getInstanceId)()}]`);
|
|
56
54
|
}
|
|
57
55
|
async function closeEventBus() {
|
|
58
56
|
if (channel)
|
|
59
57
|
await channel.close();
|
|
60
58
|
if (connection)
|
|
61
59
|
await connection.close();
|
|
62
|
-
console.log(`EventBus closed for instance [${
|
|
60
|
+
console.log(`EventBus closed for instance [${(0, instance_utils_1.getInstanceId)()}]`);
|
|
63
61
|
}
|
|
64
62
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/event/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"/","sources":["libraries/event/index.ts"],"names":[],"mappings":";;;;;AAOA,oCAKC;AAED,oCASC;AAED,4CA6BC;AACD,sCAIC;AA3DD,sDAA2B;AAE3B,mEAA+D;AAC/D,IAAI,UAA6B,CAAC;AAClC,IAAI,OAAqB,CAAC;AAC1B,MAAM,aAAa,GAAG,aAAa,CAAC;AAE7B,KAAK,UAAU,YAAY,CAAC,SAAiB;IACnD,UAAU,GAAG,MAAM,iBAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3C,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,CAAC;IAC3C,MAAM,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,0CAA0C,IAAA,8BAAa,GAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAEM,KAAK,UAAU,YAAY,CACjC,KAA0B;IAE1B,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACnF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE;QAC5D,WAAW,EAAE,kBAAkB;KAC/B,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,CAAC,OAAO,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/E,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACrC,OAAe,EACf,SAA0C;IAE1C,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACnF,MAAM,SAAS,GAAG,GAAG,OAAO,IAAI,IAAA,8BAAa,GAAE,EAAE,CAAC;IAClD,MAAM,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE;QACpC,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,IAAI;KAChB,CAAC,CAAC;IACH,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IAC3D,MAAM,OAAO,CAAC,OAAO,CACpB,SAAS,EACT,KAAK,EAAC,GAAG,EAAC,EAAE;QACX,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC1C,IAAI,CAAC;gBACJ,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,yBAAyB,OAAO,kBAAkB,IAAA,8BAAa,GAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1F,CAAC;QACF,CAAC;IACF,CAAC,EACD,EAAE,KAAK,EAAE,KAAK,EAAE,CAChB,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,eAAe,SAAS,mBAAmB,IAAA,8BAAa,GAAE,GAAG,CAAC,CAAC;AAC3G,CAAC;AACM,KAAK,UAAU,aAAa;IAClC,IAAI,OAAO;QAAE,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACnC,IAAI,UAAU;QAAE,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAA,8BAAa,GAAE,GAAG,CAAC,CAAC;AAClE,CAAC","sourcesContent":["import amqp from 'amqplib';\nimport { BaseEvent } from './BaseEvent';\nimport { getInstanceId } from '../../utilities/instance.utils';\nlet connection: amqp.ChannelModel;\nlet channel: amqp.Channel;\nconst EXCHANGE_NAME = 'lyxa.events';\n\nexport async function initEventBus(rabbitUrl: string) {\n\tconnection = await amqp.connect(rabbitUrl);\n\tchannel = await connection.createChannel();\n\tawait channel.assertExchange(EXCHANGE_NAME, 'topic', { durable: true });\n\tconsole.log(`EventBus initialized with instance ID: ${getInstanceId()}`);\n}\n\nexport async function publishEvent<TPayload extends Record<string, unknown>>(\n\tevent: BaseEvent<TPayload>\n): Promise<void> {\n\tif (!channel) throw new Error('Channel not initialized. Call initEventBus first.');\n\tconst messageBuffer = Buffer.from(JSON.stringify(event.payload));\n\tchannel.publish(EXCHANGE_NAME, event.eventId, messageBuffer, {\n\t\tcontentType: 'application/json',\n\t});\n\tconsole.log(`Published event [${event.eventId}] with payload`, event.payload);\n}\n\nexport async function subscribeToEvent(\n\teventId: string,\n\tonMessage: (payload: any) => Promise<void>\n): Promise<void> {\n\tif (!channel) throw new Error('Channel not initialized. Call initEventBus first.');\n\tconst queueName = `${eventId}-${getInstanceId()}`;\n\tawait channel.assertQueue(queueName, {\n\t\tdurable: false,\n\t\texclusive: true,\n\t\tautoDelete: true,\n\t});\n\tawait channel.bindQueue(queueName, EXCHANGE_NAME, eventId);\n\tawait channel.consume(\n\t\tqueueName,\n\t\tasync msg => {\n\t\t\tif (msg !== null) {\n\t\t\t\tconst payloadString = msg.content.toString();\n\t\t\t\tconst payload = JSON.parse(payloadString);\n\t\t\t\ttry {\n\t\t\t\t\tawait onMessage(payload);\n\t\t\t\t\tchannel.ack(msg);\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.error(`Error handling event [${eventId}] on instance [${getInstanceId()}]`, err);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ noAck: false }\n\t);\n\tconsole.log(`Subscribed to event [${eventId}] on queue [${queueName}] for instance [${getInstanceId()}]`);\n}\nexport async function closeEventBus(): Promise<void> {\n\tif (channel) await channel.close();\n\tif (connection) await connection.close();\n\tconsole.log(`EventBus closed for instance [${getInstanceId()}]`);\n}\n"]}
|
|
@@ -31,7 +31,7 @@ export declare class User extends TimeStamps {
|
|
|
31
31
|
isPhoneVerified?: boolean;
|
|
32
32
|
onlineStatus?: OnlineStatus;
|
|
33
33
|
fcmTokens?: string[];
|
|
34
|
-
static updateWallet(this: ReturnModelType<typeof User>, userId: string, amount: number): Promise<(import("mongoose").Document<unknown, import("@typegoose/typegoose/lib/types").BeAnObject, User, import("@typegoose/typegoose/lib/types").BeAnyObject
|
|
34
|
+
static updateWallet(this: ReturnModelType<typeof User>, userId: string, amount: number): Promise<(import("mongoose").Document<unknown, import("@typegoose/typegoose/lib/types").BeAnObject, User, import("@typegoose/typegoose/lib/types").BeAnyObject> & Omit<User & {
|
|
35
35
|
_id: import("mongoose").Types.ObjectId;
|
|
36
36
|
} & {
|
|
37
37
|
__v: number;
|
package/dist/types/README.md
CHANGED
package/dist/types/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getInstanceId(): string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getInstanceId = getInstanceId;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
let instanceId;
|
|
6
|
+
function getInstanceId() {
|
|
7
|
+
if (!instanceId) {
|
|
8
|
+
instanceId = (0, crypto_1.randomUUID)();
|
|
9
|
+
}
|
|
10
|
+
return instanceId;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=instance.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance.utils.js","sourceRoot":"/","sources":["utilities/instance.utils.ts"],"names":[],"mappings":";;AAIA,sCAKC;AATD,mCAAoC;AAEpC,IAAI,UAA8B,CAAC;AAEnC,SAAgB,aAAa;IAC5B,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,UAAU,GAAG,IAAA,mBAAU,GAAE,CAAC;IAC3B,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC","sourcesContent":["import { randomUUID } from 'crypto';\n\nlet instanceId: string | undefined;\n\nexport function getInstanceId(): string {\n\tif (!instanceId) {\n\t\tinstanceId = randomUUID();\n\t}\n\treturn instanceId;\n}\n"]}
|