@sapiom/browser-pay 0.0.0-stage → 0.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/CHANGELOG.md +13 -0
- package/LICENSE +21 -0
- package/README.md +97 -2
- package/dist/cjs/cdp.d.ts +24 -0
- package/dist/cjs/cdp.d.ts.map +1 -0
- package/dist/cjs/cdp.js +390 -0
- package/dist/cjs/cdp.js.map +1 -0
- package/dist/cjs/contract.d.ts +30 -0
- package/dist/cjs/contract.d.ts.map +1 -0
- package/dist/cjs/contract.js +57 -0
- package/dist/cjs/contract.js.map +1 -0
- package/dist/cjs/detect.d.ts +7 -0
- package/dist/cjs/detect.d.ts.map +1 -0
- package/dist/cjs/detect.js +111 -0
- package/dist/cjs/detect.js.map +1 -0
- package/dist/cjs/guards.d.ts +2 -0
- package/dist/cjs/guards.d.ts.map +1 -0
- package/dist/cjs/guards.js +7 -0
- package/dist/cjs/guards.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interceptor.d.ts +66 -0
- package/dist/cjs/interceptor.d.ts.map +1 -0
- package/dist/cjs/interceptor.js +949 -0
- package/dist/cjs/interceptor.js.map +1 -0
- package/dist/cjs/logger.d.ts +5 -0
- package/dist/cjs/logger.d.ts.map +1 -0
- package/dist/cjs/logger.js +7 -0
- package/dist/cjs/logger.js.map +1 -0
- package/dist/cjs/relay.d.ts +19 -0
- package/dist/cjs/relay.d.ts.map +1 -0
- package/dist/cjs/relay.js +130 -0
- package/dist/cjs/relay.js.map +1 -0
- package/dist/esm/cdp.d.ts +24 -0
- package/dist/esm/cdp.d.ts.map +1 -0
- package/dist/esm/cdp.js +383 -0
- package/dist/esm/cdp.js.map +1 -0
- package/dist/esm/contract.d.ts +30 -0
- package/dist/esm/contract.d.ts.map +1 -0
- package/dist/esm/contract.js +53 -0
- package/dist/esm/contract.js.map +1 -0
- package/dist/esm/detect.d.ts +7 -0
- package/dist/esm/detect.d.ts.map +1 -0
- package/dist/esm/detect.js +107 -0
- package/dist/esm/detect.js.map +1 -0
- package/dist/esm/guards.d.ts +2 -0
- package/dist/esm/guards.d.ts.map +1 -0
- package/dist/esm/guards.js +4 -0
- package/dist/esm/guards.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interceptor.d.ts +66 -0
- package/dist/esm/interceptor.d.ts.map +1 -0
- package/dist/esm/interceptor.js +946 -0
- package/dist/esm/interceptor.js.map +1 -0
- package/dist/esm/logger.d.ts +5 -0
- package/dist/esm/logger.d.ts.map +1 -0
- package/dist/esm/logger.js +4 -0
- package/dist/esm/logger.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/relay.d.ts +19 -0
- package/dist/esm/relay.d.ts.map +1 -0
- package/dist/esm/relay.js +124 -0
- package/dist/esm/relay.js.map +1 -0
- package/package.json +72 -3
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.paymentIdempotencyKey = paymentIdempotencyKey;
|
|
4
|
+
exports.parseRelayResponse = parseRelayResponse;
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
const guards_js_1 = require("./guards.js");
|
|
7
|
+
function paymentIdempotencyKey(method, url, body) {
|
|
8
|
+
return (0, node_crypto_1.createHash)("sha256")
|
|
9
|
+
.update(method)
|
|
10
|
+
.update("\0")
|
|
11
|
+
.update(url)
|
|
12
|
+
.update("\0")
|
|
13
|
+
.update(body)
|
|
14
|
+
.digest("hex");
|
|
15
|
+
}
|
|
16
|
+
function stringRecord(value) {
|
|
17
|
+
if (!(0, guards_js_1.isRecord)(value))
|
|
18
|
+
return undefined;
|
|
19
|
+
const out = {};
|
|
20
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
21
|
+
if (typeof entry !== "string")
|
|
22
|
+
return undefined;
|
|
23
|
+
out[key] = entry;
|
|
24
|
+
}
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
function parseRelayResponse(value) {
|
|
28
|
+
if (!(0, guards_js_1.isRecord)(value) || typeof value.outcome !== "string") {
|
|
29
|
+
throw new Error("Payment relay returned an unreadable response");
|
|
30
|
+
}
|
|
31
|
+
if (value.outcome === "unknown")
|
|
32
|
+
return { outcome: "unknown" };
|
|
33
|
+
if (value.outcome === "refused") {
|
|
34
|
+
if (typeof value.reason !== "string" || value.reason.length === 0) {
|
|
35
|
+
throw new Error("Payment relay returned an unreadable response");
|
|
36
|
+
}
|
|
37
|
+
return { outcome: "refused", reason: value.reason };
|
|
38
|
+
}
|
|
39
|
+
if (value.outcome !== "relayed" || !(0, guards_js_1.isRecord)(value.response)) {
|
|
40
|
+
throw new Error("Payment relay returned an unreadable response");
|
|
41
|
+
}
|
|
42
|
+
const response = value.response;
|
|
43
|
+
const headers = stringRecord(response.headers);
|
|
44
|
+
if (typeof response.status !== "number" ||
|
|
45
|
+
!Number.isInteger(response.status) ||
|
|
46
|
+
response.status < 100 ||
|
|
47
|
+
response.status > 599 ||
|
|
48
|
+
typeof response.body !== "string" ||
|
|
49
|
+
!headers) {
|
|
50
|
+
throw new Error("Payment relay returned an unreadable response");
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
outcome: "relayed",
|
|
54
|
+
response: { status: response.status, headers, body: response.body },
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/contract.ts"],"names":[],"mappings":";;AA6BA,sDAYC;AAYD,gDA8BC;AAnFD,6CAAyC;AACzC,2CAAuC;AA4BvC,SAAgB,qBAAqB,CACnC,MAAc,EACd,GAAW,EACX,IAAY;IAEZ,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,MAAM,CAAC;SACd,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,CAAC,IAAA,oBAAQ,EAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAChD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,IAAI,CAAC,IAAA,oBAAQ,EAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC/D,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,IAAA,oBAAQ,EAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,IACE,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ;QACnC,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QAClC,QAAQ,CAAC,MAAM,GAAG,GAAG;QACrB,QAAQ,CAAC,MAAM,GAAG,GAAG;QACrB,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;QACjC,CAAC,OAAO,EACR,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;KACpE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface HeldPlaceholder {
|
|
2
|
+
number: string;
|
|
3
|
+
injectionRef: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function textHoldsPlaceholderNumber(text: string, number: string): boolean;
|
|
6
|
+
export declare function redactHeld(value: string, number: string): string;
|
|
7
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/detect.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;CACtB;AA6ED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAMT;AAmBD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKhE"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.textHoldsPlaceholderNumber = textHoldsPlaceholderNumber;
|
|
4
|
+
exports.redactHeld = redactHeld;
|
|
5
|
+
function placeholderDigits(number) {
|
|
6
|
+
const digits = number.replace(/[\s-]/g, "");
|
|
7
|
+
if (digits.length === 0 || !/^\d+$/.test(digits))
|
|
8
|
+
return undefined;
|
|
9
|
+
return digits;
|
|
10
|
+
}
|
|
11
|
+
function isSeparatorChar(char) {
|
|
12
|
+
return char === " " || char === "\t" || char === "-" || char === "+";
|
|
13
|
+
}
|
|
14
|
+
function readDecoded(text, index) {
|
|
15
|
+
if (index >= text.length)
|
|
16
|
+
return { char: "", next: index };
|
|
17
|
+
if (text.startsWith("\\u", index)) {
|
|
18
|
+
const hex = text.slice(index + 2, index + 6);
|
|
19
|
+
if (/^[0-9a-fA-F]{4}$/.test(hex)) {
|
|
20
|
+
return {
|
|
21
|
+
char: String.fromCharCode(Number.parseInt(hex, 16)),
|
|
22
|
+
next: index + 6,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
if (text[index] === "+")
|
|
27
|
+
return { char: " ", next: index + 1 };
|
|
28
|
+
if (text[index] === "%" && index + 2 < text.length) {
|
|
29
|
+
const encoded = text.slice(index, index + 3);
|
|
30
|
+
if (/^%[0-9a-fA-F]{2}$/.test(encoded)) {
|
|
31
|
+
try {
|
|
32
|
+
const char = decodeURIComponent(encoded);
|
|
33
|
+
if (char.length === 1)
|
|
34
|
+
return { char, next: index + 3 };
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// keep the literal percent
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return { char: text[index] ?? "", next: index + 1 };
|
|
42
|
+
}
|
|
43
|
+
function heldSpanEnd(text, digits, start) {
|
|
44
|
+
const first = readDecoded(text, start);
|
|
45
|
+
if (first.char !== digits[0])
|
|
46
|
+
return undefined;
|
|
47
|
+
let index = first.next;
|
|
48
|
+
for (let digit = 1; digit < digits.length; digit++) {
|
|
49
|
+
let cursor = index;
|
|
50
|
+
while (cursor < text.length) {
|
|
51
|
+
const separator = readDecoded(text, cursor);
|
|
52
|
+
if (!isSeparatorChar(separator.char) || separator.next === cursor)
|
|
53
|
+
break;
|
|
54
|
+
cursor = separator.next;
|
|
55
|
+
}
|
|
56
|
+
if (cursor !== index) {
|
|
57
|
+
const after = readDecoded(text, cursor);
|
|
58
|
+
if (after.char === digits[digit]) {
|
|
59
|
+
index = after.next;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const raw = readDecoded(text, index);
|
|
64
|
+
if (raw.char !== digits[digit])
|
|
65
|
+
return undefined;
|
|
66
|
+
index = raw.next;
|
|
67
|
+
}
|
|
68
|
+
return index;
|
|
69
|
+
}
|
|
70
|
+
function holdsDigits(text, digits) {
|
|
71
|
+
for (let start = 0; start < text.length; start++) {
|
|
72
|
+
if (heldSpanEnd(text, digits, start) !== undefined)
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
function textHoldsPlaceholderNumber(text, number) {
|
|
78
|
+
if (number.length === 0 || text.length === 0)
|
|
79
|
+
return false;
|
|
80
|
+
if (text.includes(number))
|
|
81
|
+
return true;
|
|
82
|
+
const digits = placeholderDigits(number);
|
|
83
|
+
if (!digits)
|
|
84
|
+
return false;
|
|
85
|
+
return holdsDigits(text, digits);
|
|
86
|
+
}
|
|
87
|
+
function maskHeldSpans(text, digits) {
|
|
88
|
+
let out = "";
|
|
89
|
+
let cursor = 0;
|
|
90
|
+
for (let start = 0; start < text.length;) {
|
|
91
|
+
const end = heldSpanEnd(text, digits, start);
|
|
92
|
+
if (end === undefined) {
|
|
93
|
+
start += 1;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
out += text.slice(cursor, start);
|
|
97
|
+
out += "••••";
|
|
98
|
+
cursor = end;
|
|
99
|
+
start = end;
|
|
100
|
+
}
|
|
101
|
+
return out + text.slice(cursor);
|
|
102
|
+
}
|
|
103
|
+
function redactHeld(value, number) {
|
|
104
|
+
if (number.length === 0 || value.length === 0)
|
|
105
|
+
return value;
|
|
106
|
+
const digits = placeholderDigits(number);
|
|
107
|
+
if (!digits)
|
|
108
|
+
return value.split(number).join("••••");
|
|
109
|
+
return maskHeldSpans(value, digits);
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/guards.ts"],"names":[],"mappings":";;AAAA,4BAEC;AAFD,SAAgB,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { attachInterceptor } from "./interceptor.js";
|
|
2
|
+
export type { AttachOptions, FailureReason, InterceptorEvent, InterceptorHandle, InterceptorTarget, } from "./interceptor.js";
|
|
3
|
+
export { httpPaymentRelay } from "./relay.js";
|
|
4
|
+
export type { HttpRelayOptions, PaymentRelay, RelayCallOptions, } from "./relay.js";
|
|
5
|
+
export type { RelayRequest, RelayResponse } from "./contract.js";
|
|
6
|
+
export type { HeldPlaceholder } from "./detect.js";
|
|
7
|
+
export type { PayLogger } from "./logger.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEjE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.httpPaymentRelay = exports.attachInterceptor = void 0;
|
|
4
|
+
var interceptor_js_1 = require("./interceptor.js");
|
|
5
|
+
Object.defineProperty(exports, "attachInterceptor", { enumerable: true, get: function () { return interceptor_js_1.attachInterceptor; } });
|
|
6
|
+
var relay_js_1 = require("./relay.js");
|
|
7
|
+
Object.defineProperty(exports, "httpPaymentRelay", { enumerable: true, get: function () { return relay_js_1.httpPaymentRelay; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAqD;AAA5C,mHAAA,iBAAiB,OAAA;AAS1B,uCAA8C;AAArC,4GAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type HeldPlaceholder } from "./detect.js";
|
|
2
|
+
import { type PayLogger } from "./logger.js";
|
|
3
|
+
import { type PaymentRelay } from "./relay.js";
|
|
4
|
+
export interface AttachOptions {
|
|
5
|
+
relay: PaymentRelay;
|
|
6
|
+
/** The one placeholder the agent was given for this checkout. */
|
|
7
|
+
placeholder: HeldPlaceholder;
|
|
8
|
+
/** Relay profile, for example `shopify-card-vault`. */
|
|
9
|
+
profileId: string;
|
|
10
|
+
/**
|
|
11
|
+
* How long to wait for the relay before failing the paused request.
|
|
12
|
+
* The relay is not retried. `outcome: "unknown"` is not sent again.
|
|
13
|
+
* A relay that ignores the abort signal still fails here. One waiter's
|
|
14
|
+
* timeout does not abort a shared flight that another waiter still holds.
|
|
15
|
+
*/
|
|
16
|
+
timeoutMs?: number;
|
|
17
|
+
/** Defaults to a logger that discards every line. */
|
|
18
|
+
logger?: PayLogger;
|
|
19
|
+
}
|
|
20
|
+
export type FailureReason = "intercept_unavailable" | "unknown_session" | "unreadable_body" | "detached" | "page_origin" | "unknown" | "timeout" | "network" | "response_credential";
|
|
21
|
+
export type InterceptorEvent = {
|
|
22
|
+
type: "paused";
|
|
23
|
+
url: string;
|
|
24
|
+
method: string;
|
|
25
|
+
targetType: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: "relayed";
|
|
28
|
+
url: string;
|
|
29
|
+
status: number;
|
|
30
|
+
} | {
|
|
31
|
+
type: "relayed_unfulfilled";
|
|
32
|
+
url: string;
|
|
33
|
+
status: number;
|
|
34
|
+
} | {
|
|
35
|
+
type: "refused";
|
|
36
|
+
url: string;
|
|
37
|
+
reason: string;
|
|
38
|
+
} | {
|
|
39
|
+
type: "failed";
|
|
40
|
+
url: string;
|
|
41
|
+
reason: FailureReason;
|
|
42
|
+
};
|
|
43
|
+
export interface InterceptorHandle {
|
|
44
|
+
detach(): Promise<void>;
|
|
45
|
+
/** Subscribe to outcomes. Returns an unsubscribe function. */
|
|
46
|
+
on(listener: (event: InterceptorEvent) => void): () => void;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* A browser CDP websocket URL, or a Playwright/Puppeteer browser or page that
|
|
50
|
+
* can provide one. The interceptor always opens its own connection.
|
|
51
|
+
*/
|
|
52
|
+
export type InterceptorTarget = string | {
|
|
53
|
+
wsEndpoint(): string;
|
|
54
|
+
} | {
|
|
55
|
+
browser(): {
|
|
56
|
+
wsEndpoint(): string;
|
|
57
|
+
} | null;
|
|
58
|
+
} | {
|
|
59
|
+
context(): {
|
|
60
|
+
browser(): {
|
|
61
|
+
wsEndpoint(): string;
|
|
62
|
+
} | null;
|
|
63
|
+
} | null;
|
|
64
|
+
};
|
|
65
|
+
export declare function attachInterceptor(target: InterceptorTarget, options: AttachOptions): Promise<InterceptorHandle>;
|
|
66
|
+
//# sourceMappingURL=interceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/interceptor.ts"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,iEAAiE;IACjE,WAAW,EAAE,eAAe,CAAC;IAC7B,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GACrB,uBAAuB,GACvB,iBAAiB,GACjB,iBAAiB,GACjB,UAAU,GACV,aAAa,GACb,SAAS,GACT,SAAS,GACT,SAAS,GACT,qBAAqB,CAAC;AAE1B,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,8DAA8D;IAC9D,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7D;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN;IAAE,UAAU,IAAI,MAAM,CAAA;CAAE,GACxB;IAAE,OAAO,IAAI;QAAE,UAAU,IAAI,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GAC9C;IAAE,OAAO,IAAI;QAAE,OAAO,IAAI;YAAE,UAAU,IAAI,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AAiIzE,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAS5B"}
|