@misterhomer1992/miit-bot-payment 1.1.6 → 2.0.4
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/config/ConfigurationManager.d.ts +64 -0
- package/dist/config/ConfigurationManager.d.ts.map +1 -0
- package/dist/config/ConfigurationManager.js +144 -0
- package/dist/config/ConfigurationManager.js.map +1 -0
- package/dist/config/defaults.d.ts +18 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +26 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/environment.d.ts +38 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +91 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +18 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +53 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +3 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -1
- package/dist/modules/cache/InMemoryCache.d.ts +17 -0
- package/dist/modules/cache/InMemoryCache.d.ts.map +1 -0
- package/dist/modules/cache/InMemoryCache.js +77 -0
- package/dist/modules/cache/InMemoryCache.js.map +1 -0
- package/dist/modules/cache/index.d.ts +3 -0
- package/dist/modules/cache/index.d.ts.map +1 -0
- package/dist/modules/cache/index.js +19 -0
- package/dist/modules/cache/index.js.map +1 -0
- package/dist/modules/cache/types.d.ts +52 -0
- package/dist/modules/cache/types.d.ts.map +1 -0
- package/dist/modules/cache/types.js +3 -0
- package/dist/modules/cache/types.js.map +1 -0
- package/dist/modules/errors/index.d.ts +2 -0
- package/dist/modules/errors/index.d.ts.map +1 -0
- package/dist/modules/errors/index.js +19 -0
- package/dist/modules/errors/index.js.map +1 -0
- package/dist/modules/errors/types.d.ts +112 -0
- package/dist/modules/errors/types.d.ts.map +1 -0
- package/dist/modules/errors/types.js +174 -0
- package/dist/modules/errors/types.js.map +1 -0
- package/dist/modules/payments/api.d.ts +63 -1
- package/dist/modules/payments/api.d.ts.map +1 -1
- package/dist/modules/payments/api.js +103 -1
- package/dist/modules/payments/api.js.map +1 -1
- package/dist/modules/payments/const.d.ts.map +1 -1
- package/dist/modules/payments/const.js +1 -0
- package/dist/modules/payments/const.js.map +1 -1
- package/dist/modules/payments/index.d.ts +8 -0
- package/dist/modules/payments/index.d.ts.map +1 -1
- package/dist/modules/payments/index.js +8 -0
- package/dist/modules/payments/index.js.map +1 -1
- package/dist/modules/payments/service.d.ts +42 -2
- package/dist/modules/payments/service.d.ts.map +1 -1
- package/dist/modules/payments/service.js +132 -3
- package/dist/modules/payments/service.js.map +1 -1
- package/dist/modules/payments/subscription-check-webhook.handler.d.ts +85 -0
- package/dist/modules/payments/subscription-check-webhook.handler.d.ts.map +1 -0
- package/dist/modules/payments/subscription-check-webhook.handler.js +155 -0
- package/dist/modules/payments/subscription-check-webhook.handler.js.map +1 -0
- package/dist/modules/payments/subscription-check-webhook.service.d.ts +59 -0
- package/dist/modules/payments/subscription-check-webhook.service.d.ts.map +1 -0
- package/dist/modules/payments/subscription-check-webhook.service.js +330 -0
- package/dist/modules/payments/subscription-check-webhook.service.js.map +1 -0
- package/dist/modules/payments/subscription-check-webhook.types.d.ts +25 -0
- package/dist/modules/payments/subscription-check-webhook.types.d.ts.map +1 -0
- package/dist/modules/payments/subscription-check-webhook.types.js +3 -0
- package/dist/modules/payments/subscription-check-webhook.types.js.map +1 -0
- package/dist/modules/payments/types.d.ts +69 -2
- package/dist/modules/payments/types.d.ts.map +1 -1
- package/dist/modules/payments/utils.d.ts +151 -5
- package/dist/modules/payments/utils.d.ts.map +1 -1
- package/dist/modules/payments/utils.js +253 -9
- package/dist/modules/payments/utils.js.map +1 -1
- package/dist/modules/payments/wayforpay.service.d.ts +39 -0
- package/dist/modules/payments/wayforpay.service.d.ts.map +1 -0
- package/dist/modules/payments/wayforpay.service.js +217 -0
- package/dist/modules/payments/wayforpay.service.js.map +1 -0
- package/dist/modules/payments/wayforpay.types.d.ts +115 -0
- package/dist/modules/payments/wayforpay.types.d.ts.map +1 -0
- package/dist/modules/payments/wayforpay.types.js +3 -0
- package/dist/modules/payments/wayforpay.types.js.map +1 -0
- package/dist/modules/payments/webhook.handler.d.ts +98 -0
- package/dist/modules/payments/webhook.handler.d.ts.map +1 -0
- package/dist/modules/payments/webhook.handler.js +153 -0
- package/dist/modules/payments/webhook.handler.js.map +1 -0
- package/dist/modules/payments/webhook.service.d.ts +99 -0
- package/dist/modules/payments/webhook.service.d.ts.map +1 -0
- package/dist/modules/payments/webhook.service.js +672 -0
- package/dist/modules/payments/webhook.service.js.map +1 -0
- package/dist/modules/payments/webhook.types.d.ts +35 -0
- package/dist/modules/payments/webhook.types.d.ts.map +1 -0
- package/dist/modules/payments/webhook.types.js +3 -0
- package/dist/modules/payments/webhook.types.js.map +1 -0
- package/dist/modules/subscription/change.service.d.ts +80 -0
- package/dist/modules/subscription/change.service.d.ts.map +1 -0
- package/dist/modules/subscription/change.service.js +226 -0
- package/dist/modules/subscription/change.service.js.map +1 -0
- package/dist/modules/subscription/index.d.ts +2 -0
- package/dist/modules/subscription/index.d.ts.map +1 -1
- package/dist/modules/subscription/index.js +2 -0
- package/dist/modules/subscription/index.js.map +1 -1
- package/dist/modules/subscription/service.d.ts +8 -1
- package/dist/modules/subscription/service.d.ts.map +1 -1
- package/dist/modules/subscription/service.js +59 -2
- package/dist/modules/subscription/service.js.map +1 -1
- package/dist/modules/subscription/status-check.handler.d.ts +117 -0
- package/dist/modules/subscription/status-check.handler.d.ts.map +1 -0
- package/dist/modules/subscription/status-check.handler.js +164 -0
- package/dist/modules/subscription/status-check.handler.js.map +1 -0
- package/dist/modules/subscription/types.d.ts +37 -1
- package/dist/modules/subscription/types.d.ts.map +1 -1
- package/dist/modules/subscriptionPlan/const.d.ts +5 -0
- package/dist/modules/subscriptionPlan/const.d.ts.map +1 -0
- package/dist/modules/subscriptionPlan/const.js +106 -0
- package/dist/modules/subscriptionPlan/const.js.map +1 -0
- package/dist/modules/subscriptionPlan/index.d.ts +5 -0
- package/dist/modules/subscriptionPlan/index.d.ts.map +1 -0
- package/dist/modules/subscriptionPlan/index.js +21 -0
- package/dist/modules/subscriptionPlan/index.js.map +1 -0
- package/dist/modules/subscriptionPlan/repository.d.ts +22 -0
- package/dist/modules/subscriptionPlan/repository.d.ts.map +1 -0
- package/dist/modules/subscriptionPlan/repository.js +95 -0
- package/dist/modules/subscriptionPlan/repository.js.map +1 -0
- package/dist/modules/subscriptionPlan/service.d.ts +21 -0
- package/dist/modules/subscriptionPlan/service.d.ts.map +1 -0
- package/dist/modules/subscriptionPlan/service.js +128 -0
- package/dist/modules/subscriptionPlan/service.js.map +1 -0
- package/dist/modules/subscriptionPlan/types.d.ts +40 -0
- package/dist/modules/subscriptionPlan/types.d.ts.map +1 -0
- package/dist/modules/subscriptionPlan/types.js +3 -0
- package/dist/modules/subscriptionPlan/types.js.map +1 -0
- package/dist/modules/token/const.d.ts +7 -0
- package/dist/modules/token/const.d.ts.map +1 -0
- package/dist/modules/token/const.js +66 -0
- package/dist/modules/token/const.js.map +1 -0
- package/dist/modules/token/index.d.ts +4 -0
- package/dist/modules/token/index.d.ts.map +1 -0
- package/dist/modules/token/index.js +20 -0
- package/dist/modules/token/index.js.map +1 -0
- package/dist/modules/token/service.d.ts +46 -0
- package/dist/modules/token/service.d.ts.map +1 -0
- package/dist/modules/token/service.js +249 -0
- package/dist/modules/token/service.js.map +1 -0
- package/dist/modules/token/types.d.ts +109 -0
- package/dist/modules/token/types.d.ts.map +1 -0
- package/dist/modules/token/types.js +3 -0
- package/dist/modules/token/types.js.map +1 -0
- package/dist/modules/tokenPack/const.d.ts +4 -0
- package/dist/modules/tokenPack/const.d.ts.map +1 -0
- package/dist/modules/tokenPack/const.js +10 -0
- package/dist/modules/tokenPack/const.js.map +1 -0
- package/dist/modules/tokenPack/index.d.ts +5 -0
- package/dist/modules/tokenPack/index.d.ts.map +1 -0
- package/dist/modules/tokenPack/index.js +21 -0
- package/dist/modules/tokenPack/index.js.map +1 -0
- package/dist/modules/tokenPack/repository.d.ts +32 -0
- package/dist/modules/tokenPack/repository.d.ts.map +1 -0
- package/dist/modules/tokenPack/repository.js +103 -0
- package/dist/modules/tokenPack/repository.js.map +1 -0
- package/dist/modules/tokenPack/service.d.ts +28 -0
- package/dist/modules/tokenPack/service.d.ts.map +1 -0
- package/dist/modules/tokenPack/service.js +106 -0
- package/dist/modules/tokenPack/service.js.map +1 -0
- package/dist/modules/tokenPack/types.d.ts +124 -0
- package/dist/modules/tokenPack/types.d.ts.map +1 -0
- package/dist/modules/tokenPack/types.js +3 -0
- package/dist/modules/tokenPack/types.js.map +1 -0
- package/package.json +9 -5
- package/src/config/ConfigurationManager.ts +159 -0
- package/src/config/defaults.ts +27 -0
- package/src/config/environment.ts +94 -0
- package/src/config/index.ts +22 -0
- package/src/config/types.ts +56 -0
- package/src/index.ts +29 -0
- package/src/modules/cache/InMemoryCache.ts +98 -0
- package/src/modules/cache/index.ts +2 -0
- package/src/modules/cache/types.ts +60 -0
- package/src/modules/cancellableAPI/utils.ts +60 -0
- package/src/modules/errors/index.ts +16 -0
- package/src/modules/errors/types.ts +201 -0
- package/src/modules/invoice/const.ts +7 -0
- package/src/modules/invoice/index.ts +4 -0
- package/src/modules/invoice/repository.ts +52 -0
- package/src/modules/invoice/service.ts +44 -0
- package/src/modules/invoice/types.ts +47 -0
- package/src/modules/logger/types.ts +8 -0
- package/src/modules/network/utils.ts +24 -0
- package/src/modules/payments/api.ts +289 -0
- package/src/modules/payments/const.ts +11 -0
- package/src/modules/payments/index.ts +14 -0
- package/src/modules/payments/repository.ts +125 -0
- package/src/modules/payments/service.test.ts +400 -0
- package/src/modules/payments/service.ts +365 -0
- package/src/modules/payments/subscription-check-webhook.handler.integration.test.ts +935 -0
- package/src/modules/payments/subscription-check-webhook.handler.ts +211 -0
- package/src/modules/payments/subscription-check-webhook.service.ts +398 -0
- package/src/modules/payments/subscription-check-webhook.types.ts +29 -0
- package/src/modules/payments/types.ts +193 -0
- package/src/modules/payments/utils.ts +428 -0
- package/src/modules/payments/wayforpay.service.test.ts +375 -0
- package/src/modules/payments/wayforpay.service.ts +284 -0
- package/src/modules/payments/wayforpay.types.ts +138 -0
- package/src/modules/payments/webhook.handler.integration.test.ts +975 -0
- package/src/modules/payments/webhook.handler.ts +219 -0
- package/src/modules/payments/webhook.service.ts +812 -0
- package/src/modules/payments/webhook.types.ts +38 -0
- package/src/modules/subscription/change.service.ts +317 -0
- package/src/modules/subscription/const.ts +9 -0
- package/src/modules/subscription/index.ts +5 -0
- package/src/modules/subscription/repository.ts +277 -0
- package/src/modules/subscription/service.test.ts +665 -0
- package/src/modules/subscription/service.ts +328 -0
- package/src/modules/subscription/status-check.handler.ts +254 -0
- package/src/modules/subscription/types.ts +267 -0
- package/src/modules/subscription/utils.ts +5 -0
- package/src/modules/subscriptionPlan/const.ts +106 -0
- package/src/modules/subscriptionPlan/index.ts +4 -0
- package/src/modules/subscriptionPlan/repository.ts +129 -0
- package/src/modules/subscriptionPlan/service.test.ts +401 -0
- package/src/modules/subscriptionPlan/service.ts +148 -0
- package/src/modules/subscriptionPlan/types.ts +67 -0
- package/src/modules/token/const.ts +64 -0
- package/src/modules/token/index.ts +3 -0
- package/src/modules/token/service.test.ts +499 -0
- package/src/modules/token/service.ts +297 -0
- package/src/modules/token/types.ts +124 -0
- package/src/modules/tokenPack/const.ts +9 -0
- package/src/modules/tokenPack/index.ts +4 -0
- package/src/modules/tokenPack/repository.ts +144 -0
- package/src/modules/tokenPack/service.ts +119 -0
- package/src/modules/tokenPack/types.ts +131 -0
- package/src/modules/user/index.ts +3 -0
- package/src/modules/user/types.ts +143 -0
- package/src/modules/user/userRepository.ts +64 -0
- package/src/modules/user/userService.ts +68 -0
- package/src/types/extend-express.d.ts +16 -0
- package/src/types/function.ts +5 -0
- package/src/types/utilities.ts +22 -0
- package/src/utils.ts +53 -0
- package/tsconfig.json +29 -0
- package/dist/modules/subscription/subscriptionPlan.d.ts +0 -4
- package/dist/modules/subscription/subscriptionPlan.d.ts.map +0 -1
- package/dist/modules/subscription/subscriptionPlan.js +0 -67
- package/dist/modules/subscription/subscriptionPlan.js.map +0 -1
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Logger } from '../logger/types';
|
|
2
|
+
import { ISubscriptionService, SubscriptionEntity } from './types';
|
|
3
|
+
import { ITokenService, TokenBalance } from '../token/types';
|
|
4
|
+
/**
|
|
5
|
+
* Request object interface for status check handling.
|
|
6
|
+
* Compatible with Express.js and similar frameworks.
|
|
7
|
+
*/
|
|
8
|
+
interface StatusCheckRequest {
|
|
9
|
+
body: unknown;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Response object interface for status check handling.
|
|
13
|
+
* Compatible with Express.js and similar frameworks.
|
|
14
|
+
*/
|
|
15
|
+
interface StatusCheckResponse {
|
|
16
|
+
status(code: number): StatusCheckResponse;
|
|
17
|
+
json(data: unknown): void;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Configuration options for the status check handler.
|
|
21
|
+
*/
|
|
22
|
+
interface StatusCheckHandlerConfig {
|
|
23
|
+
logger: Logger;
|
|
24
|
+
subscriptionService?: ISubscriptionService;
|
|
25
|
+
tokenService?: ITokenService;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Request body for subscription status check.
|
|
29
|
+
*/
|
|
30
|
+
interface StatusCheckRequestBody {
|
|
31
|
+
userId: string;
|
|
32
|
+
platform: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Response payload for subscription status check.
|
|
36
|
+
*/
|
|
37
|
+
interface SubscriptionStatusResponse {
|
|
38
|
+
/** Whether the user has an active subscription */
|
|
39
|
+
hasActiveSubscription: boolean;
|
|
40
|
+
/** Current subscription details, null if no subscription exists */
|
|
41
|
+
subscription: SubscriptionEntity | null;
|
|
42
|
+
/** User's token balance */
|
|
43
|
+
tokenBalance: TokenBalance;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* SubscriptionStatusCheckHandler provides HTTP request handling for checking
|
|
47
|
+
* a user's subscription status. It returns subscription details, token balance,
|
|
48
|
+
* and active status.
|
|
49
|
+
*
|
|
50
|
+
* Usage with Express:
|
|
51
|
+
* ```typescript
|
|
52
|
+
* const handler = new SubscriptionStatusCheckHandler({ logger });
|
|
53
|
+
* app.post('/api/subscription/status', (req, res) => handler.handleRequest(req, res));
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* Usage with Cloud Functions:
|
|
57
|
+
* ```typescript
|
|
58
|
+
* const handler = new SubscriptionStatusCheckHandler({ logger });
|
|
59
|
+
* export const statusCheck = (req, res) => handler.handleRequest(req, res);
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export declare class SubscriptionStatusCheckHandler {
|
|
63
|
+
private readonly logger;
|
|
64
|
+
private readonly subscriptionService;
|
|
65
|
+
private readonly tokenService;
|
|
66
|
+
constructor(config: StatusCheckHandlerConfig);
|
|
67
|
+
/**
|
|
68
|
+
* Handles an incoming HTTP request to check subscription status.
|
|
69
|
+
* Validates the request body, retrieves subscription and token data,
|
|
70
|
+
* and returns the appropriate response.
|
|
71
|
+
*
|
|
72
|
+
* @param req - The HTTP request object
|
|
73
|
+
* @param res - The HTTP response object
|
|
74
|
+
*/
|
|
75
|
+
handleRequest(req: StatusCheckRequest, res: StatusCheckResponse): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Checks subscription status directly without HTTP request parsing.
|
|
78
|
+
* Useful for internal calls or testing.
|
|
79
|
+
*
|
|
80
|
+
* @param params - User identification parameters
|
|
81
|
+
* @returns Subscription status response
|
|
82
|
+
*/
|
|
83
|
+
checkStatus(params: {
|
|
84
|
+
userId: string;
|
|
85
|
+
platform: string;
|
|
86
|
+
}): Promise<SubscriptionStatusResponse>;
|
|
87
|
+
/**
|
|
88
|
+
* Parses and validates the status check request body.
|
|
89
|
+
*/
|
|
90
|
+
private parseRequestBody;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Creates a subscription status check handler function for use with serverless platforms.
|
|
94
|
+
* Returns a function that can be directly used as a Cloud Function or Lambda handler.
|
|
95
|
+
*
|
|
96
|
+
* @param config - Configuration options for the status check handler
|
|
97
|
+
* @returns An async function that handles status check requests
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* // Firebase Cloud Functions
|
|
102
|
+
* import * as functions from 'firebase-functions';
|
|
103
|
+
* import { createSubscriptionStatusCheckHandler } from 'miit-bot-payment';
|
|
104
|
+
*
|
|
105
|
+
* const logger = { info: console.log, warning: console.warn, error: console.error };
|
|
106
|
+
* export const subscriptionStatus = functions.https.onRequest(
|
|
107
|
+
* createSubscriptionStatusCheckHandler({ logger })
|
|
108
|
+
* );
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export declare function createSubscriptionStatusCheckHandler(config: StatusCheckHandlerConfig): (req: StatusCheckRequest, res: StatusCheckResponse) => Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Type export for the status check handler function signature.
|
|
114
|
+
*/
|
|
115
|
+
export type StatusCheckHandlerFunction = (req: StatusCheckRequest, res: StatusCheckResponse) => Promise<void>;
|
|
116
|
+
export type { StatusCheckRequest, StatusCheckResponse, StatusCheckHandlerConfig, StatusCheckRequestBody, SubscriptionStatusResponse, };
|
|
117
|
+
//# sourceMappingURL=status-check.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-check.handler.d.ts","sourceRoot":"","sources":["../../../src/modules/subscription/status-check.handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE7D;;;GAGG;AACH,UAAU,kBAAkB;IACxB,IAAI,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,UAAU,mBAAmB;IACzB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,UAAU,wBAAwB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;IAC3C,YAAY,CAAC,EAAE,aAAa,CAAC;CAChC;AAED;;GAEG;AACH,UAAU,sBAAsB;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,0BAA0B;IAChC,kDAAkD;IAClD,qBAAqB,EAAE,OAAO,CAAC;IAC/B,mEAAmE;IACnE,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,2BAA2B;IAC3B,YAAY,EAAE,YAAY,CAAC;CAC9B;AAWD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,8BAA8B;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuB;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;gBAEjC,MAAM,EAAE,wBAAwB;IAM5C;;;;;;;OAOG;IACU,aAAa,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuD5F;;;;;;OAMG;IACU,WAAW,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAmB3G;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAiC3B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oCAAoC,CAChD,MAAM,EAAE,wBAAwB,GACjC,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAGtE;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9G,YAAY,EACR,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,GAC7B,CAAC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SubscriptionStatusCheckHandler = void 0;
|
|
4
|
+
exports.createSubscriptionStatusCheckHandler = createSubscriptionStatusCheckHandler;
|
|
5
|
+
const service_1 = require("./service");
|
|
6
|
+
const service_2 = require("../token/service");
|
|
7
|
+
/**
|
|
8
|
+
* SubscriptionStatusCheckHandler provides HTTP request handling for checking
|
|
9
|
+
* a user's subscription status. It returns subscription details, token balance,
|
|
10
|
+
* and active status.
|
|
11
|
+
*
|
|
12
|
+
* Usage with Express:
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const handler = new SubscriptionStatusCheckHandler({ logger });
|
|
15
|
+
* app.post('/api/subscription/status', (req, res) => handler.handleRequest(req, res));
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Usage with Cloud Functions:
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const handler = new SubscriptionStatusCheckHandler({ logger });
|
|
21
|
+
* export const statusCheck = (req, res) => handler.handleRequest(req, res);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
class SubscriptionStatusCheckHandler {
|
|
25
|
+
constructor(config) {
|
|
26
|
+
this.logger = config.logger;
|
|
27
|
+
this.subscriptionService = config.subscriptionService || new service_1.SubscriptionService({ logger: config.logger });
|
|
28
|
+
this.tokenService = config.tokenService || new service_2.TokenService({ logger: config.logger });
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Handles an incoming HTTP request to check subscription status.
|
|
32
|
+
* Validates the request body, retrieves subscription and token data,
|
|
33
|
+
* and returns the appropriate response.
|
|
34
|
+
*
|
|
35
|
+
* @param req - The HTTP request object
|
|
36
|
+
* @param res - The HTTP response object
|
|
37
|
+
*/
|
|
38
|
+
async handleRequest(req, res) {
|
|
39
|
+
this.logger.info({
|
|
40
|
+
message: 'Received subscription status check request',
|
|
41
|
+
payload: {},
|
|
42
|
+
});
|
|
43
|
+
// Parse and validate the request body
|
|
44
|
+
const parseResult = this.parseRequestBody(req.body);
|
|
45
|
+
if (!parseResult.success || !parseResult.data) {
|
|
46
|
+
this.logger.warning({
|
|
47
|
+
message: 'Invalid status check request body',
|
|
48
|
+
payload: { error: parseResult.error },
|
|
49
|
+
});
|
|
50
|
+
res.status(400).json({
|
|
51
|
+
error: parseResult.error || 'Invalid request body',
|
|
52
|
+
});
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const { userId, platform } = parseResult.data;
|
|
56
|
+
try {
|
|
57
|
+
// Get subscription status
|
|
58
|
+
const statusResult = await this.checkStatus({ userId, platform });
|
|
59
|
+
this.logger.info({
|
|
60
|
+
message: 'Subscription status check completed',
|
|
61
|
+
payload: {
|
|
62
|
+
userId,
|
|
63
|
+
platform,
|
|
64
|
+
hasActiveSubscription: statusResult.hasActiveSubscription,
|
|
65
|
+
subscriptionStatus: statusResult.subscription?.status || null,
|
|
66
|
+
tokenBalance: statusResult.tokenBalance.available,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
res.status(200).json(statusResult);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
this.logger.error({
|
|
73
|
+
message: 'Error checking subscription status',
|
|
74
|
+
payload: {
|
|
75
|
+
userId,
|
|
76
|
+
platform,
|
|
77
|
+
error: JSON.stringify(error),
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
res.status(500).json({
|
|
81
|
+
error: 'Internal server error while checking subscription status',
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Checks subscription status directly without HTTP request parsing.
|
|
87
|
+
* Useful for internal calls or testing.
|
|
88
|
+
*
|
|
89
|
+
* @param params - User identification parameters
|
|
90
|
+
* @returns Subscription status response
|
|
91
|
+
*/
|
|
92
|
+
async checkStatus(params) {
|
|
93
|
+
const { userId, platform } = params;
|
|
94
|
+
// Fetch subscription and token balance in parallel
|
|
95
|
+
const [subscription, tokenBalance] = await Promise.all([
|
|
96
|
+
this.subscriptionService.getByUser({ userId, platform }),
|
|
97
|
+
this.tokenService.getBalance({ userId, platform }),
|
|
98
|
+
]);
|
|
99
|
+
// Determine if subscription is active
|
|
100
|
+
const hasActiveSubscription = subscription?.status === 'active';
|
|
101
|
+
return {
|
|
102
|
+
hasActiveSubscription,
|
|
103
|
+
subscription,
|
|
104
|
+
tokenBalance,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Parses and validates the status check request body.
|
|
109
|
+
*/
|
|
110
|
+
parseRequestBody(body) {
|
|
111
|
+
if (!body || typeof body !== 'object') {
|
|
112
|
+
return {
|
|
113
|
+
success: false,
|
|
114
|
+
error: 'Request body must be a JSON object',
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const data = body;
|
|
118
|
+
// Validate required fields
|
|
119
|
+
if (!data.userId || typeof data.userId !== 'string') {
|
|
120
|
+
return {
|
|
121
|
+
success: false,
|
|
122
|
+
error: 'Missing or invalid required field: userId',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (!data.platform || typeof data.platform !== 'string') {
|
|
126
|
+
return {
|
|
127
|
+
success: false,
|
|
128
|
+
error: 'Missing or invalid required field: platform',
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
success: true,
|
|
133
|
+
data: {
|
|
134
|
+
userId: data.userId,
|
|
135
|
+
platform: data.platform,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.SubscriptionStatusCheckHandler = SubscriptionStatusCheckHandler;
|
|
141
|
+
/**
|
|
142
|
+
* Creates a subscription status check handler function for use with serverless platforms.
|
|
143
|
+
* Returns a function that can be directly used as a Cloud Function or Lambda handler.
|
|
144
|
+
*
|
|
145
|
+
* @param config - Configuration options for the status check handler
|
|
146
|
+
* @returns An async function that handles status check requests
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* // Firebase Cloud Functions
|
|
151
|
+
* import * as functions from 'firebase-functions';
|
|
152
|
+
* import { createSubscriptionStatusCheckHandler } from 'miit-bot-payment';
|
|
153
|
+
*
|
|
154
|
+
* const logger = { info: console.log, warning: console.warn, error: console.error };
|
|
155
|
+
* export const subscriptionStatus = functions.https.onRequest(
|
|
156
|
+
* createSubscriptionStatusCheckHandler({ logger })
|
|
157
|
+
* );
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
function createSubscriptionStatusCheckHandler(config) {
|
|
161
|
+
const handler = new SubscriptionStatusCheckHandler(config);
|
|
162
|
+
return (req, res) => handler.handleRequest(req, res);
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=status-check.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-check.handler.js","sourceRoot":"","sources":["../../../src/modules/subscription/status-check.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { NestedPathsAccess } from '../../types/utilities';
|
|
2
|
+
import { SubscriptionPlanEntity } from '../subscriptionPlan/types';
|
|
3
|
+
import { PaymentEntity } from '../payments/types';
|
|
4
|
+
type UpgradePreview = {
|
|
5
|
+
currentPlan: SubscriptionPlanEntity;
|
|
6
|
+
newPlan: SubscriptionPlanEntity;
|
|
7
|
+
remainingDays: number;
|
|
8
|
+
remainingValue: number;
|
|
9
|
+
upgradeCost: number;
|
|
10
|
+
currency: 'UAH' | 'USD';
|
|
11
|
+
};
|
|
12
|
+
type UpgradeResult = {
|
|
13
|
+
payment: PaymentEntity;
|
|
14
|
+
paymentUrl: string;
|
|
15
|
+
};
|
|
2
16
|
type SubscriptionEntity = {
|
|
3
17
|
/** Auto-generated unique ID (document ID) */
|
|
4
18
|
id: string;
|
|
@@ -195,6 +209,28 @@ interface ISubscriptionService {
|
|
|
195
209
|
* @param params - Cancellation parameters
|
|
196
210
|
*/
|
|
197
211
|
cancelSubscription(params: Pick<SubscriptionEntity, 'id'>): Promise<void>;
|
|
212
|
+
/**
|
|
213
|
+
* Renews a subscription for a user by updating the expiration date.
|
|
214
|
+
* @param params - Renewal parameters
|
|
215
|
+
*/
|
|
216
|
+
renewSubscription(params: Pick<SubscriptionEntity, 'userId' | 'platform' | 'expiresAt'>): Promise<void>;
|
|
217
|
+
/**
|
|
218
|
+
* Retrieves all subscriptions that have expired past the grace period.
|
|
219
|
+
* Only returns subscriptions that should be deactivated.
|
|
220
|
+
* @returns Promise resolving to array of expired SubscriptionEntity
|
|
221
|
+
*/
|
|
222
|
+
getExpiredSubscriptions(): Promise<SubscriptionEntity[]>;
|
|
223
|
+
/**
|
|
224
|
+
* Retrieves all subscriptions that have had failed renewal attempts.
|
|
225
|
+
* These are cancelled subscriptions that expired and need deactivation.
|
|
226
|
+
* @returns Promise resolving to array of SubscriptionEntity with failed renewals
|
|
227
|
+
*/
|
|
228
|
+
getFailedRenewals(): Promise<SubscriptionEntity[]>;
|
|
229
|
+
/**
|
|
230
|
+
* Deactivates a subscription by ID (alias for deactivateSubscription).
|
|
231
|
+
* @param params - Deactivation parameters
|
|
232
|
+
*/
|
|
233
|
+
deactivate({ id }: Pick<SubscriptionEntity, 'id'>): Promise<void>;
|
|
198
234
|
}
|
|
199
235
|
interface ISubscriptionCapacity {
|
|
200
236
|
geminiTextCompletionTokens: number;
|
|
@@ -204,5 +240,5 @@ interface ISubscriptionCapacity {
|
|
|
204
240
|
openaiImageVisionTokens: number;
|
|
205
241
|
openaiTextTranscriptionMinutes: number;
|
|
206
242
|
}
|
|
207
|
-
export type { SubscriptionEntity, SubscriptionPlan, SubscriptionFieldPath, ISubscriptionRepository, ISubscriptionService, ISubscriptionCapacity, };
|
|
243
|
+
export type { SubscriptionEntity, SubscriptionPlan, SubscriptionFieldPath, ISubscriptionRepository, ISubscriptionService, ISubscriptionCapacity, UpgradePreview, UpgradeResult, };
|
|
208
244
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/subscription/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/subscription/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SubscriptionPlanEntity } from './types';
|
|
2
|
+
export declare const SUBSCRIPTION_PLAN_COLLECTION = "subscription_plans";
|
|
3
|
+
export declare const CACHE_TTL_MS: number;
|
|
4
|
+
export declare const DEFAULT_SUBSCRIPTION_PLANS: Omit<SubscriptionPlanEntity, 'createdAt' | 'updatedAt'>[];
|
|
5
|
+
//# sourceMappingURL=const.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEjD,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AAEjE,eAAO,MAAM,YAAY,QAAsB,CAAC;AAEhD,eAAO,MAAM,0BAA0B,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,GAAG,WAAW,CAAC,EAmG/F,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_SUBSCRIPTION_PLANS = exports.CACHE_TTL_MS = exports.SUBSCRIPTION_PLAN_COLLECTION = void 0;
|
|
4
|
+
exports.SUBSCRIPTION_PLAN_COLLECTION = 'subscription_plans';
|
|
5
|
+
exports.CACHE_TTL_MS = 20 * 60 * 60 * 1000; // 20 hours in milliseconds
|
|
6
|
+
exports.DEFAULT_SUBSCRIPTION_PLANS = [
|
|
7
|
+
// UAH Plans
|
|
8
|
+
{
|
|
9
|
+
id: 'basic-monthly',
|
|
10
|
+
titleCode: 'subscription.plan.basic.title',
|
|
11
|
+
descriptionCode: 'subscription.plan.basic.description',
|
|
12
|
+
amount: 99,
|
|
13
|
+
currency: 'UAH',
|
|
14
|
+
features: {
|
|
15
|
+
messages: 1000,
|
|
16
|
+
images: 50,
|
|
17
|
+
voice: 100,
|
|
18
|
+
},
|
|
19
|
+
regularMode: 'monthly',
|
|
20
|
+
count: 1,
|
|
21
|
+
credits: 1000,
|
|
22
|
+
isActive: true,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'pro-monthly',
|
|
26
|
+
titleCode: 'subscription.plan.pro.title',
|
|
27
|
+
descriptionCode: 'subscription.plan.pro.description',
|
|
28
|
+
amount: 199,
|
|
29
|
+
currency: 'UAH',
|
|
30
|
+
features: {
|
|
31
|
+
messages: 5000,
|
|
32
|
+
images: 200,
|
|
33
|
+
voice: 500,
|
|
34
|
+
},
|
|
35
|
+
regularMode: 'monthly',
|
|
36
|
+
count: 1,
|
|
37
|
+
credits: 5000,
|
|
38
|
+
isActive: true,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 'premium-monthly',
|
|
42
|
+
titleCode: 'subscription.plan.premium.title',
|
|
43
|
+
descriptionCode: 'subscription.plan.premium.description',
|
|
44
|
+
amount: 399,
|
|
45
|
+
currency: 'UAH',
|
|
46
|
+
features: {
|
|
47
|
+
messages: 15000,
|
|
48
|
+
images: 500,
|
|
49
|
+
voice: 1000,
|
|
50
|
+
},
|
|
51
|
+
regularMode: 'monthly',
|
|
52
|
+
count: 1,
|
|
53
|
+
credits: 15000,
|
|
54
|
+
isActive: true,
|
|
55
|
+
},
|
|
56
|
+
// USD Plans - $7, $10, $14 tiers
|
|
57
|
+
{
|
|
58
|
+
id: 'starter-monthly-usd',
|
|
59
|
+
titleCode: 'subscription.plan.starter.title',
|
|
60
|
+
descriptionCode: 'subscription.plan.starter.description',
|
|
61
|
+
amount: 7,
|
|
62
|
+
currency: 'USD',
|
|
63
|
+
features: {
|
|
64
|
+
messages: 2000,
|
|
65
|
+
images: 100,
|
|
66
|
+
voice: 200,
|
|
67
|
+
},
|
|
68
|
+
regularMode: 'monthly',
|
|
69
|
+
count: 1,
|
|
70
|
+
credits: 2000,
|
|
71
|
+
isActive: true,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: 'standard-monthly-usd',
|
|
75
|
+
titleCode: 'subscription.plan.standard.title',
|
|
76
|
+
descriptionCode: 'subscription.plan.standard.description',
|
|
77
|
+
amount: 10,
|
|
78
|
+
currency: 'USD',
|
|
79
|
+
features: {
|
|
80
|
+
messages: 5000,
|
|
81
|
+
images: 250,
|
|
82
|
+
voice: 500,
|
|
83
|
+
},
|
|
84
|
+
regularMode: 'monthly',
|
|
85
|
+
count: 1,
|
|
86
|
+
credits: 5000,
|
|
87
|
+
isActive: true,
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: 'professional-monthly-usd',
|
|
91
|
+
titleCode: 'subscription.plan.professional.title',
|
|
92
|
+
descriptionCode: 'subscription.plan.professional.description',
|
|
93
|
+
amount: 14,
|
|
94
|
+
currency: 'USD',
|
|
95
|
+
features: {
|
|
96
|
+
messages: 10000,
|
|
97
|
+
images: 500,
|
|
98
|
+
voice: 1000,
|
|
99
|
+
},
|
|
100
|
+
regularMode: 'monthly',
|
|
101
|
+
count: 1,
|
|
102
|
+
credits: 10000,
|
|
103
|
+
isActive: true,
|
|
104
|
+
},
|
|
105
|
+
];
|
|
106
|
+
//# sourceMappingURL=const.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/const.ts"],"names":[],"mappings":";;;AAEa,QAAA,4BAA4B,GAAG,oBAAoB,CAAC;AAEpD,QAAA,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,2BAA2B;AAE/D,QAAA,0BAA0B,GAA8D;IACjG,YAAY;IACZ;QACI,EAAE,EAAE,eAAe;QACnB,SAAS,EAAE,+BAA+B;QAC1C,eAAe,EAAE,qCAAqC;QACtD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,GAAG;SACb;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACjB;IACD;QACI,EAAE,EAAE,aAAa;QACjB,SAAS,EAAE,6BAA6B;QACxC,eAAe,EAAE,mCAAmC;QACpD,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;SACb;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACjB;IACD;QACI,EAAE,EAAE,iBAAiB;QACrB,SAAS,EAAE,iCAAiC;QAC5C,eAAe,EAAE,uCAAuC;QACxD,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,IAAI;SACd;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;KACjB;IACD,iCAAiC;IACjC;QACI,EAAE,EAAE,qBAAqB;QACzB,SAAS,EAAE,iCAAiC;QAC5C,eAAe,EAAE,uCAAuC;QACxD,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;SACb;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACjB;IACD;QACI,EAAE,EAAE,sBAAsB;QAC1B,SAAS,EAAE,kCAAkC;QAC7C,eAAe,EAAE,wCAAwC;QACzD,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,GAAG;SACb;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACjB;IACD;QACI,EAAE,EAAE,0BAA0B;QAC9B,SAAS,EAAE,sCAAsC;QACjD,eAAe,EAAE,4CAA4C;QAC7D,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE;YACN,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,GAAG;YACX,KAAK,EAAE,IAAI;SACd;QACD,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,IAAI;KACjB;CACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
__exportStar(require("./const"), exports);
|
|
19
|
+
__exportStar(require("./repository"), exports);
|
|
20
|
+
__exportStar(require("./service"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,0CAAwB;AACxB,+CAA6B;AAC7B,4CAA0B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { FieldValue, Firestore } from 'firebase-admin/firestore';
|
|
2
|
+
import { SubscriptionPlanEntity, SubscriptionPlanFieldPath, ISubscriptionPlanRepository } from './types';
|
|
3
|
+
export type UpdateDBSubscriptionPlanFields = [
|
|
4
|
+
SubscriptionPlanFieldPath,
|
|
5
|
+
FieldValue | string | number | boolean | Date | [] | {}
|
|
6
|
+
][];
|
|
7
|
+
export declare class SubscriptionPlanRepository implements ISubscriptionPlanRepository {
|
|
8
|
+
private readonly db;
|
|
9
|
+
private readonly collectionName;
|
|
10
|
+
constructor({ db }?: {
|
|
11
|
+
db?: Firestore;
|
|
12
|
+
});
|
|
13
|
+
getAll(): Promise<SubscriptionPlanEntity[]>;
|
|
14
|
+
getById(id: string): Promise<SubscriptionPlanEntity | null>;
|
|
15
|
+
create(params: Omit<SubscriptionPlanEntity, 'id' | 'createdAt' | 'updatedAt'>): Promise<SubscriptionPlanEntity>;
|
|
16
|
+
update(id: string, params: Partial<Omit<SubscriptionPlanEntity, 'id' | 'createdAt' | 'updatedAt'>>): Promise<SubscriptionPlanEntity>;
|
|
17
|
+
deactivate(id: string): Promise<void>;
|
|
18
|
+
seedDefaults(defaultPlans: Omit<SubscriptionPlanEntity, 'createdAt' | 'updatedAt'>[]): Promise<void>;
|
|
19
|
+
isEmpty(): Promise<boolean>;
|
|
20
|
+
private mapDocumentToEntity;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAuC,MAAM,0BAA0B,CAAC;AACtG,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAGzG,MAAM,MAAM,8BAA8B,GAAG;IACzC,yBAAyB;IACzB,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE;CAC1D,EAAE,CAAC;AAEJ,qBAAa,0BAA2B,YAAW,2BAA2B;IAC1E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;gBAEnD,EAAE,EAAE,EAAE,GAAE;QAAE,EAAE,CAAC,EAAE,SAAS,CAAA;KAAO;IAI9B,MAAM,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAU3C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAa3D,MAAM,CACf,MAAM,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GACvE,OAAO,CAAC,sBAAsB,CAAC;IAgBrB,MAAM,CACf,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,GAChF,OAAO,CAAC,sBAAsB,CAAC;IAuBrB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcrC,YAAY,CACrB,YAAY,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,GAAG,WAAW,CAAC,EAAE,GACxE,OAAO,CAAC,IAAI,CAAC;IAiBH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAKxC,OAAO,CAAC,mBAAmB;CAM9B"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SubscriptionPlanRepository = void 0;
|
|
4
|
+
const firestore_1 = require("firebase-admin/firestore");
|
|
5
|
+
const const_1 = require("./const");
|
|
6
|
+
class SubscriptionPlanRepository {
|
|
7
|
+
constructor({ db } = {}) {
|
|
8
|
+
this.collectionName = const_1.SUBSCRIPTION_PLAN_COLLECTION;
|
|
9
|
+
this.db = db || (0, firestore_1.getFirestore)();
|
|
10
|
+
}
|
|
11
|
+
async getAll() {
|
|
12
|
+
const querySnapshot = await this.db.collection(this.collectionName).get();
|
|
13
|
+
if (querySnapshot.empty) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
return querySnapshot.docs.map((doc) => this.mapDocumentToEntity(doc));
|
|
17
|
+
}
|
|
18
|
+
async getById(id) {
|
|
19
|
+
const docSnapshot = await this.db.collection(this.collectionName).doc(id).get();
|
|
20
|
+
if (!docSnapshot.exists) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
id: docSnapshot.id,
|
|
25
|
+
...docSnapshot.data(),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
async create(params) {
|
|
29
|
+
const docRef = this.db.collection(this.collectionName).doc();
|
|
30
|
+
const now = new Date().toISOString();
|
|
31
|
+
const planEntity = {
|
|
32
|
+
...params,
|
|
33
|
+
id: docRef.id,
|
|
34
|
+
createdAt: now,
|
|
35
|
+
updatedAt: now,
|
|
36
|
+
};
|
|
37
|
+
await docRef.set(planEntity);
|
|
38
|
+
return planEntity;
|
|
39
|
+
}
|
|
40
|
+
async update(id, params) {
|
|
41
|
+
const docRef = this.db.collection(this.collectionName).doc(id);
|
|
42
|
+
const docSnapshot = await docRef.get();
|
|
43
|
+
if (!docSnapshot.exists) {
|
|
44
|
+
throw new Error(`Subscription plan not found: ${id}`);
|
|
45
|
+
}
|
|
46
|
+
const now = new Date().toISOString();
|
|
47
|
+
const updateData = {
|
|
48
|
+
...params,
|
|
49
|
+
updatedAt: now,
|
|
50
|
+
};
|
|
51
|
+
await docRef.update(updateData);
|
|
52
|
+
const updatedDoc = await docRef.get();
|
|
53
|
+
return {
|
|
54
|
+
id: updatedDoc.id,
|
|
55
|
+
...updatedDoc.data(),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async deactivate(id) {
|
|
59
|
+
const docRef = this.db.collection(this.collectionName).doc(id);
|
|
60
|
+
const docSnapshot = await docRef.get();
|
|
61
|
+
if (!docSnapshot.exists) {
|
|
62
|
+
throw new Error(`Subscription plan not found: ${id}`);
|
|
63
|
+
}
|
|
64
|
+
await docRef.update({
|
|
65
|
+
isActive: false,
|
|
66
|
+
updatedAt: new Date().toISOString(),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
async seedDefaults(defaultPlans) {
|
|
70
|
+
const batch = this.db.batch();
|
|
71
|
+
const now = new Date().toISOString();
|
|
72
|
+
for (const plan of defaultPlans) {
|
|
73
|
+
const docRef = this.db.collection(this.collectionName).doc(plan.id);
|
|
74
|
+
const planEntity = {
|
|
75
|
+
...plan,
|
|
76
|
+
createdAt: now,
|
|
77
|
+
updatedAt: now,
|
|
78
|
+
};
|
|
79
|
+
batch.set(docRef, planEntity);
|
|
80
|
+
}
|
|
81
|
+
await batch.commit();
|
|
82
|
+
}
|
|
83
|
+
async isEmpty() {
|
|
84
|
+
const querySnapshot = await this.db.collection(this.collectionName).limit(1).get();
|
|
85
|
+
return querySnapshot.empty;
|
|
86
|
+
}
|
|
87
|
+
mapDocumentToEntity(doc) {
|
|
88
|
+
return {
|
|
89
|
+
id: doc.id,
|
|
90
|
+
...doc.data(),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.SubscriptionPlanRepository = SubscriptionPlanRepository;
|
|
95
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/modules/subscriptionPlan/repository.ts"],"names":[],"mappings":"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"}
|