@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.
Files changed (82) hide show
  1. package/LinaPaySdk.podspec +20 -0
  2. package/README.md +522 -0
  3. package/android/build.gradle +77 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/src/main/AndroidManifest.xml +2 -0
  6. package/android/src/main/java/com/linapaysdk/LinaPaySdkModule.kt +18 -0
  7. package/android/src/main/java/com/linapaysdk/LinaPaySdkPackage.kt +17 -0
  8. package/ios/LinaPaySdk.h +5 -0
  9. package/ios/LinaPaySdk.mm +16 -0
  10. package/lib/module/config/environment.js +61 -0
  11. package/lib/module/config/environment.js.map +1 -0
  12. package/lib/module/index.js +142 -0
  13. package/lib/module/index.js.map +1 -0
  14. package/lib/module/package.json +1 -0
  15. package/lib/module/services/auth.service.js +73 -0
  16. package/lib/module/services/auth.service.js.map +1 -0
  17. package/lib/module/services/consent.service.js +49 -0
  18. package/lib/module/services/consent.service.js.map +1 -0
  19. package/lib/module/services/participants.service.js +71 -0
  20. package/lib/module/services/participants.service.js.map +1 -0
  21. package/lib/module/services/payment.service.js +39 -0
  22. package/lib/module/services/payment.service.js.map +1 -0
  23. package/lib/module/types/auth.types.js +2 -0
  24. package/lib/module/types/auth.types.js.map +1 -0
  25. package/lib/module/types/consent.types.js +2 -0
  26. package/lib/module/types/consent.types.js.map +1 -0
  27. package/lib/module/types/index.js +2 -0
  28. package/lib/module/types/index.js.map +1 -0
  29. package/lib/module/types/participants.types.js +2 -0
  30. package/lib/module/types/participants.types.js.map +1 -0
  31. package/lib/module/types/payment.types.js +2 -0
  32. package/lib/module/types/payment.types.js.map +1 -0
  33. package/lib/module/utils/consent.utils.js +168 -0
  34. package/lib/module/utils/consent.utils.js.map +1 -0
  35. package/lib/module/utils/http.utils.js +58 -0
  36. package/lib/module/utils/http.utils.js.map +1 -0
  37. package/lib/module/utils/payment.utils.js +27 -0
  38. package/lib/module/utils/payment.utils.js.map +1 -0
  39. package/lib/typescript/package.json +1 -0
  40. package/lib/typescript/src/config/environment.d.ts +38 -0
  41. package/lib/typescript/src/config/environment.d.ts.map +1 -0
  42. package/lib/typescript/src/index.d.ts +108 -0
  43. package/lib/typescript/src/index.d.ts.map +1 -0
  44. package/lib/typescript/src/services/auth.service.d.ts +13 -0
  45. package/lib/typescript/src/services/auth.service.d.ts.map +1 -0
  46. package/lib/typescript/src/services/consent.service.d.ts +9 -0
  47. package/lib/typescript/src/services/consent.service.d.ts.map +1 -0
  48. package/lib/typescript/src/services/participants.service.d.ts +9 -0
  49. package/lib/typescript/src/services/participants.service.d.ts.map +1 -0
  50. package/lib/typescript/src/services/payment.service.d.ts +9 -0
  51. package/lib/typescript/src/services/payment.service.d.ts.map +1 -0
  52. package/lib/typescript/src/types/auth.types.d.ts +23 -0
  53. package/lib/typescript/src/types/auth.types.d.ts.map +1 -0
  54. package/lib/typescript/src/types/consent.types.d.ts +129 -0
  55. package/lib/typescript/src/types/consent.types.d.ts.map +1 -0
  56. package/lib/typescript/src/types/index.d.ts +9 -0
  57. package/lib/typescript/src/types/index.d.ts.map +1 -0
  58. package/lib/typescript/src/types/participants.types.d.ts +50 -0
  59. package/lib/typescript/src/types/participants.types.d.ts.map +1 -0
  60. package/lib/typescript/src/types/payment.types.d.ts +107 -0
  61. package/lib/typescript/src/types/payment.types.d.ts.map +1 -0
  62. package/lib/typescript/src/utils/consent.utils.d.ts +10 -0
  63. package/lib/typescript/src/utils/consent.utils.d.ts.map +1 -0
  64. package/lib/typescript/src/utils/http.utils.d.ts +21 -0
  65. package/lib/typescript/src/utils/http.utils.d.ts.map +1 -0
  66. package/lib/typescript/src/utils/payment.utils.d.ts +10 -0
  67. package/lib/typescript/src/utils/payment.utils.d.ts.map +1 -0
  68. package/package.json +169 -0
  69. package/src/config/environment.ts +58 -0
  70. package/src/index.tsx +178 -0
  71. package/src/services/auth.service.ts +88 -0
  72. package/src/services/consent.service.ts +63 -0
  73. package/src/services/participants.service.ts +89 -0
  74. package/src/services/payment.service.ts +49 -0
  75. package/src/types/auth.types.ts +24 -0
  76. package/src/types/consent.types.ts +152 -0
  77. package/src/types/index.ts +34 -0
  78. package/src/types/participants.types.ts +53 -0
  79. package/src/types/payment.types.ts +141 -0
  80. package/src/utils/consent.utils.ts +225 -0
  81. package/src/utils/http.utils.ts +80 -0
  82. 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,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=auth.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/auth.types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=consent.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/consent.types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/index.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=participants.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/participants.types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=payment.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/payment.types.ts"],"mappings":"","ignoreList":[]}