@@ -16,12 +16,13 @@ import {
1616 PaypalPaymentTokenUsageType ,
1717 VaultController ,
1818 VaultInstructionAction ,
19+ VaultTokenRequestType ,
1920} from "@paypal/paypal-server-sdk" ;
2021
2122import type {
2223 OAuthProviderError ,
23- OAuthToken ,
2424 OrderRequest ,
25+ SetupTokenRequest ,
2526} from "@paypal/paypal-server-sdk" ;
2627
2728/* ######################################################################
@@ -112,7 +113,7 @@ export async function getBrowserSafeClientToken() {
112113}
113114
114115/* ######################################################################
115- * Process transactions
116+ * Process orders
116117 * ###################################################################### */
117118
118119export async function createOrder ( orderRequestBody : OrderRequest ) {
@@ -178,19 +179,67 @@ export async function captureOrder(orderId: string) {
178179 }
179180}
180181
181- export async function createSetupToken ( ) {
182+ /* ######################################################################
183+ * Save payment methods
184+ * ###################################################################### */
185+
186+ export async function createSetupToken (
187+ setupTokenRequestBody : SetupTokenRequest ,
188+ paypalRequestId ?: string ,
189+ ) {
182190 try {
183191 const { result, statusCode } = await vaultController . createSetupToken ( {
184- paypalRequestId : Date . now ( ) . toString ( ) ,
192+ body : setupTokenRequestBody ,
193+ paypalRequestId,
194+ } ) ;
195+
196+ return {
197+ jsonResponse : result ,
198+ httpStatusCode : statusCode ,
199+ } ;
200+ } catch ( error ) {
201+ if ( error instanceof ApiError ) {
202+ const { result, statusCode } = error ;
203+
204+ return {
205+ jsonResponse : result as CustomError ,
206+ httpStatusCode : statusCode ,
207+ } ;
208+ } else {
209+ throw error ;
210+ }
211+ }
212+ }
213+
214+ export async function createSetupTokenWithSampleDataForPayPal ( ) {
215+ const defaultSetupTokenRequestBody = {
216+ paymentSource : {
217+ paypal : {
218+ experienceContext : {
219+ cancelUrl : "https://example.com/cancelUrl" ,
220+ returnUrl : "https://example.com/returnUrl" ,
221+ vaultInstruction : VaultInstructionAction . OnPayerApproval ,
222+ } ,
223+ usageType : PaypalPaymentTokenUsageType . Merchant ,
224+ } ,
225+ } ,
226+ } ;
227+
228+ return createSetupToken ( defaultSetupTokenRequestBody , Date . now ( ) . toString ( ) ) ;
229+ }
230+
231+ export async function createPaymentToken (
232+ vaultSetupToken : string ,
233+ paypalRequestId ?: string ,
234+ ) {
235+ try {
236+ const { result, statusCode } = await vaultController . createPaymentToken ( {
237+ paypalRequestId : paypalRequestId ?? Date . now ( ) . toString ( ) ,
185238 body : {
186239 paymentSource : {
187- paypal : {
188- experienceContext : {
189- cancelUrl : "https://example.com/cancelUrl" ,
190- returnUrl : "https://example.com/returnUrl" ,
191- vaultInstruction : VaultInstructionAction . OnPayerApproval ,
192- } ,
193- usageType : PaypalPaymentTokenUsageType . Merchant ,
240+ token : {
241+ id : vaultSetupToken ,
242+ type : VaultTokenRequestType . SetupToken ,
194243 } ,
195244 } ,
196245 } ,
0 commit comments