UNPKG

react-onboarding-sdk

Version:

A TypeScript SDK for fetching onboarding data from backend APIs with React hooks support

62 lines 2.24 kB
const DEFAULT_BASE_URL = 'http://192.168.0.105:3000/onboarding'; const DEFAULT_TIMEOUT = 10000; function withTimeout(promise, ms) { return new Promise((resolve, reject) => { const id = setTimeout(() => reject(new Error('timeout')), ms); promise .then((res) => { clearTimeout(id); resolve(res); }) .catch((err) => { clearTimeout(id); reject(err); }); }); } function buildUrl(baseUrl, appId) { const trimmed = baseUrl.replace(/\/+$/, ''); const encodedId = encodeURIComponent(appId); // If baseUrl already ends with the appId, use as-is if (trimmed.endsWith(`/${encodedId}`)) return trimmed; return `${trimmed}/${encodedId}`; } export async function fetchOnboardingConfig(appId, options = {}) { const baseUrl = options.baseUrl || DEFAULT_BASE_URL; const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT; if (!appId || !appId.trim()) { throw new Error('Invalid appId'); } const url = buildUrl(baseUrl, appId); try { const res = await withTimeout(fetch(url, { headers: { Accept: 'application/json' } }), timeoutMs); if (!('ok' in res) || !res.ok) { throw new Error(`HTTP ${res.status}`); } const json = (await res.json()); if (!json.success || !json.data || !Array.isArray(json.data.screens)) { throw new Error('Invalid response'); } return json.data; } catch (err) { // Fallback to local fakedb when network/format error occurs // eslint-disable-next-line @typescript-eslint/no-var-requires const local = require('../../assets/config/fakeDB.json'); if (local && local.screens) { const fake = { _id: 'local-fake', appId, screens: local.screens, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), __v: 0, }; console.warn('[onboarding-sdk] Falling back to bundled fakeDB.json due to error:', err?.message); return fake; } throw err; } } //# sourceMappingURL=api.js.map