import type { APIError, APIResponse, CreateCardForTemporaryUsePayload, CreateCardForTemporaryUseResponseData, DuffelCardFormProps, SaveCardPayload, SaveCardResponseData, UseSavedCardPayload, UseSavedCardPayloadResponseData, } from '../../../index'; import { getBaseURL } from './getBaseURL'; import { getTokenFromClientKey } from './getTokenFromClientKey'; function makeRequestFn( apiURL: string, headers: Record ) { return async ( data: T_Payload ): Promise | APIError> => { const response = await fetch(apiURL, { method: 'POST', headers, body: JSON.stringify({ data }), }); return await response.json(); }; } export function getDuffelCardsAPIClient( env: DuffelCardFormProps['tokenProxyEnvironment'], clientKey: DuffelCardFormProps['clientKey'] ) { const baseURL = getBaseURL(env); const encryptedToken = getTokenFromClientKey(clientKey); const apiURL = `${baseURL}/vault/cards`; const headers = { 'Duffel-Version': 'v2', 'Content-Type': 'application/json', 'Authorization': `Bearer ${encryptedToken}`, }; return { createCardForTemporaryUse: makeRequestFn< CreateCardForTemporaryUsePayload, CreateCardForTemporaryUseResponseData >(apiURL, headers), saveCard: makeRequestFn( apiURL, headers ), useSavedCard: makeRequestFn< UseSavedCardPayload, UseSavedCardPayloadResponseData >(apiURL, headers), }; }