@lina-openx/react-native-lina-pay-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/LinaPaySdk.podspec +20 -0
- package/README.md +522 -0
- package/android/build.gradle +77 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/com/linapaysdk/LinaPaySdkModule.kt +18 -0
- package/android/src/main/java/com/linapaysdk/LinaPaySdkPackage.kt +17 -0
- package/ios/LinaPaySdk.h +5 -0
- package/ios/LinaPaySdk.mm +16 -0
- package/lib/module/config/environment.js +61 -0
- package/lib/module/config/environment.js.map +1 -0
- package/lib/module/index.js +142 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/services/auth.service.js +73 -0
- package/lib/module/services/auth.service.js.map +1 -0
- package/lib/module/services/consent.service.js +49 -0
- package/lib/module/services/consent.service.js.map +1 -0
- package/lib/module/services/participants.service.js +71 -0
- package/lib/module/services/participants.service.js.map +1 -0
- package/lib/module/services/payment.service.js +39 -0
- package/lib/module/services/payment.service.js.map +1 -0
- package/lib/module/types/auth.types.js +2 -0
- package/lib/module/types/auth.types.js.map +1 -0
- package/lib/module/types/consent.types.js +2 -0
- package/lib/module/types/consent.types.js.map +1 -0
- package/lib/module/types/index.js +2 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/types/participants.types.js +2 -0
- package/lib/module/types/participants.types.js.map +1 -0
- package/lib/module/types/payment.types.js +2 -0
- package/lib/module/types/payment.types.js.map +1 -0
- package/lib/module/utils/consent.utils.js +168 -0
- package/lib/module/utils/consent.utils.js.map +1 -0
- package/lib/module/utils/http.utils.js +58 -0
- package/lib/module/utils/http.utils.js.map +1 -0
- package/lib/module/utils/payment.utils.js +27 -0
- package/lib/module/utils/payment.utils.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/config/environment.d.ts +38 -0
- package/lib/typescript/src/config/environment.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +108 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/services/auth.service.d.ts +13 -0
- package/lib/typescript/src/services/auth.service.d.ts.map +1 -0
- package/lib/typescript/src/services/consent.service.d.ts +9 -0
- package/lib/typescript/src/services/consent.service.d.ts.map +1 -0
- package/lib/typescript/src/services/participants.service.d.ts +9 -0
- package/lib/typescript/src/services/participants.service.d.ts.map +1 -0
- package/lib/typescript/src/services/payment.service.d.ts +9 -0
- package/lib/typescript/src/services/payment.service.d.ts.map +1 -0
- package/lib/typescript/src/types/auth.types.d.ts +23 -0
- package/lib/typescript/src/types/auth.types.d.ts.map +1 -0
- package/lib/typescript/src/types/consent.types.d.ts +129 -0
- package/lib/typescript/src/types/consent.types.d.ts.map +1 -0
- package/lib/typescript/src/types/index.d.ts +9 -0
- package/lib/typescript/src/types/index.d.ts.map +1 -0
- package/lib/typescript/src/types/participants.types.d.ts +50 -0
- package/lib/typescript/src/types/participants.types.d.ts.map +1 -0
- package/lib/typescript/src/types/payment.types.d.ts +107 -0
- package/lib/typescript/src/types/payment.types.d.ts.map +1 -0
- package/lib/typescript/src/utils/consent.utils.d.ts +10 -0
- package/lib/typescript/src/utils/consent.utils.d.ts.map +1 -0
- package/lib/typescript/src/utils/http.utils.d.ts +21 -0
- package/lib/typescript/src/utils/http.utils.d.ts.map +1 -0
- package/lib/typescript/src/utils/payment.utils.d.ts +10 -0
- package/lib/typescript/src/utils/payment.utils.d.ts.map +1 -0
- package/package.json +169 -0
- package/src/config/environment.ts +58 -0
- package/src/index.tsx +178 -0
- package/src/services/auth.service.ts +88 -0
- package/src/services/consent.service.ts +63 -0
- package/src/services/participants.service.ts +89 -0
- package/src/services/payment.service.ts +49 -0
- package/src/types/auth.types.ts +24 -0
- package/src/types/consent.types.ts +152 -0
- package/src/types/index.ts +34 -0
- package/src/types/participants.types.ts +53 -0
- package/src/types/payment.types.ts +141 -0
- package/src/utils/consent.utils.ts +225 -0
- package/src/utils/http.utils.ts +80 -0
- package/src/utils/payment.utils.ts +32 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Environment configuration for Lina Pay SDK
|
|
5
|
+
* Allows configuration of base URLs for different environments (HML, Production)
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const DEFAULT_CONFIG = {
|
|
9
|
+
iamBaseUrl: 'https://iam.hml.linaob.com.br',
|
|
10
|
+
apiBaseUrl: 'https://embedded-payment-manager.hml.linaob.com.br'
|
|
11
|
+
};
|
|
12
|
+
let currentConfig = {
|
|
13
|
+
...DEFAULT_CONFIG
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Configure SDK with custom environment URLs
|
|
18
|
+
* @param config Partial configuration to override defaults
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* LinaPaySdk.configure({
|
|
22
|
+
* iamBaseUrl: 'https://iam.prod.linaob.com.br',
|
|
23
|
+
* apiBaseUrl: 'https://embedded-payment-manager.prod.linaob.com.br'
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function configure(config) {
|
|
28
|
+
currentConfig = {
|
|
29
|
+
...currentConfig,
|
|
30
|
+
...config
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Get current configuration
|
|
36
|
+
*/
|
|
37
|
+
export function getConfig() {
|
|
38
|
+
return {
|
|
39
|
+
...currentConfig
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Reset configuration to defaults (useful for testing)
|
|
45
|
+
*/
|
|
46
|
+
export function resetConfig() {
|
|
47
|
+
currentConfig = {
|
|
48
|
+
...DEFAULT_CONFIG
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* API Endpoints
|
|
54
|
+
*/
|
|
55
|
+
export const ENDPOINTS = {
|
|
56
|
+
TOKEN: '/realms/ob-epp/protocol/openid-connect/token',
|
|
57
|
+
PARTICIPANTS: '/api/v1/open-integration/participants/registered',
|
|
58
|
+
CONSENTS: '/api/v1/open-integration/consents',
|
|
59
|
+
PAYMENTS: '/api/v1/open-integration/payments'
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["DEFAULT_CONFIG","iamBaseUrl","apiBaseUrl","currentConfig","configure","config","getConfig","resetConfig","ENDPOINTS","TOKEN","PARTICIPANTS","CONSENTS","PAYMENTS"],"sourceRoot":"../../../src","sources":["config/environment.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAOA,MAAMA,cAA6B,GAAG;EACpCC,UAAU,EAAE,+BAA+B;EAC3CC,UAAU,EAAE;AACd,CAAC;AAED,IAAIC,aAA4B,GAAG;EAAE,GAAGH;AAAe,CAAC;;AAExD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,SAASA,CAACC,MAA8B,EAAQ;EAC9DF,aAAa,GAAG;IACd,GAAGA,aAAa;IAChB,GAAGE;EACL,CAAC;AACH;;AAEA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAAA,EAAkB;EACzC,OAAO;IAAE,GAAGH;EAAc,CAAC;AAC7B;;AAEA;AACA;AACA;AACA,OAAO,SAASI,WAAWA,CAAA,EAAS;EAClCJ,aAAa,GAAG;IAAE,GAAGH;EAAe,CAAC;AACvC;;AAEA;AACA;AACA;AACA,OAAO,MAAMQ,SAAS,GAAG;EACvBC,KAAK,EAAE,8CAA8C;EACrDC,YAAY,EAAE,kDAAkD;EAChEC,QAAQ,EAAE,mCAAmC;EAC7CC,QAAQ,EAAE;AACZ,CAAU","ignoreList":[]}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Lina Pay SDK - React Native SDK for Open Finance Payments
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { getAccessToken } from "./services/auth.service.js";
|
|
8
|
+
import { fetchParticipants } from "./services/participants.service.js";
|
|
9
|
+
import { createConsent as createConsentService } from "./services/consent.service.js";
|
|
10
|
+
import { createPayment as createPaymentService } from "./services/payment.service.js";
|
|
11
|
+
import { configure as configureEnvironment } from "./config/environment.js";
|
|
12
|
+
/**
|
|
13
|
+
* Get list of registered participants from Lina Open Finance
|
|
14
|
+
*
|
|
15
|
+
* @param credentials Subtenant credentials (subtenantId and subtenantSecret)
|
|
16
|
+
* @returns Promise with array of participants
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const participants = await LinaPaySdk.getParticipants({
|
|
21
|
+
* subtenantId: 'your-subtenant-id',
|
|
22
|
+
* subtenantSecret: 'your-subtenant-secret'
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export async function getParticipants(credentials) {
|
|
27
|
+
// Get access token (uses cache if available)
|
|
28
|
+
const accessToken = await getAccessToken(credentials);
|
|
29
|
+
|
|
30
|
+
// Fetch and transform participants
|
|
31
|
+
return await fetchParticipants(accessToken);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Create payment consent
|
|
36
|
+
*
|
|
37
|
+
* @param credentials Subtenant credentials (subtenantId and subtenantSecret)
|
|
38
|
+
* @param payload Consent creation payload with payment details
|
|
39
|
+
* @returns Promise with consent creation response including consentId and status
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* const consent = await LinaPaySdk.createConsent(
|
|
44
|
+
* {
|
|
45
|
+
* subtenantId: 'your-subtenant-id',
|
|
46
|
+
* subtenantSecret: 'your-subtenant-secret'
|
|
47
|
+
* },
|
|
48
|
+
* {
|
|
49
|
+
* organisationId: 'c8f0bf49-4744-4933-8960-7add6e590841',
|
|
50
|
+
* authorisationServerId: 'c8f0bf49-4744-4933-8960-7add6e590841',
|
|
51
|
+
* payment: {
|
|
52
|
+
* redirectUri: 'http://example.com/redirect',
|
|
53
|
+
* value: 1500.50,
|
|
54
|
+
* creditor: {
|
|
55
|
+
* name: 'John Doe',
|
|
56
|
+
* personType: 'PESSOA_NATURAL',
|
|
57
|
+
* cpfCnpj: '12345678901234',
|
|
58
|
+
* accountNumber: '1234567890',
|
|
59
|
+
* accountIssuer: '0001',
|
|
60
|
+
* accountPixKey: 'email@example.com',
|
|
61
|
+
* accountIspb: '12345678',
|
|
62
|
+
* accountType: 'CACC'
|
|
63
|
+
* }
|
|
64
|
+
* },
|
|
65
|
+
* platform: 'APP'
|
|
66
|
+
* }
|
|
67
|
+
* );
|
|
68
|
+
* console.log('Consent ID:', consent.consentId);
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
export async function createConsent(credentials, payload) {
|
|
72
|
+
// Get access token (uses cache if available)
|
|
73
|
+
const accessToken = await getAccessToken(credentials);
|
|
74
|
+
|
|
75
|
+
// Create consent
|
|
76
|
+
return await createConsentService(accessToken, payload);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Create payment
|
|
81
|
+
*
|
|
82
|
+
* @param credentials Subtenant credentials (subtenantId and subtenantSecret)
|
|
83
|
+
* @param payload Payment creation payload with state, code, idToken, and tenantId
|
|
84
|
+
* @returns Promise with payment creation response including payment details
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const payment = await LinaPaySdk.createPayment(
|
|
89
|
+
* {
|
|
90
|
+
* subtenantId: 'your-subtenant-id',
|
|
91
|
+
* subtenantSecret: 'your-subtenant-secret'
|
|
92
|
+
* },
|
|
93
|
+
* {
|
|
94
|
+
* state: 'rumUP',
|
|
95
|
+
* code: '1RDYVFQnPn721',
|
|
96
|
+
* idToken: 'eyJhbGciOiJQUz',
|
|
97
|
+
* tenantId: 'tenantId'
|
|
98
|
+
* }
|
|
99
|
+
* );
|
|
100
|
+
* console.log('Payment ID:', payment.id);
|
|
101
|
+
* console.log('Status:', payment.status);
|
|
102
|
+
* ```
|
|
103
|
+
*/
|
|
104
|
+
export async function createPayment(credentials, payload) {
|
|
105
|
+
// Get access token (uses cache if available)
|
|
106
|
+
const accessToken = await getAccessToken(credentials);
|
|
107
|
+
|
|
108
|
+
// Create payment
|
|
109
|
+
return await createPaymentService(accessToken, payload);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Configure SDK environment (base URLs)
|
|
114
|
+
*
|
|
115
|
+
* @param config Partial configuration to override defaults
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```typescript
|
|
119
|
+
* // Configure for production
|
|
120
|
+
* LinaPaySdk.configure({
|
|
121
|
+
* iamBaseUrl: 'https://iam.prod.linaob.com.br',
|
|
122
|
+
* apiBaseUrl: 'https://embedded-payment-manager.prod.linaob.com.br'
|
|
123
|
+
* });
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
export function configure(config) {
|
|
127
|
+
configureEnvironment(config);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Export types
|
|
131
|
+
|
|
132
|
+
// Export error class for error handling
|
|
133
|
+
export { LinaPayError } from "./utils/http.utils.js";
|
|
134
|
+
|
|
135
|
+
// Default export with all functions
|
|
136
|
+
export default {
|
|
137
|
+
getParticipants,
|
|
138
|
+
createConsent,
|
|
139
|
+
createPayment,
|
|
140
|
+
configure
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getAccessToken","fetchParticipants","createConsent","createConsentService","createPayment","createPaymentService","configure","configureEnvironment","getParticipants","credentials","accessToken","payload","config","LinaPayError"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;AACA;AACA;;AAEA,SAASA,cAAc,QAAQ,4BAAyB;AACxD,SAASC,iBAAiB,QAAQ,oCAAiC;AACnE,SAASC,aAAa,IAAIC,oBAAoB,QAAQ,+BAA4B;AAClF,SAASC,aAAa,IAAIC,oBAAoB,QAAQ,+BAA4B;AAClF,SAASC,SAAS,IAAIC,oBAAoB,QAAQ,yBAAsB;AAWxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,eAAeA,CACnCC,WAA+B,EACP;EACxB;EACA,MAAMC,WAAW,GAAG,MAAMV,cAAc,CAACS,WAAW,CAAC;;EAErD;EACA,OAAO,MAAMR,iBAAiB,CAACS,WAAW,CAAC;AAC7C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeR,aAAaA,CACjCO,WAA+B,EAC/BE,OAA6B,EACG;EAChC;EACA,MAAMD,WAAW,GAAG,MAAMV,cAAc,CAACS,WAAW,CAAC;;EAErD;EACA,OAAO,MAAMN,oBAAoB,CAACO,WAAW,EAAEC,OAAO,CAAC;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeP,aAAaA,CACjCK,WAA+B,EAC/BE,OAA6B,EACG;EAChC;EACA,MAAMD,WAAW,GAAG,MAAMV,cAAc,CAACS,WAAW,CAAC;;EAErD;EACA,OAAO,MAAMJ,oBAAoB,CAACK,WAAW,EAAEC,OAAO,CAAC;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASL,SAASA,CAACM,MAA8B,EAAQ;EAC9DL,oBAAoB,CAACK,MAAM,CAAC;AAC9B;;AAEA;;AAuBA;AACA,SAASC,YAAY,QAAQ,uBAAoB;;AAEjD;AACA,eAAe;EACbL,eAAe;EACfN,aAAa;EACbE,aAAa;EACbE;AACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Authentication service for OAuth2 token management
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { getConfig, ENDPOINTS } from "../config/environment.js";
|
|
8
|
+
import { handleHttpError, handleNetworkError, validateCredentials } from "../utils/http.utils.js";
|
|
9
|
+
|
|
10
|
+
// Token cache with 5-minute buffer before expiration
|
|
11
|
+
let tokenCache = null;
|
|
12
|
+
const EXPIRATION_BUFFER_MS = 5 * 60 * 1000; // 5 minutes
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Get access token from cache or request new one
|
|
16
|
+
*/
|
|
17
|
+
export async function getAccessToken(credentials) {
|
|
18
|
+
// Validate credentials
|
|
19
|
+
validateCredentials(credentials.subtenantId, credentials.subtenantSecret);
|
|
20
|
+
|
|
21
|
+
// Check if cached token is still valid
|
|
22
|
+
if (tokenCache && Date.now() < tokenCache.expiresAt) {
|
|
23
|
+
return tokenCache.accessToken;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Request new token
|
|
27
|
+
return await requestNewToken(credentials);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Request new OAuth2 token from IAM
|
|
32
|
+
*/
|
|
33
|
+
async function requestNewToken(credentials) {
|
|
34
|
+
const config = getConfig();
|
|
35
|
+
const url = `${config.iamBaseUrl}${ENDPOINTS.TOKEN}`;
|
|
36
|
+
|
|
37
|
+
// Prepare form data for OAuth2 token request
|
|
38
|
+
const formData = new URLSearchParams();
|
|
39
|
+
formData.append('client_id', credentials.subtenantId);
|
|
40
|
+
formData.append('client_secret', credentials.subtenantSecret);
|
|
41
|
+
formData.append('grant_type', 'client_credentials');
|
|
42
|
+
try {
|
|
43
|
+
const response = await fetch(url, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: {
|
|
46
|
+
'Content-Type': 'application/x-www-form-urlencoded'
|
|
47
|
+
},
|
|
48
|
+
body: formData.toString()
|
|
49
|
+
});
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
await handleHttpError(response);
|
|
52
|
+
}
|
|
53
|
+
const data = await response.json();
|
|
54
|
+
|
|
55
|
+
// Cache token with expiration (subtract buffer to refresh before actual expiry)
|
|
56
|
+
const expiresAt = Date.now() + data.expires_in * 1000 - EXPIRATION_BUFFER_MS;
|
|
57
|
+
tokenCache = {
|
|
58
|
+
accessToken: data.access_token,
|
|
59
|
+
expiresAt
|
|
60
|
+
};
|
|
61
|
+
return data.access_token;
|
|
62
|
+
} catch (error) {
|
|
63
|
+
handleNetworkError(error);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Clear token cache (useful for testing or manual logout)
|
|
69
|
+
*/
|
|
70
|
+
export function clearTokenCache() {
|
|
71
|
+
tokenCache = null;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=auth.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getConfig","ENDPOINTS","handleHttpError","handleNetworkError","validateCredentials","tokenCache","EXPIRATION_BUFFER_MS","getAccessToken","credentials","subtenantId","subtenantSecret","Date","now","expiresAt","accessToken","requestNewToken","config","url","iamBaseUrl","TOKEN","formData","URLSearchParams","append","response","fetch","method","headers","body","toString","ok","data","json","expires_in","access_token","error","clearTokenCache"],"sourceRoot":"../../../src","sources":["services/auth.service.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA,SAASA,SAAS,EAAEC,SAAS,QAAQ,0BAAuB;AAM5D,SACEC,eAAe,EACfC,kBAAkB,EAClBC,mBAAmB,QACd,wBAAqB;;AAE5B;AACA,IAAIC,UAA8B,GAAG,IAAI;AACzC,MAAMC,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;;AAE5C;AACA;AACA;AACA,OAAO,eAAeC,cAAcA,CAClCC,WAA+B,EACd;EACjB;EACAJ,mBAAmB,CAACI,WAAW,CAACC,WAAW,EAAED,WAAW,CAACE,eAAe,CAAC;;EAEzE;EACA,IAAIL,UAAU,IAAIM,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGP,UAAU,CAACQ,SAAS,EAAE;IACnD,OAAOR,UAAU,CAACS,WAAW;EAC/B;;EAEA;EACA,OAAO,MAAMC,eAAe,CAACP,WAAW,CAAC;AAC3C;;AAEA;AACA;AACA;AACA,eAAeO,eAAeA,CAC5BP,WAA+B,EACd;EACjB,MAAMQ,MAAM,GAAGhB,SAAS,CAAC,CAAC;EAC1B,MAAMiB,GAAG,GAAG,GAAGD,MAAM,CAACE,UAAU,GAAGjB,SAAS,CAACkB,KAAK,EAAE;;EAEpD;EACA,MAAMC,QAAQ,GAAG,IAAIC,eAAe,CAAC,CAAC;EACtCD,QAAQ,CAACE,MAAM,CAAC,WAAW,EAAEd,WAAW,CAACC,WAAW,CAAC;EACrDW,QAAQ,CAACE,MAAM,CAAC,eAAe,EAAEd,WAAW,CAACE,eAAe,CAAC;EAC7DU,QAAQ,CAACE,MAAM,CAAC,YAAY,EAAE,oBAAoB,CAAC;EAEnD,IAAI;IACF,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACP,GAAG,EAAE;MAChCQ,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,cAAc,EAAE;MAClB,CAAC;MACDC,IAAI,EAAEP,QAAQ,CAACQ,QAAQ,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAI,CAACL,QAAQ,CAACM,EAAE,EAAE;MAChB,MAAM3B,eAAe,CAACqB,QAAQ,CAAC;IACjC;IAEA,MAAMO,IAAI,GAAI,MAAMP,QAAQ,CAACQ,IAAI,CAAC,CAAmB;;IAErD;IACA,MAAMlB,SAAS,GACbF,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGkB,IAAI,CAACE,UAAU,GAAG,IAAI,GAAG1B,oBAAoB;IAC5DD,UAAU,GAAG;MACXS,WAAW,EAAEgB,IAAI,CAACG,YAAY;MAC9BpB;IACF,CAAC;IAED,OAAOiB,IAAI,CAACG,YAAY;EAC1B,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd/B,kBAAkB,CAAC+B,KAAK,CAAC;EAC3B;AACF;;AAEA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAAA,EAAS;EACtC9B,UAAU,GAAG,IAAI;AACnB","ignoreList":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Consent service for creating payment consents
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { getConfig, ENDPOINTS } from "../config/environment.js";
|
|
8
|
+
import { handleHttpError, handleNetworkError } from "../utils/http.utils.js";
|
|
9
|
+
import { validateConsentPayload } from "../utils/consent.utils.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Create payment consent
|
|
13
|
+
*/
|
|
14
|
+
export async function createConsent(accessToken, payload) {
|
|
15
|
+
// Validate payload before sending
|
|
16
|
+
validateConsentPayload(payload);
|
|
17
|
+
const config = getConfig();
|
|
18
|
+
const url = `${config.apiBaseUrl}${ENDPOINTS.CONSENTS}`;
|
|
19
|
+
|
|
20
|
+
// Normalize txId to array if it's a string
|
|
21
|
+
const normalizedPayload = {
|
|
22
|
+
...payload,
|
|
23
|
+
redirectUri: payload.redirectUri || payload.payment.redirectUri,
|
|
24
|
+
payment: {
|
|
25
|
+
...payload.payment,
|
|
26
|
+
txId: Array.isArray(payload.payment.txId) ? payload.payment.txId : payload.payment.txId ? [payload.payment.txId] : undefined
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
try {
|
|
30
|
+
const response = await fetch(url, {
|
|
31
|
+
method: 'POST',
|
|
32
|
+
headers: {
|
|
33
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
34
|
+
'Content-Type': 'application/json'
|
|
35
|
+
},
|
|
36
|
+
body: JSON.stringify(normalizedPayload)
|
|
37
|
+
});
|
|
38
|
+
if (!response.ok) {
|
|
39
|
+
await handleHttpError(response);
|
|
40
|
+
}
|
|
41
|
+
const apiResponse = await response.json();
|
|
42
|
+
|
|
43
|
+
// Extract and return the data from the wrapper
|
|
44
|
+
return apiResponse.data;
|
|
45
|
+
} catch (error) {
|
|
46
|
+
handleNetworkError(error);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=consent.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getConfig","ENDPOINTS","handleHttpError","handleNetworkError","validateConsentPayload","createConsent","accessToken","payload","config","url","apiBaseUrl","CONSENTS","normalizedPayload","redirectUri","payment","txId","Array","isArray","undefined","response","fetch","method","headers","body","JSON","stringify","ok","apiResponse","json","data","error"],"sourceRoot":"../../../src","sources":["services/consent.service.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA,SAASA,SAAS,EAAEC,SAAS,QAAQ,0BAAuB;AAM5D,SAASC,eAAe,EAAEC,kBAAkB,QAAQ,wBAAqB;AACzE,SAASC,sBAAsB,QAAQ,2BAAwB;;AAE/D;AACA;AACA;AACA,OAAO,eAAeC,aAAaA,CACjCC,WAAmB,EACnBC,OAA6B,EACG;EAChC;EACAH,sBAAsB,CAACG,OAAO,CAAC;EAE/B,MAAMC,MAAM,GAAGR,SAAS,CAAC,CAAC;EAC1B,MAAMS,GAAG,GAAG,GAAGD,MAAM,CAACE,UAAU,GAAGT,SAAS,CAACU,QAAQ,EAAE;;EAEvD;EACA,MAAMC,iBAAiB,GAAG;IACxB,GAAGL,OAAO;IACVM,WAAW,EAAEN,OAAO,CAACM,WAAW,IAAIN,OAAO,CAACO,OAAO,CAACD,WAAW;IAC/DC,OAAO,EAAE;MACP,GAAGP,OAAO,CAACO,OAAO;MAClBC,IAAI,EAAEC,KAAK,CAACC,OAAO,CAACV,OAAO,CAACO,OAAO,CAACC,IAAI,CAAC,GACrCR,OAAO,CAACO,OAAO,CAACC,IAAI,GACpBR,OAAO,CAACO,OAAO,CAACC,IAAI,GAClB,CAACR,OAAO,CAACO,OAAO,CAACC,IAAI,CAAC,GACtBG;IACR;EACF,CAAC;EAED,IAAI;IACF,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACX,GAAG,EAAE;MAChCY,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,eAAe,EAAE,UAAUhB,WAAW,EAAE;QACxC,cAAc,EAAE;MAClB,CAAC;MACDiB,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACb,iBAAiB;IACxC,CAAC,CAAC;IAEF,IAAI,CAACO,QAAQ,CAACO,EAAE,EAAE;MAChB,MAAMxB,eAAe,CAACiB,QAAQ,CAAC;IACjC;IAEA,MAAMQ,WAAW,GAAI,MAAMR,QAAQ,CAACS,IAAI,CAAC,CAA8B;;IAEvE;IACA,OAAOD,WAAW,CAACE,IAAI;EACzB,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd3B,kBAAkB,CAAC2B,KAAK,CAAC;EAC3B;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Participants service for fetching and transforming participant data
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { getConfig, ENDPOINTS } from "../config/environment.js";
|
|
8
|
+
import { handleHttpError, handleNetworkError } from "../utils/http.utils.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Fetch participants list from API
|
|
12
|
+
*/
|
|
13
|
+
export async function fetchParticipants(accessToken) {
|
|
14
|
+
const config = getConfig();
|
|
15
|
+
const url = `${config.apiBaseUrl}${ENDPOINTS.PARTICIPANTS}`;
|
|
16
|
+
try {
|
|
17
|
+
const response = await fetch(url, {
|
|
18
|
+
method: 'GET',
|
|
19
|
+
headers: {
|
|
20
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
21
|
+
'Content-Type': 'application/json'
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
await handleHttpError(response);
|
|
26
|
+
}
|
|
27
|
+
const data = await response.json();
|
|
28
|
+
|
|
29
|
+
// Transform and flatten participants
|
|
30
|
+
return transformParticipants(data.data);
|
|
31
|
+
} catch (error) {
|
|
32
|
+
handleNetworkError(error);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Transform full participants data to simplified format
|
|
38
|
+
* Flattens AuthorisationServers array - creates one Participant per AuthorisationServer
|
|
39
|
+
* Filters out participants without AuthorisationServers
|
|
40
|
+
*/
|
|
41
|
+
function transformParticipants(participantsFull) {
|
|
42
|
+
const participants = [];
|
|
43
|
+
for (const participantFull of participantsFull) {
|
|
44
|
+
// Skip participants without AuthorisationServers
|
|
45
|
+
if (!participantFull.AuthorisationServers || participantFull.AuthorisationServers.length === 0) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Create one Participant entry per AuthorisationServer
|
|
50
|
+
for (const authServer of participantFull.AuthorisationServers) {
|
|
51
|
+
participants.push(transformParticipant(participantFull, authServer));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return participants;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Transform a single participant with its authorisation server
|
|
59
|
+
*/
|
|
60
|
+
function transformParticipant(participantFull, authServer) {
|
|
61
|
+
return {
|
|
62
|
+
organisationId: participantFull.OrganisationId,
|
|
63
|
+
organisationName: participantFull.OrganisationName,
|
|
64
|
+
legalEntityName: participantFull.LegalEntityName,
|
|
65
|
+
registrationNumber: participantFull.RegistrationNumber,
|
|
66
|
+
authorisationServerId: authServer.AuthorisationServerId,
|
|
67
|
+
customerFriendlyName: authServer.CustomerFriendlyName,
|
|
68
|
+
customerFriendlyLogoUri: authServer.CustomerFriendlyLogoUri
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=participants.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getConfig","ENDPOINTS","handleHttpError","handleNetworkError","fetchParticipants","accessToken","config","url","apiBaseUrl","PARTICIPANTS","response","fetch","method","headers","ok","data","json","transformParticipants","error","participantsFull","participants","participantFull","AuthorisationServers","length","authServer","push","transformParticipant","organisationId","OrganisationId","organisationName","OrganisationName","legalEntityName","LegalEntityName","registrationNumber","RegistrationNumber","authorisationServerId","AuthorisationServerId","customerFriendlyName","CustomerFriendlyName","customerFriendlyLogoUri","CustomerFriendlyLogoUri"],"sourceRoot":"../../../src","sources":["services/participants.service.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA,SAASA,SAAS,EAAEC,SAAS,QAAQ,0BAAuB;AAO5D,SAASC,eAAe,EAAEC,kBAAkB,QAAQ,wBAAqB;;AAEzE;AACA;AACA;AACA,OAAO,eAAeC,iBAAiBA,CACrCC,WAAmB,EACK;EACxB,MAAMC,MAAM,GAAGN,SAAS,CAAC,CAAC;EAC1B,MAAMO,GAAG,GAAG,GAAGD,MAAM,CAACE,UAAU,GAAGP,SAAS,CAACQ,YAAY,EAAE;EAE3D,IAAI;IACF,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACJ,GAAG,EAAE;MAChCK,MAAM,EAAE,KAAK;MACbC,OAAO,EAAE;QACP,eAAe,EAAE,UAAUR,WAAW,EAAE;QACxC,cAAc,EAAE;MAClB;IACF,CAAC,CAAC;IAEF,IAAI,CAACK,QAAQ,CAACI,EAAE,EAAE;MAChB,MAAMZ,eAAe,CAACQ,QAAQ,CAAC;IACjC;IAEA,MAAMK,IAAI,GAAI,MAAML,QAAQ,CAACM,IAAI,CAAC,CAA6B;;IAE/D;IACA,OAAOC,qBAAqB,CAACF,IAAI,CAACA,IAAI,CAAC;EACzC,CAAC,CAAC,OAAOG,KAAK,EAAE;IACdf,kBAAkB,CAACe,KAAK,CAAC;EAC3B;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASD,qBAAqBA,CAC5BE,gBAAmC,EACpB;EACf,MAAMC,YAA2B,GAAG,EAAE;EAEtC,KAAK,MAAMC,eAAe,IAAIF,gBAAgB,EAAE;IAC9C;IACA,IACE,CAACE,eAAe,CAACC,oBAAoB,IACrCD,eAAe,CAACC,oBAAoB,CAACC,MAAM,KAAK,CAAC,EACjD;MACA;IACF;;IAEA;IACA,KAAK,MAAMC,UAAU,IAAIH,eAAe,CAACC,oBAAoB,EAAE;MAC7DF,YAAY,CAACK,IAAI,CAACC,oBAAoB,CAACL,eAAe,EAAEG,UAAU,CAAC,CAAC;IACtE;EACF;EAEA,OAAOJ,YAAY;AACrB;;AAEA;AACA;AACA;AACA,SAASM,oBAAoBA,CAC3BL,eAAgC,EAChCG,UAA+B,EAClB;EACb,OAAO;IACLG,cAAc,EAAEN,eAAe,CAACO,cAAc;IAC9CC,gBAAgB,EAAER,eAAe,CAACS,gBAAgB;IAClDC,eAAe,EAAEV,eAAe,CAACW,eAAe;IAChDC,kBAAkB,EAAEZ,eAAe,CAACa,kBAAkB;IACtDC,qBAAqB,EAAEX,UAAU,CAACY,qBAAqB;IACvDC,oBAAoB,EAAEb,UAAU,CAACc,oBAAoB;IACrDC,uBAAuB,EAAEf,UAAU,CAACgB;EACtC,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Payment service for creating payments
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { getConfig, ENDPOINTS } from "../config/environment.js";
|
|
8
|
+
import { handleHttpError, handleNetworkError } from "../utils/http.utils.js";
|
|
9
|
+
import { validatePaymentPayload } from "../utils/payment.utils.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Create payment
|
|
13
|
+
*/
|
|
14
|
+
export async function createPayment(accessToken, payload) {
|
|
15
|
+
// Validate payload before sending
|
|
16
|
+
validatePaymentPayload(payload);
|
|
17
|
+
const config = getConfig();
|
|
18
|
+
const url = `${config.apiBaseUrl}${ENDPOINTS.PAYMENTS}`;
|
|
19
|
+
try {
|
|
20
|
+
const response = await fetch(url, {
|
|
21
|
+
method: 'POST',
|
|
22
|
+
headers: {
|
|
23
|
+
'Authorization': `Bearer ${accessToken}`,
|
|
24
|
+
'Content-Type': 'application/json'
|
|
25
|
+
},
|
|
26
|
+
body: JSON.stringify(payload)
|
|
27
|
+
});
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
await handleHttpError(response);
|
|
30
|
+
}
|
|
31
|
+
const apiResponse = await response.json();
|
|
32
|
+
|
|
33
|
+
// Extract and return the data from the wrapper
|
|
34
|
+
return apiResponse.data;
|
|
35
|
+
} catch (error) {
|
|
36
|
+
handleNetworkError(error);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=payment.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getConfig","ENDPOINTS","handleHttpError","handleNetworkError","validatePaymentPayload","createPayment","accessToken","payload","config","url","apiBaseUrl","PAYMENTS","response","fetch","method","headers","body","JSON","stringify","ok","apiResponse","json","data","error"],"sourceRoot":"../../../src","sources":["services/payment.service.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA,SAASA,SAAS,EAAEC,SAAS,QAAQ,0BAAuB;AAM5D,SAASC,eAAe,EAAEC,kBAAkB,QAAQ,wBAAqB;AACzE,SAASC,sBAAsB,QAAQ,2BAAwB;;AAE/D;AACA;AACA;AACA,OAAO,eAAeC,aAAaA,CACjCC,WAAmB,EACnBC,OAA6B,EACG;EAChC;EACAH,sBAAsB,CAACG,OAAO,CAAC;EAE/B,MAAMC,MAAM,GAAGR,SAAS,CAAC,CAAC;EAC1B,MAAMS,GAAG,GAAG,GAAGD,MAAM,CAACE,UAAU,GAAGT,SAAS,CAACU,QAAQ,EAAE;EAEvD,IAAI;IACF,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACJ,GAAG,EAAE;MAChCK,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QACP,eAAe,EAAE,UAAUT,WAAW,EAAE;QACxC,cAAc,EAAE;MAClB,CAAC;MACDU,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACX,OAAO;IAC9B,CAAC,CAAC;IAEF,IAAI,CAACK,QAAQ,CAACO,EAAE,EAAE;MAChB,MAAMjB,eAAe,CAACU,QAAQ,CAAC;IACjC;IAEA,MAAMQ,WAAW,GAAI,MAAMR,QAAQ,CAACS,IAAI,CAAC,CAA8B;;IAEvE;IACA,OAAOD,WAAW,CAACE,IAAI;EACzB,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdpB,kBAAkB,CAACoB,KAAK,CAAC;EAC3B;AACF","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/auth.types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/consent.types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/index.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/participants.types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/payment.types.ts"],"mappings":"","ignoreList":[]}
|