import type { ZyphrClient } from '@zyphr-dev/node-sdk'; import { type AuthTransport, type LoginParams, type SessionTokens, toSessionTokens } from '@zyphr-dev/auth-core'; /** * An {@link AuthTransport} over the client-safe `ZyphrClient` (publishable * application key — no secret in the app bundle). Same transport the web binding * uses; re-implemented here so the React Native package doesn't depend on * `@zyphr-dev/auth-react` (which pulls web-React types). */ export function createZyphrTransport(client: ZyphrClient, now: () => number = Date.now): AuthTransport { const extract = (tokens?: { accessToken?: string; refreshToken?: string; expiresIn?: number }): SessionTokens => toSessionTokens( { accessToken: tokens?.accessToken, refreshToken: tokens?.refreshToken, expiresIn: tokens?.expiresIn }, now(), ); return { async login({ email, password }: LoginParams): Promise { const res = await client.auth.login.loginEndUser({ email, password }); return extract(res.data?.tokens); }, async refresh(refreshToken: string): Promise { const res = await client.auth.sessions.refreshEndUserToken({ refreshToken }); return extract(res.data?.tokens); }, async logout(refreshToken: string): Promise { await client.auth.sessions.revokeEndUserSession({ refreshToken }); }, }; }