Types
⚡ 8 min readComplete TypeScript type definitions from transcodes.d.ts
Core Types
ApiResponse<T>
Base API response structure
interface ApiResponse<T> {
success: boolean;
payload: T;
error?: string;
message?: string;
status?: number;
}Member
Member (authenticated end-user) profile data
interface Member {
id?: string;
projectId?: string;
name?: string;
email?: string;
role?: string;
metadata?: Record<string, string | number | boolean | null | undefined>;
createdAt?: Date | string;
updatedAt?: Date | string;
}AuthResult
Authentication result with token and member
interface AuthResult {
token: string;
member: Member;
}IdpOpenParams
Parameters for opening the IDP (step-up) modal — RBAC resource + action
interface IdpOpenParams {
/** Resource key for RBAC check (e.g. 'users', 'revenue') */
resource: string;
/** CRUD action type */
action: 'create' | 'read' | 'update' | 'delete';
/** Force step-up regardless of permission level. Default: false */
forceStepUp?: boolean;
/** Slack webhook notifications. Default: false */
webhookNotification?: boolean;
}IdpAuthResponse
Response from IDP authentication
interface IdpAuthResponse {
success: boolean;
sid?: string;
error?: string;
timestamp: number;
action?: string;
}Event Types
TranscodesEventName
const TranscodesEventNames = {
AUTH_STATE_CHANGED: 'AUTH_STATE_CHANGED',
TOKEN_REFRESHED: 'TOKEN_REFRESHED',
TOKEN_EXPIRED: 'TOKEN_EXPIRED',
ERROR: 'ERROR',
} as const;
type TranscodesEventName = (typeof TranscodesEventNames)[keyof typeof TranscodesEventNames];TranscodesEventMap
interface TranscodesEventMap {
AUTH_STATE_CHANGED: AuthStateChangedPayload;
TOKEN_REFRESHED: TokenRefreshedPayload;
TOKEN_EXPIRED: TokenExpiredPayload;
ERROR: ErrorPayload;
}AuthStateChangedPayload
interface AuthStateChangedPayload {
isAuthenticated: boolean;
accessToken: string | null;
expiresAt: number | null;
member: Member | null;
}TokenRefreshedPayload
interface TokenRefreshedPayload {
accessToken: string;
expiresAt: number;
}TokenExpiredPayload
interface TokenExpiredPayload {
expiredAt: number;
}ErrorPayload
interface ErrorPayload {
code: string;
message: string;
context?: string;
}EventCallback
type EventCallback<T extends TranscodesEventName> = (
payload: TranscodesEventMap[T]
) => void;API Interfaces
TokenAPI
interface TokenAPI {
getCurrentMember(): Promise<Member | null>;
getAccessToken(): Promise<string | null>;
hasToken(): boolean;
isAuthenticated(): Promise<boolean>;
signOut(options?: { webhookNotification?: boolean }): Promise<void>;
}PublicMemberAPI
interface PublicMemberAPI {
get(params: {
projectId?: string;
memberId?: string;
email?: string;
fields?: string;
}): Promise<ApiResponse<Member[]>>;
}PublicEventAPI
interface PublicEventAPI {
on<T extends TranscodesEventName>(
event: T,
callback: EventCallback<T>
): () => void;
off<T extends TranscodesEventName>(
event: T,
callback: EventCallback<T>
): void;
}Global Declaration
declare global {
interface Window {
transcodes: TranscodesAPI;
}
var transcodes: Window['transcodes'];
}Usage
- Copy
transcodes.d.tsto your project (e.g.,types/transcodes.d.ts) - Update
tsconfig.json:
{
"compilerOptions": {
"typeRoots": ["./node_modules/@types", "./types"]
},
"include": ["src", "types"]
}Related
Last updated on