@managesome/knotr-toolkit 0.1.1 → 0.8.1
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 +30 -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 +173 -80
- 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,43 @@
|
|
|
1
|
+
export interface ServiceConfig {
|
|
2
|
+
serviceName: string;
|
|
3
|
+
nodeEnv: string;
|
|
4
|
+
port: number;
|
|
5
|
+
apiVersion: string;
|
|
6
|
+
mongoUri: string;
|
|
7
|
+
redisUrl?: string;
|
|
8
|
+
firebaseProjectId?: string;
|
|
9
|
+
firebaseDatabaseUrl?: string;
|
|
10
|
+
firebaseStorageBucket?: string;
|
|
11
|
+
jwtSecret: string;
|
|
12
|
+
jwtExpiresIn: string;
|
|
13
|
+
mainServiceUrl?: string;
|
|
14
|
+
workersServiceUrl?: string;
|
|
15
|
+
listenerServiceUrl?: string;
|
|
16
|
+
cloudTasksProject?: string;
|
|
17
|
+
cloudTasksLocation?: string;
|
|
18
|
+
cloudTasksQueue?: string;
|
|
19
|
+
corsOrigins?: string;
|
|
20
|
+
socketPingTimeout?: number;
|
|
21
|
+
socketPingInterval?: number;
|
|
22
|
+
[key: string]: string | number | boolean | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Initialize configuration from environment variables
|
|
26
|
+
* @param serviceName - The name of the service for logging
|
|
27
|
+
*/
|
|
28
|
+
export declare function initConfig(serviceName: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Get the current configuration
|
|
31
|
+
* @returns The service configuration
|
|
32
|
+
* @throws Error if config has not been initialized
|
|
33
|
+
*/
|
|
34
|
+
export declare function getConfig(): ServiceConfig;
|
|
35
|
+
/**
|
|
36
|
+
* Check if configuration has been initialized
|
|
37
|
+
*/
|
|
38
|
+
export declare function isConfigInitialized(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Get a specific config value with a fallback
|
|
41
|
+
*/
|
|
42
|
+
export declare function getConfigValue<T extends string | number | boolean>(key: keyof ServiceConfig, fallback: T): T;
|
|
43
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/backend/config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAE5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IAGnB,QAAQ,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAG/B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IAGrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD;AAKD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDnE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,IAAI,aAAa,CAKzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAM5G"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// Configuration Management
|
|
3
|
+
// Backend-only utility for environment configuration
|
|
4
|
+
// ============================================
|
|
5
|
+
// Global config instance
|
|
6
|
+
let config = null;
|
|
7
|
+
/**
|
|
8
|
+
* Initialize configuration from environment variables
|
|
9
|
+
* @param serviceName - The name of the service for logging
|
|
10
|
+
*/
|
|
11
|
+
export async function initConfig(serviceName) {
|
|
12
|
+
const nodeEnv = process.env.NODE_ENV || 'development';
|
|
13
|
+
config = {
|
|
14
|
+
// Service identification
|
|
15
|
+
serviceName,
|
|
16
|
+
nodeEnv,
|
|
17
|
+
port: parseInt(process.env.PORT || '3000', 10),
|
|
18
|
+
apiVersion: process.env.API_VERSION || 'v1',
|
|
19
|
+
// Database
|
|
20
|
+
mongoUri: process.env.MONGO_URI || process.env.DATABASE_URL || 'mongodb://localhost:27017/knotr',
|
|
21
|
+
// Redis
|
|
22
|
+
redisUrl: process.env.REDIS_URL,
|
|
23
|
+
// Firebase
|
|
24
|
+
firebaseProjectId: process.env.FIREBASE_PROJECT_ID || process.env.GOOGLE_CLOUD_PROJECT,
|
|
25
|
+
firebaseDatabaseUrl: process.env.FIREBASE_DATABASE_URL,
|
|
26
|
+
firebaseStorageBucket: process.env.FIREBASE_STORAGE_BUCKET,
|
|
27
|
+
// JWT
|
|
28
|
+
jwtSecret: process.env.JWT_SECRET || 'development-secret-change-in-production',
|
|
29
|
+
jwtExpiresIn: process.env.JWT_EXPIRES_IN || '7d',
|
|
30
|
+
// API URLs
|
|
31
|
+
mainServiceUrl: process.env.MAIN_SERVICE_URL,
|
|
32
|
+
workersServiceUrl: process.env.WORKERS_SERVICE_URL,
|
|
33
|
+
listenerServiceUrl: process.env.LISTENER_SERVICE_URL,
|
|
34
|
+
// Cloud Tasks
|
|
35
|
+
cloudTasksProject: process.env.GOOGLE_CLOUD_PROJECT,
|
|
36
|
+
cloudTasksLocation: process.env.CLOUD_TASKS_LOCATION || 'us-central1',
|
|
37
|
+
cloudTasksQueue: process.env.CLOUD_TASKS_QUEUE || 'default',
|
|
38
|
+
// CORS
|
|
39
|
+
corsOrigins: process.env.CORS_ORIGINS,
|
|
40
|
+
// Socket.IO
|
|
41
|
+
socketPingTimeout: parseInt(process.env.SOCKET_PING_TIMEOUT || '60000', 10),
|
|
42
|
+
socketPingInterval: parseInt(process.env.SOCKET_PING_INTERVAL || '25000', 10),
|
|
43
|
+
};
|
|
44
|
+
// Load additional env vars with KNOTR_ prefix
|
|
45
|
+
Object.keys(process.env).forEach((key) => {
|
|
46
|
+
if (key.startsWith('KNOTR_') && config) {
|
|
47
|
+
const configKey = key
|
|
48
|
+
.replace('KNOTR_', '')
|
|
49
|
+
.toLowerCase()
|
|
50
|
+
.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
51
|
+
config[configKey] = process.env[key];
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get the current configuration
|
|
57
|
+
* @returns The service configuration
|
|
58
|
+
* @throws Error if config has not been initialized
|
|
59
|
+
*/
|
|
60
|
+
export function getConfig() {
|
|
61
|
+
if (!config) {
|
|
62
|
+
throw new Error('Configuration not initialized. Call initConfig() first.');
|
|
63
|
+
}
|
|
64
|
+
return config;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check if configuration has been initialized
|
|
68
|
+
*/
|
|
69
|
+
export function isConfigInitialized() {
|
|
70
|
+
return config !== null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get a specific config value with a fallback
|
|
74
|
+
*/
|
|
75
|
+
export function getConfigValue(key, fallback) {
|
|
76
|
+
if (!config) {
|
|
77
|
+
return fallback;
|
|
78
|
+
}
|
|
79
|
+
const value = config[key];
|
|
80
|
+
return (value !== undefined ? value : fallback);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/backend/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set the mongoose instance to use for database connections
|
|
3
|
+
* This should be called before using any database functions
|
|
4
|
+
*/
|
|
5
|
+
export declare function setMongoose(mongoose: typeof import('mongoose')): void;
|
|
6
|
+
/**
|
|
7
|
+
* Get the mongoose instance
|
|
8
|
+
*/
|
|
9
|
+
export declare function getMongoose(): typeof import('mongoose');
|
|
10
|
+
/**
|
|
11
|
+
* Connect to MongoDB database
|
|
12
|
+
* @param uri - Optional custom connection URI (defaults to config)
|
|
13
|
+
* @param options - Optional mongoose connection options
|
|
14
|
+
*/
|
|
15
|
+
export declare function connectDatabase(uri?: string, options?: Record<string, unknown>): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Disconnect from MongoDB database
|
|
18
|
+
*/
|
|
19
|
+
export declare function disconnectDatabase(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Check if database is connected
|
|
22
|
+
*/
|
|
23
|
+
export declare function isDatabaseConnected(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Get the current database connection
|
|
26
|
+
*/
|
|
27
|
+
export declare function getDatabaseConnection(): import('mongoose').Connection | null;
|
|
28
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/backend/database.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,UAAU,CAAC,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,cAAc,UAAU,CAAC,CAKvD;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDpG;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAcxD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAK7C;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,UAAU,EAAE,UAAU,GAAG,IAAI,CAK5E"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// Database Connection Utility
|
|
3
|
+
// Backend-only MongoDB connection management
|
|
4
|
+
// ============================================
|
|
5
|
+
import { getConfig, isConfigInitialized } from './config.js';
|
|
6
|
+
import { logger } from './logger.js';
|
|
7
|
+
// Store mongoose instance to avoid importing it directly
|
|
8
|
+
// This allows the toolkit to work without mongoose as a hard dependency
|
|
9
|
+
let mongooseInstance = null;
|
|
10
|
+
/**
|
|
11
|
+
* Set the mongoose instance to use for database connections
|
|
12
|
+
* This should be called before using any database functions
|
|
13
|
+
*/
|
|
14
|
+
export function setMongoose(mongoose) {
|
|
15
|
+
mongooseInstance = mongoose;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get the mongoose instance
|
|
19
|
+
*/
|
|
20
|
+
export function getMongoose() {
|
|
21
|
+
if (!mongooseInstance) {
|
|
22
|
+
throw new Error('Mongoose not initialized. Call setMongoose() first.');
|
|
23
|
+
}
|
|
24
|
+
return mongooseInstance;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Connect to MongoDB database
|
|
28
|
+
* @param uri - Optional custom connection URI (defaults to config)
|
|
29
|
+
* @param options - Optional mongoose connection options
|
|
30
|
+
*/
|
|
31
|
+
export async function connectDatabase(uri, options) {
|
|
32
|
+
if (!mongooseInstance) {
|
|
33
|
+
throw new Error('Mongoose not initialized. Call setMongoose() first.');
|
|
34
|
+
}
|
|
35
|
+
const connectionUri = uri || (isConfigInitialized() ? getConfig().mongoUri : undefined);
|
|
36
|
+
if (!connectionUri) {
|
|
37
|
+
throw new Error('No MongoDB URI provided. Either pass a URI or initialize config first.');
|
|
38
|
+
}
|
|
39
|
+
const defaultOptions = {
|
|
40
|
+
autoIndex: process.env.NODE_ENV !== 'production',
|
|
41
|
+
autoCreate: process.env.NODE_ENV !== 'production',
|
|
42
|
+
maxPoolSize: parseInt(process.env.MONGO_POOL_SIZE || '10', 10),
|
|
43
|
+
minPoolSize: parseInt(process.env.MONGO_MIN_POOL_SIZE || '2', 10),
|
|
44
|
+
serverSelectionTimeoutMS: 5000,
|
|
45
|
+
socketTimeoutMS: 45000,
|
|
46
|
+
family: 4, // Use IPv4
|
|
47
|
+
};
|
|
48
|
+
const connectionOptions = { ...defaultOptions, ...options };
|
|
49
|
+
try {
|
|
50
|
+
// Set mongoose options
|
|
51
|
+
mongooseInstance.set('strictQuery', true);
|
|
52
|
+
// Connect
|
|
53
|
+
await mongooseInstance.connect(connectionUri, connectionOptions);
|
|
54
|
+
// Log connection events
|
|
55
|
+
mongooseInstance.connection.on('connected', () => {
|
|
56
|
+
logger.info('MongoDB connected');
|
|
57
|
+
});
|
|
58
|
+
mongooseInstance.connection.on('error', (err) => {
|
|
59
|
+
logger.error('MongoDB connection error', { error: String(err) });
|
|
60
|
+
});
|
|
61
|
+
mongooseInstance.connection.on('disconnected', () => {
|
|
62
|
+
logger.warn('MongoDB disconnected');
|
|
63
|
+
});
|
|
64
|
+
logger.info('MongoDB connection established', {
|
|
65
|
+
database: mongooseInstance.connection.name,
|
|
66
|
+
host: mongooseInstance.connection.host,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
logger.error('Failed to connect to MongoDB', {
|
|
71
|
+
error: error instanceof Error ? error.message : String(error),
|
|
72
|
+
});
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Disconnect from MongoDB database
|
|
78
|
+
*/
|
|
79
|
+
export async function disconnectDatabase() {
|
|
80
|
+
if (!mongooseInstance) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
await mongooseInstance.disconnect();
|
|
85
|
+
logger.info('MongoDB disconnected gracefully');
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
logger.error('Error disconnecting from MongoDB', {
|
|
89
|
+
error: error instanceof Error ? error.message : String(error),
|
|
90
|
+
});
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if database is connected
|
|
96
|
+
*/
|
|
97
|
+
export function isDatabaseConnected() {
|
|
98
|
+
if (!mongooseInstance) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return mongooseInstance.connection.readyState === 1;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get the current database connection
|
|
105
|
+
*/
|
|
106
|
+
export function getDatabaseConnection() {
|
|
107
|
+
if (!mongooseInstance) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
return mongooseInstance.connection;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/backend/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Set the firebase-admin instance to use
|
|
3
|
+
* This should be called before using any Firebase functions
|
|
4
|
+
*/
|
|
5
|
+
export declare function setFirebaseAdmin(admin: any): void;
|
|
6
|
+
/**
|
|
7
|
+
* Get the firebase-admin instance
|
|
8
|
+
*/
|
|
9
|
+
export declare function getFirebaseAdmin(): any;
|
|
10
|
+
/**
|
|
11
|
+
* Initialize Firebase Admin SDK
|
|
12
|
+
* Uses Application Default Credentials when running on Google Cloud
|
|
13
|
+
*/
|
|
14
|
+
export declare function initFirebase(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Check if Firebase is initialized
|
|
17
|
+
*/
|
|
18
|
+
export declare function isFirebaseInitialized(): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Get Firebase Auth instance
|
|
21
|
+
*/
|
|
22
|
+
export declare function getFirebaseAuth(): any;
|
|
23
|
+
/**
|
|
24
|
+
* Get Firebase Firestore instance
|
|
25
|
+
*/
|
|
26
|
+
export declare function getFirestore(): any;
|
|
27
|
+
/**
|
|
28
|
+
* Get Firebase Storage instance
|
|
29
|
+
*/
|
|
30
|
+
export declare function getFirebaseStorage(): any;
|
|
31
|
+
/**
|
|
32
|
+
* Get Firebase Messaging (FCM) instance
|
|
33
|
+
*/
|
|
34
|
+
export declare function getFirebaseMessaging(): any;
|
|
35
|
+
/**
|
|
36
|
+
* Get Firebase Realtime Database instance
|
|
37
|
+
*/
|
|
38
|
+
export declare function getRealtimeDatabase(): any;
|
|
39
|
+
export interface PushNotificationData {
|
|
40
|
+
title: string;
|
|
41
|
+
body: string;
|
|
42
|
+
imageUrl?: string;
|
|
43
|
+
data?: Record<string, string>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Send a push notification to a single device
|
|
47
|
+
*/
|
|
48
|
+
export declare function sendPushNotification(token: string, notification: PushNotificationData): Promise<string>;
|
|
49
|
+
/**
|
|
50
|
+
* Send push notifications to multiple devices
|
|
51
|
+
*/
|
|
52
|
+
export declare function sendMulticastNotification(tokens: string[], notification: PushNotificationData): Promise<{
|
|
53
|
+
successCount: number;
|
|
54
|
+
failureCount: number;
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* Emit a notification via Socket.IO (wrapper around ioEmitToUser)
|
|
58
|
+
*/
|
|
59
|
+
export declare function emitNotification(userId: string, notification: {
|
|
60
|
+
notificationId: string;
|
|
61
|
+
type: string;
|
|
62
|
+
title: string;
|
|
63
|
+
body: string;
|
|
64
|
+
data?: Record<string, unknown>;
|
|
65
|
+
priority?: 'low' | 'normal' | 'high';
|
|
66
|
+
createdAt?: Date;
|
|
67
|
+
}): Promise<void>;
|
|
68
|
+
//# sourceMappingURL=firebase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase.d.ts","sourceRoot":"","sources":["../../src/backend/firebase.ts"],"names":[],"mappings":"AAcA;;;GAGG;AAEH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,CAEjD;AAED;;GAEG;AAEH,wBAAgB,gBAAgB,IAAI,GAAG,CAKtC;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAmDlD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED;;GAEG;AAEH,wBAAgB,eAAe,IAAI,GAAG,CAKrC;AAED;;GAEG;AAEH,wBAAgB,YAAY,IAAI,GAAG,CAKlC;AAED;;GAEG;AAEH,wBAAgB,kBAAkB,IAAI,GAAG,CAKxC;AAED;;GAEG;AAEH,wBAAgB,oBAAoB,IAAI,GAAG,CAK1C;AAED;;GAEG;AAEH,wBAAgB,mBAAmB,IAAI,GAAG,CAKzC;AAMD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsC7G;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CA8CzD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// Firebase Admin SDK Initialization
|
|
3
|
+
// Backend-only Firebase setup
|
|
4
|
+
// ============================================
|
|
5
|
+
import { getConfig, isConfigInitialized } from './config.js';
|
|
6
|
+
import { logger } from './logger.js';
|
|
7
|
+
// Store firebase-admin instance to avoid importing it directly
|
|
8
|
+
// This allows the toolkit to work without firebase-admin as a hard dependency
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
|
+
let firebaseAdminInstance = null;
|
|
11
|
+
let initialized = false;
|
|
12
|
+
/**
|
|
13
|
+
* Set the firebase-admin instance to use
|
|
14
|
+
* This should be called before using any Firebase functions
|
|
15
|
+
*/
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
|
+
export function setFirebaseAdmin(admin) {
|
|
18
|
+
firebaseAdminInstance = admin;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get the firebase-admin instance
|
|
22
|
+
*/
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
export function getFirebaseAdmin() {
|
|
25
|
+
if (!firebaseAdminInstance) {
|
|
26
|
+
throw new Error('Firebase Admin not initialized. Call setFirebaseAdmin() first.');
|
|
27
|
+
}
|
|
28
|
+
return firebaseAdminInstance;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Initialize Firebase Admin SDK
|
|
32
|
+
* Uses Application Default Credentials when running on Google Cloud
|
|
33
|
+
*/
|
|
34
|
+
export async function initFirebase() {
|
|
35
|
+
if (!firebaseAdminInstance) {
|
|
36
|
+
throw new Error('Firebase Admin not initialized. Call setFirebaseAdmin() first.');
|
|
37
|
+
}
|
|
38
|
+
if (initialized) {
|
|
39
|
+
logger.debug('Firebase already initialized, skipping');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const config = isConfigInitialized() ? getConfig() : null;
|
|
44
|
+
// Check if already initialized
|
|
45
|
+
if (firebaseAdminInstance.apps.length > 0) {
|
|
46
|
+
initialized = true;
|
|
47
|
+
logger.debug('Firebase already has initialized apps');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// Initialize with project config
|
|
51
|
+
const initOptions = {};
|
|
52
|
+
if (config?.firebaseProjectId) {
|
|
53
|
+
initOptions.projectId = config.firebaseProjectId;
|
|
54
|
+
}
|
|
55
|
+
if (config?.firebaseStorageBucket) {
|
|
56
|
+
initOptions.storageBucket = config.firebaseStorageBucket;
|
|
57
|
+
}
|
|
58
|
+
if (config?.firebaseDatabaseUrl) {
|
|
59
|
+
initOptions.databaseURL = config.firebaseDatabaseUrl;
|
|
60
|
+
}
|
|
61
|
+
// Use application default credentials (works on Google Cloud)
|
|
62
|
+
// For local development, set GOOGLE_APPLICATION_CREDENTIALS env var
|
|
63
|
+
firebaseAdminInstance.initializeApp(initOptions);
|
|
64
|
+
initialized = true;
|
|
65
|
+
logger.info('Firebase Admin SDK initialized', {
|
|
66
|
+
projectId: config?.firebaseProjectId,
|
|
67
|
+
hasStorage: !!config?.firebaseStorageBucket,
|
|
68
|
+
hasDatabase: !!config?.firebaseDatabaseUrl,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
logger.error('Failed to initialize Firebase', {
|
|
73
|
+
error: error instanceof Error ? error.message : String(error),
|
|
74
|
+
});
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if Firebase is initialized
|
|
80
|
+
*/
|
|
81
|
+
export function isFirebaseInitialized() {
|
|
82
|
+
return initialized && firebaseAdminInstance !== null && firebaseAdminInstance.apps.length > 0;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get Firebase Auth instance
|
|
86
|
+
*/
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
88
|
+
export function getFirebaseAuth() {
|
|
89
|
+
if (!firebaseAdminInstance || !initialized) {
|
|
90
|
+
throw new Error('Firebase not initialized. Call initFirebase() first.');
|
|
91
|
+
}
|
|
92
|
+
return firebaseAdminInstance.auth();
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get Firebase Firestore instance
|
|
96
|
+
*/
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
98
|
+
export function getFirestore() {
|
|
99
|
+
if (!firebaseAdminInstance || !initialized) {
|
|
100
|
+
throw new Error('Firebase not initialized. Call initFirebase() first.');
|
|
101
|
+
}
|
|
102
|
+
return firebaseAdminInstance.firestore();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get Firebase Storage instance
|
|
106
|
+
*/
|
|
107
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
108
|
+
export function getFirebaseStorage() {
|
|
109
|
+
if (!firebaseAdminInstance || !initialized) {
|
|
110
|
+
throw new Error('Firebase not initialized. Call initFirebase() first.');
|
|
111
|
+
}
|
|
112
|
+
return firebaseAdminInstance.storage();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get Firebase Messaging (FCM) instance
|
|
116
|
+
*/
|
|
117
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
118
|
+
export function getFirebaseMessaging() {
|
|
119
|
+
if (!firebaseAdminInstance || !initialized) {
|
|
120
|
+
throw new Error('Firebase not initialized. Call initFirebase() first.');
|
|
121
|
+
}
|
|
122
|
+
return firebaseAdminInstance.messaging();
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get Firebase Realtime Database instance
|
|
126
|
+
*/
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
128
|
+
export function getRealtimeDatabase() {
|
|
129
|
+
if (!firebaseAdminInstance || !initialized) {
|
|
130
|
+
throw new Error('Firebase not initialized. Call initFirebase() first.');
|
|
131
|
+
}
|
|
132
|
+
return firebaseAdminInstance.database();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Send a push notification to a single device
|
|
136
|
+
*/
|
|
137
|
+
export async function sendPushNotification(token, notification) {
|
|
138
|
+
const messaging = getFirebaseMessaging();
|
|
139
|
+
const message = {
|
|
140
|
+
token,
|
|
141
|
+
notification: {
|
|
142
|
+
title: notification.title,
|
|
143
|
+
body: notification.body,
|
|
144
|
+
...(notification.imageUrl && { imageUrl: notification.imageUrl }),
|
|
145
|
+
},
|
|
146
|
+
...(notification.data && { data: notification.data }),
|
|
147
|
+
android: {
|
|
148
|
+
priority: 'high',
|
|
149
|
+
notification: {
|
|
150
|
+
sound: 'default',
|
|
151
|
+
clickAction: 'FLUTTER_NOTIFICATION_CLICK',
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
apns: {
|
|
155
|
+
payload: {
|
|
156
|
+
aps: {
|
|
157
|
+
sound: 'default',
|
|
158
|
+
badge: 1,
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
try {
|
|
164
|
+
const result = await messaging.send(message);
|
|
165
|
+
logger.debug('Push notification sent', { token: token.substring(0, 10) + '...', result });
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
logger.error('Failed to send push notification', {
|
|
170
|
+
error: error instanceof Error ? error.message : String(error),
|
|
171
|
+
});
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Send push notifications to multiple devices
|
|
177
|
+
*/
|
|
178
|
+
export async function sendMulticastNotification(tokens, notification) {
|
|
179
|
+
if (tokens.length === 0) {
|
|
180
|
+
return { successCount: 0, failureCount: 0 };
|
|
181
|
+
}
|
|
182
|
+
const messaging = getFirebaseMessaging();
|
|
183
|
+
const message = {
|
|
184
|
+
tokens,
|
|
185
|
+
notification: {
|
|
186
|
+
title: notification.title,
|
|
187
|
+
body: notification.body,
|
|
188
|
+
...(notification.imageUrl && { imageUrl: notification.imageUrl }),
|
|
189
|
+
},
|
|
190
|
+
...(notification.data && { data: notification.data }),
|
|
191
|
+
android: {
|
|
192
|
+
priority: 'high',
|
|
193
|
+
notification: {
|
|
194
|
+
sound: 'default',
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
apns: {
|
|
198
|
+
payload: {
|
|
199
|
+
aps: {
|
|
200
|
+
sound: 'default',
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
try {
|
|
206
|
+
const result = await messaging.sendEachForMulticast(message);
|
|
207
|
+
logger.debug('Multicast notification sent', {
|
|
208
|
+
successCount: result.successCount,
|
|
209
|
+
failureCount: result.failureCount,
|
|
210
|
+
});
|
|
211
|
+
return {
|
|
212
|
+
successCount: result.successCount,
|
|
213
|
+
failureCount: result.failureCount,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
logger.error('Failed to send multicast notification', {
|
|
218
|
+
error: error instanceof Error ? error.message : String(error),
|
|
219
|
+
});
|
|
220
|
+
throw error;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Emit a notification via Socket.IO (wrapper around ioEmitToUser)
|
|
225
|
+
*/
|
|
226
|
+
export async function emitNotification(userId, notification) {
|
|
227
|
+
const { ioEmitToUser } = await import('./socket.js');
|
|
228
|
+
await ioEmitToUser(userId, 'notification:new', {
|
|
229
|
+
...notification,
|
|
230
|
+
createdAt: notification.createdAt || new Date(),
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=firebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../src/backend/firebase.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { getConfig, getConfigValue, initConfig, isConfigInitialized, type ServiceConfig } from './config.js';
|
|
2
|
+
export { createLogger, logger, type LogEntry, type LogLevel, type Logger } from './logger.js';
|
|
3
|
+
export { connectDatabase, disconnectDatabase, getDatabaseConnection, getMongoose, isDatabaseConnected, setMongoose, } from './database.js';
|
|
4
|
+
export { emitNotification, getFirebaseAdmin, getFirebaseAuth, getFirebaseMessaging, getFirebaseStorage, getFirestore, getRealtimeDatabase, initFirebase, isFirebaseInitialized, sendMulticastNotification, sendPushNotification, setFirebaseAdmin, type PushNotificationData, } from './firebase.js';
|
|
5
|
+
export { postWorkerRequest, scheduleWorkerRequest, scheduleWorkerRequestAt, setCloudTasksClient, type WorkerRequestOptions, type WorkerRequestPayload, } from './worker-queue.js';
|
|
6
|
+
export { closeRedisConnections, createRedisClients, getRedisClient, getRedisPubClient, getRedisSubClient, redisDel, redisGet, redisPublish, redisSet, redisSubscribe, setRedisClients, } from './redis.js';
|
|
7
|
+
export { emitChatMessage, emitNewMatch, emitReadReceipt, emitTypingIndicator, getSocketServer, hasSocketServer, ioEmitToAccount, ioEmitToChat, ioEmitToMatch, ioEmitToUser, setSocketServer, subscribeToSocketEvents, type ChatMessagePayload, type NewMatchPayload, } from './socket.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backend/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAG7G,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAG9F,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,WAAW,GACZ,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// Backend Utilities - Barrel Export
|
|
3
|
+
// These utilities are for backend services only
|
|
4
|
+
// ============================================
|
|
5
|
+
// Configuration
|
|
6
|
+
export { getConfig, getConfigValue, initConfig, isConfigInitialized } from './config.js';
|
|
7
|
+
// Logging
|
|
8
|
+
export { createLogger, logger } from './logger.js';
|
|
9
|
+
// Database
|
|
10
|
+
export { connectDatabase, disconnectDatabase, getDatabaseConnection, getMongoose, isDatabaseConnected, setMongoose, } from './database.js';
|
|
11
|
+
// Firebase
|
|
12
|
+
export { emitNotification, getFirebaseAdmin, getFirebaseAuth, getFirebaseMessaging, getFirebaseStorage, getFirestore, getRealtimeDatabase, initFirebase, isFirebaseInitialized, sendMulticastNotification, sendPushNotification, setFirebaseAdmin, } from './firebase.js';
|
|
13
|
+
// Worker Queue / Cloud Tasks
|
|
14
|
+
export { postWorkerRequest, scheduleWorkerRequest, scheduleWorkerRequestAt, setCloudTasksClient, } from './worker-queue.js';
|
|
15
|
+
// Redis
|
|
16
|
+
export { closeRedisConnections, createRedisClients, getRedisClient, getRedisPubClient, getRedisSubClient, redisDel, redisGet, redisPublish, redisSet, redisSubscribe, setRedisClients, } from './redis.js';
|
|
17
|
+
// Socket.IO
|
|
18
|
+
export { emitChatMessage, emitNewMatch, emitReadReceipt, emitTypingIndicator, getSocketServer, hasSocketServer, ioEmitToAccount, ioEmitToChat, ioEmitToMatch, ioEmitToUser, setSocketServer, subscribeToSocketEvents, } from './socket.js';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backend/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,oCAAoC;AACpC,gDAAgD;AAChD,+CAA+C;AAE/C,gBAAgB;AAChB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AAE7G,UAAU;AACV,OAAO,EAAE,YAAY,EAAE,MAAM,EAA6C,MAAM,aAAa,CAAC;AAE9F,WAAW;AACX,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,mBAAmB,EACnB,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,WAAW;AACX,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,gBAAgB,GAEjB,MAAM,eAAe,CAAC;AAEvB,6BAA6B;AAC7B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GAGpB,MAAM,mBAAmB,CAAC;AAE3B,QAAQ;AACR,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,YAAY;AACZ,OAAO,EACL,eAAe,EACf,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,eAAe,EACf,uBAAuB,GAGxB,MAAM,aAAa,CAAC"}
|