@managesome/knotr-toolkit 0.1.1 → 0.8.5
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/backend/config.d.ts +43 -0
- package/dist/backend/config.d.ts.map +1 -0
- package/dist/backend/config.js +82 -0
- package/dist/backend/config.js.map +1 -0
- package/dist/backend/database.d.ts +28 -0
- package/dist/backend/database.d.ts.map +1 -0
- package/dist/backend/database.js +112 -0
- package/dist/backend/database.js.map +1 -0
- package/dist/backend/firebase.d.ts +68 -0
- package/dist/backend/firebase.d.ts.map +1 -0
- package/dist/backend/firebase.js +233 -0
- package/dist/backend/firebase.js.map +1 -0
- package/dist/backend/index.d.ts +8 -0
- package/dist/backend/index.d.ts.map +1 -0
- package/dist/backend/index.js +19 -0
- package/dist/backend/index.js.map +1 -0
- package/dist/backend/logger.d.ts +23 -0
- package/dist/backend/logger.d.ts.map +1 -0
- package/dist/backend/logger.js +107 -0
- package/dist/backend/logger.js.map +1 -0
- package/dist/backend/redis.d.ts +59 -0
- package/dist/backend/redis.d.ts.map +1 -0
- package/dist/backend/redis.js +169 -0
- package/dist/backend/redis.js.map +1 -0
- package/dist/backend/socket.d.ts +81 -0
- package/dist/backend/socket.d.ts.map +1 -0
- package/dist/backend/socket.js +132 -0
- package/dist/backend/socket.js.map +1 -0
- package/dist/backend/worker-queue.d.ts +40 -0
- package/dist/backend/worker-queue.d.ts.map +1 -0
- package/dist/backend/worker-queue.js +140 -0
- package/dist/backend/worker-queue.js.map +1 -0
- package/dist/client/api-client.d.ts +101 -0
- package/dist/client/api-client.d.ts.map +1 -0
- package/dist/client/api-client.js +261 -0
- package/dist/client/api-client.js.map +1 -0
- package/dist/client/api-error.d.ts +100 -0
- package/dist/client/api-error.d.ts.map +1 -0
- package/dist/client/api-error.js +111 -0
- package/dist/client/api-error.js.map +1 -0
- package/dist/client/endpoints.d.ts +510 -0
- package/dist/client/endpoints.d.ts.map +1 -0
- package/dist/client/endpoints.js +306 -0
- package/dist/client/endpoints.js.map +1 -0
- package/dist/client/index.d.ts +4 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -0
- package/dist/constants/index.d.ts +2 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +2 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/socket.d.ts +165 -0
- package/dist/constants/socket.d.ts.map +1 -0
- package/dist/constants/socket.js +204 -0
- package/dist/constants/socket.js.map +1 -0
- package/dist/helpers/ApiError.d.ts +74 -0
- package/dist/helpers/ApiError.d.ts.map +1 -0
- package/dist/helpers/ApiError.js +105 -0
- package/dist/helpers/ApiError.js.map +1 -0
- package/dist/helpers/asyncHandler.d.ts +42 -0
- package/dist/helpers/asyncHandler.d.ts.map +1 -0
- package/dist/helpers/asyncHandler.js +47 -0
- package/dist/helpers/asyncHandler.js.map +1 -0
- package/dist/helpers/id-generator.d.ts +98 -0
- package/dist/helpers/id-generator.d.ts.map +1 -0
- package/dist/helpers/id-generator.js +128 -0
- package/dist/helpers/id-generator.js.map +1 -0
- package/dist/helpers/index.d.ts +5 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +8 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/response-timing.d.ts +91 -0
- package/dist/helpers/response-timing.d.ts.map +1 -0
- package/dist/helpers/response-timing.js +176 -0
- package/dist/helpers/response-timing.js.map +1 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -3
- package/dist/index.js.map +1 -1
- package/dist/schemas/account.schema.d.ts +4500 -0
- package/dist/schemas/account.schema.d.ts.map +1 -0
- package/dist/schemas/account.schema.js +123 -0
- package/dist/schemas/account.schema.js.map +1 -0
- package/dist/schemas/chat.schema.d.ts +4796 -0
- package/dist/schemas/chat.schema.d.ts.map +1 -0
- package/dist/schemas/chat.schema.js +107 -0
- package/dist/schemas/chat.schema.js.map +1 -0
- package/dist/schemas/collaboration-request.schema.d.ts +3960 -0
- package/dist/schemas/collaboration-request.schema.d.ts.map +1 -0
- package/dist/schemas/collaboration-request.schema.js +92 -0
- package/dist/schemas/collaboration-request.schema.js.map +1 -0
- package/dist/schemas/company-review.schema.d.ts +3465 -0
- package/dist/schemas/company-review.schema.d.ts.map +1 -0
- package/dist/schemas/company-review.schema.js +73 -0
- package/dist/schemas/company-review.schema.js.map +1 -0
- package/dist/schemas/company.schema.d.ts +6152 -0
- package/dist/schemas/company.schema.d.ts.map +1 -0
- package/dist/schemas/company.schema.js +192 -0
- package/dist/schemas/company.schema.js.map +1 -0
- package/dist/schemas/contract.schema.d.ts +5286 -0
- package/dist/schemas/contract.schema.d.ts.map +1 -0
- package/dist/schemas/contract.schema.js +115 -0
- package/dist/schemas/contract.schema.js.map +1 -0
- package/dist/schemas/dispute-evidence.schema.d.ts +3788 -0
- package/dist/schemas/dispute-evidence.schema.d.ts.map +1 -0
- package/dist/schemas/dispute-evidence.schema.js +71 -0
- package/dist/schemas/dispute-evidence.schema.js.map +1 -0
- package/dist/schemas/dispute.schema.d.ts +4970 -0
- package/dist/schemas/dispute.schema.d.ts.map +1 -0
- package/dist/schemas/dispute.schema.js +152 -0
- package/dist/schemas/dispute.schema.js.map +1 -0
- package/dist/schemas/donation.schema.d.ts +3594 -0
- package/dist/schemas/donation.schema.d.ts.map +1 -0
- package/dist/schemas/donation.schema.js +95 -0
- package/dist/schemas/donation.schema.js.map +1 -0
- package/dist/schemas/escrow.schema.d.ts +4322 -0
- package/dist/schemas/escrow.schema.d.ts.map +1 -0
- package/dist/schemas/escrow.schema.js +93 -0
- package/dist/schemas/escrow.schema.js.map +1 -0
- package/dist/schemas/flag.schema.d.ts +4375 -0
- package/dist/schemas/flag.schema.d.ts.map +1 -0
- package/dist/schemas/flag.schema.js +133 -0
- package/dist/schemas/flag.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +33 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +39 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/interest.schema.d.ts +3804 -0
- package/dist/schemas/interest.schema.d.ts.map +1 -0
- package/dist/schemas/interest.schema.js +107 -0
- package/dist/schemas/interest.schema.js.map +1 -0
- package/dist/schemas/match.schema.d.ts +4013 -0
- package/dist/schemas/match.schema.d.ts.map +1 -0
- package/dist/schemas/match.schema.js +118 -0
- package/dist/schemas/match.schema.js.map +1 -0
- package/dist/schemas/message.schema.d.ts +4213 -0
- package/dist/schemas/message.schema.d.ts.map +1 -0
- package/dist/schemas/message.schema.js +134 -0
- package/dist/schemas/message.schema.js.map +1 -0
- package/dist/schemas/milestone.schema.d.ts +4310 -0
- package/dist/schemas/milestone.schema.d.ts.map +1 -0
- package/dist/schemas/milestone.schema.js +99 -0
- package/dist/schemas/milestone.schema.js.map +1 -0
- package/dist/schemas/notification.schema.d.ts +4641 -0
- package/dist/schemas/notification.schema.d.ts.map +1 -0
- package/dist/schemas/notification.schema.js +139 -0
- package/dist/schemas/notification.schema.js.map +1 -0
- package/dist/schemas/profile.schema.d.ts +9589 -0
- package/dist/schemas/profile.schema.d.ts.map +1 -0
- package/dist/schemas/profile.schema.js +360 -0
- package/dist/schemas/profile.schema.js.map +1 -0
- package/dist/schemas/profit-share-agreement.schema.d.ts +3789 -0
- package/dist/schemas/profit-share-agreement.schema.d.ts.map +1 -0
- package/dist/schemas/profit-share-agreement.schema.js +76 -0
- package/dist/schemas/profit-share-agreement.schema.js.map +1 -0
- package/dist/schemas/profit-share.schema.d.ts +4051 -0
- package/dist/schemas/profit-share.schema.d.ts.map +1 -0
- package/dist/schemas/profit-share.schema.js +96 -0
- package/dist/schemas/profit-share.schema.js.map +1 -0
- package/dist/schemas/promo-code.schema.d.ts +3924 -0
- package/dist/schemas/promo-code.schema.d.ts.map +1 -0
- package/dist/schemas/promo-code.schema.js +112 -0
- package/dist/schemas/promo-code.schema.js.map +1 -0
- package/dist/schemas/proposal.schema.d.ts +5182 -0
- package/dist/schemas/proposal.schema.d.ts.map +1 -0
- package/dist/schemas/proposal.schema.js +114 -0
- package/dist/schemas/proposal.schema.js.map +1 -0
- package/dist/schemas/purchase.schema.d.ts +3724 -0
- package/dist/schemas/purchase.schema.d.ts.map +1 -0
- package/dist/schemas/purchase.schema.js +89 -0
- package/dist/schemas/purchase.schema.js.map +1 -0
- package/dist/schemas/requirement-post.schema.d.ts +6315 -0
- package/dist/schemas/requirement-post.schema.d.ts.map +1 -0
- package/dist/schemas/requirement-post.schema.js +153 -0
- package/dist/schemas/requirement-post.schema.js.map +1 -0
- package/dist/schemas/review.schema.d.ts +4512 -0
- package/dist/schemas/review.schema.d.ts.map +1 -0
- package/dist/schemas/review.schema.js +121 -0
- package/dist/schemas/review.schema.js.map +1 -0
- package/dist/schemas/service-listing.schema.d.ts +5152 -0
- package/dist/schemas/service-listing.schema.d.ts.map +1 -0
- package/dist/schemas/service-listing.schema.js +137 -0
- package/dist/schemas/service-listing.schema.js.map +1 -0
- package/dist/schemas/subscription.schema.d.ts +3985 -0
- package/dist/schemas/subscription.schema.d.ts.map +1 -0
- package/dist/schemas/subscription.schema.js +94 -0
- package/dist/schemas/subscription.schema.js.map +1 -0
- package/dist/schemas/tmc-application.schema.d.ts +4357 -0
- package/dist/schemas/tmc-application.schema.d.ts.map +1 -0
- package/dist/schemas/tmc-application.schema.js +96 -0
- package/dist/schemas/tmc-application.schema.js.map +1 -0
- package/dist/schemas/tmc-membership.schema.d.ts +3985 -0
- package/dist/schemas/tmc-membership.schema.d.ts.map +1 -0
- package/dist/schemas/tmc-membership.schema.js +84 -0
- package/dist/schemas/tmc-membership.schema.js.map +1 -0
- package/dist/schemas/trust-badge.schema.d.ts +3919 -0
- package/dist/schemas/trust-badge.schema.d.ts.map +1 -0
- package/dist/schemas/trust-badge.schema.js +83 -0
- package/dist/schemas/trust-badge.schema.js.map +1 -0
- package/dist/schemas/verification.schema.d.ts +4606 -0
- package/dist/schemas/verification.schema.d.ts.map +1 -0
- package/dist/schemas/verification.schema.js +114 -0
- package/dist/schemas/verification.schema.js.map +1 -0
- package/dist/schemas/webhook-event.schema.d.ts +3534 -0
- package/dist/schemas/webhook-event.schema.d.ts.map +1 -0
- package/dist/schemas/webhook-event.schema.js +83 -0
- package/dist/schemas/webhook-event.schema.js.map +1 -0
- package/dist/types/account.d.ts +36 -7
- package/dist/types/account.d.ts.map +1 -1
- package/dist/types/account.js +3 -1
- package/dist/types/account.js.map +1 -1
- package/dist/types/admin.d.ts +20 -10
- package/dist/types/admin.d.ts.map +1 -1
- package/dist/types/admin.js +3 -1
- package/dist/types/admin.js.map +1 -1
- package/dist/types/api.d.ts +184 -109
- package/dist/types/api.d.ts.map +1 -1
- package/dist/types/api.js +2 -1
- package/dist/types/api.js.map +1 -1
- package/dist/types/chat.d.ts +38 -20
- package/dist/types/chat.d.ts.map +1 -1
- package/dist/types/chat.js +3 -1
- package/dist/types/chat.js.map +1 -1
- package/dist/types/common.d.ts +39 -12
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js +4 -1
- package/dist/types/common.js.map +1 -1
- package/dist/types/company.d.ts +61 -44
- package/dist/types/company.d.ts.map +1 -1
- package/dist/types/company.js +3 -1
- package/dist/types/company.js.map +1 -1
- package/dist/types/flag.d.ts +19 -8
- package/dist/types/flag.d.ts.map +1 -1
- package/dist/types/flag.js +3 -1
- package/dist/types/flag.js.map +1 -1
- package/dist/types/forms.d.ts +334 -0
- package/dist/types/forms.d.ts.map +1 -0
- package/dist/types/forms.js +5 -0
- package/dist/types/forms.js.map +1 -0
- package/dist/types/index.d.ts +18 -13
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +18 -13
- package/dist/types/index.js.map +1 -1
- package/dist/types/marketplace.d.ts +174 -104
- package/dist/types/marketplace.d.ts.map +1 -1
- package/dist/types/marketplace.js +2 -0
- package/dist/types/marketplace.js.map +1 -1
- package/dist/types/match.d.ts +36 -19
- package/dist/types/match.d.ts.map +1 -1
- package/dist/types/match.js +3 -1
- package/dist/types/match.js.map +1 -1
- package/dist/types/navigation.d.ts +305 -0
- package/dist/types/navigation.d.ts.map +1 -0
- package/dist/types/navigation.js +18 -0
- package/dist/types/navigation.js.map +1 -0
- package/dist/types/notification.d.ts +92 -0
- package/dist/types/notification.d.ts.map +1 -0
- package/dist/types/notification.js +5 -0
- package/dist/types/notification.js.map +1 -0
- package/dist/types/payment.d.ts +70 -38
- package/dist/types/payment.d.ts.map +1 -1
- package/dist/types/payment.js +3 -1
- package/dist/types/payment.js.map +1 -1
- package/dist/types/policy.d.ts +174 -81
- package/dist/types/policy.d.ts.map +1 -1
- package/dist/types/policy.js.map +1 -1
- package/dist/types/profile.d.ts +48 -37
- package/dist/types/profile.d.ts.map +1 -1
- package/dist/types/profile.js +3 -1
- package/dist/types/profile.js.map +1 -1
- package/dist/types/socket.d.ts +431 -0
- package/dist/types/socket.d.ts.map +1 -0
- package/dist/types/socket.js +5 -0
- package/dist/types/socket.js.map +1 -0
- package/dist/types/verification.d.ts +18 -9
- package/dist/types/verification.d.ts.map +1 -1
- package/dist/types/verification.js +3 -1
- package/dist/types/verification.js.map +1 -1
- package/dist/types/worker.d.ts +452 -0
- package/dist/types/worker.d.ts.map +1 -0
- package/dist/types/worker.js +5 -0
- package/dist/types/worker.js.map +1 -0
- package/dist/validation/index.d.ts +5 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +9 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/messages.d.ts +124 -0
- package/dist/validation/messages.d.ts.map +1 -0
- package/dist/validation/messages.js +160 -0
- package/dist/validation/messages.js.map +1 -0
- package/dist/validation/schemas.d.ts +1127 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +376 -0
- package/dist/validation/schemas.js.map +1 -0
- package/dist/validation/validators.d.ts +229 -0
- package/dist/validation/validators.d.ts.map +1 -0
- package/dist/validation/validators.js +307 -0
- package/dist/validation/validators.js.map +1 -0
- package/package.json +37 -3
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
2
|
+
export interface LogEntry {
|
|
3
|
+
level: LogLevel;
|
|
4
|
+
message: string;
|
|
5
|
+
timestamp: string;
|
|
6
|
+
service?: string;
|
|
7
|
+
[key: string]: unknown;
|
|
8
|
+
}
|
|
9
|
+
export interface Logger {
|
|
10
|
+
debug(message: string, meta?: Record<string, unknown>): void;
|
|
11
|
+
info(message: string, meta?: Record<string, unknown>): void;
|
|
12
|
+
warn(message: string, meta?: Record<string, unknown>): void;
|
|
13
|
+
error(message: string, meta?: Record<string, unknown>): void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Structured logger for backend services
|
|
17
|
+
*/
|
|
18
|
+
export declare const logger: Logger;
|
|
19
|
+
/**
|
|
20
|
+
* Create a child logger with preset metadata
|
|
21
|
+
*/
|
|
22
|
+
export declare function createLogger(defaultMeta: Record<string, unknown>): Logger;
|
|
23
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/backend/logger.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9D;AA+ED;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,MAapB,CAAC;AAEF;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAezE"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// Logger Utility
|
|
3
|
+
// Backend-only structured logging
|
|
4
|
+
// ============================================
|
|
5
|
+
// Get log level from environment
|
|
6
|
+
function getLogLevel() {
|
|
7
|
+
const envLevel = process.env.LOG_LEVEL?.toLowerCase();
|
|
8
|
+
if (envLevel === 'debug' || envLevel === 'info' || envLevel === 'warn' || envLevel === 'error') {
|
|
9
|
+
return envLevel;
|
|
10
|
+
}
|
|
11
|
+
return process.env.NODE_ENV === 'production' ? 'info' : 'debug';
|
|
12
|
+
}
|
|
13
|
+
// Determine if we should use JSON format (production) or human-readable (development)
|
|
14
|
+
function useJsonFormat() {
|
|
15
|
+
return process.env.NODE_ENV === 'production' || process.env.LOG_FORMAT === 'json';
|
|
16
|
+
}
|
|
17
|
+
// Log level priority
|
|
18
|
+
const levelPriority = {
|
|
19
|
+
debug: 0,
|
|
20
|
+
info: 1,
|
|
21
|
+
warn: 2,
|
|
22
|
+
error: 3,
|
|
23
|
+
};
|
|
24
|
+
// Get service name from environment or default
|
|
25
|
+
function getServiceName() {
|
|
26
|
+
return process.env.SERVICE_NAME || process.env.npm_package_name || 'knotr-service';
|
|
27
|
+
}
|
|
28
|
+
// Format log entry for output
|
|
29
|
+
function formatLogEntry(level, message, meta) {
|
|
30
|
+
const entry = {
|
|
31
|
+
level,
|
|
32
|
+
message,
|
|
33
|
+
timestamp: new Date().toISOString(),
|
|
34
|
+
service: getServiceName(),
|
|
35
|
+
...meta,
|
|
36
|
+
};
|
|
37
|
+
if (useJsonFormat()) {
|
|
38
|
+
return JSON.stringify(entry);
|
|
39
|
+
}
|
|
40
|
+
// Human-readable format for development
|
|
41
|
+
const metaStr = meta && Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta)}` : '';
|
|
42
|
+
const levelUpper = level.toUpperCase().padEnd(5);
|
|
43
|
+
return `[${entry.timestamp}] ${levelUpper} ${message}${metaStr}`;
|
|
44
|
+
}
|
|
45
|
+
// Output log to console
|
|
46
|
+
function log(level, message, meta) {
|
|
47
|
+
const currentLevel = getLogLevel();
|
|
48
|
+
if (levelPriority[level] < levelPriority[currentLevel]) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const formattedEntry = formatLogEntry(level, message, meta);
|
|
52
|
+
// tslint:disable-next-line:no-console
|
|
53
|
+
switch (level) {
|
|
54
|
+
case 'error':
|
|
55
|
+
// tslint:disable-next-line:no-console
|
|
56
|
+
console.error(formattedEntry);
|
|
57
|
+
break;
|
|
58
|
+
case 'warn':
|
|
59
|
+
// tslint:disable-next-line:no-console
|
|
60
|
+
console.warn(formattedEntry);
|
|
61
|
+
break;
|
|
62
|
+
case 'debug':
|
|
63
|
+
// tslint:disable-next-line:no-console
|
|
64
|
+
console.debug(formattedEntry);
|
|
65
|
+
break;
|
|
66
|
+
default:
|
|
67
|
+
// tslint:disable-next-line:no-console
|
|
68
|
+
console.log(formattedEntry);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Structured logger for backend services
|
|
73
|
+
*/
|
|
74
|
+
export const logger = {
|
|
75
|
+
debug(message, meta) {
|
|
76
|
+
log('debug', message, meta);
|
|
77
|
+
},
|
|
78
|
+
info(message, meta) {
|
|
79
|
+
log('info', message, meta);
|
|
80
|
+
},
|
|
81
|
+
warn(message, meta) {
|
|
82
|
+
log('warn', message, meta);
|
|
83
|
+
},
|
|
84
|
+
error(message, meta) {
|
|
85
|
+
log('error', message, meta);
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Create a child logger with preset metadata
|
|
90
|
+
*/
|
|
91
|
+
export function createLogger(defaultMeta) {
|
|
92
|
+
return {
|
|
93
|
+
debug(message, meta) {
|
|
94
|
+
log('debug', message, { ...defaultMeta, ...meta });
|
|
95
|
+
},
|
|
96
|
+
info(message, meta) {
|
|
97
|
+
log('info', message, { ...defaultMeta, ...meta });
|
|
98
|
+
},
|
|
99
|
+
warn(message, meta) {
|
|
100
|
+
log('warn', message, { ...defaultMeta, ...meta });
|
|
101
|
+
},
|
|
102
|
+
error(message, meta) {
|
|
103
|
+
log('error', message, { ...defaultMeta, ...meta });
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/backend/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set the Redis client instances
|
|
3
|
+
*/
|
|
4
|
+
export declare function setRedisClients(options: {
|
|
5
|
+
client?: unknown;
|
|
6
|
+
pubClient?: unknown;
|
|
7
|
+
subClient?: unknown;
|
|
8
|
+
}): void;
|
|
9
|
+
/**
|
|
10
|
+
* Get the main Redis client
|
|
11
|
+
*/
|
|
12
|
+
export declare function getRedisClient<T = unknown>(): T;
|
|
13
|
+
/**
|
|
14
|
+
* Get the Redis pub client
|
|
15
|
+
*/
|
|
16
|
+
export declare function getRedisPubClient<T = unknown>(): T;
|
|
17
|
+
/**
|
|
18
|
+
* Get the Redis sub client
|
|
19
|
+
*/
|
|
20
|
+
export declare function getRedisSubClient<T = unknown>(): T;
|
|
21
|
+
/**
|
|
22
|
+
* Create Redis clients using ioredis
|
|
23
|
+
* Returns raw clients that can be used with setRedisClients
|
|
24
|
+
* @param RedisConstructor - The Redis constructor from ioredis
|
|
25
|
+
* @param redisUrl - The Redis connection URL
|
|
26
|
+
*/
|
|
27
|
+
export declare function createRedisClients(RedisConstructor: any, redisUrl?: string): Promise<{
|
|
28
|
+
client: unknown;
|
|
29
|
+
pubClient: unknown;
|
|
30
|
+
subClient: unknown;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Publish a message to a Redis channel
|
|
34
|
+
*/
|
|
35
|
+
export declare function redisPublish(channel: string, message: unknown): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Subscribe to a Redis channel
|
|
38
|
+
*/
|
|
39
|
+
export declare function redisSubscribe(channel: string, callback: (message: string, channel: string) => void): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Get a value from Redis
|
|
42
|
+
*/
|
|
43
|
+
export declare function redisGet(key: string): Promise<string | null>;
|
|
44
|
+
/**
|
|
45
|
+
* Set a value in Redis
|
|
46
|
+
*/
|
|
47
|
+
export declare function redisSet(key: string, value: string, options?: {
|
|
48
|
+
ex?: number;
|
|
49
|
+
px?: number;
|
|
50
|
+
}): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Delete keys from Redis
|
|
53
|
+
*/
|
|
54
|
+
export declare function redisDel(...keys: string[]): Promise<number>;
|
|
55
|
+
/**
|
|
56
|
+
* Close all Redis connections gracefully
|
|
57
|
+
*/
|
|
58
|
+
export declare function closeRedisConnections(): Promise<void>;
|
|
59
|
+
//# sourceMappingURL=redis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/backend/redis.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAI7G;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAK/C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAKlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAKlD;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAEtC,gBAAgB,EAAE,GAAG,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAgCtE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAInF;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GACnD,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGlE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAahH;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAGjE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgC3D"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// Redis Client Utilities
|
|
3
|
+
// Backend-only Redis connection and pub/sub
|
|
4
|
+
// ============================================
|
|
5
|
+
import { getConfig, isConfigInitialized } from './config.js';
|
|
6
|
+
import { logger } from './logger.js';
|
|
7
|
+
// Store Redis client instances
|
|
8
|
+
let redisClient = null;
|
|
9
|
+
let redisPubClient = null;
|
|
10
|
+
let redisSubClient = null;
|
|
11
|
+
/**
|
|
12
|
+
* Set the Redis client instances
|
|
13
|
+
*/
|
|
14
|
+
export function setRedisClients(options) {
|
|
15
|
+
if (options.client)
|
|
16
|
+
redisClient = options.client;
|
|
17
|
+
if (options.pubClient)
|
|
18
|
+
redisPubClient = options.pubClient;
|
|
19
|
+
if (options.subClient)
|
|
20
|
+
redisSubClient = options.subClient;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get the main Redis client
|
|
24
|
+
*/
|
|
25
|
+
export function getRedisClient() {
|
|
26
|
+
if (!redisClient) {
|
|
27
|
+
throw new Error('Redis client not initialized. Call setRedisClients() first.');
|
|
28
|
+
}
|
|
29
|
+
return redisClient;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the Redis pub client
|
|
33
|
+
*/
|
|
34
|
+
export function getRedisPubClient() {
|
|
35
|
+
if (!redisPubClient) {
|
|
36
|
+
throw new Error('Redis pub client not initialized. Call setRedisClients() first.');
|
|
37
|
+
}
|
|
38
|
+
return redisPubClient;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get the Redis sub client
|
|
42
|
+
*/
|
|
43
|
+
export function getRedisSubClient() {
|
|
44
|
+
if (!redisSubClient) {
|
|
45
|
+
throw new Error('Redis sub client not initialized. Call setRedisClients() first.');
|
|
46
|
+
}
|
|
47
|
+
return redisSubClient;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create Redis clients using ioredis
|
|
51
|
+
* Returns raw clients that can be used with setRedisClients
|
|
52
|
+
* @param RedisConstructor - The Redis constructor from ioredis
|
|
53
|
+
* @param redisUrl - The Redis connection URL
|
|
54
|
+
*/
|
|
55
|
+
export async function createRedisClients(
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
|
+
RedisConstructor, redisUrl) {
|
|
58
|
+
const url = redisUrl || (isConfigInitialized() ? getConfig().redisUrl : undefined);
|
|
59
|
+
if (!url) {
|
|
60
|
+
throw new Error('No Redis URL provided. Either pass a URL or set REDIS_URL in config.');
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const client = new RedisConstructor(url);
|
|
64
|
+
const pubClient = new RedisConstructor(url);
|
|
65
|
+
const subClient = new RedisConstructor(url);
|
|
66
|
+
// Set up error handlers
|
|
67
|
+
[client, pubClient, subClient].forEach((c, i) => {
|
|
68
|
+
const name = ['client', 'pubClient', 'subClient'][i];
|
|
69
|
+
c.on('error', (err) => {
|
|
70
|
+
logger.error(`Redis ${name} error`, { error: err.message });
|
|
71
|
+
});
|
|
72
|
+
c.on('connect', () => {
|
|
73
|
+
logger.debug(`Redis ${name} connected`);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
logger.info('Redis clients created');
|
|
77
|
+
return { client, pubClient, subClient };
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
logger.error('Failed to create Redis clients', {
|
|
81
|
+
error: error instanceof Error ? error.message : String(error),
|
|
82
|
+
});
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Publish a message to a Redis channel
|
|
88
|
+
*/
|
|
89
|
+
export async function redisPublish(channel, message) {
|
|
90
|
+
const pub = getRedisPubClient();
|
|
91
|
+
const payload = typeof message === 'string' ? message : JSON.stringify(message);
|
|
92
|
+
await pub.publish(channel, payload);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Subscribe to a Redis channel
|
|
96
|
+
*/
|
|
97
|
+
export async function redisSubscribe(channel, callback) {
|
|
98
|
+
const sub = getRedisSubClient();
|
|
99
|
+
await sub.subscribe(channel);
|
|
100
|
+
sub.on('message', (ch, msg) => {
|
|
101
|
+
if (ch === channel) {
|
|
102
|
+
callback(msg, ch);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get a value from Redis
|
|
108
|
+
*/
|
|
109
|
+
export async function redisGet(key) {
|
|
110
|
+
const client = getRedisClient();
|
|
111
|
+
return client.get(key);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Set a value in Redis
|
|
115
|
+
*/
|
|
116
|
+
export async function redisSet(key, value, options) {
|
|
117
|
+
const client = getRedisClient();
|
|
118
|
+
const args = [];
|
|
119
|
+
if (options?.ex) {
|
|
120
|
+
args.push('EX', options.ex);
|
|
121
|
+
}
|
|
122
|
+
else if (options?.px) {
|
|
123
|
+
args.push('PX', options.px);
|
|
124
|
+
}
|
|
125
|
+
await client.set(key, value, ...args);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Delete keys from Redis
|
|
129
|
+
*/
|
|
130
|
+
export async function redisDel(...keys) {
|
|
131
|
+
const client = getRedisClient();
|
|
132
|
+
return client.del(...keys);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Close all Redis connections gracefully
|
|
136
|
+
*/
|
|
137
|
+
export async function closeRedisConnections() {
|
|
138
|
+
const closeClient = async (client, name) => {
|
|
139
|
+
if (!client)
|
|
140
|
+
return;
|
|
141
|
+
try {
|
|
142
|
+
const c = client;
|
|
143
|
+
if (typeof c.quit === 'function') {
|
|
144
|
+
await c.quit();
|
|
145
|
+
logger.debug(`Redis ${name} closed via quit()`);
|
|
146
|
+
}
|
|
147
|
+
else if (typeof c.disconnect === 'function') {
|
|
148
|
+
c.disconnect();
|
|
149
|
+
logger.debug(`Redis ${name} closed via disconnect()`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
logger.warn(`Error closing Redis ${name}`, {
|
|
154
|
+
error: error instanceof Error ? error.message : String(error),
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
await Promise.all([
|
|
159
|
+
closeClient(redisClient, 'client'),
|
|
160
|
+
closeClient(redisPubClient, 'pubClient'),
|
|
161
|
+
closeClient(redisSubClient, 'subClient'),
|
|
162
|
+
]);
|
|
163
|
+
// Reset references
|
|
164
|
+
redisClient = null;
|
|
165
|
+
redisPubClient = null;
|
|
166
|
+
redisSubClient = null;
|
|
167
|
+
logger.info('All Redis connections closed');
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=redis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/backend/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set the Socket.IO server instance
|
|
3
|
+
*/
|
|
4
|
+
export declare function setSocketServer(io: unknown): void;
|
|
5
|
+
/**
|
|
6
|
+
* Get the Socket.IO server instance
|
|
7
|
+
*/
|
|
8
|
+
export declare function getSocketServer<T = unknown>(): T;
|
|
9
|
+
/**
|
|
10
|
+
* Check if Socket.IO server is available
|
|
11
|
+
*/
|
|
12
|
+
export declare function hasSocketServer(): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Socket event payload for cross-service communication
|
|
15
|
+
*/
|
|
16
|
+
interface SocketEventPayload {
|
|
17
|
+
room: string;
|
|
18
|
+
event: string;
|
|
19
|
+
data: unknown;
|
|
20
|
+
broadcast?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Emit an event to a specific user (by userId/accountId)
|
|
24
|
+
*/
|
|
25
|
+
export declare function ioEmitToUser(userId: string, event: string, data: unknown): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Emit an event to all members of an account
|
|
28
|
+
*/
|
|
29
|
+
export declare function ioEmitToAccount(accountId: string, event: string, data: unknown): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Emit an event to all participants in a chat
|
|
32
|
+
*/
|
|
33
|
+
export declare function ioEmitToChat(chatId: string, event: string, data: unknown): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Emit an event to all participants in a match
|
|
36
|
+
*/
|
|
37
|
+
export declare function ioEmitToMatch(matchId: string, event: string, data: unknown): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Chat message payload interface
|
|
40
|
+
*/
|
|
41
|
+
export interface ChatMessagePayload {
|
|
42
|
+
messageId: string;
|
|
43
|
+
senderId: string;
|
|
44
|
+
content: string;
|
|
45
|
+
contentType: string;
|
|
46
|
+
mediaUrl?: string;
|
|
47
|
+
createdAt: Date;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Emit a new chat message event
|
|
51
|
+
*/
|
|
52
|
+
export declare function emitChatMessage(chatId: string, message: ChatMessagePayload): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Emit a read receipt event
|
|
55
|
+
*/
|
|
56
|
+
export declare function emitReadReceipt(chatId: string, readerId: string, messageId: string): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Emit a typing indicator event
|
|
59
|
+
*/
|
|
60
|
+
export declare function emitTypingIndicator(chatId: string, userId: string, isTyping: boolean): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* New match payload interface
|
|
63
|
+
*/
|
|
64
|
+
export interface NewMatchPayload {
|
|
65
|
+
matchId: string;
|
|
66
|
+
matchedAccountId: string;
|
|
67
|
+
matchedProfileName?: string;
|
|
68
|
+
matchType: string;
|
|
69
|
+
matchedAt: Date;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Emit a new match event
|
|
73
|
+
*/
|
|
74
|
+
export declare function emitNewMatch(accountId: string, payload: NewMatchPayload): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Subscribe to socket events from Redis
|
|
77
|
+
* This is used by the listener-service to receive events from other services
|
|
78
|
+
*/
|
|
79
|
+
export declare function subscribeToSocketEvents(handler: (payload: SocketEventPayload) => void): Promise<void>;
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/backend/socket.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAKhD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAoBD;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9F;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpG;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhG;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhG;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxG;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1G;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAe3G"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// Socket.IO Emit Utilities
|
|
3
|
+
// Backend-only real-time event emission
|
|
4
|
+
// ============================================
|
|
5
|
+
import { SOCKET_EVENTS } from '../constants/socket.js';
|
|
6
|
+
import { logger } from './logger.js';
|
|
7
|
+
import { redisPublish } from './redis.js';
|
|
8
|
+
// Store Socket.IO server instance
|
|
9
|
+
let ioServer = null;
|
|
10
|
+
// Redis channel for cross-service socket events
|
|
11
|
+
const SOCKET_REDIS_CHANNEL = 'knotr:socket:events';
|
|
12
|
+
/**
|
|
13
|
+
* Set the Socket.IO server instance
|
|
14
|
+
*/
|
|
15
|
+
export function setSocketServer(io) {
|
|
16
|
+
ioServer = io;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the Socket.IO server instance
|
|
20
|
+
*/
|
|
21
|
+
export function getSocketServer() {
|
|
22
|
+
if (!ioServer) {
|
|
23
|
+
throw new Error('Socket.IO server not initialized. Call setSocketServer() first.');
|
|
24
|
+
}
|
|
25
|
+
return ioServer;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Check if Socket.IO server is available
|
|
29
|
+
*/
|
|
30
|
+
export function hasSocketServer() {
|
|
31
|
+
return ioServer !== null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Emit an event to a specific room
|
|
35
|
+
* If Socket.IO is not available, publishes via Redis for other services to handle
|
|
36
|
+
*/
|
|
37
|
+
async function emitToRoom(room, event, data) {
|
|
38
|
+
if (ioServer) {
|
|
39
|
+
// Direct emit if we have the Socket.IO server
|
|
40
|
+
const io = ioServer;
|
|
41
|
+
io.to(room).emit(event, data);
|
|
42
|
+
logger.debug('Socket event emitted', { room, event });
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Publish via Redis for other services (like listener-service) to handle
|
|
46
|
+
const payload = { room, event, data };
|
|
47
|
+
await redisPublish(SOCKET_REDIS_CHANNEL, payload);
|
|
48
|
+
logger.debug('Socket event published to Redis', { room, event });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Emit an event to a specific user (by userId/accountId)
|
|
53
|
+
*/
|
|
54
|
+
export async function ioEmitToUser(userId, event, data) {
|
|
55
|
+
const room = `user:${userId}`;
|
|
56
|
+
await emitToRoom(room, event, data);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Emit an event to all members of an account
|
|
60
|
+
*/
|
|
61
|
+
export async function ioEmitToAccount(accountId, event, data) {
|
|
62
|
+
const room = `account:${accountId}`;
|
|
63
|
+
await emitToRoom(room, event, data);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Emit an event to all participants in a chat
|
|
67
|
+
*/
|
|
68
|
+
export async function ioEmitToChat(chatId, event, data) {
|
|
69
|
+
const room = `chat:${chatId}`;
|
|
70
|
+
await emitToRoom(room, event, data);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Emit an event to all participants in a match
|
|
74
|
+
*/
|
|
75
|
+
export async function ioEmitToMatch(matchId, event, data) {
|
|
76
|
+
const room = `match:${matchId}`;
|
|
77
|
+
await emitToRoom(room, event, data);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Emit a new chat message event
|
|
81
|
+
*/
|
|
82
|
+
export async function emitChatMessage(chatId, message) {
|
|
83
|
+
await ioEmitToChat(chatId, SOCKET_EVENTS.MESSAGE_RECEIVED, message);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Emit a read receipt event
|
|
87
|
+
*/
|
|
88
|
+
export async function emitReadReceipt(chatId, readerId, messageId) {
|
|
89
|
+
await ioEmitToChat(chatId, SOCKET_EVENTS.MESSAGE_READ, {
|
|
90
|
+
chatId,
|
|
91
|
+
readerId,
|
|
92
|
+
messageId,
|
|
93
|
+
readAt: new Date(),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Emit a typing indicator event
|
|
98
|
+
*/
|
|
99
|
+
export async function emitTypingIndicator(chatId, userId, isTyping) {
|
|
100
|
+
const event = isTyping ? SOCKET_EVENTS.TYPING_START : SOCKET_EVENTS.TYPING_STOP;
|
|
101
|
+
await ioEmitToChat(chatId, event, {
|
|
102
|
+
chatId,
|
|
103
|
+
userId,
|
|
104
|
+
timestamp: new Date(),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Emit a new match event
|
|
109
|
+
*/
|
|
110
|
+
export async function emitNewMatch(accountId, payload) {
|
|
111
|
+
await ioEmitToAccount(accountId, SOCKET_EVENTS.MATCH_CREATED, payload);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Subscribe to socket events from Redis
|
|
115
|
+
* This is used by the listener-service to receive events from other services
|
|
116
|
+
*/
|
|
117
|
+
export async function subscribeToSocketEvents(handler) {
|
|
118
|
+
const { redisSubscribe } = await import('./redis.js');
|
|
119
|
+
await redisSubscribe(SOCKET_REDIS_CHANNEL, (message) => {
|
|
120
|
+
try {
|
|
121
|
+
const payload = JSON.parse(message);
|
|
122
|
+
handler(payload);
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
logger.error('Failed to parse socket event from Redis', {
|
|
126
|
+
error: error instanceof Error ? error.message : String(error),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
logger.info('Subscribed to socket events channel');
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/backend/socket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set the Cloud Tasks client instance
|
|
3
|
+
*/
|
|
4
|
+
export declare function setCloudTasksClient(client: unknown): void;
|
|
5
|
+
/**
|
|
6
|
+
* Worker request payload interface
|
|
7
|
+
*/
|
|
8
|
+
export interface WorkerRequestPayload {
|
|
9
|
+
type: string;
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Options for scheduling a worker request
|
|
14
|
+
*/
|
|
15
|
+
export interface WorkerRequestOptions {
|
|
16
|
+
/** Delay in seconds before the task should execute */
|
|
17
|
+
delaySeconds?: number;
|
|
18
|
+
/** Absolute Unix timestamp (seconds) when the task should execute */
|
|
19
|
+
scheduleTime?: number;
|
|
20
|
+
/** Queue name override */
|
|
21
|
+
queue?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Post a request to the workers service via Cloud Tasks
|
|
25
|
+
* Falls back to HTTP POST in development mode
|
|
26
|
+
*
|
|
27
|
+
* @param endpoint - The worker endpoint (e.g., "process-matching")
|
|
28
|
+
* @param payload - The request payload
|
|
29
|
+
* @param options - Optional scheduling options
|
|
30
|
+
*/
|
|
31
|
+
export declare function postWorkerRequest(endpoint: string, payload: WorkerRequestPayload, options?: WorkerRequestOptions): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Convenience function for scheduling a delayed worker request
|
|
34
|
+
*/
|
|
35
|
+
export declare function scheduleWorkerRequest(endpoint: string, payload: WorkerRequestPayload, delaySeconds: number): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Convenience function for scheduling a worker request at a specific time
|
|
38
|
+
*/
|
|
39
|
+
export declare function scheduleWorkerRequestAt(endpoint: string, payload: WorkerRequestPayload, scheduledTime: Date): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=worker-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-queue.d.ts","sourceRoot":"","sources":["../../src/backend/worker-queue.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAYf;AAiHD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,EAC7B,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,EAC7B,aAAa,EAAE,IAAI,GAClB,OAAO,CAAC,IAAI,CAAC,CAIf"}
|