w-aura/src/api/resources/Payment.ts
Daniil Chemerkin 6dd37bb284 develop
2025-05-06 22:13:47 +00:00

116 lines
3.0 KiB
TypeScript

import routes from "@/routes";
import { getAuthHeaders, getBaseHeaders } from "../utils";
import { ICreateAuthorizeResponse } from "./User";
import { AddressFields } from "@/hooks/payment/nmi/useAddressFields";
export interface Payload {
token: string;
}
export interface PayloadPost extends Payload {
productId: string;
placementId: string;
paywallId: string;
paymentToken?: string;
address?: AddressFields;
}
export interface PayloadPostAnonymous {
productId: string;
placementId: string;
paywallId: string;
paymentToken: string;
sessionId: string;
address?: AddressFields;
}
interface ResponsePostSuccess {
status: "payment_intent_created" | "paid" | unknown,
type: "setup" | "payment",
data: {
client_secret: string,
paymentIntentId: string,
return_url?: string,
public_key: string,
product: {
id: string,
name: string,
description?: string,
price: {
id: string,
unit_amount: number,
currency: "USD" | string
}
}
}
}
interface ResponsePostSinglePaymentSuccess {
payment: {
status: string;
invoiceId: string;
};
}
interface ResponsePostError {
status: string;
message: string;
}
export type ResponsePost = ResponsePostSuccess | ResponsePostSinglePaymentSuccess | ResponsePostError;
export interface ResponsePostAnonymousSuccess {
user: ICreateAuthorizeResponse;
status: string;
invoiceId: string;
}
export const createRequestPost = ({ token, productId, placementId, paywallId, paymentToken, address }: PayloadPost): Request => {
const url = new URL(routes.server.makePayment());
const body = JSON.stringify({
productId,
placementId,
paywallId,
paymentToken,
address
});
return new Request(url, { method: "POST", headers: getAuthHeaders(token), body });
};
export const createRequestPostAnonymous = ({ productId, placementId, paywallId, paymentToken, sessionId, address }: PayloadPostAnonymous): Request => {
const url = new URL(routes.server.makeAnonymousPayment());
const body = JSON.stringify({
productId,
placementId,
paywallId,
paymentToken,
sessionId,
address
});
return new Request(url, { method: "POST", headers: getBaseHeaders(), body });
};
export interface IPaymentConfigResponse {
status: "success" | string,
data: {
nmi: {
publicKey: string
}
}
}
export const getConfigRequest = (): Request => {
const url = new URL(routes.server.getPaymentConfig());
return new Request(url, { method: "GET", headers: getBaseHeaders() });
};
export interface IPaymentMethodsResponse {
status: "success" | "error",
message: string,
}
export const getMethodsRequest = ({ token }: Payload): Request => {
const url = new URL(routes.server.getPaymentMethods());
return new Request(url, { method: "GET", headers: getAuthHeaders(token) });
};