kotanipay-sdk 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.
- package/README.md +329 -0
- package/dist/cjs/client/index.d.ts +2 -0
- package/dist/cjs/client/index.d.ts.map +1 -0
- package/dist/cjs/client/index.js +18 -0
- package/dist/cjs/client/index.js.map +1 -0
- package/dist/cjs/client/kotani-pay.client.d.ts +42 -0
- package/dist/cjs/client/kotani-pay.client.d.ts.map +1 -0
- package/dist/cjs/client/kotani-pay.client.js +61 -0
- package/dist/cjs/client/kotani-pay.client.js.map +1 -0
- package/dist/cjs/exceptions/index.d.ts +2 -0
- package/dist/cjs/exceptions/index.d.ts.map +1 -0
- package/dist/cjs/exceptions/index.js +18 -0
- package/dist/cjs/exceptions/index.js.map +1 -0
- package/dist/cjs/exceptions/kotani-pay.exception.d.ts +31 -0
- package/dist/cjs/exceptions/kotani-pay.exception.d.ts.map +1 -0
- package/dist/cjs/exceptions/kotani-pay.exception.js +49 -0
- package/dist/cjs/exceptions/kotani-pay.exception.js.map +1 -0
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/modules/auth/auth.service.d.ts +37 -0
- package/dist/cjs/modules/auth/auth.service.d.ts.map +1 -0
- package/dist/cjs/modules/auth/auth.service.js +74 -0
- package/dist/cjs/modules/auth/auth.service.js.map +1 -0
- package/dist/cjs/modules/auth/index.d.ts +2 -0
- package/dist/cjs/modules/auth/index.d.ts.map +1 -0
- package/dist/cjs/modules/auth/index.js +18 -0
- package/dist/cjs/modules/auth/index.js.map +1 -0
- package/dist/cjs/modules/index.d.ts +3 -0
- package/dist/cjs/modules/index.d.ts.map +1 -0
- package/dist/cjs/modules/index.js +19 -0
- package/dist/cjs/modules/index.js.map +1 -0
- package/dist/cjs/modules/integrator/index.d.ts +2 -0
- package/dist/cjs/modules/integrator/index.d.ts.map +1 -0
- package/dist/cjs/modules/integrator/index.js +18 -0
- package/dist/cjs/modules/integrator/index.js.map +1 -0
- package/dist/cjs/modules/integrator/integrator.service.d.ts +10 -0
- package/dist/cjs/modules/integrator/integrator.service.d.ts.map +1 -0
- package/dist/cjs/modules/integrator/integrator.service.js +33 -0
- package/dist/cjs/modules/integrator/integrator.service.js.map +1 -0
- package/dist/cjs/modules/mobile-money/mobile-money.service.d.ts +25 -0
- package/dist/cjs/modules/mobile-money/mobile-money.service.d.ts.map +1 -0
- package/dist/cjs/modules/mobile-money/mobile-money.service.js +70 -0
- package/dist/cjs/modules/mobile-money/mobile-money.service.js.map +1 -0
- package/dist/cjs/types/authentication.types.d.ts +38 -0
- package/dist/cjs/types/authentication.types.d.ts.map +1 -0
- package/dist/cjs/types/authentication.types.js +3 -0
- package/dist/cjs/types/authentication.types.js.map +1 -0
- package/dist/cjs/types/common.types.d.ts +23 -0
- package/dist/cjs/types/common.types.d.ts.map +1 -0
- package/dist/cjs/types/common.types.js +3 -0
- package/dist/cjs/types/common.types.js.map +1 -0
- package/dist/cjs/types/error.types.d.ts +12 -0
- package/dist/cjs/types/error.types.d.ts.map +1 -0
- package/dist/cjs/types/error.types.js +27 -0
- package/dist/cjs/types/error.types.js.map +1 -0
- package/dist/cjs/types/index.d.ts +6 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +22 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/integrator.types.d.ts +25 -0
- package/dist/cjs/types/integrator.types.d.ts.map +1 -0
- package/dist/cjs/types/integrator.types.js +3 -0
- package/dist/cjs/types/integrator.types.js.map +1 -0
- package/dist/cjs/types/mobile-money.types.d.ts +26 -0
- package/dist/cjs/types/mobile-money.types.d.ts.map +1 -0
- package/dist/cjs/types/mobile-money.types.js +4 -0
- package/dist/cjs/types/mobile-money.types.js.map +1 -0
- package/dist/cjs/utils/http-client.util.d.ts +32 -0
- package/dist/cjs/utils/http-client.util.d.ts.map +1 -0
- package/dist/cjs/utils/http-client.util.js +117 -0
- package/dist/cjs/utils/http-client.util.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +3 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +19 -0
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/validation.util.d.ts +7 -0
- package/dist/cjs/utils/validation.util.d.ts.map +1 -0
- package/dist/cjs/utils/validation.util.js +32 -0
- package/dist/cjs/utils/validation.util.js.map +1 -0
- package/dist/esm/client/index.d.ts +2 -0
- package/dist/esm/client/index.d.ts.map +1 -0
- package/dist/esm/client/index.js +2 -0
- package/dist/esm/client/index.js.map +1 -0
- package/dist/esm/client/kotani-pay.client.d.ts +42 -0
- package/dist/esm/client/kotani-pay.client.d.ts.map +1 -0
- package/dist/esm/client/kotani-pay.client.js +57 -0
- package/dist/esm/client/kotani-pay.client.js.map +1 -0
- package/dist/esm/exceptions/index.d.ts +2 -0
- package/dist/esm/exceptions/index.d.ts.map +1 -0
- package/dist/esm/exceptions/index.js +2 -0
- package/dist/esm/exceptions/index.js.map +1 -0
- package/dist/esm/exceptions/kotani-pay.exception.d.ts +31 -0
- package/dist/esm/exceptions/kotani-pay.exception.d.ts.map +1 -0
- package/dist/esm/exceptions/kotani-pay.exception.js +43 -0
- package/dist/esm/exceptions/kotani-pay.exception.js.map +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/modules/auth/auth.service.d.ts +37 -0
- package/dist/esm/modules/auth/auth.service.d.ts.map +1 -0
- package/dist/esm/modules/auth/auth.service.js +70 -0
- package/dist/esm/modules/auth/auth.service.js.map +1 -0
- package/dist/esm/modules/auth/index.d.ts +2 -0
- package/dist/esm/modules/auth/index.d.ts.map +1 -0
- package/dist/esm/modules/auth/index.js +2 -0
- package/dist/esm/modules/auth/index.js.map +1 -0
- package/dist/esm/modules/index.d.ts +3 -0
- package/dist/esm/modules/index.d.ts.map +1 -0
- package/dist/esm/modules/index.js +3 -0
- package/dist/esm/modules/index.js.map +1 -0
- package/dist/esm/modules/integrator/index.d.ts +2 -0
- package/dist/esm/modules/integrator/index.d.ts.map +1 -0
- package/dist/esm/modules/integrator/index.js +2 -0
- package/dist/esm/modules/integrator/index.js.map +1 -0
- package/dist/esm/modules/integrator/integrator.service.d.ts +10 -0
- package/dist/esm/modules/integrator/integrator.service.d.ts.map +1 -0
- package/dist/esm/modules/integrator/integrator.service.js +29 -0
- package/dist/esm/modules/integrator/integrator.service.js.map +1 -0
- package/dist/esm/modules/mobile-money/mobile-money.service.d.ts +25 -0
- package/dist/esm/modules/mobile-money/mobile-money.service.d.ts.map +1 -0
- package/dist/esm/modules/mobile-money/mobile-money.service.js +66 -0
- package/dist/esm/modules/mobile-money/mobile-money.service.js.map +1 -0
- package/dist/esm/types/authentication.types.d.ts +38 -0
- package/dist/esm/types/authentication.types.d.ts.map +1 -0
- package/dist/esm/types/authentication.types.js +2 -0
- package/dist/esm/types/authentication.types.js.map +1 -0
- package/dist/esm/types/common.types.d.ts +23 -0
- package/dist/esm/types/common.types.d.ts.map +1 -0
- package/dist/esm/types/common.types.js +2 -0
- package/dist/esm/types/common.types.js.map +1 -0
- package/dist/esm/types/error.types.d.ts +12 -0
- package/dist/esm/types/error.types.d.ts.map +1 -0
- package/dist/esm/types/error.types.js +21 -0
- package/dist/esm/types/error.types.js.map +1 -0
- package/dist/esm/types/index.d.ts +6 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +6 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/integrator.types.d.ts +25 -0
- package/dist/esm/types/integrator.types.d.ts.map +1 -0
- package/dist/esm/types/integrator.types.js +2 -0
- package/dist/esm/types/integrator.types.js.map +1 -0
- package/dist/esm/types/mobile-money.types.d.ts +26 -0
- package/dist/esm/types/mobile-money.types.d.ts.map +1 -0
- package/dist/esm/types/mobile-money.types.js +3 -0
- package/dist/esm/types/mobile-money.types.js.map +1 -0
- package/dist/esm/utils/http-client.util.d.ts +32 -0
- package/dist/esm/utils/http-client.util.d.ts.map +1 -0
- package/dist/esm/utils/http-client.util.js +110 -0
- package/dist/esm/utils/http-client.util.js.map +1 -0
- package/dist/esm/utils/index.d.ts +3 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +3 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/validation.util.d.ts +7 -0
- package/dist/esm/utils/validation.util.d.ts.map +1 -0
- package/dist/esm/utils/validation.util.js +28 -0
- package/dist/esm/utils/validation.util.js.map +1 -0
- package/dist/types/client/index.d.ts +2 -0
- package/dist/types/client/index.d.ts.map +1 -0
- package/dist/types/client/kotani-pay.client.d.ts +42 -0
- package/dist/types/client/kotani-pay.client.d.ts.map +1 -0
- package/dist/types/exceptions/index.d.ts +2 -0
- package/dist/types/exceptions/index.d.ts.map +1 -0
- package/dist/types/exceptions/kotani-pay.exception.d.ts +31 -0
- package/dist/types/exceptions/kotani-pay.exception.d.ts.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/modules/auth/auth.service.d.ts +37 -0
- package/dist/types/modules/auth/auth.service.d.ts.map +1 -0
- package/dist/types/modules/auth/index.d.ts +2 -0
- package/dist/types/modules/auth/index.d.ts.map +1 -0
- package/dist/types/modules/index.d.ts +3 -0
- package/dist/types/modules/index.d.ts.map +1 -0
- package/dist/types/modules/integrator/index.d.ts +2 -0
- package/dist/types/modules/integrator/index.d.ts.map +1 -0
- package/dist/types/modules/integrator/integrator.service.d.ts +10 -0
- package/dist/types/modules/integrator/integrator.service.d.ts.map +1 -0
- package/dist/types/modules/mobile-money/mobile-money.service.d.ts +25 -0
- package/dist/types/modules/mobile-money/mobile-money.service.d.ts.map +1 -0
- package/dist/types/types/authentication.types.d.ts +38 -0
- package/dist/types/types/authentication.types.d.ts.map +1 -0
- package/dist/types/types/common.types.d.ts +23 -0
- package/dist/types/types/common.types.d.ts.map +1 -0
- package/dist/types/types/error.types.d.ts +12 -0
- package/dist/types/types/error.types.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +6 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/types/integrator.types.d.ts +25 -0
- package/dist/types/types/integrator.types.d.ts.map +1 -0
- package/dist/types/types/mobile-money.types.d.ts +26 -0
- package/dist/types/types/mobile-money.types.d.ts.map +1 -0
- package/dist/types/utils/http-client.util.d.ts +32 -0
- package/dist/types/utils/http-client.util.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +3 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/validation.util.d.ts +7 -0
- package/dist/types/utils/validation.util.d.ts.map +1 -0
- package/package.json +61 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"http-client.util.d.ts","sourceRoot":"","sources":["../../../src/utils/http-client.util.ts"],"names":[],"mappings":"AAAA,OAAc,EAAiB,kBAAkB,EAAyD,MAAM,OAAO,CAAC;AAExH,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,MAAM,EAAE,eAAe;IAyBnC;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,QAAQ,GAAG,KAAgB,GAAG,IAAI;IAKpE;;OAEG;IACH,cAAc,IAAI,IAAI;IAKtB;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,SAAS;IAIlC,OAAO,CAAC,iBAAiB;IAuBnB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IASlD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAI5D,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIxE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIrE,SAAS,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAOrD,OAAO,CAAC,WAAW;CA+BpB"}
|
@@ -0,0 +1,117 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.HttpClientUtil = void 0;
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
8
|
+
const error_types_1 = require("../types/error.types");
|
9
|
+
class HttpClientUtil {
|
10
|
+
constructor(config) {
|
11
|
+
this.config = config;
|
12
|
+
const baseURL = config.baseUrl || (config.environment === 'production'
|
13
|
+
? 'https://api.kotanipay.io'
|
14
|
+
: 'https://sandbox-api.kotanipay.io');
|
15
|
+
this.client = axios_1.default.create({
|
16
|
+
baseURL,
|
17
|
+
timeout: config.timeout || 30000,
|
18
|
+
headers: {
|
19
|
+
'Content-Type': 'application/json',
|
20
|
+
'Accept': 'application/json',
|
21
|
+
'User-Agent': '@kotani-pay/sdk/1.0.0',
|
22
|
+
},
|
23
|
+
});
|
24
|
+
// Set initial auth token if provided (for API key usage)
|
25
|
+
if (config.apiKey) {
|
26
|
+
this.setAuthToken(config.apiKey, 'Bearer');
|
27
|
+
}
|
28
|
+
this.setupInterceptors();
|
29
|
+
}
|
30
|
+
/**
|
31
|
+
* Set authentication token (JWT or API Key)
|
32
|
+
*/
|
33
|
+
setAuthToken(token, type = 'Bearer') {
|
34
|
+
this.authToken = token;
|
35
|
+
this.client.defaults.headers.common['Authorization'] = `${type} ${token}`;
|
36
|
+
}
|
37
|
+
/**
|
38
|
+
* Clear authentication token
|
39
|
+
*/
|
40
|
+
clearAuthToken() {
|
41
|
+
this.authToken = undefined;
|
42
|
+
delete this.client.defaults.headers.common['Authorization'];
|
43
|
+
}
|
44
|
+
/**
|
45
|
+
* Get current auth token
|
46
|
+
*/
|
47
|
+
getAuthToken() {
|
48
|
+
return this.authToken;
|
49
|
+
}
|
50
|
+
setupInterceptors() {
|
51
|
+
this.client.interceptors.request.use((config) => {
|
52
|
+
console.debug(`Making request: ${config.method?.toUpperCase()} ${config.url}`);
|
53
|
+
return config;
|
54
|
+
}, (error) => {
|
55
|
+
console.error('Request error:', error);
|
56
|
+
return Promise.reject(error);
|
57
|
+
});
|
58
|
+
this.client.interceptors.response.use((response) => {
|
59
|
+
console.debug(`Response: ${response.status} ${response.statusText}`);
|
60
|
+
return response;
|
61
|
+
}, (error) => {
|
62
|
+
return Promise.reject(this.handleError(error));
|
63
|
+
});
|
64
|
+
}
|
65
|
+
async request(config) {
|
66
|
+
try {
|
67
|
+
const response = await this.client.request(config);
|
68
|
+
return response.data;
|
69
|
+
}
|
70
|
+
catch (error) {
|
71
|
+
throw this.handleError(error);
|
72
|
+
}
|
73
|
+
}
|
74
|
+
async get(url, config) {
|
75
|
+
return this.request({ ...config, method: 'GET', url });
|
76
|
+
}
|
77
|
+
async post(url, data, config) {
|
78
|
+
return this.request({ ...config, method: 'POST', url, data });
|
79
|
+
}
|
80
|
+
async put(url, data, config) {
|
81
|
+
return this.request({ ...config, method: 'PUT', url, data });
|
82
|
+
}
|
83
|
+
async delete(url, config) {
|
84
|
+
return this.request({ ...config, method: 'DELETE', url });
|
85
|
+
}
|
86
|
+
getConfig() {
|
87
|
+
return {
|
88
|
+
environment: this.config.environment,
|
89
|
+
baseURL: this.client.defaults.baseURL || ''
|
90
|
+
};
|
91
|
+
}
|
92
|
+
handleError(error) {
|
93
|
+
console.error('HTTP Error:', error);
|
94
|
+
if (error.response) {
|
95
|
+
const { status, data } = error.response;
|
96
|
+
const message = data?.message || data?.error || error.message;
|
97
|
+
switch (status) {
|
98
|
+
case 400:
|
99
|
+
return new error_types_1.ValidationError(message);
|
100
|
+
case 401:
|
101
|
+
return new error_types_1.AuthenticationError(message);
|
102
|
+
case 403:
|
103
|
+
return new error_types_1.KotaniPayError(message, status, 'FORBIDDEN');
|
104
|
+
case 404:
|
105
|
+
return new error_types_1.KotaniPayError(message, status, 'NOT_FOUND');
|
106
|
+
default:
|
107
|
+
return new error_types_1.KotaniPayError(message, status, data?.code);
|
108
|
+
}
|
109
|
+
}
|
110
|
+
if (error.code === 'ECONNABORTED') {
|
111
|
+
return new error_types_1.KotaniPayError('Request timeout', 408, 'TIMEOUT');
|
112
|
+
}
|
113
|
+
return new error_types_1.KotaniPayError(error.message || 'An unexpected error occurred', 500, 'NETWORK_ERROR');
|
114
|
+
}
|
115
|
+
}
|
116
|
+
exports.HttpClientUtil = HttpClientUtil;
|
117
|
+
//# sourceMappingURL=http-client.util.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"http-client.util.js","sourceRoot":"","sources":["../../../src/utils/http-client.util.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC"}
|
@@ -0,0 +1,19 @@
|
|
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("./http-client.util"), exports);
|
18
|
+
__exportStar(require("./validation.util"), exports);
|
19
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,oDAAkC"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
export declare class ValidationUtil {
|
2
|
+
static validateEmail(email: string): void;
|
3
|
+
static validatePhone(phone: string): void;
|
4
|
+
static validateCountryCode(countryCode: string): void;
|
5
|
+
static validateRequiredFields<T>(obj: T, requiredFields: (keyof T)[]): void;
|
6
|
+
}
|
7
|
+
//# sourceMappingURL=validation.util.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"validation.util.d.ts","sourceRoot":"","sources":["../../../src/utils/validation.util.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc;IACzB,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOzC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAOzC,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAOrD,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,IAAI;CAQ5E"}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.ValidationUtil = void 0;
|
4
|
+
const error_types_1 = require("../types/error.types");
|
5
|
+
class ValidationUtil {
|
6
|
+
static validateEmail(email) {
|
7
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
8
|
+
if (!emailRegex.test(email)) {
|
9
|
+
throw new error_types_1.ValidationError('Invalid email format');
|
10
|
+
}
|
11
|
+
}
|
12
|
+
static validatePhone(phone) {
|
13
|
+
const phoneRegex = /^\+?[\d\s\-\(\)]+$/;
|
14
|
+
if (!phoneRegex.test(phone)) {
|
15
|
+
throw new error_types_1.ValidationError('Invalid phone number format');
|
16
|
+
}
|
17
|
+
}
|
18
|
+
static validateCountryCode(countryCode) {
|
19
|
+
const countryCodeRegex = /^[A-Z]{2}$/i;
|
20
|
+
if (!countryCodeRegex.test(countryCode)) {
|
21
|
+
throw new error_types_1.ValidationError('Country code must be a 2-letter ISO code');
|
22
|
+
}
|
23
|
+
}
|
24
|
+
static validateRequiredFields(obj, requiredFields) {
|
25
|
+
const missingFields = requiredFields.filter(field => !obj[field]);
|
26
|
+
if (missingFields.length > 0) {
|
27
|
+
throw new error_types_1.ValidationError(`Missing required fields: ${missingFields.join(', ')}`);
|
28
|
+
}
|
29
|
+
}
|
30
|
+
}
|
31
|
+
exports.ValidationUtil = ValidationUtil;
|
32
|
+
//# sourceMappingURL=validation.util.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"validation.util.js","sourceRoot":"","sources":["../../../src/utils/validation.util.ts"],"names":[],"mappings":";;;AAAA,sDAAuD;AAEvD,MAAa,cAAc;IACzB,MAAM,CAAC,aAAa,CAAC,KAAa;QAChC,MAAM,UAAU,GAAG,4BAA4B,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,6BAAe,CAAC,sBAAsB,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,KAAa;QAChC,MAAM,UAAU,GAAG,oBAAoB,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,6BAAe,CAAC,6BAA6B,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,mBAAmB,CAAC,WAAmB;QAC5C,MAAM,gBAAgB,GAAG,aAAa,CAAC;QACvC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,6BAAe,CAAC,0CAA0C,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED,MAAM,CAAC,sBAAsB,CAAI,GAAM,EAAE,cAA2B;QAClE,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAClE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,6BAAe,CACvB,4BAA4B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvD,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AA9BD,wCA8BC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import { IntegratorService } from '../modules/integrator';
|
2
|
+
import { AuthService } from '../modules/auth';
|
3
|
+
import { MobileMoneyService } from '../modules/mobile-money/mobile-money.service';
|
4
|
+
import { KotaniPayConfig, AuthenticatedSession } from '../types';
|
5
|
+
export declare class KotaniPayClient {
|
6
|
+
private httpClient;
|
7
|
+
integrator: IntegratorService;
|
8
|
+
auth: AuthService;
|
9
|
+
mobileMoney: MobileMoneyService;
|
10
|
+
constructor(config: KotaniPayConfig);
|
11
|
+
/**
|
12
|
+
* Initialize client with session data after user login
|
13
|
+
*/
|
14
|
+
initializeWithSession(sessionData: AuthenticatedSession): void;
|
15
|
+
/**
|
16
|
+
* Initialize client with API key (for authenticated operations)
|
17
|
+
*/
|
18
|
+
initializeWithApiKey(apiKey: string): void;
|
19
|
+
healthCheck(): Promise<{
|
20
|
+
status: string;
|
21
|
+
timestamp: string;
|
22
|
+
}>;
|
23
|
+
getConfig(): {
|
24
|
+
environment: string;
|
25
|
+
baseURL: string;
|
26
|
+
};
|
27
|
+
getVersion(): string;
|
28
|
+
/**
|
29
|
+
* Check if client is authenticated
|
30
|
+
*/
|
31
|
+
isAuthenticated(): boolean;
|
32
|
+
/**
|
33
|
+
* Get authentication status with detailed info
|
34
|
+
*/
|
35
|
+
getAuthStatus(): {
|
36
|
+
isAuthenticated: boolean;
|
37
|
+
hasSession: boolean;
|
38
|
+
hasApiKey: boolean;
|
39
|
+
tokenInfo?: any;
|
40
|
+
};
|
41
|
+
}
|
42
|
+
//# sourceMappingURL=kotani-pay.client.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"kotani-pay.client.d.ts","sourceRoot":"","sources":["../../../src/client/kotani-pay.client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEjE,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAiB;IAC5B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,kBAAkB,CAAC;gBAE3B,MAAM,EAAE,eAAe;IAUnC;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,oBAAoB,GAAG,IAAI;IAI9D;;OAEG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpC,WAAW,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAKnE,SAAS,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAIrD,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,aAAa,IAAI;QACf,eAAe,EAAE,OAAO,CAAC;QACzB,UAAU,EAAE,OAAO,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,GAAG,CAAC;KACjB;CAYF"}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import { HttpClientUtil } from '../utils/http-client.util';
|
2
|
+
import { IntegratorService } from '../modules/integrator';
|
3
|
+
import { AuthService } from '../modules/auth';
|
4
|
+
import { MobileMoneyService } from '../modules/mobile-money/mobile-money.service';
|
5
|
+
export class KotaniPayClient {
|
6
|
+
constructor(config) {
|
7
|
+
// Create HTTP client with config
|
8
|
+
this.httpClient = new HttpClientUtil(config);
|
9
|
+
// Initialize services
|
10
|
+
this.integrator = new IntegratorService(this.httpClient);
|
11
|
+
this.auth = new AuthService(this.httpClient);
|
12
|
+
this.mobileMoney = new MobileMoneyService(this.httpClient);
|
13
|
+
}
|
14
|
+
/**
|
15
|
+
* Initialize client with session data after user login
|
16
|
+
*/
|
17
|
+
initializeWithSession(sessionData) {
|
18
|
+
this.auth.setSession(sessionData);
|
19
|
+
}
|
20
|
+
/**
|
21
|
+
* Initialize client with API key (for authenticated operations)
|
22
|
+
*/
|
23
|
+
initializeWithApiKey(apiKey) {
|
24
|
+
this.httpClient.setAuthToken(apiKey, 'Bearer');
|
25
|
+
}
|
26
|
+
async healthCheck() {
|
27
|
+
const response = await this.httpClient.get('/health');
|
28
|
+
return response;
|
29
|
+
}
|
30
|
+
getConfig() {
|
31
|
+
return this.httpClient.getConfig();
|
32
|
+
}
|
33
|
+
getVersion() {
|
34
|
+
return '1.0.0';
|
35
|
+
}
|
36
|
+
/**
|
37
|
+
* Check if client is authenticated
|
38
|
+
*/
|
39
|
+
isAuthenticated() {
|
40
|
+
return this.auth.isAuthenticated() || !!this.httpClient.getAuthToken();
|
41
|
+
}
|
42
|
+
/**
|
43
|
+
* Get authentication status with detailed info
|
44
|
+
*/
|
45
|
+
getAuthStatus() {
|
46
|
+
const hasSession = !!this.auth.getSession();
|
47
|
+
const hasApiKey = !!this.httpClient.getAuthToken();
|
48
|
+
const tokenInfo = this.auth.getTokenInfo ? this.auth.getTokenInfo() : null;
|
49
|
+
return {
|
50
|
+
isAuthenticated: this.isAuthenticated(),
|
51
|
+
hasSession,
|
52
|
+
hasApiKey,
|
53
|
+
tokenInfo
|
54
|
+
};
|
55
|
+
}
|
56
|
+
}
|
57
|
+
//# sourceMappingURL=kotani-pay.client.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"kotani-pay.client.js","sourceRoot":"","sources":["../../../src/client/kotani-pay.client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAGlF,MAAM,OAAO,eAAe;IAM1B,YAAY,MAAuB;QACjC,iCAAiC;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAE7C,sBAAsB;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,WAAiC;QACrD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,MAAc;QACjC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAwC,SAAS,CAAC,CAAC;QAC7F,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;IACrC,CAAC;IAED,UAAU;QACR,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,aAAa;QAMX,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3E,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE;YACvC,UAAU;YACV,SAAS;YACT,SAAS;SACV,CAAC;IACJ,CAAC;CACF"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/exceptions/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
export declare enum HttpStatus {
|
2
|
+
OK = 200,
|
3
|
+
CREATED = 201,
|
4
|
+
BAD_REQUEST = 400,
|
5
|
+
UNAUTHORIZED = 401,
|
6
|
+
FORBIDDEN = 403,
|
7
|
+
NOT_FOUND = 404,
|
8
|
+
INTERNAL_SERVER_ERROR = 500
|
9
|
+
}
|
10
|
+
export declare class KotaniPayException extends Error {
|
11
|
+
readonly status: HttpStatus;
|
12
|
+
readonly errorCode?: string;
|
13
|
+
readonly details?: any;
|
14
|
+
readonly timestamp: string;
|
15
|
+
constructor(message: string, status?: HttpStatus, errorCode?: string, details?: any);
|
16
|
+
toJSON(): {
|
17
|
+
name: string;
|
18
|
+
message: string;
|
19
|
+
status: HttpStatus;
|
20
|
+
errorCode: string | undefined;
|
21
|
+
details: any;
|
22
|
+
timestamp: string;
|
23
|
+
};
|
24
|
+
}
|
25
|
+
export declare class ValidationException extends KotaniPayException {
|
26
|
+
constructor(message: string, details?: any);
|
27
|
+
}
|
28
|
+
export declare class AuthenticationException extends KotaniPayException {
|
29
|
+
constructor(message?: string);
|
30
|
+
}
|
31
|
+
//# sourceMappingURL=kotani-pay.exception.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"kotani-pay.exception.d.ts","sourceRoot":"","sources":["../../../src/exceptions/kotani-pay.exception.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACpB,EAAE,MAAM;IACR,OAAO,MAAM;IACb,WAAW,MAAM;IACjB,YAAY,MAAM;IAClB,SAAS,MAAM;IACf,SAAS,MAAM;IACf,qBAAqB,MAAM;CAC5B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,MAAM,EAAE,UAAU,CAAC;IACnC,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnC,SAAgB,OAAO,CAAC,EAAE,GAAG,CAAC;IAC9B,SAAgB,SAAS,EAAE,MAAM,CAAC;gBAGhC,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,UAA6C,EACrD,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,GAAG;IAUf,MAAM;;;;;;;;CAUP;AAED,qBAAa,mBAAoB,SAAQ,kBAAkB;gBAC7C,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAI3C;AAED,qBAAa,uBAAwB,SAAQ,kBAAkB;gBACjD,OAAO,GAAE,MAAgC;CAItD"}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
export var HttpStatus;
|
2
|
+
(function (HttpStatus) {
|
3
|
+
HttpStatus[HttpStatus["OK"] = 200] = "OK";
|
4
|
+
HttpStatus[HttpStatus["CREATED"] = 201] = "CREATED";
|
5
|
+
HttpStatus[HttpStatus["BAD_REQUEST"] = 400] = "BAD_REQUEST";
|
6
|
+
HttpStatus[HttpStatus["UNAUTHORIZED"] = 401] = "UNAUTHORIZED";
|
7
|
+
HttpStatus[HttpStatus["FORBIDDEN"] = 403] = "FORBIDDEN";
|
8
|
+
HttpStatus[HttpStatus["NOT_FOUND"] = 404] = "NOT_FOUND";
|
9
|
+
HttpStatus[HttpStatus["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
|
10
|
+
})(HttpStatus || (HttpStatus = {}));
|
11
|
+
export class KotaniPayException extends Error {
|
12
|
+
constructor(message, status = HttpStatus.INTERNAL_SERVER_ERROR, errorCode, details) {
|
13
|
+
super(message);
|
14
|
+
this.name = 'KotaniPayException';
|
15
|
+
this.status = status;
|
16
|
+
this.errorCode = errorCode;
|
17
|
+
this.details = details;
|
18
|
+
this.timestamp = new Date().toISOString();
|
19
|
+
}
|
20
|
+
toJSON() {
|
21
|
+
return {
|
22
|
+
name: this.name,
|
23
|
+
message: this.message,
|
24
|
+
status: this.status,
|
25
|
+
errorCode: this.errorCode,
|
26
|
+
details: this.details,
|
27
|
+
timestamp: this.timestamp,
|
28
|
+
};
|
29
|
+
}
|
30
|
+
}
|
31
|
+
export class ValidationException extends KotaniPayException {
|
32
|
+
constructor(message, details) {
|
33
|
+
super(message, HttpStatus.BAD_REQUEST, 'VALIDATION_ERROR', details);
|
34
|
+
this.name = 'ValidationException';
|
35
|
+
}
|
36
|
+
}
|
37
|
+
export class AuthenticationException extends KotaniPayException {
|
38
|
+
constructor(message = 'Authentication failed') {
|
39
|
+
super(message, HttpStatus.UNAUTHORIZED, 'AUTHENTICATION_ERROR');
|
40
|
+
this.name = 'AuthenticationException';
|
41
|
+
}
|
42
|
+
}
|
43
|
+
//# sourceMappingURL=kotani-pay.exception.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"kotani-pay.exception.js","sourceRoot":"","sources":["../../../src/exceptions/kotani-pay.exception.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,UAQX;AARD,WAAY,UAAU;IACpB,yCAAQ,CAAA;IACR,mDAAa,CAAA;IACb,2DAAiB,CAAA;IACjB,6DAAkB,CAAA;IAClB,uDAAe,CAAA;IACf,uDAAe,CAAA;IACf,+EAA2B,CAAA;AAC7B,CAAC,EARW,UAAU,KAAV,UAAU,QAQrB;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAM3C,YACE,OAAe,EACf,SAAqB,UAAU,CAAC,qBAAqB,EACrD,SAAkB,EAClB,OAAa;QAEb,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,kBAAkB;IACzD,YAAY,OAAe,EAAE,OAAa;QACxC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,kBAAkB;IAC7D,YAAY,UAAkB,uBAAuB;QACnD,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC"}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import { HttpClientUtil } from '../../utils/http-client.util';
|
2
|
+
import { LoginResponse, ApiKeyResponse, GenerateApiKeyRequest, AuthenticatedSession } from '../../types';
|
3
|
+
export declare class AuthService {
|
4
|
+
private httpClient;
|
5
|
+
private session?;
|
6
|
+
constructor(httpClient: HttpClientUtil);
|
7
|
+
/**
|
8
|
+
* Login with email - sends login link to email
|
9
|
+
*/
|
10
|
+
login(email: string): Promise<LoginResponse>;
|
11
|
+
/**
|
12
|
+
* Set session data after user clicks login link
|
13
|
+
*/
|
14
|
+
setSession(sessionData: AuthenticatedSession): void;
|
15
|
+
/**
|
16
|
+
* Generate API key using the JWT token from login
|
17
|
+
*/
|
18
|
+
generateApiKey(request?: GenerateApiKeyRequest): Promise<ApiKeyResponse>;
|
19
|
+
/**
|
20
|
+
* Refresh the JWT token using refresh token
|
21
|
+
*/
|
22
|
+
refreshToken(): Promise<AuthenticatedSession>;
|
23
|
+
/**
|
24
|
+
* Get current session data
|
25
|
+
*/
|
26
|
+
getSession(): AuthenticatedSession | undefined;
|
27
|
+
getTokenInfo(): any;
|
28
|
+
/**
|
29
|
+
* Check if user is authenticated
|
30
|
+
*/
|
31
|
+
isAuthenticated(): boolean;
|
32
|
+
/**
|
33
|
+
* Logout and clear session
|
34
|
+
*/
|
35
|
+
logout(): void;
|
36
|
+
}
|
37
|
+
//# sourceMappingURL=auth.service.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../../src/modules/auth/auth.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EACL,aAAa,EAEb,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAErB,qBAAa,WAAW;IAGV,OAAO,CAAC,UAAU;IAF9B,OAAO,CAAC,OAAO,CAAC,CAAuB;gBAEnB,UAAU,EAAE,cAAc;IAE9C;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAelD;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,oBAAoB,GAAG,IAAI;IAMnD;;OAEG;IACG,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC;IAY9E;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAgBnD;;OAEG;IACH,UAAU,IAAI,oBAAoB,GAAG,SAAS;IAI7C,YAAY,IAAI,GAAG;IAIpB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,MAAM,IAAI,IAAI;CAIf"}
|
@@ -0,0 +1,70 @@
|
|
1
|
+
import { ValidationUtil } from '../../utils/validation.util';
|
2
|
+
export class AuthService {
|
3
|
+
constructor(httpClient) {
|
4
|
+
this.httpClient = httpClient;
|
5
|
+
}
|
6
|
+
/**
|
7
|
+
* Login with email - sends login link to email
|
8
|
+
*/
|
9
|
+
async login(email) {
|
10
|
+
if (!email) {
|
11
|
+
throw new Error('Email is required');
|
12
|
+
}
|
13
|
+
ValidationUtil.validateEmail(email);
|
14
|
+
const response = await this.httpClient.post('/api/v3/auth/login', { email });
|
15
|
+
return response;
|
16
|
+
}
|
17
|
+
/**
|
18
|
+
* Set session data after user clicks login link
|
19
|
+
*/
|
20
|
+
setSession(sessionData) {
|
21
|
+
this.session = sessionData;
|
22
|
+
// Update HTTP client to use the JWT token
|
23
|
+
this.httpClient.setAuthToken(sessionData.token);
|
24
|
+
}
|
25
|
+
/**
|
26
|
+
* Generate API key using the JWT token from login
|
27
|
+
*/
|
28
|
+
async generateApiKey(request) {
|
29
|
+
if (!this.session) {
|
30
|
+
throw new Error('No active session. Please login first and set session data.');
|
31
|
+
}
|
32
|
+
const response = await this.httpClient.get('/api/v3/auth/api-key/secure');
|
33
|
+
return response;
|
34
|
+
}
|
35
|
+
/**
|
36
|
+
* Refresh the JWT token using refresh token
|
37
|
+
*/
|
38
|
+
async refreshToken() {
|
39
|
+
if (!this.session?.refresh_token) {
|
40
|
+
throw new Error('No refresh token available. Please login again.');
|
41
|
+
}
|
42
|
+
const response = await this.httpClient.post('/api/v3/auth/refresh', { refresh_token: this.session.refresh_token });
|
43
|
+
this.session = response.data;
|
44
|
+
this.httpClient.setAuthToken(this.session.token);
|
45
|
+
return this.session;
|
46
|
+
}
|
47
|
+
/**
|
48
|
+
* Get current session data
|
49
|
+
*/
|
50
|
+
getSession() {
|
51
|
+
return this.session;
|
52
|
+
}
|
53
|
+
getTokenInfo() {
|
54
|
+
return this.session?.token;
|
55
|
+
}
|
56
|
+
/**
|
57
|
+
* Check if user is authenticated
|
58
|
+
*/
|
59
|
+
isAuthenticated() {
|
60
|
+
return !!this.session?.token;
|
61
|
+
}
|
62
|
+
/**
|
63
|
+
* Logout and clear session
|
64
|
+
*/
|
65
|
+
logout() {
|
66
|
+
this.session = undefined;
|
67
|
+
this.httpClient.clearAuthToken();
|
68
|
+
}
|
69
|
+
}
|
70
|
+
//# sourceMappingURL=auth.service.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAS7D,MAAM,OAAO,WAAW;IAGtB,YAAoB,UAA0B;QAA1B,eAAU,GAAV,UAAU,CAAgB;IAAG,CAAC;IAElD;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAa;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACzC,oBAAoB,EACpB,EAAE,KAAK,EAAE,CACV,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,WAAiC;QAC1C,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC;QAC3B,0CAA0C;QAC1C,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAA+B;QAClD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CACxC,6BAA6B,CAC9B,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACzC,sBAAsB,EACtB,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAC9C,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEjD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEA,YAAY;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;IACnC,CAAC;CACF"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/modules/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/integrator/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/integrator/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|