@nextsparkjs/mobile 0.1.0-beta.85 → 0.1.0-beta.87

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.
@@ -10,7 +10,7 @@ import { User } from './core/types.js';
10
10
  * 1. app.config.ts extra.apiUrl
11
11
  * 2. EXPO_PUBLIC_API_URL environment variable
12
12
  * 3. Auto-detect from Expo dev server
13
- * 4. Fallback to localhost:5173
13
+ * 4. Fallback to localhost:3000
14
14
  */
15
15
 
16
16
  /**
@@ -20,7 +20,7 @@ import { User } from './core/types.js';
20
20
  * 1. app.config.ts > extra > apiUrl (explicit configuration)
21
21
  * 2. EXPO_PUBLIC_API_URL environment variable
22
22
  * 3. Auto-detect from Expo dev server hostUri (development)
23
- * 4. Fallback to http://localhost:5173
23
+ * 4. Fallback to http://localhost:3000
24
24
  *
25
25
  * @returns The resolved API URL
26
26
  * @example
@@ -8,9 +8,9 @@ function getApiUrl() {
8
8
  if (envUrl) return envUrl;
9
9
  if (Constants.expoConfig?.hostUri) {
10
10
  const host = Constants.expoConfig.hostUri.split(":")[0];
11
- return `http://${host}:5173`;
11
+ return `http://${host}:3000`;
12
12
  }
13
- return "http://localhost:5173";
13
+ return "http://localhost:3000";
14
14
  }
15
15
  const API_URL = getApiUrl();
16
16
  const TOKEN_KEY = "nextspark.auth.token";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/client.ts"],"sourcesContent":["/**\n * API Client for NextSpark Backend\n *\n * Configurable HTTP client with authentication and team context.\n * API_URL is resolved from (in order):\n * 1. app.config.ts extra.apiUrl\n * 2. EXPO_PUBLIC_API_URL environment variable\n * 3. Auto-detect from Expo dev server\n * 4. Fallback to localhost:5173\n */\n\nimport Constants from 'expo-constants'\nimport * as Storage from '../lib/storage'\nimport { ApiError, type RequestConfig } from './client.types'\nimport type { User } from './core/types'\n\n/**\n * Resolve API URL from configuration\n *\n * Priority order:\n * 1. app.config.ts > extra > apiUrl (explicit configuration)\n * 2. EXPO_PUBLIC_API_URL environment variable\n * 3. Auto-detect from Expo dev server hostUri (development)\n * 4. Fallback to http://localhost:5173\n *\n * @returns The resolved API URL\n * @example\n * ```ts\n * // In app.config.ts:\n * export default {\n * extra: {\n * apiUrl: 'https://api.myapp.com'\n * }\n * }\n * ```\n */\nexport function getApiUrl(): string {\n // 1. From Expo config (app.config.ts > extra > apiUrl)\n const configUrl = Constants.expoConfig?.extra?.apiUrl\n if (configUrl) return configUrl\n\n // 2. From environment variable (EXPO_PUBLIC_API_URL)\n const envUrl = process.env.EXPO_PUBLIC_API_URL\n if (envUrl) return envUrl\n\n // 3. Auto-detect from Expo dev server (development mode)\n if (Constants.expoConfig?.hostUri) {\n const host = Constants.expoConfig.hostUri.split(':')[0]\n return `http://${host}:5173`\n }\n\n // 4. Fallback for local development\n return 'http://localhost:5173'\n}\n\nconst API_URL = getApiUrl()\n\n// Storage keys (namespaced to avoid conflicts)\n// SecureStore only allows alphanumeric, \".\", \"-\", and \"_\"\nconst TOKEN_KEY = 'nextspark.auth.token'\nconst TEAM_ID_KEY = 'nextspark.auth.teamId'\nconst USER_KEY = 'nextspark.auth.user'\n\nexport class ApiClient {\n private token: string | null = null\n private teamId: string | null = null\n private storedUser: User | null = null\n\n /**\n * Initialize client by loading stored credentials\n */\n async init(): Promise<void> {\n this.token = await Storage.getItemAsync(TOKEN_KEY)\n this.teamId = await Storage.getItemAsync(TEAM_ID_KEY)\n const userJson = await Storage.getItemAsync(USER_KEY)\n if (userJson) {\n try {\n this.storedUser = JSON.parse(userJson)\n } catch {\n this.storedUser = null\n }\n }\n }\n\n // ==========================================\n // Token & Team Management\n // ==========================================\n\n /**\n * Get stored token\n */\n getToken(): string | null {\n return this.token\n }\n\n /**\n * Set authentication token\n */\n async setToken(token: string): Promise<void> {\n this.token = token\n await Storage.setItemAsync(TOKEN_KEY, token)\n }\n\n /**\n * Get stored team ID\n */\n getTeamId(): string | null {\n return this.teamId\n }\n\n /**\n * Set team ID\n */\n async setTeamId(teamId: string): Promise<void> {\n this.teamId = teamId\n await Storage.setItemAsync(TEAM_ID_KEY, teamId)\n }\n\n /**\n * Get stored user info\n */\n getStoredUser(): User | null {\n return this.storedUser\n }\n\n /**\n * Set user info\n */\n async setUser(user: User): Promise<void> {\n this.storedUser = user\n await Storage.setItemAsync(USER_KEY, JSON.stringify(user))\n }\n\n /**\n * Clear authentication\n */\n async clearAuth(): Promise<void> {\n this.token = null\n this.teamId = null\n this.storedUser = null\n await Storage.deleteItemAsync(TOKEN_KEY)\n await Storage.deleteItemAsync(TEAM_ID_KEY)\n await Storage.deleteItemAsync(USER_KEY)\n }\n\n // ==========================================\n // HTTP Methods\n // ==========================================\n\n /**\n * Build URL with query parameters\n */\n private buildUrl(endpoint: string, params?: Record<string, string | number | boolean | undefined>): string {\n const url = `${API_URL}${endpoint}`\n if (!params) return url\n\n const searchParams = new URLSearchParams()\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n searchParams.set(key, String(value))\n }\n })\n\n const queryString = searchParams.toString()\n return queryString ? `${url}?${queryString}` : url\n }\n\n /**\n * Make authenticated request\n * Uses credentials: 'include' to support cookie-based auth alongside Bearer token\n */\n async request<T>(endpoint: string, options: RequestConfig = {}): Promise<T> {\n const { params, ...fetchOptions } = options\n const url = this.buildUrl(endpoint, params)\n\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n ...fetchOptions.headers,\n }\n\n // Add Bearer token if available (Better Auth mobile flow)\n if (this.token) {\n ;(headers as Record<string, string>)['Authorization'] = `Bearer ${this.token}`\n }\n\n // Add team context header\n if (this.teamId) {\n ;(headers as Record<string, string>)['x-team-id'] = this.teamId\n }\n\n const response = await fetch(url, {\n ...fetchOptions,\n headers,\n credentials: 'include', // Support cookie-based sessions\n })\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new ApiError(\n errorData.message || `Request failed with status ${response.status}`,\n response.status,\n errorData\n )\n }\n\n // Handle 204 No Content\n if (response.status === 204) {\n return {} as T\n }\n\n // Defensive JSON parsing - handle malformed responses\n return response.json().catch(() => ({} as T))\n }\n\n /**\n * GET request with optional query parameters\n */\n async get<T>(endpoint: string, params?: Record<string, string | number | boolean | undefined>): Promise<T> {\n return this.request<T>(endpoint, { method: 'GET', params })\n }\n\n /**\n * POST request with JSON body\n */\n async post<T>(endpoint: string, data?: unknown): Promise<T> {\n return this.request<T>(endpoint, {\n method: 'POST',\n body: data ? JSON.stringify(data) : undefined,\n })\n }\n\n /**\n * PATCH request with JSON body\n */\n async patch<T>(endpoint: string, data?: unknown): Promise<T> {\n return this.request<T>(endpoint, {\n method: 'PATCH',\n body: data ? JSON.stringify(data) : undefined,\n })\n }\n\n /**\n * DELETE request\n * Returns void for delete operations (most common case)\n */\n async delete<T = void>(endpoint: string): Promise<T> {\n return this.request<T>(endpoint, { method: 'DELETE' })\n }\n}\n\n// Export singleton instance\nexport const apiClient = new ApiClient()\n\n// Re-export ApiError for convenience\nexport { ApiError } from './client.types'\n"],"mappings":"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","names":["ApiError"]}
1
+ {"version":3,"sources":["../../src/api/client.ts"],"sourcesContent":["/**\n * API Client for NextSpark Backend\n *\n * Configurable HTTP client with authentication and team context.\n * API_URL is resolved from (in order):\n * 1. app.config.ts extra.apiUrl\n * 2. EXPO_PUBLIC_API_URL environment variable\n * 3. Auto-detect from Expo dev server\n * 4. Fallback to localhost:3000\n */\n\nimport Constants from 'expo-constants'\nimport * as Storage from '../lib/storage'\nimport { ApiError, type RequestConfig } from './client.types'\nimport type { User } from './core/types'\n\n/**\n * Resolve API URL from configuration\n *\n * Priority order:\n * 1. app.config.ts > extra > apiUrl (explicit configuration)\n * 2. EXPO_PUBLIC_API_URL environment variable\n * 3. Auto-detect from Expo dev server hostUri (development)\n * 4. Fallback to http://localhost:3000\n *\n * @returns The resolved API URL\n * @example\n * ```ts\n * // In app.config.ts:\n * export default {\n * extra: {\n * apiUrl: 'https://api.myapp.com'\n * }\n * }\n * ```\n */\nexport function getApiUrl(): string {\n // 1. From Expo config (app.config.ts > extra > apiUrl)\n const configUrl = Constants.expoConfig?.extra?.apiUrl\n if (configUrl) return configUrl\n\n // 2. From environment variable (EXPO_PUBLIC_API_URL)\n const envUrl = process.env.EXPO_PUBLIC_API_URL\n if (envUrl) return envUrl\n\n // 3. Auto-detect from Expo dev server (development mode)\n if (Constants.expoConfig?.hostUri) {\n const host = Constants.expoConfig.hostUri.split(':')[0]\n return `http://${host}:3000`\n }\n\n // 4. Fallback for local development\n return 'http://localhost:3000'\n}\n\nconst API_URL = getApiUrl()\n\n// Storage keys (namespaced to avoid conflicts)\n// SecureStore only allows alphanumeric, \".\", \"-\", and \"_\"\nconst TOKEN_KEY = 'nextspark.auth.token'\nconst TEAM_ID_KEY = 'nextspark.auth.teamId'\nconst USER_KEY = 'nextspark.auth.user'\n\nexport class ApiClient {\n private token: string | null = null\n private teamId: string | null = null\n private storedUser: User | null = null\n\n /**\n * Initialize client by loading stored credentials\n */\n async init(): Promise<void> {\n this.token = await Storage.getItemAsync(TOKEN_KEY)\n this.teamId = await Storage.getItemAsync(TEAM_ID_KEY)\n const userJson = await Storage.getItemAsync(USER_KEY)\n if (userJson) {\n try {\n this.storedUser = JSON.parse(userJson)\n } catch {\n this.storedUser = null\n }\n }\n }\n\n // ==========================================\n // Token & Team Management\n // ==========================================\n\n /**\n * Get stored token\n */\n getToken(): string | null {\n return this.token\n }\n\n /**\n * Set authentication token\n */\n async setToken(token: string): Promise<void> {\n this.token = token\n await Storage.setItemAsync(TOKEN_KEY, token)\n }\n\n /**\n * Get stored team ID\n */\n getTeamId(): string | null {\n return this.teamId\n }\n\n /**\n * Set team ID\n */\n async setTeamId(teamId: string): Promise<void> {\n this.teamId = teamId\n await Storage.setItemAsync(TEAM_ID_KEY, teamId)\n }\n\n /**\n * Get stored user info\n */\n getStoredUser(): User | null {\n return this.storedUser\n }\n\n /**\n * Set user info\n */\n async setUser(user: User): Promise<void> {\n this.storedUser = user\n await Storage.setItemAsync(USER_KEY, JSON.stringify(user))\n }\n\n /**\n * Clear authentication\n */\n async clearAuth(): Promise<void> {\n this.token = null\n this.teamId = null\n this.storedUser = null\n await Storage.deleteItemAsync(TOKEN_KEY)\n await Storage.deleteItemAsync(TEAM_ID_KEY)\n await Storage.deleteItemAsync(USER_KEY)\n }\n\n // ==========================================\n // HTTP Methods\n // ==========================================\n\n /**\n * Build URL with query parameters\n */\n private buildUrl(endpoint: string, params?: Record<string, string | number | boolean | undefined>): string {\n const url = `${API_URL}${endpoint}`\n if (!params) return url\n\n const searchParams = new URLSearchParams()\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n searchParams.set(key, String(value))\n }\n })\n\n const queryString = searchParams.toString()\n return queryString ? `${url}?${queryString}` : url\n }\n\n /**\n * Make authenticated request\n * Uses credentials: 'include' to support cookie-based auth alongside Bearer token\n */\n async request<T>(endpoint: string, options: RequestConfig = {}): Promise<T> {\n const { params, ...fetchOptions } = options\n const url = this.buildUrl(endpoint, params)\n\n const headers: HeadersInit = {\n 'Content-Type': 'application/json',\n ...fetchOptions.headers,\n }\n\n // Add Bearer token if available (Better Auth mobile flow)\n if (this.token) {\n ;(headers as Record<string, string>)['Authorization'] = `Bearer ${this.token}`\n }\n\n // Add team context header\n if (this.teamId) {\n ;(headers as Record<string, string>)['x-team-id'] = this.teamId\n }\n\n const response = await fetch(url, {\n ...fetchOptions,\n headers,\n credentials: 'include', // Support cookie-based sessions\n })\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}))\n throw new ApiError(\n errorData.message || `Request failed with status ${response.status}`,\n response.status,\n errorData\n )\n }\n\n // Handle 204 No Content\n if (response.status === 204) {\n return {} as T\n }\n\n // Defensive JSON parsing - handle malformed responses\n return response.json().catch(() => ({} as T))\n }\n\n /**\n * GET request with optional query parameters\n */\n async get<T>(endpoint: string, params?: Record<string, string | number | boolean | undefined>): Promise<T> {\n return this.request<T>(endpoint, { method: 'GET', params })\n }\n\n /**\n * POST request with JSON body\n */\n async post<T>(endpoint: string, data?: unknown): Promise<T> {\n return this.request<T>(endpoint, {\n method: 'POST',\n body: data ? JSON.stringify(data) : undefined,\n })\n }\n\n /**\n * PATCH request with JSON body\n */\n async patch<T>(endpoint: string, data?: unknown): Promise<T> {\n return this.request<T>(endpoint, {\n method: 'PATCH',\n body: data ? JSON.stringify(data) : undefined,\n })\n }\n\n /**\n * DELETE request\n * Returns void for delete operations (most common case)\n */\n async delete<T = void>(endpoint: string): Promise<T> {\n return this.request<T>(endpoint, { method: 'DELETE' })\n }\n}\n\n// Export singleton instance\nexport const apiClient = new ApiClient()\n\n// Re-export ApiError for convenience\nexport { ApiError } from './client.types'\n"],"mappings":"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","names":["ApiError"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextsparkjs/mobile",
3
- "version": "0.1.0-beta.85",
3
+ "version": "0.1.0-beta.87",
4
4
  "description": "Mobile app infrastructure for NextSpark - API client, providers, and utilities for Expo apps",
5
5
  "license": "MIT",
6
6
  "author": "NextSpark <hello@nextspark.dev>",