@grtsnx/payba3 1.0.0

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.
Files changed (118) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/CODE_OF_CONDUCT.md +24 -0
  3. package/CONTRIBUTING.md +149 -0
  4. package/LICENSE +21 -0
  5. package/README.md +282 -0
  6. package/SECURITY.md +53 -0
  7. package/SUPPORT.md +27 -0
  8. package/assets/payba3-logo.svg +17 -0
  9. package/dist/index.d.ts +18 -0
  10. package/dist/index.js +24 -0
  11. package/dist/lib/lib.module.d.ts +2 -0
  12. package/dist/lib/lib.module.js +37 -0
  13. package/dist/lib/lib.module.js.map +1 -0
  14. package/dist/lib/monnify/config/monnify.helper.d.ts +24 -0
  15. package/dist/lib/monnify/config/monnify.helper.js +234 -0
  16. package/dist/lib/monnify/config/monnify.helper.js.map +1 -0
  17. package/dist/lib/monnify/config/monnify.types.d.ts +93 -0
  18. package/dist/lib/monnify/config/monnify.types.js +3 -0
  19. package/dist/lib/monnify/config/monnify.types.js.map +1 -0
  20. package/dist/lib/monnify/monnify.module.d.ts +2 -0
  21. package/dist/lib/monnify/monnify.module.js +22 -0
  22. package/dist/lib/monnify/monnify.module.js.map +1 -0
  23. package/dist/lib/monnify/monnify.service.d.ts +19 -0
  24. package/dist/lib/monnify/monnify.service.js +113 -0
  25. package/dist/lib/monnify/monnify.service.js.map +1 -0
  26. package/dist/lib/mono/config/mono.helper.d.ts +11 -0
  27. package/dist/lib/mono/config/mono.helper.js +78 -0
  28. package/dist/lib/mono/config/mono.helper.js.map +1 -0
  29. package/dist/lib/mono/config/mono.types.d.ts +48 -0
  30. package/dist/lib/mono/config/mono.types.js +3 -0
  31. package/dist/lib/mono/config/mono.types.js.map +1 -0
  32. package/dist/lib/mono/mono.module.d.ts +2 -0
  33. package/dist/lib/mono/mono.module.js +22 -0
  34. package/dist/lib/mono/mono.module.js.map +1 -0
  35. package/dist/lib/mono/mono.service.d.ts +15 -0
  36. package/dist/lib/mono/mono.service.js +77 -0
  37. package/dist/lib/mono/mono.service.js.map +1 -0
  38. package/dist/lib/opay/config/opay.helper.d.ts +17 -0
  39. package/dist/lib/opay/config/opay.helper.js +175 -0
  40. package/dist/lib/opay/config/opay.helper.js.map +1 -0
  41. package/dist/lib/opay/config/opay.types.d.ts +73 -0
  42. package/dist/lib/opay/config/opay.types.js +3 -0
  43. package/dist/lib/opay/config/opay.types.js.map +1 -0
  44. package/dist/lib/opay/opay.module.d.ts +2 -0
  45. package/dist/lib/opay/opay.module.js +22 -0
  46. package/dist/lib/opay/opay.module.js.map +1 -0
  47. package/dist/lib/opay/opay.service.d.ts +17 -0
  48. package/dist/lib/opay/opay.service.js +104 -0
  49. package/dist/lib/opay/opay.service.js.map +1 -0
  50. package/dist/lib/payba3.service.d.ts +16 -0
  51. package/dist/lib/payba3.service.js +59 -0
  52. package/dist/lib/payba3.service.js.map +1 -0
  53. package/dist/lib/payba3.types.d.ts +18 -0
  54. package/dist/lib/payba3.types.js +13 -0
  55. package/dist/lib/payba3.types.js.map +1 -0
  56. package/dist/lib/paystack/config/paystack.helper.d.ts +15 -0
  57. package/dist/lib/paystack/config/paystack.helper.js +134 -0
  58. package/dist/lib/paystack/config/paystack.helper.js.map +1 -0
  59. package/dist/lib/paystack/config/paystack.types.d.ts +92 -0
  60. package/dist/lib/paystack/config/paystack.types.js +3 -0
  61. package/dist/lib/paystack/config/paystack.types.js.map +1 -0
  62. package/dist/lib/paystack/paystack.module.d.ts +2 -0
  63. package/dist/lib/paystack/paystack.module.js +22 -0
  64. package/dist/lib/paystack/paystack.module.js.map +1 -0
  65. package/dist/lib/paystack/paystack.service.d.ts +33 -0
  66. package/dist/lib/paystack/paystack.service.js +328 -0
  67. package/dist/lib/paystack/paystack.service.js.map +1 -0
  68. package/dist/lib/qoreid/config/qoreid.helper.d.ts +19 -0
  69. package/dist/lib/qoreid/config/qoreid.helper.js +132 -0
  70. package/dist/lib/qoreid/config/qoreid.helper.js.map +1 -0
  71. package/dist/lib/qoreid/config/qoreid.types.d.ts +35 -0
  72. package/dist/lib/qoreid/config/qoreid.types.js +3 -0
  73. package/dist/lib/qoreid/config/qoreid.types.js.map +1 -0
  74. package/dist/lib/qoreid/qoreid.module.d.ts +2 -0
  75. package/dist/lib/qoreid/qoreid.module.js +22 -0
  76. package/dist/lib/qoreid/qoreid.module.js.map +1 -0
  77. package/dist/lib/qoreid/qoreid.service.d.ts +10 -0
  78. package/dist/lib/qoreid/qoreid.service.js +63 -0
  79. package/dist/lib/qoreid/qoreid.service.js.map +1 -0
  80. package/dist/lib/safehaven/config/safe.helper.d.ts +16 -0
  81. package/dist/lib/safehaven/config/safe.helper.js +136 -0
  82. package/dist/lib/safehaven/config/safe.helper.js.map +1 -0
  83. package/dist/lib/safehaven/config/safe.types.d.ts +50 -0
  84. package/dist/lib/safehaven/config/safe.types.js +3 -0
  85. package/dist/lib/safehaven/config/safe.types.js.map +1 -0
  86. package/dist/lib/safehaven/safe.module.d.ts +2 -0
  87. package/dist/lib/safehaven/safe.module.js +22 -0
  88. package/dist/lib/safehaven/safe.module.js.map +1 -0
  89. package/dist/lib/safehaven/safe.service.d.ts +14 -0
  90. package/dist/lib/safehaven/safe.service.js +77 -0
  91. package/dist/lib/safehaven/safe.service.js.map +1 -0
  92. package/dist/lib/seerbit/config/seerbit.helper.d.ts +11 -0
  93. package/dist/lib/seerbit/config/seerbit.helper.js +88 -0
  94. package/dist/lib/seerbit/config/seerbit.helper.js.map +1 -0
  95. package/dist/lib/seerbit/config/seerbit.types.d.ts +49 -0
  96. package/dist/lib/seerbit/config/seerbit.types.js +3 -0
  97. package/dist/lib/seerbit/config/seerbit.types.js.map +1 -0
  98. package/dist/lib/seerbit/seerbit.module.d.ts +2 -0
  99. package/dist/lib/seerbit/seerbit.module.js +22 -0
  100. package/dist/lib/seerbit/seerbit.module.js.map +1 -0
  101. package/dist/lib/seerbit/seerbit.service.d.ts +11 -0
  102. package/dist/lib/seerbit/seerbit.service.js +83 -0
  103. package/dist/lib/seerbit/seerbit.service.js.map +1 -0
  104. package/dist/lib/shared/index.d.ts +1 -0
  105. package/dist/lib/shared/index.js +18 -0
  106. package/dist/lib/shared/index.js.map +1 -0
  107. package/dist/lib/shared/response.helper.d.ts +15 -0
  108. package/dist/lib/shared/response.helper.js +39 -0
  109. package/dist/lib/shared/response.helper.js.map +1 -0
  110. package/llms.txt +25 -0
  111. package/package.json +169 -0
  112. package/src/lib/monnify/monnify_llm.txt +429 -0
  113. package/src/lib/mono/mono_llm.txt +372 -0
  114. package/src/lib/opay/opay_llm.txt +1022 -0
  115. package/src/lib/paystack/paystack_llm.txt +382 -0
  116. package/src/lib/qoreid/qoreid_llm.txt +68 -0
  117. package/src/lib/safehaven/safehaven_llm.txt +77 -0
  118. package/src/lib/seerbit/seerbit_llm.txt +61 -0
@@ -0,0 +1,328 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PaystackService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const response_helper_1 = require("../shared/response.helper");
15
+ const paystack_helper_1 = require("./config/paystack.helper");
16
+ let PaystackService = class PaystackService {
17
+ paystackSecret;
18
+ preferredBank;
19
+ baseUrl = paystack_helper_1.PAYSTACK_BASE_URL;
20
+ constructor() {
21
+ const environment = (process.env.PAYSTACK_ENVIRONMENT ??
22
+ process.env.NODE_ENV ??
23
+ 'sandbox');
24
+ const key = (0, paystack_helper_1.getPaystackSecret)(environment);
25
+ this.paystackSecret = key ?? '';
26
+ this.preferredBank = (0, paystack_helper_1.getPaystackPreferredBank)(environment);
27
+ }
28
+ async createPaystackCustomer(email, firstName, lastName, phone) {
29
+ return (0, paystack_helper_1.requestPaystack)({
30
+ baseUrl: this.baseUrl,
31
+ secret: this.paystackSecret,
32
+ endpoint: '/customer',
33
+ options: {
34
+ method: 'POST',
35
+ body: {
36
+ email,
37
+ first_name: firstName,
38
+ last_name: lastName,
39
+ phone,
40
+ },
41
+ },
42
+ });
43
+ }
44
+ async createDedicatedAccount(customerCode) {
45
+ return (0, paystack_helper_1.requestPaystack)({
46
+ baseUrl: this.baseUrl,
47
+ secret: this.paystackSecret,
48
+ endpoint: '/dedicated_account',
49
+ options: {
50
+ method: 'POST',
51
+ body: {
52
+ customer: customerCode,
53
+ preferred_bank: this.preferredBank,
54
+ },
55
+ },
56
+ });
57
+ }
58
+ async retrieveDedicatedAccount(dedicatedAccountId) {
59
+ return (0, paystack_helper_1.requestPaystack)({
60
+ baseUrl: this.baseUrl,
61
+ secret: this.paystackSecret,
62
+ endpoint: `/dedicated_account/${encodeURIComponent(dedicatedAccountId)}`,
63
+ });
64
+ }
65
+ async retrieveCustomerCode(email) {
66
+ const response = await (0, paystack_helper_1.requestPaystack)({
67
+ baseUrl: this.baseUrl,
68
+ secret: this.paystackSecret,
69
+ endpoint: `/customer?email=${encodeURIComponent(email)}`,
70
+ });
71
+ return response.data[0]?.customer_code;
72
+ }
73
+ async initializeTransaction(email, amount, currency, callback_url) {
74
+ return (0, paystack_helper_1.requestPaystack)({
75
+ baseUrl: this.baseUrl,
76
+ secret: this.paystackSecret,
77
+ endpoint: '/transaction/initialize',
78
+ options: {
79
+ method: 'POST',
80
+ body: {
81
+ email,
82
+ amount: amount * 100,
83
+ currency,
84
+ callback_url,
85
+ },
86
+ },
87
+ });
88
+ }
89
+ async initializeSubscriptionCheckout(data) {
90
+ const payload = {
91
+ email: data.email,
92
+ plan: data.plan,
93
+ callback_url: data.callback_url,
94
+ metadata: data.metadata,
95
+ currency: data.currency ?? 'NGN',
96
+ };
97
+ if (data.amountInKobo != null && data.amountInKobo > 0) {
98
+ payload.amount = Math.round(data.amountInKobo);
99
+ }
100
+ return (0, paystack_helper_1.requestPaystack)({
101
+ baseUrl: this.baseUrl,
102
+ secret: this.paystackSecret,
103
+ endpoint: '/transaction/initialize',
104
+ options: {
105
+ method: 'POST',
106
+ body: payload,
107
+ },
108
+ });
109
+ }
110
+ async listCustomerSubscriptions(opts) {
111
+ const params = new URLSearchParams();
112
+ if (opts.customerId != null) {
113
+ params.set('customer', String(opts.customerId));
114
+ }
115
+ if (opts.planId != null) {
116
+ params.set('plan', String(opts.planId));
117
+ }
118
+ params.set('perPage', String(opts.perPage ?? 50));
119
+ const qs = params.toString();
120
+ return (0, paystack_helper_1.requestPaystack)({
121
+ baseUrl: this.baseUrl,
122
+ secret: this.paystackSecret,
123
+ endpoint: `/subscription${qs ? `?${qs}` : ''}`,
124
+ });
125
+ }
126
+ async verifyTransaction(reference) {
127
+ return (0, paystack_helper_1.requestPaystack)({
128
+ baseUrl: this.baseUrl,
129
+ secret: this.paystackSecret,
130
+ endpoint: `/transaction/verify/${reference}`,
131
+ });
132
+ }
133
+ async initializeOneTimeCheckout(data) {
134
+ return (0, paystack_helper_1.requestPaystack)({
135
+ baseUrl: this.baseUrl,
136
+ secret: this.paystackSecret,
137
+ endpoint: '/transaction/initialize',
138
+ options: {
139
+ method: 'POST',
140
+ body: {
141
+ email: data.email,
142
+ amount: Math.round(data.amountInKobo),
143
+ currency: data.currency ?? 'NGN',
144
+ callback_url: data.callback_url,
145
+ metadata: data.metadata,
146
+ reference: data.reference,
147
+ },
148
+ },
149
+ });
150
+ }
151
+ async chargeAuthorization(data) {
152
+ return (0, paystack_helper_1.requestPaystack)({
153
+ baseUrl: this.baseUrl,
154
+ secret: this.paystackSecret,
155
+ endpoint: '/transaction/charge_authorization',
156
+ options: {
157
+ method: 'POST',
158
+ body: {
159
+ email: data.email,
160
+ amount: Math.round(data.amountInKobo),
161
+ authorization_code: data.authorization_code,
162
+ reference: data.reference,
163
+ metadata: data.metadata,
164
+ currency: data.currency ?? 'NGN',
165
+ },
166
+ },
167
+ });
168
+ }
169
+ async getBanks() {
170
+ return (0, paystack_helper_1.requestPaystack)({
171
+ baseUrl: this.baseUrl,
172
+ secret: this.paystackSecret,
173
+ endpoint: '/bank',
174
+ });
175
+ }
176
+ async getBankById(bankId) {
177
+ const response = await this.getBanks();
178
+ return response.data.find((bank) => bank.id === bankId) ?? null;
179
+ }
180
+ async getBankByCode(bankCode) {
181
+ const response = await this.getBanks();
182
+ return response.data.find((bank) => bank.code === bankCode) ?? null;
183
+ }
184
+ async resolveBankAccount(accountNumber, bankCode) {
185
+ try {
186
+ const response = await (0, paystack_helper_1.requestPaystack)({
187
+ baseUrl: this.baseUrl,
188
+ secret: this.paystackSecret,
189
+ endpoint: `/bank/resolve?account_number=${encodeURIComponent(accountNumber)}&bank_code=${encodeURIComponent(bankCode)}`,
190
+ });
191
+ return response.data;
192
+ }
193
+ catch (error) {
194
+ if (error instanceof response_helper_1.handleResponse && error.getStatus() === 400) {
195
+ throw new response_helper_1.handleResponse(common_1.HttpStatus.BAD_REQUEST, 'Invalid account number or bank code');
196
+ }
197
+ throw new response_helper_1.handleResponse(common_1.HttpStatus.INTERNAL_SERVER_ERROR, 'Failed to resolve account details');
198
+ }
199
+ }
200
+ verifyWebhookSignature(body, headers) {
201
+ const signature = (0, paystack_helper_1.getPaystackSignature)(headers);
202
+ if (!signature) {
203
+ throw new common_1.UnauthorizedException('Invalid Paystack signature');
204
+ }
205
+ const hash = (0, paystack_helper_1.createPaystackSignatureHash)(body, this.paystackSecret);
206
+ if (!(0, paystack_helper_1.isTimingSafeEqual)(hash, signature)) {
207
+ throw new response_helper_1.handleResponse(common_1.HttpStatus.FORBIDDEN, 'Invalid Paystack signature');
208
+ }
209
+ }
210
+ handlePaystackWebhook(body, headers) {
211
+ this.verifyWebhookSignature(body, headers);
212
+ if (body.event !== 'charge.success') {
213
+ return false;
214
+ }
215
+ return body.data;
216
+ }
217
+ async fetchPlan(planCode) {
218
+ return (0, paystack_helper_1.requestPaystack)({
219
+ baseUrl: this.baseUrl,
220
+ secret: this.paystackSecret,
221
+ endpoint: `/plan/${planCode}`,
222
+ });
223
+ }
224
+ async createSubscription(data) {
225
+ if (!data.authorization?.trim()) {
226
+ throw new response_helper_1.handleResponse(common_1.HttpStatus.BAD_REQUEST, 'No saved payment method. Complete Paystack checkout to authorize billing.', {
227
+ code: 'no_active_authorizations_for_customer',
228
+ type: 'validation_error',
229
+ meta: {
230
+ nextStep: 'Pass the plan code to transaction/initialize and complete payment first.',
231
+ },
232
+ });
233
+ }
234
+ return (0, paystack_helper_1.requestPaystack)({
235
+ baseUrl: this.baseUrl,
236
+ secret: this.paystackSecret,
237
+ endpoint: '/subscription',
238
+ options: {
239
+ method: 'POST',
240
+ body: data,
241
+ },
242
+ });
243
+ }
244
+ async fetchSubscription(idOrCode) {
245
+ return (0, paystack_helper_1.requestPaystack)({
246
+ baseUrl: this.baseUrl,
247
+ secret: this.paystackSecret,
248
+ endpoint: `/subscription/${idOrCode}`,
249
+ });
250
+ }
251
+ async disableSubscription(code, token) {
252
+ return (0, paystack_helper_1.requestPaystack)({
253
+ baseUrl: this.baseUrl,
254
+ secret: this.paystackSecret,
255
+ endpoint: '/subscription/disable',
256
+ options: {
257
+ method: 'POST',
258
+ body: {
259
+ code,
260
+ token,
261
+ },
262
+ },
263
+ });
264
+ }
265
+ async createCustomer(data) {
266
+ return (0, paystack_helper_1.requestPaystack)({
267
+ baseUrl: this.baseUrl,
268
+ secret: this.paystackSecret,
269
+ endpoint: '/customer',
270
+ options: {
271
+ method: 'POST',
272
+ body: data,
273
+ },
274
+ });
275
+ }
276
+ async fetchCustomerByEmail(email) {
277
+ return (0, paystack_helper_1.requestPaystack)({
278
+ baseUrl: this.baseUrl,
279
+ secret: this.paystackSecret,
280
+ endpoint: `/customer?email=${encodeURIComponent(email)}`,
281
+ });
282
+ }
283
+ async createTransferRecipient(data) {
284
+ return (0, paystack_helper_1.requestPaystack)({
285
+ baseUrl: this.baseUrl,
286
+ secret: this.paystackSecret,
287
+ endpoint: '/transferrecipient',
288
+ options: {
289
+ method: 'POST',
290
+ body: data,
291
+ },
292
+ });
293
+ }
294
+ async deleteTransferRecipient(idOrCode) {
295
+ return (0, paystack_helper_1.requestPaystack)({
296
+ baseUrl: this.baseUrl,
297
+ secret: this.paystackSecret,
298
+ endpoint: `/transferrecipient/${idOrCode}`,
299
+ options: {
300
+ method: 'DELETE',
301
+ },
302
+ });
303
+ }
304
+ async initiateTransfer(data) {
305
+ return (0, paystack_helper_1.requestPaystack)({
306
+ baseUrl: this.baseUrl,
307
+ secret: this.paystackSecret,
308
+ endpoint: '/transfer',
309
+ options: {
310
+ method: 'POST',
311
+ body: data,
312
+ },
313
+ });
314
+ }
315
+ async getPaystackBalance() {
316
+ return (0, paystack_helper_1.requestPaystack)({
317
+ baseUrl: this.baseUrl,
318
+ secret: this.paystackSecret,
319
+ endpoint: '/balance',
320
+ });
321
+ }
322
+ };
323
+ exports.PaystackService = PaystackService;
324
+ exports.PaystackService = PaystackService = __decorate([
325
+ (0, common_1.Injectable)(),
326
+ __metadata("design:paramtypes", [])
327
+ ], PaystackService);
328
+ //# sourceMappingURL=paystack.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paystack.service.js","sourceRoot":"","sources":["../../../src/lib/paystack/paystack.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { NormalizedQoreIDEnvironment, QoreIDCacLevel, QoreIDCacVersion, QoreIDCredentials, QoreIDEnvironment, QoreIDRequestContext, QoreIDRequestOptions, QoreIDTokenCache, QoreIDTokenResponse } from './qoreid.types';
2
+ export declare const QOREID_BASE_URLS: Record<NormalizedQoreIDEnvironment, string>;
3
+ export declare const QOREID_BASE_URL: string;
4
+ export declare const normalizeQoreIDEnvironment: (environment?: string) => NormalizedQoreIDEnvironment;
5
+ export declare const getQoreIDBaseUrl: (environment: QoreIDEnvironment, baseUrlOverride?: string) => string;
6
+ export declare const getQoreIDCredentials: (environment: QoreIDEnvironment) => QoreIDCredentials;
7
+ export declare const buildQoreIDHeaders: (token?: string) => Record<string, string>;
8
+ export declare const buildQoreIDRequestInit: (options: QoreIDRequestOptions) => RequestInit;
9
+ export declare const parseQoreIDResponse: (response: Response) => Promise<unknown>;
10
+ export declare const isQoreIDTokenResponse: (value: unknown) => value is QoreIDTokenResponse;
11
+ export declare const getQoreIDAccessTokenFromResponse: (response: QoreIDTokenResponse) => string | undefined;
12
+ export declare const getQoreIDExpiresInFromResponse: (response: QoreIDTokenResponse) => number;
13
+ export declare const getQoreIDErrorMessage: (error: unknown) => string;
14
+ export declare const assertQoreIDCredentials: (credentials: QoreIDCredentials) => Required<QoreIDCredentials>;
15
+ export declare const requestQoreID: <T>({ baseUrl, endpoint, options, }: QoreIDRequestContext) => Promise<T>;
16
+ export declare const fetchQoreIDToken: (baseUrl: string, credentials: QoreIDCredentials) => Promise<QoreIDTokenCache>;
17
+ export declare const isQoreIDTokenFresh: (token?: QoreIDTokenCache) => token is QoreIDTokenCache;
18
+ export declare const getValidQoreIDAccessToken: (token: QoreIDTokenCache | undefined, refreshToken: () => Promise<QoreIDTokenCache>) => Promise<QoreIDTokenCache>;
19
+ export declare const buildQoreIDCacEndpoint: (version?: QoreIDCacVersion, level?: QoreIDCacLevel) => string;
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildQoreIDCacEndpoint = exports.getValidQoreIDAccessToken = exports.isQoreIDTokenFresh = exports.fetchQoreIDToken = exports.requestQoreID = exports.assertQoreIDCredentials = exports.getQoreIDErrorMessage = exports.getQoreIDExpiresInFromResponse = exports.getQoreIDAccessTokenFromResponse = exports.isQoreIDTokenResponse = exports.parseQoreIDResponse = exports.buildQoreIDRequestInit = exports.buildQoreIDHeaders = exports.getQoreIDCredentials = exports.getQoreIDBaseUrl = exports.normalizeQoreIDEnvironment = exports.QOREID_BASE_URL = exports.QOREID_BASE_URLS = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const response_helper_1 = require("../../shared/response.helper");
6
+ const TOKEN_REFRESH_BUFFER_MS = 60_000;
7
+ const DEFAULT_TOKEN_TTL_SECONDS = 50 * 60;
8
+ exports.QOREID_BASE_URLS = {
9
+ sandbox: 'https://api.qoreid.com',
10
+ live: 'https://api.qoreid.com',
11
+ };
12
+ exports.QOREID_BASE_URL = exports.QOREID_BASE_URLS.sandbox;
13
+ const normalizeQoreIDEnvironment = (environment) => environment === 'live' || environment === 'production' ? 'live' : 'sandbox';
14
+ exports.normalizeQoreIDEnvironment = normalizeQoreIDEnvironment;
15
+ const getQoreIDBaseUrl = (environment, baseUrlOverride) => (baseUrlOverride ?? exports.QOREID_BASE_URLS[(0, exports.normalizeQoreIDEnvironment)(environment)]).replace(/\/+$/, '');
16
+ exports.getQoreIDBaseUrl = getQoreIDBaseUrl;
17
+ const getQoreIDCredentials = (environment) => {
18
+ const normalizedEnvironment = (0, exports.normalizeQoreIDEnvironment)(environment);
19
+ return normalizedEnvironment === 'live'
20
+ ? {
21
+ clientId: process.env.QOREID_LIVE_CLIENT,
22
+ secret: process.env.QOREID_LIVE_SECRET,
23
+ }
24
+ : {
25
+ clientId: process.env.QOREID_CLIENT,
26
+ secret: process.env.QOREID_SECRET,
27
+ };
28
+ };
29
+ exports.getQoreIDCredentials = getQoreIDCredentials;
30
+ const buildQoreIDHeaders = (token) => ({
31
+ Accept: 'application/json',
32
+ 'Content-Type': 'application/json',
33
+ ...(token ? { authorization: `Bearer ${token}` } : {}),
34
+ });
35
+ exports.buildQoreIDHeaders = buildQoreIDHeaders;
36
+ const buildQoreIDRequestInit = (options) => ({
37
+ method: options.method ?? 'GET',
38
+ headers: (0, exports.buildQoreIDHeaders)(options.token),
39
+ body: options.body ? JSON.stringify(options.body) : undefined,
40
+ redirect: 'error',
41
+ });
42
+ exports.buildQoreIDRequestInit = buildQoreIDRequestInit;
43
+ const parseQoreIDResponse = async (response) => {
44
+ const text = await response.text();
45
+ if (!text) {
46
+ return null;
47
+ }
48
+ try {
49
+ return JSON.parse(text);
50
+ }
51
+ catch {
52
+ return text;
53
+ }
54
+ };
55
+ exports.parseQoreIDResponse = parseQoreIDResponse;
56
+ const isQoreIDTokenResponse = (value) => typeof value === 'object' &&
57
+ value !== null &&
58
+ (typeof value.accessToken === 'string' ||
59
+ typeof value.access_token === 'string');
60
+ exports.isQoreIDTokenResponse = isQoreIDTokenResponse;
61
+ const getQoreIDAccessTokenFromResponse = (response) => response.accessToken ?? response.access_token;
62
+ exports.getQoreIDAccessTokenFromResponse = getQoreIDAccessTokenFromResponse;
63
+ const getQoreIDExpiresInFromResponse = (response) => response.expiresIn ?? response.expires_in ?? DEFAULT_TOKEN_TTL_SECONDS;
64
+ exports.getQoreIDExpiresInFromResponse = getQoreIDExpiresInFromResponse;
65
+ const getQoreIDErrorMessage = (error) => error instanceof Error ? error.message : 'QoreID request failed';
66
+ exports.getQoreIDErrorMessage = getQoreIDErrorMessage;
67
+ const assertQoreIDCredentials = (credentials) => {
68
+ if (!credentials.clientId || !credentials.secret) {
69
+ throw new common_1.InternalServerErrorException('QoreID credentials are not configured');
70
+ }
71
+ return {
72
+ clientId: credentials.clientId,
73
+ secret: credentials.secret,
74
+ };
75
+ };
76
+ exports.assertQoreIDCredentials = assertQoreIDCredentials;
77
+ const requestQoreID = async ({ baseUrl, endpoint, options = {}, }) => {
78
+ let response;
79
+ try {
80
+ response = await fetch(`${baseUrl}${endpoint}`, (0, exports.buildQoreIDRequestInit)(options));
81
+ }
82
+ catch (error) {
83
+ throw new common_1.BadGatewayException({
84
+ message: 'QoreID request failed',
85
+ data: (0, exports.getQoreIDErrorMessage)(error),
86
+ });
87
+ }
88
+ const body = await (0, exports.parseQoreIDResponse)(response);
89
+ if (!response.ok) {
90
+ throw new response_helper_1.handleResponse(common_1.HttpStatus.INTERNAL_SERVER_ERROR, 'An error occurred with the verification service', body);
91
+ }
92
+ return body;
93
+ };
94
+ exports.requestQoreID = requestQoreID;
95
+ const fetchQoreIDToken = async (baseUrl, credentials) => {
96
+ const requiredCredentials = (0, exports.assertQoreIDCredentials)(credentials);
97
+ const response = await (0, exports.requestQoreID)({
98
+ baseUrl,
99
+ endpoint: '/token',
100
+ options: {
101
+ method: 'POST',
102
+ body: {
103
+ clientId: requiredCredentials.clientId,
104
+ secret: requiredCredentials.secret,
105
+ },
106
+ },
107
+ });
108
+ if (!(0, exports.isQoreIDTokenResponse)(response)) {
109
+ throw new response_helper_1.handleResponse(common_1.HttpStatus.INTERNAL_SERVER_ERROR, 'Invalid response from QoreID token endpoint', response);
110
+ }
111
+ const accessToken = (0, exports.getQoreIDAccessTokenFromResponse)(response);
112
+ if (!accessToken) {
113
+ throw new response_helper_1.handleResponse(common_1.HttpStatus.INTERNAL_SERVER_ERROR, 'Invalid response from QoreID token endpoint', response);
114
+ }
115
+ return {
116
+ accessToken,
117
+ expiresAt: Date.now() + (0, exports.getQoreIDExpiresInFromResponse)(response) * 1000,
118
+ };
119
+ };
120
+ exports.fetchQoreIDToken = fetchQoreIDToken;
121
+ const isQoreIDTokenFresh = (token) => Boolean(token && token.expiresAt - TOKEN_REFRESH_BUFFER_MS > Date.now());
122
+ exports.isQoreIDTokenFresh = isQoreIDTokenFresh;
123
+ const getValidQoreIDAccessToken = async (token, refreshToken) => {
124
+ if ((0, exports.isQoreIDTokenFresh)(token)) {
125
+ return token;
126
+ }
127
+ return refreshToken();
128
+ };
129
+ exports.getValidQoreIDAccessToken = getValidQoreIDAccessToken;
130
+ const buildQoreIDCacEndpoint = (version = 'v1', level = 'basic') => `/${version}/ng/identities/cac-${level}`;
131
+ exports.buildQoreIDCacEndpoint = buildQoreIDCacEndpoint;
132
+ //# sourceMappingURL=qoreid.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qoreid.helper.js","sourceRoot":"","sources":["../../../../src/lib/qoreid/config/qoreid.helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export type QoreIDEnvironment = 'sandbox' | 'live' | 'development' | 'production' | 'test' | 'provision';
2
+ export type NormalizedQoreIDEnvironment = 'sandbox' | 'live';
3
+ export type QoreIDCredentials = {
4
+ clientId?: string;
5
+ secret?: string;
6
+ };
7
+ export type QoreIDTokenResponse = {
8
+ accessToken?: string;
9
+ access_token?: string;
10
+ expiresIn?: number;
11
+ expires_in?: number;
12
+ };
13
+ export type QoreIDTokenCache = {
14
+ accessToken: string;
15
+ expiresAt: number;
16
+ };
17
+ export type QoreIDRequestOptions = {
18
+ method?: 'GET' | 'POST';
19
+ body?: unknown;
20
+ token?: string;
21
+ };
22
+ export type QoreIDCacVersion = 'v1' | 'v2' | 'v3';
23
+ export type QoreIDCacLevel = 'basic' | 'premium';
24
+ export type QoreIDVerifyCacOptions = {
25
+ version?: QoreIDCacVersion;
26
+ level?: QoreIDCacLevel;
27
+ };
28
+ export type QoreIDVerifyCacResponse = Record<string, unknown>;
29
+ export type QoreIDCreateSessionInput = Record<string, unknown>;
30
+ export type QoreIDCreateSessionResponse = Record<string, unknown>;
31
+ export type QoreIDRequestContext = {
32
+ baseUrl: string;
33
+ endpoint: string;
34
+ options?: QoreIDRequestOptions;
35
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=qoreid.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qoreid.types.js","sourceRoot":"","sources":["../../../../src/lib/qoreid/config/qoreid.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare class QoreIDModule {
2
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.QoreIDModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const qoreid_service_1 = require("./qoreid.service");
12
+ let QoreIDModule = class QoreIDModule {
13
+ };
14
+ exports.QoreIDModule = QoreIDModule;
15
+ exports.QoreIDModule = QoreIDModule = __decorate([
16
+ (0, common_1.Global)(),
17
+ (0, common_1.Module)({
18
+ providers: [qoreid_service_1.QoreIDService],
19
+ exports: [qoreid_service_1.QoreIDService],
20
+ })
21
+ ], QoreIDModule);
22
+ //# sourceMappingURL=qoreid.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qoreid.module.js","sourceRoot":"","sources":["../../../src/lib/qoreid/qoreid.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,qDAAiD;AAO1C,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,8BAAa,CAAC;QAC1B,OAAO,EAAE,CAAC,8BAAa,CAAC;KACzB,CAAC;GACW,YAAY,CAAG"}
@@ -0,0 +1,10 @@
1
+ import type { QoreIDCreateSessionInput, QoreIDCreateSessionResponse, QoreIDVerifyCacOptions, QoreIDVerifyCacResponse } from './config/qoreid.types';
2
+ export declare class QoreIDService {
3
+ private readonly baseUrl;
4
+ private readonly credentials;
5
+ private token?;
6
+ constructor();
7
+ getToken(): Promise<string>;
8
+ createSession(input: QoreIDCreateSessionInput): Promise<QoreIDCreateSessionResponse>;
9
+ verifyCacNumber(cacNumber: string, options?: QoreIDVerifyCacOptions): Promise<QoreIDVerifyCacResponse>;
10
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.QoreIDService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const qoreid_helper_1 = require("./config/qoreid.helper");
15
+ let QoreIDService = class QoreIDService {
16
+ baseUrl;
17
+ credentials;
18
+ token;
19
+ constructor() {
20
+ const environment = (process.env.QOREID_ENVIRONMENT ??
21
+ process.env.NODE_ENV ??
22
+ 'sandbox');
23
+ this.baseUrl = (0, qoreid_helper_1.getQoreIDBaseUrl)(environment, process.env.QOREID_BASE_URL);
24
+ this.credentials = (0, qoreid_helper_1.getQoreIDCredentials)(environment);
25
+ }
26
+ async getToken() {
27
+ this.token = await (0, qoreid_helper_1.getValidQoreIDAccessToken)(this.token, () => (0, qoreid_helper_1.fetchQoreIDToken)(this.baseUrl, this.credentials));
28
+ return this.token.accessToken;
29
+ }
30
+ async createSession(input) {
31
+ const token = await this.getToken();
32
+ return (0, qoreid_helper_1.requestQoreID)({
33
+ baseUrl: this.baseUrl,
34
+ endpoint: '/v1/sessions',
35
+ options: {
36
+ method: 'POST',
37
+ token,
38
+ body: input,
39
+ },
40
+ });
41
+ }
42
+ async verifyCacNumber(cacNumber, options = {}) {
43
+ const token = await this.getToken();
44
+ const version = options.version ?? (options.level === 'premium' ? 'v3' : 'v1');
45
+ return (0, qoreid_helper_1.requestQoreID)({
46
+ baseUrl: this.baseUrl,
47
+ endpoint: (0, qoreid_helper_1.buildQoreIDCacEndpoint)(version, options.level),
48
+ options: {
49
+ method: 'POST',
50
+ token,
51
+ body: {
52
+ regNumber: cacNumber,
53
+ },
54
+ },
55
+ });
56
+ }
57
+ };
58
+ exports.QoreIDService = QoreIDService;
59
+ exports.QoreIDService = QoreIDService = __decorate([
60
+ (0, common_1.Injectable)(),
61
+ __metadata("design:paramtypes", [])
62
+ ], QoreIDService);
63
+ //# sourceMappingURL=qoreid.service.js.map