@fixprompt/react-native 0.0.1 → 0.0.2
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/README.md +10 -0
- package/dist/device.d.ts +10 -0
- package/dist/index.cjs +33 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +33 -2
- package/dist/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -87,11 +87,21 @@ Every event ships with:
|
|
|
87
87
|
| `platform` | `Platform.OS` (ios / android / web / ...) |
|
|
88
88
|
| `os_version` | `Platform.Version` |
|
|
89
89
|
| `rn_version` | `Platform.constants.reactNativeVersion` |
|
|
90
|
+
| `app_version` | `Constants.expoConfig.version` or `Constants.nativeAppVersion` (needs `expo-constants`) |
|
|
91
|
+
| `build_number` | `Constants.expoConfig.ios.buildNumber` / `android.versionCode` / `nativeBuildVersion` |
|
|
92
|
+
| `ota_id` | `Updates.updateId` from `expo-updates` — present iff an OTA bundle is active |
|
|
93
|
+
| `runtime_version` | `Updates.runtimeVersion` from `expo-updates` |
|
|
94
|
+
| `ota_channel` | `Updates.channel` from `expo-updates` — e.g. `production`, `preview` |
|
|
90
95
|
| `release` | passed to `initFixPrompt({ release })` or `null` |
|
|
91
96
|
| `session_id` | uuid per cold start, in-memory |
|
|
92
97
|
| `device_id` | uuid per device, persisted (SecureStore → AsyncStorage) |
|
|
93
98
|
| `user_id`, `user_email` | last `setUser({...})` call |
|
|
94
99
|
|
|
100
|
+
`expo-constants` and `expo-updates` are **optional peer deps** — install them and the SDK
|
|
101
|
+
auto-detects everything; skip them and the basic platform attrs still ship. Bare React
|
|
102
|
+
Native apps without Expo can pass `release` / `build_number` manually via
|
|
103
|
+
`initFixPrompt({ release: '1.2.3+47' })` or via env-var-driven values.
|
|
104
|
+
|
|
95
105
|
The broker promotes `sdk` + `sdk_version` into `project_sdk_installations`, so the dashboard's support copy ("you're on RN SDK 0.0.1") lights up automatically.
|
|
96
106
|
|
|
97
107
|
## Tag-based capture (advanced)
|
package/dist/device.d.ts
CHANGED
|
@@ -3,5 +3,15 @@ export interface DeviceAttrs {
|
|
|
3
3
|
os_version: string;
|
|
4
4
|
/** RN runtime version (Hermes / JSC). Used for triage. */
|
|
5
5
|
rn_version?: string;
|
|
6
|
+
/** App version (e.g. "1.2.3") from expo-constants or native build. */
|
|
7
|
+
app_version?: string;
|
|
8
|
+
/** Build number (CFBundleVersion / versionCode) from expo-constants. */
|
|
9
|
+
build_number?: string;
|
|
10
|
+
/** OTA bundle id (Updates.updateId) from expo-updates, if active. */
|
|
11
|
+
ota_id?: string;
|
|
12
|
+
/** OTA runtime version (Updates.runtimeVersion) from expo-updates. */
|
|
13
|
+
runtime_version?: string;
|
|
14
|
+
/** OTA channel (Updates.channel) — e.g. "production", "preview". */
|
|
15
|
+
ota_channel?: string;
|
|
6
16
|
}
|
|
7
17
|
export declare function getDeviceAttrs(): DeviceAttrs;
|
package/dist/index.cjs
CHANGED
|
@@ -455,17 +455,48 @@ var offlineBuffer = new OfflineBuffer();
|
|
|
455
455
|
|
|
456
456
|
// src/device.ts
|
|
457
457
|
var import_react_native = require("react-native");
|
|
458
|
+
function tryRequire(spec) {
|
|
459
|
+
try {
|
|
460
|
+
return require(spec);
|
|
461
|
+
} catch {
|
|
462
|
+
return null;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
var ConstantsMod = tryRequire("expo-constants");
|
|
466
|
+
var Constants = ConstantsMod?.default ?? ConstantsMod ?? null;
|
|
467
|
+
var Updates = tryRequire("expo-updates");
|
|
458
468
|
function getDeviceAttrs() {
|
|
459
|
-
|
|
469
|
+
const attrs = {
|
|
460
470
|
platform: String(import_react_native.Platform.OS),
|
|
461
471
|
os_version: String(import_react_native.Platform.Version ?? "unknown"),
|
|
462
472
|
rn_version: import_react_native.Platform.constants?.reactNativeVersion ? Object.values(import_react_native.Platform.constants.reactNativeVersion).join(".") : void 0
|
|
463
473
|
};
|
|
474
|
+
if (Constants) {
|
|
475
|
+
const cfg = Constants.expoConfig ?? Constants.manifest ?? null;
|
|
476
|
+
if (cfg?.version) attrs.app_version = String(cfg.version);
|
|
477
|
+
if (cfg?.ios?.buildNumber) {
|
|
478
|
+
attrs.build_number = String(cfg.ios.buildNumber);
|
|
479
|
+
} else if (cfg?.android?.versionCode != null) {
|
|
480
|
+
attrs.build_number = String(cfg.android.versionCode);
|
|
481
|
+
}
|
|
482
|
+
if (!attrs.app_version && Constants.nativeAppVersion) {
|
|
483
|
+
attrs.app_version = String(Constants.nativeAppVersion);
|
|
484
|
+
}
|
|
485
|
+
if (!attrs.build_number && Constants.nativeBuildVersion) {
|
|
486
|
+
attrs.build_number = String(Constants.nativeBuildVersion);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
if (Updates) {
|
|
490
|
+
if (Updates.updateId) attrs.ota_id = String(Updates.updateId);
|
|
491
|
+
if (Updates.runtimeVersion) attrs.runtime_version = String(Updates.runtimeVersion);
|
|
492
|
+
if (Updates.channel) attrs.ota_channel = String(Updates.channel);
|
|
493
|
+
}
|
|
494
|
+
return attrs;
|
|
464
495
|
}
|
|
465
496
|
|
|
466
497
|
// src/version.ts
|
|
467
498
|
var SDK_NAME = "@fixprompt/react-native";
|
|
468
|
-
var SDK_VERSION = "0.0.
|
|
499
|
+
var SDK_VERSION = "0.0.2";
|
|
469
500
|
|
|
470
501
|
// src/transport.ts
|
|
471
502
|
var REQUEST_TIMEOUT_MS = 8e3;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/promise/setimmediate/core.js","../node_modules/promise/setimmediate/rejection-tracking.js","../src/index.ts","../src/state.ts","../src/session.ts","../src/buffer.ts","../src/device.ts","../src/version.ts","../src/transport.ts","../src/handlers.ts","../src/console.ts","../src/init.ts"],"sourcesContent":["'use strict';\n\n\n\nfunction noop() {}\n\n// States:\n//\n// 0 - pending\n// 1 - fulfilled with _value\n// 2 - rejected with _value\n// 3 - adopted the state of another promise, _value\n//\n// once the state is no longer pending (0) it is immutable\n\n// All `_` prefixed properties will be reduced to `_{random number}`\n// at build time to obfuscate them and discourage their use.\n// We don't use symbols or Object.defineProperty to fully hide them\n// because the performance isn't good enough.\n\n\n// to avoid using try/catch inside critical functions, we\n// extract them to here.\nvar LAST_ERROR = null;\nvar IS_ERROR = {};\nfunction getThen(obj) {\n try {\n return obj.then;\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nfunction tryCallOne(fn, a) {\n try {\n return fn(a);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\nfunction tryCallTwo(fn, a, b) {\n try {\n fn(a, b);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nmodule.exports = Promise;\n\nfunction Promise(fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('Promise constructor\\'s argument is not a function');\n }\n this._x = 0;\n this._y = 0;\n this._z = null;\n this._A = null;\n if (fn === noop) return;\n doResolve(fn, this);\n}\nPromise._B = null;\nPromise._C = null;\nPromise._D = noop;\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n if (this.constructor !== Promise) {\n return safeThen(this, onFulfilled, onRejected);\n }\n var res = new Promise(noop);\n handle(this, new Handler(onFulfilled, onRejected, res));\n return res;\n};\n\nfunction safeThen(self, onFulfilled, onRejected) {\n return new self.constructor(function (resolve, reject) {\n var res = new Promise(noop);\n res.then(resolve, reject);\n handle(self, new Handler(onFulfilled, onRejected, res));\n });\n}\nfunction handle(self, deferred) {\n while (self._y === 3) {\n self = self._z;\n }\n if (Promise._B) {\n Promise._B(self);\n }\n if (self._y === 0) {\n if (self._x === 0) {\n self._x = 1;\n self._A = deferred;\n return;\n }\n if (self._x === 1) {\n self._x = 2;\n self._A = [self._A, deferred];\n return;\n }\n self._A.push(deferred);\n return;\n }\n handleResolved(self, deferred);\n}\n\nfunction handleResolved(self, deferred) {\n setImmediate(function() {\n var cb = self._y === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n if (self._y === 1) {\n resolve(deferred.promise, self._z);\n } else {\n reject(deferred.promise, self._z);\n }\n return;\n }\n var ret = tryCallOne(cb, self._z);\n if (ret === IS_ERROR) {\n reject(deferred.promise, LAST_ERROR);\n } else {\n resolve(deferred.promise, ret);\n }\n });\n}\nfunction resolve(self, newValue) {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) {\n return reject(\n self,\n new TypeError('A promise cannot be resolved with itself.')\n );\n }\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = getThen(newValue);\n if (then === IS_ERROR) {\n return reject(self, LAST_ERROR);\n }\n if (\n then === self.then &&\n newValue instanceof Promise\n ) {\n self._y = 3;\n self._z = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(then.bind(newValue), self);\n return;\n }\n }\n self._y = 1;\n self._z = newValue;\n finale(self);\n}\n\nfunction reject(self, newValue) {\n self._y = 2;\n self._z = newValue;\n if (Promise._C) {\n Promise._C(self, newValue);\n }\n finale(self);\n}\nfunction finale(self) {\n if (self._x === 1) {\n handle(self, self._A);\n self._A = null;\n }\n if (self._x === 2) {\n for (var i = 0; i < self._A.length; i++) {\n handle(self, self._A[i]);\n }\n self._A = null;\n }\n}\n\nfunction Handler(onFulfilled, onRejected, promise){\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, promise) {\n var done = false;\n var res = tryCallTwo(fn, function (value) {\n if (done) return;\n done = true;\n resolve(promise, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(promise, reason);\n });\n if (!done && res === IS_ERROR) {\n done = true;\n reject(promise, LAST_ERROR);\n }\n}\n","'use strict';\n\nvar Promise = require('./core');\n\nvar DEFAULT_WHITELIST = [\n ReferenceError,\n TypeError,\n RangeError\n];\n\nvar enabled = false;\nexports.disable = disable;\nfunction disable() {\n enabled = false;\n Promise._B = null;\n Promise._C = null;\n}\n\nexports.enable = enable;\nfunction enable(options) {\n options = options || {};\n if (enabled) disable();\n enabled = true;\n var id = 0;\n var displayId = 0;\n var rejections = {};\n Promise._B = function (promise) {\n if (\n promise._y === 2 && // IS REJECTED\n rejections[promise._E]\n ) {\n if (rejections[promise._E].logged) {\n onHandled(promise._E);\n } else {\n clearTimeout(rejections[promise._E].timeout);\n }\n delete rejections[promise._E];\n }\n };\n Promise._C = function (promise, err) {\n if (promise._x === 0) { // not yet handled\n promise._E = id++;\n rejections[promise._E] = {\n displayId: null,\n error: err,\n timeout: setTimeout(\n onUnhandled.bind(null, promise._E),\n // For reference errors and type errors, this almost always\n // means the programmer made a mistake, so log them after just\n // 100ms\n // otherwise, wait 2 seconds to see if they get handled\n matchWhitelist(err, DEFAULT_WHITELIST)\n ? 100\n : 2000\n ),\n logged: false\n };\n }\n };\n function onUnhandled(id) {\n if (\n options.allRejections ||\n matchWhitelist(\n rejections[id].error,\n options.whitelist || DEFAULT_WHITELIST\n )\n ) {\n rejections[id].displayId = displayId++;\n if (options.onUnhandled) {\n rejections[id].logged = true;\n options.onUnhandled(\n rejections[id].displayId,\n rejections[id].error\n );\n } else {\n rejections[id].logged = true;\n logError(\n rejections[id].displayId,\n rejections[id].error\n );\n }\n }\n }\n function onHandled(id) {\n if (rejections[id].logged) {\n if (options.onHandled) {\n options.onHandled(rejections[id].displayId, rejections[id].error);\n } else if (!rejections[id].onUnhandled) {\n console.warn(\n 'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'\n );\n console.warn(\n ' This means you can ignore any previous messages of the form \"Possible Unhandled Promise Rejection\" with id ' +\n rejections[id].displayId + '.'\n );\n }\n }\n }\n}\n\nfunction logError(id, error) {\n console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');\n var errStr = (error && (error.stack || error)) + '';\n errStr.split('\\n').forEach(function (line) {\n console.warn(' ' + line);\n });\n}\n\nfunction matchWhitelist(error, list) {\n return list.some(function (cls) {\n return error instanceof cls;\n });\n}","export { initFixPrompt, captureException, setUser, _resetForTests } from './init';\nexport type {\n InitOptions,\n ResolvedConfig,\n EventPayload,\n Severity,\n LogLevel,\n} from './types';\nexport { SDK_NAME, SDK_VERSION } from './version';\n","import type { ResolvedConfig } from './types';\n\nexport interface UserContext {\n id?: string;\n email?: string;\n [k: string]: any;\n}\n\ninterface CleanupHooks {\n removeErrorHandler?: () => void;\n removeRejectionHandler?: () => void;\n restoreConsoleError?: () => void;\n restoreConsoleWarn?: () => void;\n}\n\ninterface SdkState {\n initialized: boolean;\n config: ResolvedConfig | null;\n sessionId: string | null;\n deviceId: string | null;\n user: UserContext | null;\n cleanup: CleanupHooks;\n}\n\nconst STATE_KEY = '__fixprompt_rn_state__';\n\nfunction globalScope(): any {\n if (typeof globalThis !== 'undefined') return globalThis;\n return {};\n}\n\nexport function getState(): SdkState {\n const g = globalScope();\n if (!g[STATE_KEY]) {\n g[STATE_KEY] = {\n initialized: false,\n config: null,\n sessionId: null,\n deviceId: null,\n user: null,\n cleanup: {},\n } satisfies SdkState;\n }\n return g[STATE_KEY] as SdkState;\n}\n\nexport function resetStateForTests(): void {\n const g = globalScope();\n delete g[STATE_KEY];\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\n\nconst DEVICE_KEY = '@fixprompt/device_id';\n\nfunction uuid(): string {\n if (typeof globalThis.crypto?.randomUUID === 'function') {\n return globalThis.crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * One uuid per cold start. Lives in memory; resets when the app restarts.\n */\nexport function newSessionId(): string {\n return uuid();\n}\n\n/**\n * Stable per-device uuid. Tries expo-secure-store first (keychain-backed),\n * falls back to AsyncStorage. Generated lazily on first call.\n *\n * We deliberately don't use OS-provided device IDs (IDFV/Android ID) —\n * Apple flags them on review and they reset on reinstall anyway.\n */\nexport async function getDeviceId(): Promise<string> {\n // Optional expo-secure-store path\n try {\n // dynamic import so we don't crash when SecureStore isn't installed\n const SecureStore = await tryImport<any>('expo-secure-store');\n if (SecureStore) {\n const existing = await SecureStore.getItemAsync('fixprompt_device_id');\n if (existing) return existing;\n const fresh = uuid();\n await SecureStore.setItemAsync('fixprompt_device_id', fresh);\n return fresh;\n }\n } catch {\n // ignore — fall through to AsyncStorage\n }\n\n try {\n const existing = await AsyncStorage.getItem(DEVICE_KEY);\n if (existing) return existing;\n const fresh = uuid();\n await AsyncStorage.setItem(DEVICE_KEY, fresh);\n return fresh;\n } catch {\n // Final fallback — in-memory only (lost on reinstall)\n return uuid();\n }\n}\n\nasync function tryImport<T>(spec: string): Promise<T | null> {\n try {\n // require keeps Metro bundler quiet when the package isn't installed\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(spec) as T;\n } catch {\n return null;\n }\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport type { EventPayload } from './types';\n\nconst STORAGE_KEY = '@fixprompt/buffer';\nconst MAX_BUFFER = 200;\nconst MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;\n\ninterface BufferedEvent {\n ts: number;\n payload: EventPayload;\n}\n\n/**\n * In-memory ring buffer with AsyncStorage persistence.\n *\n * Events accumulate when the broker is unreachable (network error / 5xx /\n * timeout). On the next successful send, the whole buffer drains in order.\n * On cold start, any persisted buffer from a prior crash is replayed.\n */\nclass OfflineBuffer {\n private items: BufferedEvent[] = [];\n private loaded = false;\n private persistTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Load the persisted buffer once, on first use. */\n async load(): Promise<void> {\n if (this.loaded) return;\n this.loaded = true;\n try {\n const raw = await AsyncStorage.getItem(STORAGE_KEY);\n if (!raw) return;\n const parsed = JSON.parse(raw) as BufferedEvent[];\n const cutoff = Date.now() - MAX_AGE_MS;\n this.items = parsed.filter((e) => e?.ts > cutoff).slice(-MAX_BUFFER);\n } catch {\n this.items = [];\n }\n }\n\n push(payload: EventPayload): void {\n this.items.push({ ts: Date.now(), payload });\n if (this.items.length > MAX_BUFFER) this.items.shift();\n this.schedulePersist();\n }\n\n async drain(): Promise<EventPayload[]> {\n if (!this.loaded) await this.load();\n const out = this.items.map((e) => e.payload);\n this.items = [];\n this.schedulePersist();\n return out;\n }\n\n size(): number {\n return this.items.length;\n }\n\n private schedulePersist() {\n if (this.persistTimer) return;\n this.persistTimer = setTimeout(async () => {\n this.persistTimer = null;\n try {\n await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(this.items));\n } catch {\n // swallow — buffer survives in memory at least\n }\n }, 500);\n }\n\n /** Tests only. */\n _resetForTests(): void {\n this.items = [];\n this.loaded = false;\n if (this.persistTimer) {\n clearTimeout(this.persistTimer);\n this.persistTimer = null;\n }\n }\n}\n\nexport const offlineBuffer = new OfflineBuffer();\n","import { Platform } from 'react-native';\n\nexport interface DeviceAttrs {\n platform: string; // 'ios' | 'android' | 'web' | 'windows' | 'macos'\n os_version: string;\n /** RN runtime version (Hermes / JSC). Used for triage. */\n rn_version?: string;\n}\n\nexport function getDeviceAttrs(): DeviceAttrs {\n return {\n platform: String(Platform.OS),\n os_version: String((Platform as any).Version ?? 'unknown'),\n rn_version: (Platform as any).constants?.reactNativeVersion\n ? Object.values((Platform as any).constants.reactNativeVersion).join('.')\n : undefined,\n };\n}\n","export const SDK_NAME = '@fixprompt/react-native';\nexport const SDK_VERSION = '0.0.1';\n","import type { EventPayload, ResolvedConfig } from './types';\nimport { offlineBuffer } from './buffer';\nimport { getState } from './state';\nimport { getDeviceAttrs } from './device';\nimport { SDK_NAME, SDK_VERSION } from './version';\n\nconst REQUEST_TIMEOUT_MS = 8_000;\n\n/**\n * Sends one event. On network failure (timeout / 5xx / no-network) the event\n * gets buffered; the buffer drains on the next successful send.\n *\n * Never throws — RN apps don't want their event loop killed by a logger.\n */\nexport function sendEvent(\n config: ResolvedConfig,\n payload: Omit<EventPayload, 'service' | 'app' | 'env' | 'attrs'> & {\n attrs?: Record<string, any>;\n service?: string;\n app?: string;\n env?: string;\n },\n): void {\n const state = getState();\n\n const event: EventPayload = {\n service: payload.service ?? config.service,\n app: payload.app ?? config.app,\n env: payload.env ?? config.env,\n level: payload.level,\n message: payload.message,\n stack: payload.stack,\n attrs: {\n ...(payload.attrs ?? {}),\n ...getDeviceAttrs(),\n sdk: SDK_NAME,\n sdk_version: SDK_VERSION,\n release: config.release,\n session_id: state.sessionId,\n device_id: state.deviceId,\n user_id: state.user?.id,\n user_email: state.user?.email,\n },\n synthetic: payload.synthetic,\n };\n\n // Strip undefined attrs (broker accepts strings/numbers, not nulls/undef)\n for (const k of Object.keys(event.attrs)) {\n if (event.attrs[k] === undefined || event.attrs[k] === null) {\n delete event.attrs[k];\n }\n }\n\n void postOrBuffer(config, event);\n}\n\nasync function postOrBuffer(\n config: ResolvedConfig,\n event: EventPayload,\n): Promise<void> {\n // Always drain the buffer first so order is preserved.\n if (!(await tryPost(config, event, /* throwOnFail */ true))) {\n offlineBuffer.push(event);\n return;\n }\n\n // Successfully delivered this one — try to drain any backlog too.\n if (offlineBuffer.size() === 0) return;\n const queued = await offlineBuffer.drain();\n for (const buffered of queued) {\n if (!(await tryPost(config, buffered, true))) {\n // Re-buffer the rest including this one\n offlineBuffer.push(buffered);\n for (let i = queued.indexOf(buffered) + 1; i < queued.length; i++) {\n offlineBuffer.push(queued[i]);\n }\n return;\n }\n }\n}\n\nasync function tryPost(\n config: ResolvedConfig,\n event: EventPayload,\n throwOnFail: boolean,\n): Promise<boolean> {\n try {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), REQUEST_TIMEOUT_MS);\n try {\n const res = await fetch(`${config.endpoint.replace(/\\/$/, '')}/ingest/log`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-loghub-source': config.source,\n 'x-loghub-key': config.projectKey,\n },\n body: JSON.stringify(event),\n signal: ctrl.signal,\n });\n // 4xx → bug on our side; drop, don't buffer\n if (res.status >= 400 && res.status < 500) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] ${res.status} from broker — dropping event`);\n }\n return true; // \"delivered\" in the sense that we won't re-try\n }\n return res.ok;\n } finally {\n clearTimeout(timer);\n }\n } catch (err) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] transport error: ${(err as Error).message}`);\n }\n return false;\n }\n}\n","import { sendEvent } from './transport';\nimport type { ResolvedConfig } from './types';\n\n/**\n * Returns the project's user-code stack frame (skips node_modules and the\n * SDK itself). Falls back to the raw stack.\n */\nfunction topStackFrame(stack: string | undefined): string {\n if (!stack) return '';\n for (const raw of stack.split('\\n')) {\n const line = raw.trim();\n if (!line) continue;\n if (line.startsWith('Error')) continue;\n if (/node_modules|@fixprompt/.test(line)) continue;\n return line.slice(0, 200);\n }\n return stack.split('\\n')[0]?.slice(0, 200) ?? '';\n}\n\nexport function installGlobalErrorHandler(config: ResolvedConfig): () => void {\n // ErrorUtils is a React Native global; not present in plain Node tests.\n const ErrorUtils: any = (globalThis as any).ErrorUtils;\n if (!ErrorUtils?.setGlobalHandler) {\n return () => undefined;\n }\n\n const previous = ErrorUtils.getGlobalHandler?.();\n\n const handler = (error: Error, isFatal?: boolean) => {\n try {\n sendEvent(config, {\n level: isFatal ? 'error' : 'warn',\n message: error?.message ?? 'Uncaught error',\n stack: typeof error?.stack === 'string' ? error.stack : undefined,\n attrs: {\n kind: 'rn.globalError',\n severity: isFatal ? 'critical' : 'error',\n error_name: error?.name,\n top_frame: topStackFrame(error?.stack),\n fatal: !!isFatal,\n },\n });\n } catch {\n // never let logger crash propagate\n }\n previous?.(error, isFatal);\n };\n\n ErrorUtils.setGlobalHandler(handler);\n\n return () => {\n if (previous) ErrorUtils.setGlobalHandler(previous);\n };\n}\n\n/**\n * Hook unhandled-promise-rejection tracking. Uses the bundled\n * `promise/setimmediate/rejection-tracking` module that ships with RN.\n */\nexport function installRejectionHandler(config: ResolvedConfig): () => void {\n let tracking: any;\n try {\n // RN's bundled polyfill — present on every RN runtime.\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n tracking = require('promise/setimmediate/rejection-tracking');\n } catch {\n return () => undefined;\n }\n\n tracking.enable({\n allRejections: true,\n onUnhandled: (id: string, error: unknown) => {\n try {\n const isErr = error instanceof Error;\n sendEvent(config, {\n level: 'error',\n message: isErr ? error.message : safeJson(error),\n stack: isErr && typeof error.stack === 'string' ? error.stack : undefined,\n attrs: {\n kind: 'rn.unhandledrejection',\n severity: 'error',\n error_name: isErr ? error.name : typeof error,\n top_frame: isErr ? topStackFrame(error.stack) : '',\n },\n });\n } catch {\n // ignore\n }\n },\n onHandled: () => undefined,\n });\n\n return () => {\n try {\n tracking.disable();\n } catch {\n // ignore\n }\n };\n}\n\nfunction safeJson(v: unknown): string {\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n}\n","import { sendEvent } from './transport';\nimport type { ResolvedConfig } from './types';\n\nfunction shouldCapture(args: any[], patterns: RegExp[]): boolean {\n if (patterns.length === 0) return true; // empty list = capture everything\n const first = typeof args[0] === 'string' ? args[0] : '';\n return patterns.some((re) => re.test(first));\n}\n\nfunction stringify(args: any[]): { message: string; stack?: string } {\n const errArg = args.find((a) => a instanceof Error) as Error | undefined;\n const message = args\n .map((a) => {\n if (a instanceof Error) return a.message;\n if (typeof a === 'string') return a;\n try {\n return JSON.stringify(a);\n } catch {\n return String(a);\n }\n })\n .join(' ')\n .slice(0, 4000);\n return {\n message,\n stack: errArg && typeof errArg.stack === 'string' ? errArg.stack : undefined,\n };\n}\n\n/**\n * Wrap console.error so tagged calls forward to the broker as warning-severity\n * events. The original console.error still runs (so RedBox / Metro logs still\n * show up).\n *\n * Pattern is intentional — ProofPix's existing log lines look like\n * `console.error('[Analytics] tracking failure', err)`. Devs prefix their\n * intentional captures and the broker only sees tagged ones.\n */\nexport function patchConsoleError(config: ResolvedConfig): () => void {\n const original = console.error.bind(console);\n console.error = (...args: any[]) => {\n try {\n if (shouldCapture(args, config.captureTags)) {\n const { message, stack } = stringify(args);\n sendEvent(config, {\n level: 'warn',\n message,\n stack,\n attrs: {\n kind: 'console.error',\n severity: 'warning',\n },\n });\n }\n } catch {\n // never block user logs\n }\n return original(...args);\n };\n return () => {\n console.error = original;\n };\n}\n\nexport function patchConsoleWarn(config: ResolvedConfig): () => void {\n const original = console.warn.bind(console);\n console.warn = (...args: any[]) => {\n try {\n if (shouldCapture(args, config.captureTags)) {\n const { message, stack } = stringify(args);\n sendEvent(config, {\n level: 'warn',\n message,\n stack,\n attrs: {\n kind: 'console.warn',\n severity: 'warning',\n },\n });\n }\n } catch {\n // never block\n }\n return original(...args);\n };\n return () => {\n console.warn = original;\n };\n}\n","import { getState, type UserContext } from './state';\nimport { newSessionId, getDeviceId } from './session';\nimport { installGlobalErrorHandler, installRejectionHandler } from './handlers';\nimport { patchConsoleError, patchConsoleWarn } from './console';\nimport { sendEvent } from './transport';\nimport { offlineBuffer } from './buffer';\nimport type { InitOptions, ResolvedConfig } from './types';\n\nconst DEFAULT_ENDPOINT = 'https://geosloghub-production.up.railway.app';\n\nfunction resolveConfig(opts: InitOptions): ResolvedConfig {\n if (!opts?.projectKey) throw new Error('initFixPrompt: projectKey is required');\n if (!opts?.source) throw new Error('initFixPrompt: source is required');\n if (!opts?.service) throw new Error('initFixPrompt: service is required');\n if (!opts?.app) throw new Error('initFixPrompt: app is required');\n\n return {\n projectKey: opts.projectKey,\n source: opts.source,\n endpoint: (opts.endpoint ?? DEFAULT_ENDPOINT).replace(/\\/$/, ''),\n service: opts.service,\n app: opts.app,\n env: opts.env ?? 'prod',\n release: opts.release ?? null,\n captureTags: opts.captureTags ?? [],\n patchConsoleWarn: opts.patchConsoleWarn ?? false,\n patchConsoleError: opts.patchConsoleError ?? true,\n debug: opts.debug ?? false,\n };\n}\n\nexport function initFixPrompt(opts: InitOptions): void {\n const state = getState();\n if (state.initialized) {\n if (opts?.debug) {\n // eslint-disable-next-line no-console\n console.warn('[fixprompt] already initialized — call ignored');\n }\n return;\n }\n\n const config = resolveConfig(opts);\n state.config = config;\n state.sessionId = newSessionId();\n\n state.cleanup.removeErrorHandler = installGlobalErrorHandler(config);\n state.cleanup.removeRejectionHandler = installRejectionHandler(config);\n if (config.patchConsoleError) {\n state.cleanup.restoreConsoleError = patchConsoleError(config);\n }\n if (config.patchConsoleWarn) {\n state.cleanup.restoreConsoleWarn = patchConsoleWarn(config);\n }\n\n state.initialized = true;\n\n // Resolve device id + drain any pre-init buffer, async.\n void (async () => {\n try {\n state.deviceId = await getDeviceId();\n await offlineBuffer.load();\n if (offlineBuffer.size() > 0) {\n // Triggers a drain via the transport's natural retry path.\n const items = await offlineBuffer.drain();\n for (const ev of items) {\n // Re-buffer if delivery still fails — transport handles it\n offlineBuffer.push(ev);\n }\n // Kick a drain attempt\n sendEvent(config, {\n level: 'debug',\n message: '[fixprompt] resumed from offline buffer',\n attrs: { kind: 'sdk.startup', buffered: items.length },\n });\n }\n } catch (err) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] init async setup failed: ${(err as Error).message}`);\n }\n }\n })();\n\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.log('[fixprompt] initialized', {\n endpoint: config.endpoint,\n service: config.service,\n env: config.env,\n session_id: state.sessionId,\n });\n }\n}\n\nexport function captureException(\n err: unknown,\n options: { synthetic?: boolean; attrs?: Record<string, any> } = {},\n): void {\n const state = getState();\n if (!state.initialized || !state.config) return;\n const isErr = err instanceof Error;\n sendEvent(state.config, {\n level: 'error',\n message: isErr ? err.message : String(err),\n stack: isErr && typeof err.stack === 'string' ? err.stack : undefined,\n attrs: {\n kind: 'captureException',\n severity: 'error',\n error_name: isErr ? err.name : typeof err,\n ...(options.attrs ?? {}),\n },\n synthetic: options.synthetic === true,\n });\n}\n\nexport function setUser(user: UserContext | null): void {\n const state = getState();\n state.user = user;\n}\n\n/** Tests + HMR only. Not part of the supported API. @internal */\nexport function _resetForTests(): void {\n const state = getState();\n state.cleanup.removeErrorHandler?.();\n state.cleanup.removeRejectionHandler?.();\n state.cleanup.restoreConsoleError?.();\n state.cleanup.restoreConsoleWarn?.();\n state.initialized = false;\n state.config = null;\n state.sessionId = null;\n state.deviceId = null;\n state.user = null;\n state.cleanup = {};\n}\n"],"mappings":"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","names":["exports","module","Promise","resolve","reject","exports","Promise","id","AsyncStorage","import_async_storage","AsyncStorage"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/promise/setimmediate/core.js","../node_modules/promise/setimmediate/rejection-tracking.js","../src/index.ts","../src/state.ts","../src/session.ts","../src/buffer.ts","../src/device.ts","../src/version.ts","../src/transport.ts","../src/handlers.ts","../src/console.ts","../src/init.ts"],"sourcesContent":["'use strict';\n\n\n\nfunction noop() {}\n\n// States:\n//\n// 0 - pending\n// 1 - fulfilled with _value\n// 2 - rejected with _value\n// 3 - adopted the state of another promise, _value\n//\n// once the state is no longer pending (0) it is immutable\n\n// All `_` prefixed properties will be reduced to `_{random number}`\n// at build time to obfuscate them and discourage their use.\n// We don't use symbols or Object.defineProperty to fully hide them\n// because the performance isn't good enough.\n\n\n// to avoid using try/catch inside critical functions, we\n// extract them to here.\nvar LAST_ERROR = null;\nvar IS_ERROR = {};\nfunction getThen(obj) {\n try {\n return obj.then;\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nfunction tryCallOne(fn, a) {\n try {\n return fn(a);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\nfunction tryCallTwo(fn, a, b) {\n try {\n fn(a, b);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nmodule.exports = Promise;\n\nfunction Promise(fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('Promise constructor\\'s argument is not a function');\n }\n this._x = 0;\n this._y = 0;\n this._z = null;\n this._A = null;\n if (fn === noop) return;\n doResolve(fn, this);\n}\nPromise._B = null;\nPromise._C = null;\nPromise._D = noop;\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n if (this.constructor !== Promise) {\n return safeThen(this, onFulfilled, onRejected);\n }\n var res = new Promise(noop);\n handle(this, new Handler(onFulfilled, onRejected, res));\n return res;\n};\n\nfunction safeThen(self, onFulfilled, onRejected) {\n return new self.constructor(function (resolve, reject) {\n var res = new Promise(noop);\n res.then(resolve, reject);\n handle(self, new Handler(onFulfilled, onRejected, res));\n });\n}\nfunction handle(self, deferred) {\n while (self._y === 3) {\n self = self._z;\n }\n if (Promise._B) {\n Promise._B(self);\n }\n if (self._y === 0) {\n if (self._x === 0) {\n self._x = 1;\n self._A = deferred;\n return;\n }\n if (self._x === 1) {\n self._x = 2;\n self._A = [self._A, deferred];\n return;\n }\n self._A.push(deferred);\n return;\n }\n handleResolved(self, deferred);\n}\n\nfunction handleResolved(self, deferred) {\n setImmediate(function() {\n var cb = self._y === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n if (self._y === 1) {\n resolve(deferred.promise, self._z);\n } else {\n reject(deferred.promise, self._z);\n }\n return;\n }\n var ret = tryCallOne(cb, self._z);\n if (ret === IS_ERROR) {\n reject(deferred.promise, LAST_ERROR);\n } else {\n resolve(deferred.promise, ret);\n }\n });\n}\nfunction resolve(self, newValue) {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) {\n return reject(\n self,\n new TypeError('A promise cannot be resolved with itself.')\n );\n }\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = getThen(newValue);\n if (then === IS_ERROR) {\n return reject(self, LAST_ERROR);\n }\n if (\n then === self.then &&\n newValue instanceof Promise\n ) {\n self._y = 3;\n self._z = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(then.bind(newValue), self);\n return;\n }\n }\n self._y = 1;\n self._z = newValue;\n finale(self);\n}\n\nfunction reject(self, newValue) {\n self._y = 2;\n self._z = newValue;\n if (Promise._C) {\n Promise._C(self, newValue);\n }\n finale(self);\n}\nfunction finale(self) {\n if (self._x === 1) {\n handle(self, self._A);\n self._A = null;\n }\n if (self._x === 2) {\n for (var i = 0; i < self._A.length; i++) {\n handle(self, self._A[i]);\n }\n self._A = null;\n }\n}\n\nfunction Handler(onFulfilled, onRejected, promise){\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, promise) {\n var done = false;\n var res = tryCallTwo(fn, function (value) {\n if (done) return;\n done = true;\n resolve(promise, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(promise, reason);\n });\n if (!done && res === IS_ERROR) {\n done = true;\n reject(promise, LAST_ERROR);\n }\n}\n","'use strict';\n\nvar Promise = require('./core');\n\nvar DEFAULT_WHITELIST = [\n ReferenceError,\n TypeError,\n RangeError\n];\n\nvar enabled = false;\nexports.disable = disable;\nfunction disable() {\n enabled = false;\n Promise._B = null;\n Promise._C = null;\n}\n\nexports.enable = enable;\nfunction enable(options) {\n options = options || {};\n if (enabled) disable();\n enabled = true;\n var id = 0;\n var displayId = 0;\n var rejections = {};\n Promise._B = function (promise) {\n if (\n promise._y === 2 && // IS REJECTED\n rejections[promise._E]\n ) {\n if (rejections[promise._E].logged) {\n onHandled(promise._E);\n } else {\n clearTimeout(rejections[promise._E].timeout);\n }\n delete rejections[promise._E];\n }\n };\n Promise._C = function (promise, err) {\n if (promise._x === 0) { // not yet handled\n promise._E = id++;\n rejections[promise._E] = {\n displayId: null,\n error: err,\n timeout: setTimeout(\n onUnhandled.bind(null, promise._E),\n // For reference errors and type errors, this almost always\n // means the programmer made a mistake, so log them after just\n // 100ms\n // otherwise, wait 2 seconds to see if they get handled\n matchWhitelist(err, DEFAULT_WHITELIST)\n ? 100\n : 2000\n ),\n logged: false\n };\n }\n };\n function onUnhandled(id) {\n if (\n options.allRejections ||\n matchWhitelist(\n rejections[id].error,\n options.whitelist || DEFAULT_WHITELIST\n )\n ) {\n rejections[id].displayId = displayId++;\n if (options.onUnhandled) {\n rejections[id].logged = true;\n options.onUnhandled(\n rejections[id].displayId,\n rejections[id].error\n );\n } else {\n rejections[id].logged = true;\n logError(\n rejections[id].displayId,\n rejections[id].error\n );\n }\n }\n }\n function onHandled(id) {\n if (rejections[id].logged) {\n if (options.onHandled) {\n options.onHandled(rejections[id].displayId, rejections[id].error);\n } else if (!rejections[id].onUnhandled) {\n console.warn(\n 'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'\n );\n console.warn(\n ' This means you can ignore any previous messages of the form \"Possible Unhandled Promise Rejection\" with id ' +\n rejections[id].displayId + '.'\n );\n }\n }\n }\n}\n\nfunction logError(id, error) {\n console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');\n var errStr = (error && (error.stack || error)) + '';\n errStr.split('\\n').forEach(function (line) {\n console.warn(' ' + line);\n });\n}\n\nfunction matchWhitelist(error, list) {\n return list.some(function (cls) {\n return error instanceof cls;\n });\n}","export { initFixPrompt, captureException, setUser, _resetForTests } from './init';\nexport type {\n InitOptions,\n ResolvedConfig,\n EventPayload,\n Severity,\n LogLevel,\n} from './types';\nexport { SDK_NAME, SDK_VERSION } from './version';\n","import type { ResolvedConfig } from './types';\n\nexport interface UserContext {\n id?: string;\n email?: string;\n [k: string]: any;\n}\n\ninterface CleanupHooks {\n removeErrorHandler?: () => void;\n removeRejectionHandler?: () => void;\n restoreConsoleError?: () => void;\n restoreConsoleWarn?: () => void;\n}\n\ninterface SdkState {\n initialized: boolean;\n config: ResolvedConfig | null;\n sessionId: string | null;\n deviceId: string | null;\n user: UserContext | null;\n cleanup: CleanupHooks;\n}\n\nconst STATE_KEY = '__fixprompt_rn_state__';\n\nfunction globalScope(): any {\n if (typeof globalThis !== 'undefined') return globalThis;\n return {};\n}\n\nexport function getState(): SdkState {\n const g = globalScope();\n if (!g[STATE_KEY]) {\n g[STATE_KEY] = {\n initialized: false,\n config: null,\n sessionId: null,\n deviceId: null,\n user: null,\n cleanup: {},\n } satisfies SdkState;\n }\n return g[STATE_KEY] as SdkState;\n}\n\nexport function resetStateForTests(): void {\n const g = globalScope();\n delete g[STATE_KEY];\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\n\nconst DEVICE_KEY = '@fixprompt/device_id';\n\nfunction uuid(): string {\n if (typeof globalThis.crypto?.randomUUID === 'function') {\n return globalThis.crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * One uuid per cold start. Lives in memory; resets when the app restarts.\n */\nexport function newSessionId(): string {\n return uuid();\n}\n\n/**\n * Stable per-device uuid. Tries expo-secure-store first (keychain-backed),\n * falls back to AsyncStorage. Generated lazily on first call.\n *\n * We deliberately don't use OS-provided device IDs (IDFV/Android ID) —\n * Apple flags them on review and they reset on reinstall anyway.\n */\nexport async function getDeviceId(): Promise<string> {\n // Optional expo-secure-store path\n try {\n // dynamic import so we don't crash when SecureStore isn't installed\n const SecureStore = await tryImport<any>('expo-secure-store');\n if (SecureStore) {\n const existing = await SecureStore.getItemAsync('fixprompt_device_id');\n if (existing) return existing;\n const fresh = uuid();\n await SecureStore.setItemAsync('fixprompt_device_id', fresh);\n return fresh;\n }\n } catch {\n // ignore — fall through to AsyncStorage\n }\n\n try {\n const existing = await AsyncStorage.getItem(DEVICE_KEY);\n if (existing) return existing;\n const fresh = uuid();\n await AsyncStorage.setItem(DEVICE_KEY, fresh);\n return fresh;\n } catch {\n // Final fallback — in-memory only (lost on reinstall)\n return uuid();\n }\n}\n\nasync function tryImport<T>(spec: string): Promise<T | null> {\n try {\n // require keeps Metro bundler quiet when the package isn't installed\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(spec) as T;\n } catch {\n return null;\n }\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport type { EventPayload } from './types';\n\nconst STORAGE_KEY = '@fixprompt/buffer';\nconst MAX_BUFFER = 200;\nconst MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;\n\ninterface BufferedEvent {\n ts: number;\n payload: EventPayload;\n}\n\n/**\n * In-memory ring buffer with AsyncStorage persistence.\n *\n * Events accumulate when the broker is unreachable (network error / 5xx /\n * timeout). On the next successful send, the whole buffer drains in order.\n * On cold start, any persisted buffer from a prior crash is replayed.\n */\nclass OfflineBuffer {\n private items: BufferedEvent[] = [];\n private loaded = false;\n private persistTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Load the persisted buffer once, on first use. */\n async load(): Promise<void> {\n if (this.loaded) return;\n this.loaded = true;\n try {\n const raw = await AsyncStorage.getItem(STORAGE_KEY);\n if (!raw) return;\n const parsed = JSON.parse(raw) as BufferedEvent[];\n const cutoff = Date.now() - MAX_AGE_MS;\n this.items = parsed.filter((e) => e?.ts > cutoff).slice(-MAX_BUFFER);\n } catch {\n this.items = [];\n }\n }\n\n push(payload: EventPayload): void {\n this.items.push({ ts: Date.now(), payload });\n if (this.items.length > MAX_BUFFER) this.items.shift();\n this.schedulePersist();\n }\n\n async drain(): Promise<EventPayload[]> {\n if (!this.loaded) await this.load();\n const out = this.items.map((e) => e.payload);\n this.items = [];\n this.schedulePersist();\n return out;\n }\n\n size(): number {\n return this.items.length;\n }\n\n private schedulePersist() {\n if (this.persistTimer) return;\n this.persistTimer = setTimeout(async () => {\n this.persistTimer = null;\n try {\n await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(this.items));\n } catch {\n // swallow — buffer survives in memory at least\n }\n }, 500);\n }\n\n /** Tests only. */\n _resetForTests(): void {\n this.items = [];\n this.loaded = false;\n if (this.persistTimer) {\n clearTimeout(this.persistTimer);\n this.persistTimer = null;\n }\n }\n}\n\nexport const offlineBuffer = new OfflineBuffer();\n","import { Platform } from 'react-native';\n\nexport interface DeviceAttrs {\n platform: string; // 'ios' | 'android' | 'web' | 'windows' | 'macos'\n os_version: string;\n /** RN runtime version (Hermes / JSC). Used for triage. */\n rn_version?: string;\n\n /** App version (e.g. \"1.2.3\") from expo-constants or native build. */\n app_version?: string;\n /** Build number (CFBundleVersion / versionCode) from expo-constants. */\n build_number?: string;\n\n /** OTA bundle id (Updates.updateId) from expo-updates, if active. */\n ota_id?: string;\n /** OTA runtime version (Updates.runtimeVersion) from expo-updates. */\n runtime_version?: string;\n /** OTA channel (Updates.channel) — e.g. \"production\", \"preview\". */\n ota_channel?: string;\n}\n\nfunction tryRequire<T = any>(spec: string): T | null {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(spec) as T;\n } catch {\n return null;\n }\n}\n\n// Cache at module load. Both packages are optional peer deps — bare RN\n// (or sideloaded Expo) projects without them get the basic platform attrs.\nconst ConstantsMod: any = tryRequire('expo-constants');\nconst Constants: any = ConstantsMod?.default ?? ConstantsMod ?? null;\nconst Updates: any = tryRequire('expo-updates');\n\nexport function getDeviceAttrs(): DeviceAttrs {\n const attrs: DeviceAttrs = {\n platform: String(Platform.OS),\n os_version: String((Platform as any).Version ?? 'unknown'),\n rn_version: (Platform as any).constants?.reactNativeVersion\n ? Object.values((Platform as any).constants.reactNativeVersion).join('.')\n : undefined,\n };\n\n // expo-constants: app version + native build number\n if (Constants) {\n const cfg = Constants.expoConfig ?? Constants.manifest ?? null;\n if (cfg?.version) attrs.app_version = String(cfg.version);\n if (cfg?.ios?.buildNumber) {\n attrs.build_number = String(cfg.ios.buildNumber);\n } else if (cfg?.android?.versionCode != null) {\n attrs.build_number = String(cfg.android.versionCode);\n }\n // Fall back to native values when running on a binary build\n if (!attrs.app_version && Constants.nativeAppVersion) {\n attrs.app_version = String(Constants.nativeAppVersion);\n }\n if (!attrs.build_number && Constants.nativeBuildVersion) {\n attrs.build_number = String(Constants.nativeBuildVersion);\n }\n }\n\n // expo-updates: OTA bundle id + channel\n if (Updates) {\n if (Updates.updateId) attrs.ota_id = String(Updates.updateId);\n if (Updates.runtimeVersion) attrs.runtime_version = String(Updates.runtimeVersion);\n if (Updates.channel) attrs.ota_channel = String(Updates.channel);\n }\n\n return attrs;\n}\n","export const SDK_NAME = '@fixprompt/react-native';\nexport const SDK_VERSION = '0.0.2';\n","import type { EventPayload, ResolvedConfig } from './types';\nimport { offlineBuffer } from './buffer';\nimport { getState } from './state';\nimport { getDeviceAttrs } from './device';\nimport { SDK_NAME, SDK_VERSION } from './version';\n\nconst REQUEST_TIMEOUT_MS = 8_000;\n\n/**\n * Sends one event. On network failure (timeout / 5xx / no-network) the event\n * gets buffered; the buffer drains on the next successful send.\n *\n * Never throws — RN apps don't want their event loop killed by a logger.\n */\nexport function sendEvent(\n config: ResolvedConfig,\n payload: Omit<EventPayload, 'service' | 'app' | 'env' | 'attrs'> & {\n attrs?: Record<string, any>;\n service?: string;\n app?: string;\n env?: string;\n },\n): void {\n const state = getState();\n\n const event: EventPayload = {\n service: payload.service ?? config.service,\n app: payload.app ?? config.app,\n env: payload.env ?? config.env,\n level: payload.level,\n message: payload.message,\n stack: payload.stack,\n attrs: {\n ...(payload.attrs ?? {}),\n ...getDeviceAttrs(),\n sdk: SDK_NAME,\n sdk_version: SDK_VERSION,\n release: config.release,\n session_id: state.sessionId,\n device_id: state.deviceId,\n user_id: state.user?.id,\n user_email: state.user?.email,\n },\n synthetic: payload.synthetic,\n };\n\n // Strip undefined attrs (broker accepts strings/numbers, not nulls/undef)\n for (const k of Object.keys(event.attrs)) {\n if (event.attrs[k] === undefined || event.attrs[k] === null) {\n delete event.attrs[k];\n }\n }\n\n void postOrBuffer(config, event);\n}\n\nasync function postOrBuffer(\n config: ResolvedConfig,\n event: EventPayload,\n): Promise<void> {\n // Always drain the buffer first so order is preserved.\n if (!(await tryPost(config, event, /* throwOnFail */ true))) {\n offlineBuffer.push(event);\n return;\n }\n\n // Successfully delivered this one — try to drain any backlog too.\n if (offlineBuffer.size() === 0) return;\n const queued = await offlineBuffer.drain();\n for (const buffered of queued) {\n if (!(await tryPost(config, buffered, true))) {\n // Re-buffer the rest including this one\n offlineBuffer.push(buffered);\n for (let i = queued.indexOf(buffered) + 1; i < queued.length; i++) {\n offlineBuffer.push(queued[i]);\n }\n return;\n }\n }\n}\n\nasync function tryPost(\n config: ResolvedConfig,\n event: EventPayload,\n throwOnFail: boolean,\n): Promise<boolean> {\n try {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), REQUEST_TIMEOUT_MS);\n try {\n const res = await fetch(`${config.endpoint.replace(/\\/$/, '')}/ingest/log`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-loghub-source': config.source,\n 'x-loghub-key': config.projectKey,\n },\n body: JSON.stringify(event),\n signal: ctrl.signal,\n });\n // 4xx → bug on our side; drop, don't buffer\n if (res.status >= 400 && res.status < 500) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] ${res.status} from broker — dropping event`);\n }\n return true; // \"delivered\" in the sense that we won't re-try\n }\n return res.ok;\n } finally {\n clearTimeout(timer);\n }\n } catch (err) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] transport error: ${(err as Error).message}`);\n }\n return false;\n }\n}\n","import { sendEvent } from './transport';\nimport type { ResolvedConfig } from './types';\n\n/**\n * Returns the project's user-code stack frame (skips node_modules and the\n * SDK itself). Falls back to the raw stack.\n */\nfunction topStackFrame(stack: string | undefined): string {\n if (!stack) return '';\n for (const raw of stack.split('\\n')) {\n const line = raw.trim();\n if (!line) continue;\n if (line.startsWith('Error')) continue;\n if (/node_modules|@fixprompt/.test(line)) continue;\n return line.slice(0, 200);\n }\n return stack.split('\\n')[0]?.slice(0, 200) ?? '';\n}\n\nexport function installGlobalErrorHandler(config: ResolvedConfig): () => void {\n // ErrorUtils is a React Native global; not present in plain Node tests.\n const ErrorUtils: any = (globalThis as any).ErrorUtils;\n if (!ErrorUtils?.setGlobalHandler) {\n return () => undefined;\n }\n\n const previous = ErrorUtils.getGlobalHandler?.();\n\n const handler = (error: Error, isFatal?: boolean) => {\n try {\n sendEvent(config, {\n level: isFatal ? 'error' : 'warn',\n message: error?.message ?? 'Uncaught error',\n stack: typeof error?.stack === 'string' ? error.stack : undefined,\n attrs: {\n kind: 'rn.globalError',\n severity: isFatal ? 'critical' : 'error',\n error_name: error?.name,\n top_frame: topStackFrame(error?.stack),\n fatal: !!isFatal,\n },\n });\n } catch {\n // never let logger crash propagate\n }\n previous?.(error, isFatal);\n };\n\n ErrorUtils.setGlobalHandler(handler);\n\n return () => {\n if (previous) ErrorUtils.setGlobalHandler(previous);\n };\n}\n\n/**\n * Hook unhandled-promise-rejection tracking. Uses the bundled\n * `promise/setimmediate/rejection-tracking` module that ships with RN.\n */\nexport function installRejectionHandler(config: ResolvedConfig): () => void {\n let tracking: any;\n try {\n // RN's bundled polyfill — present on every RN runtime.\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n tracking = require('promise/setimmediate/rejection-tracking');\n } catch {\n return () => undefined;\n }\n\n tracking.enable({\n allRejections: true,\n onUnhandled: (id: string, error: unknown) => {\n try {\n const isErr = error instanceof Error;\n sendEvent(config, {\n level: 'error',\n message: isErr ? error.message : safeJson(error),\n stack: isErr && typeof error.stack === 'string' ? error.stack : undefined,\n attrs: {\n kind: 'rn.unhandledrejection',\n severity: 'error',\n error_name: isErr ? error.name : typeof error,\n top_frame: isErr ? topStackFrame(error.stack) : '',\n },\n });\n } catch {\n // ignore\n }\n },\n onHandled: () => undefined,\n });\n\n return () => {\n try {\n tracking.disable();\n } catch {\n // ignore\n }\n };\n}\n\nfunction safeJson(v: unknown): string {\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n}\n","import { sendEvent } from './transport';\nimport type { ResolvedConfig } from './types';\n\nfunction shouldCapture(args: any[], patterns: RegExp[]): boolean {\n if (patterns.length === 0) return true; // empty list = capture everything\n const first = typeof args[0] === 'string' ? args[0] : '';\n return patterns.some((re) => re.test(first));\n}\n\nfunction stringify(args: any[]): { message: string; stack?: string } {\n const errArg = args.find((a) => a instanceof Error) as Error | undefined;\n const message = args\n .map((a) => {\n if (a instanceof Error) return a.message;\n if (typeof a === 'string') return a;\n try {\n return JSON.stringify(a);\n } catch {\n return String(a);\n }\n })\n .join(' ')\n .slice(0, 4000);\n return {\n message,\n stack: errArg && typeof errArg.stack === 'string' ? errArg.stack : undefined,\n };\n}\n\n/**\n * Wrap console.error so tagged calls forward to the broker as warning-severity\n * events. The original console.error still runs (so RedBox / Metro logs still\n * show up).\n *\n * Pattern is intentional — ProofPix's existing log lines look like\n * `console.error('[Analytics] tracking failure', err)`. Devs prefix their\n * intentional captures and the broker only sees tagged ones.\n */\nexport function patchConsoleError(config: ResolvedConfig): () => void {\n const original = console.error.bind(console);\n console.error = (...args: any[]) => {\n try {\n if (shouldCapture(args, config.captureTags)) {\n const { message, stack } = stringify(args);\n sendEvent(config, {\n level: 'warn',\n message,\n stack,\n attrs: {\n kind: 'console.error',\n severity: 'warning',\n },\n });\n }\n } catch {\n // never block user logs\n }\n return original(...args);\n };\n return () => {\n console.error = original;\n };\n}\n\nexport function patchConsoleWarn(config: ResolvedConfig): () => void {\n const original = console.warn.bind(console);\n console.warn = (...args: any[]) => {\n try {\n if (shouldCapture(args, config.captureTags)) {\n const { message, stack } = stringify(args);\n sendEvent(config, {\n level: 'warn',\n message,\n stack,\n attrs: {\n kind: 'console.warn',\n severity: 'warning',\n },\n });\n }\n } catch {\n // never block\n }\n return original(...args);\n };\n return () => {\n console.warn = original;\n };\n}\n","import { getState, type UserContext } from './state';\nimport { newSessionId, getDeviceId } from './session';\nimport { installGlobalErrorHandler, installRejectionHandler } from './handlers';\nimport { patchConsoleError, patchConsoleWarn } from './console';\nimport { sendEvent } from './transport';\nimport { offlineBuffer } from './buffer';\nimport type { InitOptions, ResolvedConfig } from './types';\n\nconst DEFAULT_ENDPOINT = 'https://geosloghub-production.up.railway.app';\n\nfunction resolveConfig(opts: InitOptions): ResolvedConfig {\n if (!opts?.projectKey) throw new Error('initFixPrompt: projectKey is required');\n if (!opts?.source) throw new Error('initFixPrompt: source is required');\n if (!opts?.service) throw new Error('initFixPrompt: service is required');\n if (!opts?.app) throw new Error('initFixPrompt: app is required');\n\n return {\n projectKey: opts.projectKey,\n source: opts.source,\n endpoint: (opts.endpoint ?? DEFAULT_ENDPOINT).replace(/\\/$/, ''),\n service: opts.service,\n app: opts.app,\n env: opts.env ?? 'prod',\n release: opts.release ?? null,\n captureTags: opts.captureTags ?? [],\n patchConsoleWarn: opts.patchConsoleWarn ?? false,\n patchConsoleError: opts.patchConsoleError ?? true,\n debug: opts.debug ?? false,\n };\n}\n\nexport function initFixPrompt(opts: InitOptions): void {\n const state = getState();\n if (state.initialized) {\n if (opts?.debug) {\n // eslint-disable-next-line no-console\n console.warn('[fixprompt] already initialized — call ignored');\n }\n return;\n }\n\n const config = resolveConfig(opts);\n state.config = config;\n state.sessionId = newSessionId();\n\n state.cleanup.removeErrorHandler = installGlobalErrorHandler(config);\n state.cleanup.removeRejectionHandler = installRejectionHandler(config);\n if (config.patchConsoleError) {\n state.cleanup.restoreConsoleError = patchConsoleError(config);\n }\n if (config.patchConsoleWarn) {\n state.cleanup.restoreConsoleWarn = patchConsoleWarn(config);\n }\n\n state.initialized = true;\n\n // Resolve device id + drain any pre-init buffer, async.\n void (async () => {\n try {\n state.deviceId = await getDeviceId();\n await offlineBuffer.load();\n if (offlineBuffer.size() > 0) {\n // Triggers a drain via the transport's natural retry path.\n const items = await offlineBuffer.drain();\n for (const ev of items) {\n // Re-buffer if delivery still fails — transport handles it\n offlineBuffer.push(ev);\n }\n // Kick a drain attempt\n sendEvent(config, {\n level: 'debug',\n message: '[fixprompt] resumed from offline buffer',\n attrs: { kind: 'sdk.startup', buffered: items.length },\n });\n }\n } catch (err) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] init async setup failed: ${(err as Error).message}`);\n }\n }\n })();\n\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.log('[fixprompt] initialized', {\n endpoint: config.endpoint,\n service: config.service,\n env: config.env,\n session_id: state.sessionId,\n });\n }\n}\n\nexport function captureException(\n err: unknown,\n options: { synthetic?: boolean; attrs?: Record<string, any> } = {},\n): void {\n const state = getState();\n if (!state.initialized || !state.config) return;\n const isErr = err instanceof Error;\n sendEvent(state.config, {\n level: 'error',\n message: isErr ? err.message : String(err),\n stack: isErr && typeof err.stack === 'string' ? err.stack : undefined,\n attrs: {\n kind: 'captureException',\n severity: 'error',\n error_name: isErr ? err.name : typeof err,\n ...(options.attrs ?? {}),\n },\n synthetic: options.synthetic === true,\n });\n}\n\nexport function setUser(user: UserContext | null): void {\n const state = getState();\n state.user = user;\n}\n\n/** Tests + HMR only. Not part of the supported API. @internal */\nexport function _resetForTests(): void {\n const state = getState();\n state.cleanup.removeErrorHandler?.();\n state.cleanup.removeRejectionHandler?.();\n state.cleanup.restoreConsoleError?.();\n state.cleanup.restoreConsoleWarn?.();\n state.initialized = false;\n state.config = null;\n state.sessionId = null;\n state.deviceId = null;\n state.user = null;\n state.cleanup = {};\n}\n"],"mappings":"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","names":["exports","module","Promise","resolve","reject","exports","Promise","id","AsyncStorage","import_async_storage","AsyncStorage"]}
|
package/dist/index.js
CHANGED
|
@@ -422,17 +422,48 @@ var offlineBuffer = new OfflineBuffer();
|
|
|
422
422
|
|
|
423
423
|
// src/device.ts
|
|
424
424
|
import { Platform } from "react-native";
|
|
425
|
+
function tryRequire(spec) {
|
|
426
|
+
try {
|
|
427
|
+
return __require(spec);
|
|
428
|
+
} catch {
|
|
429
|
+
return null;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
var ConstantsMod = tryRequire("expo-constants");
|
|
433
|
+
var Constants = ConstantsMod?.default ?? ConstantsMod ?? null;
|
|
434
|
+
var Updates = tryRequire("expo-updates");
|
|
425
435
|
function getDeviceAttrs() {
|
|
426
|
-
|
|
436
|
+
const attrs = {
|
|
427
437
|
platform: String(Platform.OS),
|
|
428
438
|
os_version: String(Platform.Version ?? "unknown"),
|
|
429
439
|
rn_version: Platform.constants?.reactNativeVersion ? Object.values(Platform.constants.reactNativeVersion).join(".") : void 0
|
|
430
440
|
};
|
|
441
|
+
if (Constants) {
|
|
442
|
+
const cfg = Constants.expoConfig ?? Constants.manifest ?? null;
|
|
443
|
+
if (cfg?.version) attrs.app_version = String(cfg.version);
|
|
444
|
+
if (cfg?.ios?.buildNumber) {
|
|
445
|
+
attrs.build_number = String(cfg.ios.buildNumber);
|
|
446
|
+
} else if (cfg?.android?.versionCode != null) {
|
|
447
|
+
attrs.build_number = String(cfg.android.versionCode);
|
|
448
|
+
}
|
|
449
|
+
if (!attrs.app_version && Constants.nativeAppVersion) {
|
|
450
|
+
attrs.app_version = String(Constants.nativeAppVersion);
|
|
451
|
+
}
|
|
452
|
+
if (!attrs.build_number && Constants.nativeBuildVersion) {
|
|
453
|
+
attrs.build_number = String(Constants.nativeBuildVersion);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
if (Updates) {
|
|
457
|
+
if (Updates.updateId) attrs.ota_id = String(Updates.updateId);
|
|
458
|
+
if (Updates.runtimeVersion) attrs.runtime_version = String(Updates.runtimeVersion);
|
|
459
|
+
if (Updates.channel) attrs.ota_channel = String(Updates.channel);
|
|
460
|
+
}
|
|
461
|
+
return attrs;
|
|
431
462
|
}
|
|
432
463
|
|
|
433
464
|
// src/version.ts
|
|
434
465
|
var SDK_NAME = "@fixprompt/react-native";
|
|
435
|
-
var SDK_VERSION = "0.0.
|
|
466
|
+
var SDK_VERSION = "0.0.2";
|
|
436
467
|
|
|
437
468
|
// src/transport.ts
|
|
438
469
|
var REQUEST_TIMEOUT_MS = 8e3;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/promise/setimmediate/core.js","../node_modules/promise/setimmediate/rejection-tracking.js","../src/state.ts","../src/session.ts","../src/buffer.ts","../src/device.ts","../src/version.ts","../src/transport.ts","../src/handlers.ts","../src/console.ts","../src/init.ts"],"sourcesContent":["'use strict';\n\n\n\nfunction noop() {}\n\n// States:\n//\n// 0 - pending\n// 1 - fulfilled with _value\n// 2 - rejected with _value\n// 3 - adopted the state of another promise, _value\n//\n// once the state is no longer pending (0) it is immutable\n\n// All `_` prefixed properties will be reduced to `_{random number}`\n// at build time to obfuscate them and discourage their use.\n// We don't use symbols or Object.defineProperty to fully hide them\n// because the performance isn't good enough.\n\n\n// to avoid using try/catch inside critical functions, we\n// extract them to here.\nvar LAST_ERROR = null;\nvar IS_ERROR = {};\nfunction getThen(obj) {\n try {\n return obj.then;\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nfunction tryCallOne(fn, a) {\n try {\n return fn(a);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\nfunction tryCallTwo(fn, a, b) {\n try {\n fn(a, b);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nmodule.exports = Promise;\n\nfunction Promise(fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('Promise constructor\\'s argument is not a function');\n }\n this._x = 0;\n this._y = 0;\n this._z = null;\n this._A = null;\n if (fn === noop) return;\n doResolve(fn, this);\n}\nPromise._B = null;\nPromise._C = null;\nPromise._D = noop;\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n if (this.constructor !== Promise) {\n return safeThen(this, onFulfilled, onRejected);\n }\n var res = new Promise(noop);\n handle(this, new Handler(onFulfilled, onRejected, res));\n return res;\n};\n\nfunction safeThen(self, onFulfilled, onRejected) {\n return new self.constructor(function (resolve, reject) {\n var res = new Promise(noop);\n res.then(resolve, reject);\n handle(self, new Handler(onFulfilled, onRejected, res));\n });\n}\nfunction handle(self, deferred) {\n while (self._y === 3) {\n self = self._z;\n }\n if (Promise._B) {\n Promise._B(self);\n }\n if (self._y === 0) {\n if (self._x === 0) {\n self._x = 1;\n self._A = deferred;\n return;\n }\n if (self._x === 1) {\n self._x = 2;\n self._A = [self._A, deferred];\n return;\n }\n self._A.push(deferred);\n return;\n }\n handleResolved(self, deferred);\n}\n\nfunction handleResolved(self, deferred) {\n setImmediate(function() {\n var cb = self._y === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n if (self._y === 1) {\n resolve(deferred.promise, self._z);\n } else {\n reject(deferred.promise, self._z);\n }\n return;\n }\n var ret = tryCallOne(cb, self._z);\n if (ret === IS_ERROR) {\n reject(deferred.promise, LAST_ERROR);\n } else {\n resolve(deferred.promise, ret);\n }\n });\n}\nfunction resolve(self, newValue) {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) {\n return reject(\n self,\n new TypeError('A promise cannot be resolved with itself.')\n );\n }\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = getThen(newValue);\n if (then === IS_ERROR) {\n return reject(self, LAST_ERROR);\n }\n if (\n then === self.then &&\n newValue instanceof Promise\n ) {\n self._y = 3;\n self._z = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(then.bind(newValue), self);\n return;\n }\n }\n self._y = 1;\n self._z = newValue;\n finale(self);\n}\n\nfunction reject(self, newValue) {\n self._y = 2;\n self._z = newValue;\n if (Promise._C) {\n Promise._C(self, newValue);\n }\n finale(self);\n}\nfunction finale(self) {\n if (self._x === 1) {\n handle(self, self._A);\n self._A = null;\n }\n if (self._x === 2) {\n for (var i = 0; i < self._A.length; i++) {\n handle(self, self._A[i]);\n }\n self._A = null;\n }\n}\n\nfunction Handler(onFulfilled, onRejected, promise){\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, promise) {\n var done = false;\n var res = tryCallTwo(fn, function (value) {\n if (done) return;\n done = true;\n resolve(promise, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(promise, reason);\n });\n if (!done && res === IS_ERROR) {\n done = true;\n reject(promise, LAST_ERROR);\n }\n}\n","'use strict';\n\nvar Promise = require('./core');\n\nvar DEFAULT_WHITELIST = [\n ReferenceError,\n TypeError,\n RangeError\n];\n\nvar enabled = false;\nexports.disable = disable;\nfunction disable() {\n enabled = false;\n Promise._B = null;\n Promise._C = null;\n}\n\nexports.enable = enable;\nfunction enable(options) {\n options = options || {};\n if (enabled) disable();\n enabled = true;\n var id = 0;\n var displayId = 0;\n var rejections = {};\n Promise._B = function (promise) {\n if (\n promise._y === 2 && // IS REJECTED\n rejections[promise._E]\n ) {\n if (rejections[promise._E].logged) {\n onHandled(promise._E);\n } else {\n clearTimeout(rejections[promise._E].timeout);\n }\n delete rejections[promise._E];\n }\n };\n Promise._C = function (promise, err) {\n if (promise._x === 0) { // not yet handled\n promise._E = id++;\n rejections[promise._E] = {\n displayId: null,\n error: err,\n timeout: setTimeout(\n onUnhandled.bind(null, promise._E),\n // For reference errors and type errors, this almost always\n // means the programmer made a mistake, so log them after just\n // 100ms\n // otherwise, wait 2 seconds to see if they get handled\n matchWhitelist(err, DEFAULT_WHITELIST)\n ? 100\n : 2000\n ),\n logged: false\n };\n }\n };\n function onUnhandled(id) {\n if (\n options.allRejections ||\n matchWhitelist(\n rejections[id].error,\n options.whitelist || DEFAULT_WHITELIST\n )\n ) {\n rejections[id].displayId = displayId++;\n if (options.onUnhandled) {\n rejections[id].logged = true;\n options.onUnhandled(\n rejections[id].displayId,\n rejections[id].error\n );\n } else {\n rejections[id].logged = true;\n logError(\n rejections[id].displayId,\n rejections[id].error\n );\n }\n }\n }\n function onHandled(id) {\n if (rejections[id].logged) {\n if (options.onHandled) {\n options.onHandled(rejections[id].displayId, rejections[id].error);\n } else if (!rejections[id].onUnhandled) {\n console.warn(\n 'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'\n );\n console.warn(\n ' This means you can ignore any previous messages of the form \"Possible Unhandled Promise Rejection\" with id ' +\n rejections[id].displayId + '.'\n );\n }\n }\n }\n}\n\nfunction logError(id, error) {\n console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');\n var errStr = (error && (error.stack || error)) + '';\n errStr.split('\\n').forEach(function (line) {\n console.warn(' ' + line);\n });\n}\n\nfunction matchWhitelist(error, list) {\n return list.some(function (cls) {\n return error instanceof cls;\n });\n}","import type { ResolvedConfig } from './types';\n\nexport interface UserContext {\n id?: string;\n email?: string;\n [k: string]: any;\n}\n\ninterface CleanupHooks {\n removeErrorHandler?: () => void;\n removeRejectionHandler?: () => void;\n restoreConsoleError?: () => void;\n restoreConsoleWarn?: () => void;\n}\n\ninterface SdkState {\n initialized: boolean;\n config: ResolvedConfig | null;\n sessionId: string | null;\n deviceId: string | null;\n user: UserContext | null;\n cleanup: CleanupHooks;\n}\n\nconst STATE_KEY = '__fixprompt_rn_state__';\n\nfunction globalScope(): any {\n if (typeof globalThis !== 'undefined') return globalThis;\n return {};\n}\n\nexport function getState(): SdkState {\n const g = globalScope();\n if (!g[STATE_KEY]) {\n g[STATE_KEY] = {\n initialized: false,\n config: null,\n sessionId: null,\n deviceId: null,\n user: null,\n cleanup: {},\n } satisfies SdkState;\n }\n return g[STATE_KEY] as SdkState;\n}\n\nexport function resetStateForTests(): void {\n const g = globalScope();\n delete g[STATE_KEY];\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\n\nconst DEVICE_KEY = '@fixprompt/device_id';\n\nfunction uuid(): string {\n if (typeof globalThis.crypto?.randomUUID === 'function') {\n return globalThis.crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * One uuid per cold start. Lives in memory; resets when the app restarts.\n */\nexport function newSessionId(): string {\n return uuid();\n}\n\n/**\n * Stable per-device uuid. Tries expo-secure-store first (keychain-backed),\n * falls back to AsyncStorage. Generated lazily on first call.\n *\n * We deliberately don't use OS-provided device IDs (IDFV/Android ID) —\n * Apple flags them on review and they reset on reinstall anyway.\n */\nexport async function getDeviceId(): Promise<string> {\n // Optional expo-secure-store path\n try {\n // dynamic import so we don't crash when SecureStore isn't installed\n const SecureStore = await tryImport<any>('expo-secure-store');\n if (SecureStore) {\n const existing = await SecureStore.getItemAsync('fixprompt_device_id');\n if (existing) return existing;\n const fresh = uuid();\n await SecureStore.setItemAsync('fixprompt_device_id', fresh);\n return fresh;\n }\n } catch {\n // ignore — fall through to AsyncStorage\n }\n\n try {\n const existing = await AsyncStorage.getItem(DEVICE_KEY);\n if (existing) return existing;\n const fresh = uuid();\n await AsyncStorage.setItem(DEVICE_KEY, fresh);\n return fresh;\n } catch {\n // Final fallback — in-memory only (lost on reinstall)\n return uuid();\n }\n}\n\nasync function tryImport<T>(spec: string): Promise<T | null> {\n try {\n // require keeps Metro bundler quiet when the package isn't installed\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(spec) as T;\n } catch {\n return null;\n }\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport type { EventPayload } from './types';\n\nconst STORAGE_KEY = '@fixprompt/buffer';\nconst MAX_BUFFER = 200;\nconst MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;\n\ninterface BufferedEvent {\n ts: number;\n payload: EventPayload;\n}\n\n/**\n * In-memory ring buffer with AsyncStorage persistence.\n *\n * Events accumulate when the broker is unreachable (network error / 5xx /\n * timeout). On the next successful send, the whole buffer drains in order.\n * On cold start, any persisted buffer from a prior crash is replayed.\n */\nclass OfflineBuffer {\n private items: BufferedEvent[] = [];\n private loaded = false;\n private persistTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Load the persisted buffer once, on first use. */\n async load(): Promise<void> {\n if (this.loaded) return;\n this.loaded = true;\n try {\n const raw = await AsyncStorage.getItem(STORAGE_KEY);\n if (!raw) return;\n const parsed = JSON.parse(raw) as BufferedEvent[];\n const cutoff = Date.now() - MAX_AGE_MS;\n this.items = parsed.filter((e) => e?.ts > cutoff).slice(-MAX_BUFFER);\n } catch {\n this.items = [];\n }\n }\n\n push(payload: EventPayload): void {\n this.items.push({ ts: Date.now(), payload });\n if (this.items.length > MAX_BUFFER) this.items.shift();\n this.schedulePersist();\n }\n\n async drain(): Promise<EventPayload[]> {\n if (!this.loaded) await this.load();\n const out = this.items.map((e) => e.payload);\n this.items = [];\n this.schedulePersist();\n return out;\n }\n\n size(): number {\n return this.items.length;\n }\n\n private schedulePersist() {\n if (this.persistTimer) return;\n this.persistTimer = setTimeout(async () => {\n this.persistTimer = null;\n try {\n await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(this.items));\n } catch {\n // swallow — buffer survives in memory at least\n }\n }, 500);\n }\n\n /** Tests only. */\n _resetForTests(): void {\n this.items = [];\n this.loaded = false;\n if (this.persistTimer) {\n clearTimeout(this.persistTimer);\n this.persistTimer = null;\n }\n }\n}\n\nexport const offlineBuffer = new OfflineBuffer();\n","import { Platform } from 'react-native';\n\nexport interface DeviceAttrs {\n platform: string; // 'ios' | 'android' | 'web' | 'windows' | 'macos'\n os_version: string;\n /** RN runtime version (Hermes / JSC). Used for triage. */\n rn_version?: string;\n}\n\nexport function getDeviceAttrs(): DeviceAttrs {\n return {\n platform: String(Platform.OS),\n os_version: String((Platform as any).Version ?? 'unknown'),\n rn_version: (Platform as any).constants?.reactNativeVersion\n ? Object.values((Platform as any).constants.reactNativeVersion).join('.')\n : undefined,\n };\n}\n","export const SDK_NAME = '@fixprompt/react-native';\nexport const SDK_VERSION = '0.0.1';\n","import type { EventPayload, ResolvedConfig } from './types';\nimport { offlineBuffer } from './buffer';\nimport { getState } from './state';\nimport { getDeviceAttrs } from './device';\nimport { SDK_NAME, SDK_VERSION } from './version';\n\nconst REQUEST_TIMEOUT_MS = 8_000;\n\n/**\n * Sends one event. On network failure (timeout / 5xx / no-network) the event\n * gets buffered; the buffer drains on the next successful send.\n *\n * Never throws — RN apps don't want their event loop killed by a logger.\n */\nexport function sendEvent(\n config: ResolvedConfig,\n payload: Omit<EventPayload, 'service' | 'app' | 'env' | 'attrs'> & {\n attrs?: Record<string, any>;\n service?: string;\n app?: string;\n env?: string;\n },\n): void {\n const state = getState();\n\n const event: EventPayload = {\n service: payload.service ?? config.service,\n app: payload.app ?? config.app,\n env: payload.env ?? config.env,\n level: payload.level,\n message: payload.message,\n stack: payload.stack,\n attrs: {\n ...(payload.attrs ?? {}),\n ...getDeviceAttrs(),\n sdk: SDK_NAME,\n sdk_version: SDK_VERSION,\n release: config.release,\n session_id: state.sessionId,\n device_id: state.deviceId,\n user_id: state.user?.id,\n user_email: state.user?.email,\n },\n synthetic: payload.synthetic,\n };\n\n // Strip undefined attrs (broker accepts strings/numbers, not nulls/undef)\n for (const k of Object.keys(event.attrs)) {\n if (event.attrs[k] === undefined || event.attrs[k] === null) {\n delete event.attrs[k];\n }\n }\n\n void postOrBuffer(config, event);\n}\n\nasync function postOrBuffer(\n config: ResolvedConfig,\n event: EventPayload,\n): Promise<void> {\n // Always drain the buffer first so order is preserved.\n if (!(await tryPost(config, event, /* throwOnFail */ true))) {\n offlineBuffer.push(event);\n return;\n }\n\n // Successfully delivered this one — try to drain any backlog too.\n if (offlineBuffer.size() === 0) return;\n const queued = await offlineBuffer.drain();\n for (const buffered of queued) {\n if (!(await tryPost(config, buffered, true))) {\n // Re-buffer the rest including this one\n offlineBuffer.push(buffered);\n for (let i = queued.indexOf(buffered) + 1; i < queued.length; i++) {\n offlineBuffer.push(queued[i]);\n }\n return;\n }\n }\n}\n\nasync function tryPost(\n config: ResolvedConfig,\n event: EventPayload,\n throwOnFail: boolean,\n): Promise<boolean> {\n try {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), REQUEST_TIMEOUT_MS);\n try {\n const res = await fetch(`${config.endpoint.replace(/\\/$/, '')}/ingest/log`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-loghub-source': config.source,\n 'x-loghub-key': config.projectKey,\n },\n body: JSON.stringify(event),\n signal: ctrl.signal,\n });\n // 4xx → bug on our side; drop, don't buffer\n if (res.status >= 400 && res.status < 500) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] ${res.status} from broker — dropping event`);\n }\n return true; // \"delivered\" in the sense that we won't re-try\n }\n return res.ok;\n } finally {\n clearTimeout(timer);\n }\n } catch (err) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] transport error: ${(err as Error).message}`);\n }\n return false;\n }\n}\n","import { sendEvent } from './transport';\nimport type { ResolvedConfig } from './types';\n\n/**\n * Returns the project's user-code stack frame (skips node_modules and the\n * SDK itself). Falls back to the raw stack.\n */\nfunction topStackFrame(stack: string | undefined): string {\n if (!stack) return '';\n for (const raw of stack.split('\\n')) {\n const line = raw.trim();\n if (!line) continue;\n if (line.startsWith('Error')) continue;\n if (/node_modules|@fixprompt/.test(line)) continue;\n return line.slice(0, 200);\n }\n return stack.split('\\n')[0]?.slice(0, 200) ?? '';\n}\n\nexport function installGlobalErrorHandler(config: ResolvedConfig): () => void {\n // ErrorUtils is a React Native global; not present in plain Node tests.\n const ErrorUtils: any = (globalThis as any).ErrorUtils;\n if (!ErrorUtils?.setGlobalHandler) {\n return () => undefined;\n }\n\n const previous = ErrorUtils.getGlobalHandler?.();\n\n const handler = (error: Error, isFatal?: boolean) => {\n try {\n sendEvent(config, {\n level: isFatal ? 'error' : 'warn',\n message: error?.message ?? 'Uncaught error',\n stack: typeof error?.stack === 'string' ? error.stack : undefined,\n attrs: {\n kind: 'rn.globalError',\n severity: isFatal ? 'critical' : 'error',\n error_name: error?.name,\n top_frame: topStackFrame(error?.stack),\n fatal: !!isFatal,\n },\n });\n } catch {\n // never let logger crash propagate\n }\n previous?.(error, isFatal);\n };\n\n ErrorUtils.setGlobalHandler(handler);\n\n return () => {\n if (previous) ErrorUtils.setGlobalHandler(previous);\n };\n}\n\n/**\n * Hook unhandled-promise-rejection tracking. Uses the bundled\n * `promise/setimmediate/rejection-tracking` module that ships with RN.\n */\nexport function installRejectionHandler(config: ResolvedConfig): () => void {\n let tracking: any;\n try {\n // RN's bundled polyfill — present on every RN runtime.\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n tracking = require('promise/setimmediate/rejection-tracking');\n } catch {\n return () => undefined;\n }\n\n tracking.enable({\n allRejections: true,\n onUnhandled: (id: string, error: unknown) => {\n try {\n const isErr = error instanceof Error;\n sendEvent(config, {\n level: 'error',\n message: isErr ? error.message : safeJson(error),\n stack: isErr && typeof error.stack === 'string' ? error.stack : undefined,\n attrs: {\n kind: 'rn.unhandledrejection',\n severity: 'error',\n error_name: isErr ? error.name : typeof error,\n top_frame: isErr ? topStackFrame(error.stack) : '',\n },\n });\n } catch {\n // ignore\n }\n },\n onHandled: () => undefined,\n });\n\n return () => {\n try {\n tracking.disable();\n } catch {\n // ignore\n }\n };\n}\n\nfunction safeJson(v: unknown): string {\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n}\n","import { sendEvent } from './transport';\nimport type { ResolvedConfig } from './types';\n\nfunction shouldCapture(args: any[], patterns: RegExp[]): boolean {\n if (patterns.length === 0) return true; // empty list = capture everything\n const first = typeof args[0] === 'string' ? args[0] : '';\n return patterns.some((re) => re.test(first));\n}\n\nfunction stringify(args: any[]): { message: string; stack?: string } {\n const errArg = args.find((a) => a instanceof Error) as Error | undefined;\n const message = args\n .map((a) => {\n if (a instanceof Error) return a.message;\n if (typeof a === 'string') return a;\n try {\n return JSON.stringify(a);\n } catch {\n return String(a);\n }\n })\n .join(' ')\n .slice(0, 4000);\n return {\n message,\n stack: errArg && typeof errArg.stack === 'string' ? errArg.stack : undefined,\n };\n}\n\n/**\n * Wrap console.error so tagged calls forward to the broker as warning-severity\n * events. The original console.error still runs (so RedBox / Metro logs still\n * show up).\n *\n * Pattern is intentional — ProofPix's existing log lines look like\n * `console.error('[Analytics] tracking failure', err)`. Devs prefix their\n * intentional captures and the broker only sees tagged ones.\n */\nexport function patchConsoleError(config: ResolvedConfig): () => void {\n const original = console.error.bind(console);\n console.error = (...args: any[]) => {\n try {\n if (shouldCapture(args, config.captureTags)) {\n const { message, stack } = stringify(args);\n sendEvent(config, {\n level: 'warn',\n message,\n stack,\n attrs: {\n kind: 'console.error',\n severity: 'warning',\n },\n });\n }\n } catch {\n // never block user logs\n }\n return original(...args);\n };\n return () => {\n console.error = original;\n };\n}\n\nexport function patchConsoleWarn(config: ResolvedConfig): () => void {\n const original = console.warn.bind(console);\n console.warn = (...args: any[]) => {\n try {\n if (shouldCapture(args, config.captureTags)) {\n const { message, stack } = stringify(args);\n sendEvent(config, {\n level: 'warn',\n message,\n stack,\n attrs: {\n kind: 'console.warn',\n severity: 'warning',\n },\n });\n }\n } catch {\n // never block\n }\n return original(...args);\n };\n return () => {\n console.warn = original;\n };\n}\n","import { getState, type UserContext } from './state';\nimport { newSessionId, getDeviceId } from './session';\nimport { installGlobalErrorHandler, installRejectionHandler } from './handlers';\nimport { patchConsoleError, patchConsoleWarn } from './console';\nimport { sendEvent } from './transport';\nimport { offlineBuffer } from './buffer';\nimport type { InitOptions, ResolvedConfig } from './types';\n\nconst DEFAULT_ENDPOINT = 'https://geosloghub-production.up.railway.app';\n\nfunction resolveConfig(opts: InitOptions): ResolvedConfig {\n if (!opts?.projectKey) throw new Error('initFixPrompt: projectKey is required');\n if (!opts?.source) throw new Error('initFixPrompt: source is required');\n if (!opts?.service) throw new Error('initFixPrompt: service is required');\n if (!opts?.app) throw new Error('initFixPrompt: app is required');\n\n return {\n projectKey: opts.projectKey,\n source: opts.source,\n endpoint: (opts.endpoint ?? DEFAULT_ENDPOINT).replace(/\\/$/, ''),\n service: opts.service,\n app: opts.app,\n env: opts.env ?? 'prod',\n release: opts.release ?? null,\n captureTags: opts.captureTags ?? [],\n patchConsoleWarn: opts.patchConsoleWarn ?? false,\n patchConsoleError: opts.patchConsoleError ?? true,\n debug: opts.debug ?? false,\n };\n}\n\nexport function initFixPrompt(opts: InitOptions): void {\n const state = getState();\n if (state.initialized) {\n if (opts?.debug) {\n // eslint-disable-next-line no-console\n console.warn('[fixprompt] already initialized — call ignored');\n }\n return;\n }\n\n const config = resolveConfig(opts);\n state.config = config;\n state.sessionId = newSessionId();\n\n state.cleanup.removeErrorHandler = installGlobalErrorHandler(config);\n state.cleanup.removeRejectionHandler = installRejectionHandler(config);\n if (config.patchConsoleError) {\n state.cleanup.restoreConsoleError = patchConsoleError(config);\n }\n if (config.patchConsoleWarn) {\n state.cleanup.restoreConsoleWarn = patchConsoleWarn(config);\n }\n\n state.initialized = true;\n\n // Resolve device id + drain any pre-init buffer, async.\n void (async () => {\n try {\n state.deviceId = await getDeviceId();\n await offlineBuffer.load();\n if (offlineBuffer.size() > 0) {\n // Triggers a drain via the transport's natural retry path.\n const items = await offlineBuffer.drain();\n for (const ev of items) {\n // Re-buffer if delivery still fails — transport handles it\n offlineBuffer.push(ev);\n }\n // Kick a drain attempt\n sendEvent(config, {\n level: 'debug',\n message: '[fixprompt] resumed from offline buffer',\n attrs: { kind: 'sdk.startup', buffered: items.length },\n });\n }\n } catch (err) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] init async setup failed: ${(err as Error).message}`);\n }\n }\n })();\n\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.log('[fixprompt] initialized', {\n endpoint: config.endpoint,\n service: config.service,\n env: config.env,\n session_id: state.sessionId,\n });\n }\n}\n\nexport function captureException(\n err: unknown,\n options: { synthetic?: boolean; attrs?: Record<string, any> } = {},\n): void {\n const state = getState();\n if (!state.initialized || !state.config) return;\n const isErr = err instanceof Error;\n sendEvent(state.config, {\n level: 'error',\n message: isErr ? err.message : String(err),\n stack: isErr && typeof err.stack === 'string' ? err.stack : undefined,\n attrs: {\n kind: 'captureException',\n severity: 'error',\n error_name: isErr ? err.name : typeof err,\n ...(options.attrs ?? {}),\n },\n synthetic: options.synthetic === true,\n });\n}\n\nexport function setUser(user: UserContext | null): void {\n const state = getState();\n state.user = user;\n}\n\n/** Tests + HMR only. Not part of the supported API. @internal */\nexport function _resetForTests(): void {\n const state = getState();\n state.cleanup.removeErrorHandler?.();\n state.cleanup.removeRejectionHandler?.();\n state.cleanup.restoreConsoleError?.();\n state.cleanup.restoreConsoleWarn?.();\n state.initialized = false;\n state.config = null;\n state.sessionId = null;\n state.deviceId = null;\n state.user = null;\n state.cleanup = {};\n}\n"],"mappings":";;;;;;;;;;;;AAAA;AAAA;AAAA;AAIA,aAAS,OAAO;AAAA,IAAC;AAmBjB,QAAI,aAAa;AACjB,QAAI,WAAW,CAAC;AAChB,aAAS,QAAQ,KAAK;AACpB,UAAI;AACF,eAAO,IAAI;AAAA,MACb,SAAS,IAAI;AACX,qBAAa;AACb,eAAO;AAAA,MACT;AAAA,IACF;AAEA,aAAS,WAAW,IAAI,GAAG;AACzB,UAAI;AACF,eAAO,GAAG,CAAC;AAAA,MACb,SAAS,IAAI;AACX,qBAAa;AACb,eAAO;AAAA,MACT;AAAA,IACF;AACA,aAAS,WAAW,IAAI,GAAG,GAAG;AAC5B,UAAI;AACF,WAAG,GAAG,CAAC;AAAA,MACT,SAAS,IAAI;AACX,qBAAa;AACb,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,UAAUA;AAEjB,aAASA,SAAQ,IAAI;AACnB,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,UAAU,sCAAsC;AAAA,MAC5D;AACA,UAAI,OAAO,OAAO,YAAY;AAC5B,cAAM,IAAI,UAAU,kDAAmD;AAAA,MACzE;AACA,WAAK,KAAK;AACV,WAAK,KAAK;AACV,WAAK,KAAK;AACV,WAAK,KAAK;AACV,UAAI,OAAO,KAAM;AACjB,gBAAU,IAAI,IAAI;AAAA,IACpB;AACA,IAAAA,SAAQ,KAAK;AACb,IAAAA,SAAQ,KAAK;AACb,IAAAA,SAAQ,KAAK;AAEb,IAAAA,SAAQ,UAAU,OAAO,SAAS,aAAa,YAAY;AACzD,UAAI,KAAK,gBAAgBA,UAAS;AAChC,eAAO,SAAS,MAAM,aAAa,UAAU;AAAA,MAC/C;AACA,UAAI,MAAM,IAAIA,SAAQ,IAAI;AAC1B,aAAO,MAAM,IAAI,QAAQ,aAAa,YAAY,GAAG,CAAC;AACtD,aAAO;AAAA,IACT;AAEA,aAAS,SAAS,MAAM,aAAa,YAAY;AAC/C,aAAO,IAAI,KAAK,YAAY,SAAUC,UAASC,SAAQ;AACrD,YAAI,MAAM,IAAIF,SAAQ,IAAI;AAC1B,YAAI,KAAKC,UAASC,OAAM;AACxB,eAAO,MAAM,IAAI,QAAQ,aAAa,YAAY,GAAG,CAAC;AAAA,MACxD,CAAC;AAAA,IACH;AACA,aAAS,OAAO,MAAM,UAAU;AAC9B,aAAO,KAAK,OAAO,GAAG;AACpB,eAAO,KAAK;AAAA,MACd;AACA,UAAIF,SAAQ,IAAI;AACd,QAAAA,SAAQ,GAAG,IAAI;AAAA,MACjB;AACA,UAAI,KAAK,OAAO,GAAG;AACjB,YAAI,KAAK,OAAO,GAAG;AACjB,eAAK,KAAK;AACV,eAAK,KAAK;AACV;AAAA,QACF;AACA,YAAI,KAAK,OAAO,GAAG;AACjB,eAAK,KAAK;AACV,eAAK,KAAK,CAAC,KAAK,IAAI,QAAQ;AAC5B;AAAA,QACF;AACA,aAAK,GAAG,KAAK,QAAQ;AACrB;AAAA,MACF;AACA,qBAAe,MAAM,QAAQ;AAAA,IAC/B;AAEA,aAAS,eAAe,MAAM,UAAU;AACtC,mBAAa,WAAW;AACtB,YAAI,KAAK,KAAK,OAAO,IAAI,SAAS,cAAc,SAAS;AACzD,YAAI,OAAO,MAAM;AACf,cAAI,KAAK,OAAO,GAAG;AACjB,oBAAQ,SAAS,SAAS,KAAK,EAAE;AAAA,UACnC,OAAO;AACL,mBAAO,SAAS,SAAS,KAAK,EAAE;AAAA,UAClC;AACA;AAAA,QACF;AACA,YAAI,MAAM,WAAW,IAAI,KAAK,EAAE;AAChC,YAAI,QAAQ,UAAU;AACpB,iBAAO,SAAS,SAAS,UAAU;AAAA,QACrC,OAAO;AACL,kBAAQ,SAAS,SAAS,GAAG;AAAA,QAC/B;AAAA,MACF,CAAC;AAAA,IACH;AACA,aAAS,QAAQ,MAAM,UAAU;AAE/B,UAAI,aAAa,MAAM;AACrB,eAAO;AAAA,UACL;AAAA,UACA,IAAI,UAAU,2CAA2C;AAAA,QAC3D;AAAA,MACF;AACA,UACE,aACC,OAAO,aAAa,YAAY,OAAO,aAAa,aACrD;AACA,YAAI,OAAO,QAAQ,QAAQ;AAC3B,YAAI,SAAS,UAAU;AACrB,iBAAO,OAAO,MAAM,UAAU;AAAA,QAChC;AACA,YACE,SAAS,KAAK,QACd,oBAAoBA,UACpB;AACA,eAAK,KAAK;AACV,eAAK,KAAK;AACV,iBAAO,IAAI;AACX;AAAA,QACF,WAAW,OAAO,SAAS,YAAY;AACrC,oBAAU,KAAK,KAAK,QAAQ,GAAG,IAAI;AACnC;AAAA,QACF;AAAA,MACF;AACA,WAAK,KAAK;AACV,WAAK,KAAK;AACV,aAAO,IAAI;AAAA,IACb;AAEA,aAAS,OAAO,MAAM,UAAU;AAC9B,WAAK,KAAK;AACV,WAAK,KAAK;AACV,UAAIA,SAAQ,IAAI;AACd,QAAAA,SAAQ,GAAG,MAAM,QAAQ;AAAA,MAC3B;AACA,aAAO,IAAI;AAAA,IACb;AACA,aAAS,OAAO,MAAM;AACpB,UAAI,KAAK,OAAO,GAAG;AACjB,eAAO,MAAM,KAAK,EAAE;AACpB,aAAK,KAAK;AAAA,MACZ;AACA,UAAI,KAAK,OAAO,GAAG;AACjB,iBAAS,IAAI,GAAG,IAAI,KAAK,GAAG,QAAQ,KAAK;AACvC,iBAAO,MAAM,KAAK,GAAG,CAAC,CAAC;AAAA,QACzB;AACA,aAAK,KAAK;AAAA,MACZ;AAAA,IACF;AAEA,aAAS,QAAQ,aAAa,YAAY,SAAQ;AAChD,WAAK,cAAc,OAAO,gBAAgB,aAAa,cAAc;AACrE,WAAK,aAAa,OAAO,eAAe,aAAa,aAAa;AAClE,WAAK,UAAU;AAAA,IACjB;AAQA,aAAS,UAAU,IAAI,SAAS;AAC9B,UAAI,OAAO;AACX,UAAI,MAAM,WAAW,IAAI,SAAU,OAAO;AACxC,YAAI,KAAM;AACV,eAAO;AACP,gBAAQ,SAAS,KAAK;AAAA,MACxB,GAAG,SAAU,QAAQ;AACnB,YAAI,KAAM;AACV,eAAO;AACP,eAAO,SAAS,MAAM;AAAA,MACxB,CAAC;AACD,UAAI,CAAC,QAAQ,QAAQ,UAAU;AAC7B,eAAO;AACP,eAAO,SAAS,UAAU;AAAA,MAC5B;AAAA,IACF;AAAA;AAAA;;;ACpNA;AAAA;AAAA;AAEA,QAAIG,WAAU;AAEd,QAAI,oBAAoB;AAAA,MACtB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,QAAI,UAAU;AACd,YAAQ,UAAU;AAClB,aAAS,UAAU;AACjB,gBAAU;AACV,MAAAA,SAAQ,KAAK;AACb,MAAAA,SAAQ,KAAK;AAAA,IACf;AAEA,YAAQ,SAAS;AACjB,aAAS,OAAO,SAAS;AACvB,gBAAU,WAAW,CAAC;AACtB,UAAI,QAAS,SAAQ;AACrB,gBAAU;AACV,UAAI,KAAK;AACT,UAAI,YAAY;AAChB,UAAI,aAAa,CAAC;AAClB,MAAAA,SAAQ,KAAK,SAAU,SAAS;AAC9B,YACE,QAAQ,OAAO;AAAA,QACf,WAAW,QAAQ,EAAE,GACrB;AACA,cAAI,WAAW,QAAQ,EAAE,EAAE,QAAQ;AACjC,sBAAU,QAAQ,EAAE;AAAA,UACtB,OAAO;AACL,yBAAa,WAAW,QAAQ,EAAE,EAAE,OAAO;AAAA,UAC7C;AACA,iBAAO,WAAW,QAAQ,EAAE;AAAA,QAC9B;AAAA,MACF;AACA,MAAAA,SAAQ,KAAK,SAAU,SAAS,KAAK;AACnC,YAAI,QAAQ,OAAO,GAAG;AACpB,kBAAQ,KAAK;AACb,qBAAW,QAAQ,EAAE,IAAI;AAAA,YACvB,WAAW;AAAA,YACX,OAAO;AAAA,YACP,SAAS;AAAA,cACP,YAAY,KAAK,MAAM,QAAQ,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,cAKjC,eAAe,KAAK,iBAAiB,IACjC,MACA;AAAA,YACN;AAAA,YACA,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AACA,eAAS,YAAYC,KAAI;AACvB,YACE,QAAQ,iBACR;AAAA,UACE,WAAWA,GAAE,EAAE;AAAA,UACf,QAAQ,aAAa;AAAA,QACvB,GACA;AACA,qBAAWA,GAAE,EAAE,YAAY;AAC3B,cAAI,QAAQ,aAAa;AACvB,uBAAWA,GAAE,EAAE,SAAS;AACxB,oBAAQ;AAAA,cACN,WAAWA,GAAE,EAAE;AAAA,cACf,WAAWA,GAAE,EAAE;AAAA,YACjB;AAAA,UACF,OAAO;AACL,uBAAWA,GAAE,EAAE,SAAS;AACxB;AAAA,cACE,WAAWA,GAAE,EAAE;AAAA,cACf,WAAWA,GAAE,EAAE;AAAA,YACjB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AACA,eAAS,UAAUA,KAAI;AACrB,YAAI,WAAWA,GAAE,EAAE,QAAQ;AACzB,cAAI,QAAQ,WAAW;AACrB,oBAAQ,UAAU,WAAWA,GAAE,EAAE,WAAW,WAAWA,GAAE,EAAE,KAAK;AAAA,UAClE,WAAW,CAAC,WAAWA,GAAE,EAAE,aAAa;AACtC,oBAAQ;AAAA,cACN,oCAAoC,WAAWA,GAAE,EAAE,YAAY;AAAA,YACjE;AACA,oBAAQ;AAAA,cACN,kHACA,WAAWA,GAAE,EAAE,YAAY;AAAA,YAC7B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,aAAS,SAAS,IAAI,OAAO;AAC3B,cAAQ,KAAK,+CAA+C,KAAK,IAAI;AACrE,UAAI,UAAU,UAAU,MAAM,SAAS,UAAU;AACjD,aAAO,MAAM,IAAI,EAAE,QAAQ,SAAU,MAAM;AACzC,gBAAQ,KAAK,OAAO,IAAI;AAAA,MAC1B,CAAC;AAAA,IACH;AAEA,aAAS,eAAe,OAAO,MAAM;AACnC,aAAO,KAAK,KAAK,SAAU,KAAK;AAC9B,eAAO,iBAAiB;AAAA,MAC1B,CAAC;AAAA,IACH;AAAA;AAAA;;;ACxFA,IAAM,YAAY;AAElB,SAAS,cAAmB;AAC1B,MAAI,OAAO,eAAe,YAAa,QAAO;AAC9C,SAAO,CAAC;AACV;AAEO,SAAS,WAAqB;AACnC,QAAM,IAAI,YAAY;AACtB,MAAI,CAAC,EAAE,SAAS,GAAG;AACjB,MAAE,SAAS,IAAI;AAAA,MACb,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS,CAAC;AAAA,IACZ;AAAA,EACF;AACA,SAAO,EAAE,SAAS;AACpB;;;AC5CA,OAAO,kBAAkB;AAEzB,IAAM,aAAa;AAEnB,SAAS,OAAe;AACtB,MAAI,OAAO,WAAW,QAAQ,eAAe,YAAY;AACvD,WAAO,WAAW,OAAO,WAAW;AAAA,EACtC;AACA,SAAO,uCAAuC,QAAQ,SAAS,CAAC,MAAM;AACpE,UAAM,IAAK,KAAK,OAAO,IAAI,KAAM;AACjC,UAAM,IAAI,MAAM,MAAM,IAAK,IAAI,IAAO;AACtC,WAAO,EAAE,SAAS,EAAE;AAAA,EACtB,CAAC;AACH;AAKO,SAAS,eAAuB;AACrC,SAAO,KAAK;AACd;AASA,eAAsB,cAA+B;AAEnD,MAAI;AAEF,UAAM,cAAc,MAAM,UAAe,mBAAmB;AAC5D,QAAI,aAAa;AACf,YAAM,WAAW,MAAM,YAAY,aAAa,qBAAqB;AACrE,UAAI,SAAU,QAAO;AACrB,YAAM,QAAQ,KAAK;AACnB,YAAM,YAAY,aAAa,uBAAuB,KAAK;AAC3D,aAAO;AAAA,IACT;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,UAAM,WAAW,MAAM,aAAa,QAAQ,UAAU;AACtD,QAAI,SAAU,QAAO;AACrB,UAAM,QAAQ,KAAK;AACnB,UAAM,aAAa,QAAQ,YAAY,KAAK;AAC5C,WAAO;AAAA,EACT,QAAQ;AAEN,WAAO,KAAK;AAAA,EACd;AACF;AAEA,eAAe,UAAa,MAAiC;AAC3D,MAAI;AAGF,WAAO,UAAQ,IAAI;AAAA,EACrB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ACjEA,OAAOC,mBAAkB;AAGzB,IAAM,cAAc;AACpB,IAAM,aAAa;AACnB,IAAM,aAAa,IAAI,KAAK,KAAK,KAAK;AActC,IAAM,gBAAN,MAAoB;AAAA,EAApB;AACE,SAAQ,QAAyB,CAAC;AAClC,SAAQ,SAAS;AACjB,SAAQ,eAAqD;AAAA;AAAA;AAAA,EAG7D,MAAM,OAAsB;AAC1B,QAAI,KAAK,OAAQ;AACjB,SAAK,SAAS;AACd,QAAI;AACF,YAAM,MAAM,MAAMA,cAAa,QAAQ,WAAW;AAClD,UAAI,CAAC,IAAK;AACV,YAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,YAAM,SAAS,KAAK,IAAI,IAAI;AAC5B,WAAK,QAAQ,OAAO,OAAO,CAAC,MAAM,GAAG,KAAK,MAAM,EAAE,MAAM,CAAC,UAAU;AAAA,IACrE,QAAQ;AACN,WAAK,QAAQ,CAAC;AAAA,IAChB;AAAA,EACF;AAAA,EAEA,KAAK,SAA6B;AAChC,SAAK,MAAM,KAAK,EAAE,IAAI,KAAK,IAAI,GAAG,QAAQ,CAAC;AAC3C,QAAI,KAAK,MAAM,SAAS,WAAY,MAAK,MAAM,MAAM;AACrD,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,MAAM,QAAiC;AACrC,QAAI,CAAC,KAAK,OAAQ,OAAM,KAAK,KAAK;AAClC,UAAM,MAAM,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO;AAC3C,SAAK,QAAQ,CAAC;AACd,SAAK,gBAAgB;AACrB,WAAO;AAAA,EACT;AAAA,EAEA,OAAe;AACb,WAAO,KAAK,MAAM;AAAA,EACpB;AAAA,EAEQ,kBAAkB;AACxB,QAAI,KAAK,aAAc;AACvB,SAAK,eAAe,WAAW,YAAY;AACzC,WAAK,eAAe;AACpB,UAAI;AACF,cAAMA,cAAa,QAAQ,aAAa,KAAK,UAAU,KAAK,KAAK,CAAC;AAAA,MACpE,QAAQ;AAAA,MAER;AAAA,IACF,GAAG,GAAG;AAAA,EACR;AAAA;AAAA,EAGA,iBAAuB;AACrB,SAAK,QAAQ,CAAC;AACd,SAAK,SAAS;AACd,QAAI,KAAK,cAAc;AACrB,mBAAa,KAAK,YAAY;AAC9B,WAAK,eAAe;AAAA,IACtB;AAAA,EACF;AACF;AAEO,IAAM,gBAAgB,IAAI,cAAc;;;AChF/C,SAAS,gBAAgB;AASlB,SAAS,iBAA8B;AAC5C,SAAO;AAAA,IACL,UAAU,OAAO,SAAS,EAAE;AAAA,IAC5B,YAAY,OAAQ,SAAiB,WAAW,SAAS;AAAA,IACzD,YAAa,SAAiB,WAAW,qBACrC,OAAO,OAAQ,SAAiB,UAAU,kBAAkB,EAAE,KAAK,GAAG,IACtE;AAAA,EACN;AACF;;;ACjBO,IAAM,WAAW;AACjB,IAAM,cAAc;;;ACK3B,IAAM,qBAAqB;AAQpB,SAAS,UACd,QACA,SAMM;AACN,QAAM,QAAQ,SAAS;AAEvB,QAAM,QAAsB;AAAA,IAC1B,SAAS,QAAQ,WAAW,OAAO;AAAA,IACnC,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC3B,KAAK,QAAQ,OAAO,OAAO;AAAA,IAC3B,OAAO,QAAQ;AAAA,IACf,SAAS,QAAQ;AAAA,IACjB,OAAO,QAAQ;AAAA,IACf,OAAO;AAAA,MACL,GAAI,QAAQ,SAAS,CAAC;AAAA,MACtB,GAAG,eAAe;AAAA,MAClB,KAAK;AAAA,MACL,aAAa;AAAA,MACb,SAAS,OAAO;AAAA,MAChB,YAAY,MAAM;AAAA,MAClB,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM,MAAM;AAAA,MACrB,YAAY,MAAM,MAAM;AAAA,IAC1B;AAAA,IACA,WAAW,QAAQ;AAAA,EACrB;AAGA,aAAW,KAAK,OAAO,KAAK,MAAM,KAAK,GAAG;AACxC,QAAI,MAAM,MAAM,CAAC,MAAM,UAAa,MAAM,MAAM,CAAC,MAAM,MAAM;AAC3D,aAAO,MAAM,MAAM,CAAC;AAAA,IACtB;AAAA,EACF;AAEA,OAAK,aAAa,QAAQ,KAAK;AACjC;AAEA,eAAe,aACb,QACA,OACe;AAEf,MAAI,CAAE,MAAM;AAAA,IAAQ;AAAA,IAAQ;AAAA;AAAA,IAAyB;AAAA,EAAI,GAAI;AAC3D,kBAAc,KAAK,KAAK;AACxB;AAAA,EACF;AAGA,MAAI,cAAc,KAAK,MAAM,EAAG;AAChC,QAAM,SAAS,MAAM,cAAc,MAAM;AACzC,aAAW,YAAY,QAAQ;AAC7B,QAAI,CAAE,MAAM,QAAQ,QAAQ,UAAU,IAAI,GAAI;AAE5C,oBAAc,KAAK,QAAQ;AAC3B,eAAS,IAAI,OAAO,QAAQ,QAAQ,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACjE,sBAAc,KAAK,OAAO,CAAC,CAAC;AAAA,MAC9B;AACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,QACb,QACA,OACA,aACkB;AAClB,MAAI;AACF,UAAM,OAAO,IAAI,gBAAgB;AACjC,UAAM,QAAQ,WAAW,MAAM,KAAK,MAAM,GAAG,kBAAkB;AAC/D,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,GAAG,OAAO,SAAS,QAAQ,OAAO,EAAE,CAAC,eAAe;AAAA,QAC1E,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,mBAAmB,OAAO;AAAA,UAC1B,gBAAgB,OAAO;AAAA,QACzB;AAAA,QACA,MAAM,KAAK,UAAU,KAAK;AAAA,QAC1B,QAAQ,KAAK;AAAA,MACf,CAAC;AAED,UAAI,IAAI,UAAU,OAAO,IAAI,SAAS,KAAK;AACzC,YAAI,OAAO,OAAO;AAEhB,kBAAQ,KAAK,eAAe,IAAI,MAAM,oCAA+B;AAAA,QACvE;AACA,eAAO;AAAA,MACT;AACA,aAAO,IAAI;AAAA,IACb,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF,SAAS,KAAK;AACZ,QAAI,OAAO,OAAO;AAEhB,cAAQ,KAAK,gCAAiC,IAAc,OAAO,EAAE;AAAA,IACvE;AACA,WAAO;AAAA,EACT;AACF;;;AChHA,SAAS,cAAc,OAAmC;AACxD,MAAI,CAAC,MAAO,QAAO;AACnB,aAAW,OAAO,MAAM,MAAM,IAAI,GAAG;AACnC,UAAM,OAAO,IAAI,KAAK;AACtB,QAAI,CAAC,KAAM;AACX,QAAI,KAAK,WAAW,OAAO,EAAG;AAC9B,QAAI,0BAA0B,KAAK,IAAI,EAAG;AAC1C,WAAO,KAAK,MAAM,GAAG,GAAG;AAAA,EAC1B;AACA,SAAO,MAAM,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,GAAG,GAAG,KAAK;AAChD;AAEO,SAAS,0BAA0B,QAAoC;AAE5E,QAAM,aAAmB,WAAmB;AAC5C,MAAI,CAAC,YAAY,kBAAkB;AACjC,WAAO,MAAM;AAAA,EACf;AAEA,QAAM,WAAW,WAAW,mBAAmB;AAE/C,QAAM,UAAU,CAAC,OAAc,YAAsB;AACnD,QAAI;AACF,gBAAU,QAAQ;AAAA,QAChB,OAAO,UAAU,UAAU;AAAA,QAC3B,SAAS,OAAO,WAAW;AAAA,QAC3B,OAAO,OAAO,OAAO,UAAU,WAAW,MAAM,QAAQ;AAAA,QACxD,OAAO;AAAA,UACL,MAAM;AAAA,UACN,UAAU,UAAU,aAAa;AAAA,UACjC,YAAY,OAAO;AAAA,UACnB,WAAW,cAAc,OAAO,KAAK;AAAA,UACrC,OAAO,CAAC,CAAC;AAAA,QACX;AAAA,MACF,CAAC;AAAA,IACH,QAAQ;AAAA,IAER;AACA,eAAW,OAAO,OAAO;AAAA,EAC3B;AAEA,aAAW,iBAAiB,OAAO;AAEnC,SAAO,MAAM;AACX,QAAI,SAAU,YAAW,iBAAiB,QAAQ;AAAA,EACpD;AACF;AAMO,SAAS,wBAAwB,QAAoC;AAC1E,MAAI;AACJ,MAAI;AAGF,eAAW;AAAA,EACb,QAAQ;AACN,WAAO,MAAM;AAAA,EACf;AAEA,WAAS,OAAO;AAAA,IACd,eAAe;AAAA,IACf,aAAa,CAAC,IAAY,UAAmB;AAC3C,UAAI;AACF,cAAM,QAAQ,iBAAiB;AAC/B,kBAAU,QAAQ;AAAA,UAChB,OAAO;AAAA,UACP,SAAS,QAAQ,MAAM,UAAU,SAAS,KAAK;AAAA,UAC/C,OAAO,SAAS,OAAO,MAAM,UAAU,WAAW,MAAM,QAAQ;AAAA,UAChE,OAAO;AAAA,YACL,MAAM;AAAA,YACN,UAAU;AAAA,YACV,YAAY,QAAQ,MAAM,OAAO,OAAO;AAAA,YACxC,WAAW,QAAQ,cAAc,MAAM,KAAK,IAAI;AAAA,UAClD;AAAA,QACF,CAAC;AAAA,MACH,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,IACA,WAAW,MAAM;AAAA,EACnB,CAAC;AAED,SAAO,MAAM;AACX,QAAI;AACF,eAAS,QAAQ;AAAA,IACnB,QAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEA,SAAS,SAAS,GAAoB;AACpC,MAAI;AACF,WAAO,KAAK,UAAU,CAAC;AAAA,EACzB,QAAQ;AACN,WAAO,OAAO,CAAC;AAAA,EACjB;AACF;;;ACxGA,SAAS,cAAc,MAAa,UAA6B;AAC/D,MAAI,SAAS,WAAW,EAAG,QAAO;AAClC,QAAM,QAAQ,OAAO,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,IAAI;AACtD,SAAO,SAAS,KAAK,CAAC,OAAO,GAAG,KAAK,KAAK,CAAC;AAC7C;AAEA,SAAS,UAAU,MAAkD;AACnE,QAAM,SAAS,KAAK,KAAK,CAAC,MAAM,aAAa,KAAK;AAClD,QAAM,UAAU,KACb,IAAI,CAAC,MAAM;AACV,QAAI,aAAa,MAAO,QAAO,EAAE;AACjC,QAAI,OAAO,MAAM,SAAU,QAAO;AAClC,QAAI;AACF,aAAO,KAAK,UAAU,CAAC;AAAA,IACzB,QAAQ;AACN,aAAO,OAAO,CAAC;AAAA,IACjB;AAAA,EACF,CAAC,EACA,KAAK,GAAG,EACR,MAAM,GAAG,GAAI;AAChB,SAAO;AAAA,IACL;AAAA,IACA,OAAO,UAAU,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAAA,EACrE;AACF;AAWO,SAAS,kBAAkB,QAAoC;AACpE,QAAM,WAAW,QAAQ,MAAM,KAAK,OAAO;AAC3C,UAAQ,QAAQ,IAAI,SAAgB;AAClC,QAAI;AACF,UAAI,cAAc,MAAM,OAAO,WAAW,GAAG;AAC3C,cAAM,EAAE,SAAS,MAAM,IAAI,UAAU,IAAI;AACzC,kBAAU,QAAQ;AAAA,UAChB,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,QAAQ;AAAA,IAER;AACA,WAAO,SAAS,GAAG,IAAI;AAAA,EACzB;AACA,SAAO,MAAM;AACX,YAAQ,QAAQ;AAAA,EAClB;AACF;AAEO,SAAS,iBAAiB,QAAoC;AACnE,QAAM,WAAW,QAAQ,KAAK,KAAK,OAAO;AAC1C,UAAQ,OAAO,IAAI,SAAgB;AACjC,QAAI;AACF,UAAI,cAAc,MAAM,OAAO,WAAW,GAAG;AAC3C,cAAM,EAAE,SAAS,MAAM,IAAI,UAAU,IAAI;AACzC,kBAAU,QAAQ;AAAA,UAChB,OAAO;AAAA,UACP;AAAA,UACA;AAAA,UACA,OAAO;AAAA,YACL,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,QAAQ;AAAA,IAER;AACA,WAAO,SAAS,GAAG,IAAI;AAAA,EACzB;AACA,SAAO,MAAM;AACX,YAAQ,OAAO;AAAA,EACjB;AACF;;;AChFA,IAAM,mBAAmB;AAEzB,SAAS,cAAc,MAAmC;AACxD,MAAI,CAAC,MAAM,WAAY,OAAM,IAAI,MAAM,uCAAuC;AAC9E,MAAI,CAAC,MAAM,OAAQ,OAAM,IAAI,MAAM,mCAAmC;AACtE,MAAI,CAAC,MAAM,QAAS,OAAM,IAAI,MAAM,oCAAoC;AACxE,MAAI,CAAC,MAAM,IAAK,OAAM,IAAI,MAAM,gCAAgC;AAEhE,SAAO;AAAA,IACL,YAAY,KAAK;AAAA,IACjB,QAAQ,KAAK;AAAA,IACb,WAAW,KAAK,YAAY,kBAAkB,QAAQ,OAAO,EAAE;AAAA,IAC/D,SAAS,KAAK;AAAA,IACd,KAAK,KAAK;AAAA,IACV,KAAK,KAAK,OAAO;AAAA,IACjB,SAAS,KAAK,WAAW;AAAA,IACzB,aAAa,KAAK,eAAe,CAAC;AAAA,IAClC,kBAAkB,KAAK,oBAAoB;AAAA,IAC3C,mBAAmB,KAAK,qBAAqB;AAAA,IAC7C,OAAO,KAAK,SAAS;AAAA,EACvB;AACF;AAEO,SAAS,cAAc,MAAyB;AACrD,QAAM,QAAQ,SAAS;AACvB,MAAI,MAAM,aAAa;AACrB,QAAI,MAAM,OAAO;AAEf,cAAQ,KAAK,qDAAgD;AAAA,IAC/D;AACA;AAAA,EACF;AAEA,QAAM,SAAS,cAAc,IAAI;AACjC,QAAM,SAAS;AACf,QAAM,YAAY,aAAa;AAE/B,QAAM,QAAQ,qBAAqB,0BAA0B,MAAM;AACnE,QAAM,QAAQ,yBAAyB,wBAAwB,MAAM;AACrE,MAAI,OAAO,mBAAmB;AAC5B,UAAM,QAAQ,sBAAsB,kBAAkB,MAAM;AAAA,EAC9D;AACA,MAAI,OAAO,kBAAkB;AAC3B,UAAM,QAAQ,qBAAqB,iBAAiB,MAAM;AAAA,EAC5D;AAEA,QAAM,cAAc;AAGpB,QAAM,YAAY;AAChB,QAAI;AACF,YAAM,WAAW,MAAM,YAAY;AACnC,YAAM,cAAc,KAAK;AACzB,UAAI,cAAc,KAAK,IAAI,GAAG;AAE5B,cAAM,QAAQ,MAAM,cAAc,MAAM;AACxC,mBAAW,MAAM,OAAO;AAEtB,wBAAc,KAAK,EAAE;AAAA,QACvB;AAEA,kBAAU,QAAQ;AAAA,UAChB,OAAO;AAAA,UACP,SAAS;AAAA,UACT,OAAO,EAAE,MAAM,eAAe,UAAU,MAAM,OAAO;AAAA,QACvD,CAAC;AAAA,MACH;AAAA,IACF,SAAS,KAAK;AACZ,UAAI,OAAO,OAAO;AAEhB,gBAAQ,KAAK,wCAAyC,IAAc,OAAO,EAAE;AAAA,MAC/E;AAAA,IACF;AAAA,EACF,GAAG;AAEH,MAAI,OAAO,OAAO;AAEhB,YAAQ,IAAI,2BAA2B;AAAA,MACrC,UAAU,OAAO;AAAA,MACjB,SAAS,OAAO;AAAA,MAChB,KAAK,OAAO;AAAA,MACZ,YAAY,MAAM;AAAA,IACpB,CAAC;AAAA,EACH;AACF;AAEO,SAAS,iBACd,KACA,UAAgE,CAAC,GAC3D;AACN,QAAM,QAAQ,SAAS;AACvB,MAAI,CAAC,MAAM,eAAe,CAAC,MAAM,OAAQ;AACzC,QAAM,QAAQ,eAAe;AAC7B,YAAU,MAAM,QAAQ;AAAA,IACtB,OAAO;AAAA,IACP,SAAS,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IACzC,OAAO,SAAS,OAAO,IAAI,UAAU,WAAW,IAAI,QAAQ;AAAA,IAC5D,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,YAAY,QAAQ,IAAI,OAAO,OAAO;AAAA,MACtC,GAAI,QAAQ,SAAS,CAAC;AAAA,IACxB;AAAA,IACA,WAAW,QAAQ,cAAc;AAAA,EACnC,CAAC;AACH;AAEO,SAAS,QAAQ,MAAgC;AACtD,QAAM,QAAQ,SAAS;AACvB,QAAM,OAAO;AACf;AAGO,SAAS,iBAAuB;AACrC,QAAM,QAAQ,SAAS;AACvB,QAAM,QAAQ,qBAAqB;AACnC,QAAM,QAAQ,yBAAyB;AACvC,QAAM,QAAQ,sBAAsB;AACpC,QAAM,QAAQ,qBAAqB;AACnC,QAAM,cAAc;AACpB,QAAM,SAAS;AACf,QAAM,YAAY;AAClB,QAAM,WAAW;AACjB,QAAM,OAAO;AACb,QAAM,UAAU,CAAC;AACnB;","names":["Promise","resolve","reject","Promise","id","AsyncStorage"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/promise/setimmediate/core.js","../node_modules/promise/setimmediate/rejection-tracking.js","../src/state.ts","../src/session.ts","../src/buffer.ts","../src/device.ts","../src/version.ts","../src/transport.ts","../src/handlers.ts","../src/console.ts","../src/init.ts"],"sourcesContent":["'use strict';\n\n\n\nfunction noop() {}\n\n// States:\n//\n// 0 - pending\n// 1 - fulfilled with _value\n// 2 - rejected with _value\n// 3 - adopted the state of another promise, _value\n//\n// once the state is no longer pending (0) it is immutable\n\n// All `_` prefixed properties will be reduced to `_{random number}`\n// at build time to obfuscate them and discourage their use.\n// We don't use symbols or Object.defineProperty to fully hide them\n// because the performance isn't good enough.\n\n\n// to avoid using try/catch inside critical functions, we\n// extract them to here.\nvar LAST_ERROR = null;\nvar IS_ERROR = {};\nfunction getThen(obj) {\n try {\n return obj.then;\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nfunction tryCallOne(fn, a) {\n try {\n return fn(a);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\nfunction tryCallTwo(fn, a, b) {\n try {\n fn(a, b);\n } catch (ex) {\n LAST_ERROR = ex;\n return IS_ERROR;\n }\n}\n\nmodule.exports = Promise;\n\nfunction Promise(fn) {\n if (typeof this !== 'object') {\n throw new TypeError('Promises must be constructed via new');\n }\n if (typeof fn !== 'function') {\n throw new TypeError('Promise constructor\\'s argument is not a function');\n }\n this._x = 0;\n this._y = 0;\n this._z = null;\n this._A = null;\n if (fn === noop) return;\n doResolve(fn, this);\n}\nPromise._B = null;\nPromise._C = null;\nPromise._D = noop;\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n if (this.constructor !== Promise) {\n return safeThen(this, onFulfilled, onRejected);\n }\n var res = new Promise(noop);\n handle(this, new Handler(onFulfilled, onRejected, res));\n return res;\n};\n\nfunction safeThen(self, onFulfilled, onRejected) {\n return new self.constructor(function (resolve, reject) {\n var res = new Promise(noop);\n res.then(resolve, reject);\n handle(self, new Handler(onFulfilled, onRejected, res));\n });\n}\nfunction handle(self, deferred) {\n while (self._y === 3) {\n self = self._z;\n }\n if (Promise._B) {\n Promise._B(self);\n }\n if (self._y === 0) {\n if (self._x === 0) {\n self._x = 1;\n self._A = deferred;\n return;\n }\n if (self._x === 1) {\n self._x = 2;\n self._A = [self._A, deferred];\n return;\n }\n self._A.push(deferred);\n return;\n }\n handleResolved(self, deferred);\n}\n\nfunction handleResolved(self, deferred) {\n setImmediate(function() {\n var cb = self._y === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n if (self._y === 1) {\n resolve(deferred.promise, self._z);\n } else {\n reject(deferred.promise, self._z);\n }\n return;\n }\n var ret = tryCallOne(cb, self._z);\n if (ret === IS_ERROR) {\n reject(deferred.promise, LAST_ERROR);\n } else {\n resolve(deferred.promise, ret);\n }\n });\n}\nfunction resolve(self, newValue) {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self) {\n return reject(\n self,\n new TypeError('A promise cannot be resolved with itself.')\n );\n }\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = getThen(newValue);\n if (then === IS_ERROR) {\n return reject(self, LAST_ERROR);\n }\n if (\n then === self.then &&\n newValue instanceof Promise\n ) {\n self._y = 3;\n self._z = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(then.bind(newValue), self);\n return;\n }\n }\n self._y = 1;\n self._z = newValue;\n finale(self);\n}\n\nfunction reject(self, newValue) {\n self._y = 2;\n self._z = newValue;\n if (Promise._C) {\n Promise._C(self, newValue);\n }\n finale(self);\n}\nfunction finale(self) {\n if (self._x === 1) {\n handle(self, self._A);\n self._A = null;\n }\n if (self._x === 2) {\n for (var i = 0; i < self._A.length; i++) {\n handle(self, self._A[i]);\n }\n self._A = null;\n }\n}\n\nfunction Handler(onFulfilled, onRejected, promise){\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, promise) {\n var done = false;\n var res = tryCallTwo(fn, function (value) {\n if (done) return;\n done = true;\n resolve(promise, value);\n }, function (reason) {\n if (done) return;\n done = true;\n reject(promise, reason);\n });\n if (!done && res === IS_ERROR) {\n done = true;\n reject(promise, LAST_ERROR);\n }\n}\n","'use strict';\n\nvar Promise = require('./core');\n\nvar DEFAULT_WHITELIST = [\n ReferenceError,\n TypeError,\n RangeError\n];\n\nvar enabled = false;\nexports.disable = disable;\nfunction disable() {\n enabled = false;\n Promise._B = null;\n Promise._C = null;\n}\n\nexports.enable = enable;\nfunction enable(options) {\n options = options || {};\n if (enabled) disable();\n enabled = true;\n var id = 0;\n var displayId = 0;\n var rejections = {};\n Promise._B = function (promise) {\n if (\n promise._y === 2 && // IS REJECTED\n rejections[promise._E]\n ) {\n if (rejections[promise._E].logged) {\n onHandled(promise._E);\n } else {\n clearTimeout(rejections[promise._E].timeout);\n }\n delete rejections[promise._E];\n }\n };\n Promise._C = function (promise, err) {\n if (promise._x === 0) { // not yet handled\n promise._E = id++;\n rejections[promise._E] = {\n displayId: null,\n error: err,\n timeout: setTimeout(\n onUnhandled.bind(null, promise._E),\n // For reference errors and type errors, this almost always\n // means the programmer made a mistake, so log them after just\n // 100ms\n // otherwise, wait 2 seconds to see if they get handled\n matchWhitelist(err, DEFAULT_WHITELIST)\n ? 100\n : 2000\n ),\n logged: false\n };\n }\n };\n function onUnhandled(id) {\n if (\n options.allRejections ||\n matchWhitelist(\n rejections[id].error,\n options.whitelist || DEFAULT_WHITELIST\n )\n ) {\n rejections[id].displayId = displayId++;\n if (options.onUnhandled) {\n rejections[id].logged = true;\n options.onUnhandled(\n rejections[id].displayId,\n rejections[id].error\n );\n } else {\n rejections[id].logged = true;\n logError(\n rejections[id].displayId,\n rejections[id].error\n );\n }\n }\n }\n function onHandled(id) {\n if (rejections[id].logged) {\n if (options.onHandled) {\n options.onHandled(rejections[id].displayId, rejections[id].error);\n } else if (!rejections[id].onUnhandled) {\n console.warn(\n 'Promise Rejection Handled (id: ' + rejections[id].displayId + '):'\n );\n console.warn(\n ' This means you can ignore any previous messages of the form \"Possible Unhandled Promise Rejection\" with id ' +\n rejections[id].displayId + '.'\n );\n }\n }\n }\n}\n\nfunction logError(id, error) {\n console.warn('Possible Unhandled Promise Rejection (id: ' + id + '):');\n var errStr = (error && (error.stack || error)) + '';\n errStr.split('\\n').forEach(function (line) {\n console.warn(' ' + line);\n });\n}\n\nfunction matchWhitelist(error, list) {\n return list.some(function (cls) {\n return error instanceof cls;\n });\n}","import type { ResolvedConfig } from './types';\n\nexport interface UserContext {\n id?: string;\n email?: string;\n [k: string]: any;\n}\n\ninterface CleanupHooks {\n removeErrorHandler?: () => void;\n removeRejectionHandler?: () => void;\n restoreConsoleError?: () => void;\n restoreConsoleWarn?: () => void;\n}\n\ninterface SdkState {\n initialized: boolean;\n config: ResolvedConfig | null;\n sessionId: string | null;\n deviceId: string | null;\n user: UserContext | null;\n cleanup: CleanupHooks;\n}\n\nconst STATE_KEY = '__fixprompt_rn_state__';\n\nfunction globalScope(): any {\n if (typeof globalThis !== 'undefined') return globalThis;\n return {};\n}\n\nexport function getState(): SdkState {\n const g = globalScope();\n if (!g[STATE_KEY]) {\n g[STATE_KEY] = {\n initialized: false,\n config: null,\n sessionId: null,\n deviceId: null,\n user: null,\n cleanup: {},\n } satisfies SdkState;\n }\n return g[STATE_KEY] as SdkState;\n}\n\nexport function resetStateForTests(): void {\n const g = globalScope();\n delete g[STATE_KEY];\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\n\nconst DEVICE_KEY = '@fixprompt/device_id';\n\nfunction uuid(): string {\n if (typeof globalThis.crypto?.randomUUID === 'function') {\n return globalThis.crypto.randomUUID();\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * One uuid per cold start. Lives in memory; resets when the app restarts.\n */\nexport function newSessionId(): string {\n return uuid();\n}\n\n/**\n * Stable per-device uuid. Tries expo-secure-store first (keychain-backed),\n * falls back to AsyncStorage. Generated lazily on first call.\n *\n * We deliberately don't use OS-provided device IDs (IDFV/Android ID) —\n * Apple flags them on review and they reset on reinstall anyway.\n */\nexport async function getDeviceId(): Promise<string> {\n // Optional expo-secure-store path\n try {\n // dynamic import so we don't crash when SecureStore isn't installed\n const SecureStore = await tryImport<any>('expo-secure-store');\n if (SecureStore) {\n const existing = await SecureStore.getItemAsync('fixprompt_device_id');\n if (existing) return existing;\n const fresh = uuid();\n await SecureStore.setItemAsync('fixprompt_device_id', fresh);\n return fresh;\n }\n } catch {\n // ignore — fall through to AsyncStorage\n }\n\n try {\n const existing = await AsyncStorage.getItem(DEVICE_KEY);\n if (existing) return existing;\n const fresh = uuid();\n await AsyncStorage.setItem(DEVICE_KEY, fresh);\n return fresh;\n } catch {\n // Final fallback — in-memory only (lost on reinstall)\n return uuid();\n }\n}\n\nasync function tryImport<T>(spec: string): Promise<T | null> {\n try {\n // require keeps Metro bundler quiet when the package isn't installed\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(spec) as T;\n } catch {\n return null;\n }\n}\n","import AsyncStorage from '@react-native-async-storage/async-storage';\nimport type { EventPayload } from './types';\n\nconst STORAGE_KEY = '@fixprompt/buffer';\nconst MAX_BUFFER = 200;\nconst MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;\n\ninterface BufferedEvent {\n ts: number;\n payload: EventPayload;\n}\n\n/**\n * In-memory ring buffer with AsyncStorage persistence.\n *\n * Events accumulate when the broker is unreachable (network error / 5xx /\n * timeout). On the next successful send, the whole buffer drains in order.\n * On cold start, any persisted buffer from a prior crash is replayed.\n */\nclass OfflineBuffer {\n private items: BufferedEvent[] = [];\n private loaded = false;\n private persistTimer: ReturnType<typeof setTimeout> | null = null;\n\n /** Load the persisted buffer once, on first use. */\n async load(): Promise<void> {\n if (this.loaded) return;\n this.loaded = true;\n try {\n const raw = await AsyncStorage.getItem(STORAGE_KEY);\n if (!raw) return;\n const parsed = JSON.parse(raw) as BufferedEvent[];\n const cutoff = Date.now() - MAX_AGE_MS;\n this.items = parsed.filter((e) => e?.ts > cutoff).slice(-MAX_BUFFER);\n } catch {\n this.items = [];\n }\n }\n\n push(payload: EventPayload): void {\n this.items.push({ ts: Date.now(), payload });\n if (this.items.length > MAX_BUFFER) this.items.shift();\n this.schedulePersist();\n }\n\n async drain(): Promise<EventPayload[]> {\n if (!this.loaded) await this.load();\n const out = this.items.map((e) => e.payload);\n this.items = [];\n this.schedulePersist();\n return out;\n }\n\n size(): number {\n return this.items.length;\n }\n\n private schedulePersist() {\n if (this.persistTimer) return;\n this.persistTimer = setTimeout(async () => {\n this.persistTimer = null;\n try {\n await AsyncStorage.setItem(STORAGE_KEY, JSON.stringify(this.items));\n } catch {\n // swallow — buffer survives in memory at least\n }\n }, 500);\n }\n\n /** Tests only. */\n _resetForTests(): void {\n this.items = [];\n this.loaded = false;\n if (this.persistTimer) {\n clearTimeout(this.persistTimer);\n this.persistTimer = null;\n }\n }\n}\n\nexport const offlineBuffer = new OfflineBuffer();\n","import { Platform } from 'react-native';\n\nexport interface DeviceAttrs {\n platform: string; // 'ios' | 'android' | 'web' | 'windows' | 'macos'\n os_version: string;\n /** RN runtime version (Hermes / JSC). Used for triage. */\n rn_version?: string;\n\n /** App version (e.g. \"1.2.3\") from expo-constants or native build. */\n app_version?: string;\n /** Build number (CFBundleVersion / versionCode) from expo-constants. */\n build_number?: string;\n\n /** OTA bundle id (Updates.updateId) from expo-updates, if active. */\n ota_id?: string;\n /** OTA runtime version (Updates.runtimeVersion) from expo-updates. */\n runtime_version?: string;\n /** OTA channel (Updates.channel) — e.g. \"production\", \"preview\". */\n ota_channel?: string;\n}\n\nfunction tryRequire<T = any>(spec: string): T | null {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(spec) as T;\n } catch {\n return null;\n }\n}\n\n// Cache at module load. Both packages are optional peer deps — bare RN\n// (or sideloaded Expo) projects without them get the basic platform attrs.\nconst ConstantsMod: any = tryRequire('expo-constants');\nconst Constants: any = ConstantsMod?.default ?? ConstantsMod ?? null;\nconst Updates: any = tryRequire('expo-updates');\n\nexport function getDeviceAttrs(): DeviceAttrs {\n const attrs: DeviceAttrs = {\n platform: String(Platform.OS),\n os_version: String((Platform as any).Version ?? 'unknown'),\n rn_version: (Platform as any).constants?.reactNativeVersion\n ? Object.values((Platform as any).constants.reactNativeVersion).join('.')\n : undefined,\n };\n\n // expo-constants: app version + native build number\n if (Constants) {\n const cfg = Constants.expoConfig ?? Constants.manifest ?? null;\n if (cfg?.version) attrs.app_version = String(cfg.version);\n if (cfg?.ios?.buildNumber) {\n attrs.build_number = String(cfg.ios.buildNumber);\n } else if (cfg?.android?.versionCode != null) {\n attrs.build_number = String(cfg.android.versionCode);\n }\n // Fall back to native values when running on a binary build\n if (!attrs.app_version && Constants.nativeAppVersion) {\n attrs.app_version = String(Constants.nativeAppVersion);\n }\n if (!attrs.build_number && Constants.nativeBuildVersion) {\n attrs.build_number = String(Constants.nativeBuildVersion);\n }\n }\n\n // expo-updates: OTA bundle id + channel\n if (Updates) {\n if (Updates.updateId) attrs.ota_id = String(Updates.updateId);\n if (Updates.runtimeVersion) attrs.runtime_version = String(Updates.runtimeVersion);\n if (Updates.channel) attrs.ota_channel = String(Updates.channel);\n }\n\n return attrs;\n}\n","export const SDK_NAME = '@fixprompt/react-native';\nexport const SDK_VERSION = '0.0.2';\n","import type { EventPayload, ResolvedConfig } from './types';\nimport { offlineBuffer } from './buffer';\nimport { getState } from './state';\nimport { getDeviceAttrs } from './device';\nimport { SDK_NAME, SDK_VERSION } from './version';\n\nconst REQUEST_TIMEOUT_MS = 8_000;\n\n/**\n * Sends one event. On network failure (timeout / 5xx / no-network) the event\n * gets buffered; the buffer drains on the next successful send.\n *\n * Never throws — RN apps don't want their event loop killed by a logger.\n */\nexport function sendEvent(\n config: ResolvedConfig,\n payload: Omit<EventPayload, 'service' | 'app' | 'env' | 'attrs'> & {\n attrs?: Record<string, any>;\n service?: string;\n app?: string;\n env?: string;\n },\n): void {\n const state = getState();\n\n const event: EventPayload = {\n service: payload.service ?? config.service,\n app: payload.app ?? config.app,\n env: payload.env ?? config.env,\n level: payload.level,\n message: payload.message,\n stack: payload.stack,\n attrs: {\n ...(payload.attrs ?? {}),\n ...getDeviceAttrs(),\n sdk: SDK_NAME,\n sdk_version: SDK_VERSION,\n release: config.release,\n session_id: state.sessionId,\n device_id: state.deviceId,\n user_id: state.user?.id,\n user_email: state.user?.email,\n },\n synthetic: payload.synthetic,\n };\n\n // Strip undefined attrs (broker accepts strings/numbers, not nulls/undef)\n for (const k of Object.keys(event.attrs)) {\n if (event.attrs[k] === undefined || event.attrs[k] === null) {\n delete event.attrs[k];\n }\n }\n\n void postOrBuffer(config, event);\n}\n\nasync function postOrBuffer(\n config: ResolvedConfig,\n event: EventPayload,\n): Promise<void> {\n // Always drain the buffer first so order is preserved.\n if (!(await tryPost(config, event, /* throwOnFail */ true))) {\n offlineBuffer.push(event);\n return;\n }\n\n // Successfully delivered this one — try to drain any backlog too.\n if (offlineBuffer.size() === 0) return;\n const queued = await offlineBuffer.drain();\n for (const buffered of queued) {\n if (!(await tryPost(config, buffered, true))) {\n // Re-buffer the rest including this one\n offlineBuffer.push(buffered);\n for (let i = queued.indexOf(buffered) + 1; i < queued.length; i++) {\n offlineBuffer.push(queued[i]);\n }\n return;\n }\n }\n}\n\nasync function tryPost(\n config: ResolvedConfig,\n event: EventPayload,\n throwOnFail: boolean,\n): Promise<boolean> {\n try {\n const ctrl = new AbortController();\n const timer = setTimeout(() => ctrl.abort(), REQUEST_TIMEOUT_MS);\n try {\n const res = await fetch(`${config.endpoint.replace(/\\/$/, '')}/ingest/log`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-loghub-source': config.source,\n 'x-loghub-key': config.projectKey,\n },\n body: JSON.stringify(event),\n signal: ctrl.signal,\n });\n // 4xx → bug on our side; drop, don't buffer\n if (res.status >= 400 && res.status < 500) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] ${res.status} from broker — dropping event`);\n }\n return true; // \"delivered\" in the sense that we won't re-try\n }\n return res.ok;\n } finally {\n clearTimeout(timer);\n }\n } catch (err) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] transport error: ${(err as Error).message}`);\n }\n return false;\n }\n}\n","import { sendEvent } from './transport';\nimport type { ResolvedConfig } from './types';\n\n/**\n * Returns the project's user-code stack frame (skips node_modules and the\n * SDK itself). Falls back to the raw stack.\n */\nfunction topStackFrame(stack: string | undefined): string {\n if (!stack) return '';\n for (const raw of stack.split('\\n')) {\n const line = raw.trim();\n if (!line) continue;\n if (line.startsWith('Error')) continue;\n if (/node_modules|@fixprompt/.test(line)) continue;\n return line.slice(0, 200);\n }\n return stack.split('\\n')[0]?.slice(0, 200) ?? '';\n}\n\nexport function installGlobalErrorHandler(config: ResolvedConfig): () => void {\n // ErrorUtils is a React Native global; not present in plain Node tests.\n const ErrorUtils: any = (globalThis as any).ErrorUtils;\n if (!ErrorUtils?.setGlobalHandler) {\n return () => undefined;\n }\n\n const previous = ErrorUtils.getGlobalHandler?.();\n\n const handler = (error: Error, isFatal?: boolean) => {\n try {\n sendEvent(config, {\n level: isFatal ? 'error' : 'warn',\n message: error?.message ?? 'Uncaught error',\n stack: typeof error?.stack === 'string' ? error.stack : undefined,\n attrs: {\n kind: 'rn.globalError',\n severity: isFatal ? 'critical' : 'error',\n error_name: error?.name,\n top_frame: topStackFrame(error?.stack),\n fatal: !!isFatal,\n },\n });\n } catch {\n // never let logger crash propagate\n }\n previous?.(error, isFatal);\n };\n\n ErrorUtils.setGlobalHandler(handler);\n\n return () => {\n if (previous) ErrorUtils.setGlobalHandler(previous);\n };\n}\n\n/**\n * Hook unhandled-promise-rejection tracking. Uses the bundled\n * `promise/setimmediate/rejection-tracking` module that ships with RN.\n */\nexport function installRejectionHandler(config: ResolvedConfig): () => void {\n let tracking: any;\n try {\n // RN's bundled polyfill — present on every RN runtime.\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n tracking = require('promise/setimmediate/rejection-tracking');\n } catch {\n return () => undefined;\n }\n\n tracking.enable({\n allRejections: true,\n onUnhandled: (id: string, error: unknown) => {\n try {\n const isErr = error instanceof Error;\n sendEvent(config, {\n level: 'error',\n message: isErr ? error.message : safeJson(error),\n stack: isErr && typeof error.stack === 'string' ? error.stack : undefined,\n attrs: {\n kind: 'rn.unhandledrejection',\n severity: 'error',\n error_name: isErr ? error.name : typeof error,\n top_frame: isErr ? topStackFrame(error.stack) : '',\n },\n });\n } catch {\n // ignore\n }\n },\n onHandled: () => undefined,\n });\n\n return () => {\n try {\n tracking.disable();\n } catch {\n // ignore\n }\n };\n}\n\nfunction safeJson(v: unknown): string {\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n}\n","import { sendEvent } from './transport';\nimport type { ResolvedConfig } from './types';\n\nfunction shouldCapture(args: any[], patterns: RegExp[]): boolean {\n if (patterns.length === 0) return true; // empty list = capture everything\n const first = typeof args[0] === 'string' ? args[0] : '';\n return patterns.some((re) => re.test(first));\n}\n\nfunction stringify(args: any[]): { message: string; stack?: string } {\n const errArg = args.find((a) => a instanceof Error) as Error | undefined;\n const message = args\n .map((a) => {\n if (a instanceof Error) return a.message;\n if (typeof a === 'string') return a;\n try {\n return JSON.stringify(a);\n } catch {\n return String(a);\n }\n })\n .join(' ')\n .slice(0, 4000);\n return {\n message,\n stack: errArg && typeof errArg.stack === 'string' ? errArg.stack : undefined,\n };\n}\n\n/**\n * Wrap console.error so tagged calls forward to the broker as warning-severity\n * events. The original console.error still runs (so RedBox / Metro logs still\n * show up).\n *\n * Pattern is intentional — ProofPix's existing log lines look like\n * `console.error('[Analytics] tracking failure', err)`. Devs prefix their\n * intentional captures and the broker only sees tagged ones.\n */\nexport function patchConsoleError(config: ResolvedConfig): () => void {\n const original = console.error.bind(console);\n console.error = (...args: any[]) => {\n try {\n if (shouldCapture(args, config.captureTags)) {\n const { message, stack } = stringify(args);\n sendEvent(config, {\n level: 'warn',\n message,\n stack,\n attrs: {\n kind: 'console.error',\n severity: 'warning',\n },\n });\n }\n } catch {\n // never block user logs\n }\n return original(...args);\n };\n return () => {\n console.error = original;\n };\n}\n\nexport function patchConsoleWarn(config: ResolvedConfig): () => void {\n const original = console.warn.bind(console);\n console.warn = (...args: any[]) => {\n try {\n if (shouldCapture(args, config.captureTags)) {\n const { message, stack } = stringify(args);\n sendEvent(config, {\n level: 'warn',\n message,\n stack,\n attrs: {\n kind: 'console.warn',\n severity: 'warning',\n },\n });\n }\n } catch {\n // never block\n }\n return original(...args);\n };\n return () => {\n console.warn = original;\n };\n}\n","import { getState, type UserContext } from './state';\nimport { newSessionId, getDeviceId } from './session';\nimport { installGlobalErrorHandler, installRejectionHandler } from './handlers';\nimport { patchConsoleError, patchConsoleWarn } from './console';\nimport { sendEvent } from './transport';\nimport { offlineBuffer } from './buffer';\nimport type { InitOptions, ResolvedConfig } from './types';\n\nconst DEFAULT_ENDPOINT = 'https://geosloghub-production.up.railway.app';\n\nfunction resolveConfig(opts: InitOptions): ResolvedConfig {\n if (!opts?.projectKey) throw new Error('initFixPrompt: projectKey is required');\n if (!opts?.source) throw new Error('initFixPrompt: source is required');\n if (!opts?.service) throw new Error('initFixPrompt: service is required');\n if (!opts?.app) throw new Error('initFixPrompt: app is required');\n\n return {\n projectKey: opts.projectKey,\n source: opts.source,\n endpoint: (opts.endpoint ?? DEFAULT_ENDPOINT).replace(/\\/$/, ''),\n service: opts.service,\n app: opts.app,\n env: opts.env ?? 'prod',\n release: opts.release ?? null,\n captureTags: opts.captureTags ?? [],\n patchConsoleWarn: opts.patchConsoleWarn ?? false,\n patchConsoleError: opts.patchConsoleError ?? true,\n debug: opts.debug ?? false,\n };\n}\n\nexport function initFixPrompt(opts: InitOptions): void {\n const state = getState();\n if (state.initialized) {\n if (opts?.debug) {\n // eslint-disable-next-line no-console\n console.warn('[fixprompt] already initialized — call ignored');\n }\n return;\n }\n\n const config = resolveConfig(opts);\n state.config = config;\n state.sessionId = newSessionId();\n\n state.cleanup.removeErrorHandler = installGlobalErrorHandler(config);\n state.cleanup.removeRejectionHandler = installRejectionHandler(config);\n if (config.patchConsoleError) {\n state.cleanup.restoreConsoleError = patchConsoleError(config);\n }\n if (config.patchConsoleWarn) {\n state.cleanup.restoreConsoleWarn = patchConsoleWarn(config);\n }\n\n state.initialized = true;\n\n // Resolve device id + drain any pre-init buffer, async.\n void (async () => {\n try {\n state.deviceId = await getDeviceId();\n await offlineBuffer.load();\n if (offlineBuffer.size() > 0) {\n // Triggers a drain via the transport's natural retry path.\n const items = await offlineBuffer.drain();\n for (const ev of items) {\n // Re-buffer if delivery still fails — transport handles it\n offlineBuffer.push(ev);\n }\n // Kick a drain attempt\n sendEvent(config, {\n level: 'debug',\n message: '[fixprompt] resumed from offline buffer',\n attrs: { kind: 'sdk.startup', buffered: items.length },\n });\n }\n } catch (err) {\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.warn(`[fixprompt] init async setup failed: ${(err as Error).message}`);\n }\n }\n })();\n\n if (config.debug) {\n // eslint-disable-next-line no-console\n console.log('[fixprompt] initialized', {\n endpoint: config.endpoint,\n service: config.service,\n env: config.env,\n session_id: state.sessionId,\n });\n }\n}\n\nexport function captureException(\n err: unknown,\n options: { synthetic?: boolean; attrs?: Record<string, any> } = {},\n): void {\n const state = getState();\n if (!state.initialized || !state.config) return;\n const isErr = err instanceof Error;\n sendEvent(state.config, {\n level: 'error',\n message: isErr ? err.message : String(err),\n stack: isErr && typeof err.stack === 'string' ? err.stack : undefined,\n attrs: {\n kind: 'captureException',\n severity: 'error',\n error_name: isErr ? err.name : typeof err,\n ...(options.attrs ?? {}),\n },\n synthetic: options.synthetic === true,\n });\n}\n\nexport function setUser(user: UserContext | null): void {\n const state = getState();\n state.user = user;\n}\n\n/** Tests + HMR only. Not part of the supported API. @internal */\nexport function _resetForTests(): void {\n const state = getState();\n state.cleanup.removeErrorHandler?.();\n state.cleanup.removeRejectionHandler?.();\n state.cleanup.restoreConsoleError?.();\n state.cleanup.restoreConsoleWarn?.();\n state.initialized = false;\n state.config = null;\n state.sessionId = null;\n state.deviceId = null;\n state.user = null;\n state.cleanup = {};\n}\n"],"mappings":"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","names":["Promise","resolve","reject","Promise","id","AsyncStorage"]}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const SDK_NAME = "@fixprompt/react-native";
|
|
2
|
-
export declare const SDK_VERSION = "0.0.
|
|
2
|
+
export declare const SDK_VERSION = "0.0.2";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fixprompt/react-native",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "FixPrompt React Native SDK — captures uncaught JS errors, unhandled promise rejections, and tagged console output; buffers offline; forwards to the FixPrompt broker.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"repository": {
|
|
@@ -40,7 +40,9 @@
|
|
|
40
40
|
"@react-native-async-storage/async-storage": ">=1.18"
|
|
41
41
|
},
|
|
42
42
|
"peerDependenciesMeta": {
|
|
43
|
-
"expo-secure-store": { "optional": true }
|
|
43
|
+
"expo-secure-store": { "optional": true },
|
|
44
|
+
"expo-constants": { "optional": true },
|
|
45
|
+
"expo-updates": { "optional": true }
|
|
44
46
|
},
|
|
45
47
|
"devDependencies": {
|
|
46
48
|
"@react-native-async-storage/async-storage": "^1.21.0",
|