@ianmenethil/zp-observer 6.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/LICENSE +21 -0
- package/PRIVACY.md +67 -0
- package/README.md +284 -0
- package/dist/auto-patch.cjs +171 -0
- package/dist/auto-patch.cjs.map +7 -0
- package/dist/auto-patch.mjs +148 -0
- package/dist/auto-patch.mjs.map +7 -0
- package/dist/session.cjs +1186 -0
- package/dist/session.cjs.map +7 -0
- package/dist/session.mjs +1163 -0
- package/dist/session.mjs.map +7 -0
- package/dist/types/auto-patch.d.ts +9 -0
- package/dist/types/auto-patch.d.ts.map +1 -0
- package/dist/types/core/beacon.d.ts +6 -0
- package/dist/types/core/beacon.d.ts.map +1 -0
- package/dist/types/core/detection.d.ts +34 -0
- package/dist/types/core/detection.d.ts.map +1 -0
- package/dist/types/core/event-bus.d.ts +21 -0
- package/dist/types/core/event-bus.d.ts.map +1 -0
- package/dist/types/core/experimental.d.ts +35 -0
- package/dist/types/core/experimental.d.ts.map +1 -0
- package/dist/types/core/heartbeat.d.ts +32 -0
- package/dist/types/core/heartbeat.d.ts.map +1 -0
- package/dist/types/core/lifecycle.d.ts +31 -0
- package/dist/types/core/lifecycle.d.ts.map +1 -0
- package/dist/types/core/observer.d.ts +10 -0
- package/dist/types/core/observer.d.ts.map +1 -0
- package/dist/types/core/outbox.d.ts +20 -0
- package/dist/types/core/outbox.d.ts.map +1 -0
- package/dist/types/core/random.d.ts +8 -0
- package/dist/types/core/random.d.ts.map +1 -0
- package/dist/types/core/shortcode.d.ts +17 -0
- package/dist/types/core/shortcode.d.ts.map +1 -0
- package/dist/types/core/types.d.ts +292 -0
- package/dist/types/core/types.d.ts.map +1 -0
- package/dist/types/diagnostics/preflight.d.ts +17 -0
- package/dist/types/diagnostics/preflight.d.ts.map +1 -0
- package/dist/types/index.d.ts +41 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/integration/devicefp-bridge.d.ts +31 -0
- package/dist/types/integration/devicefp-bridge.d.ts.map +1 -0
- package/dist/types/integration/hpp-bridge.d.ts +13 -0
- package/dist/types/integration/hpp-bridge.d.ts.map +1 -0
- package/dist/types/integration/zenpay-auto-patch.d.ts +28 -0
- package/dist/types/integration/zenpay-auto-patch.d.ts.map +1 -0
- package/dist/types/outcome.d.ts +20 -0
- package/dist/types/outcome.d.ts.map +1 -0
- package/dist/types/session.d.ts +54 -0
- package/dist/types/session.d.ts.map +1 -0
- package/dist/types/transport/callback-transport.d.ts +17 -0
- package/dist/types/transport/callback-transport.d.ts.map +1 -0
- package/dist/types/transport/http-transport.d.ts +30 -0
- package/dist/types/transport/http-transport.d.ts.map +1 -0
- package/dist/types/umd.d.ts +16 -0
- package/dist/types/umd.d.ts.map +1 -0
- package/dist/zp-observer.cjs +1375 -0
- package/dist/zp-observer.cjs.map +7 -0
- package/dist/zp-observer.js +1377 -0
- package/dist/zp-observer.js.map +7 -0
- package/dist/zp-observer.min.js +2 -0
- package/dist/zp-observer.min.js.map +7 -0
- package/dist/zp-observer.min.obf.js +1 -0
- package/dist/zp-observer.mjs +1352 -0
- package/dist/zp-observer.mjs.map +7 -0
- package/package.json +91 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for @ianmenethil/zp-observer
|
|
3
|
+
*
|
|
4
|
+
* v6 extends the three-event telemetry model (open / heartbeat / close) into a
|
|
5
|
+
* domain event bus that carries signal from the full payment stack: device
|
|
6
|
+
* fingerprint, HPP lifecycle, and merchant-reported outcomes — all correlated
|
|
7
|
+
* by a single `correlationId`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const VERSION: "6.0.0";
|
|
10
|
+
export type CloseReason = 'user.callback_invoked' | 'user.modal_closed' | 'user.manual_close' | 'system.idle_timeout' | 'system.network_abandoned' | 'page.pagehide';
|
|
11
|
+
export type PaymentOutcome = 'success' | 'declined' | 'abandoned' | 'error' | 'unknown';
|
|
12
|
+
export interface OpenEvent {
|
|
13
|
+
kind: 'open';
|
|
14
|
+
sessionId: string;
|
|
15
|
+
correlationId: string;
|
|
16
|
+
timestamp: number;
|
|
17
|
+
iframeSrc: string | null;
|
|
18
|
+
userAgent: string;
|
|
19
|
+
screenWidth: number;
|
|
20
|
+
screenHeight: number;
|
|
21
|
+
navigationType: string | null;
|
|
22
|
+
metadata: Record<string, unknown>;
|
|
23
|
+
userActivation?: {
|
|
24
|
+
hasBeenActive: boolean;
|
|
25
|
+
isActive: boolean;
|
|
26
|
+
};
|
|
27
|
+
navigationDetail?: {
|
|
28
|
+
wasDiscarded: boolean | null;
|
|
29
|
+
redirectCount: number | null;
|
|
30
|
+
transferSize: number | null;
|
|
31
|
+
type: string | null;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export interface HeartbeatEvent {
|
|
35
|
+
kind: 'heartbeat';
|
|
36
|
+
sessionId: string;
|
|
37
|
+
correlationId: string;
|
|
38
|
+
timestamp: number;
|
|
39
|
+
sequence: number;
|
|
40
|
+
missedBeats: number;
|
|
41
|
+
metadata: Record<string, unknown>;
|
|
42
|
+
}
|
|
43
|
+
export interface CloseEvent {
|
|
44
|
+
kind: 'close';
|
|
45
|
+
sessionId: string;
|
|
46
|
+
correlationId: string;
|
|
47
|
+
timestamp: number;
|
|
48
|
+
reason: CloseReason;
|
|
49
|
+
elapsedMs: number;
|
|
50
|
+
heartbeatCount: number;
|
|
51
|
+
missedBeats: number;
|
|
52
|
+
wasPersisted: boolean | null;
|
|
53
|
+
metadata: Record<string, unknown>;
|
|
54
|
+
}
|
|
55
|
+
export interface SessionInitEvent {
|
|
56
|
+
kind: 'payment.session_init';
|
|
57
|
+
sessionId: string;
|
|
58
|
+
correlationId: string;
|
|
59
|
+
timestamp: number;
|
|
60
|
+
metadata: Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
export interface FingerprintStartedEvent {
|
|
63
|
+
kind: 'payment.fingerprint_started';
|
|
64
|
+
sessionId: string;
|
|
65
|
+
correlationId: string;
|
|
66
|
+
timestamp: number;
|
|
67
|
+
attempt: number;
|
|
68
|
+
metadata: Record<string, unknown>;
|
|
69
|
+
}
|
|
70
|
+
export interface FingerprintCacheHitEvent {
|
|
71
|
+
kind: 'payment.fingerprint_cache_hit';
|
|
72
|
+
sessionId: string;
|
|
73
|
+
correlationId: string;
|
|
74
|
+
timestamp: number;
|
|
75
|
+
age: number;
|
|
76
|
+
metadata: Record<string, unknown>;
|
|
77
|
+
}
|
|
78
|
+
export interface FingerprintSucceededEvent {
|
|
79
|
+
kind: 'payment.fingerprint_succeeded';
|
|
80
|
+
sessionId: string;
|
|
81
|
+
correlationId: string;
|
|
82
|
+
timestamp: number;
|
|
83
|
+
metadata: Record<string, unknown>;
|
|
84
|
+
}
|
|
85
|
+
export interface FingerprintFailedEvent {
|
|
86
|
+
kind: 'payment.fingerprint_failed';
|
|
87
|
+
sessionId: string;
|
|
88
|
+
correlationId: string;
|
|
89
|
+
timestamp: number;
|
|
90
|
+
error: string;
|
|
91
|
+
attempt: number;
|
|
92
|
+
metadata: Record<string, unknown>;
|
|
93
|
+
}
|
|
94
|
+
export interface HppInitEvent {
|
|
95
|
+
kind: 'payment.hpp_init';
|
|
96
|
+
sessionId: string;
|
|
97
|
+
correlationId: string;
|
|
98
|
+
timestamp: number;
|
|
99
|
+
metadata: Record<string, unknown>;
|
|
100
|
+
}
|
|
101
|
+
export interface HppIframeLoadedEvent {
|
|
102
|
+
kind: 'payment.hpp_iframe_loaded';
|
|
103
|
+
sessionId: string;
|
|
104
|
+
correlationId: string;
|
|
105
|
+
timestamp: number;
|
|
106
|
+
metadata: Record<string, unknown>;
|
|
107
|
+
}
|
|
108
|
+
export interface HppConfigInvalidEvent {
|
|
109
|
+
kind: 'payment.hpp_config_invalid';
|
|
110
|
+
sessionId: string;
|
|
111
|
+
correlationId: string;
|
|
112
|
+
timestamp: number;
|
|
113
|
+
errors: string[];
|
|
114
|
+
metadata: Record<string, unknown>;
|
|
115
|
+
}
|
|
116
|
+
export interface ModalOpenedEvent {
|
|
117
|
+
kind: 'payment.modal_opened';
|
|
118
|
+
sessionId: string;
|
|
119
|
+
correlationId: string;
|
|
120
|
+
timestamp: number;
|
|
121
|
+
iframeSrc: string | null;
|
|
122
|
+
metadata: Record<string, unknown>;
|
|
123
|
+
}
|
|
124
|
+
export interface OutcomeEvent {
|
|
125
|
+
kind: 'payment.outcome';
|
|
126
|
+
sessionId: string;
|
|
127
|
+
correlationId: string;
|
|
128
|
+
timestamp: number;
|
|
129
|
+
outcome: PaymentOutcome;
|
|
130
|
+
metadata: Record<string, unknown>;
|
|
131
|
+
}
|
|
132
|
+
export interface PreflightEvent {
|
|
133
|
+
kind: 'payment.preflight';
|
|
134
|
+
sessionId: string;
|
|
135
|
+
correlationId: string;
|
|
136
|
+
timestamp: number;
|
|
137
|
+
metadata: Record<string, unknown>;
|
|
138
|
+
}
|
|
139
|
+
export type ObserverEvent = OpenEvent | HeartbeatEvent | CloseEvent | SessionInitEvent | FingerprintStartedEvent | FingerprintCacheHitEvent | FingerprintSucceededEvent | FingerprintFailedEvent | HppInitEvent | HppIframeLoadedEvent | HppConfigInvalidEvent | ModalOpenedEvent | OutcomeEvent | PreflightEvent;
|
|
140
|
+
export type DiagnosticEvent = {
|
|
141
|
+
kind: 'exp.pageshow';
|
|
142
|
+
persisted: boolean;
|
|
143
|
+
navigationType: string | null;
|
|
144
|
+
timestamp: number;
|
|
145
|
+
} | {
|
|
146
|
+
kind: 'exp.freeze';
|
|
147
|
+
timestamp: number;
|
|
148
|
+
} | {
|
|
149
|
+
kind: 'exp.resume';
|
|
150
|
+
timestamp: number;
|
|
151
|
+
} | {
|
|
152
|
+
kind: 'exp.window_focus';
|
|
153
|
+
timestamp: number;
|
|
154
|
+
} | {
|
|
155
|
+
kind: 'exp.window_blur';
|
|
156
|
+
timestamp: number;
|
|
157
|
+
} | {
|
|
158
|
+
kind: 'exp.visibility_detail';
|
|
159
|
+
prevState: string;
|
|
160
|
+
currState: string;
|
|
161
|
+
prevStateDurationMs: number;
|
|
162
|
+
hasFocus: boolean | null;
|
|
163
|
+
onLine: boolean | null;
|
|
164
|
+
timestamp: number;
|
|
165
|
+
} | {
|
|
166
|
+
kind: 'exp.perf_entry';
|
|
167
|
+
entryType: string;
|
|
168
|
+
name: string;
|
|
169
|
+
startTime: number;
|
|
170
|
+
duration?: number;
|
|
171
|
+
size?: number;
|
|
172
|
+
url?: string;
|
|
173
|
+
timestamp: number;
|
|
174
|
+
} | {
|
|
175
|
+
kind: 'exp.iframe_resize';
|
|
176
|
+
width: number;
|
|
177
|
+
height: number;
|
|
178
|
+
timestamp: number;
|
|
179
|
+
} | {
|
|
180
|
+
kind: 'exp.iframe_src';
|
|
181
|
+
previousSrc: string | null;
|
|
182
|
+
currentSrc: string;
|
|
183
|
+
timestamp: number;
|
|
184
|
+
} | {
|
|
185
|
+
kind: 'exp.page_lifecycle_beacon';
|
|
186
|
+
phase: 'navigation' | 'pageshow' | 'pagehide';
|
|
187
|
+
ok: boolean;
|
|
188
|
+
timestamp: number;
|
|
189
|
+
} | {
|
|
190
|
+
kind: 'exp.was_discarded';
|
|
191
|
+
wasDiscarded: boolean | null;
|
|
192
|
+
timestamp: number;
|
|
193
|
+
} | {
|
|
194
|
+
kind: 'system.persistence_unavailable';
|
|
195
|
+
error: string;
|
|
196
|
+
timestamp: number;
|
|
197
|
+
};
|
|
198
|
+
export interface ExperimentalOptions {
|
|
199
|
+
captureUserActivation?: boolean;
|
|
200
|
+
captureNavigationTimingDetail?: boolean;
|
|
201
|
+
captureWasDiscarded?: boolean;
|
|
202
|
+
capturePageShow?: boolean;
|
|
203
|
+
captureWindowFocus?: boolean;
|
|
204
|
+
captureVisibilityDetail?: boolean;
|
|
205
|
+
captureFreezeResume?: boolean;
|
|
206
|
+
capturePerformanceEntries?: boolean;
|
|
207
|
+
perfEntryTypes?: readonly ('longtask' | 'largest-contentful-paint')[];
|
|
208
|
+
captureIframeResize?: boolean;
|
|
209
|
+
captureIframeSrcChanges?: boolean;
|
|
210
|
+
pageLifecycleBeaconUrl?: string;
|
|
211
|
+
attachDiagnosticsToHeartbeat?: boolean;
|
|
212
|
+
diagnosticsMax?: number;
|
|
213
|
+
}
|
|
214
|
+
export interface TransportResult {
|
|
215
|
+
ok: boolean;
|
|
216
|
+
status?: number;
|
|
217
|
+
}
|
|
218
|
+
export interface Transport {
|
|
219
|
+
/** Generic write path — handles any ObserverEvent. */
|
|
220
|
+
send(event: ObserverEvent): Promise<TransportResult>;
|
|
221
|
+
/** Fire-and-forget delegator for open events. */
|
|
222
|
+
sendOpen(event: OpenEvent): void;
|
|
223
|
+
/** Response-aware delegator for heartbeats. */
|
|
224
|
+
sendHeartbeat(event: HeartbeatEvent): Promise<TransportResult>;
|
|
225
|
+
/** Dismissal-safe delegator for close events. */
|
|
226
|
+
sendClose(event: CloseEvent): void;
|
|
227
|
+
}
|
|
228
|
+
export type UIState = 'IDLE' | 'DETECTING' | 'ACTIVE_MODAL_VISIBLE' | 'BACKGROUND_HIDDEN' | 'DISMISSED';
|
|
229
|
+
export type TransportState = 'CONNECTED' | 'HEARTBEAT_LATE' | 'DISCONNECTED';
|
|
230
|
+
export interface ObserverState {
|
|
231
|
+
ui: UIState;
|
|
232
|
+
transport: TransportState;
|
|
233
|
+
sessionId: string;
|
|
234
|
+
correlationId: string;
|
|
235
|
+
shortcode: string;
|
|
236
|
+
isActive: boolean;
|
|
237
|
+
iframeDetected: boolean;
|
|
238
|
+
heartbeatCount: number;
|
|
239
|
+
missedBeats: number;
|
|
240
|
+
elapsedMs: number;
|
|
241
|
+
}
|
|
242
|
+
export type PersistenceMode = 'memory' | 'localStorage';
|
|
243
|
+
export interface DiagnosticDump {
|
|
244
|
+
sessionId: string;
|
|
245
|
+
correlationId: string;
|
|
246
|
+
state: ObserverState;
|
|
247
|
+
recentEvents: ObserverEvent[];
|
|
248
|
+
diagnostics: DiagnosticEvent[];
|
|
249
|
+
configuredTransport: string;
|
|
250
|
+
version: string;
|
|
251
|
+
}
|
|
252
|
+
export interface ObserverDiagnostics {
|
|
253
|
+
dump(): DiagnosticDump;
|
|
254
|
+
}
|
|
255
|
+
export interface Observer {
|
|
256
|
+
readonly sessionId: string;
|
|
257
|
+
readonly correlationId: string;
|
|
258
|
+
readonly shortcode: string;
|
|
259
|
+
readonly diagnostics: ObserverDiagnostics;
|
|
260
|
+
start(): void;
|
|
261
|
+
stop(reason?: CloseReason): void;
|
|
262
|
+
getState(): ObserverState;
|
|
263
|
+
/** Push a domain event onto the bus and through the transport. */
|
|
264
|
+
emit(event: ObserverEvent): void;
|
|
265
|
+
}
|
|
266
|
+
export interface CreateObserverOptions {
|
|
267
|
+
sessionId: string;
|
|
268
|
+
transport: Transport;
|
|
269
|
+
correlationId?: string;
|
|
270
|
+
metadata?: Record<string, unknown>;
|
|
271
|
+
beforeSend?: (event: ObserverEvent) => ObserverEvent | null;
|
|
272
|
+
heartbeatMs?: number;
|
|
273
|
+
heartbeatMissThreshold?: number;
|
|
274
|
+
idleTimeoutMs?: number;
|
|
275
|
+
detectionIntervalMs?: number;
|
|
276
|
+
detectionTimeoutMs?: number;
|
|
277
|
+
iframeSelectors?: string[];
|
|
278
|
+
debug?: boolean;
|
|
279
|
+
experimental?: ExperimentalOptions;
|
|
280
|
+
onDiagnostic?: (event: DiagnosticEvent) => void;
|
|
281
|
+
persistence?: PersistenceMode;
|
|
282
|
+
}
|
|
283
|
+
export interface PreflightReport {
|
|
284
|
+
ok: boolean;
|
|
285
|
+
endpoint: string;
|
|
286
|
+
status: number | undefined;
|
|
287
|
+
latencyMs: number;
|
|
288
|
+
corsError: boolean;
|
|
289
|
+
networkError: string | null;
|
|
290
|
+
beaconSupported: boolean;
|
|
291
|
+
}
|
|
292
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merchant-facing preflight validator.
|
|
3
|
+
*
|
|
4
|
+
* Sends a single `payment.preflight` event to the configured transport,
|
|
5
|
+
* checks CORS, response code, latency, and reports structural errors.
|
|
6
|
+
* Integrators print the report during development to verify their
|
|
7
|
+
* telemetry pipeline is wired correctly.
|
|
8
|
+
*/
|
|
9
|
+
import type { ObserverEvent, PreflightReport, Transport } from '../core/types.js';
|
|
10
|
+
interface PreflightOptions {
|
|
11
|
+
transport: Transport;
|
|
12
|
+
/** Optional sample event data to include in validation. */
|
|
13
|
+
sample?: Partial<ObserverEvent>;
|
|
14
|
+
}
|
|
15
|
+
export declare function preflight(options: PreflightOptions): Promise<PreflightReport>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../../src/diagnostics/preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElF,UAAU,gBAAgB;IACzB,SAAS,EAAE,SAAS,CAAC;IACrB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAChC;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAyCnF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ianmenethil/zp-observer — public entry (v6)
|
|
3
|
+
*
|
|
4
|
+
* Telemetry bridge for Zenith hosted checkout. Tracks the full payment
|
|
5
|
+
* lifecycle: session init, device fingerprint, HPP detection, modal open,
|
|
6
|
+
* heartbeats, close, and merchant-reported outcomes — all correlated by
|
|
7
|
+
* a single `correlationId`.
|
|
8
|
+
*/
|
|
9
|
+
import { createObserver } from './core/observer.js';
|
|
10
|
+
import { httpTransport } from './transport/http-transport.js';
|
|
11
|
+
import { callbackTransport } from './transport/callback-transport.js';
|
|
12
|
+
import { installZenPayAutoPatch } from './integration/zenpay-auto-patch.js';
|
|
13
|
+
import { installHPPBridge } from './integration/hpp-bridge.js';
|
|
14
|
+
import { installDeviceFPBridge } from './integration/devicefp-bridge.js';
|
|
15
|
+
import { preflight } from './diagnostics/preflight.js';
|
|
16
|
+
import { reportOutcome } from './outcome.js';
|
|
17
|
+
import { VERSION } from './core/types.js';
|
|
18
|
+
export { createObserver, httpTransport, callbackTransport, installZenPayAutoPatch, installHPPBridge, installDeviceFPBridge, preflight, reportOutcome, VERSION, };
|
|
19
|
+
export type { CloseEvent, CloseReason, CreateObserverOptions, DiagnosticDump, DiagnosticEvent, ExperimentalOptions, HeartbeatEvent, HppConfigInvalidEvent, HppIframeLoadedEvent, HppInitEvent, Observer, ObserverDiagnostics, ObserverEvent, ObserverState, OpenEvent, OutcomeEvent, PersistenceMode, PreflightReport, SessionInitEvent, Transport, TransportResult, TransportState, UIState, } from './core/types.js';
|
|
20
|
+
export type { HttpTransportOptions } from './transport/http-transport.js';
|
|
21
|
+
export type { CallbackTransportOptions } from './transport/callback-transport.js';
|
|
22
|
+
export type { AutoPatchHandle, AutoPatchOptions } from './integration/zenpay-auto-patch.js';
|
|
23
|
+
export type { CreateSessionOptions, ZenPaySession } from './session.js';
|
|
24
|
+
export type { ReportOutcomeOptions } from './outcome.js';
|
|
25
|
+
export type { DeviceFPBridgeOptions, DeviceFPHooks } from './integration/devicefp-bridge.js';
|
|
26
|
+
declare global {
|
|
27
|
+
interface Window {
|
|
28
|
+
ZPObserver?: {
|
|
29
|
+
createObserver: typeof createObserver;
|
|
30
|
+
httpTransport: typeof httpTransport;
|
|
31
|
+
callbackTransport: typeof callbackTransport;
|
|
32
|
+
installZenPayAutoPatch: typeof installZenPayAutoPatch;
|
|
33
|
+
installHPPBridge: typeof installHPPBridge;
|
|
34
|
+
installDeviceFPBridge: typeof installDeviceFPBridge;
|
|
35
|
+
preflight: typeof preflight;
|
|
36
|
+
reportOutcome: typeof reportOutcome;
|
|
37
|
+
VERSION: typeof VERSION;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EACN,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,SAAS,EACT,aAAa,EACb,OAAO,GACP,CAAC;AAEF,YAAY,EACX,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,SAAS,EACT,YAAY,EACZ,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,cAAc,EACd,OAAO,GACP,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,YAAY,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAClF,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC5F,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxE,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAE7F,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,UAAU,CAAC,EAAE;YACZ,cAAc,EAAE,OAAO,cAAc,CAAC;YACtC,aAAa,EAAE,OAAO,aAAa,CAAC;YACpC,iBAAiB,EAAE,OAAO,iBAAiB,CAAC;YAC5C,sBAAsB,EAAE,OAAO,sBAAsB,CAAC;YACtD,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;YAC1C,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;YACpD,SAAS,EAAE,OAAO,SAAS,CAAC;YAC5B,aAAa,EAAE,OAAO,aAAa,CAAC;YACpC,OAAO,EAAE,OAAO,OAAO,CAAC;SACxB,CAAC;KACF;CACD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DEVICEFP → OBSERVER bridge.
|
|
3
|
+
*
|
|
4
|
+
* Returns typed hook functions that the integrator spreads into DEVICEFP's
|
|
5
|
+
* `captureThumbmark()` options. Each hook emits a domain event through the
|
|
6
|
+
* observer and then calls the original integrator callback (if provided).
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* const bridge = installDeviceFPBridge(observer);
|
|
10
|
+
* await captureThumbmark({
|
|
11
|
+
* apiKey: '...',
|
|
12
|
+
* onSuccess: bridge.onSucceeded,
|
|
13
|
+
* onError: bridge.onFailed,
|
|
14
|
+
* onCacheHit: bridge.onCacheHit,
|
|
15
|
+
* });
|
|
16
|
+
*/
|
|
17
|
+
import type { Observer } from '../core/types.js';
|
|
18
|
+
export interface DeviceFPBridgeOptions {
|
|
19
|
+
onFingerprintStarted?: (attempt: number) => void;
|
|
20
|
+
onFingerprintCacheHit?: (age: number) => void;
|
|
21
|
+
onFingerprintSucceeded?: () => void;
|
|
22
|
+
onFingerprintFailed?: (error: string, attempt: number) => void;
|
|
23
|
+
}
|
|
24
|
+
export interface DeviceFPHooks {
|
|
25
|
+
onFingerprintStarted: (attempt: number) => void;
|
|
26
|
+
onFingerprintCacheHit: (age: number) => void;
|
|
27
|
+
onFingerprintSucceeded: () => void;
|
|
28
|
+
onFingerprintFailed: (error: string, attempt: number) => void;
|
|
29
|
+
}
|
|
30
|
+
export declare function installDeviceFPBridge(observer: Pick<Observer, 'sessionId' | 'correlationId' | 'emit'>, options?: DeviceFPBridgeOptions): DeviceFPHooks;
|
|
31
|
+
//# sourceMappingURL=devicefp-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devicefp-bridge.d.ts","sourceRoot":"","sources":["../../../src/integration/devicefp-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACrC,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/D;AAED,MAAM,WAAW,aAAa;IAC7B,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,sBAAsB,EAAE,MAAM,IAAI,CAAC;IACnC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9D;AAED,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe,GAAG,MAAM,CAAC,EAChE,OAAO,GAAE,qBAA0B,GACjC,aAAa,CAqDf"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HPP-TS observation bridge — wraps `window.onPaymentPluginLoaded`.
|
|
3
|
+
*
|
|
4
|
+
* HPP-TS v5 exposes `window.onPaymentPluginLoaded` (lines 794-823) as a
|
|
5
|
+
* callback that fires when the payment iframe has loaded. This bridge wraps
|
|
6
|
+
* it to emit `payment.hpp_iframe_loaded` through the observer without
|
|
7
|
+
* modifying HPP-TS source.
|
|
8
|
+
*/
|
|
9
|
+
import type { Observer } from '../core/types.js';
|
|
10
|
+
export declare function installHPPBridge(observer: Pick<Observer, 'sessionId' | 'correlationId' | 'emit'>): {
|
|
11
|
+
uninstall(): void;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=hpp-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hpp-bridge.d.ts","sourceRoot":"","sources":["../../../src/integration/hpp-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe,GAAG,MAAM,CAAC,GAC9D;IAAE,SAAS,IAAI,IAAI,CAAA;CAAE,CAwCvB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ZenPay plugin auto-patch (v6).
|
|
3
|
+
*
|
|
4
|
+
* One-line integration: detects the ZenPay plugin and rewrites its
|
|
5
|
+
* `onPluginClose` at invocation time to use our shortcode. Emits
|
|
6
|
+
* `payment.hpp_init` domain events when the plugin is invoked so the
|
|
7
|
+
* observer's event stream captures HPP lifecycle.
|
|
8
|
+
*
|
|
9
|
+
* Supports:
|
|
10
|
+
* - v3: jQuery plugin `$.fn.zpPayment`
|
|
11
|
+
* - v5: global `window.ZenPay` (class or factory)
|
|
12
|
+
*
|
|
13
|
+
* If neither is present at install time, we set a short-lived polling
|
|
14
|
+
* watch (plugins are typically loaded via <script> before first payment).
|
|
15
|
+
*/
|
|
16
|
+
import type { Observer } from '../core/types.js';
|
|
17
|
+
export interface AutoPatchHandle {
|
|
18
|
+
uninstall(): void;
|
|
19
|
+
isPatched(): boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface AutoPatchOptions {
|
|
22
|
+
pollIntervalMs?: number;
|
|
23
|
+
pollTimeoutMs?: number;
|
|
24
|
+
chainExisting?: boolean;
|
|
25
|
+
debug?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function installZenPayAutoPatch(observer: Pick<Observer, 'sessionId' | 'correlationId' | 'shortcode' | 'emit'>, options?: AutoPatchOptions): AutoPatchHandle;
|
|
28
|
+
//# sourceMappingURL=zenpay-auto-patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zenpay-auto-patch.d.ts","sourceRoot":"","sources":["../../../src/integration/zenpay-auto-patch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAajD,MAAM,WAAW,eAAe;IAC/B,SAAS,IAAI,IAAI,CAAC;IAClB,SAAS,IAAI,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AA8HD,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe,GAAG,WAAW,GAAG,MAAM,CAAC,EAC9E,OAAO,GAAE,gBAAqB,GAC5B,eAAe,CA+DjB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-page outcome reporting.
|
|
3
|
+
*
|
|
4
|
+
* The merchant's "thank you" / "decline" / "error" page is the authoritative
|
|
5
|
+
* outcome source. `reportOutcome` sends a single `payment.outcome` event
|
|
6
|
+
* without needing a live Observer instance — just enough to POST the result.
|
|
7
|
+
*
|
|
8
|
+
* Convention: the HPP backend forwards `correlationId` in the redirect URL
|
|
9
|
+
* as `?cid=<uuid>`. The return page reads it and calls `reportOutcome`.
|
|
10
|
+
*/
|
|
11
|
+
import type { PaymentOutcome, Transport } from './core/types.js';
|
|
12
|
+
export interface ReportOutcomeOptions {
|
|
13
|
+
correlationId: string;
|
|
14
|
+
sessionId: string;
|
|
15
|
+
outcome: PaymentOutcome;
|
|
16
|
+
transport: Transport;
|
|
17
|
+
metadata?: Record<string, unknown>;
|
|
18
|
+
}
|
|
19
|
+
export declare function reportOutcome(options: ReportOutcomeOptions): void;
|
|
20
|
+
//# sourceMappingURL=outcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../../src/outcome.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjE,MAAM,WAAW,oBAAoB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAajE"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified entry point — `createZenPaySession`.
|
|
3
|
+
*
|
|
4
|
+
* Composes the observer, auto-patch, HPP bridge, and DEVICEFP hooks into a
|
|
5
|
+
* single call. Returns a correlation-aware session object the integrator
|
|
6
|
+
* destructures and passes to DEVICEFP and HPP-TS.
|
|
7
|
+
*
|
|
8
|
+
* import { createZenPaySession, httpTransport } from '@ianmenethil/zp-observer/session';
|
|
9
|
+
*
|
|
10
|
+
* const session = await createZenPaySession({
|
|
11
|
+
* sessionId: merchantUPID,
|
|
12
|
+
* transport: httpTransport({ openUrl, aliveUrl, closeUrl }),
|
|
13
|
+
* deviceFP: { apiKey: '...', captureTimeoutMs: 7000 },
|
|
14
|
+
* persistence: 'localStorage',
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // Pass session.fingerprint.hooks to DEVICEFP's captureThumbmark()
|
|
18
|
+
* // Pass session.hppDefaults.onPluginClose to ZenPay
|
|
19
|
+
* // observer starts automatically — no manual start() needed
|
|
20
|
+
*/
|
|
21
|
+
import type { Observer, PersistenceMode, Transport } from './core/types.js';
|
|
22
|
+
import type { AutoPatchOptions } from './integration/zenpay-auto-patch.js';
|
|
23
|
+
export interface CreateSessionOptions {
|
|
24
|
+
sessionId: string;
|
|
25
|
+
transport: Transport;
|
|
26
|
+
correlationId?: string;
|
|
27
|
+
metadata?: Record<string, unknown>;
|
|
28
|
+
persistence?: PersistenceMode;
|
|
29
|
+
deviceFP?: {
|
|
30
|
+
apiKey?: string;
|
|
31
|
+
captureTimeoutMs?: number;
|
|
32
|
+
};
|
|
33
|
+
autoPatch?: AutoPatchOptions;
|
|
34
|
+
heartbeatMs?: number;
|
|
35
|
+
debug?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface ZenPaySession {
|
|
38
|
+
readonly sessionId: string;
|
|
39
|
+
readonly correlationId: string;
|
|
40
|
+
readonly observer: Observer;
|
|
41
|
+
readonly hppDefaults: {
|
|
42
|
+
onPluginClose: string;
|
|
43
|
+
};
|
|
44
|
+
readonly fingerprint: {
|
|
45
|
+
hooks: {
|
|
46
|
+
onFingerprintStarted: (attempt: number) => void;
|
|
47
|
+
onFingerprintCacheHit: (age: number) => void;
|
|
48
|
+
onFingerprintSucceeded: () => void;
|
|
49
|
+
onFingerprintFailed: (error: string, attempt: number) => void;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export declare function createZenPaySession(options: CreateSessionOptions): ZenPaySession;
|
|
54
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,MAAM,WAAW,oBAAoB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE;QACrB,aAAa,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,WAAW,EAAE;QACrB,KAAK,EAAE;YACN,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;YAChD,qBAAqB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;YAC7C,sBAAsB,EAAE,MAAM,IAAI,CAAC;YACnC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;SAC9D,CAAC;KACF,CAAC;CACF;AAED,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,oBAAoB,GAC3B,aAAa,CAiFf"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Callback transport — bring-your-own-sink (v6).
|
|
3
|
+
*
|
|
4
|
+
* For integrators who want full control over how and where events go.
|
|
5
|
+
* `send(event)` is the primary path; `sendOpen` / `sendHeartbeat` / `sendClose`
|
|
6
|
+
* are thin delegators for backward compatibility.
|
|
7
|
+
*/
|
|
8
|
+
import type { ObserverEvent, Transport, TransportResult } from '../core/types.js';
|
|
9
|
+
export interface CallbackTransportOptions {
|
|
10
|
+
onOpen?: (event: ObserverEvent) => void;
|
|
11
|
+
onHeartbeat?: (event: ObserverEvent) => Promise<TransportResult> | TransportResult;
|
|
12
|
+
onClose?: (event: ObserverEvent) => void;
|
|
13
|
+
/** Generic callback for domain events that don't match open/heartbeat/close. */
|
|
14
|
+
onEvent?: (event: ObserverEvent) => Promise<TransportResult> | TransportResult;
|
|
15
|
+
}
|
|
16
|
+
export declare function callbackTransport(opts?: CallbackTransportOptions): Transport;
|
|
17
|
+
//# sourceMappingURL=callback-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback-transport.d.ts","sourceRoot":"","sources":["../../../src/transport/callback-transport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACX,aAAa,EACb,SAAS,EACT,eAAe,EACf,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,wBAAwB;IACxC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;IACnF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACzC,gFAAgF;IAChF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;CAC/E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,wBAA6B,GAAG,SAAS,CAwDhF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default HTTP transport (v6).
|
|
3
|
+
*
|
|
4
|
+
* `send(event)` is the primary write path — dispatches based on event kind.
|
|
5
|
+
* `sendOpen` / `sendHeartbeat` / `sendClose` are retained as thin delegators
|
|
6
|
+
* for backward compatibility with v5 consumers.
|
|
7
|
+
*
|
|
8
|
+
* Strategies:
|
|
9
|
+
* - heartbeat → fetch POST with AbortController timeout (needs status code)
|
|
10
|
+
* - everything else → navigator.sendBeacon, with fetch({keepalive:true}) fallback
|
|
11
|
+
*/
|
|
12
|
+
import type { Transport } from '../core/types.js';
|
|
13
|
+
export interface HttpTransportOptions {
|
|
14
|
+
/** Endpoint for the single `open` beacon. */
|
|
15
|
+
openUrl: string;
|
|
16
|
+
/** Endpoint for periodic heartbeat POSTs. */
|
|
17
|
+
aliveUrl: string;
|
|
18
|
+
/** Endpoint for the final `close` beacon. */
|
|
19
|
+
closeUrl: string;
|
|
20
|
+
/** Optional endpoint for domain events (falls back to aliveUrl). */
|
|
21
|
+
eventUrl?: string;
|
|
22
|
+
/** Static headers applied to heartbeats. sendBeacon cannot set headers. */
|
|
23
|
+
headers?: Record<string, string> | (() => Record<string, string>);
|
|
24
|
+
/** Override fetch (useful for tests / custom retry wrappers). */
|
|
25
|
+
fetch?: typeof fetch;
|
|
26
|
+
/** Heartbeat request timeout. Default 8000ms. */
|
|
27
|
+
heartbeatTimeoutMs?: number;
|
|
28
|
+
}
|
|
29
|
+
export declare function httpTransport(opts: HttpTransportOptions): Transport;
|
|
30
|
+
//# sourceMappingURL=http-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../../src/transport/http-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEjE,MAAM,WAAW,oBAAoB;IACpC,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,CAAC;IAEjB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAElE,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAErB,iDAAiD;IACjD,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA+CD,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,CAgEnE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IIFE entry for the CDN bundle.
|
|
3
|
+
*
|
|
4
|
+
* Built by esbuild (scripts/build.ts) with `globalName: "ZPObserver"`.
|
|
5
|
+
* The IIFE sets `window.ZPObserver` as a side effect so <script> consumers
|
|
6
|
+
* get the same flat namespace:
|
|
7
|
+
*
|
|
8
|
+
* <script src=".../zp-observer.min.js"></script>
|
|
9
|
+
* <script>
|
|
10
|
+
* const obs = ZPObserver.createObserver({ ... });
|
|
11
|
+
* ZPObserver.installZenPayAutoPatch(obs);
|
|
12
|
+
* obs.start();
|
|
13
|
+
* </script>
|
|
14
|
+
*/
|
|
15
|
+
export { createObserver, httpTransport, callbackTransport, installZenPayAutoPatch, installHPPBridge, installDeviceFPBridge, preflight, reportOutcome, VERSION, } from './index.js';
|
|
16
|
+
//# sourceMappingURL=umd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"umd.d.ts","sourceRoot":"","sources":["../../src/umd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACN,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,SAAS,EACT,aAAa,EACb,OAAO,GACP,MAAM,YAAY,CAAC"}
|