109 lines
3.4 KiB
TypeScript
109 lines
3.4 KiB
TypeScript
import "reflect-metadata";
|
|
import { createAuthClient } from "better-auth/react";
|
|
import { usernameClient, phoneNumberClient, emailOTPClient, genericOAuthClient, adminClient, organizationClient, jwtClient } from 'better-auth/client/plugins'
|
|
import { expoClient } from "@better-auth/expo/client";
|
|
import { createSkerClientPlugin } from '@repo/sdk'
|
|
import { stripeClient } from './plugins/stripe-plugin';
|
|
import type { Subscription } from './plugins/stripe';
|
|
import type { ApiError } from './types';
|
|
import { fetchWithLogger } from './fetch-logger';
|
|
import { storage } from './storage';
|
|
|
|
export interface CreditBalance {
|
|
tokenUsage: number;
|
|
remainingTokenBalance: number;
|
|
currentCreditBalance: number;
|
|
unitPrice: number;
|
|
}
|
|
|
|
export interface SubscriptionListItem extends Subscription {
|
|
type?: 'metered' | 'licenced';
|
|
limits?: Record<string, number>;
|
|
creditBalance?: CreditBalance;
|
|
highestTierPlan?: string;
|
|
highestTierCredits?: number;
|
|
}
|
|
|
|
export interface SubscriptionListParams {
|
|
query?: {
|
|
referenceId?: string;
|
|
};
|
|
}
|
|
|
|
export interface SubscriptionRestoreParams {
|
|
referenceId?: string;
|
|
subscriptionId?: string;
|
|
}
|
|
|
|
export interface SubscriptionRestoreResponse {
|
|
success: boolean;
|
|
subscription: {
|
|
id: string;
|
|
stripeSubscriptionId: string;
|
|
cancelAtPeriodEnd: boolean;
|
|
periodEnd?: Date;
|
|
status: string;
|
|
};
|
|
}
|
|
|
|
export interface BillingPortalParams {
|
|
locale?: string;
|
|
referenceId?: string;
|
|
returnUrl?: string;
|
|
}
|
|
|
|
export interface BillingPortalResponse {
|
|
url: string;
|
|
redirect: boolean;
|
|
}
|
|
|
|
export interface ISubscription {
|
|
list: (params?: SubscriptionListParams) => Promise<{ data?: SubscriptionListItem[]; error?: ApiError }>;
|
|
restore: (params?: SubscriptionRestoreParams) => Promise<{ data?: SubscriptionRestoreResponse; error?: ApiError }>;
|
|
billingPortal: (params?: BillingPortalParams) => Promise<{ data?: BillingPortalResponse; error?: ApiError }>;
|
|
}
|
|
export const getAuthToken = async () =>
|
|
(await storage.getItem('bestaibest.better-auth.session_token')) || '';
|
|
|
|
export const setAuthToken = async (token: string)=>{
|
|
await storage.setItem(`bestaibest.better-auth.session_token`, token);
|
|
}
|
|
export const authClient = createAuthClient({
|
|
baseURL: "https://api-test.mixvideo.bowong.cc",
|
|
trustedOrigins: ["duooomi://", "https://api-test.mixvideo.bowong.cc"],
|
|
storage,
|
|
scheme: "duooomi",
|
|
fetchOptions: {
|
|
auth: {
|
|
type: 'Bearer',
|
|
token: async () => {
|
|
const Authorization = await getAuthToken()
|
|
return Authorization;
|
|
}
|
|
},
|
|
customFetchImpl: fetchWithLogger as typeof fetch,
|
|
},
|
|
plugins: [
|
|
createSkerClientPlugin(),
|
|
stripeClient(),
|
|
usernameClient(),
|
|
phoneNumberClient(),
|
|
emailOTPClient(),
|
|
genericOAuthClient(),
|
|
jwtClient(),
|
|
adminClient(),
|
|
organizationClient(),
|
|
expoClient({
|
|
storage: storage as any
|
|
})
|
|
],
|
|
});
|
|
|
|
export const { signIn, signUp, signOut, useSession, $Infer, admin } = authClient;
|
|
|
|
export const subscription: ISubscription = Reflect.get(authClient, 'subscription');
|
|
export interface IAlipay {
|
|
appPay(orderInfo: any): Promise<{ data: any, error?: any }>;
|
|
[`app-pay`](orderInfo: any): Promise<{ data: any, error?: any }>;
|
|
}
|
|
export const alipay: IAlipay = Reflect.get(authClient, 'alipay'); |