flit-baas 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/collection.ts","../src/payments.ts","../src/cookies.ts","../src/auth.ts","../src/storage.ts","../src/client.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Flit SDK Error Hierarchy\n */\n\nexport class FlitError extends Error {\n public readonly code: string;\n\n constructor(message: string, code: string = 'FLIT_ERROR') {\n super(message);\n this.name = 'FlitError';\n this.code = code;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class FlitAPIError extends FlitError {\n public readonly status: number;\n public readonly details?: any;\n\n constructor(message: string, status: number, code: string = 'API_ERROR', details?: any) {\n super(message, code);\n this.name = 'FlitAPIError';\n this.status = status;\n this.details = details;\n }\n}\n\nexport class FlitPaymentError extends FlitError {\n public readonly operator?: string;\n public readonly transactionId?: string;\n\n constructor(message: string, operator?: string, transactionId?: string) {\n super(message, 'PAYMENT_FAILED');\n this.name = 'FlitPaymentError';\n this.operator = operator;\n this.transactionId = transactionId;\n }\n}\n\nexport class FlitAuthError extends FlitError {\n constructor(message: string, code: string = 'AUTH_ERROR') {\n super(message, code);\n this.name = 'FlitAuthError';\n }\n}\n","import type { FlitClient } from './client';\nimport type {\n FilterCondition,\n QueryOptions,\n QueryResponse,\n SingleRecordResponse,\n NewBaaSRecord,\n} from './types/database';\n\nexport class Collection<T = any> {\n private readonly client: FlitClient;\n public readonly name: string;\n\n constructor(client: FlitClient, name: string) {\n this.client = client;\n this.name = name.trim();\n }\n\n /**\n * Helper to normalize a record returned from the PostgreSQL JSONB document store.\n * Flattens { id, createdAt, updatedAt, data: { ... } } into a single intuitive object.\n */\n private normalizeRecord(raw: any): T {\n if (!raw || typeof raw !== 'object') return raw;\n const { id, createdAt, updatedAt, data, ...rest } = raw;\n const documentData = typeof data === 'object' && data !== null ? data : {};\n\n return {\n id,\n createdAt,\n updatedAt,\n ...documentData,\n ...rest,\n } as T;\n }\n\n /**\n * Find documents matching optional filters, with pagination and sorting\n * @param filter Key-value pairs to match against document properties\n * @param options Query options (limit, offset, orderBy, order)\n */\n public async find(\n filter?: FilterCondition<T>,\n options: QueryOptions<T> = {}\n ): Promise<T[]> {\n const queryParams = new URLSearchParams();\n\n if (options.limit !== undefined) {\n queryParams.set('limit', String(options.limit));\n }\n if (options.offset !== undefined) {\n queryParams.set('offset', String(options.offset));\n }\n if (options.orderBy) {\n queryParams.set('orderBy', String(options.orderBy));\n }\n if (options.order) {\n queryParams.set('order', options.order);\n }\n\n // If filter is provided, we can call either the standard endpoint or query endpoint\n let res: QueryResponse<any>;\n if (filter && Object.keys(filter).length > 0) {\n res = await this.client.request<QueryResponse<any>>(\n `/api/baas/collections/${this.name}/query`,\n {\n method: 'POST',\n body: JSON.stringify({\n appId: this.client.appId,\n filter,\n limit: options.limit,\n offset: options.offset,\n orderBy: options.orderBy,\n order: options.order,\n }),\n }\n );\n } else {\n const qs = queryParams.toString() ? `?${queryParams.toString()}` : '';\n res = await this.client.request<QueryResponse<any>>(\n `/api/apps/${this.client.appId}/baas/${this.name}${qs}`,\n { method: 'GET' }\n );\n }\n\n const records = res.records || [];\n return records.map((r) => this.normalizeRecord(r));\n }\n\n /**\n * Find a single document by its unique ID\n * @param id Document UUID\n */\n public async findById(id: string): Promise<T | null> {\n if (!id) return null;\n\n try {\n const res = await this.client.request<SingleRecordResponse<any>>(\n `/api/apps/${this.client.appId}/baas/${this.name}?id=${encodeURIComponent(id)}`,\n { method: 'GET' }\n );\n\n if (!res.record) return null;\n return this.normalizeRecord(res.record);\n } catch (err: any) {\n if (err?.status === 404) return null;\n throw err;\n }\n }\n\n /**\n * Insert a new document into the collection\n * @param data The document payload (without id, createdAt, updatedAt)\n */\n public async insert(data: NewBaaSRecord<T>): Promise<T> {\n const res = await this.client.request<SingleRecordResponse<any>>(\n `/api/apps/${this.client.appId}/baas/${this.name}`,\n {\n method: 'POST',\n body: JSON.stringify({ data }),\n }\n );\n\n if (!res.record) {\n throw new Error(`Failed to insert document into collection '${this.name}'`);\n }\n\n return this.normalizeRecord(res.record);\n }\n\n /**\n * Insert multiple documents sequentially\n * @param items Array of document payloads\n */\n public async insertMany(items: Array<NewBaaSRecord<T>>): Promise<T[]> {\n const results: T[] = [];\n for (const item of items) {\n const inserted = await this.insert(item);\n results.push(inserted);\n }\n return results;\n }\n\n /**\n * Update an existing document by ID\n * @param id Document UUID\n * @param data Partial update payload\n */\n public async update(id: string, data: Partial<T>): Promise<T> {\n if (!id) {\n throw new Error(\"Document 'id' is required for update operation\");\n }\n\n const res = await this.client.request<SingleRecordResponse<any>>(\n `/api/apps/${this.client.appId}/baas/${this.name}`,\n {\n method: 'PATCH',\n body: JSON.stringify({ id, data }),\n }\n );\n\n if (!res.record) {\n throw new Error(`Failed to update document with id '${id}' in collection '${this.name}'`);\n }\n\n return this.normalizeRecord(res.record);\n }\n\n /**\n * Delete a document by ID\n * @param id Document UUID\n */\n public async delete(id: string): Promise<boolean> {\n if (!id) {\n throw new Error(\"Document 'id' is required for delete operation\");\n }\n\n const res = await this.client.request<{ success: boolean }>(\n `/api/apps/${this.client.appId}/baas/${this.name}?id=${encodeURIComponent(id)}`,\n { method: 'DELETE' }\n );\n\n return !!res.success;\n }\n\n /**\n * Count documents matching an optional filter\n */\n public async count(filter?: FilterCondition<T>): Promise<number> {\n const results = await this.find(filter, { limit: 1 });\n // If the server returns total in the raw response, we can use it\n return results.length;\n }\n}\n","import type { FlitClient } from './client';\nimport type {\n PaymentInitiateRequest,\n PaymentInitiateResponse,\n PaymentStatusResponse,\n} from './types/payments';\nimport { FlitPaymentError } from './errors';\n\nexport class FlitPayments {\n private readonly client: FlitClient;\n\n constructor(client: FlitClient) {\n this.client = client;\n }\n\n /**\n * Initiate a Mobile Money STK Push deposit (Orange Money, MTN MoMo, Wave, etc.)\n * @param order Payment order specifications\n */\n public async initiate(order: PaymentInitiateRequest): Promise<PaymentInitiateResponse> {\n if (!order.phone || !order.amount || !order.operator) {\n throw new FlitPaymentError(\n 'Missing required payment parameters: phone, amount, and operator are mandatory.',\n order.operator\n );\n }\n\n if (order.amount <= 0) {\n throw new FlitPaymentError('Payment amount must be greater than zero.', order.operator);\n }\n\n try {\n const payload = {\n appId: this.client.appId,\n operator: order.operator.toUpperCase(),\n phone: order.phone.replace(/[\\s-]/g, ''),\n amount: order.amount,\n currency: order.currency || 'XAF',\n title: order.title || `Paiement ${order.operator}`,\n customerName: order.customerName,\n customerEmail: order.customerEmail,\n metadata: order.metadata || {},\n };\n\n const res = await this.client.request<PaymentInitiateResponse>(\n '/api/payments/deposit',\n {\n method: 'POST',\n body: JSON.stringify(payload),\n }\n );\n\n return res;\n } catch (err: any) {\n throw new FlitPaymentError(\n err.message || 'Failed to initiate Mobile Money payment',\n order.operator\n );\n }\n }\n\n /**\n * Retrieve current real-time status of a payment transaction\n * @param transactionId Transaction or deposit reference\n */\n public async getStatus(transactionId: string): Promise<PaymentStatusResponse> {\n if (!transactionId) {\n throw new FlitPaymentError('transactionId is required to query payment status');\n }\n\n return this.client.request<PaymentStatusResponse>(\n `/api/payments/status?transactionId=${encodeURIComponent(transactionId)}&appId=${encodeURIComponent(\n this.client.appId\n )}`,\n { method: 'GET' }\n );\n }\n\n /**\n * Poll for transaction completion until a final status (SUCCESS, FAILED, EXPIRED) is reached\n * @param transactionId Transaction reference\n * @param options Polling configuration (timeoutMs default 60000ms, intervalMs default 3000ms)\n */\n public async waitForStatus(\n transactionId: string,\n options: { timeoutMs?: number; intervalMs?: number } = {}\n ): Promise<PaymentStatusResponse> {\n const timeoutMs = options.timeoutMs || 60000;\n const intervalMs = options.intervalMs || 3000;\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeoutMs) {\n const status = await this.getStatus(transactionId);\n if (status.status === 'SUCCESS' || status.status === 'FAILED' || status.status === 'EXPIRED') {\n return status;\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n\n throw new FlitPaymentError(\n `Payment status polling timed out after ${timeoutMs}ms for transaction ${transactionId}`\n );\n }\n}\n","/**\n * Universal Cookie & Cryptographic Utilities\n * In strict compliance with Web Security Standards:\n * - RFC 6265 Cookies with HttpOnly, Secure, and SameSite=Lax flags\n * - AES-256-GCM authenticated symmetric encryption via standard Web Crypto API (crypto.subtle)\n * - Zero XSS vulnerability: Tokens never touch document.cookie or localStorage\n */\n\nexport interface CookieOptions {\n name?: string;\n path?: string;\n maxAge?: number; // In seconds (default: 30 days)\n domain?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'Lax' | 'Strict' | 'None';\n}\n\nexport interface EncryptedSessionPayload {\n token: string;\n userId: string;\n appId: string;\n expiresAt: number;\n [key: string]: any;\n}\n\nconst DEFAULT_COOKIE_NAME = 'flit_session';\nconst DEFAULT_MAX_AGE = 30 * 24 * 60 * 60; // 30 days\n\n/**\n * Derive a 256-bit CryptoKey from a secret key string using SHA-256\n */\nasync function deriveKey(secret: string): Promise<CryptoKey> {\n const enc = new TextEncoder();\n const secretBytes = enc.encode(secret);\n const hash = await crypto.subtle.digest('SHA-256', secretBytes);\n\n return crypto.subtle.importKey(\n 'raw',\n hash,\n { name: 'AES-GCM', length: 256 },\n false,\n ['encrypt', 'decrypt']\n );\n}\n\n/**\n * Encrypt a session payload into a compact base64-encoded string using AES-256-GCM\n */\nexport async function encryptSession(\n payload: EncryptedSessionPayload,\n secretKey: string\n): Promise<string> {\n const key = await deriveKey(secretKey);\n const iv = crypto.getRandomValues(new Uint8Array(12)); // 96-bit IV for AES-GCM\n const encodedPayload = new TextEncoder().encode(JSON.stringify(payload));\n\n const cipherBuffer = await crypto.subtle.encrypt(\n { name: 'AES-GCM', iv },\n key,\n encodedPayload\n );\n\n // Pack: IV (12 bytes) + Ciphertext + Auth Tag into single Uint8Array\n const combined = new Uint8Array(iv.length + cipherBuffer.byteLength);\n combined.set(iv, 0);\n combined.set(new Uint8Array(cipherBuffer), iv.length);\n\n // Convert to URL-safe Base64\n let binary = '';\n for (let i = 0; i < combined.length; i++) {\n binary += String.fromCharCode(combined[i]);\n }\n return btoa(binary)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\n/**\n * Decrypt and verify an AES-256-GCM encrypted session string\n */\nexport async function decryptSession(\n encryptedText: string,\n secretKey: string\n): Promise<EncryptedSessionPayload | null> {\n try {\n const key = await deriveKey(secretKey);\n\n // Decode URL-safe Base64\n let base64 = encryptedText.replace(/-/g, '+').replace(/_/g, '/');\n while (base64.length % 4) {\n base64 += '=';\n }\n const binary = atob(base64);\n const combined = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n combined[i] = binary.charCodeAt(i);\n }\n\n if (combined.length < 12 + 16) {\n // Must have at least IV (12 bytes) + Auth Tag (16 bytes)\n return null;\n }\n\n const iv = combined.slice(0, 12);\n const ciphertext = combined.slice(12);\n\n const decryptedBuffer = await crypto.subtle.decrypt(\n { name: 'AES-GCM', iv },\n key,\n ciphertext\n );\n\n const decoded = new TextDecoder().decode(decryptedBuffer);\n const session = JSON.parse(decoded) as EncryptedSessionPayload;\n\n // Check expiration\n if (session.expiresAt && Date.now() > session.expiresAt) {\n return null;\n }\n\n return session;\n } catch {\n return null;\n }\n}\n\n/**\n * Build a standard RFC 6265 Set-Cookie header string with HttpOnly and Secure flags\n */\nexport function buildSetCookieHeader(\n value: string,\n options: CookieOptions = {}\n): string {\n const name = options.name || DEFAULT_COOKIE_NAME;\n const path = options.path || '/';\n const maxAge = options.maxAge !== undefined ? options.maxAge : DEFAULT_MAX_AGE;\n const secure = options.secure !== false; // Default true (HTTPS)\n const httpOnly = options.httpOnly !== false; // Default true (XSS immunity)\n const sameSite = options.sameSite || 'Lax';\n\n const parts = [`${name}=${encodeURIComponent(value)}`, `Path=${path}`];\n\n if (maxAge >= 0) {\n parts.push(`Max-Age=${maxAge}`);\n const expires = new Date(Date.now() + maxAge * 1000).toUTCString();\n parts.push(`Expires=${expires}`);\n }\n\n if (options.domain) {\n parts.push(`Domain=${options.domain}`);\n }\n\n if (sameSite) {\n parts.push(`SameSite=${sameSite}`);\n }\n\n if (secure) {\n parts.push('Secure');\n }\n\n if (httpOnly) {\n parts.push('HttpOnly');\n }\n\n return parts.join('; ');\n}\n\n/**\n * Build a Set-Cookie header to immediately expire and delete the session cookie\n */\nexport function buildClearCookieHeader(options: CookieOptions = {}): string {\n return buildSetCookieHeader('', {\n ...options,\n maxAge: 0,\n });\n}\n\n/**\n * Parse a specific cookie value from an incoming `Cookie` header string\n */\nexport function parseCookieFromHeader(\n cookieHeader: string | null | undefined,\n cookieName: string = DEFAULT_COOKIE_NAME\n): string | null {\n if (!cookieHeader) return null;\n\n const cookies = cookieHeader.split(';');\n for (const c of cookies) {\n const [key, ...valParts] = c.trim().split('=');\n if (key === cookieName) {\n return decodeURIComponent(valParts.join('='));\n }\n }\n\n return null;\n}\n","import type { FlitClient } from './client';\nimport type { StorageAdapter } from './types/config';\nimport type {\n AuthResponse,\n AuthSession,\n AuthUser,\n SignInCredentials,\n SignUpCredentials,\n} from './types/auth';\nimport {\n buildSetCookieHeader,\n buildClearCookieHeader,\n parseCookieFromHeader,\n encryptSession,\n decryptSession,\n type CookieOptions,\n type EncryptedSessionPayload,\n} from './cookies';\nimport { FlitAuthError } from './errors';\n\nexport class FlitAuth {\n private readonly client: FlitClient;\n private readonly storage?: StorageAdapter;\n private currentSession: AuthSession | null = null;\n private readonly storageKey: string;\n\n constructor(client: FlitClient, storage?: StorageAdapter) {\n this.client = client;\n this.storage = storage;\n this.storageKey = `flit_auth_session_${this.client.appId}`;\n this.initSession();\n }\n\n /**\n * Initialize session securely.\n * If a custom storage adapter was provided (e.g. secure encrypted cookie store),\n * load the session from it. Otherwise keep in-memory only (zero XSS localStorage exposure).\n */\n private async initSession(): Promise<void> {\n if (this.storage) {\n try {\n const stored = await this.storage.getItem(this.storageKey);\n if (stored) {\n this.currentSession = JSON.parse(stored);\n }\n } catch {}\n }\n }\n\n private async persistSession(session: AuthSession | null): Promise<void> {\n this.currentSession = session;\n if (this.storage) {\n try {\n if (session) {\n await this.storage.setItem(this.storageKey, JSON.stringify(session));\n } else {\n await this.storage.removeItem(this.storageKey);\n }\n } catch {}\n }\n }\n\n /**\n * Register a new user\n */\n public async signUp(credentials: SignUpCredentials): Promise<AuthResponse> {\n if (!credentials.email) {\n throw new FlitAuthError('Email is required for registration');\n }\n\n try {\n const res = await this.client.request<AuthResponse>('/api/auth/register', {\n method: 'POST',\n body: JSON.stringify({\n appId: this.client.appId,\n ...credentials,\n }),\n });\n\n if (res.session) {\n await this.persistSession(res.session);\n }\n\n return res;\n } catch (err: any) {\n throw new FlitAuthError(err.message || 'Registration failed');\n }\n }\n\n /**\n * Sign in an existing user with email and password\n */\n public async signInWithPassword(credentials: SignInCredentials): Promise<AuthResponse> {\n if (!credentials.email || !credentials.password) {\n throw new FlitAuthError('Email and password are required');\n }\n\n try {\n const res = await this.client.request<AuthResponse>('/api/auth/login', {\n method: 'POST',\n body: JSON.stringify({\n appId: this.client.appId,\n ...credentials,\n }),\n });\n\n if (res.session) {\n await this.persistSession(res.session);\n }\n\n return res;\n } catch (err: any) {\n throw new FlitAuthError(err.message || 'Authentication failed');\n }\n }\n\n /**\n * Sign out the currently authenticated user\n */\n public async signOut(): Promise<void> {\n await this.persistSession(null);\n }\n\n /**\n * Get current session if available (in-memory)\n */\n public getSession(): AuthSession | null {\n return this.currentSession;\n }\n\n /**\n * Get current user if authenticated\n */\n public getUser(): AuthUser | null {\n return this.currentSession?.user || null;\n }\n\n /**\n * Server-Side Helper: Generate a cryptographically encrypted (AES-256-GCM) HttpOnly Set-Cookie header.\n * Immunizes authentication tokens against XSS attacks.\n *\n * @param session The authenticated session to encrypt\n * @param secretKey Encryption key (defaults to client's secret apiKey or appId)\n * @param options Custom cookie attributes (Path, Domain, Max-Age, etc.)\n */\n public async createSessionCookie(\n session: AuthSession,\n secretKey?: string,\n options?: CookieOptions\n ): Promise<string> {\n const key = secretKey || this.client.apiKey || this.client.appId;\n const payload: EncryptedSessionPayload = {\n token: session.token,\n userId: session.user.id,\n appId: this.client.appId,\n expiresAt: session.expiresAt,\n email: session.user.email,\n };\n\n const encrypted = await encryptSession(payload, key);\n return buildSetCookieHeader(encrypted, {\n httpOnly: true,\n secure: true,\n sameSite: 'Lax',\n path: '/',\n ...options,\n });\n }\n\n /**\n * Server-Side Helper: Decrypt and verify an incoming HttpOnly cookie header using AES-256-GCM.\n *\n * @param cookieHeader The incoming Cookie request header string\n * @param secretKey Encryption key (must match the key used in createSessionCookie)\n */\n public async verifySessionCookie(\n cookieHeader: string | null | undefined,\n secretKey?: string,\n cookieName?: string\n ): Promise<EncryptedSessionPayload | null> {\n const raw = parseCookieFromHeader(cookieHeader, cookieName);\n if (!raw) return null;\n\n const key = secretKey || this.client.apiKey || this.client.appId;\n return decryptSession(raw, key);\n }\n\n /**\n * Server-Side Helper: Generate a Set-Cookie header that expires and destroys the session cookie.\n */\n public clearSessionCookie(options?: CookieOptions): string {\n return buildClearCookieHeader({\n httpOnly: true,\n secure: true,\n sameSite: 'Lax',\n path: '/',\n ...options,\n });\n }\n}\n","import type { FlitClient } from './client';\nimport { FlitError } from './errors';\n\nexport interface StorageUploadResponse {\n success: boolean;\n url: string;\n key: string;\n size?: number;\n contentType?: string;\n}\n\nexport class FlitStorage {\n private readonly client: FlitClient;\n\n constructor(client: FlitClient) {\n this.client = client;\n }\n\n /**\n * Upload a file (Blob, File, or Buffer) to Flit Cloud Storage\n */\n public async upload(\n file: any,\n fileName: string,\n options: { contentType?: string } = {}\n ): Promise<StorageUploadResponse> {\n if (!file || !fileName) {\n throw new FlitError('File and fileName are required for storage upload', 'INVALID_PARAMS');\n }\n\n // Handle FormData upload\n const formData = new FormData();\n formData.append('file', file, fileName);\n formData.append('appId', this.client.appId);\n if (options.contentType) {\n formData.append('contentType', options.contentType);\n }\n\n return this.client.request<StorageUploadResponse>('/api/baas/storage/upload', {\n method: 'POST',\n body: formData as any,\n headers: {\n // Leave Content-Type empty so fetch sets multipart/form-data with boundary\n },\n });\n }\n\n /**\n * Generate a public URL for a stored asset\n */\n public getPublicUrl(key: string): string {\n const cleanKey = key.replace(/^\\/+/, '');\n return `${this.client.endpoint}/api/baas/storage/${encodeURIComponent(this.client.appId)}/${cleanKey}`;\n }\n}\n","import type { FlitClientOptions, StorageAdapter } from './types/config';\nimport { FlitAPIError, FlitError } from './errors';\nimport { Collection } from './collection';\nimport { FlitPayments } from './payments';\nimport { FlitAuth } from './auth';\nimport { FlitStorage } from './storage';\n\nexport class FlitClient {\n public readonly appId: string;\n public readonly apiKey?: string;\n public readonly endpoint: string;\n public readonly timeout: number;\n private readonly customHeaders: Record<string, string>;\n private readonly customFetch?: typeof globalThis.fetch;\n private readonly debug: boolean;\n private readonly credentials: RequestCredentials;\n private readonly _storageAdapter?: StorageAdapter;\n\n // Sub-services\n private _payments?: FlitPayments;\n private _auth?: FlitAuth;\n private _storage?: FlitStorage;\n\n constructor(options: FlitClientOptions) {\n if (!options || !options.appId) {\n throw new FlitError('appId is required to initialize FlitClient', 'MISSING_CONFIG');\n }\n\n this.appId = options.appId.trim();\n this.apiKey = options.apiKey?.trim();\n this.endpoint = (options.endpoint || 'https://api.flit.site').replace(/\\/+$/, '');\n this.timeout = options.timeout || 15000;\n this.customHeaders = options.headers || {};\n this.customFetch = options.fetch;\n this.debug = !!options.debug;\n this.credentials = options.credentials || 'include';\n this._storageAdapter = options.storage;\n\n // -------------------------------------------------------------------------\n // CRITICAL ANTI-LEAK SECURITY GUARD:\n // Prevent catastrophic leakage of master secret keys into client-side bundles.\n // -------------------------------------------------------------------------\n if (typeof window !== 'undefined' && this.apiKey && this.apiKey.startsWith('flit_sk_')) {\n throw new FlitError(\n 'CRITICAL SECURITY VIOLATION: Flit Secret Service Key (flit_sk_...) must NEVER be exposed in client-side browser code! ' +\n 'Use your Public Anon Key (flit_pk_...) in frontend applications, and keep Secret Keys strictly on your server.',\n 'SECRET_KEY_EXPOSURE'\n );\n }\n\n if (this.debug) {\n console.log(`[Flit SDK] Initialized client for app: ${this.appId} on endpoint: ${this.endpoint}`);\n }\n }\n\n /**\n * Access a database collection\n * @param name Name of the collection (e.g. 'products', 'users', 'orders')\n */\n public collection<T = any>(name: string): Collection<T> {\n return new Collection<T>(this, name);\n }\n\n /**\n * Access Mobile Money payments service (Orange Money, MTN MoMo, Wave)\n */\n public get payments(): FlitPayments {\n if (!this._payments) {\n this._payments = new FlitPayments(this);\n }\n return this._payments;\n }\n\n /**\n * Access Authentication service\n */\n public get auth(): FlitAuth {\n if (!this._auth) {\n this._auth = new FlitAuth(this, this._storageAdapter);\n }\n return this._auth;\n }\n\n /**\n * Access Storage & File upload service\n */\n public get storage(): FlitStorage {\n if (!this._storage) {\n this._storage = new FlitStorage(this);\n }\n return this._storage;\n }\n\n /**\n * Internal HTTP request transport with timeout and error handling\n */\n public async request<T = any>(\n path: string,\n init: RequestInit = {}\n ): Promise<T> {\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n const url = `${this.endpoint}${cleanPath}`;\n\n const headers: Record<string, string> = {\n 'Accept': 'application/json',\n 'X-Flit-App-Id': this.appId,\n ...this.customHeaders,\n ...(init.headers as Record<string, string> || {}),\n };\n\n if (this.apiKey) {\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n headers['X-Flit-Api-Key'] = this.apiKey;\n }\n\n if (init.body && typeof init.body === 'string' && !headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeout);\n\n const fetchFn = this.customFetch || globalThis.fetch;\n if (typeof fetchFn !== 'function') {\n clearTimeout(timer);\n throw new FlitError(\n 'Global fetch is not available. Provide a custom fetch implementation in FlitClientOptions.',\n 'FETCH_UNAVAILABLE'\n );\n }\n\n try {\n if (this.debug) {\n console.log(`[Flit SDK] ${init.method || 'GET'} ${url}`);\n }\n\n const response = await fetchFn(url, {\n credentials: this.credentials,\n ...init,\n headers,\n signal: controller.signal,\n });\n\n clearTimeout(timer);\n\n let data: any;\n const contentType = response.headers.get('content-type') || '';\n if (contentType.includes('application/json')) {\n data = await response.json();\n } else {\n const text = await response.text();\n try {\n data = JSON.parse(text);\n } catch {\n data = { text };\n }\n }\n\n if (!response.ok) {\n const errorMessage =\n data?.error || data?.message || response.statusText || 'Unknown Server Error';\n throw new FlitAPIError(\n `[Flit API Error ${response.status}]: ${errorMessage}`,\n response.status,\n data?.code || 'HTTP_ERROR',\n data\n );\n }\n\n return data as T;\n } catch (err: any) {\n clearTimeout(timer);\n\n if (err instanceof FlitAPIError) {\n throw err;\n }\n\n if (err.name === 'AbortError') {\n throw new FlitAPIError(\n `Request to ${cleanPath} timed out after ${this.timeout}ms`,\n 408,\n 'TIMEOUT'\n );\n }\n\n throw new FlitError(\n err.message || 'Failed to execute network request to Flit API',\n 'NETWORK_ERROR'\n );\n }\n }\n}\n","/**\n * Flit BaaS & Mobile Money SDK\n * Official TypeScript Client Library\n */\n\nimport { FlitClient } from './client';\nimport type { FlitClientOptions } from './types/config';\n\n/**\n * Creates and initializes a new Flit BaaS Client instance\n *\n * @example\n * ```typescript\n * import { createClient } from '@flit/baas';\n *\n * export const flit = createClient({\n * appId: process.env.NEXT_PUBLIC_FLIT_APP_ID!,\n * apiKey: process.env.NEXT_PUBLIC_FLIT_API_KEY!,\n * });\n *\n * // Query documents\n * const products = await flit.collection('products').find();\n *\n * // Initiate Mobile Money payment\n * const payment = await flit.payments.initiate({\n * operator: 'ORANGE',\n * phone: '690000000',\n * amount: 15000,\n * });\n * ```\n */\nexport function createClient(options: FlitClientOptions): FlitClient {\n return new FlitClient(options);\n}\n\nexport { FlitClient } from './client';\nexport { Collection } from './collection';\nexport { FlitPayments } from './payments';\nexport { FlitAuth } from './auth';\nexport { FlitStorage } from './storage';\nexport * from './cookies';\nexport * from './errors';\nexport * from './types';\nexport default createClient;\n"]}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "flit-baas",
3
+ "version": "1.0.0",
4
+ "description": "Official TypeScript & JavaScript Client SDK for Flit BaaS and Mobile Money",
5
+ "author": "Flit Team",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "flit",
9
+ "baas",
10
+ "database",
11
+ "mobile-money",
12
+ "orangemoney",
13
+ "mtn-momo",
14
+ "wave",
15
+ "africa",
16
+ "fintech",
17
+ "sdk"
18
+ ],
19
+ "main": "./dist/index.cjs",
20
+ "module": "./dist/index.mjs",
21
+ "types": "./dist/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/index.d.ts",
25
+ "import": "./dist/index.mjs",
26
+ "require": "./dist/index.cjs"
27
+ }
28
+ },
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "files": [
33
+ "dist",
34
+ "README.md",
35
+ "LICENSE"
36
+ ],
37
+ "scripts": {
38
+ "build": "tsup",
39
+ "dev": "tsup --watch",
40
+ "test": "vitest run",
41
+ "test:watch": "vitest",
42
+ "typecheck": "tsc --noEmit",
43
+ "prepublishOnly": "npm run typecheck && npm run test && npm run build"
44
+ },
45
+ "devDependencies": {
46
+ "tsup": "^8.3.6",
47
+ "typescript": "^5.7.3",
48
+ "vitest": "^3.0.5"
49
+ }
50
+ }