diff --git a/src/lib/StringPay.d.ts b/src/lib/StringPay.d.ts index 3bd9086..3c2e969 100644 --- a/src/lib/StringPay.d.ts +++ b/src/lib/StringPay.d.ts @@ -1,5 +1,5 @@ export interface StringPayload { - name: string; + assetName: string; collection?: string; currency: string; price: number; diff --git a/src/lib/StringPay.ts b/src/lib/StringPay.ts index 5f786ba..b26d10d 100644 --- a/src/lib/StringPay.ts +++ b/src/lib/StringPay.ts @@ -1,7 +1,7 @@ import { createServices, type Services } from "./services"; export interface StringPayload { - name: string; + assetName: string; collection?: string; currency: string; price: number; diff --git a/src/lib/services/apiClient.service.ts b/src/lib/services/apiClient.service.ts index ec2b480..c7dfde7 100644 --- a/src/lib/services/apiClient.service.ts +++ b/src/lib/services/apiClient.service.ts @@ -145,10 +145,10 @@ export function createApiClient({ baseUrl, apiKey }: ApiClientOptions): ApiClien } } - async function getQuote(payload: QuoteRequestPayload) { + async function getQuote(payload: TransactionRequest) { try { const request = () => httpClient.post(`/quotes`, payload); - const { data } = await authInterceptor<{ data: TransactPayload }>(request); + const { data } = await authInterceptor<{ data: Quote }>(request); return data; } catch (e: any) { @@ -157,9 +157,9 @@ export function createApiClient({ baseUrl, apiKey }: ApiClientOptions): ApiClien } } - async function transact(transactPayload: TransactPayload) { + async function transact(payload: ExecutionRequest) { try { - const request = () => httpClient.post(`/transactions`, transactPayload); + const request = () => httpClient.post(`/transactions`, payload); const { data } = await authInterceptor<{ data: TransactionResponse; }>(request); @@ -225,8 +225,8 @@ export interface ApiClient { refreshToken: (walletAddress: string) => Promise; logoutUser: () => Promise; getUserStatus: (userId: string) => Promise<{ status: string }>; - getQuote: (payload: QuoteRequestPayload) => Promise; - transact: (quote: TransactPayload) => Promise; + getQuote: (request: TransactionRequest) => Promise; + transact: (request: ExecutionRequest) => Promise; setWalletAddress: (walletAddress: string) => void; } @@ -272,26 +272,42 @@ export interface VisitorData { requestId?: string; } -export interface Quote { +export interface TransactionRequest { + userAddress: string; + assetName: string; + chainID: number; + contractAddress: string; + contractFunction: string; + contractReturn: string; + contractParameters: string[]; + txValue: string; + gasLimit: string; +} + +export interface Estimate { timestamp: number; baseUSD: string; gasUSD: string; tokenUSD: string; serviceUSD: string; totalUSD: string; +} + +export interface Quote { + transactionRequest: TransactionRequest; + estimate: Estimate; signature: string; } -export interface TransactPayload extends Quote { - userAddress: string; - chainID: number; - contractAddress: string; - contractFunction: string; - contractReturn: string; - contractParameters: string[]; - txValue: string; - gasLimit: string; - cardToken: string; +export interface PaymentInfo { + cardToken?: string; + cardId?: string; + cvv?: string; +} + +export interface ExecutionRequest { + quote: Quote; + paymentInfo: PaymentInfo; } export interface TransactionResponse { @@ -299,17 +315,6 @@ export interface TransactionResponse { txUrl: string; } -export interface QuoteRequestPayload { - chainID: number; - userAddress: string; - contractAddress: string; - contractFunction: string; - contractReturn: string; - contractParameters: string[]; - txValue: string; - gasLimit: string; -} - export interface ApiClientOptions { baseUrl: string; apiKey: string; diff --git a/src/lib/services/events.service.ts b/src/lib/services/events.service.ts index c1892e0..e0a6a5d 100644 --- a/src/lib/services/events.service.ts +++ b/src/lib/services/events.service.ts @@ -1,5 +1,5 @@ import type { StringPay, StringPayload } from "../StringPay"; -import type { ApiClient, QuoteRequestPayload, TransactPayload, User, UserUpdate } from "./apiClient.service"; +import type { ApiClient, ExecutionRequest, TransactionRequest, Quote, PaymentInfo, User, UserUpdate } from "./apiClient.service"; import type { AuthService } from "./auth.service"; import type { LocationService } from "./location.service"; import type { QuoteService } from "./quote.service"; @@ -188,9 +188,9 @@ export function createEventsService(iframeUrl: string, authService: AuthService, async function onQuoteStart(event: StringEvent, { frame, payload }: StringPay) { if (!frame) throw new Error("Iframe not ready"); - const quotePayload = payload; + const quotePayload = payload; - const callback = (quote: TransactPayload) => sendEvent(frame, Events.QUOTE_CHANGED, { quote }); + const callback = (quote: Quote) => sendEvent(frame, Events.QUOTE_CHANGED, { quote }); quoteService.startQuote(quotePayload, callback); } @@ -202,7 +202,10 @@ export function createEventsService(iframeUrl: string, authService: AuthService, if (!frame) throw new Error("Iframe not ready"); try { - const data = event.data; + let paymentInfo = {}; + paymentInfo.cardToken = event.data.cardToken; + let data = event.data; + data.paymentInfo = paymentInfo; const txHash = await apiClient.transact(data); sendEvent(frame, Events.RECEIVE_CONFIRM_TRANSACTION, txHash); } catch (error: any) { @@ -233,7 +236,7 @@ export function createEventsService(iframeUrl: string, authService: AuthService, // Parse payload before sending it to the iframe function createIframePayload(payload: StringPayload, _user: User | null): IframePayload { const nft: NFT = { - name: payload.name, + assetName: payload.assetName, price: payload.price, currency: payload.currency, collection: payload.collection ?? "", @@ -263,7 +266,7 @@ export interface StringEvent { } export interface NFT { - name: string; + assetName: string; price: number; currency: string; collection?: string; diff --git a/src/lib/services/quote.service.ts b/src/lib/services/quote.service.ts index ed3deb9..c549250 100644 --- a/src/lib/services/quote.service.ts +++ b/src/lib/services/quote.service.ts @@ -1,9 +1,9 @@ -import type { ApiClient, QuoteRequestPayload, TransactPayload } from './apiClient.service'; +import type { ApiClient, TransactionRequest, Quote } from './apiClient.service'; export function createQuoteService(apiClient: ApiClient): QuoteService { let interval: NodeJS.Timer | undefined; - async function startQuote(payload: QuoteRequestPayload, callback: (payload: TransactPayload) => void) { + async function startQuote(payload: TransactionRequest, callback: (payload: Quote) => void) { refreshQuote(payload, callback); if (interval) { @@ -18,7 +18,7 @@ export function createQuoteService(apiClient: ApiClient): QuoteService { interval = undefined; } - async function refreshQuote(payload: QuoteRequestPayload, callback: (payload: TransactPayload) => void) { + async function refreshQuote(payload: TransactionRequest, callback: (payload: Quote) => void) { try { const quote = await apiClient.getQuote(payload); callback(quote); @@ -35,7 +35,7 @@ export function createQuoteService(apiClient: ApiClient): QuoteService { } export interface QuoteService { - startQuote: (payload: QuoteRequestPayload, callback: (payload: TransactPayload) => void) => Promise; + startQuote: (payload: TransactionRequest, callback: (payload: Quote) => void) => Promise; stopQuote: () => void; - refreshQuote: (payload: QuoteRequestPayload, callback: (payload: TransactPayload) => void) => Promise; + refreshQuote: (payload: TransactionRequest, callback: (payload: Quote) => void) => Promise; } \ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index ad98bb5..e8b28ce 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -14,7 +14,7 @@ const STR_NFT_SRC = `${IPFS_GATEWAY}${IPFS_CID}/Demo_Character_1.png` $: payload = { - name: "String Test NFT [AVAX]", + assetName: "String Test NFT [AVAX]", collection: "String Demo", imageSrc: STR_NFT_SRC, imageAlt: "String NFT", diff --git a/src/test/mock.ts b/src/test/mock.ts index 9882beb..957e3f7 100644 --- a/src/test/mock.ts +++ b/src/test/mock.ts @@ -3,7 +3,7 @@ import type { StringPayload } from '../lib/StringPay'; const userAddr = "0x000000" export const testPayload: StringPayload = { - name: "String Demo NFT", + assetName: "String Demo NFT", collection: "String Demo", imageSrc: "https://gateway.pinata.cloud/ipfs/bafybeibtmy26mac47n5pp6srds76h74riqs76erw24p5yvdhmwu7pxlcx4/STR_Logo_1.png", imageAlt: "NFT",