@instantdb/core
Version:
Instant's core local abstraction
131 lines (120 loc) • 3.14 kB
text/typescript
import { User } from './clientTypes.ts';
import { jsonFetch } from './utils/fetch.js';
type SharedInput = {
apiURI: string;
appId: string;
};
export type SendMagicCodeParams = { email: string };
export type SendMagicCodeResponse = {
sent: true;
};
export function sendMagicCode({
apiURI,
appId,
email,
}: SharedInput & SendMagicCodeParams): Promise<SendMagicCodeResponse> {
return jsonFetch(`${apiURI}/runtime/auth/send_magic_code`, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ 'app-id': appId, email }),
});
}
export type VerifyMagicCodeParams = { email: string; code: string };
export type VerifyResponse = {
user: User;
};
export async function verifyMagicCode({
apiURI,
appId,
email,
code,
}: SharedInput & VerifyMagicCodeParams): Promise<VerifyResponse> {
const res = await jsonFetch(`${apiURI}/runtime/auth/verify_magic_code`, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({ 'app-id': appId, email, code }),
});
return res;
}
export type VerifyRefreshTokenParams = { refreshToken: string };
export async function verifyRefreshToken({
apiURI,
appId,
refreshToken,
}: SharedInput & VerifyRefreshTokenParams): Promise<VerifyResponse> {
const res = await jsonFetch(`${apiURI}/runtime/auth/verify_refresh_token`, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
'app-id': appId,
'refresh-token': refreshToken,
}),
});
return res;
}
export type ExchangeCodeForTokenParams = {
code: string;
codeVerifier?: string;
};
export async function exchangeCodeForToken({
apiURI,
appId,
code,
codeVerifier,
}: SharedInput & ExchangeCodeForTokenParams): Promise<VerifyResponse> {
const res = await jsonFetch(`${apiURI}/runtime/oauth/token`, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
app_id: appId,
code: code,
code_verifier: codeVerifier,
}),
});
return res;
}
export type SignInWithIdTokenParams = {
nonce?: string;
idToken: string;
clientName: string;
refreshToken?: string;
};
export async function signInWithIdToken({
apiURI,
appId,
nonce,
idToken,
clientName,
refreshToken,
}: SharedInput & SignInWithIdTokenParams): Promise<VerifyResponse> {
const res = await jsonFetch(`${apiURI}/runtime/oauth/id_token`, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify({
app_id: appId,
nonce,
id_token: idToken,
client_name: clientName,
refresh_token: refreshToken,
}),
});
return res;
}
export type SignoutParams = { refreshToken: string };
export async function signOut({
apiURI,
appId,
refreshToken,
}: SharedInput & SignoutParams): Promise<{}> {
const res = await jsonFetch(`${apiURI}/runtime/signout`, {
method: 'POST',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify({
app_id: appId,
refresh_token: refreshToken,
}),
});
return res;
}