@ianmenethil/zp-observer 6.0.0 → 6.1.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/README.md +19 -276
- package/dist/adapters/browser-lifecycle-adapter.cjs +51 -0
- package/dist/adapters/browser-lifecycle-adapter.js +48 -0
- package/dist/adapters/iframe-detector-adapter.cjs +108 -0
- package/dist/adapters/iframe-detector-adapter.js +106 -0
- package/dist/client/create-telemetry-client.cjs +136 -0
- package/dist/client/create-telemetry-client.js +134 -0
- package/dist/client/state-machine.cjs +20 -0
- package/dist/client/state-machine.js +18 -0
- package/dist/diagnostics/diagnostics-buffer.cjs +34 -0
- package/dist/diagnostics/diagnostics-buffer.js +32 -0
- package/dist/diagnostics/preflight.cjs +36 -0
- package/dist/diagnostics/preflight.js +34 -0
- package/dist/events/envelope.cjs +23 -0
- package/dist/events/envelope.js +21 -0
- package/dist/index.cjs +23 -0
- package/dist/index.d.ts +230 -0
- package/dist/index.js +10 -0
- package/dist/persistence/local-storage-outbox.cjs +56 -0
- package/dist/persistence/local-storage-outbox.js +54 -0
- package/dist/persistence/memory-outbox.cjs +23 -0
- package/dist/persistence/memory-outbox.js +21 -0
- package/dist/runtime/event-pipeline.cjs +64 -0
- package/dist/runtime/event-pipeline.js +62 -0
- package/dist/runtime/heartbeat-scheduler.cjs +46 -0
- package/dist/runtime/heartbeat-scheduler.js +44 -0
- package/dist/runtime/session-manager.cjs +47 -0
- package/dist/runtime/session-manager.js +45 -0
- package/dist/transport/beacon.cjs +14 -0
- package/dist/transport/beacon.js +12 -0
- package/dist/transport/callback-transport.cjs +19 -0
- package/dist/transport/callback-transport.js +17 -0
- package/dist/transport/http-transport.cjs +62 -0
- package/dist/transport/http-transport.js +60 -0
- package/dist/types/internal.cjs +3 -0
- package/dist/types/internal.js +0 -0
- package/dist/types/public.cjs +3 -0
- package/dist/types/public.js +0 -0
- package/dist/utils/ids.cjs +20 -0
- package/dist/utils/ids.js +17 -0
- package/dist/utils/safe-globals.cjs +11 -0
- package/dist/utils/safe-globals.js +9 -0
- package/dist/version.cjs +5 -0
- package/dist/version.js +2 -0
- package/package.json +29 -89
- package/PRIVACY.md +0 -67
- package/dist/auto-patch.cjs +0 -171
- package/dist/auto-patch.cjs.map +0 -7
- package/dist/auto-patch.mjs +0 -148
- package/dist/auto-patch.mjs.map +0 -7
- package/dist/session.cjs +0 -1186
- package/dist/session.cjs.map +0 -7
- package/dist/session.mjs +0 -1163
- package/dist/session.mjs.map +0 -7
- package/dist/types/auto-patch.d.ts +0 -9
- package/dist/types/auto-patch.d.ts.map +0 -1
- package/dist/types/core/beacon.d.ts +0 -6
- package/dist/types/core/beacon.d.ts.map +0 -1
- package/dist/types/core/detection.d.ts +0 -34
- package/dist/types/core/detection.d.ts.map +0 -1
- package/dist/types/core/event-bus.d.ts +0 -21
- package/dist/types/core/event-bus.d.ts.map +0 -1
- package/dist/types/core/experimental.d.ts +0 -35
- package/dist/types/core/experimental.d.ts.map +0 -1
- package/dist/types/core/heartbeat.d.ts +0 -32
- package/dist/types/core/heartbeat.d.ts.map +0 -1
- package/dist/types/core/lifecycle.d.ts +0 -31
- package/dist/types/core/lifecycle.d.ts.map +0 -1
- package/dist/types/core/observer.d.ts +0 -10
- package/dist/types/core/observer.d.ts.map +0 -1
- package/dist/types/core/outbox.d.ts +0 -20
- package/dist/types/core/outbox.d.ts.map +0 -1
- package/dist/types/core/random.d.ts +0 -8
- package/dist/types/core/random.d.ts.map +0 -1
- package/dist/types/core/shortcode.d.ts +0 -17
- package/dist/types/core/shortcode.d.ts.map +0 -1
- package/dist/types/core/types.d.ts +0 -292
- package/dist/types/core/types.d.ts.map +0 -1
- package/dist/types/diagnostics/preflight.d.ts +0 -17
- package/dist/types/diagnostics/preflight.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -41
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/integration/devicefp-bridge.d.ts +0 -31
- package/dist/types/integration/devicefp-bridge.d.ts.map +0 -1
- package/dist/types/integration/hpp-bridge.d.ts +0 -13
- package/dist/types/integration/hpp-bridge.d.ts.map +0 -1
- package/dist/types/integration/zenpay-auto-patch.d.ts +0 -28
- package/dist/types/integration/zenpay-auto-patch.d.ts.map +0 -1
- package/dist/types/outcome.d.ts +0 -20
- package/dist/types/outcome.d.ts.map +0 -1
- package/dist/types/session.d.ts +0 -54
- package/dist/types/session.d.ts.map +0 -1
- package/dist/types/transport/callback-transport.d.ts +0 -17
- package/dist/types/transport/callback-transport.d.ts.map +0 -1
- package/dist/types/transport/http-transport.d.ts +0 -30
- package/dist/types/transport/http-transport.d.ts.map +0 -1
- package/dist/types/umd.d.ts +0 -16
- package/dist/types/umd.d.ts.map +0 -1
- package/dist/zp-observer.cjs +0 -1375
- package/dist/zp-observer.cjs.map +0 -7
- package/dist/zp-observer.js +0 -1377
- package/dist/zp-observer.js.map +0 -7
- package/dist/zp-observer.min.js +0 -2
- package/dist/zp-observer.min.js.map +0 -7
- package/dist/zp-observer.min.obf.js +0 -1
- package/dist/zp-observer.mjs +0 -1352
- package/dist/zp-observer.mjs.map +0 -7
package/dist/auto-patch.cjs
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/auto-patch.ts
|
|
21
|
-
var auto_patch_exports = {};
|
|
22
|
-
__export(auto_patch_exports, {
|
|
23
|
-
installZenPayAutoPatch: () => installZenPayAutoPatch
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(auto_patch_exports);
|
|
26
|
-
|
|
27
|
-
// src/integration/zenpay-auto-patch.ts
|
|
28
|
-
function logDebug(enabled, ...args) {
|
|
29
|
-
if (enabled && typeof console !== "undefined") {
|
|
30
|
-
console.log("[ZPObserver/auto-patch]", ...args);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function resolveAndCallWindowPath(windowPath) {
|
|
34
|
-
const path = windowPath.replace(/^window\./, "").split(".");
|
|
35
|
-
let ref = window;
|
|
36
|
-
for (const part of path) {
|
|
37
|
-
if (ref && typeof ref === "object" && part in ref) {
|
|
38
|
-
ref = ref[part];
|
|
39
|
-
} else {
|
|
40
|
-
ref = void 0;
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
if (typeof ref === "function") ref();
|
|
45
|
-
}
|
|
46
|
-
function wrapOptions(opts, shortcode, chainExisting) {
|
|
47
|
-
const next = { ...opts ?? {} };
|
|
48
|
-
const existing = next.onPluginClose;
|
|
49
|
-
if (chainExisting && existing != null) {
|
|
50
|
-
if (typeof window !== "undefined") {
|
|
51
|
-
const wrapperName = `__zpobs_chain_${Date.now().toString(36)}`;
|
|
52
|
-
window[wrapperName] = () => {
|
|
53
|
-
try {
|
|
54
|
-
if (typeof existing === "function") {
|
|
55
|
-
existing();
|
|
56
|
-
} else if (typeof existing === "string") {
|
|
57
|
-
resolveAndCallWindowPath(existing);
|
|
58
|
-
}
|
|
59
|
-
} catch {
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
|
-
resolveAndCallWindowPath(shortcode);
|
|
63
|
-
} catch {
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
next.onPluginClose = `window.${wrapperName}`;
|
|
67
|
-
return next;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
next.onPluginClose = shortcode;
|
|
71
|
-
return next;
|
|
72
|
-
}
|
|
73
|
-
function patchJQueryPlugin($, shortcode, chainExisting, debug, onInvoke) {
|
|
74
|
-
const original = $.fn.zpPayment;
|
|
75
|
-
if (typeof original !== "function" || original.__zpobsPatched) {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
const patched = function(opts) {
|
|
79
|
-
onInvoke();
|
|
80
|
-
return original.call(this, wrapOptions(opts, shortcode, chainExisting));
|
|
81
|
-
};
|
|
82
|
-
patched.__zpobsPatched = true;
|
|
83
|
-
$.fn.zpPayment = patched;
|
|
84
|
-
logDebug(debug, "patched $.fn.zpPayment");
|
|
85
|
-
return true;
|
|
86
|
-
}
|
|
87
|
-
function patchZenPayGlobal(shortcode, chainExisting, debug, onInvoke) {
|
|
88
|
-
const w = window;
|
|
89
|
-
const original = w.ZenPay;
|
|
90
|
-
if (typeof original !== "function" || original.__zpobsPatched) {
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
const handler = {
|
|
94
|
-
construct(target, args) {
|
|
95
|
-
onInvoke();
|
|
96
|
-
const [first, ...rest] = args;
|
|
97
|
-
const wrapped = wrapOptions(first, shortcode, chainExisting);
|
|
98
|
-
return Reflect.construct(target, [wrapped, ...rest]);
|
|
99
|
-
},
|
|
100
|
-
apply(target, thisArg, args) {
|
|
101
|
-
onInvoke();
|
|
102
|
-
const [first, ...rest] = args;
|
|
103
|
-
const wrapped = wrapOptions(first, shortcode, chainExisting);
|
|
104
|
-
return Reflect.apply(target, thisArg, [
|
|
105
|
-
wrapped,
|
|
106
|
-
...rest
|
|
107
|
-
]);
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
const patched = new Proxy(original, handler);
|
|
111
|
-
patched.__zpobsPatched = true;
|
|
112
|
-
w.ZenPay = patched;
|
|
113
|
-
logDebug(debug, "patched window.ZenPay");
|
|
114
|
-
return true;
|
|
115
|
-
}
|
|
116
|
-
function installZenPayAutoPatch(observer, options = {}) {
|
|
117
|
-
if (typeof window === "undefined") {
|
|
118
|
-
return { uninstall() {
|
|
119
|
-
}, isPatched: () => false };
|
|
120
|
-
}
|
|
121
|
-
const pollIntervalMs = options.pollIntervalMs ?? 200;
|
|
122
|
-
const pollTimeoutMs = options.pollTimeoutMs ?? 3e4;
|
|
123
|
-
const chainExisting = options.chainExisting !== false;
|
|
124
|
-
const debug = options.debug === true;
|
|
125
|
-
let patched = false;
|
|
126
|
-
const shortcode = observer.shortcode;
|
|
127
|
-
const w = window;
|
|
128
|
-
const emitHppInit = () => {
|
|
129
|
-
observer.emit({
|
|
130
|
-
kind: "payment.hpp_init",
|
|
131
|
-
sessionId: observer.sessionId,
|
|
132
|
-
correlationId: observer.correlationId,
|
|
133
|
-
timestamp: Date.now(),
|
|
134
|
-
metadata: {}
|
|
135
|
-
});
|
|
136
|
-
};
|
|
137
|
-
const tryPatch = () => {
|
|
138
|
-
let didSomething = false;
|
|
139
|
-
const jq = w.jQuery ?? w.$;
|
|
140
|
-
if (jq && typeof jq === "object" && "fn" in jq) {
|
|
141
|
-
if (patchJQueryPlugin(jq, shortcode, chainExisting, debug, emitHppInit)) didSomething = true;
|
|
142
|
-
}
|
|
143
|
-
if ("ZenPay" in window) {
|
|
144
|
-
if (patchZenPayGlobal(shortcode, chainExisting, debug, emitHppInit)) didSomething = true;
|
|
145
|
-
}
|
|
146
|
-
if (didSomething) patched = true;
|
|
147
|
-
return didSomething;
|
|
148
|
-
};
|
|
149
|
-
tryPatch();
|
|
150
|
-
const startedAt = Date.now();
|
|
151
|
-
let pollTimer = setInterval(() => {
|
|
152
|
-
if (Date.now() - startedAt > pollTimeoutMs) {
|
|
153
|
-
if (pollTimer !== null) {
|
|
154
|
-
clearInterval(pollTimer);
|
|
155
|
-
pollTimer = null;
|
|
156
|
-
}
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
tryPatch();
|
|
160
|
-
}, pollIntervalMs);
|
|
161
|
-
return {
|
|
162
|
-
uninstall() {
|
|
163
|
-
if (pollTimer !== null) {
|
|
164
|
-
clearInterval(pollTimer);
|
|
165
|
-
pollTimer = null;
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
isPatched: () => patched
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
//# sourceMappingURL=auto-patch.cjs.map
|
package/dist/auto-patch.cjs.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/auto-patch.ts", "../src/integration/zenpay-auto-patch.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * @ianmenethil/zp-observer/auto-patch \u2014 subpath entry\n *\n * Single export: installZenPayAutoPatch. Import via:\n * import { installZenPayAutoPatch } from '@ianmenethil/zp-observer/auto-patch';\n */\n\nexport { installZenPayAutoPatch } from './integration/zenpay-auto-patch.js';\nexport type { AutoPatchHandle, AutoPatchOptions } from './integration/zenpay-auto-patch.js';\n", "/**\n * ZenPay plugin auto-patch (v6).\n *\n * One-line integration: detects the ZenPay plugin and rewrites its\n * `onPluginClose` at invocation time to use our shortcode. Emits\n * `payment.hpp_init` domain events when the plugin is invoked so the\n * observer's event stream captures HPP lifecycle.\n *\n * Supports:\n * - v3: jQuery plugin `$.fn.zpPayment`\n * - v5: global `window.ZenPay` (class or factory)\n *\n * If neither is present at install time, we set a short-lived polling\n * watch (plugins are typically loaded via <script> before first payment).\n */\n\nimport type { Observer } from '../core/types.js';\n\ninterface JQueryLike {\n\tfn: { zpPayment?: unknown };\n}\n\ninterface ZPOptions {\n\tonPluginClose?: unknown;\n\t[key: string]: unknown;\n}\n\ntype PluginFn = (this: unknown, opts?: ZPOptions) => unknown;\n\nexport interface AutoPatchHandle {\n\tuninstall(): void;\n\tisPatched(): boolean;\n}\n\nexport interface AutoPatchOptions {\n\tpollIntervalMs?: number;\n\tpollTimeoutMs?: number;\n\tchainExisting?: boolean;\n\tdebug?: boolean;\n}\n\nfunction logDebug(enabled: boolean, ...args: unknown[]): void {\n\tif (enabled && typeof console !== 'undefined') {\n\t\tconsole.log('[ZPObserver/auto-patch]', ...args);\n\t}\n}\n\nfunction resolveAndCallWindowPath(windowPath: string): void {\n\tconst path = windowPath.replace(/^window\\./, '').split('.');\n\tlet ref: unknown = window;\n\tfor (const part of path) {\n\t\tif (ref && typeof ref === 'object' && part in ref) {\n\t\t\tref = (ref as Record<string, unknown>)[part];\n\t\t} else {\n\t\t\tref = undefined;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (typeof ref === 'function') (ref as () => void)();\n}\n\nfunction wrapOptions(\n\topts: ZPOptions | undefined,\n\tshortcode: string,\n\tchainExisting: boolean,\n): ZPOptions {\n\tconst next: ZPOptions = { ...(opts ?? {}) };\n\tconst existing = next.onPluginClose;\n\n\tif (chainExisting && existing != null) {\n\t\tif (typeof window !== 'undefined') {\n\t\t\tconst wrapperName = `__zpobs_chain_${Date.now().toString(36)}`;\n\t\t\t(window as unknown as Record<string, unknown>)[wrapperName] = () => {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof existing === 'function') {\n\t\t\t\t\t\t(existing as () => void)();\n\t\t\t\t\t} else if (typeof existing === 'string') {\n\t\t\t\t\t\tresolveAndCallWindowPath(existing);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tresolveAndCallWindowPath(shortcode);\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore\n\t\t\t\t}\n\t\t\t};\n\t\t\tnext.onPluginClose = `window.${wrapperName}`;\n\t\t\treturn next;\n\t\t}\n\t}\n\n\tnext.onPluginClose = shortcode;\n\treturn next;\n}\n\nfunction patchJQueryPlugin(\n\t$: JQueryLike,\n\tshortcode: string,\n\tchainExisting: boolean,\n\tdebug: boolean,\n\tonInvoke: () => void,\n): boolean {\n\tconst original = $.fn.zpPayment as PluginFn | undefined;\n\tif (typeof original !== 'function' || (original as { __zpobsPatched?: boolean }).__zpobsPatched) {\n\t\treturn false;\n\t}\n\n\tconst patched: PluginFn & { __zpobsPatched?: boolean } = function (\n\t\tthis: unknown,\n\t\topts?: ZPOptions,\n\t) {\n\t\tonInvoke();\n\t\treturn original.call(this, wrapOptions(opts, shortcode, chainExisting));\n\t};\n\tpatched.__zpobsPatched = true;\n\t$.fn.zpPayment = patched;\n\n\tlogDebug(debug, 'patched $.fn.zpPayment');\n\treturn true;\n}\n\nfunction patchZenPayGlobal(\n\tshortcode: string,\n\tchainExisting: boolean,\n\tdebug: boolean,\n\tonInvoke: () => void,\n): boolean {\n\tconst w = window as unknown as {\n\t\tZenPay?: (new (opts?: ZPOptions) => unknown) | ((opts?: ZPOptions) => unknown);\n\t};\n\tconst original = w.ZenPay;\n\tif (typeof original !== 'function' || (original as { __zpobsPatched?: boolean }).__zpobsPatched) {\n\t\treturn false;\n\t}\n\n\tconst handler: ProxyHandler<typeof original> = {\n\t\tconstruct(target, args) {\n\t\t\tonInvoke();\n\t\t\tconst [first, ...rest] = args as [ZPOptions | undefined, ...unknown[]];\n\t\t\tconst wrapped = wrapOptions(first, shortcode, chainExisting);\n\t\t\treturn Reflect.construct(target, [wrapped, ...rest]) as object;\n\t\t},\n\t\tapply(target, thisArg, args) {\n\t\t\tonInvoke();\n\t\t\tconst [first, ...rest] = args as [ZPOptions | undefined, ...unknown[]];\n\t\t\tconst wrapped = wrapOptions(first, shortcode, chainExisting);\n\t\t\treturn Reflect.apply(target as (...a: unknown[]) => unknown, thisArg, [\n\t\t\t\twrapped,\n\t\t\t\t...rest,\n\t\t\t]);\n\t\t},\n\t};\n\n\tconst patched = new Proxy(original, handler) as typeof original & {\n\t\t__zpobsPatched?: boolean;\n\t};\n\tpatched.__zpobsPatched = true;\n\tw.ZenPay = patched;\n\n\tlogDebug(debug, 'patched window.ZenPay');\n\treturn true;\n}\n\nexport function installZenPayAutoPatch(\n\tobserver: Pick<Observer, 'sessionId' | 'correlationId' | 'shortcode' | 'emit'>,\n\toptions: AutoPatchOptions = {},\n): AutoPatchHandle {\n\tif (typeof window === 'undefined') {\n\t\treturn { uninstall() {}, isPatched: () => false };\n\t}\n\n\tconst pollIntervalMs = options.pollIntervalMs ?? 200;\n\tconst pollTimeoutMs = options.pollTimeoutMs ?? 30_000;\n\tconst chainExisting = options.chainExisting !== false;\n\tconst debug = options.debug === true;\n\n\tlet patched = false;\n\tconst shortcode = observer.shortcode;\n\tconst w = window as unknown as { jQuery?: JQueryLike; $?: JQueryLike };\n\n\tconst emitHppInit = () => {\n\t\tobserver.emit({\n\t\t\tkind: 'payment.hpp_init',\n\t\t\tsessionId: observer.sessionId,\n\t\t\tcorrelationId: observer.correlationId,\n\t\t\ttimestamp: Date.now(),\n\t\t\tmetadata: {},\n\t\t});\n\t};\n\n\tconst tryPatch = (): boolean => {\n\t\tlet didSomething = false;\n\n\t\tconst jq = w.jQuery ?? w.$;\n\t\tif (jq && typeof jq === 'object' && 'fn' in jq) {\n\t\t\tif (patchJQueryPlugin(jq, shortcode, chainExisting, debug, emitHppInit)) didSomething = true;\n\t\t}\n\n\t\tif ('ZenPay' in window) {\n\t\t\tif (patchZenPayGlobal(shortcode, chainExisting, debug, emitHppInit)) didSomething = true;\n\t\t}\n\n\t\tif (didSomething) patched = true;\n\t\treturn didSomething;\n\t};\n\n\ttryPatch();\n\n\tconst startedAt = Date.now();\n\tlet pollTimer: ReturnType<typeof setInterval> | null = setInterval(() => {\n\t\tif (Date.now() - startedAt > pollTimeoutMs) {\n\t\t\tif (pollTimer !== null) {\n\t\t\t\tclearInterval(pollTimer);\n\t\t\t\tpollTimer = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\ttryPatch();\n\t}, pollIntervalMs);\n\n\treturn {\n\t\tuninstall() {\n\t\t\tif (pollTimer !== null) {\n\t\t\t\tclearInterval(pollTimer);\n\t\t\t\tpollTimer = null;\n\t\t\t}\n\t\t},\n\t\tisPatched: () => patched,\n\t};\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/auto-patch.mjs
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
// src/integration/zenpay-auto-patch.ts
|
|
2
|
-
function logDebug(enabled, ...args) {
|
|
3
|
-
if (enabled && typeof console !== "undefined") {
|
|
4
|
-
console.log("[ZPObserver/auto-patch]", ...args);
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
function resolveAndCallWindowPath(windowPath) {
|
|
8
|
-
const path = windowPath.replace(/^window\./, "").split(".");
|
|
9
|
-
let ref = window;
|
|
10
|
-
for (const part of path) {
|
|
11
|
-
if (ref && typeof ref === "object" && part in ref) {
|
|
12
|
-
ref = ref[part];
|
|
13
|
-
} else {
|
|
14
|
-
ref = void 0;
|
|
15
|
-
break;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
if (typeof ref === "function") ref();
|
|
19
|
-
}
|
|
20
|
-
function wrapOptions(opts, shortcode, chainExisting) {
|
|
21
|
-
const next = { ...opts ?? {} };
|
|
22
|
-
const existing = next.onPluginClose;
|
|
23
|
-
if (chainExisting && existing != null) {
|
|
24
|
-
if (typeof window !== "undefined") {
|
|
25
|
-
const wrapperName = `__zpobs_chain_${Date.now().toString(36)}`;
|
|
26
|
-
window[wrapperName] = () => {
|
|
27
|
-
try {
|
|
28
|
-
if (typeof existing === "function") {
|
|
29
|
-
existing();
|
|
30
|
-
} else if (typeof existing === "string") {
|
|
31
|
-
resolveAndCallWindowPath(existing);
|
|
32
|
-
}
|
|
33
|
-
} catch {
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
resolveAndCallWindowPath(shortcode);
|
|
37
|
-
} catch {
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
next.onPluginClose = `window.${wrapperName}`;
|
|
41
|
-
return next;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
next.onPluginClose = shortcode;
|
|
45
|
-
return next;
|
|
46
|
-
}
|
|
47
|
-
function patchJQueryPlugin($, shortcode, chainExisting, debug, onInvoke) {
|
|
48
|
-
const original = $.fn.zpPayment;
|
|
49
|
-
if (typeof original !== "function" || original.__zpobsPatched) {
|
|
50
|
-
return false;
|
|
51
|
-
}
|
|
52
|
-
const patched = function(opts) {
|
|
53
|
-
onInvoke();
|
|
54
|
-
return original.call(this, wrapOptions(opts, shortcode, chainExisting));
|
|
55
|
-
};
|
|
56
|
-
patched.__zpobsPatched = true;
|
|
57
|
-
$.fn.zpPayment = patched;
|
|
58
|
-
logDebug(debug, "patched $.fn.zpPayment");
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
function patchZenPayGlobal(shortcode, chainExisting, debug, onInvoke) {
|
|
62
|
-
const w = window;
|
|
63
|
-
const original = w.ZenPay;
|
|
64
|
-
if (typeof original !== "function" || original.__zpobsPatched) {
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
const handler = {
|
|
68
|
-
construct(target, args) {
|
|
69
|
-
onInvoke();
|
|
70
|
-
const [first, ...rest] = args;
|
|
71
|
-
const wrapped = wrapOptions(first, shortcode, chainExisting);
|
|
72
|
-
return Reflect.construct(target, [wrapped, ...rest]);
|
|
73
|
-
},
|
|
74
|
-
apply(target, thisArg, args) {
|
|
75
|
-
onInvoke();
|
|
76
|
-
const [first, ...rest] = args;
|
|
77
|
-
const wrapped = wrapOptions(first, shortcode, chainExisting);
|
|
78
|
-
return Reflect.apply(target, thisArg, [
|
|
79
|
-
wrapped,
|
|
80
|
-
...rest
|
|
81
|
-
]);
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
const patched = new Proxy(original, handler);
|
|
85
|
-
patched.__zpobsPatched = true;
|
|
86
|
-
w.ZenPay = patched;
|
|
87
|
-
logDebug(debug, "patched window.ZenPay");
|
|
88
|
-
return true;
|
|
89
|
-
}
|
|
90
|
-
function installZenPayAutoPatch(observer, options = {}) {
|
|
91
|
-
if (typeof window === "undefined") {
|
|
92
|
-
return { uninstall() {
|
|
93
|
-
}, isPatched: () => false };
|
|
94
|
-
}
|
|
95
|
-
const pollIntervalMs = options.pollIntervalMs ?? 200;
|
|
96
|
-
const pollTimeoutMs = options.pollTimeoutMs ?? 3e4;
|
|
97
|
-
const chainExisting = options.chainExisting !== false;
|
|
98
|
-
const debug = options.debug === true;
|
|
99
|
-
let patched = false;
|
|
100
|
-
const shortcode = observer.shortcode;
|
|
101
|
-
const w = window;
|
|
102
|
-
const emitHppInit = () => {
|
|
103
|
-
observer.emit({
|
|
104
|
-
kind: "payment.hpp_init",
|
|
105
|
-
sessionId: observer.sessionId,
|
|
106
|
-
correlationId: observer.correlationId,
|
|
107
|
-
timestamp: Date.now(),
|
|
108
|
-
metadata: {}
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
const tryPatch = () => {
|
|
112
|
-
let didSomething = false;
|
|
113
|
-
const jq = w.jQuery ?? w.$;
|
|
114
|
-
if (jq && typeof jq === "object" && "fn" in jq) {
|
|
115
|
-
if (patchJQueryPlugin(jq, shortcode, chainExisting, debug, emitHppInit)) didSomething = true;
|
|
116
|
-
}
|
|
117
|
-
if ("ZenPay" in window) {
|
|
118
|
-
if (patchZenPayGlobal(shortcode, chainExisting, debug, emitHppInit)) didSomething = true;
|
|
119
|
-
}
|
|
120
|
-
if (didSomething) patched = true;
|
|
121
|
-
return didSomething;
|
|
122
|
-
};
|
|
123
|
-
tryPatch();
|
|
124
|
-
const startedAt = Date.now();
|
|
125
|
-
let pollTimer = setInterval(() => {
|
|
126
|
-
if (Date.now() - startedAt > pollTimeoutMs) {
|
|
127
|
-
if (pollTimer !== null) {
|
|
128
|
-
clearInterval(pollTimer);
|
|
129
|
-
pollTimer = null;
|
|
130
|
-
}
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
tryPatch();
|
|
134
|
-
}, pollIntervalMs);
|
|
135
|
-
return {
|
|
136
|
-
uninstall() {
|
|
137
|
-
if (pollTimer !== null) {
|
|
138
|
-
clearInterval(pollTimer);
|
|
139
|
-
pollTimer = null;
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
|
-
isPatched: () => patched
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
export {
|
|
146
|
-
installZenPayAutoPatch
|
|
147
|
-
};
|
|
148
|
-
//# sourceMappingURL=auto-patch.mjs.map
|
package/dist/auto-patch.mjs.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/integration/zenpay-auto-patch.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * ZenPay plugin auto-patch (v6).\n *\n * One-line integration: detects the ZenPay plugin and rewrites its\n * `onPluginClose` at invocation time to use our shortcode. Emits\n * `payment.hpp_init` domain events when the plugin is invoked so the\n * observer's event stream captures HPP lifecycle.\n *\n * Supports:\n * - v3: jQuery plugin `$.fn.zpPayment`\n * - v5: global `window.ZenPay` (class or factory)\n *\n * If neither is present at install time, we set a short-lived polling\n * watch (plugins are typically loaded via <script> before first payment).\n */\n\nimport type { Observer } from '../core/types.js';\n\ninterface JQueryLike {\n\tfn: { zpPayment?: unknown };\n}\n\ninterface ZPOptions {\n\tonPluginClose?: unknown;\n\t[key: string]: unknown;\n}\n\ntype PluginFn = (this: unknown, opts?: ZPOptions) => unknown;\n\nexport interface AutoPatchHandle {\n\tuninstall(): void;\n\tisPatched(): boolean;\n}\n\nexport interface AutoPatchOptions {\n\tpollIntervalMs?: number;\n\tpollTimeoutMs?: number;\n\tchainExisting?: boolean;\n\tdebug?: boolean;\n}\n\nfunction logDebug(enabled: boolean, ...args: unknown[]): void {\n\tif (enabled && typeof console !== 'undefined') {\n\t\tconsole.log('[ZPObserver/auto-patch]', ...args);\n\t}\n}\n\nfunction resolveAndCallWindowPath(windowPath: string): void {\n\tconst path = windowPath.replace(/^window\\./, '').split('.');\n\tlet ref: unknown = window;\n\tfor (const part of path) {\n\t\tif (ref && typeof ref === 'object' && part in ref) {\n\t\t\tref = (ref as Record<string, unknown>)[part];\n\t\t} else {\n\t\t\tref = undefined;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (typeof ref === 'function') (ref as () => void)();\n}\n\nfunction wrapOptions(\n\topts: ZPOptions | undefined,\n\tshortcode: string,\n\tchainExisting: boolean,\n): ZPOptions {\n\tconst next: ZPOptions = { ...(opts ?? {}) };\n\tconst existing = next.onPluginClose;\n\n\tif (chainExisting && existing != null) {\n\t\tif (typeof window !== 'undefined') {\n\t\t\tconst wrapperName = `__zpobs_chain_${Date.now().toString(36)}`;\n\t\t\t(window as unknown as Record<string, unknown>)[wrapperName] = () => {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof existing === 'function') {\n\t\t\t\t\t\t(existing as () => void)();\n\t\t\t\t\t} else if (typeof existing === 'string') {\n\t\t\t\t\t\tresolveAndCallWindowPath(existing);\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tresolveAndCallWindowPath(shortcode);\n\t\t\t\t} catch {\n\t\t\t\t\t// ignore\n\t\t\t\t}\n\t\t\t};\n\t\t\tnext.onPluginClose = `window.${wrapperName}`;\n\t\t\treturn next;\n\t\t}\n\t}\n\n\tnext.onPluginClose = shortcode;\n\treturn next;\n}\n\nfunction patchJQueryPlugin(\n\t$: JQueryLike,\n\tshortcode: string,\n\tchainExisting: boolean,\n\tdebug: boolean,\n\tonInvoke: () => void,\n): boolean {\n\tconst original = $.fn.zpPayment as PluginFn | undefined;\n\tif (typeof original !== 'function' || (original as { __zpobsPatched?: boolean }).__zpobsPatched) {\n\t\treturn false;\n\t}\n\n\tconst patched: PluginFn & { __zpobsPatched?: boolean } = function (\n\t\tthis: unknown,\n\t\topts?: ZPOptions,\n\t) {\n\t\tonInvoke();\n\t\treturn original.call(this, wrapOptions(opts, shortcode, chainExisting));\n\t};\n\tpatched.__zpobsPatched = true;\n\t$.fn.zpPayment = patched;\n\n\tlogDebug(debug, 'patched $.fn.zpPayment');\n\treturn true;\n}\n\nfunction patchZenPayGlobal(\n\tshortcode: string,\n\tchainExisting: boolean,\n\tdebug: boolean,\n\tonInvoke: () => void,\n): boolean {\n\tconst w = window as unknown as {\n\t\tZenPay?: (new (opts?: ZPOptions) => unknown) | ((opts?: ZPOptions) => unknown);\n\t};\n\tconst original = w.ZenPay;\n\tif (typeof original !== 'function' || (original as { __zpobsPatched?: boolean }).__zpobsPatched) {\n\t\treturn false;\n\t}\n\n\tconst handler: ProxyHandler<typeof original> = {\n\t\tconstruct(target, args) {\n\t\t\tonInvoke();\n\t\t\tconst [first, ...rest] = args as [ZPOptions | undefined, ...unknown[]];\n\t\t\tconst wrapped = wrapOptions(first, shortcode, chainExisting);\n\t\t\treturn Reflect.construct(target, [wrapped, ...rest]) as object;\n\t\t},\n\t\tapply(target, thisArg, args) {\n\t\t\tonInvoke();\n\t\t\tconst [first, ...rest] = args as [ZPOptions | undefined, ...unknown[]];\n\t\t\tconst wrapped = wrapOptions(first, shortcode, chainExisting);\n\t\t\treturn Reflect.apply(target as (...a: unknown[]) => unknown, thisArg, [\n\t\t\t\twrapped,\n\t\t\t\t...rest,\n\t\t\t]);\n\t\t},\n\t};\n\n\tconst patched = new Proxy(original, handler) as typeof original & {\n\t\t__zpobsPatched?: boolean;\n\t};\n\tpatched.__zpobsPatched = true;\n\tw.ZenPay = patched;\n\n\tlogDebug(debug, 'patched window.ZenPay');\n\treturn true;\n}\n\nexport function installZenPayAutoPatch(\n\tobserver: Pick<Observer, 'sessionId' | 'correlationId' | 'shortcode' | 'emit'>,\n\toptions: AutoPatchOptions = {},\n): AutoPatchHandle {\n\tif (typeof window === 'undefined') {\n\t\treturn { uninstall() {}, isPatched: () => false };\n\t}\n\n\tconst pollIntervalMs = options.pollIntervalMs ?? 200;\n\tconst pollTimeoutMs = options.pollTimeoutMs ?? 30_000;\n\tconst chainExisting = options.chainExisting !== false;\n\tconst debug = options.debug === true;\n\n\tlet patched = false;\n\tconst shortcode = observer.shortcode;\n\tconst w = window as unknown as { jQuery?: JQueryLike; $?: JQueryLike };\n\n\tconst emitHppInit = () => {\n\t\tobserver.emit({\n\t\t\tkind: 'payment.hpp_init',\n\t\t\tsessionId: observer.sessionId,\n\t\t\tcorrelationId: observer.correlationId,\n\t\t\ttimestamp: Date.now(),\n\t\t\tmetadata: {},\n\t\t});\n\t};\n\n\tconst tryPatch = (): boolean => {\n\t\tlet didSomething = false;\n\n\t\tconst jq = w.jQuery ?? w.$;\n\t\tif (jq && typeof jq === 'object' && 'fn' in jq) {\n\t\t\tif (patchJQueryPlugin(jq, shortcode, chainExisting, debug, emitHppInit)) didSomething = true;\n\t\t}\n\n\t\tif ('ZenPay' in window) {\n\t\t\tif (patchZenPayGlobal(shortcode, chainExisting, debug, emitHppInit)) didSomething = true;\n\t\t}\n\n\t\tif (didSomething) patched = true;\n\t\treturn didSomething;\n\t};\n\n\ttryPatch();\n\n\tconst startedAt = Date.now();\n\tlet pollTimer: ReturnType<typeof setInterval> | null = setInterval(() => {\n\t\tif (Date.now() - startedAt > pollTimeoutMs) {\n\t\t\tif (pollTimer !== null) {\n\t\t\t\tclearInterval(pollTimer);\n\t\t\t\tpollTimer = null;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\ttryPatch();\n\t}, pollIntervalMs);\n\n\treturn {\n\t\tuninstall() {\n\t\t\tif (pollTimer !== null) {\n\t\t\t\tclearInterval(pollTimer);\n\t\t\t\tpollTimer = null;\n\t\t\t}\n\t\t},\n\t\tisPatched: () => patched,\n\t};\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|