@pulseboard/react-native 0.2.3 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +7 -6
- package/dist/index.d.ts +7 -6
- package/dist/index.js +29 -65
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +29 -61
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -4
package/dist/index.d.mts
CHANGED
|
@@ -46,6 +46,11 @@ type EnrichedContext = {
|
|
|
46
46
|
session: SessionContext;
|
|
47
47
|
user: UserContext;
|
|
48
48
|
};
|
|
49
|
+
type StorageAdapter = {
|
|
50
|
+
getItem: (key: string) => Promise<string | null>;
|
|
51
|
+
setItem: (key: string, value: string) => Promise<void>;
|
|
52
|
+
removeItem: (key: string) => Promise<void>;
|
|
53
|
+
};
|
|
49
54
|
type PulseEvent = {
|
|
50
55
|
apiKey: string;
|
|
51
56
|
type: EventType;
|
|
@@ -55,15 +60,13 @@ type PulseEvent = {
|
|
|
55
60
|
context?: EnrichedContext;
|
|
56
61
|
};
|
|
57
62
|
type SDKConfig = {
|
|
58
|
-
apiKey
|
|
59
|
-
organisation?: string;
|
|
60
|
-
product?: string;
|
|
61
|
-
project?: string;
|
|
63
|
+
apiKey: string;
|
|
62
64
|
environment: Environment;
|
|
63
65
|
debug?: boolean;
|
|
64
66
|
autoCapture?: boolean;
|
|
65
67
|
flushInterval?: number;
|
|
66
68
|
maxQueueSize?: number;
|
|
69
|
+
storage?: StorageAdapter;
|
|
67
70
|
};
|
|
68
71
|
type TrackOptions = {
|
|
69
72
|
payload?: Record<string, unknown>;
|
|
@@ -107,9 +110,7 @@ declare class PulseBoardSDK {
|
|
|
107
110
|
private logFlushTimer;
|
|
108
111
|
private originalConsole;
|
|
109
112
|
private consoleCapturing;
|
|
110
|
-
private get apiKey();
|
|
111
113
|
init(config: SDKConfig): void;
|
|
112
|
-
private resolveApiKey;
|
|
113
114
|
private completeInit;
|
|
114
115
|
getContext(): Promise<EnrichedContext>;
|
|
115
116
|
identify(user: UserContext): void;
|
package/dist/index.d.ts
CHANGED
|
@@ -46,6 +46,11 @@ type EnrichedContext = {
|
|
|
46
46
|
session: SessionContext;
|
|
47
47
|
user: UserContext;
|
|
48
48
|
};
|
|
49
|
+
type StorageAdapter = {
|
|
50
|
+
getItem: (key: string) => Promise<string | null>;
|
|
51
|
+
setItem: (key: string, value: string) => Promise<void>;
|
|
52
|
+
removeItem: (key: string) => Promise<void>;
|
|
53
|
+
};
|
|
49
54
|
type PulseEvent = {
|
|
50
55
|
apiKey: string;
|
|
51
56
|
type: EventType;
|
|
@@ -55,15 +60,13 @@ type PulseEvent = {
|
|
|
55
60
|
context?: EnrichedContext;
|
|
56
61
|
};
|
|
57
62
|
type SDKConfig = {
|
|
58
|
-
apiKey
|
|
59
|
-
organisation?: string;
|
|
60
|
-
product?: string;
|
|
61
|
-
project?: string;
|
|
63
|
+
apiKey: string;
|
|
62
64
|
environment: Environment;
|
|
63
65
|
debug?: boolean;
|
|
64
66
|
autoCapture?: boolean;
|
|
65
67
|
flushInterval?: number;
|
|
66
68
|
maxQueueSize?: number;
|
|
69
|
+
storage?: StorageAdapter;
|
|
67
70
|
};
|
|
68
71
|
type TrackOptions = {
|
|
69
72
|
payload?: Record<string, unknown>;
|
|
@@ -107,9 +110,7 @@ declare class PulseBoardSDK {
|
|
|
107
110
|
private logFlushTimer;
|
|
108
111
|
private originalConsole;
|
|
109
112
|
private consoleCapturing;
|
|
110
|
-
private get apiKey();
|
|
111
113
|
init(config: SDKConfig): void;
|
|
112
|
-
private resolveApiKey;
|
|
113
114
|
private completeInit;
|
|
114
115
|
getContext(): Promise<EnrichedContext>;
|
|
115
116
|
identify(user: UserContext): void;
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var reactNative = require('react-native');
|
|
4
|
-
var AsyncStorage = require('@react-native-async-storage/async-storage');
|
|
5
|
-
|
|
6
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
-
|
|
8
|
-
var AsyncStorage__default = /*#__PURE__*/_interopDefault(AsyncStorage);
|
|
9
4
|
|
|
10
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
11
6
|
var __commonJS = (cb, mod) => function __require() {
|
|
@@ -552,40 +547,43 @@ var ContextCollector = class {
|
|
|
552
547
|
};
|
|
553
548
|
}
|
|
554
549
|
};
|
|
550
|
+
|
|
551
|
+
// src/queue.ts
|
|
555
552
|
var QUEUE_KEY = "@pulseboard/event_queue";
|
|
556
553
|
var MAX_QUEUE_SIZE = 100;
|
|
557
554
|
var EventQueue = class {
|
|
558
|
-
constructor(maxSize = MAX_QUEUE_SIZE) {
|
|
555
|
+
constructor(maxSize = MAX_QUEUE_SIZE, storage) {
|
|
559
556
|
this.memoryQueue = [];
|
|
560
557
|
this._hydrated = false;
|
|
558
|
+
this.storage = null;
|
|
561
559
|
this.maxSize = maxSize;
|
|
560
|
+
this.storage = storage ?? null;
|
|
562
561
|
this.hydrate();
|
|
563
562
|
}
|
|
564
|
-
// ─── Hydrate from storage on init ─────────────────────────────────
|
|
565
563
|
async hydrate() {
|
|
566
564
|
try {
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
565
|
+
if (this.storage) {
|
|
566
|
+
const raw = await this.storage.getItem(QUEUE_KEY);
|
|
567
|
+
if (raw) {
|
|
568
|
+
const stored = JSON.parse(raw);
|
|
569
|
+
this.memoryQueue = stored.slice(0, this.maxSize);
|
|
570
|
+
}
|
|
571
571
|
}
|
|
572
572
|
} catch {
|
|
573
573
|
} finally {
|
|
574
574
|
this._hydrated = true;
|
|
575
575
|
}
|
|
576
576
|
}
|
|
577
|
-
// ─── Persist to storage ────────────────────────────────────────────
|
|
578
577
|
async persist() {
|
|
579
578
|
try {
|
|
580
|
-
|
|
579
|
+
if (this.storage) {
|
|
580
|
+
await this.storage.setItem(QUEUE_KEY, JSON.stringify(this.memoryQueue));
|
|
581
|
+
}
|
|
581
582
|
} catch {
|
|
582
583
|
}
|
|
583
584
|
}
|
|
584
|
-
// ─── Public API ────────────────────────────────────────────────────
|
|
585
585
|
enqueue(event) {
|
|
586
|
-
if (this.memoryQueue.length >= this.maxSize)
|
|
587
|
-
this.memoryQueue.shift();
|
|
588
|
-
}
|
|
586
|
+
if (this.memoryQueue.length >= this.maxSize) this.memoryQueue.shift();
|
|
589
587
|
this.memoryQueue.push(event);
|
|
590
588
|
this.persist();
|
|
591
589
|
}
|
|
@@ -606,7 +604,7 @@ var EventQueue = class {
|
|
|
606
604
|
async clear() {
|
|
607
605
|
this.memoryQueue = [];
|
|
608
606
|
try {
|
|
609
|
-
await
|
|
607
|
+
if (this.storage) await this.storage.removeItem(QUEUE_KEY);
|
|
610
608
|
} catch {
|
|
611
609
|
}
|
|
612
610
|
}
|
|
@@ -629,62 +627,28 @@ var PulseBoardSDK = class {
|
|
|
629
627
|
this.originalConsole = {};
|
|
630
628
|
this.consoleCapturing = false;
|
|
631
629
|
}
|
|
632
|
-
get apiKey() {
|
|
633
|
-
return this.config?.apiKey ?? "";
|
|
634
|
-
}
|
|
635
630
|
// ─── Public API ───────────────────────────────────────────────────
|
|
636
631
|
init(config) {
|
|
637
632
|
if (this.initialized) {
|
|
638
633
|
this.debugLog("SDK already initialized \u2014 skipping");
|
|
639
634
|
return;
|
|
640
635
|
}
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
if (!hasDirectKey && !hasIdentifiers) {
|
|
644
|
-
throw new Error(
|
|
645
|
-
"[PulseBoard] init() requires either apiKey or (organisation + product + project)"
|
|
646
|
-
);
|
|
636
|
+
if (!config.apiKey) {
|
|
637
|
+
throw new Error("[PulseBoard] init() requires an apiKey");
|
|
647
638
|
}
|
|
648
639
|
this.config = {
|
|
649
640
|
autoCapture: true,
|
|
650
641
|
debug: false,
|
|
651
642
|
flushInterval: 5e3,
|
|
652
643
|
maxQueueSize: 100,
|
|
653
|
-
...config
|
|
654
|
-
apiKey: config.apiKey ?? ""
|
|
655
|
-
// resolved below if using identifiers
|
|
644
|
+
...config
|
|
656
645
|
};
|
|
657
646
|
this.client = new PulseBoardClient(this.PULSEBOARD_API, this.config.debug);
|
|
658
|
-
this.queue = new EventQueue(this.config.maxQueueSize);
|
|
647
|
+
this.queue = new EventQueue(this.config.maxQueueSize, this.config.storage);
|
|
659
648
|
this.contextCollector = new ContextCollector({
|
|
660
649
|
environment: config.environment
|
|
661
650
|
});
|
|
662
|
-
|
|
663
|
-
this.resolveApiKey(
|
|
664
|
-
config.organisation,
|
|
665
|
-
config.product,
|
|
666
|
-
config.project
|
|
667
|
-
);
|
|
668
|
-
} else {
|
|
669
|
-
this.completeInit();
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
async resolveApiKey(organisation, product, project) {
|
|
673
|
-
try {
|
|
674
|
-
const response = await fetch(
|
|
675
|
-
`${this.PULSEBOARD_API}sdk/resolve?organisation=${encodeURIComponent(organisation)}&product=${encodeURIComponent(product)}&project=${encodeURIComponent(project)}`
|
|
676
|
-
);
|
|
677
|
-
if (!response.ok) {
|
|
678
|
-
throw new Error(
|
|
679
|
-
`[PulseBoard] Could not resolve project. Check your organisation, product and project values.`
|
|
680
|
-
);
|
|
681
|
-
}
|
|
682
|
-
const data = await response.json();
|
|
683
|
-
this.config.apiKey = data.data.apiKey;
|
|
684
|
-
this.completeInit();
|
|
685
|
-
} catch (err) {
|
|
686
|
-
console.error("[PulseBoard] Failed to resolve API key:", err);
|
|
687
|
-
}
|
|
651
|
+
this.completeInit();
|
|
688
652
|
}
|
|
689
653
|
completeInit() {
|
|
690
654
|
this.flushTimer = setInterval(
|
|
@@ -800,14 +764,14 @@ var PulseBoardSDK = class {
|
|
|
800
764
|
async flushLogs() {
|
|
801
765
|
if (!this.client || !this.config || this.logQueue.length === 0) return;
|
|
802
766
|
const batch = this.logQueue.splice(0, this.logQueue.length);
|
|
803
|
-
await this.client.sendLogBatch(this.apiKey, batch);
|
|
767
|
+
await this.client.sendLogBatch(this.config.apiKey, batch);
|
|
804
768
|
}
|
|
805
769
|
// ─── Analytics API ────────────────────────────────────────────────
|
|
806
770
|
startSession() {
|
|
807
771
|
this.assertInitialized("startSession");
|
|
808
772
|
this.contextCollector.collect().then((context) => {
|
|
809
773
|
this.client.sendAnalytics("session", {
|
|
810
|
-
apiKey: this.apiKey,
|
|
774
|
+
apiKey: this.config?.apiKey,
|
|
811
775
|
sessionId: context.session.sessionId,
|
|
812
776
|
startedAt: context.session.startedAt,
|
|
813
777
|
context
|
|
@@ -819,7 +783,7 @@ var PulseBoardSDK = class {
|
|
|
819
783
|
this.assertInitialized("endSession");
|
|
820
784
|
this.contextCollector.collect().then((context) => {
|
|
821
785
|
this.client.sendAnalytics("session", {
|
|
822
|
-
apiKey: this.apiKey,
|
|
786
|
+
apiKey: this.config?.apiKey,
|
|
823
787
|
sessionId: context.session.sessionId,
|
|
824
788
|
startedAt: context.session.startedAt,
|
|
825
789
|
endedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -834,7 +798,7 @@ var PulseBoardSDK = class {
|
|
|
834
798
|
this.assertInitialized("trackScreen");
|
|
835
799
|
this.contextCollector.collect().then((context) => {
|
|
836
800
|
this.client.sendAnalytics("screen-view", {
|
|
837
|
-
apiKey: this.apiKey,
|
|
801
|
+
apiKey: this.config?.apiKey,
|
|
838
802
|
screenName,
|
|
839
803
|
loadTime,
|
|
840
804
|
sessionId: context.session.sessionId,
|
|
@@ -847,7 +811,7 @@ var PulseBoardSDK = class {
|
|
|
847
811
|
this.assertInitialized("trackApiCall");
|
|
848
812
|
this.contextCollector.collect().then((context) => {
|
|
849
813
|
this.client.sendAnalytics("api-call", {
|
|
850
|
-
apiKey: this.apiKey,
|
|
814
|
+
apiKey: this.config?.apiKey,
|
|
851
815
|
endpoint,
|
|
852
816
|
httpMethod,
|
|
853
817
|
statusCode,
|
|
@@ -865,7 +829,7 @@ var PulseBoardSDK = class {
|
|
|
865
829
|
this.assertInitialized("trackCrash");
|
|
866
830
|
this.contextCollector.collect().then((context) => {
|
|
867
831
|
this.client.sendAnalytics("crash", {
|
|
868
|
-
apiKey: this.apiKey,
|
|
832
|
+
apiKey: this.config?.apiKey,
|
|
869
833
|
errorName: error.name,
|
|
870
834
|
errorMessage: error.message,
|
|
871
835
|
stackTrace: error.stack ?? "",
|
|
@@ -880,7 +844,7 @@ var PulseBoardSDK = class {
|
|
|
880
844
|
this.assertInitialized("feedback");
|
|
881
845
|
this.contextCollector.collect().then((context) => {
|
|
882
846
|
this.client.sendFeedback({
|
|
883
|
-
apiKey: this.apiKey,
|
|
847
|
+
apiKey: this.config?.apiKey,
|
|
884
848
|
type: options.type ?? "general",
|
|
885
849
|
message,
|
|
886
850
|
meta: options.meta,
|
|
@@ -935,7 +899,7 @@ var PulseBoardSDK = class {
|
|
|
935
899
|
buildAndEnqueue(type, name, payload, timestamp) {
|
|
936
900
|
this.contextCollector.collect().then((context) => {
|
|
937
901
|
const event = {
|
|
938
|
-
apiKey: this.apiKey,
|
|
902
|
+
apiKey: this.config?.apiKey,
|
|
939
903
|
type,
|
|
940
904
|
name,
|
|
941
905
|
payload,
|
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/auto-capture.ts","../src/client.ts","../src/specs/NativePulseBoardDevice.ts","../src/specs/NativePulseBoardNetwork.ts","../src/context.ts","../src/queue.ts","../src/index.ts"],"names":["exports","Promise","resolve","reject","id","TurboModuleRegistry","I18nManager","Dimensions","Platform","AsyncStorage"],"mappings":"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","file":"index.js","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}","type ErrorHandler = (\n name: string,\n error: Error,\n context?: Record<string, unknown>,\n) => void;\n\nexport class AutoCapture {\n private handler: ErrorHandler;\n private attached: boolean = false;\n private previousHandler: ((error: Error, isFatal?: boolean) => void) | null =\n null;\n\n constructor(handler: ErrorHandler) {\n this.handler = handler;\n }\n\n attach(): void {\n if (this.attached) return;\n\n // React Native's global error handler - catches all unhandled JS errors\n this.previousHandler = ErrorUtils.getGlobalHandler();\n\n ErrorUtils.setGlobalHandler((error: Error, isFatal?: boolean) => {\n this.handler(\"uncaughtException\", error, { isFatal: isFatal ?? false });\n\n // Always call the previous handler (React Native's default crash reporter)\n if (this.previousHandler) {\n this.previousHandler(error, isFatal);\n }\n });\n\n // Unhandled promise rejections\n const tracking = require(\"promise/setimmediate/rejection-tracking\");\n tracking.enable({\n allRejections: true,\n onUnhandled: (_id: number, error: unknown) => {\n const err = error instanceof Error ? error : new Error(String(error));\n this.handler(\"unhandledRejection\", err, { fatal: false });\n },\n });\n\n this.attached = true;\n }\n\n detach(): void {\n if (!this.attached) return;\n\n // Restore the previous error handler\n if (this.previousHandler) {\n ErrorUtils.setGlobalHandler(this.previousHandler);\n this.previousHandler = null;\n }\n\n this.attached = false;\n }\n}\n","import { LogEntry, PulseEvent } from \"./types\";\n\ntype AnalyticsType = \"crash\" | \"session\" | \"screen-view\" | \"api-call\";\n\nexport class PulseBoardClient {\n private host: string;\n private debug: boolean;\n\n constructor(host: string, debug = false) {\n this.host = host.replace(/\\/$/, \"\");\n this.debug = debug;\n }\n\n // ─── Event Ingest ─────────────────────────────────────────────────\n\n async send(event: PulseEvent): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/ingest`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(event),\n });\n\n if (!response.ok) {\n this.log(\n `Failed to send event: ${response.status} ${response.statusText}`,\n );\n return false;\n }\n\n this.log(`Event sent: ${event.type} — ${event.name}`);\n return true;\n } catch (err) {\n this.log(`Network error sending event: ${err}`);\n return false;\n }\n }\n\n async sendBatch(events: PulseEvent[]): Promise<boolean> {\n const chunks = this.chunk(events, 5);\n\n for (const chunk of chunks) {\n await Promise.all(chunk.map((e) => this.send(e)));\n }\n\n return true;\n }\n\n // ─── Analytics Ingest ─────────────────────────────────────────────\n\n async sendAnalytics(\n type: AnalyticsType,\n payload: Record<string, unknown>,\n ): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/analytics/${type}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n this.log(\n `Failed to send analytics: ${response.status} ${response.statusText}`,\n );\n return false;\n }\n\n this.log(`Analytics sent: ${type}`);\n return true;\n } catch (err) {\n this.log(`Network error sending analytics: ${err}`);\n return false;\n }\n }\n\n // ─── Log Entry ─────────────────────────────────────────────\n\n async sendLog(entry: LogEntry): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/logs`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(entry),\n });\n if (!response.ok) {\n this.log(`Failed to send log: ${response.status}`);\n return false;\n }\n return true;\n } catch (err) {\n this.log(`Network error sending log: ${err}`);\n return false;\n }\n }\n\n async sendLogBatch(\n apiKey: string,\n logs: Omit<LogEntry, \"apiKey\">[],\n ): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/logs/batch`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ apiKey, logs }),\n });\n if (!response.ok) {\n this.log(`Failed to send log batch: ${response.status}`);\n return false;\n }\n return true;\n } catch (err) {\n this.log(`Network error sending log batch: ${err}`);\n return false;\n }\n }\n\n // ─── Feedback ─────────────────────────────────────────────────────\n\n async sendFeedback(payload: Record<string, unknown>): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/feedback`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n if (!response.ok) {\n this.log(`Failed to send feedback: ${response.status}`);\n return false;\n }\n this.log(\"Feedback sent\");\n return true;\n } catch (err) {\n this.log(`Network error sending feedback: ${err}`);\n return false;\n }\n }\n\n // ─── Private ──────────────────────────────────────────────────────\n\n private chunk<T>(arr: T[], size: number): T[][] {\n return Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>\n arr.slice(i * size, i * size + size),\n );\n }\n\n private log(message: string): void {\n if (this.debug) {\n console.log(`[PulseBoard] ${message}`);\n }\n }\n}\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\n\nexport type DeviceInfo = {\n model: string;\n manufacturer: string;\n brand: string;\n os: string;\n osVersion: string;\n appVersion: string;\n buildNumber: string;\n bundleId: string;\n screenWidth: number;\n screenHeight: number;\n isTablet: boolean;\n isEmulator: boolean;\n};\n\nexport interface Spec extends TurboModule {\n getDeviceInfo(): Promise<DeviceInfo>;\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>(\"PulseBoardDevice\");\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\n\nexport type NetowrkInfo = {\n type: string;\n isConnected: boolean;\n isWifiEnabled: boolean;\n carrier: string;\n ipAddress: string;\n};\n\nexport interface Spec extends TurboModule {\n getNetworkInfo(): Promise<NetowrkInfo>;\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>(\"PulseBoardNetwork\");\n","import { Dimensions, I18nManager, Platform } from \"react-native\";\nimport NativePulseBoardDevice from \"./specs/NativePulseBoardDevice\";\nimport NativePulseBoardNetwork from \"./specs/NativePulseBoardNetwork\";\nimport {\n AppContext,\n DeviceContext,\n EnrichedContext,\n NetworkContext,\n NetworkType,\n SessionContext,\n UserContext,\n} from \"./types\";\n\nfunction generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 10);\n return `${timestamp}-${random}`;\n}\n\nfunction mapNetworkType(type: string): NetworkType {\n switch (type) {\n case \"wifi\":\n return \"wifi\";\n case \"cellular\":\n return \"cellular\";\n case \"offline\":\n return \"offline\";\n default:\n return \"unknown\";\n }\n}\n\nfunction getTimezone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch {\n return \"unknown\";\n }\n}\n\nfunction getLanguage(): string {\n try {\n return (\n I18nManager.getConstants?.()?.localeIdentifier?.replace(\"_\", \"-\") ??\n Intl.DateTimeFormat().resolvedOptions().locale ??\n \"unknown\"\n );\n } catch {\n return \"unknown\";\n }\n}\n\nexport class ContextCollector {\n private sessionContext: SessionContext;\n private appContext: AppContext;\n private userContext: UserContext = {};\n\n constructor(appContext: AppContext = {}) {\n this.appContext = appContext;\n this.sessionContext = {\n sessionId: generateSessionId(),\n startedAt: new Date().toISOString(),\n };\n }\n\n identify(user: UserContext): void {\n this.userContext = { ...this.userContext, ...user };\n }\n\n clearUser(): void {\n this.userContext = {};\n }\n\n async collect(): Promise<EnrichedContext> {\n const { width, height } = Dimensions.get(\"window\");\n\n // Collect device info — fall back gracefully if native module unavailable\n let deviceInfo = null;\n let networkInfo = null;\n\n try {\n if (NativePulseBoardDevice) {\n deviceInfo = await NativePulseBoardDevice.getDeviceInfo();\n }\n } catch (e) {\n console.warn(\"[PulseBoard] Failed to collect device info:\", e);\n }\n\n try {\n if (NativePulseBoardNetwork) {\n networkInfo = await NativePulseBoardNetwork.getNetworkInfo();\n }\n } catch (e) {\n console.warn(\"[PulseBoard] Failed to collect network info:\", e);\n }\n\n const device: DeviceContext = {\n platform: Platform.OS === \"ios\" ? \"ios\" : \"android\",\n os: deviceInfo?.os ?? (Platform.OS === \"ios\" ? \"iOS\" : \"Android\"),\n osVersion:\n deviceInfo?.osVersion ?? Platform.Version?.toString() ?? \"unknown\",\n model: deviceInfo?.model ?? \"unknown\",\n manufacturer: deviceInfo?.manufacturer ?? \"unknown\",\n brand: deviceInfo?.brand ?? \"unknown\",\n isTablet: deviceInfo?.isTablet ?? false,\n appVersion: deviceInfo?.appVersion ?? \"unknown\",\n buildNumber: deviceInfo?.buildNumber ?? \"unknown\",\n bundleId: deviceInfo?.bundleId ?? \"unknown\",\n screenWidth: deviceInfo?.screenWidth ?? width,\n screenHeight: deviceInfo?.screenHeight ?? height,\n fontScale: Dimensions.get(\"window\").fontScale ?? 1,\n isEmulator: deviceInfo?.isEmulator ?? false,\n language: getLanguage(),\n timezone: getTimezone(),\n };\n\n const network: NetworkContext = {\n type: mapNetworkType(networkInfo?.type ?? \"unknown\"),\n isConnected: networkInfo?.isConnected ?? false,\n isWifiEnabled: networkInfo?.isWifiEnabled ?? false,\n carrier: networkInfo?.carrier ?? \"unknown\",\n ipAddress: networkInfo?.ipAddress ?? \"unknown\",\n };\n\n return {\n app: this.appContext,\n device,\n network,\n session: this.sessionContext,\n user: this.userContext,\n };\n }\n}\n","import AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport { PulseEvent } from \"./types\";\n\nconst QUEUE_KEY = \"@pulseboard/event_queue\";\nconst MAX_QUEUE_SIZE = 100;\n\nexport class EventQueue {\n private memoryQueue: PulseEvent[] = [];\n private maxSize: number;\n private _hydrated: boolean = false;\n\n constructor(maxSize = MAX_QUEUE_SIZE) {\n this.maxSize = maxSize;\n this.hydrate();\n }\n\n // ─── Hydrate from storage on init ─────────────────────────────────\n\n private async hydrate(): Promise<void> {\n try {\n const raw = await AsyncStorage.getItem(QUEUE_KEY);\n if (raw) {\n const stored = JSON.parse(raw) as PulseEvent[];\n this.memoryQueue = stored.slice(0, this.maxSize);\n }\n } catch {\n // Storage unavailable — fall back to in-memory only\n } finally {\n this._hydrated = true;\n }\n }\n\n // ─── Persist to storage ────────────────────────────────────────────\n\n private async persist(): Promise<void> {\n try {\n await AsyncStorage.setItem(QUEUE_KEY, JSON.stringify(this.memoryQueue));\n } catch {\n // Non-fatal — events still in memory\n }\n }\n\n // ─── Public API ────────────────────────────────────────────────────\n\n enqueue(event: PulseEvent): void {\n if (this.memoryQueue.length >= this.maxSize) {\n this.memoryQueue.shift(); // Drop oldest\n }\n this.memoryQueue.push(event);\n this.persist();\n }\n\n dequeue(count: number): PulseEvent[] {\n const batch = this.memoryQueue.splice(0, count);\n this.persist();\n return batch;\n }\n\n get size(): number {\n return this.memoryQueue.length;\n }\n\n get isEmpty(): boolean {\n return this.memoryQueue.length === 0;\n }\n\n get hydrated(): boolean {\n return this._hydrated;\n }\n\n async clear(): Promise<void> {\n this.memoryQueue = [];\n try {\n await AsyncStorage.removeItem(QUEUE_KEY);\n } catch {\n // Non-fatal\n }\n }\n}\n","import { AutoCapture } from \"./auto-capture\";\nimport { PulseBoardClient } from \"./client\";\nimport { ContextCollector } from \"./context\";\nimport { EventQueue } from \"./queue\";\nimport {\n CaptureErrorOptions,\n EnrichedContext,\n FeedbackOptions,\n LogEntry,\n LogLevel,\n LogOptions,\n PulseEvent,\n SDKConfig,\n TrackOptions,\n UserContext,\n} from \"./types\";\n\nclass PulseBoardSDK {\n private config: SDKConfig | null = null;\n private client: PulseBoardClient | null = null;\n private queue: EventQueue | null = null;\n private autoCapture: AutoCapture | null = null;\n private contextCollector: ContextCollector | null = null;\n private flushTimer: ReturnType<typeof setInterval> | null = null;\n private initialized: boolean = false;\n private readonly PULSEBOARD_API: string =\n \"https://pulseboard-production.up.railway.app/\";\n\n // ─── Log queue ────────────────────────────────────────────────────\n private logQueue: Omit<LogEntry, \"apiKey\">[] = [];\n private logFlushTimer: ReturnType<typeof setInterval> | null = null;\n private originalConsole: Partial<typeof console> = {};\n private consoleCapturing: boolean = false;\n\n private get apiKey(): string {\n return this.config?.apiKey ?? \"\";\n }\n\n // ─── Public API ───────────────────────────────────────────────────\n\n init(config: SDKConfig): void {\n if (this.initialized) {\n this.debugLog(\"SDK already initialized — skipping\");\n return;\n }\n\n // Validate config\n const hasDirectKey = !!config.apiKey;\n const hasIdentifiers = !!(\n config.organisation &&\n config.product &&\n config.project\n );\n\n if (!hasDirectKey && !hasIdentifiers) {\n throw new Error(\n \"[PulseBoard] init() requires either apiKey or (organisation + product + project)\",\n );\n }\n\n this.config = {\n autoCapture: true,\n debug: false,\n flushInterval: 5000,\n maxQueueSize: 100,\n ...config,\n apiKey: config.apiKey ?? \"\", // resolved below if using identifiers\n };\n\n this.client = new PulseBoardClient(this.PULSEBOARD_API, this.config.debug);\n this.queue = new EventQueue(this.config.maxQueueSize);\n this.contextCollector = new ContextCollector({\n environment: config.environment,\n });\n\n // Resolve API key from identifiers if not provided directly\n if (!hasDirectKey && hasIdentifiers) {\n this.resolveApiKey(\n config.organisation!,\n config.product!,\n config.project!,\n );\n } else {\n this.completeInit();\n }\n }\n\n private async resolveApiKey(\n organisation: string,\n product: string,\n project: string,\n ): Promise<void> {\n try {\n const response = await fetch(\n `${this.PULSEBOARD_API}sdk/resolve?organisation=${encodeURIComponent(organisation)}&product=${encodeURIComponent(product)}&project=${encodeURIComponent(project)}`,\n );\n\n if (!response.ok) {\n throw new Error(\n `[PulseBoard] Could not resolve project. Check your organisation, product and project values.`,\n );\n }\n\n const data = (await response.json()) as {\n success: boolean;\n data: { apiKey: string };\n };\n this.config!.apiKey = data.data.apiKey;\n this.completeInit();\n } catch (err) {\n console.error(\"[PulseBoard] Failed to resolve API key:\", err);\n }\n }\n\n private completeInit(): void {\n this.flushTimer = setInterval(\n () => this.flush(),\n this.config!.flushInterval,\n );\n\n if (this.config!.autoCapture) {\n this.autoCapture = new AutoCapture((name, error, context) => {\n this.captureError(error, { payload: context });\n });\n this.autoCapture.attach();\n }\n\n this.initialized = true;\n this.debugLog(`Initialized — host: ${this.PULSEBOARD_API}`);\n }\n\n async getContext(): Promise<EnrichedContext> {\n this.assertInitialized(\"getContext\");\n return this.contextCollector!.collect();\n }\n\n identify(user: UserContext): void {\n this.assertInitialized(\"identify\");\n this.contextCollector!.identify(user);\n this.debugLog(`User identified: ${JSON.stringify(user)}`);\n }\n\n clearUser(): void {\n this.assertInitialized(\"clearUser\");\n this.contextCollector!.clearUser();\n }\n\n track(name: string, options: TrackOptions = {}): void {\n this.assertInitialized(\"track\");\n this.buildAndEnqueue(\n \"event\",\n name,\n options.payload ?? {},\n options.timestamp,\n );\n }\n\n metric(name: string, value: number, options: TrackOptions = {}): void {\n this.assertInitialized(\"metric\");\n this.buildAndEnqueue(\n \"metric\",\n name,\n { value, ...options.payload },\n options.timestamp,\n );\n }\n\n captureError(error: Error, options: CaptureErrorOptions = {}): void {\n this.assertInitialized(\"captureError\");\n this.buildAndEnqueue(\"error\", error.name ?? \"UnknownError\", {\n message: error.message,\n stack: error.stack,\n ...options.payload,\n });\n }\n\n // ─── Logging API ──────────────────────────────────────────────────\n\n log(level: LogLevel, message: string, options: LogOptions = {}): void {\n this.assertInitialized(\"log\");\n this.contextCollector!.collect()\n .then((context) => {\n this.logQueue.push({\n level,\n message,\n meta: options.meta,\n sessionId: context.session.sessionId,\n appVersion: context.device.appVersion,\n timestamp: new Date().toISOString(),\n });\n\n // Flush immediately for errors\n if (level === \"error\") this.flushLogs();\n })\n .catch(() => {});\n }\n\n captureConsole(): void {\n this.assertInitialized(\"captureConsole\");\n if (this.consoleCapturing) return;\n\n this.originalConsole = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n debug: console.debug,\n };\n\n console.log = (...args: unknown[]) => {\n this.originalConsole.log?.(...args);\n this.log(\"info\", args.map(String).join(\" \"));\n };\n\n console.warn = (...args: unknown[]) => {\n this.originalConsole.warn?.(...args);\n this.log(\"warn\", args.map(String).join(\" \"));\n };\n\n console.error = (...args: unknown[]) => {\n this.originalConsole.error?.(...args);\n this.log(\"error\", args.map(String).join(\" \"));\n };\n\n console.debug = (...args: unknown[]) => {\n this.originalConsole.debug?.(...args);\n this.log(\"debug\", args.map(String).join(\" \"));\n };\n\n this.logFlushTimer = setInterval(() => this.flushLogs(), 10000);\n this.consoleCapturing = true;\n this.debugLog(\"Console capture enabled\");\n }\n\n releaseConsole(): void {\n if (!this.consoleCapturing) return;\n\n if (this.originalConsole.log) console.log = this.originalConsole.log;\n if (this.originalConsole.warn) console.warn = this.originalConsole.warn;\n if (this.originalConsole.error) console.error = this.originalConsole.error;\n if (this.originalConsole.debug) console.debug = this.originalConsole.debug;\n\n if (this.logFlushTimer) {\n clearInterval(this.logFlushTimer);\n this.logFlushTimer = null;\n }\n\n this.originalConsole = {};\n this.consoleCapturing = false;\n }\n\n async flushLogs(): Promise<void> {\n if (!this.client || !this.config || this.logQueue.length === 0) return;\n const batch = this.logQueue.splice(0, this.logQueue.length);\n await this.client.sendLogBatch(this.apiKey, batch);\n }\n\n // ─── Analytics API ────────────────────────────────────────────────\n\n startSession(): void {\n this.assertInitialized(\"startSession\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"session\", {\n apiKey: this.apiKey,\n sessionId: context.session.sessionId,\n startedAt: context.session.startedAt,\n context,\n });\n this.debugLog(`Session started: ${context.session.sessionId}`);\n })\n .catch((err) => this.debugLog(`Failed to start session: ${err}`));\n }\n\n endSession(duration?: number): void {\n this.assertInitialized(\"endSession\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"session\", {\n apiKey: this.apiKey,\n sessionId: context.session.sessionId,\n startedAt: context.session.startedAt,\n endedAt: new Date().toISOString(),\n duration,\n context,\n });\n this.flush();\n this.debugLog(`Session ended: ${context.session.sessionId}`);\n })\n .catch((err) => this.debugLog(`Failed to end session: ${err}`));\n }\n\n trackScreen(screenName: string, loadTime?: number): void {\n this.assertInitialized(\"trackScreen\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"screen-view\", {\n apiKey: this.apiKey,\n screenName,\n loadTime,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(`Screen tracked: ${screenName}`);\n })\n .catch((err) => this.debugLog(`Failed to track screen: ${err}`));\n }\n\n trackApiCall(\n endpoint: string,\n httpMethod: string,\n statusCode: number,\n duration: number,\n payloadSize?: number,\n ): void {\n this.assertInitialized(\"trackApiCall\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"api-call\", {\n apiKey: this.apiKey,\n endpoint,\n httpMethod,\n statusCode,\n duration,\n payloadSize,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(\n `API call tracked: ${httpMethod} ${endpoint} ${statusCode}`,\n );\n })\n .catch((err) => this.debugLog(`Failed to track API call: ${err}`));\n }\n\n trackCrash(error: Error, isFatal = false): void {\n this.assertInitialized(\"trackCrash\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"crash\", {\n apiKey: this.apiKey,\n errorName: error.name,\n errorMessage: error.message,\n stackTrace: error.stack ?? \"\",\n isFatal,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(`Crash tracked: ${error.name} — fatal: ${isFatal}`);\n })\n .catch((err) => this.debugLog(`Failed to track crash: ${err}`));\n }\n\n feedback(message: string, options: FeedbackOptions = {}): void {\n this.assertInitialized(\"feedback\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendFeedback({\n apiKey: this.apiKey,\n type: options.type ?? \"general\",\n message,\n meta: options.meta,\n userEmail: options.userEmail,\n userName: options.userName,\n screenshot: options.screenshot,\n sessionId: context.session.sessionId,\n appVersion: context.device.appVersion,\n });\n this.debugLog(`Feedback sent: ${options.type ?? \"general\"}`);\n })\n .catch((err) => this.debugLog(`Failed to send feedback: ${err}`));\n }\n\n // ─── Flush & Destroy ──────────────────────────────────────────────\n\n async flush(): Promise<void> {\n if (!this.queue || !this.client) return;\n\n // Wait up to 500ms for hydration before first flush\n if (!this.queue.hydrated) {\n await new Promise<void>((resolve) => {\n const interval = setInterval(() => {\n if (this.queue?.hydrated) {\n clearInterval(interval);\n resolve();\n }\n }, 50);\n setTimeout(() => {\n clearInterval(interval);\n resolve();\n }, 500);\n });\n }\n\n if (this.queue.isEmpty) return;\n\n const events = this.queue.dequeue(10);\n this.debugLog(`Flushing ${events.length} event(s)`);\n await this.client.sendBatch(events);\n }\n\n destroy(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n this.releaseConsole();\n this.autoCapture?.detach();\n this.queue?.clear();\n this.logQueue = [];\n\n this.initialized = false;\n this.config = null;\n this.client = null;\n this.queue = null;\n this.contextCollector = null;\n\n this.debugLog(\"SDK destroyed\");\n }\n\n // ─── Private ──────────────────────────────────────────────────────\n\n private buildAndEnqueue(\n type: \"event\" | \"metric\" | \"error\",\n name: string,\n payload: Record<string, unknown>,\n timestamp?: string,\n ): void {\n this.contextCollector!.collect()\n .then((context) => {\n const event: PulseEvent = {\n apiKey: this.apiKey,\n type,\n name,\n payload,\n timestamp: timestamp ?? new Date().toISOString(),\n context,\n };\n this.queue!.enqueue(event);\n this.debugLog(`Queued: ${type} — ${name}`);\n if (type === \"error\") this.flush();\n })\n .catch((err) => this.debugLog(`Failed to collect context: ${err}`));\n }\n\n private assertInitialized(method: string): void {\n if (!this.initialized) {\n throw new Error(`PulseBoard.${method}() called before PulseBoard.init()`);\n }\n }\n\n private debugLog(message: string): void {\n if (this.config?.debug) {\n console.log(`[PulseBoard] ${message}`);\n }\n }\n}\n\nexport const PulseBoard = new PulseBoardSDK();\n\nexport type {\n AppContext,\n CaptureErrorOptions,\n DeviceContext,\n EnrichedContext,\n EventType,\n LogEntry,\n LogLevel,\n LogOptions,\n NetworkContext,\n PulseEvent,\n SDKConfig,\n SessionContext,\n TrackOptions,\n UserContext,\n} from \"./types\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/promise/setimmediate/core.js","../node_modules/promise/setimmediate/rejection-tracking.js","../src/auto-capture.ts","../src/client.ts","../src/specs/NativePulseBoardDevice.ts","../src/specs/NativePulseBoardNetwork.ts","../src/context.ts","../src/queue.ts","../src/index.ts"],"names":["exports","Promise","resolve","reject","id","TurboModuleRegistry","I18nManager","Dimensions","Platform"],"mappings":"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","file":"index.js","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}","type ErrorHandler = (\n name: string,\n error: Error,\n context?: Record<string, unknown>,\n) => void;\n\nexport class AutoCapture {\n private handler: ErrorHandler;\n private attached: boolean = false;\n private previousHandler: ((error: Error, isFatal?: boolean) => void) | null =\n null;\n\n constructor(handler: ErrorHandler) {\n this.handler = handler;\n }\n\n attach(): void {\n if (this.attached) return;\n\n // React Native's global error handler - catches all unhandled JS errors\n this.previousHandler = ErrorUtils.getGlobalHandler();\n\n ErrorUtils.setGlobalHandler((error: Error, isFatal?: boolean) => {\n this.handler(\"uncaughtException\", error, { isFatal: isFatal ?? false });\n\n // Always call the previous handler (React Native's default crash reporter)\n if (this.previousHandler) {\n this.previousHandler(error, isFatal);\n }\n });\n\n // Unhandled promise rejections\n const tracking = require(\"promise/setimmediate/rejection-tracking\");\n tracking.enable({\n allRejections: true,\n onUnhandled: (_id: number, error: unknown) => {\n const err = error instanceof Error ? error : new Error(String(error));\n this.handler(\"unhandledRejection\", err, { fatal: false });\n },\n });\n\n this.attached = true;\n }\n\n detach(): void {\n if (!this.attached) return;\n\n // Restore the previous error handler\n if (this.previousHandler) {\n ErrorUtils.setGlobalHandler(this.previousHandler);\n this.previousHandler = null;\n }\n\n this.attached = false;\n }\n}\n","import { LogEntry, PulseEvent } from \"./types\";\n\ntype AnalyticsType = \"crash\" | \"session\" | \"screen-view\" | \"api-call\";\n\nexport class PulseBoardClient {\n private host: string;\n private debug: boolean;\n\n constructor(host: string, debug = false) {\n this.host = host.replace(/\\/$/, \"\");\n this.debug = debug;\n }\n\n // ─── Event Ingest ─────────────────────────────────────────────────\n\n async send(event: PulseEvent): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/ingest`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(event),\n });\n\n if (!response.ok) {\n this.log(\n `Failed to send event: ${response.status} ${response.statusText}`,\n );\n return false;\n }\n\n this.log(`Event sent: ${event.type} — ${event.name}`);\n return true;\n } catch (err) {\n this.log(`Network error sending event: ${err}`);\n return false;\n }\n }\n\n async sendBatch(events: PulseEvent[]): Promise<boolean> {\n const chunks = this.chunk(events, 5);\n\n for (const chunk of chunks) {\n await Promise.all(chunk.map((e) => this.send(e)));\n }\n\n return true;\n }\n\n // ─── Analytics Ingest ─────────────────────────────────────────────\n\n async sendAnalytics(\n type: AnalyticsType,\n payload: Record<string, unknown>,\n ): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/analytics/${type}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n this.log(\n `Failed to send analytics: ${response.status} ${response.statusText}`,\n );\n return false;\n }\n\n this.log(`Analytics sent: ${type}`);\n return true;\n } catch (err) {\n this.log(`Network error sending analytics: ${err}`);\n return false;\n }\n }\n\n // ─── Log Entry ─────────────────────────────────────────────\n\n async sendLog(entry: LogEntry): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/logs`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(entry),\n });\n if (!response.ok) {\n this.log(`Failed to send log: ${response.status}`);\n return false;\n }\n return true;\n } catch (err) {\n this.log(`Network error sending log: ${err}`);\n return false;\n }\n }\n\n async sendLogBatch(\n apiKey: string,\n logs: Omit<LogEntry, \"apiKey\">[],\n ): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/logs/batch`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ apiKey, logs }),\n });\n if (!response.ok) {\n this.log(`Failed to send log batch: ${response.status}`);\n return false;\n }\n return true;\n } catch (err) {\n this.log(`Network error sending log batch: ${err}`);\n return false;\n }\n }\n\n // ─── Feedback ─────────────────────────────────────────────────────\n\n async sendFeedback(payload: Record<string, unknown>): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/feedback`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n if (!response.ok) {\n this.log(`Failed to send feedback: ${response.status}`);\n return false;\n }\n this.log(\"Feedback sent\");\n return true;\n } catch (err) {\n this.log(`Network error sending feedback: ${err}`);\n return false;\n }\n }\n\n // ─── Private ──────────────────────────────────────────────────────\n\n private chunk<T>(arr: T[], size: number): T[][] {\n return Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>\n arr.slice(i * size, i * size + size),\n );\n }\n\n private log(message: string): void {\n if (this.debug) {\n console.log(`[PulseBoard] ${message}`);\n }\n }\n}\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\n\nexport type DeviceInfo = {\n model: string;\n manufacturer: string;\n brand: string;\n os: string;\n osVersion: string;\n appVersion: string;\n buildNumber: string;\n bundleId: string;\n screenWidth: number;\n screenHeight: number;\n isTablet: boolean;\n isEmulator: boolean;\n};\n\nexport interface Spec extends TurboModule {\n getDeviceInfo(): Promise<DeviceInfo>;\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>(\"PulseBoardDevice\");\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\n\nexport type NetowrkInfo = {\n type: string;\n isConnected: boolean;\n isWifiEnabled: boolean;\n carrier: string;\n ipAddress: string;\n};\n\nexport interface Spec extends TurboModule {\n getNetworkInfo(): Promise<NetowrkInfo>;\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>(\"PulseBoardNetwork\");\n","import { Dimensions, I18nManager, Platform } from \"react-native\";\nimport NativePulseBoardDevice from \"./specs/NativePulseBoardDevice\";\nimport NativePulseBoardNetwork from \"./specs/NativePulseBoardNetwork\";\nimport {\n AppContext,\n DeviceContext,\n EnrichedContext,\n NetworkContext,\n NetworkType,\n SessionContext,\n UserContext,\n} from \"./types\";\n\nfunction generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 10);\n return `${timestamp}-${random}`;\n}\n\nfunction mapNetworkType(type: string): NetworkType {\n switch (type) {\n case \"wifi\":\n return \"wifi\";\n case \"cellular\":\n return \"cellular\";\n case \"offline\":\n return \"offline\";\n default:\n return \"unknown\";\n }\n}\n\nfunction getTimezone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch {\n return \"unknown\";\n }\n}\n\nfunction getLanguage(): string {\n try {\n return (\n I18nManager.getConstants?.()?.localeIdentifier?.replace(\"_\", \"-\") ??\n Intl.DateTimeFormat().resolvedOptions().locale ??\n \"unknown\"\n );\n } catch {\n return \"unknown\";\n }\n}\n\nexport class ContextCollector {\n private sessionContext: SessionContext;\n private appContext: AppContext;\n private userContext: UserContext = {};\n\n constructor(appContext: AppContext = {}) {\n this.appContext = appContext;\n this.sessionContext = {\n sessionId: generateSessionId(),\n startedAt: new Date().toISOString(),\n };\n }\n\n identify(user: UserContext): void {\n this.userContext = { ...this.userContext, ...user };\n }\n\n clearUser(): void {\n this.userContext = {};\n }\n\n async collect(): Promise<EnrichedContext> {\n const { width, height } = Dimensions.get(\"window\");\n\n // Collect device info — fall back gracefully if native module unavailable\n let deviceInfo = null;\n let networkInfo = null;\n\n try {\n if (NativePulseBoardDevice) {\n deviceInfo = await NativePulseBoardDevice.getDeviceInfo();\n }\n } catch (e) {\n console.warn(\"[PulseBoard] Failed to collect device info:\", e);\n }\n\n try {\n if (NativePulseBoardNetwork) {\n networkInfo = await NativePulseBoardNetwork.getNetworkInfo();\n }\n } catch (e) {\n console.warn(\"[PulseBoard] Failed to collect network info:\", e);\n }\n\n const device: DeviceContext = {\n platform: Platform.OS === \"ios\" ? \"ios\" : \"android\",\n os: deviceInfo?.os ?? (Platform.OS === \"ios\" ? \"iOS\" : \"Android\"),\n osVersion:\n deviceInfo?.osVersion ?? Platform.Version?.toString() ?? \"unknown\",\n model: deviceInfo?.model ?? \"unknown\",\n manufacturer: deviceInfo?.manufacturer ?? \"unknown\",\n brand: deviceInfo?.brand ?? \"unknown\",\n isTablet: deviceInfo?.isTablet ?? false,\n appVersion: deviceInfo?.appVersion ?? \"unknown\",\n buildNumber: deviceInfo?.buildNumber ?? \"unknown\",\n bundleId: deviceInfo?.bundleId ?? \"unknown\",\n screenWidth: deviceInfo?.screenWidth ?? width,\n screenHeight: deviceInfo?.screenHeight ?? height,\n fontScale: Dimensions.get(\"window\").fontScale ?? 1,\n isEmulator: deviceInfo?.isEmulator ?? false,\n language: getLanguage(),\n timezone: getTimezone(),\n };\n\n const network: NetworkContext = {\n type: mapNetworkType(networkInfo?.type ?? \"unknown\"),\n isConnected: networkInfo?.isConnected ?? false,\n isWifiEnabled: networkInfo?.isWifiEnabled ?? false,\n carrier: networkInfo?.carrier ?? \"unknown\",\n ipAddress: networkInfo?.ipAddress ?? \"unknown\",\n };\n\n return {\n app: this.appContext,\n device,\n network,\n session: this.sessionContext,\n user: this.userContext,\n };\n }\n}\n","import { PulseEvent, StorageAdapter } from \"./types\";\n\nconst QUEUE_KEY = \"@pulseboard/event_queue\";\nconst MAX_QUEUE_SIZE = 100;\n\nexport class EventQueue {\n private memoryQueue: PulseEvent[] = [];\n private maxSize: number;\n private _hydrated: boolean = false;\n private storage: StorageAdapter | null = null;\n\n constructor(maxSize = MAX_QUEUE_SIZE, storage?: StorageAdapter) {\n this.maxSize = maxSize;\n this.storage = storage ?? null;\n this.hydrate();\n }\n\n private async hydrate(): Promise<void> {\n try {\n if (this.storage) {\n const raw = await this.storage.getItem(QUEUE_KEY);\n if (raw) {\n const stored = JSON.parse(raw) as PulseEvent[];\n this.memoryQueue = stored.slice(0, this.maxSize);\n }\n }\n } catch {\n // Fall back to in-memory only\n } finally {\n this._hydrated = true;\n }\n }\n\n private async persist(): Promise<void> {\n try {\n if (this.storage) {\n await this.storage.setItem(QUEUE_KEY, JSON.stringify(this.memoryQueue));\n }\n } catch {\n // Non-fatal\n }\n }\n\n enqueue(event: PulseEvent): void {\n if (this.memoryQueue.length >= this.maxSize) this.memoryQueue.shift();\n this.memoryQueue.push(event);\n this.persist();\n }\n\n dequeue(count: number): PulseEvent[] {\n const batch = this.memoryQueue.splice(0, count);\n this.persist();\n return batch;\n }\n\n get size(): number {\n return this.memoryQueue.length;\n }\n get isEmpty(): boolean {\n return this.memoryQueue.length === 0;\n }\n get hydrated(): boolean {\n return this._hydrated;\n }\n\n async clear(): Promise<void> {\n this.memoryQueue = [];\n try {\n if (this.storage) await this.storage.removeItem(QUEUE_KEY);\n } catch {}\n }\n}\n","import { AutoCapture } from \"./auto-capture\";\nimport { PulseBoardClient } from \"./client\";\nimport { ContextCollector } from \"./context\";\nimport { EventQueue } from \"./queue\";\nimport {\n CaptureErrorOptions,\n EnrichedContext,\n FeedbackOptions,\n LogEntry,\n LogLevel,\n LogOptions,\n PulseEvent,\n SDKConfig,\n TrackOptions,\n UserContext,\n} from \"./types\";\n\nclass PulseBoardSDK {\n private config: SDKConfig | null = null;\n private client: PulseBoardClient | null = null;\n private queue: EventQueue | null = null;\n private autoCapture: AutoCapture | null = null;\n private contextCollector: ContextCollector | null = null;\n private flushTimer: ReturnType<typeof setInterval> | null = null;\n private initialized: boolean = false;\n private readonly PULSEBOARD_API: string =\n \"https://pulseboard-production.up.railway.app/\";\n\n // ─── Log queue ────────────────────────────────────────────────────\n private logQueue: Omit<LogEntry, \"apiKey\">[] = [];\n private logFlushTimer: ReturnType<typeof setInterval> | null = null;\n private originalConsole: Partial<typeof console> = {};\n private consoleCapturing: boolean = false;\n\n // ─── Public API ───────────────────────────────────────────────────\n\n init(config: SDKConfig): void {\n if (this.initialized) {\n this.debugLog(\"SDK already initialized — skipping\");\n return;\n }\n\n if (!config.apiKey) {\n throw new Error(\"[PulseBoard] init() requires an apiKey\");\n }\n\n this.config = {\n autoCapture: true,\n debug: false,\n flushInterval: 5000,\n maxQueueSize: 100,\n ...config,\n };\n\n this.client = new PulseBoardClient(this.PULSEBOARD_API, this.config.debug);\n this.queue = new EventQueue(this.config.maxQueueSize, this.config.storage);\n this.contextCollector = new ContextCollector({\n environment: config.environment,\n });\n\n this.completeInit();\n }\n\n private completeInit(): void {\n this.flushTimer = setInterval(\n () => this.flush(),\n this.config!.flushInterval,\n );\n\n if (this.config!.autoCapture) {\n this.autoCapture = new AutoCapture((name, error, context) => {\n this.captureError(error, { payload: context });\n });\n this.autoCapture.attach();\n }\n\n this.initialized = true;\n this.debugLog(`Initialized — host: ${this.PULSEBOARD_API}`);\n }\n\n async getContext(): Promise<EnrichedContext> {\n this.assertInitialized(\"getContext\");\n return this.contextCollector!.collect();\n }\n\n identify(user: UserContext): void {\n this.assertInitialized(\"identify\");\n this.contextCollector!.identify(user);\n this.debugLog(`User identified: ${JSON.stringify(user)}`);\n }\n\n clearUser(): void {\n this.assertInitialized(\"clearUser\");\n this.contextCollector!.clearUser();\n }\n\n track(name: string, options: TrackOptions = {}): void {\n this.assertInitialized(\"track\");\n this.buildAndEnqueue(\n \"event\",\n name,\n options.payload ?? {},\n options.timestamp,\n );\n }\n\n metric(name: string, value: number, options: TrackOptions = {}): void {\n this.assertInitialized(\"metric\");\n this.buildAndEnqueue(\n \"metric\",\n name,\n { value, ...options.payload },\n options.timestamp,\n );\n }\n\n captureError(error: Error, options: CaptureErrorOptions = {}): void {\n this.assertInitialized(\"captureError\");\n this.buildAndEnqueue(\"error\", error.name ?? \"UnknownError\", {\n message: error.message,\n stack: error.stack,\n ...options.payload,\n });\n }\n\n // ─── Logging API ──────────────────────────────────────────────────\n\n log(level: LogLevel, message: string, options: LogOptions = {}): void {\n this.assertInitialized(\"log\");\n this.contextCollector!.collect()\n .then((context) => {\n this.logQueue.push({\n level,\n message,\n meta: options.meta,\n sessionId: context.session.sessionId,\n appVersion: context.device.appVersion,\n timestamp: new Date().toISOString(),\n });\n\n // Flush immediately for errors\n if (level === \"error\") this.flushLogs();\n })\n .catch(() => {});\n }\n\n captureConsole(): void {\n this.assertInitialized(\"captureConsole\");\n if (this.consoleCapturing) return;\n\n this.originalConsole = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n debug: console.debug,\n };\n\n console.log = (...args: unknown[]) => {\n this.originalConsole.log?.(...args);\n this.log(\"info\", args.map(String).join(\" \"));\n };\n\n console.warn = (...args: unknown[]) => {\n this.originalConsole.warn?.(...args);\n this.log(\"warn\", args.map(String).join(\" \"));\n };\n\n console.error = (...args: unknown[]) => {\n this.originalConsole.error?.(...args);\n this.log(\"error\", args.map(String).join(\" \"));\n };\n\n console.debug = (...args: unknown[]) => {\n this.originalConsole.debug?.(...args);\n this.log(\"debug\", args.map(String).join(\" \"));\n };\n\n this.logFlushTimer = setInterval(() => this.flushLogs(), 10000);\n this.consoleCapturing = true;\n this.debugLog(\"Console capture enabled\");\n }\n\n releaseConsole(): void {\n if (!this.consoleCapturing) return;\n\n if (this.originalConsole.log) console.log = this.originalConsole.log;\n if (this.originalConsole.warn) console.warn = this.originalConsole.warn;\n if (this.originalConsole.error) console.error = this.originalConsole.error;\n if (this.originalConsole.debug) console.debug = this.originalConsole.debug;\n\n if (this.logFlushTimer) {\n clearInterval(this.logFlushTimer);\n this.logFlushTimer = null;\n }\n\n this.originalConsole = {};\n this.consoleCapturing = false;\n }\n\n async flushLogs(): Promise<void> {\n if (!this.client || !this.config || this.logQueue.length === 0) return;\n const batch = this.logQueue.splice(0, this.logQueue.length);\n await this.client.sendLogBatch(this.config.apiKey, batch);\n }\n\n // ─── Analytics API ────────────────────────────────────────────────\n\n startSession(): void {\n this.assertInitialized(\"startSession\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"session\", {\n apiKey: this.config?.apiKey,\n sessionId: context.session.sessionId,\n startedAt: context.session.startedAt,\n context,\n });\n this.debugLog(`Session started: ${context.session.sessionId}`);\n })\n .catch((err) => this.debugLog(`Failed to start session: ${err}`));\n }\n\n endSession(duration?: number): void {\n this.assertInitialized(\"endSession\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"session\", {\n apiKey: this.config?.apiKey,\n sessionId: context.session.sessionId,\n startedAt: context.session.startedAt,\n endedAt: new Date().toISOString(),\n duration,\n context,\n });\n this.flush();\n this.debugLog(`Session ended: ${context.session.sessionId}`);\n })\n .catch((err) => this.debugLog(`Failed to end session: ${err}`));\n }\n\n trackScreen(screenName: string, loadTime?: number): void {\n this.assertInitialized(\"trackScreen\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"screen-view\", {\n apiKey: this.config?.apiKey,\n screenName,\n loadTime,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(`Screen tracked: ${screenName}`);\n })\n .catch((err) => this.debugLog(`Failed to track screen: ${err}`));\n }\n\n trackApiCall(\n endpoint: string,\n httpMethod: string,\n statusCode: number,\n duration: number,\n payloadSize?: number,\n ): void {\n this.assertInitialized(\"trackApiCall\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"api-call\", {\n apiKey: this.config?.apiKey,\n endpoint,\n httpMethod,\n statusCode,\n duration,\n payloadSize,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(\n `API call tracked: ${httpMethod} ${endpoint} ${statusCode}`,\n );\n })\n .catch((err) => this.debugLog(`Failed to track API call: ${err}`));\n }\n\n trackCrash(error: Error, isFatal = false): void {\n this.assertInitialized(\"trackCrash\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"crash\", {\n apiKey: this.config?.apiKey,\n errorName: error.name,\n errorMessage: error.message,\n stackTrace: error.stack ?? \"\",\n isFatal,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(`Crash tracked: ${error.name} — fatal: ${isFatal}`);\n })\n .catch((err) => this.debugLog(`Failed to track crash: ${err}`));\n }\n\n feedback(message: string, options: FeedbackOptions = {}): void {\n this.assertInitialized(\"feedback\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendFeedback({\n apiKey: this.config?.apiKey,\n type: options.type ?? \"general\",\n message,\n meta: options.meta,\n userEmail: options.userEmail,\n userName: options.userName,\n screenshot: options.screenshot,\n sessionId: context.session.sessionId,\n appVersion: context.device.appVersion,\n });\n this.debugLog(`Feedback sent: ${options.type ?? \"general\"}`);\n })\n .catch((err) => this.debugLog(`Failed to send feedback: ${err}`));\n }\n\n // ─── Flush & Destroy ──────────────────────────────────────────────\n\n async flush(): Promise<void> {\n if (!this.queue || !this.client) return;\n\n // Wait up to 500ms for hydration before first flush\n if (!this.queue.hydrated) {\n await new Promise<void>((resolve) => {\n const interval = setInterval(() => {\n if (this.queue?.hydrated) {\n clearInterval(interval);\n resolve();\n }\n }, 50);\n setTimeout(() => {\n clearInterval(interval);\n resolve();\n }, 500);\n });\n }\n\n if (this.queue.isEmpty) return;\n\n const events = this.queue.dequeue(10);\n this.debugLog(`Flushing ${events.length} event(s)`);\n await this.client.sendBatch(events);\n }\n\n destroy(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n this.releaseConsole();\n this.autoCapture?.detach();\n this.queue?.clear();\n this.logQueue = [];\n\n this.initialized = false;\n this.config = null;\n this.client = null;\n this.queue = null;\n this.contextCollector = null;\n\n this.debugLog(\"SDK destroyed\");\n }\n\n // ─── Private ──────────────────────────────────────────────────────\n\n private buildAndEnqueue(\n type: \"event\" | \"metric\" | \"error\",\n name: string,\n payload: Record<string, unknown>,\n timestamp?: string,\n ): void {\n this.contextCollector!.collect()\n .then((context) => {\n const event: PulseEvent = {\n apiKey: this.config?.apiKey!,\n type,\n name,\n payload,\n timestamp: timestamp ?? new Date().toISOString(),\n context,\n };\n this.queue!.enqueue(event);\n this.debugLog(`Queued: ${type} — ${name}`);\n if (type === \"error\") this.flush();\n })\n .catch((err) => this.debugLog(`Failed to collect context: ${err}`));\n }\n\n private assertInitialized(method: string): void {\n if (!this.initialized) {\n throw new Error(`PulseBoard.${method}() called before PulseBoard.init()`);\n }\n }\n\n private debugLog(message: string): void {\n if (this.config?.debug) {\n console.log(`[PulseBoard] ${message}`);\n }\n }\n}\n\nexport const PulseBoard = new PulseBoardSDK();\n\nexport type {\n AppContext,\n CaptureErrorOptions,\n DeviceContext,\n EnrichedContext,\n EventType,\n LogEntry,\n LogLevel,\n LogOptions,\n NetworkContext,\n PulseEvent,\n SDKConfig,\n SessionContext,\n TrackOptions,\n UserContext,\n} from \"./types\";\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { TurboModuleRegistry, Dimensions, Platform, I18nManager } from 'react-native';
|
|
2
|
-
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
3
2
|
|
|
4
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
4
|
var __commonJS = (cb, mod) => function __require() {
|
|
@@ -546,40 +545,43 @@ var ContextCollector = class {
|
|
|
546
545
|
};
|
|
547
546
|
}
|
|
548
547
|
};
|
|
548
|
+
|
|
549
|
+
// src/queue.ts
|
|
549
550
|
var QUEUE_KEY = "@pulseboard/event_queue";
|
|
550
551
|
var MAX_QUEUE_SIZE = 100;
|
|
551
552
|
var EventQueue = class {
|
|
552
|
-
constructor(maxSize = MAX_QUEUE_SIZE) {
|
|
553
|
+
constructor(maxSize = MAX_QUEUE_SIZE, storage) {
|
|
553
554
|
this.memoryQueue = [];
|
|
554
555
|
this._hydrated = false;
|
|
556
|
+
this.storage = null;
|
|
555
557
|
this.maxSize = maxSize;
|
|
558
|
+
this.storage = storage ?? null;
|
|
556
559
|
this.hydrate();
|
|
557
560
|
}
|
|
558
|
-
// ─── Hydrate from storage on init ─────────────────────────────────
|
|
559
561
|
async hydrate() {
|
|
560
562
|
try {
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
563
|
+
if (this.storage) {
|
|
564
|
+
const raw = await this.storage.getItem(QUEUE_KEY);
|
|
565
|
+
if (raw) {
|
|
566
|
+
const stored = JSON.parse(raw);
|
|
567
|
+
this.memoryQueue = stored.slice(0, this.maxSize);
|
|
568
|
+
}
|
|
565
569
|
}
|
|
566
570
|
} catch {
|
|
567
571
|
} finally {
|
|
568
572
|
this._hydrated = true;
|
|
569
573
|
}
|
|
570
574
|
}
|
|
571
|
-
// ─── Persist to storage ────────────────────────────────────────────
|
|
572
575
|
async persist() {
|
|
573
576
|
try {
|
|
574
|
-
|
|
577
|
+
if (this.storage) {
|
|
578
|
+
await this.storage.setItem(QUEUE_KEY, JSON.stringify(this.memoryQueue));
|
|
579
|
+
}
|
|
575
580
|
} catch {
|
|
576
581
|
}
|
|
577
582
|
}
|
|
578
|
-
// ─── Public API ────────────────────────────────────────────────────
|
|
579
583
|
enqueue(event) {
|
|
580
|
-
if (this.memoryQueue.length >= this.maxSize)
|
|
581
|
-
this.memoryQueue.shift();
|
|
582
|
-
}
|
|
584
|
+
if (this.memoryQueue.length >= this.maxSize) this.memoryQueue.shift();
|
|
583
585
|
this.memoryQueue.push(event);
|
|
584
586
|
this.persist();
|
|
585
587
|
}
|
|
@@ -600,7 +602,7 @@ var EventQueue = class {
|
|
|
600
602
|
async clear() {
|
|
601
603
|
this.memoryQueue = [];
|
|
602
604
|
try {
|
|
603
|
-
await
|
|
605
|
+
if (this.storage) await this.storage.removeItem(QUEUE_KEY);
|
|
604
606
|
} catch {
|
|
605
607
|
}
|
|
606
608
|
}
|
|
@@ -623,62 +625,28 @@ var PulseBoardSDK = class {
|
|
|
623
625
|
this.originalConsole = {};
|
|
624
626
|
this.consoleCapturing = false;
|
|
625
627
|
}
|
|
626
|
-
get apiKey() {
|
|
627
|
-
return this.config?.apiKey ?? "";
|
|
628
|
-
}
|
|
629
628
|
// ─── Public API ───────────────────────────────────────────────────
|
|
630
629
|
init(config) {
|
|
631
630
|
if (this.initialized) {
|
|
632
631
|
this.debugLog("SDK already initialized \u2014 skipping");
|
|
633
632
|
return;
|
|
634
633
|
}
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
if (!hasDirectKey && !hasIdentifiers) {
|
|
638
|
-
throw new Error(
|
|
639
|
-
"[PulseBoard] init() requires either apiKey or (organisation + product + project)"
|
|
640
|
-
);
|
|
634
|
+
if (!config.apiKey) {
|
|
635
|
+
throw new Error("[PulseBoard] init() requires an apiKey");
|
|
641
636
|
}
|
|
642
637
|
this.config = {
|
|
643
638
|
autoCapture: true,
|
|
644
639
|
debug: false,
|
|
645
640
|
flushInterval: 5e3,
|
|
646
641
|
maxQueueSize: 100,
|
|
647
|
-
...config
|
|
648
|
-
apiKey: config.apiKey ?? ""
|
|
649
|
-
// resolved below if using identifiers
|
|
642
|
+
...config
|
|
650
643
|
};
|
|
651
644
|
this.client = new PulseBoardClient(this.PULSEBOARD_API, this.config.debug);
|
|
652
|
-
this.queue = new EventQueue(this.config.maxQueueSize);
|
|
645
|
+
this.queue = new EventQueue(this.config.maxQueueSize, this.config.storage);
|
|
653
646
|
this.contextCollector = new ContextCollector({
|
|
654
647
|
environment: config.environment
|
|
655
648
|
});
|
|
656
|
-
|
|
657
|
-
this.resolveApiKey(
|
|
658
|
-
config.organisation,
|
|
659
|
-
config.product,
|
|
660
|
-
config.project
|
|
661
|
-
);
|
|
662
|
-
} else {
|
|
663
|
-
this.completeInit();
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
async resolveApiKey(organisation, product, project) {
|
|
667
|
-
try {
|
|
668
|
-
const response = await fetch(
|
|
669
|
-
`${this.PULSEBOARD_API}sdk/resolve?organisation=${encodeURIComponent(organisation)}&product=${encodeURIComponent(product)}&project=${encodeURIComponent(project)}`
|
|
670
|
-
);
|
|
671
|
-
if (!response.ok) {
|
|
672
|
-
throw new Error(
|
|
673
|
-
`[PulseBoard] Could not resolve project. Check your organisation, product and project values.`
|
|
674
|
-
);
|
|
675
|
-
}
|
|
676
|
-
const data = await response.json();
|
|
677
|
-
this.config.apiKey = data.data.apiKey;
|
|
678
|
-
this.completeInit();
|
|
679
|
-
} catch (err) {
|
|
680
|
-
console.error("[PulseBoard] Failed to resolve API key:", err);
|
|
681
|
-
}
|
|
649
|
+
this.completeInit();
|
|
682
650
|
}
|
|
683
651
|
completeInit() {
|
|
684
652
|
this.flushTimer = setInterval(
|
|
@@ -794,14 +762,14 @@ var PulseBoardSDK = class {
|
|
|
794
762
|
async flushLogs() {
|
|
795
763
|
if (!this.client || !this.config || this.logQueue.length === 0) return;
|
|
796
764
|
const batch = this.logQueue.splice(0, this.logQueue.length);
|
|
797
|
-
await this.client.sendLogBatch(this.apiKey, batch);
|
|
765
|
+
await this.client.sendLogBatch(this.config.apiKey, batch);
|
|
798
766
|
}
|
|
799
767
|
// ─── Analytics API ────────────────────────────────────────────────
|
|
800
768
|
startSession() {
|
|
801
769
|
this.assertInitialized("startSession");
|
|
802
770
|
this.contextCollector.collect().then((context) => {
|
|
803
771
|
this.client.sendAnalytics("session", {
|
|
804
|
-
apiKey: this.apiKey,
|
|
772
|
+
apiKey: this.config?.apiKey,
|
|
805
773
|
sessionId: context.session.sessionId,
|
|
806
774
|
startedAt: context.session.startedAt,
|
|
807
775
|
context
|
|
@@ -813,7 +781,7 @@ var PulseBoardSDK = class {
|
|
|
813
781
|
this.assertInitialized("endSession");
|
|
814
782
|
this.contextCollector.collect().then((context) => {
|
|
815
783
|
this.client.sendAnalytics("session", {
|
|
816
|
-
apiKey: this.apiKey,
|
|
784
|
+
apiKey: this.config?.apiKey,
|
|
817
785
|
sessionId: context.session.sessionId,
|
|
818
786
|
startedAt: context.session.startedAt,
|
|
819
787
|
endedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -828,7 +796,7 @@ var PulseBoardSDK = class {
|
|
|
828
796
|
this.assertInitialized("trackScreen");
|
|
829
797
|
this.contextCollector.collect().then((context) => {
|
|
830
798
|
this.client.sendAnalytics("screen-view", {
|
|
831
|
-
apiKey: this.apiKey,
|
|
799
|
+
apiKey: this.config?.apiKey,
|
|
832
800
|
screenName,
|
|
833
801
|
loadTime,
|
|
834
802
|
sessionId: context.session.sessionId,
|
|
@@ -841,7 +809,7 @@ var PulseBoardSDK = class {
|
|
|
841
809
|
this.assertInitialized("trackApiCall");
|
|
842
810
|
this.contextCollector.collect().then((context) => {
|
|
843
811
|
this.client.sendAnalytics("api-call", {
|
|
844
|
-
apiKey: this.apiKey,
|
|
812
|
+
apiKey: this.config?.apiKey,
|
|
845
813
|
endpoint,
|
|
846
814
|
httpMethod,
|
|
847
815
|
statusCode,
|
|
@@ -859,7 +827,7 @@ var PulseBoardSDK = class {
|
|
|
859
827
|
this.assertInitialized("trackCrash");
|
|
860
828
|
this.contextCollector.collect().then((context) => {
|
|
861
829
|
this.client.sendAnalytics("crash", {
|
|
862
|
-
apiKey: this.apiKey,
|
|
830
|
+
apiKey: this.config?.apiKey,
|
|
863
831
|
errorName: error.name,
|
|
864
832
|
errorMessage: error.message,
|
|
865
833
|
stackTrace: error.stack ?? "",
|
|
@@ -874,7 +842,7 @@ var PulseBoardSDK = class {
|
|
|
874
842
|
this.assertInitialized("feedback");
|
|
875
843
|
this.contextCollector.collect().then((context) => {
|
|
876
844
|
this.client.sendFeedback({
|
|
877
|
-
apiKey: this.apiKey,
|
|
845
|
+
apiKey: this.config?.apiKey,
|
|
878
846
|
type: options.type ?? "general",
|
|
879
847
|
message,
|
|
880
848
|
meta: options.meta,
|
|
@@ -929,7 +897,7 @@ var PulseBoardSDK = class {
|
|
|
929
897
|
buildAndEnqueue(type, name, payload, timestamp) {
|
|
930
898
|
this.contextCollector.collect().then((context) => {
|
|
931
899
|
const event = {
|
|
932
|
-
apiKey: this.apiKey,
|
|
900
|
+
apiKey: this.config?.apiKey,
|
|
933
901
|
type,
|
|
934
902
|
name,
|
|
935
903
|
payload,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/promise/setimmediate/core.js","../node_modules/promise/setimmediate/rejection-tracking.js","../src/auto-capture.ts","../src/client.ts","../src/specs/NativePulseBoardDevice.ts","../src/specs/NativePulseBoardNetwork.ts","../src/context.ts","../src/queue.ts","../src/index.ts"],"names":["exports","Promise","resolve","reject","id","TurboModuleRegistry"],"mappings":"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","file":"index.mjs","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}","type ErrorHandler = (\n name: string,\n error: Error,\n context?: Record<string, unknown>,\n) => void;\n\nexport class AutoCapture {\n private handler: ErrorHandler;\n private attached: boolean = false;\n private previousHandler: ((error: Error, isFatal?: boolean) => void) | null =\n null;\n\n constructor(handler: ErrorHandler) {\n this.handler = handler;\n }\n\n attach(): void {\n if (this.attached) return;\n\n // React Native's global error handler - catches all unhandled JS errors\n this.previousHandler = ErrorUtils.getGlobalHandler();\n\n ErrorUtils.setGlobalHandler((error: Error, isFatal?: boolean) => {\n this.handler(\"uncaughtException\", error, { isFatal: isFatal ?? false });\n\n // Always call the previous handler (React Native's default crash reporter)\n if (this.previousHandler) {\n this.previousHandler(error, isFatal);\n }\n });\n\n // Unhandled promise rejections\n const tracking = require(\"promise/setimmediate/rejection-tracking\");\n tracking.enable({\n allRejections: true,\n onUnhandled: (_id: number, error: unknown) => {\n const err = error instanceof Error ? error : new Error(String(error));\n this.handler(\"unhandledRejection\", err, { fatal: false });\n },\n });\n\n this.attached = true;\n }\n\n detach(): void {\n if (!this.attached) return;\n\n // Restore the previous error handler\n if (this.previousHandler) {\n ErrorUtils.setGlobalHandler(this.previousHandler);\n this.previousHandler = null;\n }\n\n this.attached = false;\n }\n}\n","import { LogEntry, PulseEvent } from \"./types\";\n\ntype AnalyticsType = \"crash\" | \"session\" | \"screen-view\" | \"api-call\";\n\nexport class PulseBoardClient {\n private host: string;\n private debug: boolean;\n\n constructor(host: string, debug = false) {\n this.host = host.replace(/\\/$/, \"\");\n this.debug = debug;\n }\n\n // ─── Event Ingest ─────────────────────────────────────────────────\n\n async send(event: PulseEvent): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/ingest`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(event),\n });\n\n if (!response.ok) {\n this.log(\n `Failed to send event: ${response.status} ${response.statusText}`,\n );\n return false;\n }\n\n this.log(`Event sent: ${event.type} — ${event.name}`);\n return true;\n } catch (err) {\n this.log(`Network error sending event: ${err}`);\n return false;\n }\n }\n\n async sendBatch(events: PulseEvent[]): Promise<boolean> {\n const chunks = this.chunk(events, 5);\n\n for (const chunk of chunks) {\n await Promise.all(chunk.map((e) => this.send(e)));\n }\n\n return true;\n }\n\n // ─── Analytics Ingest ─────────────────────────────────────────────\n\n async sendAnalytics(\n type: AnalyticsType,\n payload: Record<string, unknown>,\n ): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/analytics/${type}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n this.log(\n `Failed to send analytics: ${response.status} ${response.statusText}`,\n );\n return false;\n }\n\n this.log(`Analytics sent: ${type}`);\n return true;\n } catch (err) {\n this.log(`Network error sending analytics: ${err}`);\n return false;\n }\n }\n\n // ─── Log Entry ─────────────────────────────────────────────\n\n async sendLog(entry: LogEntry): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/logs`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(entry),\n });\n if (!response.ok) {\n this.log(`Failed to send log: ${response.status}`);\n return false;\n }\n return true;\n } catch (err) {\n this.log(`Network error sending log: ${err}`);\n return false;\n }\n }\n\n async sendLogBatch(\n apiKey: string,\n logs: Omit<LogEntry, \"apiKey\">[],\n ): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/logs/batch`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ apiKey, logs }),\n });\n if (!response.ok) {\n this.log(`Failed to send log batch: ${response.status}`);\n return false;\n }\n return true;\n } catch (err) {\n this.log(`Network error sending log batch: ${err}`);\n return false;\n }\n }\n\n // ─── Feedback ─────────────────────────────────────────────────────\n\n async sendFeedback(payload: Record<string, unknown>): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/feedback`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n if (!response.ok) {\n this.log(`Failed to send feedback: ${response.status}`);\n return false;\n }\n this.log(\"Feedback sent\");\n return true;\n } catch (err) {\n this.log(`Network error sending feedback: ${err}`);\n return false;\n }\n }\n\n // ─── Private ──────────────────────────────────────────────────────\n\n private chunk<T>(arr: T[], size: number): T[][] {\n return Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>\n arr.slice(i * size, i * size + size),\n );\n }\n\n private log(message: string): void {\n if (this.debug) {\n console.log(`[PulseBoard] ${message}`);\n }\n }\n}\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\n\nexport type DeviceInfo = {\n model: string;\n manufacturer: string;\n brand: string;\n os: string;\n osVersion: string;\n appVersion: string;\n buildNumber: string;\n bundleId: string;\n screenWidth: number;\n screenHeight: number;\n isTablet: boolean;\n isEmulator: boolean;\n};\n\nexport interface Spec extends TurboModule {\n getDeviceInfo(): Promise<DeviceInfo>;\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>(\"PulseBoardDevice\");\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\n\nexport type NetowrkInfo = {\n type: string;\n isConnected: boolean;\n isWifiEnabled: boolean;\n carrier: string;\n ipAddress: string;\n};\n\nexport interface Spec extends TurboModule {\n getNetworkInfo(): Promise<NetowrkInfo>;\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>(\"PulseBoardNetwork\");\n","import { Dimensions, I18nManager, Platform } from \"react-native\";\nimport NativePulseBoardDevice from \"./specs/NativePulseBoardDevice\";\nimport NativePulseBoardNetwork from \"./specs/NativePulseBoardNetwork\";\nimport {\n AppContext,\n DeviceContext,\n EnrichedContext,\n NetworkContext,\n NetworkType,\n SessionContext,\n UserContext,\n} from \"./types\";\n\nfunction generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 10);\n return `${timestamp}-${random}`;\n}\n\nfunction mapNetworkType(type: string): NetworkType {\n switch (type) {\n case \"wifi\":\n return \"wifi\";\n case \"cellular\":\n return \"cellular\";\n case \"offline\":\n return \"offline\";\n default:\n return \"unknown\";\n }\n}\n\nfunction getTimezone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch {\n return \"unknown\";\n }\n}\n\nfunction getLanguage(): string {\n try {\n return (\n I18nManager.getConstants?.()?.localeIdentifier?.replace(\"_\", \"-\") ??\n Intl.DateTimeFormat().resolvedOptions().locale ??\n \"unknown\"\n );\n } catch {\n return \"unknown\";\n }\n}\n\nexport class ContextCollector {\n private sessionContext: SessionContext;\n private appContext: AppContext;\n private userContext: UserContext = {};\n\n constructor(appContext: AppContext = {}) {\n this.appContext = appContext;\n this.sessionContext = {\n sessionId: generateSessionId(),\n startedAt: new Date().toISOString(),\n };\n }\n\n identify(user: UserContext): void {\n this.userContext = { ...this.userContext, ...user };\n }\n\n clearUser(): void {\n this.userContext = {};\n }\n\n async collect(): Promise<EnrichedContext> {\n const { width, height } = Dimensions.get(\"window\");\n\n // Collect device info — fall back gracefully if native module unavailable\n let deviceInfo = null;\n let networkInfo = null;\n\n try {\n if (NativePulseBoardDevice) {\n deviceInfo = await NativePulseBoardDevice.getDeviceInfo();\n }\n } catch (e) {\n console.warn(\"[PulseBoard] Failed to collect device info:\", e);\n }\n\n try {\n if (NativePulseBoardNetwork) {\n networkInfo = await NativePulseBoardNetwork.getNetworkInfo();\n }\n } catch (e) {\n console.warn(\"[PulseBoard] Failed to collect network info:\", e);\n }\n\n const device: DeviceContext = {\n platform: Platform.OS === \"ios\" ? \"ios\" : \"android\",\n os: deviceInfo?.os ?? (Platform.OS === \"ios\" ? \"iOS\" : \"Android\"),\n osVersion:\n deviceInfo?.osVersion ?? Platform.Version?.toString() ?? \"unknown\",\n model: deviceInfo?.model ?? \"unknown\",\n manufacturer: deviceInfo?.manufacturer ?? \"unknown\",\n brand: deviceInfo?.brand ?? \"unknown\",\n isTablet: deviceInfo?.isTablet ?? false,\n appVersion: deviceInfo?.appVersion ?? \"unknown\",\n buildNumber: deviceInfo?.buildNumber ?? \"unknown\",\n bundleId: deviceInfo?.bundleId ?? \"unknown\",\n screenWidth: deviceInfo?.screenWidth ?? width,\n screenHeight: deviceInfo?.screenHeight ?? height,\n fontScale: Dimensions.get(\"window\").fontScale ?? 1,\n isEmulator: deviceInfo?.isEmulator ?? false,\n language: getLanguage(),\n timezone: getTimezone(),\n };\n\n const network: NetworkContext = {\n type: mapNetworkType(networkInfo?.type ?? \"unknown\"),\n isConnected: networkInfo?.isConnected ?? false,\n isWifiEnabled: networkInfo?.isWifiEnabled ?? false,\n carrier: networkInfo?.carrier ?? \"unknown\",\n ipAddress: networkInfo?.ipAddress ?? \"unknown\",\n };\n\n return {\n app: this.appContext,\n device,\n network,\n session: this.sessionContext,\n user: this.userContext,\n };\n }\n}\n","import AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport { PulseEvent } from \"./types\";\n\nconst QUEUE_KEY = \"@pulseboard/event_queue\";\nconst MAX_QUEUE_SIZE = 100;\n\nexport class EventQueue {\n private memoryQueue: PulseEvent[] = [];\n private maxSize: number;\n private _hydrated: boolean = false;\n\n constructor(maxSize = MAX_QUEUE_SIZE) {\n this.maxSize = maxSize;\n this.hydrate();\n }\n\n // ─── Hydrate from storage on init ─────────────────────────────────\n\n private async hydrate(): Promise<void> {\n try {\n const raw = await AsyncStorage.getItem(QUEUE_KEY);\n if (raw) {\n const stored = JSON.parse(raw) as PulseEvent[];\n this.memoryQueue = stored.slice(0, this.maxSize);\n }\n } catch {\n // Storage unavailable — fall back to in-memory only\n } finally {\n this._hydrated = true;\n }\n }\n\n // ─── Persist to storage ────────────────────────────────────────────\n\n private async persist(): Promise<void> {\n try {\n await AsyncStorage.setItem(QUEUE_KEY, JSON.stringify(this.memoryQueue));\n } catch {\n // Non-fatal — events still in memory\n }\n }\n\n // ─── Public API ────────────────────────────────────────────────────\n\n enqueue(event: PulseEvent): void {\n if (this.memoryQueue.length >= this.maxSize) {\n this.memoryQueue.shift(); // Drop oldest\n }\n this.memoryQueue.push(event);\n this.persist();\n }\n\n dequeue(count: number): PulseEvent[] {\n const batch = this.memoryQueue.splice(0, count);\n this.persist();\n return batch;\n }\n\n get size(): number {\n return this.memoryQueue.length;\n }\n\n get isEmpty(): boolean {\n return this.memoryQueue.length === 0;\n }\n\n get hydrated(): boolean {\n return this._hydrated;\n }\n\n async clear(): Promise<void> {\n this.memoryQueue = [];\n try {\n await AsyncStorage.removeItem(QUEUE_KEY);\n } catch {\n // Non-fatal\n }\n }\n}\n","import { AutoCapture } from \"./auto-capture\";\nimport { PulseBoardClient } from \"./client\";\nimport { ContextCollector } from \"./context\";\nimport { EventQueue } from \"./queue\";\nimport {\n CaptureErrorOptions,\n EnrichedContext,\n FeedbackOptions,\n LogEntry,\n LogLevel,\n LogOptions,\n PulseEvent,\n SDKConfig,\n TrackOptions,\n UserContext,\n} from \"./types\";\n\nclass PulseBoardSDK {\n private config: SDKConfig | null = null;\n private client: PulseBoardClient | null = null;\n private queue: EventQueue | null = null;\n private autoCapture: AutoCapture | null = null;\n private contextCollector: ContextCollector | null = null;\n private flushTimer: ReturnType<typeof setInterval> | null = null;\n private initialized: boolean = false;\n private readonly PULSEBOARD_API: string =\n \"https://pulseboard-production.up.railway.app/\";\n\n // ─── Log queue ────────────────────────────────────────────────────\n private logQueue: Omit<LogEntry, \"apiKey\">[] = [];\n private logFlushTimer: ReturnType<typeof setInterval> | null = null;\n private originalConsole: Partial<typeof console> = {};\n private consoleCapturing: boolean = false;\n\n private get apiKey(): string {\n return this.config?.apiKey ?? \"\";\n }\n\n // ─── Public API ───────────────────────────────────────────────────\n\n init(config: SDKConfig): void {\n if (this.initialized) {\n this.debugLog(\"SDK already initialized — skipping\");\n return;\n }\n\n // Validate config\n const hasDirectKey = !!config.apiKey;\n const hasIdentifiers = !!(\n config.organisation &&\n config.product &&\n config.project\n );\n\n if (!hasDirectKey && !hasIdentifiers) {\n throw new Error(\n \"[PulseBoard] init() requires either apiKey or (organisation + product + project)\",\n );\n }\n\n this.config = {\n autoCapture: true,\n debug: false,\n flushInterval: 5000,\n maxQueueSize: 100,\n ...config,\n apiKey: config.apiKey ?? \"\", // resolved below if using identifiers\n };\n\n this.client = new PulseBoardClient(this.PULSEBOARD_API, this.config.debug);\n this.queue = new EventQueue(this.config.maxQueueSize);\n this.contextCollector = new ContextCollector({\n environment: config.environment,\n });\n\n // Resolve API key from identifiers if not provided directly\n if (!hasDirectKey && hasIdentifiers) {\n this.resolveApiKey(\n config.organisation!,\n config.product!,\n config.project!,\n );\n } else {\n this.completeInit();\n }\n }\n\n private async resolveApiKey(\n organisation: string,\n product: string,\n project: string,\n ): Promise<void> {\n try {\n const response = await fetch(\n `${this.PULSEBOARD_API}sdk/resolve?organisation=${encodeURIComponent(organisation)}&product=${encodeURIComponent(product)}&project=${encodeURIComponent(project)}`,\n );\n\n if (!response.ok) {\n throw new Error(\n `[PulseBoard] Could not resolve project. Check your organisation, product and project values.`,\n );\n }\n\n const data = (await response.json()) as {\n success: boolean;\n data: { apiKey: string };\n };\n this.config!.apiKey = data.data.apiKey;\n this.completeInit();\n } catch (err) {\n console.error(\"[PulseBoard] Failed to resolve API key:\", err);\n }\n }\n\n private completeInit(): void {\n this.flushTimer = setInterval(\n () => this.flush(),\n this.config!.flushInterval,\n );\n\n if (this.config!.autoCapture) {\n this.autoCapture = new AutoCapture((name, error, context) => {\n this.captureError(error, { payload: context });\n });\n this.autoCapture.attach();\n }\n\n this.initialized = true;\n this.debugLog(`Initialized — host: ${this.PULSEBOARD_API}`);\n }\n\n async getContext(): Promise<EnrichedContext> {\n this.assertInitialized(\"getContext\");\n return this.contextCollector!.collect();\n }\n\n identify(user: UserContext): void {\n this.assertInitialized(\"identify\");\n this.contextCollector!.identify(user);\n this.debugLog(`User identified: ${JSON.stringify(user)}`);\n }\n\n clearUser(): void {\n this.assertInitialized(\"clearUser\");\n this.contextCollector!.clearUser();\n }\n\n track(name: string, options: TrackOptions = {}): void {\n this.assertInitialized(\"track\");\n this.buildAndEnqueue(\n \"event\",\n name,\n options.payload ?? {},\n options.timestamp,\n );\n }\n\n metric(name: string, value: number, options: TrackOptions = {}): void {\n this.assertInitialized(\"metric\");\n this.buildAndEnqueue(\n \"metric\",\n name,\n { value, ...options.payload },\n options.timestamp,\n );\n }\n\n captureError(error: Error, options: CaptureErrorOptions = {}): void {\n this.assertInitialized(\"captureError\");\n this.buildAndEnqueue(\"error\", error.name ?? \"UnknownError\", {\n message: error.message,\n stack: error.stack,\n ...options.payload,\n });\n }\n\n // ─── Logging API ──────────────────────────────────────────────────\n\n log(level: LogLevel, message: string, options: LogOptions = {}): void {\n this.assertInitialized(\"log\");\n this.contextCollector!.collect()\n .then((context) => {\n this.logQueue.push({\n level,\n message,\n meta: options.meta,\n sessionId: context.session.sessionId,\n appVersion: context.device.appVersion,\n timestamp: new Date().toISOString(),\n });\n\n // Flush immediately for errors\n if (level === \"error\") this.flushLogs();\n })\n .catch(() => {});\n }\n\n captureConsole(): void {\n this.assertInitialized(\"captureConsole\");\n if (this.consoleCapturing) return;\n\n this.originalConsole = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n debug: console.debug,\n };\n\n console.log = (...args: unknown[]) => {\n this.originalConsole.log?.(...args);\n this.log(\"info\", args.map(String).join(\" \"));\n };\n\n console.warn = (...args: unknown[]) => {\n this.originalConsole.warn?.(...args);\n this.log(\"warn\", args.map(String).join(\" \"));\n };\n\n console.error = (...args: unknown[]) => {\n this.originalConsole.error?.(...args);\n this.log(\"error\", args.map(String).join(\" \"));\n };\n\n console.debug = (...args: unknown[]) => {\n this.originalConsole.debug?.(...args);\n this.log(\"debug\", args.map(String).join(\" \"));\n };\n\n this.logFlushTimer = setInterval(() => this.flushLogs(), 10000);\n this.consoleCapturing = true;\n this.debugLog(\"Console capture enabled\");\n }\n\n releaseConsole(): void {\n if (!this.consoleCapturing) return;\n\n if (this.originalConsole.log) console.log = this.originalConsole.log;\n if (this.originalConsole.warn) console.warn = this.originalConsole.warn;\n if (this.originalConsole.error) console.error = this.originalConsole.error;\n if (this.originalConsole.debug) console.debug = this.originalConsole.debug;\n\n if (this.logFlushTimer) {\n clearInterval(this.logFlushTimer);\n this.logFlushTimer = null;\n }\n\n this.originalConsole = {};\n this.consoleCapturing = false;\n }\n\n async flushLogs(): Promise<void> {\n if (!this.client || !this.config || this.logQueue.length === 0) return;\n const batch = this.logQueue.splice(0, this.logQueue.length);\n await this.client.sendLogBatch(this.apiKey, batch);\n }\n\n // ─── Analytics API ────────────────────────────────────────────────\n\n startSession(): void {\n this.assertInitialized(\"startSession\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"session\", {\n apiKey: this.apiKey,\n sessionId: context.session.sessionId,\n startedAt: context.session.startedAt,\n context,\n });\n this.debugLog(`Session started: ${context.session.sessionId}`);\n })\n .catch((err) => this.debugLog(`Failed to start session: ${err}`));\n }\n\n endSession(duration?: number): void {\n this.assertInitialized(\"endSession\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"session\", {\n apiKey: this.apiKey,\n sessionId: context.session.sessionId,\n startedAt: context.session.startedAt,\n endedAt: new Date().toISOString(),\n duration,\n context,\n });\n this.flush();\n this.debugLog(`Session ended: ${context.session.sessionId}`);\n })\n .catch((err) => this.debugLog(`Failed to end session: ${err}`));\n }\n\n trackScreen(screenName: string, loadTime?: number): void {\n this.assertInitialized(\"trackScreen\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"screen-view\", {\n apiKey: this.apiKey,\n screenName,\n loadTime,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(`Screen tracked: ${screenName}`);\n })\n .catch((err) => this.debugLog(`Failed to track screen: ${err}`));\n }\n\n trackApiCall(\n endpoint: string,\n httpMethod: string,\n statusCode: number,\n duration: number,\n payloadSize?: number,\n ): void {\n this.assertInitialized(\"trackApiCall\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"api-call\", {\n apiKey: this.apiKey,\n endpoint,\n httpMethod,\n statusCode,\n duration,\n payloadSize,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(\n `API call tracked: ${httpMethod} ${endpoint} ${statusCode}`,\n );\n })\n .catch((err) => this.debugLog(`Failed to track API call: ${err}`));\n }\n\n trackCrash(error: Error, isFatal = false): void {\n this.assertInitialized(\"trackCrash\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"crash\", {\n apiKey: this.apiKey,\n errorName: error.name,\n errorMessage: error.message,\n stackTrace: error.stack ?? \"\",\n isFatal,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(`Crash tracked: ${error.name} — fatal: ${isFatal}`);\n })\n .catch((err) => this.debugLog(`Failed to track crash: ${err}`));\n }\n\n feedback(message: string, options: FeedbackOptions = {}): void {\n this.assertInitialized(\"feedback\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendFeedback({\n apiKey: this.apiKey,\n type: options.type ?? \"general\",\n message,\n meta: options.meta,\n userEmail: options.userEmail,\n userName: options.userName,\n screenshot: options.screenshot,\n sessionId: context.session.sessionId,\n appVersion: context.device.appVersion,\n });\n this.debugLog(`Feedback sent: ${options.type ?? \"general\"}`);\n })\n .catch((err) => this.debugLog(`Failed to send feedback: ${err}`));\n }\n\n // ─── Flush & Destroy ──────────────────────────────────────────────\n\n async flush(): Promise<void> {\n if (!this.queue || !this.client) return;\n\n // Wait up to 500ms for hydration before first flush\n if (!this.queue.hydrated) {\n await new Promise<void>((resolve) => {\n const interval = setInterval(() => {\n if (this.queue?.hydrated) {\n clearInterval(interval);\n resolve();\n }\n }, 50);\n setTimeout(() => {\n clearInterval(interval);\n resolve();\n }, 500);\n });\n }\n\n if (this.queue.isEmpty) return;\n\n const events = this.queue.dequeue(10);\n this.debugLog(`Flushing ${events.length} event(s)`);\n await this.client.sendBatch(events);\n }\n\n destroy(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n this.releaseConsole();\n this.autoCapture?.detach();\n this.queue?.clear();\n this.logQueue = [];\n\n this.initialized = false;\n this.config = null;\n this.client = null;\n this.queue = null;\n this.contextCollector = null;\n\n this.debugLog(\"SDK destroyed\");\n }\n\n // ─── Private ──────────────────────────────────────────────────────\n\n private buildAndEnqueue(\n type: \"event\" | \"metric\" | \"error\",\n name: string,\n payload: Record<string, unknown>,\n timestamp?: string,\n ): void {\n this.contextCollector!.collect()\n .then((context) => {\n const event: PulseEvent = {\n apiKey: this.apiKey,\n type,\n name,\n payload,\n timestamp: timestamp ?? new Date().toISOString(),\n context,\n };\n this.queue!.enqueue(event);\n this.debugLog(`Queued: ${type} — ${name}`);\n if (type === \"error\") this.flush();\n })\n .catch((err) => this.debugLog(`Failed to collect context: ${err}`));\n }\n\n private assertInitialized(method: string): void {\n if (!this.initialized) {\n throw new Error(`PulseBoard.${method}() called before PulseBoard.init()`);\n }\n }\n\n private debugLog(message: string): void {\n if (this.config?.debug) {\n console.log(`[PulseBoard] ${message}`);\n }\n }\n}\n\nexport const PulseBoard = new PulseBoardSDK();\n\nexport type {\n AppContext,\n CaptureErrorOptions,\n DeviceContext,\n EnrichedContext,\n EventType,\n LogEntry,\n LogLevel,\n LogOptions,\n NetworkContext,\n PulseEvent,\n SDKConfig,\n SessionContext,\n TrackOptions,\n UserContext,\n} from \"./types\";\n"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/promise/setimmediate/core.js","../node_modules/promise/setimmediate/rejection-tracking.js","../src/auto-capture.ts","../src/client.ts","../src/specs/NativePulseBoardDevice.ts","../src/specs/NativePulseBoardNetwork.ts","../src/context.ts","../src/queue.ts","../src/index.ts"],"names":["exports","Promise","resolve","reject","id","TurboModuleRegistry"],"mappings":"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","file":"index.mjs","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}","type ErrorHandler = (\n name: string,\n error: Error,\n context?: Record<string, unknown>,\n) => void;\n\nexport class AutoCapture {\n private handler: ErrorHandler;\n private attached: boolean = false;\n private previousHandler: ((error: Error, isFatal?: boolean) => void) | null =\n null;\n\n constructor(handler: ErrorHandler) {\n this.handler = handler;\n }\n\n attach(): void {\n if (this.attached) return;\n\n // React Native's global error handler - catches all unhandled JS errors\n this.previousHandler = ErrorUtils.getGlobalHandler();\n\n ErrorUtils.setGlobalHandler((error: Error, isFatal?: boolean) => {\n this.handler(\"uncaughtException\", error, { isFatal: isFatal ?? false });\n\n // Always call the previous handler (React Native's default crash reporter)\n if (this.previousHandler) {\n this.previousHandler(error, isFatal);\n }\n });\n\n // Unhandled promise rejections\n const tracking = require(\"promise/setimmediate/rejection-tracking\");\n tracking.enable({\n allRejections: true,\n onUnhandled: (_id: number, error: unknown) => {\n const err = error instanceof Error ? error : new Error(String(error));\n this.handler(\"unhandledRejection\", err, { fatal: false });\n },\n });\n\n this.attached = true;\n }\n\n detach(): void {\n if (!this.attached) return;\n\n // Restore the previous error handler\n if (this.previousHandler) {\n ErrorUtils.setGlobalHandler(this.previousHandler);\n this.previousHandler = null;\n }\n\n this.attached = false;\n }\n}\n","import { LogEntry, PulseEvent } from \"./types\";\n\ntype AnalyticsType = \"crash\" | \"session\" | \"screen-view\" | \"api-call\";\n\nexport class PulseBoardClient {\n private host: string;\n private debug: boolean;\n\n constructor(host: string, debug = false) {\n this.host = host.replace(/\\/$/, \"\");\n this.debug = debug;\n }\n\n // ─── Event Ingest ─────────────────────────────────────────────────\n\n async send(event: PulseEvent): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/ingest`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(event),\n });\n\n if (!response.ok) {\n this.log(\n `Failed to send event: ${response.status} ${response.statusText}`,\n );\n return false;\n }\n\n this.log(`Event sent: ${event.type} — ${event.name}`);\n return true;\n } catch (err) {\n this.log(`Network error sending event: ${err}`);\n return false;\n }\n }\n\n async sendBatch(events: PulseEvent[]): Promise<boolean> {\n const chunks = this.chunk(events, 5);\n\n for (const chunk of chunks) {\n await Promise.all(chunk.map((e) => this.send(e)));\n }\n\n return true;\n }\n\n // ─── Analytics Ingest ─────────────────────────────────────────────\n\n async sendAnalytics(\n type: AnalyticsType,\n payload: Record<string, unknown>,\n ): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/analytics/${type}`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n this.log(\n `Failed to send analytics: ${response.status} ${response.statusText}`,\n );\n return false;\n }\n\n this.log(`Analytics sent: ${type}`);\n return true;\n } catch (err) {\n this.log(`Network error sending analytics: ${err}`);\n return false;\n }\n }\n\n // ─── Log Entry ─────────────────────────────────────────────\n\n async sendLog(entry: LogEntry): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/logs`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(entry),\n });\n if (!response.ok) {\n this.log(`Failed to send log: ${response.status}`);\n return false;\n }\n return true;\n } catch (err) {\n this.log(`Network error sending log: ${err}`);\n return false;\n }\n }\n\n async sendLogBatch(\n apiKey: string,\n logs: Omit<LogEntry, \"apiKey\">[],\n ): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/logs/batch`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ apiKey, logs }),\n });\n if (!response.ok) {\n this.log(`Failed to send log batch: ${response.status}`);\n return false;\n }\n return true;\n } catch (err) {\n this.log(`Network error sending log batch: ${err}`);\n return false;\n }\n }\n\n // ─── Feedback ─────────────────────────────────────────────────────\n\n async sendFeedback(payload: Record<string, unknown>): Promise<boolean> {\n try {\n const response = await fetch(`${this.host}/feedback`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n });\n if (!response.ok) {\n this.log(`Failed to send feedback: ${response.status}`);\n return false;\n }\n this.log(\"Feedback sent\");\n return true;\n } catch (err) {\n this.log(`Network error sending feedback: ${err}`);\n return false;\n }\n }\n\n // ─── Private ──────────────────────────────────────────────────────\n\n private chunk<T>(arr: T[], size: number): T[][] {\n return Array.from({ length: Math.ceil(arr.length / size) }, (_, i) =>\n arr.slice(i * size, i * size + size),\n );\n }\n\n private log(message: string): void {\n if (this.debug) {\n console.log(`[PulseBoard] ${message}`);\n }\n }\n}\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\n\nexport type DeviceInfo = {\n model: string;\n manufacturer: string;\n brand: string;\n os: string;\n osVersion: string;\n appVersion: string;\n buildNumber: string;\n bundleId: string;\n screenWidth: number;\n screenHeight: number;\n isTablet: boolean;\n isEmulator: boolean;\n};\n\nexport interface Spec extends TurboModule {\n getDeviceInfo(): Promise<DeviceInfo>;\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>(\"PulseBoardDevice\");\n","import type { TurboModule } from \"react-native\";\nimport { TurboModuleRegistry } from \"react-native\";\n\nexport type NetowrkInfo = {\n type: string;\n isConnected: boolean;\n isWifiEnabled: boolean;\n carrier: string;\n ipAddress: string;\n};\n\nexport interface Spec extends TurboModule {\n getNetworkInfo(): Promise<NetowrkInfo>;\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>(\"PulseBoardNetwork\");\n","import { Dimensions, I18nManager, Platform } from \"react-native\";\nimport NativePulseBoardDevice from \"./specs/NativePulseBoardDevice\";\nimport NativePulseBoardNetwork from \"./specs/NativePulseBoardNetwork\";\nimport {\n AppContext,\n DeviceContext,\n EnrichedContext,\n NetworkContext,\n NetworkType,\n SessionContext,\n UserContext,\n} from \"./types\";\n\nfunction generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 10);\n return `${timestamp}-${random}`;\n}\n\nfunction mapNetworkType(type: string): NetworkType {\n switch (type) {\n case \"wifi\":\n return \"wifi\";\n case \"cellular\":\n return \"cellular\";\n case \"offline\":\n return \"offline\";\n default:\n return \"unknown\";\n }\n}\n\nfunction getTimezone(): string {\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone;\n } catch {\n return \"unknown\";\n }\n}\n\nfunction getLanguage(): string {\n try {\n return (\n I18nManager.getConstants?.()?.localeIdentifier?.replace(\"_\", \"-\") ??\n Intl.DateTimeFormat().resolvedOptions().locale ??\n \"unknown\"\n );\n } catch {\n return \"unknown\";\n }\n}\n\nexport class ContextCollector {\n private sessionContext: SessionContext;\n private appContext: AppContext;\n private userContext: UserContext = {};\n\n constructor(appContext: AppContext = {}) {\n this.appContext = appContext;\n this.sessionContext = {\n sessionId: generateSessionId(),\n startedAt: new Date().toISOString(),\n };\n }\n\n identify(user: UserContext): void {\n this.userContext = { ...this.userContext, ...user };\n }\n\n clearUser(): void {\n this.userContext = {};\n }\n\n async collect(): Promise<EnrichedContext> {\n const { width, height } = Dimensions.get(\"window\");\n\n // Collect device info — fall back gracefully if native module unavailable\n let deviceInfo = null;\n let networkInfo = null;\n\n try {\n if (NativePulseBoardDevice) {\n deviceInfo = await NativePulseBoardDevice.getDeviceInfo();\n }\n } catch (e) {\n console.warn(\"[PulseBoard] Failed to collect device info:\", e);\n }\n\n try {\n if (NativePulseBoardNetwork) {\n networkInfo = await NativePulseBoardNetwork.getNetworkInfo();\n }\n } catch (e) {\n console.warn(\"[PulseBoard] Failed to collect network info:\", e);\n }\n\n const device: DeviceContext = {\n platform: Platform.OS === \"ios\" ? \"ios\" : \"android\",\n os: deviceInfo?.os ?? (Platform.OS === \"ios\" ? \"iOS\" : \"Android\"),\n osVersion:\n deviceInfo?.osVersion ?? Platform.Version?.toString() ?? \"unknown\",\n model: deviceInfo?.model ?? \"unknown\",\n manufacturer: deviceInfo?.manufacturer ?? \"unknown\",\n brand: deviceInfo?.brand ?? \"unknown\",\n isTablet: deviceInfo?.isTablet ?? false,\n appVersion: deviceInfo?.appVersion ?? \"unknown\",\n buildNumber: deviceInfo?.buildNumber ?? \"unknown\",\n bundleId: deviceInfo?.bundleId ?? \"unknown\",\n screenWidth: deviceInfo?.screenWidth ?? width,\n screenHeight: deviceInfo?.screenHeight ?? height,\n fontScale: Dimensions.get(\"window\").fontScale ?? 1,\n isEmulator: deviceInfo?.isEmulator ?? false,\n language: getLanguage(),\n timezone: getTimezone(),\n };\n\n const network: NetworkContext = {\n type: mapNetworkType(networkInfo?.type ?? \"unknown\"),\n isConnected: networkInfo?.isConnected ?? false,\n isWifiEnabled: networkInfo?.isWifiEnabled ?? false,\n carrier: networkInfo?.carrier ?? \"unknown\",\n ipAddress: networkInfo?.ipAddress ?? \"unknown\",\n };\n\n return {\n app: this.appContext,\n device,\n network,\n session: this.sessionContext,\n user: this.userContext,\n };\n }\n}\n","import { PulseEvent, StorageAdapter } from \"./types\";\n\nconst QUEUE_KEY = \"@pulseboard/event_queue\";\nconst MAX_QUEUE_SIZE = 100;\n\nexport class EventQueue {\n private memoryQueue: PulseEvent[] = [];\n private maxSize: number;\n private _hydrated: boolean = false;\n private storage: StorageAdapter | null = null;\n\n constructor(maxSize = MAX_QUEUE_SIZE, storage?: StorageAdapter) {\n this.maxSize = maxSize;\n this.storage = storage ?? null;\n this.hydrate();\n }\n\n private async hydrate(): Promise<void> {\n try {\n if (this.storage) {\n const raw = await this.storage.getItem(QUEUE_KEY);\n if (raw) {\n const stored = JSON.parse(raw) as PulseEvent[];\n this.memoryQueue = stored.slice(0, this.maxSize);\n }\n }\n } catch {\n // Fall back to in-memory only\n } finally {\n this._hydrated = true;\n }\n }\n\n private async persist(): Promise<void> {\n try {\n if (this.storage) {\n await this.storage.setItem(QUEUE_KEY, JSON.stringify(this.memoryQueue));\n }\n } catch {\n // Non-fatal\n }\n }\n\n enqueue(event: PulseEvent): void {\n if (this.memoryQueue.length >= this.maxSize) this.memoryQueue.shift();\n this.memoryQueue.push(event);\n this.persist();\n }\n\n dequeue(count: number): PulseEvent[] {\n const batch = this.memoryQueue.splice(0, count);\n this.persist();\n return batch;\n }\n\n get size(): number {\n return this.memoryQueue.length;\n }\n get isEmpty(): boolean {\n return this.memoryQueue.length === 0;\n }\n get hydrated(): boolean {\n return this._hydrated;\n }\n\n async clear(): Promise<void> {\n this.memoryQueue = [];\n try {\n if (this.storage) await this.storage.removeItem(QUEUE_KEY);\n } catch {}\n }\n}\n","import { AutoCapture } from \"./auto-capture\";\nimport { PulseBoardClient } from \"./client\";\nimport { ContextCollector } from \"./context\";\nimport { EventQueue } from \"./queue\";\nimport {\n CaptureErrorOptions,\n EnrichedContext,\n FeedbackOptions,\n LogEntry,\n LogLevel,\n LogOptions,\n PulseEvent,\n SDKConfig,\n TrackOptions,\n UserContext,\n} from \"./types\";\n\nclass PulseBoardSDK {\n private config: SDKConfig | null = null;\n private client: PulseBoardClient | null = null;\n private queue: EventQueue | null = null;\n private autoCapture: AutoCapture | null = null;\n private contextCollector: ContextCollector | null = null;\n private flushTimer: ReturnType<typeof setInterval> | null = null;\n private initialized: boolean = false;\n private readonly PULSEBOARD_API: string =\n \"https://pulseboard-production.up.railway.app/\";\n\n // ─── Log queue ────────────────────────────────────────────────────\n private logQueue: Omit<LogEntry, \"apiKey\">[] = [];\n private logFlushTimer: ReturnType<typeof setInterval> | null = null;\n private originalConsole: Partial<typeof console> = {};\n private consoleCapturing: boolean = false;\n\n // ─── Public API ───────────────────────────────────────────────────\n\n init(config: SDKConfig): void {\n if (this.initialized) {\n this.debugLog(\"SDK already initialized — skipping\");\n return;\n }\n\n if (!config.apiKey) {\n throw new Error(\"[PulseBoard] init() requires an apiKey\");\n }\n\n this.config = {\n autoCapture: true,\n debug: false,\n flushInterval: 5000,\n maxQueueSize: 100,\n ...config,\n };\n\n this.client = new PulseBoardClient(this.PULSEBOARD_API, this.config.debug);\n this.queue = new EventQueue(this.config.maxQueueSize, this.config.storage);\n this.contextCollector = new ContextCollector({\n environment: config.environment,\n });\n\n this.completeInit();\n }\n\n private completeInit(): void {\n this.flushTimer = setInterval(\n () => this.flush(),\n this.config!.flushInterval,\n );\n\n if (this.config!.autoCapture) {\n this.autoCapture = new AutoCapture((name, error, context) => {\n this.captureError(error, { payload: context });\n });\n this.autoCapture.attach();\n }\n\n this.initialized = true;\n this.debugLog(`Initialized — host: ${this.PULSEBOARD_API}`);\n }\n\n async getContext(): Promise<EnrichedContext> {\n this.assertInitialized(\"getContext\");\n return this.contextCollector!.collect();\n }\n\n identify(user: UserContext): void {\n this.assertInitialized(\"identify\");\n this.contextCollector!.identify(user);\n this.debugLog(`User identified: ${JSON.stringify(user)}`);\n }\n\n clearUser(): void {\n this.assertInitialized(\"clearUser\");\n this.contextCollector!.clearUser();\n }\n\n track(name: string, options: TrackOptions = {}): void {\n this.assertInitialized(\"track\");\n this.buildAndEnqueue(\n \"event\",\n name,\n options.payload ?? {},\n options.timestamp,\n );\n }\n\n metric(name: string, value: number, options: TrackOptions = {}): void {\n this.assertInitialized(\"metric\");\n this.buildAndEnqueue(\n \"metric\",\n name,\n { value, ...options.payload },\n options.timestamp,\n );\n }\n\n captureError(error: Error, options: CaptureErrorOptions = {}): void {\n this.assertInitialized(\"captureError\");\n this.buildAndEnqueue(\"error\", error.name ?? \"UnknownError\", {\n message: error.message,\n stack: error.stack,\n ...options.payload,\n });\n }\n\n // ─── Logging API ──────────────────────────────────────────────────\n\n log(level: LogLevel, message: string, options: LogOptions = {}): void {\n this.assertInitialized(\"log\");\n this.contextCollector!.collect()\n .then((context) => {\n this.logQueue.push({\n level,\n message,\n meta: options.meta,\n sessionId: context.session.sessionId,\n appVersion: context.device.appVersion,\n timestamp: new Date().toISOString(),\n });\n\n // Flush immediately for errors\n if (level === \"error\") this.flushLogs();\n })\n .catch(() => {});\n }\n\n captureConsole(): void {\n this.assertInitialized(\"captureConsole\");\n if (this.consoleCapturing) return;\n\n this.originalConsole = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n debug: console.debug,\n };\n\n console.log = (...args: unknown[]) => {\n this.originalConsole.log?.(...args);\n this.log(\"info\", args.map(String).join(\" \"));\n };\n\n console.warn = (...args: unknown[]) => {\n this.originalConsole.warn?.(...args);\n this.log(\"warn\", args.map(String).join(\" \"));\n };\n\n console.error = (...args: unknown[]) => {\n this.originalConsole.error?.(...args);\n this.log(\"error\", args.map(String).join(\" \"));\n };\n\n console.debug = (...args: unknown[]) => {\n this.originalConsole.debug?.(...args);\n this.log(\"debug\", args.map(String).join(\" \"));\n };\n\n this.logFlushTimer = setInterval(() => this.flushLogs(), 10000);\n this.consoleCapturing = true;\n this.debugLog(\"Console capture enabled\");\n }\n\n releaseConsole(): void {\n if (!this.consoleCapturing) return;\n\n if (this.originalConsole.log) console.log = this.originalConsole.log;\n if (this.originalConsole.warn) console.warn = this.originalConsole.warn;\n if (this.originalConsole.error) console.error = this.originalConsole.error;\n if (this.originalConsole.debug) console.debug = this.originalConsole.debug;\n\n if (this.logFlushTimer) {\n clearInterval(this.logFlushTimer);\n this.logFlushTimer = null;\n }\n\n this.originalConsole = {};\n this.consoleCapturing = false;\n }\n\n async flushLogs(): Promise<void> {\n if (!this.client || !this.config || this.logQueue.length === 0) return;\n const batch = this.logQueue.splice(0, this.logQueue.length);\n await this.client.sendLogBatch(this.config.apiKey, batch);\n }\n\n // ─── Analytics API ────────────────────────────────────────────────\n\n startSession(): void {\n this.assertInitialized(\"startSession\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"session\", {\n apiKey: this.config?.apiKey,\n sessionId: context.session.sessionId,\n startedAt: context.session.startedAt,\n context,\n });\n this.debugLog(`Session started: ${context.session.sessionId}`);\n })\n .catch((err) => this.debugLog(`Failed to start session: ${err}`));\n }\n\n endSession(duration?: number): void {\n this.assertInitialized(\"endSession\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"session\", {\n apiKey: this.config?.apiKey,\n sessionId: context.session.sessionId,\n startedAt: context.session.startedAt,\n endedAt: new Date().toISOString(),\n duration,\n context,\n });\n this.flush();\n this.debugLog(`Session ended: ${context.session.sessionId}`);\n })\n .catch((err) => this.debugLog(`Failed to end session: ${err}`));\n }\n\n trackScreen(screenName: string, loadTime?: number): void {\n this.assertInitialized(\"trackScreen\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"screen-view\", {\n apiKey: this.config?.apiKey,\n screenName,\n loadTime,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(`Screen tracked: ${screenName}`);\n })\n .catch((err) => this.debugLog(`Failed to track screen: ${err}`));\n }\n\n trackApiCall(\n endpoint: string,\n httpMethod: string,\n statusCode: number,\n duration: number,\n payloadSize?: number,\n ): void {\n this.assertInitialized(\"trackApiCall\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"api-call\", {\n apiKey: this.config?.apiKey,\n endpoint,\n httpMethod,\n statusCode,\n duration,\n payloadSize,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(\n `API call tracked: ${httpMethod} ${endpoint} ${statusCode}`,\n );\n })\n .catch((err) => this.debugLog(`Failed to track API call: ${err}`));\n }\n\n trackCrash(error: Error, isFatal = false): void {\n this.assertInitialized(\"trackCrash\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendAnalytics(\"crash\", {\n apiKey: this.config?.apiKey,\n errorName: error.name,\n errorMessage: error.message,\n stackTrace: error.stack ?? \"\",\n isFatal,\n sessionId: context.session.sessionId,\n context,\n });\n this.debugLog(`Crash tracked: ${error.name} — fatal: ${isFatal}`);\n })\n .catch((err) => this.debugLog(`Failed to track crash: ${err}`));\n }\n\n feedback(message: string, options: FeedbackOptions = {}): void {\n this.assertInitialized(\"feedback\");\n this.contextCollector!.collect()\n .then((context) => {\n this.client!.sendFeedback({\n apiKey: this.config?.apiKey,\n type: options.type ?? \"general\",\n message,\n meta: options.meta,\n userEmail: options.userEmail,\n userName: options.userName,\n screenshot: options.screenshot,\n sessionId: context.session.sessionId,\n appVersion: context.device.appVersion,\n });\n this.debugLog(`Feedback sent: ${options.type ?? \"general\"}`);\n })\n .catch((err) => this.debugLog(`Failed to send feedback: ${err}`));\n }\n\n // ─── Flush & Destroy ──────────────────────────────────────────────\n\n async flush(): Promise<void> {\n if (!this.queue || !this.client) return;\n\n // Wait up to 500ms for hydration before first flush\n if (!this.queue.hydrated) {\n await new Promise<void>((resolve) => {\n const interval = setInterval(() => {\n if (this.queue?.hydrated) {\n clearInterval(interval);\n resolve();\n }\n }, 50);\n setTimeout(() => {\n clearInterval(interval);\n resolve();\n }, 500);\n });\n }\n\n if (this.queue.isEmpty) return;\n\n const events = this.queue.dequeue(10);\n this.debugLog(`Flushing ${events.length} event(s)`);\n await this.client.sendBatch(events);\n }\n\n destroy(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n this.releaseConsole();\n this.autoCapture?.detach();\n this.queue?.clear();\n this.logQueue = [];\n\n this.initialized = false;\n this.config = null;\n this.client = null;\n this.queue = null;\n this.contextCollector = null;\n\n this.debugLog(\"SDK destroyed\");\n }\n\n // ─── Private ──────────────────────────────────────────────────────\n\n private buildAndEnqueue(\n type: \"event\" | \"metric\" | \"error\",\n name: string,\n payload: Record<string, unknown>,\n timestamp?: string,\n ): void {\n this.contextCollector!.collect()\n .then((context) => {\n const event: PulseEvent = {\n apiKey: this.config?.apiKey!,\n type,\n name,\n payload,\n timestamp: timestamp ?? new Date().toISOString(),\n context,\n };\n this.queue!.enqueue(event);\n this.debugLog(`Queued: ${type} — ${name}`);\n if (type === \"error\") this.flush();\n })\n .catch((err) => this.debugLog(`Failed to collect context: ${err}`));\n }\n\n private assertInitialized(method: string): void {\n if (!this.initialized) {\n throw new Error(`PulseBoard.${method}() called before PulseBoard.init()`);\n }\n }\n\n private debugLog(message: string): void {\n if (this.config?.debug) {\n console.log(`[PulseBoard] ${message}`);\n }\n }\n}\n\nexport const PulseBoard = new PulseBoardSDK();\n\nexport type {\n AppContext,\n CaptureErrorOptions,\n DeviceContext,\n EnrichedContext,\n EventType,\n LogEntry,\n LogLevel,\n LogOptions,\n NetworkContext,\n PulseEvent,\n SDKConfig,\n SessionContext,\n TrackOptions,\n UserContext,\n} from \"./types\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pulseboard/react-native",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Official PulseBoard SDK for React Native",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -59,8 +59,5 @@
|
|
|
59
59
|
"email": "m.arslanmushtaqahmed@gmail.com",
|
|
60
60
|
"name": "Arslan Mushtaq",
|
|
61
61
|
"url": "https://arslanmushtaq.com"
|
|
62
|
-
},
|
|
63
|
-
"dependencies": {
|
|
64
|
-
"@react-native-async-storage/async-storage": "^3.0.1"
|
|
65
62
|
}
|
|
66
63
|
}
|