1- import * as UtilsCrypto from './utils/Crypto.js' ;
2- import { BaseUrls } from './utils/URLBuilders/BaseUrls' ;
3- import * as connectService from './services/ConnectService' ;
4- import { IPisSetup , IPisConnectConfig , IAisConnectConfig , IPaymentPayload , IData , IAttributes , IMeta } from './interfaces/connect/ConnectInterface' ;
5- import { ISessionPayload } from './interfaces/pis/PisInterface' ;
1+ import qs from 'qs' ;
2+
3+ import { Endpoints } from './utils/URLBuilders/Endpoints' ;
4+ import { IPisSetup , IPaymentPayload , IData , IAttributes , IMeta } from './interfaces/connect/ConnectInterface' ;
65import { IFintectureConfig } from './interfaces/ConfigInterface' ;
76import { Constants } from './utils/Constants.js' ;
87import { PIS } from './Pis' ;
98import * as apiService from './services/ApiService' ;
109
1110export class Connect {
1211 public pis : PIS ;
13- public axios : any ;
12+ public axiosInstance : any ;
1413 public config : IFintectureConfig ;
1514 public connectConfig : IPisSetup ;
1615
17- private signatureType : string ;
18-
1916 constructor ( config : IFintectureConfig ) {
2017 this . pis = new PIS ( config ) ;
21- this . axios = connectService ;
18+ this . axiosInstance = apiService . getInstance ( config . env ) ;
2219 this . config = config ;
23- this . signatureType = 'rsa-sha256' ;
2420 }
2521
2622 /**
@@ -29,44 +25,30 @@ export class Connect {
2925 * @param {string } accessTOken
3026 * @param {payment } State
3127 */
32- public getAisConnect ( accessToken : string , connectConfig : any ) {
28+ public async getAisConnect ( accessToken : string , connectConfig : any ) {
3329 this . config = this . _validateConfigIntegrity ( this . config ) ;
3430
35- const headers : any = this . _buildHeaders ( accessToken , 'get' , null , this . config . private_key , this . signatureType ) ;
36-
37- const config : IAisConnectConfig = {
38- app_id : this . config . app_id ,
39- signature_type : this . signatureType ,
40- signature : headers [ 'Signature' ] ,
31+ const queryParameters = qs . stringify ( {
4132 redirect_uri : connectConfig . redirect_uri ,
42- origin_uri : connectConfig . origin_uri ,
43- state : connectConfig . state ,
44- psu_type : connectConfig . psu_type ,
45- country : connectConfig . country ,
46- date : headers [ 'Date' ] ,
47- request_id : headers [ 'X-Request-ID' ] ,
48- provider : connectConfig . provider
33+ state : connectConfig . state
34+ } ) ;
35+ const url = `${ Endpoints . AISCONNECT } ?${ queryParameters } ` ;
36+
37+ // Extend the headers with Connect specific headers if they are defined
38+ const extraHeaders = {
39+ 'x-provider' : connectConfig . provider ,
40+ 'x-psu-type' : connectConfig . psu_type ,
41+ 'x-country' : connectConfig . country ,
42+ 'x-language' : connectConfig . language ,
4943 } ;
5044
51- if ( accessToken ) {
52- config . access_token = accessToken ;
53- }
54-
55- const psuType = connectConfig . psu_type ? connectConfig . psu_type : 'retail' ;
56- const country = connectConfig . country ? connectConfig . country : 'fr' ;
57-
58- const url = `${
59- this . config . env === Constants . SANDBOXENVIRONMENT
60- ? BaseUrls . FINTECTURECONNECTURL_SBX
61- : BaseUrls . FINTECTURECONNECTURL_PRD
62- } /ais/${ psuType } /${ country } `;
45+ const headers = apiService . getHeaders ( 'get' , url , null , this . config , null , extraHeaders ) ;
6346
64- const connect = {
65- url : `${ url } ?config=${ Buffer . from ( JSON . stringify ( config ) ) . toString ( 'base64' ) } ` ,
66- }
67-
68- return connect ;
47+ const { data } = await this . axiosInstance . get ( url , { headers } ) ;
6948
49+ return {
50+ url : data . meta . url
51+ } ;
7052 }
7153
7254 /**
@@ -81,40 +63,29 @@ export class Connect {
8163
8264 const paymentPayload : IPaymentPayload = this . _buildPaymentPayload ( connectConfig ) ;
8365
84- const prepare : any = await this . pis . prepare ( accessToken , paymentPayload ) ;
85-
86- const sessionPayload : ISessionPayload = this . _buildSessionPayload ( prepare ) ;
87-
88- const headers : any = this . _buildHeaders ( accessToken , 'post' , sessionPayload , this . config . private_key , this . signatureType ) ;
89-
90- const config : IPisConnectConfig = {
91- app_id : this . config . app_id ,
92- access_token : accessToken ,
93- signature_type : this . signatureType ,
94- signature : headers [ 'Signature' ] ,
95- redirect_uri : connectConfig . redirect_uri ,
66+ const queryParameters = qs . stringify ( {
9667 origin_uri : connectConfig . origin_uri ,
97- state : connectConfig . state ,
98- payload : sessionPayload ,
99- psu_type : connectConfig . psu_type ,
100- country : connectConfig . country ,
101- date : headers [ 'Date' ] ,
102- request_id : headers [ 'X-Request-ID' ] ,
103- provider : connectConfig . provider
68+ redirect_uri : connectConfig . redirect_uri ,
69+ state : connectConfig . state
70+ } ) ;
71+ const url = `${ Endpoints . PISCONNECT } ?${ queryParameters } ` ;
72+
73+ // Extend the headers with Connect specific headers if they are defined
74+ const extraHeaders = {
75+ 'x-provider' : connectConfig . provider ,
76+ 'x-psu-type' : connectConfig . psu_type ,
77+ 'x-country' : connectConfig . country ,
78+ 'x-language' : connectConfig . language ,
10479 } ;
10580
106- const url = `${
107- this . config . env === Constants . SANDBOXENVIRONMENT
108- ? BaseUrls . FINTECTURECONNECTURL_SBX
109- : BaseUrls . FINTECTURECONNECTURL_PRD
110- } /pis`;
81+ const headers = apiService . getHeaders ( 'post' , url , accessToken , this . config , paymentPayload , extraHeaders ) ;
11182
112- const connect = {
113- url : `${ url } ?config=${ Buffer . from ( JSON . stringify ( config ) ) . toString ( 'base64' ) } ` ,
114- session_id : prepare . meta . session_id
115- }
83+ const { data } = await this . axiosInstance . post ( url , paymentPayload , { headers } ) ;
11684
117- return connect ;
85+ return {
86+ session_id : data . meta . session_id ,
87+ url : data . meta . url ,
88+ } ;
11889 }
11990
12091 private _validatePisConnectConfigIntegrity ( connectConfig : any ) {
@@ -143,14 +114,6 @@ export class Connect {
143114 return connectConfig as IPisSetup ;
144115 }
145116
146-
147- private _buildHeaders ( accessToken : string , method : string , payload : any , privateKey : string , algorithm : string ) : any {
148- const headers = apiService . getHeaders ( method , '' , accessToken , this . config , payload ) ;
149- const signingString = UtilsCrypto . buildSigningString ( headers , Constants . CONNECTHEADERPARAMETERLIST )
150- headers [ "Signature" ] = UtilsCrypto . signPayload ( signingString , this . config . private_key ) ;
151- return headers ;
152- }
153-
154117 private _buildPaymentPayload ( payment : any ) {
155118 const attributes : IAttributes = {
156119 amount : payment . amount ,
@@ -184,30 +147,6 @@ export class Connect {
184147 return payload ;
185148 }
186149
187- private _buildSessionPayload ( payment ) {
188- const payload = {
189- meta : {
190- session_id : payment . meta . session_id ,
191- } ,
192- data : {
193- attributes : {
194- amount : payment . data . attributes . amount ,
195- currency : payment . data . attributes . currency
196- }
197- }
198- } as ISessionPayload ;
199-
200- if ( payment . data . attributes . beneficiary ) {
201- payload . data . attributes . beneficiary = { name : payment . data . attributes . beneficiary . name } ;
202- }
203-
204- if ( payment . data . attributes . execution_date ) {
205- payload . data . attributes . execution_date = payment . data . attributes . execution_date ;
206- }
207-
208- return payload ;
209- }
210-
211150 private _validateConfigIntegrity ( config ) {
212151 if ( ! config . private_key ) {
213152 throw Error ( 'private_key must be set to use this function' ) ;
0 commit comments