@avibra/pulse-core 1.0.0
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/api/APIClient.d.ts +50 -0
- package/dist/api/APIClient.d.ts.map +1 -0
- package/dist/api/APIClient.js +324 -0
- package/dist/api/APIClient.js.map +1 -0
- package/dist/audio/CallRecorder.d.ts +64 -0
- package/dist/audio/CallRecorder.d.ts.map +1 -0
- package/dist/audio/CallRecorder.js +370 -0
- package/dist/audio/CallRecorder.js.map +1 -0
- package/dist/core/EventTracker.d.ts +21 -0
- package/dist/core/EventTracker.d.ts.map +1 -0
- package/dist/core/EventTracker.js +133 -0
- package/dist/core/EventTracker.js.map +1 -0
- package/dist/core/SessionManager.d.ts +18 -0
- package/dist/core/SessionManager.d.ts.map +1 -0
- package/dist/core/SessionManager.js +70 -0
- package/dist/core/SessionManager.js.map +1 -0
- package/dist/core/TriggerManager.d.ts +15 -0
- package/dist/core/TriggerManager.d.ts.map +1 -0
- package/dist/core/TriggerManager.js +61 -0
- package/dist/core/TriggerManager.js.map +1 -0
- package/dist/core/UserIdentityManager.d.ts +20 -0
- package/dist/core/UserIdentityManager.d.ts.map +1 -0
- package/dist/core/UserIdentityManager.js +71 -0
- package/dist/core/UserIdentityManager.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/platform.d.ts +64 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +8 -0
- package/dist/platform.js.map +1 -0
- package/dist/types.d.ts +175 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/crypto.d.ts +3 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/dist/utils/crypto.js +34 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +29 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/queue.d.ts +21 -0
- package/dist/utils/queue.d.ts.map +1 -0
- package/dist/utils/queue.js +81 -0
- package/dist/utils/queue.js.map +1 -0
- package/dist/utils/retry.d.ts +12 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +66 -0
- package/dist/utils/retry.js.map +1 -0
- package/package.json +25 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../src/core/SessionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { APIClient } from '../api/APIClient';
|
|
2
|
+
import type { EventBusAdapter } from '../platform';
|
|
3
|
+
import { SurveyTrigger } from '../types';
|
|
4
|
+
export type TriggerHandler = (trigger: SurveyTrigger) => void;
|
|
5
|
+
export declare class TriggerManager {
|
|
6
|
+
private readonly apiClient;
|
|
7
|
+
private readonly getUserId;
|
|
8
|
+
private onTrigger;
|
|
9
|
+
private readonly seenTriggerIds;
|
|
10
|
+
constructor(apiClient: APIClient, getUserId: () => string, events: EventBusAdapter);
|
|
11
|
+
onTriggerReceived(handler: TriggerHandler): void;
|
|
12
|
+
fetchInitialTriggers(): Promise<void>;
|
|
13
|
+
handleTrigger(trigger: SurveyTrigger): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=TriggerManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerManager.d.ts","sourceRoot":"","sources":["../../src/core/TriggerManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;AAE9D,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;gBAGhD,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,MAAM,MAAM,EACvB,MAAM,EAAE,eAAe;IAWpB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI1C,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3C,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;CAsBrD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Pulse Core — Trigger Manager
|
|
3
|
+
// Uses EventBusAdapter instead of document.addEventListener / mitt directly.
|
|
4
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
import { logger } from '../utils/logger';
|
|
6
|
+
export class TriggerManager {
|
|
7
|
+
constructor(apiClient, getUserId, events) {
|
|
8
|
+
this.onTrigger = null;
|
|
9
|
+
this.seenTriggerIds = new Set();
|
|
10
|
+
this.apiClient = apiClient;
|
|
11
|
+
this.getUserId = getUserId;
|
|
12
|
+
events.on('pulse:trigger-received', (data) => {
|
|
13
|
+
const { trigger } = data;
|
|
14
|
+
this.handleTrigger(trigger);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
onTriggerReceived(handler) {
|
|
18
|
+
this.onTrigger = handler;
|
|
19
|
+
}
|
|
20
|
+
async fetchInitialTriggers() {
|
|
21
|
+
const userId = this.getUserId();
|
|
22
|
+
if (!userId)
|
|
23
|
+
return;
|
|
24
|
+
try {
|
|
25
|
+
const response = await this.apiClient.getTriggers(userId);
|
|
26
|
+
logger.info('[TriggerManager] Signals API response:', JSON.stringify(response));
|
|
27
|
+
const first = Array.isArray(response.data) ? response.data[0] : undefined;
|
|
28
|
+
if (response.success && first) {
|
|
29
|
+
logger.info('[TriggerManager] Found pending trigger on init:', JSON.stringify(first));
|
|
30
|
+
this.handleTrigger(first);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
logger.info(`[TriggerManager] No actionable trigger — success=${response.success}, data=${JSON.stringify(response.data)}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
logger.error('[TriggerManager] Initial trigger fetch failed:', err);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
handleTrigger(trigger) {
|
|
41
|
+
if (!this.getUserId())
|
|
42
|
+
return;
|
|
43
|
+
if (trigger.expires_at !== null && new Date(trigger.expires_at) < new Date()) {
|
|
44
|
+
logger.info(`[TriggerManager] Trigger ${trigger.trigger_id} expired — ignoring`);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (this.seenTriggerIds.has(trigger.trigger_id)) {
|
|
48
|
+
logger.debug(`[TriggerManager] Trigger ${trigger.trigger_id} already handled`);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.seenTriggerIds.add(trigger.trigger_id);
|
|
52
|
+
logger.info(`[TriggerManager] Trigger: ${trigger.trigger_id} → Signal: ${trigger.signal_id}`);
|
|
53
|
+
if (this.onTrigger) {
|
|
54
|
+
this.onTrigger(trigger);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
logger.warn('[TriggerManager] Trigger received but no handler registered');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=TriggerManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerManager.js","sourceRoot":"","sources":["../../src/core/TriggerManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { APIClient } from '../api/APIClient';
|
|
2
|
+
import type { StorageAdapter } from '../platform';
|
|
3
|
+
import { IdentifyPayload } from '../types';
|
|
4
|
+
export declare class UserIdentityManager {
|
|
5
|
+
private identity;
|
|
6
|
+
private readonly apiClient;
|
|
7
|
+
private readonly storage;
|
|
8
|
+
private readonly partnerId;
|
|
9
|
+
private readonly userId;
|
|
10
|
+
constructor(apiClient: APIClient, partnerId: string, userId: string, storage: StorageAdapter);
|
|
11
|
+
identify(payload: IdentifyPayload): Promise<void>;
|
|
12
|
+
getIdentity(): Readonly<IdentifyPayload> | null;
|
|
13
|
+
getUserId(): string;
|
|
14
|
+
clearIdentity(): void;
|
|
15
|
+
/** Build the wire payload and POST to /users/identify */
|
|
16
|
+
private syncIdentity;
|
|
17
|
+
private persist;
|
|
18
|
+
private loadFromStorage;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=UserIdentityManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserIdentityManager.d.ts","sourceRoot":"","sources":["../../src/core/UserIdentityManager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,eAAe,EAAmB,MAAM,UAAU,CAAC;AAK5D,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEpB,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;IAU/E,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAevD,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI;IAI/C,SAAS,IAAI,MAAM;IAEnB,aAAa,IAAI,IAAI;IAM5B,yDAAyD;YAC3C,YAAY;YAcZ,OAAO;YAMP,eAAe;CAShC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Pulse Core — User Identity Manager
|
|
3
|
+
// Uses StorageAdapter instead of localStorage/AsyncStorage directly.
|
|
4
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
import { logger } from '../utils/logger';
|
|
6
|
+
const IDENTITY_KEY = '__pulse_identity__';
|
|
7
|
+
export class UserIdentityManager {
|
|
8
|
+
constructor(apiClient, partnerId, userId, storage) {
|
|
9
|
+
this.identity = {};
|
|
10
|
+
this.apiClient = apiClient;
|
|
11
|
+
this.storage = storage;
|
|
12
|
+
this.partnerId = partnerId;
|
|
13
|
+
this.userId = userId;
|
|
14
|
+
// Restore any previously saved profile fields, then identify immediately
|
|
15
|
+
void this.loadFromStorage().then(() => this.syncIdentity());
|
|
16
|
+
}
|
|
17
|
+
async identify(payload) {
|
|
18
|
+
this.identity = {
|
|
19
|
+
...this.identity,
|
|
20
|
+
...payload,
|
|
21
|
+
attributes: {
|
|
22
|
+
...(this.identity.attributes ?? {}),
|
|
23
|
+
...(payload.attributes ?? {}),
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
void this.persist();
|
|
27
|
+
logger.info('[UserIdentityManager] User identified:', this.userId);
|
|
28
|
+
await this.syncIdentity();
|
|
29
|
+
}
|
|
30
|
+
getIdentity() {
|
|
31
|
+
return Object.keys(this.identity).length > 0 ? this.identity : null;
|
|
32
|
+
}
|
|
33
|
+
getUserId() { return this.userId; }
|
|
34
|
+
clearIdentity() {
|
|
35
|
+
this.identity = {};
|
|
36
|
+
void this.storage.removeItem(IDENTITY_KEY).catch(() => { });
|
|
37
|
+
logger.debug('[UserIdentityManager] Identity cleared');
|
|
38
|
+
}
|
|
39
|
+
/** Build the wire payload and POST to /users/identify */
|
|
40
|
+
async syncIdentity() {
|
|
41
|
+
const request = {
|
|
42
|
+
partner_id: this.partnerId,
|
|
43
|
+
user_id: this.userId,
|
|
44
|
+
...this.identity,
|
|
45
|
+
};
|
|
46
|
+
try {
|
|
47
|
+
await this.apiClient.identify(request);
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
logger.error('[UserIdentityManager] Failed to sync identity:', err);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async persist() {
|
|
54
|
+
try {
|
|
55
|
+
await this.storage.setItem(IDENTITY_KEY, JSON.stringify(this.identity));
|
|
56
|
+
}
|
|
57
|
+
catch { /* ignore */ }
|
|
58
|
+
}
|
|
59
|
+
async loadFromStorage() {
|
|
60
|
+
try {
|
|
61
|
+
const raw = await this.storage.getItem(IDENTITY_KEY);
|
|
62
|
+
if (!raw)
|
|
63
|
+
return;
|
|
64
|
+
const stored = JSON.parse(raw);
|
|
65
|
+
this.identity = stored;
|
|
66
|
+
logger.debug('[UserIdentityManager] Restored identity from storage');
|
|
67
|
+
}
|
|
68
|
+
catch { /* ignore */ }
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=UserIdentityManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UserIdentityManager.js","sourceRoot":"","sources":["../../src/core/UserIdentityManager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export type { StorageAdapter, NetworkAdapter, EventBusAdapter, PlatformInfoAdapter, PlatformAdapters, } from './platform';
|
|
2
|
+
export type { PulseConfig, PulseEnvironment, ThemeConfig, IdentifyPayload, IdentifyRequest, PulseEventPayload, TrackEventPayload, EventContext, SurveyTrigger, TriggerResponse, Incentive, VoiceTokenResponse, VoiceSessionStartRequest, VoiceSessionStartResponse, AudioChunkRequest, AudioChunkResponse, APIResponse, RequestHeaders, RetryConfig, QueuedRequest, SessionData, } from './types';
|
|
3
|
+
export { APIClient } from './api/APIClient';
|
|
4
|
+
export type { APIClientConfig } from './api/APIClient';
|
|
5
|
+
export { EventTracker } from './core/EventTracker';
|
|
6
|
+
export { SessionManager } from './core/SessionManager';
|
|
7
|
+
export { TriggerManager } from './core/TriggerManager';
|
|
8
|
+
export type { TriggerHandler } from './core/TriggerManager';
|
|
9
|
+
export { UserIdentityManager } from './core/UserIdentityManager';
|
|
10
|
+
export { CallRecorder } from './audio/CallRecorder';
|
|
11
|
+
export { configureLogger, logger } from './utils/logger';
|
|
12
|
+
export { generateNonce, generateUUID } from './utils/crypto';
|
|
13
|
+
export { OfflineQueue } from './utils/queue';
|
|
14
|
+
export { withRetry, RetryableError, NonRetryableError, DEFAULT_RETRY_CONFIG } from './utils/retry';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,YAAY,EACR,cAAc,EACd,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,gBAAgB,GACnB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACR,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,WAAW,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Pulse Core — Public API
|
|
3
|
+
// Re-exports all shared modules for consumption by sdk/ and sdk-rn/.
|
|
4
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
// API Client
|
|
6
|
+
export { APIClient } from './api/APIClient';
|
|
7
|
+
// Core modules
|
|
8
|
+
export { EventTracker } from './core/EventTracker';
|
|
9
|
+
export { SessionManager } from './core/SessionManager';
|
|
10
|
+
export { TriggerManager } from './core/TriggerManager';
|
|
11
|
+
export { UserIdentityManager } from './core/UserIdentityManager';
|
|
12
|
+
// Audio recording & merging
|
|
13
|
+
export { CallRecorder } from './audio/CallRecorder';
|
|
14
|
+
// Utilities
|
|
15
|
+
export { configureLogger, logger } from './utils/logger';
|
|
16
|
+
export { generateNonce, generateUUID } from './utils/crypto';
|
|
17
|
+
export { OfflineQueue } from './utils/queue';
|
|
18
|
+
export { withRetry, RetryableError, NonRetryableError, DEFAULT_RETRY_CONFIG } from './utils/retry';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0BAA0B;AAC1B,qEAAqE;AACrE,gFAAgF;AAoChF,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,eAAe;AACf,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,4BAA4B;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent key-value storage.
|
|
3
|
+
* Web: localStorage / sessionStorage
|
|
4
|
+
* RN: AsyncStorage
|
|
5
|
+
*/
|
|
6
|
+
export interface StorageAdapter {
|
|
7
|
+
getItem(key: string): Promise<string | null>;
|
|
8
|
+
setItem(key: string, value: string): Promise<void>;
|
|
9
|
+
removeItem(key: string): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Network connectivity detection.
|
|
13
|
+
* Web: navigator.onLine + 'online' event
|
|
14
|
+
* RN: @react-native-community/netinfo
|
|
15
|
+
*/
|
|
16
|
+
export interface NetworkAdapter {
|
|
17
|
+
isOnline(): Promise<boolean>;
|
|
18
|
+
/** Returns an unsubscribe function. */
|
|
19
|
+
onOnline(callback: () => void): () => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Event bus for internal SDK communication.
|
|
23
|
+
* Web: document.dispatchEvent / addEventListener (CustomEvent)
|
|
24
|
+
* RN: mitt emitter
|
|
25
|
+
*/
|
|
26
|
+
export interface EventBusAdapter {
|
|
27
|
+
emit(type: string, data?: unknown): void;
|
|
28
|
+
on(type: string, handler: (data: unknown) => void): void;
|
|
29
|
+
off(type: string, handler: (data: unknown) => void): void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Platform-specific session/environment info.
|
|
33
|
+
* Web: window.location, document.referrer
|
|
34
|
+
* RN: screen names, AppState
|
|
35
|
+
*/
|
|
36
|
+
export interface PlatformInfoAdapter {
|
|
37
|
+
/** Current page URL or screen name */
|
|
38
|
+
getUrl(): string;
|
|
39
|
+
/** Referrer URL or previous screen */
|
|
40
|
+
getReferrer(): string;
|
|
41
|
+
/** Operating system name (e.g. "web", "ios", "android") */
|
|
42
|
+
getOS(): string;
|
|
43
|
+
/** Unique device identifier */
|
|
44
|
+
getDeviceId(): string;
|
|
45
|
+
/** Whether the SDK is running inside a native WebView */
|
|
46
|
+
isWebView(): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Called when app returns to foreground (optional).
|
|
49
|
+
* Returns unsubscribe function.
|
|
50
|
+
* Web: not used (sessions persist in sessionStorage).
|
|
51
|
+
* RN: AppState 'active' event.
|
|
52
|
+
*/
|
|
53
|
+
onForeground?(callback: () => void): () => void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Combined platform adapters — passed to core module factories.
|
|
57
|
+
*/
|
|
58
|
+
export interface PlatformAdapters {
|
|
59
|
+
storage: StorageAdapter;
|
|
60
|
+
network: NetworkAdapter;
|
|
61
|
+
events: EventBusAdapter;
|
|
62
|
+
platform: PlatformInfoAdapter;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC9C;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IACzD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CAC7D;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAChC,sCAAsC;IACtC,MAAM,IAAI,MAAM,CAAC;IACjB,sCAAsC;IACtC,WAAW,IAAI,MAAM,CAAC;IACtB,2DAA2D;IAC3D,KAAK,IAAI,MAAM,CAAC;IAChB,+BAA+B;IAC/B,WAAW,IAAI,MAAM,CAAC;IACtB,yDAAyD;IACzD,SAAS,IAAI,OAAO,CAAC;IACrB;;;;;OAKG;IACH,YAAY,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,mBAAmB,CAAC;CACjC"}
|
package/dist/platform.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Pulse Core — Platform Adapter Interfaces
|
|
3
|
+
//
|
|
4
|
+
// Each SDK (web, RN) provides its own implementation of these interfaces.
|
|
5
|
+
// Core classes accept them via constructor injection — zero platform imports.
|
|
6
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,2CAA2C;AAC3C,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,gFAAgF"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
export type PulseEnvironment = 'staging' | 'st2' | 'prod';
|
|
2
|
+
export interface PulseConfig {
|
|
3
|
+
partnerId: string;
|
|
4
|
+
userId: string;
|
|
5
|
+
apiKey?: string;
|
|
6
|
+
mode?: PulseEnvironment;
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
connectUrl?: string;
|
|
9
|
+
returnUrl?: string;
|
|
10
|
+
theme?: Partial<ThemeConfig>;
|
|
11
|
+
debug?: boolean;
|
|
12
|
+
pollIntervalMs?: number;
|
|
13
|
+
maxOfflineQueueSize?: number;
|
|
14
|
+
retry?: Partial<RetryConfig>;
|
|
15
|
+
}
|
|
16
|
+
export interface ThemeConfig {
|
|
17
|
+
primary: string;
|
|
18
|
+
onPrimary: string;
|
|
19
|
+
background: string;
|
|
20
|
+
surface: string;
|
|
21
|
+
accent: string;
|
|
22
|
+
danger: string;
|
|
23
|
+
borderRadius?: number;
|
|
24
|
+
fontFamily?: string;
|
|
25
|
+
}
|
|
26
|
+
/** Fields the public `identifyUser()` API accepts (all optional profile data). */
|
|
27
|
+
export interface IdentifyPayload {
|
|
28
|
+
anonymous_id?: string;
|
|
29
|
+
avatar_url?: string;
|
|
30
|
+
first_name?: string;
|
|
31
|
+
last_name?: string;
|
|
32
|
+
email?: string;
|
|
33
|
+
phone?: string;
|
|
34
|
+
dob?: string;
|
|
35
|
+
gender?: string;
|
|
36
|
+
city?: string;
|
|
37
|
+
zip?: string;
|
|
38
|
+
country?: string;
|
|
39
|
+
language?: string;
|
|
40
|
+
locale?: string;
|
|
41
|
+
time_zone?: string;
|
|
42
|
+
email_subscribed?: boolean;
|
|
43
|
+
sms_subscribed?: boolean;
|
|
44
|
+
push_subscribed?: boolean;
|
|
45
|
+
attributes?: Record<string, unknown>;
|
|
46
|
+
}
|
|
47
|
+
/** Wire format sent to POST /users/identify — partner_id and user_id are always included. */
|
|
48
|
+
export interface IdentifyRequest extends IdentifyPayload {
|
|
49
|
+
partner_id: string;
|
|
50
|
+
user_id: string;
|
|
51
|
+
}
|
|
52
|
+
export interface PulseEventPayload {
|
|
53
|
+
name: string;
|
|
54
|
+
properties?: Record<string, unknown>;
|
|
55
|
+
}
|
|
56
|
+
export interface EventContext {
|
|
57
|
+
os: string;
|
|
58
|
+
location: string;
|
|
59
|
+
session_id: string;
|
|
60
|
+
device_id: string;
|
|
61
|
+
is_webview: boolean;
|
|
62
|
+
}
|
|
63
|
+
export interface TrackEventPayload {
|
|
64
|
+
partner_id: string;
|
|
65
|
+
user_id: string;
|
|
66
|
+
event: {
|
|
67
|
+
name: string;
|
|
68
|
+
event_time: string;
|
|
69
|
+
properties?: Record<string, unknown>;
|
|
70
|
+
context: EventContext;
|
|
71
|
+
};
|
|
72
|
+
user?: IdentifyPayload;
|
|
73
|
+
}
|
|
74
|
+
export interface SurveyTrigger {
|
|
75
|
+
trigger_id: string;
|
|
76
|
+
signal_id: string;
|
|
77
|
+
type: string;
|
|
78
|
+
expires_at: string | null;
|
|
79
|
+
payload?: Record<string, unknown>;
|
|
80
|
+
}
|
|
81
|
+
export interface TriggerResponse {
|
|
82
|
+
event_id?: string;
|
|
83
|
+
trigger?: SurveyTrigger;
|
|
84
|
+
}
|
|
85
|
+
/** Incentive configuration returned by the backend */
|
|
86
|
+
export interface Incentive {
|
|
87
|
+
enabled: boolean;
|
|
88
|
+
properties: {
|
|
89
|
+
type: string;
|
|
90
|
+
value: number;
|
|
91
|
+
};
|
|
92
|
+
delivery: string;
|
|
93
|
+
/** Message displayed on the dynamic island during the session */
|
|
94
|
+
checkin_text: string;
|
|
95
|
+
/** Message displayed on the completion popup */
|
|
96
|
+
success_text: string;
|
|
97
|
+
}
|
|
98
|
+
export interface VoiceTokenResponse {
|
|
99
|
+
token: string;
|
|
100
|
+
model: string;
|
|
101
|
+
voiceName: string;
|
|
102
|
+
openingQuestion: string;
|
|
103
|
+
maxTurns: number;
|
|
104
|
+
systemInstruction: string;
|
|
105
|
+
/** WebSocket URL for the backend voice proxy (used by RN SDK) */
|
|
106
|
+
wsUrl: string;
|
|
107
|
+
/** Signal ID used by the backend to fetch config */
|
|
108
|
+
signalId: string;
|
|
109
|
+
/** Topics to evaluate the conversation against */
|
|
110
|
+
topics: string[];
|
|
111
|
+
/** Incentive configuration — messages, properties, enabled flag */
|
|
112
|
+
incentive: Incentive | null;
|
|
113
|
+
}
|
|
114
|
+
export interface VoiceSessionStartRequest {
|
|
115
|
+
signal_id: string;
|
|
116
|
+
user_id: string;
|
|
117
|
+
session_id: string;
|
|
118
|
+
language?: string;
|
|
119
|
+
}
|
|
120
|
+
export interface VoiceSessionStartResponse {
|
|
121
|
+
voice_session_token: string;
|
|
122
|
+
first_question: string;
|
|
123
|
+
tts_src?: string;
|
|
124
|
+
max_turn_duration_sec: number;
|
|
125
|
+
}
|
|
126
|
+
export interface AudioChunkRequest {
|
|
127
|
+
voice_session_token: string;
|
|
128
|
+
chunk_index: number;
|
|
129
|
+
is_final: boolean;
|
|
130
|
+
is_turn_end?: boolean;
|
|
131
|
+
audioBlob: Blob;
|
|
132
|
+
}
|
|
133
|
+
export interface AudioChunkResponse {
|
|
134
|
+
transcript?: string;
|
|
135
|
+
next_question?: string;
|
|
136
|
+
tts_src?: string;
|
|
137
|
+
is_complete: boolean;
|
|
138
|
+
}
|
|
139
|
+
export interface APIResponse<T> {
|
|
140
|
+
success: boolean;
|
|
141
|
+
data?: T;
|
|
142
|
+
error?: {
|
|
143
|
+
code: string;
|
|
144
|
+
message: string;
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
export interface RequestHeaders {
|
|
148
|
+
'Content-Type': string;
|
|
149
|
+
'X-Pulse-Partner-Id': string;
|
|
150
|
+
'X-Pulse-Nonce': string;
|
|
151
|
+
'X-Pulse-Timestamp': string;
|
|
152
|
+
'X-Api-Key'?: string;
|
|
153
|
+
}
|
|
154
|
+
export interface RetryConfig {
|
|
155
|
+
maxAttempts: number;
|
|
156
|
+
baseDelayMs: number;
|
|
157
|
+
maxDelayMs: number;
|
|
158
|
+
noRetryStatuses: number[];
|
|
159
|
+
}
|
|
160
|
+
export interface QueuedRequest {
|
|
161
|
+
id: string;
|
|
162
|
+
endpoint: string;
|
|
163
|
+
method: 'POST' | 'GET' | 'PUT' | 'DELETE';
|
|
164
|
+
body?: string;
|
|
165
|
+
headers: Record<string, string>;
|
|
166
|
+
timestamp: number;
|
|
167
|
+
attempts: number;
|
|
168
|
+
}
|
|
169
|
+
export interface SessionData {
|
|
170
|
+
sessionId: string;
|
|
171
|
+
startedAt: number;
|
|
172
|
+
url: string;
|
|
173
|
+
referrer: string;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Pulse Core — Shared Type Definitions
|
|
3
|
+
// Platform-specific types (WidgetState extras, internal events) stay in each SDK.
|
|
4
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uCAAuC;AACvC,kFAAkF;AAClF,gFAAgF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAyBA,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAMrC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Pulse Core — Cryptographic Utilities
|
|
3
|
+
// Uses crypto.getRandomValues where available, falls back to Math.random.
|
|
4
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
function getRandomBytes(size) {
|
|
6
|
+
const bytes = new Uint8Array(size);
|
|
7
|
+
if (typeof globalThis.crypto?.getRandomValues === 'function') {
|
|
8
|
+
globalThis.crypto.getRandomValues(bytes);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
for (let i = 0; i < size; i++) {
|
|
12
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return bytes;
|
|
16
|
+
}
|
|
17
|
+
function bytesToHex(bytes) {
|
|
18
|
+
let hex = '';
|
|
19
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
20
|
+
hex += (bytes[i] | 0).toString(16).padStart(2, '0');
|
|
21
|
+
}
|
|
22
|
+
return hex;
|
|
23
|
+
}
|
|
24
|
+
export function generateNonce() {
|
|
25
|
+
return bytesToHex(getRandomBytes(16));
|
|
26
|
+
}
|
|
27
|
+
export function generateUUID() {
|
|
28
|
+
const bytes = getRandomBytes(16);
|
|
29
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40; // version 4
|
|
30
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant
|
|
31
|
+
const hex = bytesToHex(bytes);
|
|
32
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,uCAAuC;AACvC,0EAA0E;AAC1E,gFAAgF;AAEhF,SAAS,cAAc,CAAC,IAAY;IAChC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,OAAO,UAAU,CAAC,MAAM,EAAE,eAAe,KAAK,UAAU,EAAE,CAAC;QAC3D,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB;IACjC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAM,UAAU,aAAa;IACzB,OAAO,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,YAAY;IACxB,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IACjC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,YAAY;IAClD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,UAAU;IAChD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AACnH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function configureLogger(debug: boolean): void;
|
|
2
|
+
export declare const logger: {
|
|
3
|
+
readonly debug: (...args: unknown[]) => void;
|
|
4
|
+
readonly info: (...args: unknown[]) => void;
|
|
5
|
+
readonly warn: (...args: unknown[]) => void;
|
|
6
|
+
readonly error: (...args: unknown[]) => void;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAUA,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEpD;AAOD,eAAO,MAAM,MAAM;8BACA,OAAO,EAAE,KAAG,IAAI;6BAGjB,OAAO,EAAE,KAAG,IAAI;6BAGhB,OAAO,EAAE,KAAG,IAAI;8BAGf,OAAO,EAAE,KAAG,IAAI;CAGzB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
// Pulse Core — Logger Utility
|
|
3
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
4
|
+
const NAMESPACE = '[Pulse]';
|
|
5
|
+
let _debugEnabled = false;
|
|
6
|
+
export function configureLogger(debug) {
|
|
7
|
+
_debugEnabled = debug;
|
|
8
|
+
}
|
|
9
|
+
function formatMessage(level, ...args) {
|
|
10
|
+
const prefix = `${NAMESPACE}[${level.toUpperCase()}]`;
|
|
11
|
+
return [prefix, ...args];
|
|
12
|
+
}
|
|
13
|
+
export const logger = {
|
|
14
|
+
debug(...args) {
|
|
15
|
+
if (_debugEnabled)
|
|
16
|
+
console.log(...formatMessage('debug', ...args));
|
|
17
|
+
},
|
|
18
|
+
info(...args) {
|
|
19
|
+
if (_debugEnabled)
|
|
20
|
+
console.info(...formatMessage('info', ...args));
|
|
21
|
+
},
|
|
22
|
+
warn(...args) {
|
|
23
|
+
console.warn(...formatMessage('warn', ...args));
|
|
24
|
+
},
|
|
25
|
+
error(...args) {
|
|
26
|
+
console.error(...formatMessage('error', ...args));
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF;AAIhF,MAAM,SAAS,GAAG,SAAS,CAAC;AAE5B,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B,MAAM,UAAU,eAAe,CAAC,KAAc;IAC1C,aAAa,GAAG,KAAK,CAAC;AAC1B,CAAC;AAED,SAAS,aAAa,CAAC,KAAe,EAAE,GAAG,IAAe;IACtD,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;IACtD,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IAClB,KAAK,CAAC,GAAG,IAAe;QACpB,IAAI,aAAa;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,GAAG,IAAe;QACnB,IAAI,aAAa;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,GAAG,IAAe;QACnB,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,KAAK,CAAC,GAAG,IAAe;QACpB,OAAO,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;CACK,CAAC"}
|