@@ -22,9 +22,11 @@ import Client from "../../client";
2222import getJsonResponse from "../../helpers/getJsonResponse" ;
2323import mergeDeep from "../../utils/mergeDeep" ;
2424import { ApplicationInfo } from "../../typings/applicationInfo" ;
25- import { ObjectSerializer , CloudDeviceApiRequest , CloudDeviceApiResponse , ConnectedDevicesResponse , DeviceStatusResponse } from "../../typings/cloudDevice/models" ;
25+ import { ObjectSerializer , CloudDeviceApiRequest , CloudDeviceApiResponse , ConnectedDevicesResponse , DeviceStatusResponse , CloudDeviceApiSecuredRequest , CloudDeviceApiSecuredResponse , SaleToPOISecuredMessage } from "../../typings/cloudDevice/models" ;
2626import Resource from "../resource" ;
2727import { IRequest } from "../../typings/requestOptions" ;
28+ import NexoSecurityManager from "../../security/nexoSecurityManager" ;
29+ import { EncryptionCredentialDetails } from "../../security/encryptionCredentialDetails" ;
2830
2931// Cloud Device API version
3032export const CLOUD_DEVICE_API_VERSION = "v1" ;
@@ -73,6 +75,7 @@ class CloudDeviceAPI extends Service {
7375 const resource = new Resource ( this , endpoint ) ;
7476
7577 const request = CloudDeviceAPI . setApplicationInfo ( cloudDeviceApiRequest ) ;
78+
7679 // set deviceId
7780 request . SaleToPOIRequest . MessageHeader . POIID = deviceId ;
7881
@@ -82,6 +85,55 @@ class CloudDeviceAPI extends Service {
8285 ) ;
8386 }
8487
88+ /**
89+ * Send an asynchronous payment request.
90+ *
91+ * @param merchantAccount - The unique identifier of the merchant account.
92+ * @param deviceId - The unique identifier of the payment device that you send this request to (must match POIID in the MessageHeader).
93+ * @param cloudDeviceApiRequest - The request to send.
94+ * @param encryptionCredentialDetails - The details of the encryption credential used for encrypting the request payload (nexoBlob)
95+ * @returns A promise that resolves to "ok" if the request was successful, or a CloudDeviceApiResponse if there is an error.
96+ */
97+ public asyncEncrypted ( merchantAccount : string , deviceId : string , cloudDeviceApiRequest : CloudDeviceApiRequest , encryptionCredentialDetails : EncryptionCredentialDetails ) : Promise < string | CloudDeviceApiSecuredResponse > {
98+ const endpoint = this . baseUrl + "/merchants/{merchantAccount}/devices/{deviceId}/async"
99+ . replace ( "{" + "merchantAccount" + "}" , encodeURIComponent ( String ( merchantAccount ) ) )
100+ . replace ( "{" + "deviceId" + "}" , encodeURIComponent ( String ( deviceId ) ) ) ;
101+
102+ const resource = new Resource ( this , endpoint ) ;
103+
104+ const formattedRequest = ObjectSerializer . serialize ( cloudDeviceApiRequest , "CloudDeviceApiRequest" ) ;
105+
106+ const saleToPoiSecuredMessage : SaleToPOISecuredMessage = NexoSecurityManager . encrypt (
107+ cloudDeviceApiRequest . SaleToPOIRequest ?. MessageHeader ,
108+ JSON . stringify ( formattedRequest ) ,
109+ encryptionCredentialDetails ,
110+ ) ;
111+
112+ const securedPaymentRequest : CloudDeviceApiSecuredRequest = ObjectSerializer . serialize ( {
113+ SaleToPOIRequest : saleToPoiSecuredMessage ,
114+ } , "CloudDeviceApiSecuredRequest" ) ;
115+
116+
117+ //const request = CloudDeviceAPI.setApplicationInfo(cloudDeviceApiRequest);
118+ // set deviceId
119+ //request.SaleToPOIRequest.MessageHeader.POIID = deviceId;
120+
121+ const jsonResponse = getJsonResponse < CloudDeviceApiSecuredRequest , CloudDeviceApiSecuredResponse > (
122+ resource ,
123+ securedPaymentRequest
124+ ) ;
125+
126+ const cloudDeviceApiSecuredResponse : CloudDeviceApiSecuredResponse =
127+ ObjectSerializer . deserialize ( jsonResponse , "CloudDeviceApiSecuredResponse" ) ;
128+
129+ const response = NexoSecurityManager . decrypt (
130+ cloudDeviceApiSecuredResponse . SaleToPOIResponse ,
131+ encryptionCredentialDetails ,
132+ ) ;
133+ return ObjectSerializer . deserialize ( JSON . parse ( response ) , "CloudDeviceApiSecuredResponse" ) ;
134+ }
135+
136+
85137 /**
86138 * Send a synchronous payment request.
87139 * @param cloudDeviceApiRequest - The request to send.
0 commit comments