zone4code-sdk 1.0.9 → 1.0.11

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auth.ts","../src/query-builder.ts","../src/schema.ts","../src/storage.ts","../src/client.ts"],"sourcesContent":["import { AuthResponse, AuthUser, StorageAdapter } from './types';\n\nfunction decodeJwtPayload(token: string): any {\n try {\n const base64Url = token.split('.')[1];\n if (!base64Url) return null;\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n if (typeof atob === 'function') {\n const jsonStr = decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join('')\n );\n return JSON.parse(jsonStr);\n } else if (typeof globalThis !== 'undefined' && (globalThis as any).Buffer) {\n return JSON.parse((globalThis as any).Buffer.from(base64, 'base64').toString('utf8'));\n }\n return null;\n } catch {\n return null;\n }\n}\n\nfunction normalizeHeaders(headers?: HeadersInit): Record<string, string> {\n const result: Record<string, string> = {};\n if (!headers) return result;\n if (typeof Headers !== 'undefined' && headers instanceof Headers) {\n headers.forEach((value, key) => {\n result[key] = value;\n });\n } else if (Array.isArray(headers)) {\n for (const [key, value] of headers) {\n result[key] = value;\n }\n } else {\n Object.assign(result, headers);\n }\n return result;\n}\n\nexport class AuthClient {\n private gatewayUrl: string;\n private tenantId: string;\n private storage: StorageAdapter;\n private storageKey: string;\n private refreshStorageKey: string;\n private token: string | null = null;\n private refreshTokenValue: string | null = null;\n private fetchFn: typeof fetch;\n private autoRefresh: boolean;\n private tokenExpiryBuffer: number;\n private onSessionExpiredCallback?: () => void;\n private sessionExpiredListeners: Array<() => void> = [];\n private activeRefreshPromise: Promise<AuthResponse> | null = null;\n private storageLoadedPromise: Promise<void>;\n private getLanguage?: () => string | null;\n\n private static TOKEN_KEY_PREFIX = 'z4c_token_';\n\n constructor(options: {\n gatewayUrl: string;\n tenantId: string;\n storage: StorageAdapter;\n storageKey?: string;\n initialToken?: string;\n fetchFn?: typeof fetch;\n autoRefresh?: boolean;\n tokenExpiryBuffer?: number;\n onSessionExpired?: () => void;\n getLanguage?: () => string | null;\n }) {\n const storage = options.storage;\n const storageKey = options.storageKey || (AuthClient.TOKEN_KEY_PREFIX + options.tenantId);\n const refreshStorageKey = storageKey + '_refresh';\n\n this.gatewayUrl = options.gatewayUrl.replace(/\\/+$/, '');\n this.tenantId = options.tenantId;\n this.storage = storage;\n this.storageKey = storageKey;\n this.refreshStorageKey = refreshStorageKey;\n this.fetchFn = options.fetchFn || (typeof fetch !== 'undefined' ? fetch : (globalThis.fetch as any));\n this.autoRefresh = options.autoRefresh !== undefined ? options.autoRefresh : true;\n this.tokenExpiryBuffer = options.tokenExpiryBuffer !== undefined ? options.tokenExpiryBuffer : 30;\n this.onSessionExpiredCallback = options.onSessionExpired;\n this.getLanguage = options.getLanguage;\n\n this.storageLoadedPromise = (async () => {\n if (options.initialToken) {\n this.setToken(options.initialToken);\n } else {\n try {\n const storedToken = await storage.getItem(storageKey);\n if (storedToken) this.token = storedToken;\n const storedRefresh = await storage.getItem(refreshStorageKey);\n if (storedRefresh) this.refreshTokenValue = storedRefresh;\n } catch {\n // ignore storage read errors\n }\n }\n })();\n }\n\n public getToken(): string | null {\n return this.token;\n }\n\n public getRefreshToken(): string | null {\n return this.refreshTokenValue;\n }\n\n public setToken(token: string | null): void {\n this.token = token;\n if (token) {\n this.storage.setItem(this.storageKey, token);\n } else {\n this.storage.removeItem(this.storageKey);\n }\n }\n\n public setRefreshToken(token: string | null): void {\n this.refreshTokenValue = token;\n if (token) {\n this.storage.setItem(this.refreshStorageKey, token);\n } else {\n this.storage.removeItem(this.refreshStorageKey);\n }\n }\n\n public isAuthenticated(): boolean {\n return !!this.token;\n }\n\n /**\n * Check whether the current access token is expired or expiring within bufferSeconds\n */\n public isTokenExpired(bufferSeconds: number = this.tokenExpiryBuffer): boolean {\n if (!this.token) return true;\n const payload = decodeJwtPayload(this.token);\n if (!payload || typeof payload.exp !== 'number') return false;\n const nowSeconds = Math.floor(Date.now() / 1000);\n return nowSeconds >= (payload.exp - bufferSeconds);\n }\n\n /**\n * Returns a valid access token, proactively refreshing it if expired and autoRefresh is enabled\n */\n public async getValidToken(): Promise<string | null> {\n await this.storageLoadedPromise;\n if (!this.token) return null;\n if (!this.autoRefresh) return this.token;\n\n if (this.isTokenExpired()) {\n const refreshToken = this.getRefreshToken();\n if (refreshToken) {\n try {\n const res = await this.refreshToken(refreshToken);\n return res.token || this.token;\n } catch {\n return null;\n }\n } else {\n this.notifySessionExpired();\n return null;\n }\n }\n\n return this.token;\n }\n\n /**\n * Register a callback triggered when session has expired completely\n */\n public onSessionExpired(listener: () => void): () => void {\n this.sessionExpiredListeners.push(listener);\n return () => {\n this.sessionExpiredListeners = this.sessionExpiredListeners.filter((l) => l !== listener);\n };\n }\n\n private notifySessionExpired(): void {\n this.logout();\n for (const listener of this.sessionExpiredListeners) {\n try {\n listener();\n } catch (e) {\n console.error('Error in onSessionExpired listener:', e);\n }\n }\n if (this.onSessionExpiredCallback) {\n try {\n this.onSessionExpiredCallback();\n } catch (e) {\n console.error('Error in onSessionExpired callback:', e);\n }\n }\n }\n\n /**\n * Perform an HTTP request with automatic Authorization injection, proactive refresh, and reactive 401 retry\n */\n public async fetchWithAuth(url: string, init: RequestInit = {}): Promise<Response> {\n await this.storageLoadedPromise;\n\n const token = await this.getValidToken();\n\n const headers = normalizeHeaders(init.headers);\n if (!headers['x-tenant-id'] && !headers['X-Tenant-Id']) {\n headers['x-tenant-id'] = this.tenantId;\n }\n if (init.body && !headers['Content-Type'] && !headers['content-type']) {\n headers['Content-Type'] = 'application/json';\n }\n if (token && !headers['Authorization'] && !headers['authorization']) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n const currentLang = this.getLanguage ? this.getLanguage() : null;\n if (currentLang && !headers['Accept-Language'] && !headers['accept-language']) {\n headers['Accept-Language'] = currentLang;\n }\n\n let res = await this.fetchFn(url, { ...init, headers });\n\n // Reactive retry on 401 if autoRefresh is enabled and we have a refresh token\n if (res.status === 401 && this.autoRefresh && this.getRefreshToken()) {\n try {\n const refreshed = await this.refreshToken();\n if (refreshed?.token) {\n headers['Authorization'] = `Bearer ${refreshed.token}`;\n res = await this.fetchFn(url, { ...init, headers });\n }\n } catch {\n // Refresh failed, original response will be returned\n }\n }\n\n return res;\n }\n\n /**\n * Synchronously parse and return current authenticated user from JWT token\n */\n public getUser(): AuthUser | null {\n if (!this.token) return null;\n const jwt = decodeJwtPayload(this.token);\n if (!jwt) return null;\n return {\n id: jwt.sub || '',\n email: jwt.email,\n username: jwt.preferred_username,\n name: jwt.name || `${jwt.given_name || ''} ${jwt.family_name || ''}`.trim() || undefined,\n firstName: jwt.given_name,\n lastName: jwt.family_name,\n roles: jwt.realm_access?.roles || [],\n attributes: jwt.attributes\n };\n }\n\n /**\n * Register a new user in the tenant realm\n */\n async register(data: {\n email: string;\n password: string;\n name?: string;\n firstName?: string;\n lastName?: string;\n username?: string;\n attributes?: Record<string, any>;\n autoLogin?: boolean;\n }): Promise<AuthResponse> {\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/user`;\n const [firstNameFromSplit, ...rest] = (data.name || '').trim().split(' ');\n const lastNameFromSplit = rest.join(' ');\n\n const payload = {\n username: data.username || data.email,\n email: data.email,\n firstName: data.firstName || firstNameFromSplit || '',\n lastName: data.lastName || lastNameFromSplit || '',\n enabled: true,\n credentials: [\n {\n type: 'password',\n value: data.password,\n temporary: false\n }\n ],\n attributes: data.attributes || {}\n };\n\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify(payload)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || err.error || `Registration failed with HTTP ${res.status}`);\n }\n\n const created = await res.json();\n\n if (data.autoLogin !== false) {\n try {\n return await this.login({\n login: data.username || data.email,\n password: data.password\n });\n } catch {\n // Fall through to returning created user if auto-login encounters an issue\n }\n }\n\n return {\n token: '',\n user: {\n id: created.id || '',\n email: data.email,\n username: payload.username,\n name: data.name || `${payload.firstName} ${payload.lastName}`.trim(),\n firstName: payload.firstName,\n lastName: payload.lastName,\n attributes: data.attributes\n }\n };\n }\n\n /**\n * Log in an existing user and store their JWT token\n * Accepts { login, password }, { email, password }, or { username, password }\n */\n async login(credentials: {\n login?: string;\n email?: string;\n username?: string;\n password: string;\n }): Promise<AuthResponse> {\n const loginIdentifier = credentials.login || credentials.email || credentials.username;\n if (!loginIdentifier) {\n throw new Error('Missing login identifier: please provide email, username, or login');\n }\n\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/login`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify({\n login: loginIdentifier,\n password: credentials.password\n })\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || err.error || `Login failed with HTTP ${res.status}`);\n }\n\n const json = await res.json();\n const token = json.token || json.access_token;\n if (token) {\n this.setToken(token);\n }\n if (json.refresh_token) {\n this.setRefreshToken(json.refresh_token);\n }\n\n const user = this.getUser() || json.user;\n\n return {\n token: token || '',\n refreshToken: json.refresh_token,\n user,\n ...json\n };\n }\n\n /**\n * Authenticate via Google OAuth ID token\n */\n async loginWithGoogle(token: string): Promise<AuthResponse> {\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/login/google`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify({ token })\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || err.error || `Google login failed with HTTP ${res.status}`);\n }\n\n const json = await res.json();\n const jwt = json.token || json.access_token;\n if (jwt) {\n this.setToken(jwt);\n }\n if (json.refresh_token) {\n this.setRefreshToken(json.refresh_token);\n }\n\n const user = this.getUser() || json.user;\n\n return {\n token: jwt || '',\n refreshToken: json.refresh_token,\n user,\n ...json\n };\n }\n\n /**\n * Renew expired access token using stored or provided refresh token\n */\n async refreshToken(refreshToken?: string): Promise<AuthResponse> {\n const tokenToUse = refreshToken || this.getRefreshToken();\n if (!tokenToUse) {\n this.notifySessionExpired();\n throw new Error('No refresh token available');\n }\n\n if (this.activeRefreshPromise) {\n return this.activeRefreshPromise;\n }\n\n this.activeRefreshPromise = (async () => {\n try {\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/refresh`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify({ refresh_token: tokenToUse })\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n this.notifySessionExpired();\n throw new Error(err.message || err.error || `Token refresh failed with HTTP ${res.status}`);\n }\n\n const json = await res.json();\n const token = json.token || json.access_token;\n if (token) {\n this.setToken(token);\n }\n if (json.refresh_token) {\n this.setRefreshToken(json.refresh_token);\n }\n\n const user = this.getUser() || json.user;\n\n return {\n token: token || '',\n refreshToken: json.refresh_token,\n user,\n ...json\n };\n } finally {\n this.activeRefreshPromise = null;\n }\n })();\n\n return this.activeRefreshPromise;\n }\n\n /**\n * Request password reset email\n */\n async forgotPassword(data: { email: string; frontendUrl?: string } | string): Promise<{ success: boolean; message: string }> {\n const payload = typeof data === 'string' ? { email: data } : data;\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/auth/forgot-password`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify(payload)\n });\n\n const json = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new Error(json.message || json.error || `Forgot password request failed with HTTP ${res.status}`);\n }\n return json;\n }\n\n /**\n * Complete password reset using action token\n */\n async resetPassword(data: { token: string; newPassword: string }): Promise<{ success: boolean; message: string }> {\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/auth/reset-password`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify(data)\n });\n\n const json = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new Error(json.message || json.error || `Reset password failed with HTTP ${res.status}`);\n }\n return json;\n }\n\n /**\n * Change password for current or specified user\n */\n async changePassword(data: { oldPassword: string; newPassword: string }, userId?: string): Promise<{ success: boolean; message?: string }> {\n const targetUserId = userId || this.getUser()?.id;\n if (!targetUserId) {\n throw new Error('User ID required: user is not logged in and no userId was provided');\n }\n\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/user/${targetUserId}/change-password`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId,\n ...(this.token ? { 'Authorization': `Bearer ${this.token}` } : {})\n },\n body: JSON.stringify(data)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || err.error || `Change password failed with HTTP ${res.status}`);\n }\n\n return res.json().catch(() => ({ success: true }));\n }\n\n /**\n * Update profile attributes for current or specified user\n */\n async updateProfile(data: Partial<AuthUser> & Record<string, any>, userId?: string): Promise<AuthUser> {\n const targetUserId = userId || this.getUser()?.id;\n if (!targetUserId) {\n throw new Error('User ID required: user is not logged in and no userId was provided');\n }\n\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/user/${targetUserId}`;\n const res = await this.fetchFn(url, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId,\n ...(this.token ? { 'Authorization': `Bearer ${this.token}` } : {})\n },\n body: JSON.stringify(data)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || err.error || `Update profile failed with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n /**\n * Fetch current authenticated user profile\n */\n async getProfile(): Promise<AuthUser> {\n const user = this.getUser();\n if (user && user.id) {\n return user;\n }\n\n if (!this.token) {\n throw new Error('Not authenticated: please call login() or setToken() first');\n }\n\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/user/profile`;\n const res = await this.fetchFn(url, {\n headers: {\n 'Authorization': `Bearer ${this.token}`,\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch profile (HTTP ${res.status})`);\n }\n\n return res.json();\n }\n\n /**\n * Log out and clear saved tokens\n */\n logout(): void {\n this.setToken(null);\n this.setRefreshToken(null);\n }\n}\n","import {\n EntityListResponse,\n EntityRecord,\n EntityRelationPayload,\n EntityRelationRecord,\n EntityReplaceRelationsPayload,\n EntityRevision,\n FilterOperator,\n GetEntityOptions\n} from './types';\n\nexport class EntityQueryBuilder<T = Record<string, any>> {\n private gatewayUrl: string;\n private tenantId: string;\n private typeName: string;\n private getToken: () => string | null;\n private fetchFn: typeof fetch;\n private fetchWithAuth?: (url: string, init?: RequestInit) => Promise<Response>;\n\n private queryParams = new URLSearchParams();\n\n constructor(options: {\n gatewayUrl: string;\n tenantId: string;\n typeName: string;\n getToken?: () => string | null;\n fetchFn?: typeof fetch;\n fetchWithAuth?: (url: string, init?: RequestInit) => Promise<Response>;\n defaultLanguage?: string | null | (() => string | null);\n }) {\n this.gatewayUrl = options.gatewayUrl.replace(/\\/+$/, '');\n this.tenantId = options.tenantId;\n this.typeName = options.typeName;\n this.getToken = options.getToken || (() => null);\n this.fetchFn = options.fetchFn || (typeof fetch !== 'undefined' ? fetch : (globalThis.fetch as any));\n this.fetchWithAuth = options.fetchWithAuth;\n\n if (options.defaultLanguage) {\n const langVal = typeof options.defaultLanguage === 'function' ? options.defaultLanguage() : options.defaultLanguage;\n if (langVal) {\n this.queryParams.set('lang', langVal);\n }\n }\n }\n\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n };\n const token = this.getToken();\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n return headers;\n }\n\n private async executeRequest(url: string, init: RequestInit = {}): Promise<Response> {\n if (this.fetchWithAuth) {\n return this.fetchWithAuth(url, init);\n }\n const headers = { ...this.getHeaders(), ...(init.headers as Record<string, string> || {}) };\n return this.fetchFn(url, { ...init, headers });\n }\n\n // ----------------------------------------------------\n // Filter Operators\n // ----------------------------------------------------\n\n eq(field: string, value: string | number | boolean): this {\n this.queryParams.append(`${field}[eq]`, String(value));\n return this;\n }\n\n ne(field: string, value: string | number | boolean): this {\n this.queryParams.append(`${field}[ne]`, String(value));\n return this;\n }\n\n gt(field: string, value: string | number | Date): this {\n const val = value instanceof Date ? value.toISOString() : String(value);\n this.queryParams.append(`${field}[gt]`, val);\n return this;\n }\n\n gte(field: string, value: string | number | Date): this {\n const val = value instanceof Date ? value.toISOString() : String(value);\n this.queryParams.append(`${field}[gte]`, val);\n return this;\n }\n\n lt(field: string, value: string | number | Date): this {\n const val = value instanceof Date ? value.toISOString() : String(value);\n this.queryParams.append(`${field}[lt]`, val);\n return this;\n }\n\n lte(field: string, value: string | number | Date): this {\n const val = value instanceof Date ? value.toISOString() : String(value);\n this.queryParams.append(`${field}[lte]`, val);\n return this;\n }\n\n /**\n * Filter records within a numeric or date range (inclusive)\n * Example: .between('price', 100, 500) or .between('check_in', '2026-10-01', '2026-10-15')\n */\n between(field: string, from: string | number | Date, to: string | number | Date): this {\n this.gte(field, from);\n this.lte(field, to);\n return this;\n }\n\n /**\n * Alias for .between(...)\n */\n range(field: string, min: string | number | Date, max: string | number | Date): this {\n return this.between(field, min, max);\n }\n\n /**\n * Helper specifically for date/timestamp range filtering\n * Example: .dateRange('created_at', '2026-09-01', '2026-09-30')\n */\n dateRange(field: string, startDate: string | Date, endDate: string | Date): this {\n return this.between(field, startDate, endDate);\n }\n\n /**\n * Case-insensitive substring search (ILIKE %substring%)\n */\n like(field: string, substring: string): this {\n this.queryParams.append(`${field}[like]`, substring);\n return this;\n }\n\n /**\n * Set membership: matches if field value is in the array\n */\n in(field: string, values: Array<string | number>): this {\n this.queryParams.append(`${field}[in]`, values.map(String).join(','));\n return this;\n }\n\n isNull(field: string): this {\n this.queryParams.append(`${field}[null]`, 'true');\n return this;\n }\n\n isNotNull(field: string): this {\n this.queryParams.append(`${field}[null]`, 'false');\n return this;\n }\n\n /**\n * Filter entities connected by graph relationship\n */\n related(relationName: string, entityIds: string | string[]): this {\n const ids = Array.isArray(entityIds) ? entityIds.join(',') : entityIds;\n this.queryParams.append(`related[${relationName}]`, ids);\n return this;\n }\n\n /**\n * Declaratively expand graph relations (Supabase-style join expansion)\n * Example: .include('placed_by', 'payment', 'items')\n */\n include(...relations: string[]): this {\n const existing = this.queryParams.get('include');\n const existingList = existing ? existing.split(',').map((s) => s.trim()) : [];\n const combined = Array.from(new Set([...existingList, ...relations.map((s) => s.trim())])).filter(Boolean);\n if (combined.length > 0) {\n this.queryParams.set('include', combined.join(','));\n }\n return this;\n }\n\n // ----------------------------------------------------\n // Sorting, Pagination & Modifiers\n // ----------------------------------------------------\n\n orderBy(field: string, direction: 'asc' | 'desc' = 'asc'): this {\n const sortVal = direction === 'desc' ? `-${field}` : field;\n this.queryParams.append('sort', sortVal);\n return this;\n }\n\n limit(limit: number): this {\n this.queryParams.set('limit', String(limit));\n return this;\n }\n\n page(page: number, limit?: number): this {\n this.queryParams.set('page', String(page));\n if (limit) this.queryParams.set('limit', String(limit));\n return this;\n }\n\n offset(offset: number): this {\n this.queryParams.set('offset', String(offset));\n return this;\n }\n\n cursor(token: string): this {\n this.queryParams.set('cursor', token);\n return this;\n }\n\n flat(enabled: boolean = true): this {\n this.queryParams.set('flat', enabled ? 'true' : 'false');\n return this;\n }\n\n /**\n * Set target language for automatic JSONB translation flattening.\n * Example: .lang('fr') returns French fields, falling back to 'en'.\n * Set to '*' or call .rawTranslations() to get raw multilingual dictionaries.\n */\n lang(locale: string): this {\n this.queryParams.set('lang', locale);\n return this;\n }\n\n /**\n * Alias for .lang(locale)\n */\n language(locale: string): this {\n return this.lang(locale);\n }\n\n /**\n * Request raw, unflattened multilingual dictionaries ({ en: \"...\", fr: \"...\" })\n * Essential for Admin/CMS forms to avoid overwriting other language translations on update.\n */\n rawTranslations(enabled: boolean = true): this {\n if (enabled) {\n this.queryParams.set('lang', '*');\n this.queryParams.set('rawTranslations', 'true');\n } else {\n this.queryParams.delete('rawTranslations');\n if (this.queryParams.get('lang') === '*') {\n this.queryParams.delete('lang');\n }\n }\n return this;\n }\n\n // ----------------------------------------------------\n // Execution Methods\n // ----------------------------------------------------\n\n /**\n * Execute query and list matching records with pagination metadata\n */\n async list(): Promise<EntityListResponse<T>> {\n const qs = this.queryParams.toString();\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}${qs ? `?${qs}` : ''}`;\n \n const res = await this.executeRequest(url);\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Query failed with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n /**\n * Fetch a single entity by ID with optional expansion, translation locale, and flattening\n */\n async get(id: string, options?: GetEntityOptions): Promise<EntityRecord<T>> {\n const params = new URLSearchParams(this.queryParams);\n if (options?.flat !== undefined) {\n params.set('flat', options.flat ? 'true' : 'false');\n }\n if (options?.lang) {\n params.set('lang', options.lang);\n }\n if (options?.rawTranslations) {\n params.set('lang', '*');\n params.set('rawTranslations', 'true');\n }\n if (options?.include && options.include.length > 0) {\n const existing = params.get('include');\n const existingList = existing ? existing.split(',').map((s) => s.trim()) : [];\n const combined = Array.from(new Set([...existingList, ...options.include.map((s) => s.trim())])).filter(Boolean);\n params.set('include', combined.join(','));\n }\n const qs = params.toString();\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}${qs ? `?${qs}` : ''}`;\n const res = await this.executeRequest(url);\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch ${this.typeName}/${id}`);\n }\n\n return res.json();\n }\n\n /**\n * Create a new entity record matching schema\n */\n async create(data: T): Promise<EntityRecord<T>> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}`;\n const res = await this.executeRequest(url, {\n method: 'POST',\n body: JSON.stringify(data)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to create record in ${this.typeName}`);\n }\n\n return res.json();\n }\n\n /**\n * Update an existing entity record\n */\n async update(id: string, partialData: Partial<T>): Promise<EntityRecord<T>> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}`;\n const res = await this.executeRequest(url, {\n method: 'PATCH',\n body: JSON.stringify(partialData)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to update ${this.typeName}/${id}`);\n }\n\n return res.json();\n }\n\n /**\n * Soft-delete an entity record\n */\n async delete(id: string): Promise<{ success: boolean }> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}`;\n const res = await this.executeRequest(url, {\n method: 'DELETE'\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to delete ${this.typeName}/${id}`);\n }\n\n return { success: true };\n }\n\n /**\n * Fetch revision history for an entity record\n */\n async revisions(id: string): Promise<EntityRevision<T>[]> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/revisions`;\n const res = await this.executeRequest(url);\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch revisions for ${this.typeName}/${id}`);\n }\n\n return res.json();\n }\n\n /**\n * Fetch all graph relations for this entity record\n */\n async getRelations(id: string, lang?: string): Promise<EntityRelationRecord[]> {\n const activeLang = lang || this.queryParams.get('lang');\n const qs = activeLang ? `?lang=${encodeURIComponent(activeLang)}` : '';\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/relations${qs}`;\n const res = await this.executeRequest(url);\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch relations for ${this.typeName}/${id}`);\n }\n\n return res.json();\n }\n\n /**\n * Link this record to another entity record\n * Supports:\n * .link(id, 'in_category', categoryId)\n * .link(id, 'in_category', 'category', categoryId)\n * .link(id, { relationName: 'in_category', targetId: categoryId, targetTypeName: 'category' })\n */\n async link(\n id: string,\n relationOrPayload: string | EntityRelationPayload,\n targetTypeNameOrId?: string,\n maybeTargetId?: string\n ): Promise<{ success: boolean }> {\n let payload: EntityRelationPayload;\n if (typeof relationOrPayload === 'string') {\n if (maybeTargetId) {\n payload = {\n relationName: relationOrPayload,\n targetTypeName: targetTypeNameOrId,\n targetId: maybeTargetId,\n };\n } else {\n payload = {\n relationName: relationOrPayload,\n targetId: targetTypeNameOrId!,\n };\n }\n } else {\n const p = relationOrPayload;\n payload = {\n relationName: p.relationName || p.relation_name || '',\n targetId: p.targetId || p.target_id || p.child_id || p.childId || '',\n targetTypeName: p.targetTypeName || p.target_type_name,\n };\n }\n\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/relations`;\n const res = await this.executeRequest(url, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to create relation for ${this.typeName}/${id}`);\n }\n\n return res.json().catch(() => ({ success: true }));\n }\n\n /**\n * Replace the full set of relations of one relation name\n */\n async setLinks(id: string, payload: EntityReplaceRelationsPayload): Promise<{ success: boolean }> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/relations`;\n const res = await this.executeRequest(url, {\n method: 'PUT',\n body: JSON.stringify(payload)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to replace relations for ${this.typeName}/${id}`);\n }\n\n return res.json().catch(() => ({ success: true }));\n }\n\n /**\n * Remove one graph link between two records\n */\n async unlink(id: string, relationName: string, targetId: string, targetTypeName: string): Promise<{ success: boolean }> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/relations/${encodeURIComponent(relationName)}/${encodeURIComponent(targetId)}?targetTypeName=${encodeURIComponent(targetTypeName)}`;\n const res = await this.executeRequest(url, {\n method: 'DELETE'\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to delete relation ${relationName} for ${this.typeName}/${id}`);\n }\n\n return res.json().catch(() => ({ success: true }));\n }\n\n /**\n * Execute a type-level workflow plugin action (e.g. checkout, batch-process)\n */\n async action<R = any>(actionName: string, payload?: object): Promise<R> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/actions/${actionName}`;\n const res = await this.executeRequest(url, {\n method: 'POST',\n body: payload ? JSON.stringify(payload) : undefined\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Action ${actionName} failed on type ${this.typeName}`);\n }\n\n return res.json();\n }\n\n /**\n * Execute an instance-level workflow plugin action (e.g. cancel order, approve)\n */\n async instanceAction<R = any>(id: string, actionName: string, payload?: object): Promise<R> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/actions/${actionName}`;\n const res = await this.executeRequest(url, {\n method: 'POST',\n body: payload ? JSON.stringify(payload) : undefined\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Action ${actionName} failed on ${this.typeName}/${id}`);\n }\n\n return res.json();\n }\n\n /**\n * Export matching entity records to CSV format with active filters\n */\n async exportCsv(): Promise<string> {\n const qs = this.queryParams.toString();\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/export/csv${qs ? `?${qs}` : ''}`;\n const res = await this.executeRequest(url, {\n headers: {\n 'Accept': 'text/csv'\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to export CSV for ${this.typeName}`);\n }\n\n return res.text();\n }\n}\n","import { EntitySchemaDefinition } from './types';\n\nexport class SchemaClient {\n private gatewayUrl: string;\n private tenantId: string;\n private getToken: () => string | null;\n private fetchFn: typeof fetch;\n private fetchWithAuth?: (url: string, init?: RequestInit) => Promise<Response>;\n\n constructor(options: {\n gatewayUrl: string;\n tenantId: string;\n getToken?: () => string | null;\n fetchFn?: typeof fetch;\n fetchWithAuth?: (url: string, init?: RequestInit) => Promise<Response>;\n }) {\n this.gatewayUrl = options.gatewayUrl.replace(/\\/+$/, '');\n this.tenantId = options.tenantId;\n this.getToken = options.getToken || (() => null);\n this.fetchFn = options.fetchFn || (typeof fetch !== 'undefined' ? fetch : (globalThis.fetch as any));\n this.fetchWithAuth = options.fetchWithAuth;\n }\n\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n };\n const token = this.getToken();\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n return headers;\n }\n\n /**\n * Define a new JSON Schema or alter an existing schema for an entity type in real-time\n */\n async define(definition: EntitySchemaDefinition): Promise<{ success: boolean; version?: number }> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/definition`;\n const init: RequestInit = {\n method: 'POST',\n body: JSON.stringify(definition)\n };\n const res = this.fetchWithAuth\n ? await this.fetchWithAuth(url, init)\n : await this.fetchFn(url, { ...init, headers: this.getHeaders() });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to define schema for ${definition.typeName}`);\n }\n\n return res.json();\n }\n}\n","import { StorageAdapter } from './types';\n\nexport class MemoryStorage implements StorageAdapter {\n private store = new Map<string, string>();\n\n getItem(key: string): string | null {\n return this.store.get(key) ?? null;\n }\n\n setItem(key: string, value: string): void {\n this.store.set(key, value);\n }\n\n removeItem(key: string): void {\n this.store.delete(key);\n }\n}\n\nexport function getDefaultStorage(): StorageAdapter {\n if (typeof window !== 'undefined' && window.localStorage) {\n return window.localStorage;\n }\n return new MemoryStorage();\n}\n","import { AuthClient } from './auth';\nimport { EntityQueryBuilder } from './query-builder';\nimport { SchemaClient } from './schema';\nimport { getDefaultStorage } from './storage';\nimport { StorageAdapter, UserProfileWithWallet, Zone4CodeConfig } from './types';\n\nexport class Zone4CodeClient {\n public readonly gatewayUrl: string;\n public readonly tenantId: string;\n public readonly auth: AuthClient;\n public readonly schema: SchemaClient;\n\n private storage: StorageAdapter;\n private fetchFn: typeof fetch;\n private currentLanguage: string | null = null;\n\n constructor(config: Zone4CodeConfig) {\n if (!config.gatewayUrl) {\n throw new Error('Zone4CodeClient requires a `gatewayUrl` (e.g., http://localhost:8080)');\n }\n if (!config.tenantId) {\n throw new Error('Zone4CodeClient requires a `tenantId` (workspace identifier)');\n }\n\n this.gatewayUrl = config.gatewayUrl.replace(/\\/+$/, '');\n this.tenantId = config.tenantId;\n this.storage = config.storage || getDefaultStorage();\n this.fetchFn = config.fetch || (typeof fetch !== 'undefined' ? fetch : (globalThis.fetch as any));\n this.currentLanguage = config.defaultLanguage || null;\n\n this.auth = new AuthClient({\n gatewayUrl: this.gatewayUrl,\n tenantId: this.tenantId,\n storage: this.storage,\n storageKey: config.storageKey,\n initialToken: config.token,\n fetchFn: this.fetchFn,\n autoRefresh: config.autoRefresh,\n tokenExpiryBuffer: config.tokenExpiryBuffer,\n onSessionExpired: config.onSessionExpired,\n getLanguage: () => this.getLanguage()\n });\n\n this.schema = new SchemaClient({\n gatewayUrl: this.gatewayUrl,\n tenantId: this.tenantId,\n getToken: () => this.auth.getToken(),\n fetchFn: this.fetchFn,\n fetchWithAuth: (url, init) => this.auth.fetchWithAuth(url, init)\n });\n }\n\n /**\n * Set the active default language for API requests (e.g., 'en', 'fr', 'ar', or '*' for raw)\n */\n public setLanguage(lang: string | null): this {\n this.currentLanguage = lang;\n return this;\n }\n\n /**\n * Get the active default language\n */\n public getLanguage(): string | null {\n return this.currentLanguage;\n }\n\n /**\n * Access an entity collection with chainable query builder (like Supabase .from('orders'))\n */\n public from<T = Record<string, any>>(typeName: string): EntityQueryBuilder<T> {\n return new EntityQueryBuilder<T>({\n gatewayUrl: this.gatewayUrl,\n tenantId: this.tenantId,\n typeName,\n getToken: () => this.auth.getToken(),\n fetchFn: this.fetchFn,\n fetchWithAuth: (url, init) => this.auth.fetchWithAuth(url, init),\n defaultLanguage: () => this.getLanguage()\n });\n }\n\n /**\n * Alias for .from(typeName)\n */\n public entities<T = Record<string, any>>(typeName: string): EntityQueryBuilder<T> {\n return this.from<T>(typeName);\n }\n\n /**\n * Register a listener called whenever the session expires completely\n */\n public onSessionExpired(callback: () => void): () => void {\n return this.auth.onSessionExpired(callback);\n }\n\n /**\n * Get current authenticated user profile and platform wallet\n */\n public async getMe(): Promise<UserProfileWithWallet> {\n const res = await this.auth.fetchWithAuth(`${this.gatewayUrl}/generic/${this.tenantId}/me`);\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch profile & wallet (HTTP ${res.status})`);\n }\n\n return res.json();\n }\n\n /**\n * Check gateway connectivity & health\n */\n public async health(): Promise<{ status: string; licenseTier?: string }> {\n const res = await this.fetchFn(`${this.gatewayUrl}/health`);\n if (!res.ok) {\n throw new Error(`Gateway health check failed with HTTP ${res.status}`);\n }\n return res.json();\n }\n}\n\n/**\n * Factory function to instantiate a new Zone4Code client\n */\nexport function createClient(config: Zone4CodeConfig): Zone4CodeClient {\n return new Zone4CodeClient(config);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/auth.ts","../src/commerce.ts","../src/doc.ts","../src/notification.ts","../src/query-builder.ts","../src/schema.ts","../src/storage.ts","../src/client.ts"],"sourcesContent":["import { AuthResponse, AuthUser, StorageAdapter } from './types';\n\nfunction decodeJwtPayload(token: string): any {\n try {\n const base64Url = token.split('.')[1];\n if (!base64Url) return null;\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n if (typeof atob === 'function') {\n const jsonStr = decodeURIComponent(\n atob(base64)\n .split('')\n .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n .join('')\n );\n return JSON.parse(jsonStr);\n } else if (typeof globalThis !== 'undefined' && (globalThis as any).Buffer) {\n return JSON.parse((globalThis as any).Buffer.from(base64, 'base64').toString('utf8'));\n }\n return null;\n } catch {\n return null;\n }\n}\n\nfunction normalizeHeaders(headers?: HeadersInit): Record<string, string> {\n const result: Record<string, string> = {};\n if (!headers) return result;\n if (typeof Headers !== 'undefined' && headers instanceof Headers) {\n headers.forEach((value, key) => {\n result[key] = value;\n });\n } else if (Array.isArray(headers)) {\n for (const [key, value] of headers) {\n result[key] = value;\n }\n } else {\n Object.assign(result, headers);\n }\n return result;\n}\n\nexport class AuthClient {\n private gatewayUrl: string;\n private tenantId: string;\n private storage: StorageAdapter;\n private storageKey: string;\n private refreshStorageKey: string;\n private token: string | null = null;\n private refreshTokenValue: string | null = null;\n private fetchFn: typeof fetch;\n private autoRefresh: boolean;\n private tokenExpiryBuffer: number;\n private onSessionExpiredCallback?: () => void;\n private sessionExpiredListeners: Array<() => void> = [];\n private activeRefreshPromise: Promise<AuthResponse> | null = null;\n private storageLoadedPromise: Promise<void>;\n private getLanguage?: () => string | null;\n\n private static TOKEN_KEY_PREFIX = 'z4c_token_';\n\n constructor(options: {\n gatewayUrl: string;\n tenantId: string;\n storage: StorageAdapter;\n storageKey?: string;\n initialToken?: string;\n fetchFn?: typeof fetch;\n autoRefresh?: boolean;\n tokenExpiryBuffer?: number;\n onSessionExpired?: () => void;\n getLanguage?: () => string | null;\n }) {\n const storage = options.storage;\n const storageKey = options.storageKey || (AuthClient.TOKEN_KEY_PREFIX + options.tenantId);\n const refreshStorageKey = storageKey + '_refresh';\n\n this.gatewayUrl = options.gatewayUrl.replace(/\\/+$/, '');\n this.tenantId = options.tenantId;\n this.storage = storage;\n this.storageKey = storageKey;\n this.refreshStorageKey = refreshStorageKey;\n this.fetchFn = options.fetchFn || ((...args) => fetch(...args));\n this.autoRefresh = options.autoRefresh !== undefined ? options.autoRefresh : true;\n this.tokenExpiryBuffer = options.tokenExpiryBuffer !== undefined ? options.tokenExpiryBuffer : 30;\n this.onSessionExpiredCallback = options.onSessionExpired;\n this.getLanguage = options.getLanguage;\n\n this.storageLoadedPromise = (async () => {\n if (options.initialToken) {\n this.setToken(options.initialToken);\n } else {\n try {\n const storedToken = await storage.getItem(storageKey);\n if (storedToken) this.token = storedToken;\n const storedRefresh = await storage.getItem(refreshStorageKey);\n if (storedRefresh) this.refreshTokenValue = storedRefresh;\n } catch {\n // ignore storage read errors\n }\n }\n })();\n }\n\n public getToken(): string | null {\n return this.token;\n }\n\n public getRefreshToken(): string | null {\n return this.refreshTokenValue;\n }\n\n public setToken(token: string | null): void {\n this.token = token;\n if (token) {\n this.storage.setItem(this.storageKey, token);\n } else {\n this.storage.removeItem(this.storageKey);\n }\n }\n\n public setRefreshToken(token: string | null): void {\n this.refreshTokenValue = token;\n if (token) {\n this.storage.setItem(this.refreshStorageKey, token);\n } else {\n this.storage.removeItem(this.refreshStorageKey);\n }\n }\n\n public isAuthenticated(): boolean {\n return !!this.token;\n }\n\n /**\n * Check whether the current access token is expired or expiring within bufferSeconds\n */\n public isTokenExpired(bufferSeconds: number = this.tokenExpiryBuffer): boolean {\n if (!this.token) return true;\n const payload = decodeJwtPayload(this.token);\n if (!payload || typeof payload.exp !== 'number') return false;\n const nowSeconds = Math.floor(Date.now() / 1000);\n return nowSeconds >= (payload.exp - bufferSeconds);\n }\n\n /**\n * Returns a valid access token, proactively refreshing it if expired and autoRefresh is enabled\n */\n public async getValidToken(): Promise<string | null> {\n await this.storageLoadedPromise;\n if (!this.token) return null;\n if (!this.autoRefresh) return this.token;\n\n if (this.isTokenExpired()) {\n const refreshToken = this.getRefreshToken();\n if (refreshToken) {\n try {\n const res = await this.refreshToken(refreshToken);\n return res.token || this.token;\n } catch {\n return null;\n }\n } else {\n this.notifySessionExpired();\n return null;\n }\n }\n\n return this.token;\n }\n\n /**\n * Register a callback triggered when session has expired completely\n */\n public onSessionExpired(listener: () => void): () => void {\n this.sessionExpiredListeners.push(listener);\n return () => {\n this.sessionExpiredListeners = this.sessionExpiredListeners.filter((l) => l !== listener);\n };\n }\n\n private notifySessionExpired(): void {\n this.logout();\n for (const listener of this.sessionExpiredListeners) {\n try {\n listener();\n } catch (e) {\n console.error('Error in onSessionExpired listener:', e);\n }\n }\n if (this.onSessionExpiredCallback) {\n try {\n this.onSessionExpiredCallback();\n } catch (e) {\n console.error('Error in onSessionExpired callback:', e);\n }\n }\n }\n\n /**\n * Perform an HTTP request with automatic Authorization injection, proactive refresh, and reactive 401 retry\n */\n public async fetchWithAuth(url: string, init: RequestInit = {}): Promise<Response> {\n await this.storageLoadedPromise;\n\n const token = await this.getValidToken();\n\n const headers = normalizeHeaders(init.headers);\n if (!headers['x-tenant-id'] && !headers['X-Tenant-Id']) {\n headers['x-tenant-id'] = this.tenantId;\n }\n if (init.body && !headers['Content-Type'] && !headers['content-type']) {\n headers['Content-Type'] = 'application/json';\n }\n if (token && !headers['Authorization'] && !headers['authorization']) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n const currentLang = this.getLanguage ? this.getLanguage() : null;\n if (currentLang && !headers['Accept-Language'] && !headers['accept-language']) {\n headers['Accept-Language'] = currentLang;\n }\n\n let res = await this.fetchFn(url, { ...init, headers });\n\n // Reactive retry on 401 if autoRefresh is enabled and we have a refresh token\n if (res.status === 401 && this.autoRefresh && this.getRefreshToken()) {\n try {\n const refreshed = await this.refreshToken();\n if (refreshed?.token) {\n headers['Authorization'] = `Bearer ${refreshed.token}`;\n res = await this.fetchFn(url, { ...init, headers });\n }\n } catch {\n // Refresh failed, original response will be returned\n }\n }\n\n return res;\n }\n\n /**\n * Synchronously parse and return current authenticated user from JWT token\n */\n public getUser(): AuthUser | null {\n if (!this.token) return null;\n const jwt = decodeJwtPayload(this.token);\n if (!jwt) return null;\n return {\n id: jwt.sub || '',\n email: jwt.email,\n username: jwt.preferred_username,\n name: jwt.name || `${jwt.given_name || ''} ${jwt.family_name || ''}`.trim() || undefined,\n firstName: jwt.given_name,\n lastName: jwt.family_name,\n roles: jwt.realm_access?.roles || [],\n attributes: jwt.attributes\n };\n }\n\n /**\n * Register a new user in the tenant realm\n */\n async register(data: {\n email: string;\n password: string;\n name?: string;\n firstName?: string;\n lastName?: string;\n username?: string;\n attributes?: Record<string, any>;\n autoLogin?: boolean;\n }): Promise<AuthResponse> {\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/user`;\n const [firstNameFromSplit, ...rest] = (data.name || '').trim().split(' ');\n const lastNameFromSplit = rest.join(' ');\n\n const payload = {\n username: data.username || data.email,\n email: data.email,\n firstName: data.firstName || firstNameFromSplit || '',\n lastName: data.lastName || lastNameFromSplit || '',\n enabled: true,\n credentials: [\n {\n type: 'password',\n value: data.password,\n temporary: false\n }\n ],\n attributes: data.attributes || {}\n };\n\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify(payload)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || err.error || `Registration failed with HTTP ${res.status}`);\n }\n\n const created = await res.json();\n\n if (data.autoLogin !== false) {\n try {\n return await this.login({\n login: data.username || data.email,\n password: data.password\n });\n } catch {\n // Fall through to returning created user if auto-login encounters an issue\n }\n }\n\n return {\n token: '',\n user: {\n id: created.id || '',\n email: data.email,\n username: payload.username,\n name: data.name || `${payload.firstName} ${payload.lastName}`.trim(),\n firstName: payload.firstName,\n lastName: payload.lastName,\n attributes: data.attributes\n }\n };\n }\n\n /**\n * Log in an existing user and store their JWT token\n * Accepts { login, password }, { email, password }, or { username, password }\n */\n async login(credentials: {\n login?: string;\n email?: string;\n username?: string;\n password: string;\n }): Promise<AuthResponse> {\n const loginIdentifier = credentials.login || credentials.email || credentials.username;\n if (!loginIdentifier) {\n throw new Error('Missing login identifier: please provide email, username, or login');\n }\n\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/login`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify({\n login: loginIdentifier,\n password: credentials.password\n })\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || err.error || `Login failed with HTTP ${res.status}`);\n }\n\n const json = await res.json();\n const token = json.token || json.access_token;\n if (token) {\n this.setToken(token);\n }\n if (json.refresh_token) {\n this.setRefreshToken(json.refresh_token);\n }\n\n const user = this.getUser() || json.user;\n\n return {\n token: token || '',\n refreshToken: json.refresh_token,\n user,\n ...json\n };\n }\n\n /**\n * Authenticate via Google OAuth ID token\n */\n async loginWithGoogle(token: string): Promise<AuthResponse> {\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/login/google`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify({ token })\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || err.error || `Google login failed with HTTP ${res.status}`);\n }\n\n const json = await res.json();\n const jwt = json.token || json.access_token;\n if (jwt) {\n this.setToken(jwt);\n }\n if (json.refresh_token) {\n this.setRefreshToken(json.refresh_token);\n }\n\n const user = this.getUser() || json.user;\n\n return {\n token: jwt || '',\n refreshToken: json.refresh_token,\n user,\n ...json\n };\n }\n\n /**\n * Renew expired access token using stored or provided refresh token\n */\n async refreshToken(refreshToken?: string): Promise<AuthResponse> {\n const tokenToUse = refreshToken || this.getRefreshToken();\n if (!tokenToUse) {\n this.notifySessionExpired();\n throw new Error('No refresh token available');\n }\n\n if (this.activeRefreshPromise) {\n return this.activeRefreshPromise;\n }\n\n this.activeRefreshPromise = (async () => {\n try {\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/refresh`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify({ refresh_token: tokenToUse })\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n this.notifySessionExpired();\n throw new Error(err.message || err.error || `Token refresh failed with HTTP ${res.status}`);\n }\n\n const json = await res.json();\n const token = json.token || json.access_token;\n if (token) {\n this.setToken(token);\n }\n if (json.refresh_token) {\n this.setRefreshToken(json.refresh_token);\n }\n\n const user = this.getUser() || json.user;\n\n return {\n token: token || '',\n refreshToken: json.refresh_token,\n user,\n ...json\n };\n } finally {\n this.activeRefreshPromise = null;\n }\n })();\n\n return this.activeRefreshPromise;\n }\n\n /**\n * Request password reset email\n */\n async forgotPassword(data: { email: string; frontendUrl?: string } | string): Promise<{ success: boolean; message: string }> {\n const payload = typeof data === 'string' ? { email: data } : data;\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/auth/forgot-password`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify(payload)\n });\n\n const json = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new Error(json.message || json.error || `Forgot password request failed with HTTP ${res.status}`);\n }\n return json;\n }\n\n /**\n * Complete password reset using action token\n */\n async resetPassword(data: { token: string; newPassword: string }): Promise<{ success: boolean; message: string }> {\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/auth/reset-password`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n },\n body: JSON.stringify(data)\n });\n\n const json = await res.json().catch(() => ({}));\n if (!res.ok) {\n throw new Error(json.message || json.error || `Reset password failed with HTTP ${res.status}`);\n }\n return json;\n }\n\n /**\n * Change password for current or specified user\n */\n async changePassword(data: { oldPassword: string; newPassword: string }, userId?: string): Promise<{ success: boolean; message?: string }> {\n const targetUserId = userId || this.getUser()?.id;\n if (!targetUserId) {\n throw new Error('User ID required: user is not logged in and no userId was provided');\n }\n\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/user/${targetUserId}/change-password`;\n const res = await this.fetchFn(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId,\n ...(this.token ? { 'Authorization': `Bearer ${this.token}` } : {})\n },\n body: JSON.stringify(data)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || err.error || `Change password failed with HTTP ${res.status}`);\n }\n\n return res.json().catch(() => ({ success: true }));\n }\n\n /**\n * Update profile attributes for current or specified user\n */\n async updateProfile(data: Partial<AuthUser> & Record<string, any>, userId?: string): Promise<AuthUser> {\n const targetUserId = userId || this.getUser()?.id;\n if (!targetUserId) {\n throw new Error('User ID required: user is not logged in and no userId was provided');\n }\n\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/user/${targetUserId}`;\n const res = await this.fetchFn(url, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId,\n ...(this.token ? { 'Authorization': `Bearer ${this.token}` } : {})\n },\n body: JSON.stringify(data)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || err.error || `Update profile failed with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n /**\n * Fetch current authenticated user profile\n */\n async getProfile(): Promise<AuthUser> {\n const user = this.getUser();\n if (user && user.id) {\n return user;\n }\n\n if (!this.token) {\n throw new Error('Not authenticated: please call login() or setToken() first');\n }\n\n const url = `${this.gatewayUrl}/auth/${this.tenantId}/user/profile`;\n const res = await this.fetchFn(url, {\n headers: {\n 'Authorization': `Bearer ${this.token}`,\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch profile (HTTP ${res.status})`);\n }\n\n return res.json();\n }\n\n /**\n * Log out and clear saved tokens\n */\n logout(): void {\n this.setToken(null);\n this.setRefreshToken(null);\n }\n}\n","export interface ProductItem {\n id: string | number;\n name: string;\n slug: string;\n description?: string;\n price: number;\n sale_price?: number | null;\n min_price?: number;\n max_price?: number;\n sku?: string;\n quantity?: number;\n in_stock?: boolean;\n is_taxable?: boolean;\n status?: string;\n product_type?: string;\n image?: {\n id: string;\n original: string;\n thumbnail?: string;\n };\n gallery?: Array<{\n id: string;\n original: string;\n thumbnail?: string;\n }>;\n categories?: Array<{\n id: string | number;\n name: string;\n slug: string;\n }>;\n shop_id?: string | number;\n created_at?: string;\n updated_at?: string;\n [key: string]: any;\n}\n\nexport interface ProductPaginator {\n data: ProductItem[];\n count?: number;\n total?: number;\n currentPage?: number;\n lastPage?: number;\n perPage?: number;\n first_page_url?: string;\n last_page_url?: string;\n next_page_url?: string;\n prev_page_url?: string;\n}\n\nexport interface CategoryItem {\n id: string | number;\n name: string;\n slug: string;\n icon?: string;\n image?: {\n id: string;\n original: string;\n thumbnail?: string;\n };\n details?: string;\n parent_id?: string | number | null;\n children?: CategoryItem[];\n products_count?: number;\n [key: string]: any;\n}\n\nexport interface OrderItem {\n id: string | number;\n tracking_number: string;\n customer_id?: string;\n customer_contact?: string;\n customer_name?: string;\n amount: number;\n total: number;\n paid_total?: number;\n payment_id?: string;\n payment_gateway?: string;\n payment_status?: string;\n delivery_fee?: number;\n sales_tax?: number;\n discount?: number;\n coupon_id?: string | number | null;\n status?: {\n id: string | number;\n name: string;\n serial?: number;\n color?: string;\n };\n products?: Array<{\n id: string | number;\n name: string;\n pivot?: {\n order_quantity: number;\n unit_price: number;\n subtotal: number;\n };\n }>;\n shipping_address?: Record<string, any>;\n billing_address?: Record<string, any>;\n created_at?: string;\n updated_at?: string;\n [key: string]: any;\n}\n\nexport interface CreateOrderPayload {\n products: Array<{\n product_id: string | number;\n order_quantity: number;\n unit_price?: number;\n subtotal?: number;\n }>;\n amount?: number;\n total?: number;\n coupon_id?: string | number;\n discount?: number;\n sales_tax?: number;\n delivery_fee?: number;\n customer_contact?: string;\n customer_name?: string;\n payment_gateway?: string;\n use_wallet_points?: boolean;\n shipping_address?: Record<string, any>;\n billing_address?: Record<string, any>;\n note?: string;\n [key: string]: any;\n}\n\nexport interface VerifyCheckoutPayload {\n amount: number;\n products: Array<{\n product_id: string | number;\n order_quantity: number;\n unit_price?: number;\n }>;\n billing_address?: Record<string, any>;\n shipping_address?: Record<string, any>;\n}\n\nexport interface VerifyCheckoutResponse {\n total_tax: number;\n shipping_charge: number;\n unavailable_products: Array<string | number>;\n wallet_amount?: number;\n wallet_currency?: number;\n}\n\nexport interface VerifyCouponPayload {\n code: string;\n sub_total: number;\n}\n\nexport interface CouponItem {\n id: string | number;\n code: string;\n description?: string;\n amount: number;\n type?: 'fixed' | 'percentage' | 'free_shipping';\n is_valid: boolean;\n}\n\nexport class CommerceClient {\n private gatewayUrl: string;\n private tenantId: string;\n private fetchWithAuth: (url: string, init?: RequestInit) => Promise<Response>;\n private fetchFn: typeof fetch;\n\n constructor(options: {\n gatewayUrl: string;\n tenantId: string;\n fetchWithAuth: (url: string, init?: RequestInit) => Promise<Response>;\n fetchFn: typeof fetch;\n }) {\n this.gatewayUrl = options.gatewayUrl.replace(/\\/+$/, '');\n this.tenantId = options.tenantId;\n this.fetchWithAuth = options.fetchWithAuth;\n this.fetchFn = options.fetchFn;\n }\n\n // --- Products ---\n\n /**\n * List catalog products with search, category filtering, and pagination\n */\n public async getProducts(params?: {\n search?: string;\n category?: string;\n status?: string;\n limit?: number;\n page?: number;\n orderBy?: string;\n sortedBy?: 'ASC' | 'DESC' | 'asc' | 'desc';\n language?: string;\n type?: string;\n }): Promise<ProductPaginator> {\n const query = new URLSearchParams();\n if (params?.search) query.set('search', params.search);\n if (params?.category) query.set('category', params.category);\n if (params?.status) query.set('status', params.status);\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.page) query.set('page', String(params.page));\n if (params?.orderBy) query.set('orderBy', params.orderBy);\n if (params?.sortedBy) query.set('sortedBy', params.sortedBy);\n if (params?.language) query.set('language', params.language);\n if (params?.type) query.set('type', params.type);\n\n const qs = query.toString();\n const url = `${this.gatewayUrl}/commerce/products${qs ? `?${qs}` : ''}`;\n const res = await this.fetchFn(url, {\n method: 'GET',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch products with HTTP ${res.status}`);\n }\n\n const data = await res.json();\n return Array.isArray(data) ? { data } : data;\n }\n\n /**\n * Get a single product by slug or ID\n */\n public async getProductBySlug(slug: string, language?: string): Promise<ProductItem> {\n const query = language ? `?language=${encodeURIComponent(language)}` : '';\n const url = `${this.gatewayUrl}/commerce/products/${encodeURIComponent(slug)}${query}`;\n const res = await this.fetchFn(url, {\n method: 'GET',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Product not found with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n /**\n * Create a new product (requires merchant/admin authentication)\n */\n public async createProduct(product: Partial<ProductItem>): Promise<ProductItem> {\n const url = `${this.gatewayUrl}/commerce/products`;\n const res = await this.fetchWithAuth(url, {\n method: 'POST',\n body: JSON.stringify(product),\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to create product with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n // --- Categories ---\n\n /**\n * List store categories\n */\n public async getCategories(params?: { parent?: string | number; limit?: number; page?: number }): Promise<CategoryItem[]> {\n const query = new URLSearchParams();\n if (params?.parent !== undefined) query.set('parent', String(params.parent));\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.page) query.set('page', String(params.page));\n\n const qs = query.toString();\n const url = `${this.gatewayUrl}/commerce/categories${qs ? `?${qs}` : ''}`;\n const res = await this.fetchFn(url, {\n method: 'GET',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch categories with HTTP ${res.status}`);\n }\n\n const data = await res.json();\n return Array.isArray(data) ? data : (data.data || []);\n }\n\n // --- Orders & Checkout ---\n\n /**\n * Create a new customer checkout order\n */\n public async createOrder(payload: CreateOrderPayload): Promise<OrderItem> {\n const url = `${this.gatewayUrl}/commerce/orders`;\n const res = await this.fetchWithAuth(url, {\n method: 'POST',\n body: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to create order with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n /**\n * Verify checkout taxes, shipping fees, and product availability\n */\n public async verifyCheckout(payload: VerifyCheckoutPayload): Promise<VerifyCheckoutResponse> {\n const url = `${this.gatewayUrl}/commerce/orders/checkout/verify`;\n const res = await this.fetchWithAuth(url, {\n method: 'POST',\n body: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Checkout verification failed with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n /**\n * Track order by tracking number\n */\n public async trackOrder(trackingNumber: string): Promise<OrderItem> {\n const url = `${this.gatewayUrl}/commerce/orders/tracking/${encodeURIComponent(trackingNumber)}`;\n const res = await this.fetchFn(url, {\n method: 'GET',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Order tracking failed with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n /**\n * List customer orders (authenticated)\n */\n public async getOrders(params?: { limit?: number; page?: number; tracking_number?: string }): Promise<{ data: OrderItem[] }> {\n const query = new URLSearchParams();\n if (params?.limit) query.set('limit', String(params.limit));\n if (params?.page) query.set('page', String(params.page));\n if (params?.tracking_number) query.set('tracking_number', params.tracking_number);\n\n const qs = query.toString();\n const url = `${this.gatewayUrl}/commerce/orders${qs ? `?${qs}` : ''}`;\n const res = await this.fetchWithAuth(url, {\n method: 'GET',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch orders with HTTP ${res.status}`);\n }\n\n const data = await res.json();\n return Array.isArray(data) ? { data } : data;\n }\n\n // --- Coupons ---\n\n /**\n * Verify and calculate discount for a promo coupon code\n */\n public async verifyCoupon(payload: VerifyCouponPayload): Promise<{ is_valid: boolean; coupon?: CouponItem }> {\n const url = `${this.gatewayUrl}/commerce/coupons/verify`;\n const res = await this.fetchWithAuth(url, {\n method: 'POST',\n body: JSON.stringify(payload),\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Coupon verification failed with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n // --- Settings ---\n\n /**\n * Get store and commerce configuration settings\n */\n public async getSettings(): Promise<Record<string, any>> {\n const url = `${this.gatewayUrl}/commerce/settings`;\n const res = await this.fetchFn(url, {\n method: 'GET',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch settings with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n}\n","export interface UploadResult {\n id: string;\n original: string;\n thumbnail?: string;\n filename: string;\n size: number;\n mimetype: string;\n}\n\nexport interface DocumentItem {\n id: string;\n name: string;\n url: string;\n size?: number;\n mimeType?: string;\n folderId?: string | null;\n tenantId?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport interface FolderItem {\n id: string;\n name: string;\n parentId?: string | null;\n tenantId?: string;\n createdAt?: string;\n}\n\nexport class DocClient {\n private gatewayUrl: string;\n private tenantId: string;\n private fetchWithAuth: (url: string, init?: RequestInit) => Promise<Response>;\n private fetchFn: typeof fetch;\n\n constructor(options: {\n gatewayUrl: string;\n tenantId: string;\n fetchWithAuth: (url: string, init?: RequestInit) => Promise<Response>;\n fetchFn: typeof fetch;\n }) {\n this.gatewayUrl = options.gatewayUrl.replace(/\\/+$/, '');\n this.tenantId = options.tenantId;\n this.fetchWithAuth = options.fetchWithAuth;\n this.fetchFn = options.fetchFn;\n }\n\n /**\n * Upload one or more files to object storage (S3/MinIO) with automated thumbnailing\n */\n public async upload(files: FormData | File | File[] | Blob | Blob[]): Promise<UploadResult[]> {\n const url = `${this.gatewayUrl}/doc/upload`;\n let body: FormData;\n\n if (typeof FormData !== 'undefined' && files instanceof FormData) {\n body = files;\n } else {\n body = new FormData();\n if (Array.isArray(files)) {\n for (const file of files) {\n body.append('files', file as Blob);\n }\n } else {\n body.append('files', files as Blob);\n }\n }\n\n const res = await this.fetchWithAuth(url, {\n method: 'POST',\n body,\n headers: {\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `File upload failed with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n /**\n * List documents with optional folder filtering and pagination\n */\n public async list(params?: { folderId?: string; page?: number; limit?: number }): Promise<DocumentItem[]> {\n const query = new URLSearchParams();\n if (params?.folderId) query.set('folderId', params.folderId);\n if (params?.page) query.set('page', String(params.page));\n if (params?.limit) query.set('limit', String(params.limit));\n\n const qs = query.toString();\n const url = `${this.gatewayUrl}/doc/document${qs ? `?${qs}` : ''}`;\n const res = await this.fetchWithAuth(url, {\n method: 'GET',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch documents with HTTP ${res.status}`);\n }\n\n const data = await res.json();\n return Array.isArray(data) ? data : (data.documents || data.items || []);\n }\n\n /**\n * Get a single document record by ID\n */\n public async get(id: string): Promise<DocumentItem> {\n const url = `${this.gatewayUrl}/doc/document/${encodeURIComponent(id)}`;\n const res = await this.fetchWithAuth(url, {\n method: 'GET',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Document not found with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n /**\n * Delete a document by ID\n */\n public async delete(id: string): Promise<{ success: boolean }> {\n const url = `${this.gatewayUrl}/doc/document/${encodeURIComponent(id)}`;\n const res = await this.fetchWithAuth(url, {\n method: 'DELETE',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to delete document with HTTP ${res.status}`);\n }\n\n return { success: true };\n }\n\n /**\n * List document folders\n */\n public async listFolders(): Promise<FolderItem[]> {\n const url = `${this.gatewayUrl}/doc/folder`;\n const res = await this.fetchWithAuth(url, {\n method: 'GET',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch folders with HTTP ${res.status}`);\n }\n\n const data = await res.json();\n return Array.isArray(data) ? data : (data.folders || []);\n }\n\n /**\n * Create a new folder for organizing documents\n */\n public async createFolder(name: string, parentId?: string): Promise<FolderItem> {\n const url = `${this.gatewayUrl}/doc/folder`;\n const res = await this.fetchWithAuth(url, {\n method: 'POST',\n body: JSON.stringify({ name, parentId: parentId || null }),\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to create folder with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n}\n","export interface SendSmsPayload {\n to: string;\n message: string;\n from?: string;\n provider?: string;\n}\n\nexport interface SmsResponse {\n success: boolean;\n messageId?: string;\n status?: string;\n error?: string;\n}\n\nexport interface SendEmailPayload {\n to: string | string[];\n subject: string;\n html?: string;\n text?: string;\n templateId?: string;\n templateData?: Record<string, any>;\n localeCode?: string;\n shopSlug?: string;\n}\n\nexport interface EmailResponse {\n success: boolean;\n messageId?: string;\n status?: string;\n error?: string;\n}\n\nexport interface SendPushPayload {\n token?: string;\n tokens?: string[];\n topic?: string;\n title: string;\n body: string;\n data?: Record<string, string>;\n}\n\nexport interface PushResponse {\n success: boolean;\n messageId?: string;\n status?: string;\n error?: string;\n}\n\nexport interface PushRegistrationPayload {\n token: string;\n userId?: string;\n platform?: 'ios' | 'android' | 'web';\n metadata?: Record<string, any>;\n}\n\nexport interface NotificationItem {\n id: string;\n userId?: string;\n title: string;\n message: string;\n type?: string;\n read?: boolean;\n createdAt?: string;\n}\n\nexport class NotificationClient {\n private gatewayUrl: string;\n private tenantId: string;\n private fetchWithAuth: (url: string, init?: RequestInit) => Promise<Response>;\n private fetchFn: typeof fetch;\n\n constructor(options: {\n gatewayUrl: string;\n tenantId: string;\n fetchWithAuth: (url: string, init?: RequestInit) => Promise<Response>;\n fetchFn: typeof fetch;\n }) {\n this.gatewayUrl = options.gatewayUrl.replace(/\\/+$/, '');\n this.tenantId = options.tenantId;\n this.fetchWithAuth = options.fetchWithAuth;\n this.fetchFn = options.fetchFn;\n }\n\n /**\n * Send an SMS message via configured SMS gateways (Twilio / SMS API)\n */\n public async sendSms(payload: SendSmsPayload): Promise<SmsResponse> {\n const url = `${this.gatewayUrl}/notification/sms`;\n const res = await this.fetchWithAuth(url, {\n method: 'POST',\n body: JSON.stringify({\n to: payload.to,\n body: payload.message,\n from: payload.from,\n provider: payload.provider\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to send SMS with HTTP ${res.status}`);\n }\n\n const data = await res.json();\n return {\n success: true,\n messageId: data.id || data.messageId || data.sid,\n status: data.status || 'sent'\n };\n }\n\n /**\n * Send an email or template email\n */\n public async sendEmail(payload: SendEmailPayload): Promise<EmailResponse> {\n const shopSlug = payload.shopSlug || this.tenantId;\n const localeCode = payload.localeCode || 'en';\n const url = `${this.gatewayUrl}/notification/${encodeURIComponent(shopSlug)}/sendEmail/${encodeURIComponent(localeCode)}`;\n\n const res = await this.fetchWithAuth(url, {\n method: 'POST',\n body: JSON.stringify({\n to: Array.isArray(payload.to) ? payload.to.join(',') : payload.to,\n subject: payload.subject,\n html: payload.html,\n text: payload.text,\n templateId: payload.templateId,\n templateData: payload.templateData\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to send Email with HTTP ${res.status}`);\n }\n\n const data = await res.json();\n return {\n success: true,\n messageId: data.id || data.messageId,\n status: data.status || 'sent'\n };\n }\n\n /**\n * Send Firebase Cloud Messaging (FCM) Push Notification\n */\n public async sendPush(payload: SendPushPayload): Promise<PushResponse> {\n const url = `${this.gatewayUrl}/notification/firebase_message`;\n const res = await this.fetchWithAuth(url, {\n method: 'POST',\n body: JSON.stringify({\n token: payload.token,\n tokens: payload.tokens,\n topic: payload.topic,\n notification: {\n title: payload.title,\n body: payload.body\n },\n data: payload.data || {}\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to send Push Notification with HTTP ${res.status}`);\n }\n\n const data = await res.json();\n return {\n success: true,\n messageId: data.messageId || data.id,\n status: 'sent'\n };\n }\n\n /**\n * Register a device push token for push notifications\n */\n public async registerPushToken(payload: PushRegistrationPayload): Promise<{ success: boolean; id?: string }> {\n const url = `${this.gatewayUrl}/notification/firebase_registration`;\n const res = await this.fetchWithAuth(url, {\n method: 'POST',\n body: JSON.stringify({\n token: payload.token,\n userId: payload.userId,\n platform: payload.platform || 'web',\n metadata: payload.metadata || {}\n }),\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to register push token with HTTP ${res.status}`);\n }\n\n const data = await res.json();\n return { success: true, id: data.id };\n }\n\n /**\n * Get recent in-app notifications\n */\n public async list(params?: { page?: number; limit?: number }): Promise<NotificationItem[]> {\n const query = new URLSearchParams();\n if (params?.page) query.set('page', String(params.page));\n if (params?.limit) query.set('limit', String(params.limit));\n\n const qs = query.toString();\n const url = `${this.gatewayUrl}/notification/notification${qs ? `?${qs}` : ''}`;\n const res = await this.fetchWithAuth(url, {\n method: 'GET',\n headers: { 'x-tenant-id': this.tenantId }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch notifications with HTTP ${res.status}`);\n }\n\n const data = await res.json();\n return Array.isArray(data) ? data : (data.notifications || data.items || []);\n }\n}\n","import {\n EntityListResponse,\n EntityRecord,\n EntityRelationPayload,\n EntityRelationRecord,\n EntityReplaceRelationsPayload,\n EntityRevision,\n FilterOperator,\n GetEntityOptions\n} from './types';\n\nexport class EntityQueryBuilder<T = Record<string, any>> {\n private gatewayUrl: string;\n private tenantId: string;\n private typeName: string;\n private getToken: () => string | null;\n private fetchFn: typeof fetch;\n private fetchWithAuth?: (url: string, init?: RequestInit) => Promise<Response>;\n\n private queryParams = new URLSearchParams();\n\n constructor(options: {\n gatewayUrl: string;\n tenantId: string;\n typeName: string;\n getToken?: () => string | null;\n fetchFn?: typeof fetch;\n fetchWithAuth?: (url: string, init?: RequestInit) => Promise<Response>;\n defaultLanguage?: string | null | (() => string | null);\n }) {\n this.gatewayUrl = options.gatewayUrl.replace(/\\/+$/, '');\n this.tenantId = options.tenantId;\n this.typeName = options.typeName;\n this.getToken = options.getToken || (() => null);\n this.fetchFn = options.fetchFn || ((...args) => fetch(...args));\n this.fetchWithAuth = options.fetchWithAuth;\n\n if (options.defaultLanguage) {\n const langVal = typeof options.defaultLanguage === 'function' ? options.defaultLanguage() : options.defaultLanguage;\n if (langVal) {\n this.queryParams.set('lang', langVal);\n }\n }\n }\n\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n };\n const token = this.getToken();\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n return headers;\n }\n\n private async executeRequest(url: string, init: RequestInit = {}): Promise<Response> {\n if (this.fetchWithAuth) {\n return this.fetchWithAuth(url, init);\n }\n const headers = { ...this.getHeaders(), ...(init.headers as Record<string, string> || {}) };\n return this.fetchFn(url, { ...init, headers });\n }\n\n // ----------------------------------------------------\n // Filter Operators\n // ----------------------------------------------------\n\n eq(field: string, value: string | number | boolean): this {\n this.queryParams.append(`${field}[eq]`, String(value));\n return this;\n }\n\n ne(field: string, value: string | number | boolean): this {\n this.queryParams.append(`${field}[ne]`, String(value));\n return this;\n }\n\n gt(field: string, value: string | number | Date): this {\n const val = value instanceof Date ? value.toISOString() : String(value);\n this.queryParams.append(`${field}[gt]`, val);\n return this;\n }\n\n gte(field: string, value: string | number | Date): this {\n const val = value instanceof Date ? value.toISOString() : String(value);\n this.queryParams.append(`${field}[gte]`, val);\n return this;\n }\n\n lt(field: string, value: string | number | Date): this {\n const val = value instanceof Date ? value.toISOString() : String(value);\n this.queryParams.append(`${field}[lt]`, val);\n return this;\n }\n\n lte(field: string, value: string | number | Date): this {\n const val = value instanceof Date ? value.toISOString() : String(value);\n this.queryParams.append(`${field}[lte]`, val);\n return this;\n }\n\n /**\n * Filter records within a numeric or date range (inclusive)\n * Example: .between('price', 100, 500) or .between('check_in', '2026-10-01', '2026-10-15')\n */\n between(field: string, from: string | number | Date, to: string | number | Date): this {\n this.gte(field, from);\n this.lte(field, to);\n return this;\n }\n\n /**\n * Alias for .between(...)\n */\n range(field: string, min: string | number | Date, max: string | number | Date): this {\n return this.between(field, min, max);\n }\n\n /**\n * Helper specifically for date/timestamp range filtering\n * Example: .dateRange('created_at', '2026-09-01', '2026-09-30')\n */\n dateRange(field: string, startDate: string | Date, endDate: string | Date): this {\n return this.between(field, startDate, endDate);\n }\n\n /**\n * Case-insensitive substring search (ILIKE %substring%)\n */\n like(field: string, substring: string): this {\n this.queryParams.append(`${field}[like]`, substring);\n return this;\n }\n\n /**\n * Set membership: matches if field value is in the array\n */\n in(field: string, values: Array<string | number>): this {\n this.queryParams.append(`${field}[in]`, values.map(String).join(','));\n return this;\n }\n\n isNull(field: string): this {\n this.queryParams.append(`${field}[null]`, 'true');\n return this;\n }\n\n isNotNull(field: string): this {\n this.queryParams.append(`${field}[null]`, 'false');\n return this;\n }\n\n /**\n * Filter entities connected by graph relationship\n */\n related(relationName: string, entityIds: string | string[]): this {\n const ids = Array.isArray(entityIds) ? entityIds.join(',') : entityIds;\n this.queryParams.append(`related[${relationName}]`, ids);\n return this;\n }\n\n /**\n * Declaratively expand graph relations (Supabase-style join expansion)\n * Example: .include('placed_by', 'payment', 'items')\n */\n include(...relations: string[]): this {\n const existing = this.queryParams.get('include');\n const existingList = existing ? existing.split(',').map((s) => s.trim()) : [];\n const combined = Array.from(new Set([...existingList, ...relations.map((s) => s.trim())])).filter(Boolean);\n if (combined.length > 0) {\n this.queryParams.set('include', combined.join(','));\n }\n return this;\n }\n\n // ----------------------------------------------------\n // Sorting, Pagination & Modifiers\n // ----------------------------------------------------\n\n orderBy(field: string, direction: 'asc' | 'desc' = 'asc'): this {\n const sortVal = direction === 'desc' ? `-${field}` : field;\n this.queryParams.append('sort', sortVal);\n return this;\n }\n\n limit(limit: number): this {\n this.queryParams.set('limit', String(limit));\n return this;\n }\n\n page(page: number, limit?: number): this {\n this.queryParams.set('page', String(page));\n if (limit) this.queryParams.set('limit', String(limit));\n return this;\n }\n\n offset(offset: number): this {\n this.queryParams.set('offset', String(offset));\n return this;\n }\n\n cursor(token: string): this {\n this.queryParams.set('cursor', token);\n return this;\n }\n\n flat(enabled: boolean = true): this {\n this.queryParams.set('flat', enabled ? 'true' : 'false');\n return this;\n }\n\n /**\n * Set target language for automatic JSONB translation flattening.\n * Example: .lang('fr') returns French fields, falling back to 'en'.\n * Set to '*' or call .rawTranslations() to get raw multilingual dictionaries.\n */\n lang(locale: string): this {\n this.queryParams.set('lang', locale);\n return this;\n }\n\n /**\n * Alias for .lang(locale)\n */\n language(locale: string): this {\n return this.lang(locale);\n }\n\n /**\n * Request raw, unflattened multilingual dictionaries ({ en: \"...\", fr: \"...\" })\n * Essential for Admin/CMS forms to avoid overwriting other language translations on update.\n */\n rawTranslations(enabled: boolean = true): this {\n if (enabled) {\n this.queryParams.set('lang', '*');\n this.queryParams.set('rawTranslations', 'true');\n } else {\n this.queryParams.delete('rawTranslations');\n if (this.queryParams.get('lang') === '*') {\n this.queryParams.delete('lang');\n }\n }\n return this;\n }\n\n // ----------------------------------------------------\n // Execution Methods\n // ----------------------------------------------------\n\n /**\n * Execute query and list matching records with pagination metadata\n */\n async list(): Promise<EntityListResponse<T>> {\n const qs = this.queryParams.toString();\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}${qs ? `?${qs}` : ''}`;\n \n const res = await this.executeRequest(url);\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Query failed with HTTP ${res.status}`);\n }\n\n return res.json();\n }\n\n /**\n * Fetch a single entity by ID with optional expansion, translation locale, and flattening\n */\n async get(id: string, options?: GetEntityOptions): Promise<EntityRecord<T>> {\n const params = new URLSearchParams(this.queryParams);\n if (options?.flat !== undefined) {\n params.set('flat', options.flat ? 'true' : 'false');\n }\n if (options?.lang) {\n params.set('lang', options.lang);\n }\n if (options?.rawTranslations) {\n params.set('lang', '*');\n params.set('rawTranslations', 'true');\n }\n if (options?.include && options.include.length > 0) {\n const existing = params.get('include');\n const existingList = existing ? existing.split(',').map((s) => s.trim()) : [];\n const combined = Array.from(new Set([...existingList, ...options.include.map((s) => s.trim())])).filter(Boolean);\n params.set('include', combined.join(','));\n }\n const qs = params.toString();\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}${qs ? `?${qs}` : ''}`;\n const res = await this.executeRequest(url);\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch ${this.typeName}/${id}`);\n }\n\n return res.json();\n }\n\n /**\n * Create a new entity record matching schema\n */\n async create(data: T): Promise<EntityRecord<T>> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}`;\n const res = await this.executeRequest(url, {\n method: 'POST',\n body: JSON.stringify(data)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to create record in ${this.typeName}`);\n }\n\n return res.json();\n }\n\n /**\n * Update an existing entity record\n */\n async update(id: string, partialData: Partial<T>): Promise<EntityRecord<T>> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}`;\n const res = await this.executeRequest(url, {\n method: 'PATCH',\n body: JSON.stringify(partialData)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to update ${this.typeName}/${id}`);\n }\n\n return res.json();\n }\n\n /**\n * Soft-delete an entity record\n */\n async delete(id: string): Promise<{ success: boolean }> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}`;\n const res = await this.executeRequest(url, {\n method: 'DELETE'\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to delete ${this.typeName}/${id}`);\n }\n\n return { success: true };\n }\n\n /**\n * Fetch revision history for an entity record\n */\n async revisions(id: string): Promise<EntityRevision<T>[]> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/revisions`;\n const res = await this.executeRequest(url);\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch revisions for ${this.typeName}/${id}`);\n }\n\n return res.json();\n }\n\n /**\n * Fetch all graph relations for this entity record\n */\n async getRelations(id: string, lang?: string): Promise<EntityRelationRecord[]> {\n const activeLang = lang || this.queryParams.get('lang');\n const qs = activeLang ? `?lang=${encodeURIComponent(activeLang)}` : '';\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/relations${qs}`;\n const res = await this.executeRequest(url);\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch relations for ${this.typeName}/${id}`);\n }\n\n return res.json();\n }\n\n /**\n * Link this record to another entity record\n * Supports:\n * .link(id, 'in_category', categoryId)\n * .link(id, 'in_category', 'category', categoryId)\n * .link(id, { relationName: 'in_category', targetId: categoryId, targetTypeName: 'category' })\n */\n async link(\n id: string,\n relationOrPayload: string | EntityRelationPayload,\n targetTypeNameOrId?: string,\n maybeTargetId?: string\n ): Promise<{ success: boolean }> {\n let payload: EntityRelationPayload;\n if (typeof relationOrPayload === 'string') {\n if (maybeTargetId) {\n payload = {\n relationName: relationOrPayload,\n targetTypeName: targetTypeNameOrId,\n targetId: maybeTargetId,\n };\n } else {\n payload = {\n relationName: relationOrPayload,\n targetId: targetTypeNameOrId!,\n };\n }\n } else {\n const p = relationOrPayload;\n payload = {\n relationName: p.relationName || p.relation_name || '',\n targetId: p.targetId || p.target_id || p.child_id || p.childId || '',\n targetTypeName: p.targetTypeName || p.target_type_name,\n };\n }\n\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/relations`;\n const res = await this.executeRequest(url, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to create relation for ${this.typeName}/${id}`);\n }\n\n return res.json().catch(() => ({ success: true }));\n }\n\n /**\n * Replace the full set of relations of one relation name\n */\n async setLinks(id: string, payload: EntityReplaceRelationsPayload): Promise<{ success: boolean }> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/relations`;\n const res = await this.executeRequest(url, {\n method: 'PUT',\n body: JSON.stringify(payload)\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to replace relations for ${this.typeName}/${id}`);\n }\n\n return res.json().catch(() => ({ success: true }));\n }\n\n /**\n * Remove one graph link between two records\n */\n async unlink(id: string, relationName: string, targetId: string, targetTypeName: string): Promise<{ success: boolean }> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/relations/${encodeURIComponent(relationName)}/${encodeURIComponent(targetId)}?targetTypeName=${encodeURIComponent(targetTypeName)}`;\n const res = await this.executeRequest(url, {\n method: 'DELETE'\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to delete relation ${relationName} for ${this.typeName}/${id}`);\n }\n\n return res.json().catch(() => ({ success: true }));\n }\n\n /**\n * Execute a type-level workflow plugin action (e.g. checkout, batch-process)\n */\n async action<R = any>(actionName: string, payload?: object): Promise<R> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/actions/${actionName}`;\n const res = await this.executeRequest(url, {\n method: 'POST',\n body: payload ? JSON.stringify(payload) : undefined\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Action ${actionName} failed on type ${this.typeName}`);\n }\n\n return res.json();\n }\n\n /**\n * Execute an instance-level workflow plugin action (e.g. cancel order, approve)\n */\n async instanceAction<R = any>(id: string, actionName: string, payload?: object): Promise<R> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/${id}/actions/${actionName}`;\n const res = await this.executeRequest(url, {\n method: 'POST',\n body: payload ? JSON.stringify(payload) : undefined\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Action ${actionName} failed on ${this.typeName}/${id}`);\n }\n\n return res.json();\n }\n\n /**\n * Export matching entity records to CSV format with active filters\n */\n async exportCsv(): Promise<string> {\n const qs = this.queryParams.toString();\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/${this.typeName}/export/csv${qs ? `?${qs}` : ''}`;\n const res = await this.executeRequest(url, {\n headers: {\n 'Accept': 'text/csv'\n }\n });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to export CSV for ${this.typeName}`);\n }\n\n return res.text();\n }\n}\n","import { EntitySchemaDefinition } from './types';\n\nexport class SchemaClient {\n private gatewayUrl: string;\n private tenantId: string;\n private getToken: () => string | null;\n private fetchFn: typeof fetch;\n private fetchWithAuth?: (url: string, init?: RequestInit) => Promise<Response>;\n\n constructor(options: {\n gatewayUrl: string;\n tenantId: string;\n getToken?: () => string | null;\n fetchFn?: typeof fetch;\n fetchWithAuth?: (url: string, init?: RequestInit) => Promise<Response>;\n }) {\n this.gatewayUrl = options.gatewayUrl.replace(/\\/+$/, '');\n this.tenantId = options.tenantId;\n this.getToken = options.getToken || (() => null);\n this.fetchFn = options.fetchFn || ((...args) => fetch(...args));\n this.fetchWithAuth = options.fetchWithAuth;\n }\n\n private getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.tenantId\n };\n const token = this.getToken();\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n return headers;\n }\n\n /**\n * Define a new JSON Schema or alter an existing schema for an entity type in real-time\n */\n async define(definition: EntitySchemaDefinition): Promise<{ success: boolean; version?: number }> {\n const url = `${this.gatewayUrl}/generic/${this.tenantId}/definition`;\n const init: RequestInit = {\n method: 'POST',\n body: JSON.stringify(definition)\n };\n const res = this.fetchWithAuth\n ? await this.fetchWithAuth(url, init)\n : await this.fetchFn(url, { ...init, headers: this.getHeaders() });\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to define schema for ${definition.typeName}`);\n }\n\n return res.json();\n }\n}\n","import { StorageAdapter } from './types';\n\nexport class MemoryStorage implements StorageAdapter {\n private store = new Map<string, string>();\n\n getItem(key: string): string | null {\n return this.store.get(key) ?? null;\n }\n\n setItem(key: string, value: string): void {\n this.store.set(key, value);\n }\n\n removeItem(key: string): void {\n this.store.delete(key);\n }\n}\n\nexport function getDefaultStorage(): StorageAdapter {\n if (typeof window !== 'undefined' && window.localStorage) {\n return window.localStorage;\n }\n return new MemoryStorage();\n}\n","import { AuthClient } from './auth';\nimport { CommerceClient } from './commerce';\nimport { DocClient } from './doc';\nimport { NotificationClient } from './notification';\nimport { EntityQueryBuilder } from './query-builder';\nimport { SchemaClient } from './schema';\nimport { getDefaultStorage } from './storage';\nimport { StorageAdapter, UserProfileWithWallet, Zone4CodeConfig } from './types';\n\nexport class Zone4CodeClient {\n public readonly gatewayUrl: string;\n public readonly tenantId: string;\n public readonly auth: AuthClient;\n public readonly schema: SchemaClient;\n public readonly doc: DocClient;\n public readonly notification: NotificationClient;\n public readonly commerce: CommerceClient;\n\n private storage: StorageAdapter;\n private fetchFn: typeof fetch;\n private currentLanguage: string | null = null;\n\n constructor(config: Zone4CodeConfig = {}) {\n const globalObj = typeof globalThis !== 'undefined' ? (globalThis as any) : {};\n const procEnv = globalObj.process?.env || {};\n const winEnv = globalObj.window?.env || globalObj.__ZONE4BUILD_ENV__ || {};\n\n const envGateway =\n procEnv.ZONE4BUILD_GATEWAY_URL ||\n procEnv.VITE_ZONE4BUILD_GATEWAY_URL ||\n winEnv.ZONE4BUILD_GATEWAY_URL ||\n globalObj.__ZONE4BUILD_GATEWAY_URL__;\n\n const resolvedGatewayUrl = config.gatewayUrl || envGateway || 'https://api.zone4build.com';\n\n const envTenant =\n procEnv.ZONE4BUILD_WORKSPACE_ID ||\n procEnv.VITE_ZONE4BUILD_WORKSPACE_ID ||\n winEnv.ZONE4BUILD_WORKSPACE_ID ||\n globalObj.__ZONE4BUILD_WORKSPACE_ID__;\n\n const resolvedTenantId = config.tenantId || envTenant || 'default';\n\n this.gatewayUrl = resolvedGatewayUrl.replace(/\\/+$/, '');\n this.tenantId = resolvedTenantId;\n this.storage = config.storage || getDefaultStorage();\n this.fetchFn = config.fetch || ((...args) => fetch(...args));\n this.currentLanguage = config.defaultLanguage !== undefined ? config.defaultLanguage : 'en';\n\n this.auth = new AuthClient({\n gatewayUrl: this.gatewayUrl,\n tenantId: this.tenantId,\n storage: this.storage,\n storageKey: config.storageKey,\n initialToken: config.token,\n fetchFn: this.fetchFn,\n autoRefresh: config.autoRefresh,\n tokenExpiryBuffer: config.tokenExpiryBuffer,\n onSessionExpired: config.onSessionExpired,\n getLanguage: () => this.getLanguage()\n });\n\n this.schema = new SchemaClient({\n gatewayUrl: this.gatewayUrl,\n tenantId: this.tenantId,\n getToken: () => this.auth.getToken(),\n fetchFn: this.fetchFn,\n fetchWithAuth: (url, init) => this.auth.fetchWithAuth(url, init)\n });\n\n this.doc = new DocClient({\n gatewayUrl: this.gatewayUrl,\n tenantId: this.tenantId,\n fetchWithAuth: (url, init) => this.auth.fetchWithAuth(url, init),\n fetchFn: this.fetchFn\n });\n\n this.notification = new NotificationClient({\n gatewayUrl: this.gatewayUrl,\n tenantId: this.tenantId,\n fetchWithAuth: (url, init) => this.auth.fetchWithAuth(url, init),\n fetchFn: this.fetchFn\n });\n\n this.commerce = new CommerceClient({\n gatewayUrl: this.gatewayUrl,\n tenantId: this.tenantId,\n fetchWithAuth: (url, init) => this.auth.fetchWithAuth(url, init),\n fetchFn: this.fetchFn\n });\n\n this.generic = {\n from: <T = Record<string, any>>(typeName: string) => this.from<T>(typeName),\n entities: <T = Record<string, any>>(typeName: string) => this.from<T>(typeName),\n schema: this.schema,\n getMe: () => this.getMe()\n };\n }\n\n public readonly generic: {\n from: <T = Record<string, any>>(typeName: string) => EntityQueryBuilder<T>;\n entities: <T = Record<string, any>>(typeName: string) => EntityQueryBuilder<T>;\n schema: SchemaClient;\n getMe: () => Promise<UserProfileWithWallet>;\n };\n\n /**\n * Set the active default language for API requests (e.g., 'en', 'fr', 'ar', or '*' for raw)\n */\n public setLanguage(lang: string | null): this {\n this.currentLanguage = lang;\n return this;\n }\n\n /**\n * Get the active default language\n */\n public getLanguage(): string | null {\n return this.currentLanguage;\n }\n\n /**\n * Access an entity collection with chainable query builder (like Supabase .from('orders'))\n */\n public from<T = Record<string, any>>(typeName: string): EntityQueryBuilder<T> {\n return new EntityQueryBuilder<T>({\n gatewayUrl: this.gatewayUrl,\n tenantId: this.tenantId,\n typeName,\n getToken: () => this.auth.getToken(),\n fetchFn: this.fetchFn,\n fetchWithAuth: (url, init) => this.auth.fetchWithAuth(url, init),\n defaultLanguage: () => this.getLanguage()\n });\n }\n\n /**\n * Alias for .from(typeName)\n */\n public entities<T = Record<string, any>>(typeName: string): EntityQueryBuilder<T> {\n return this.from<T>(typeName);\n }\n\n /**\n * Register a listener called whenever the session expires completely\n */\n public onSessionExpired(callback: () => void): () => void {\n return this.auth.onSessionExpired(callback);\n }\n\n /**\n * Get current authenticated user profile and platform wallet\n */\n public async getMe(): Promise<UserProfileWithWallet> {\n const res = await this.auth.fetchWithAuth(`${this.gatewayUrl}/generic/${this.tenantId}/me`);\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({ message: res.statusText }));\n throw new Error(err.message || `Failed to fetch profile & wallet (HTTP ${res.status})`);\n }\n\n return res.json();\n }\n\n /**\n * Check gateway connectivity & health\n */\n public async health(): Promise<{ status: string; licenseTier?: string }> {\n const res = await this.fetchFn(`${this.gatewayUrl}/health`);\n if (!res.ok) {\n throw new Error(`Gateway health check failed with HTTP ${res.status}`);\n }\n return res.json();\n }\n}\n\n/**\n * Factory function to instantiate a new Zone4Code client\n */\nexport function createClient(config: Zone4CodeConfig): Zone4CodeClient {\n return new Zone4CodeClient(config);\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zone4code-sdk",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "description": "Official TypeScript & JavaScript Client SDK for the Zone4Code Platform",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",