@prosopo/procaptcha-frictionless 2.12.8 → 2.12.10
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/.turbo/turbo-build$colon$cjs.log +3 -3
- package/.turbo/turbo-build$colon$tsc.log +25 -25
- package/.turbo/turbo-build.log +4 -4
- package/CHANGELOG.md +27 -0
- package/dist/cjs/customDetectBot.cjs +25 -4
- package/dist/customDetectBot.d.ts.map +1 -1
- package/dist/customDetectBot.js +25 -4
- package/dist/customDetectBot.js.map +1 -1
- package/package.json +8 -8
- package/src/customDetectBot.ts +44 -4
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-frictionless@2.12.
|
|
2
|
+
> @prosopo/procaptcha-frictionless@2.12.10 build:cjs
|
|
3
3
|
> NODE_ENV=${NODE_ENV:-development}; vite build --config vite.cjs.config.ts --mode $NODE_ENV
|
|
4
4
|
|
|
5
5
|
ViteCommonJSConfig: .
|
|
@@ -61,6 +61,6 @@ rendering chunks...
|
|
|
61
61
|
[2mdist/cjs/[22m[36mindex.cjs [39m[1m[2m0.24 kB[22m[1m[22m
|
|
62
62
|
[2mdist/cjs/[22m[36msessionInvalidatedRecovery.cjs [39m[1m[2m0.85 kB[22m[1m[22m
|
|
63
63
|
[2mdist/cjs/[22m[36mdetectorLoader.cjs [39m[1m[2m1.37 kB[22m[1m[22m
|
|
64
|
-
[2mdist/cjs/[22m[36mcustomDetectBot.cjs [39m[1m[
|
|
64
|
+
[2mdist/cjs/[22m[36mcustomDetectBot.cjs [39m[1m[2m4.01 kB[22m[1m[22m
|
|
65
65
|
[2mdist/cjs/[22m[36mProcaptchaFrictionless.cjs [39m[1m[2m9.11 kB[22m[1m[22m
|
|
66
|
-
[32m✓ built in
|
|
66
|
+
[32m✓ built in 135ms[39m
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-frictionless@2.12.
|
|
2
|
+
> @prosopo/procaptcha-frictionless@2.12.10 build:tsc
|
|
3
3
|
> tsc --build --verbose
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
8:57:20 AM - Projects in this build:
|
|
6
6
|
* ../../dev/config/tsconfig.json
|
|
7
7
|
* ../locale/tsconfig.json
|
|
8
8
|
* ../util/tsconfig.json
|
|
@@ -26,49 +26,49 @@
|
|
|
26
26
|
* ../procaptcha-react/tsconfig.json
|
|
27
27
|
* tsconfig.json
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
8:57:20 AM - Project '../../dev/config/tsconfig.json' is up to date because newest input '../../dev/config/src/webpack/webpack.config.ts' is older than output '../../dev/config/tsconfig.tsbuildinfo'
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
8:57:20 AM - Project '../locale/tsconfig.json' is up to date because newest input '../locale/src/translationKey.ts' is older than output '../locale/tsconfig.tsbuildinfo'
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
8:57:20 AM - Project '../util/tsconfig.json' is up to date because newest input '../util/src/url.ts' is older than output '../util/tsconfig.tsbuildinfo'
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
8:57:20 AM - Project '../util-crypto/tsconfig.json' is up to date because newest input '../util-crypto/src/types.ts' is older than output '../util-crypto/tsconfig.tsbuildinfo'
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
8:57:20 AM - Project '../types/tsconfig.json' is up to date because newest input '../types/src/provider/api.ts' is older than output '../types/tsconfig.tsbuildinfo'
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
8:57:20 AM - Project '../detector/tsconfig.json' is up to date because newest input '../detector/src/index.js' is older than output '../detector/tsconfig.tsbuildinfo'
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
8:57:20 AM - Project '../api/tsconfig.json' is up to date because newest input '../api/src/index.ts' is older than output '../api/tsconfig.tsbuildinfo'
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
8:57:20 AM - Project '../logger/tsconfig.json' is up to date because newest input '../logger/src/index.ts' is older than output '../logger/tsconfig.tsbuildinfo'
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
8:57:20 AM - Project '../common/tsconfig.json' is up to date because newest input '../common/src/index.ts' is older than output '../common/tsconfig.tsbuildinfo'
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
8:57:20 AM - Project '../fingerprintjs/tsconfig.json' is up to date because newest input '../fingerprintjs/src/utils/browser.ts' is older than output '../fingerprintjs/tsconfig.tsbuildinfo'
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
8:57:20 AM - Project '../fingerprint/tsconfig.json' is up to date because newest input '../fingerprint/src/index.ts' is older than output '../fingerprint/tsconfig.tsbuildinfo'
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
8:57:20 AM - Project '../load-balancer/tsconfig.json' is up to date because newest input '../load-balancer/src/index.ts' is older than output '../load-balancer/tsconfig.tsbuildinfo'
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
8:57:20 AM - Project '../widget-skeleton/tsconfig.json' is up to date because newest input '../widget-skeleton/src/webComponent/createWidget.ts' is older than output '../widget-skeleton/tsconfig.tsbuildinfo'
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
8:57:20 AM - Project '../keyring/tsconfig.json' is up to date because newest input '../keyring/src/keyring/keyring.ts' is older than output '../keyring/tsconfig.tsbuildinfo'
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
8:57:20 AM - Project '../account/tsconfig.json' is up to date because newest input '../account/src/custom.d.ts' is older than output '../account/tsconfig.tsbuildinfo'
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
8:57:20 AM - Project '../procaptcha-common/tsconfig.json' is up to date because newest input '../procaptcha-common/src/extensionLoader.ts' is older than output '../procaptcha-common/tsconfig.tsbuildinfo'
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
8:57:20 AM - Project '../procaptcha-pow/tsconfig.json' is up to date because newest input '../procaptcha-pow/src/index.ts' is older than output '../procaptcha-pow/tsconfig.tsbuildinfo'
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
8:57:20 AM - Project '../procaptcha-puzzle/tsconfig.json' is up to date because newest input '../procaptcha-puzzle/src/index.ts' is older than output '../procaptcha-puzzle/tsconfig.tsbuildinfo'
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
8:57:20 AM - Project '../datasets/tsconfig.json' is up to date because newest input '../datasets/src/tests/mocks/data/captchas.ts' is older than output '../datasets/tsconfig.tsbuildinfo'
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
8:57:20 AM - Project '../procaptcha/tsconfig.json' is up to date because newest input '../procaptcha/src/index.ts' is older than output '../procaptcha/tsconfig.tsbuildinfo'
|
|
68
68
|
|
|
69
|
-
|
|
69
|
+
8:57:20 AM - Project '../procaptcha-react/tsconfig.json' is up to date because newest input '../procaptcha-react/src/index.ts' is older than output '../procaptcha-react/tsconfig.tsbuildinfo'
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
8:57:20 AM - Project 'tsconfig.json' is out of date because output file 'tsconfig.tsbuildinfo' does not exist
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
8:57:20 AM - Building project '/home/runner/work/captcha/captcha/packages/procaptcha-frictionless/tsconfig.json'...
|
|
74
74
|
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
> @prosopo/procaptcha-frictionless@2.12.
|
|
2
|
+
> @prosopo/procaptcha-frictionless@2.12.10 build
|
|
3
3
|
> npm run build:cross-env -- --mode ${NODE_ENV:-development}
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @prosopo/procaptcha-frictionless@2.12.
|
|
6
|
+
> @prosopo/procaptcha-frictionless@2.12.10 build:cross-env
|
|
7
7
|
> vite build --config vite.esm.config.ts --mode production
|
|
8
8
|
|
|
9
9
|
ViteEsmConfig: .
|
|
@@ -64,6 +64,6 @@ rendering chunks...
|
|
|
64
64
|
[2mdist/[22m[36mindex.js [39m[1m[2m0.11 kB[22m[1m[22m
|
|
65
65
|
[2mdist/[22m[36mdetectorLoader.js [39m[1m[2m0.11 kB[22m[1m[22m
|
|
66
66
|
[2mdist/[22m[36msessionInvalidatedRecovery.js [39m[1m[2m0.71 kB[22m[1m[22m
|
|
67
|
-
[2mdist/[22m[36mcustomDetectBot.js [39m[1m[2m3.
|
|
67
|
+
[2mdist/[22m[36mcustomDetectBot.js [39m[1m[2m3.83 kB[22m[1m[22m
|
|
68
68
|
[2mdist/[22m[36mProcaptchaFrictionless.js [39m[1m[2m7.67 kB[22m[1m[22m
|
|
69
|
-
[32m✓ built in
|
|
69
|
+
[32m✓ built in 196ms[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# @prosopo/procaptcha-frictionless
|
|
2
2
|
|
|
3
|
+
## 2.12.10
|
|
4
|
+
### Patch Changes
|
|
5
|
+
|
|
6
|
+
- Updated dependencies [8bde5df]
|
|
7
|
+
- @prosopo/types@4.9.7
|
|
8
|
+
- @prosopo/api@3.5.14
|
|
9
|
+
- @prosopo/detector@3.5.8
|
|
10
|
+
- @prosopo/procaptcha-common@2.11.8
|
|
11
|
+
- @prosopo/procaptcha-pow@2.10.14
|
|
12
|
+
- @prosopo/procaptcha-puzzle@2.10.29
|
|
13
|
+
- @prosopo/procaptcha-react@2.9.87
|
|
14
|
+
|
|
15
|
+
## 2.12.9
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- 35d2784: Report the top-frame URL as `currentUrl` when the widget runs inside an iframe.
|
|
19
|
+
|
|
20
|
+
Previously the frictionless client always sent `window.location.origin + pathname`, which is the iframe's own URL — so every session loaded through Protect's site-wide iframe (`protect.<tenant>.live/...`) reported the same widget endpoint regardless of which page the user was actually on. Downstream detectors (HEAD_HASH_OUTLIER's proxy-pool signal in particular) then saw diverse-geography traffic on one URL+UA fingerprint and treated our own iframe as a bot cluster.
|
|
21
|
+
|
|
22
|
+
Resolution order for `currentUrl`:
|
|
23
|
+
1. Top window → local `location.href` (widget is the top frame).
|
|
24
|
+
2. Same-origin iframe → `window.top.location.href`.
|
|
25
|
+
3. Cross-origin iframe → `document.referrer` (browser fills it subject to Referrer-Policy).
|
|
26
|
+
4. Fallback → the iframe's own `location.href` so the field is never empty.
|
|
27
|
+
|
|
28
|
+
Origin+path sanitisation is preserved across all paths — the query string, fragment and any embedded credentials are still stripped before the URL leaves the browser.
|
|
29
|
+
|
|
3
30
|
## 2.12.8
|
|
4
31
|
### Patch Changes
|
|
5
32
|
|
|
@@ -4,15 +4,36 @@ const api = require("@prosopo/api");
|
|
|
4
4
|
const common = require("@prosopo/common");
|
|
5
5
|
const procaptchaCommon = require("@prosopo/procaptcha-common");
|
|
6
6
|
const detectorLoader = require("./detectorLoader.cjs");
|
|
7
|
+
const sanitiseHref = (href) => {
|
|
8
|
+
try {
|
|
9
|
+
const u = new URL(href);
|
|
10
|
+
if (!u.origin || u.origin === "null") return void 0;
|
|
11
|
+
return `${u.origin}${u.pathname || ""}`;
|
|
12
|
+
} catch {
|
|
13
|
+
return void 0;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
7
16
|
const getCurrentPageUrl = () => {
|
|
8
17
|
if (typeof window === "undefined" || !window.location) {
|
|
9
18
|
return void 0;
|
|
10
19
|
}
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
return void 0;
|
|
20
|
+
const local = (() => {
|
|
21
|
+
const { origin, pathname } = window.location;
|
|
22
|
+
if (!origin || origin === "null") return void 0;
|
|
23
|
+
return `${origin}${pathname || ""}`;
|
|
24
|
+
})();
|
|
25
|
+
if (window === window.top) return local;
|
|
26
|
+
try {
|
|
27
|
+
const topHref = window.top?.location?.href;
|
|
28
|
+
const sanitised = topHref ? sanitiseHref(topHref) : void 0;
|
|
29
|
+
if (sanitised) return sanitised;
|
|
30
|
+
} catch {
|
|
31
|
+
}
|
|
32
|
+
if (typeof document !== "undefined" && document.referrer) {
|
|
33
|
+
const fromReferrer = sanitiseHref(document.referrer);
|
|
34
|
+
if (fromReferrer) return fromReferrer;
|
|
14
35
|
}
|
|
15
|
-
return
|
|
36
|
+
return local;
|
|
16
37
|
};
|
|
17
38
|
const withTimeout = async (promise, ms) => {
|
|
18
39
|
let timeoutId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customDetectBot.d.ts","sourceRoot":"","sources":["../src/customDetectBot.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACX,oBAAoB,EAGpB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"customDetectBot.d.ts","sourceRoot":"","sources":["../src/customDetectBot.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACX,oBAAoB,EAGpB,MAAM,gBAAgB,CAAC;AA8DxB,eAAO,MAAM,WAAW,GAAU,CAAC,WACzB,OAAO,CAAC,CAAC,CAAC,MACf,MAAM,KACR,OAAO,CAAC,CAAC,CAoBX,CAAC;AAEF,QAAA,MAAM,eAAe,EAAE,oBAwGtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
package/dist/customDetectBot.js
CHANGED
|
@@ -2,15 +2,36 @@ import { ProviderApi } from "@prosopo/api";
|
|
|
2
2
|
import { ProsopoEnvError } from "@prosopo/common";
|
|
3
3
|
import { ExtensionLoader, getProcaptchaRandomActiveProvider, pickIpMode } from "@prosopo/procaptcha-common";
|
|
4
4
|
import { DetectorLoader } from "./detectorLoader.js";
|
|
5
|
+
const sanitiseHref = (href) => {
|
|
6
|
+
try {
|
|
7
|
+
const u = new URL(href);
|
|
8
|
+
if (!u.origin || u.origin === "null") return void 0;
|
|
9
|
+
return `${u.origin}${u.pathname || ""}`;
|
|
10
|
+
} catch {
|
|
11
|
+
return void 0;
|
|
12
|
+
}
|
|
13
|
+
};
|
|
5
14
|
const getCurrentPageUrl = () => {
|
|
6
15
|
if (typeof window === "undefined" || !window.location) {
|
|
7
16
|
return void 0;
|
|
8
17
|
}
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
return void 0;
|
|
18
|
+
const local = (() => {
|
|
19
|
+
const { origin, pathname } = window.location;
|
|
20
|
+
if (!origin || origin === "null") return void 0;
|
|
21
|
+
return `${origin}${pathname || ""}`;
|
|
22
|
+
})();
|
|
23
|
+
if (window === window.top) return local;
|
|
24
|
+
try {
|
|
25
|
+
const topHref = window.top?.location?.href;
|
|
26
|
+
const sanitised = topHref ? sanitiseHref(topHref) : void 0;
|
|
27
|
+
if (sanitised) return sanitised;
|
|
28
|
+
} catch {
|
|
29
|
+
}
|
|
30
|
+
if (typeof document !== "undefined" && document.referrer) {
|
|
31
|
+
const fromReferrer = sanitiseHref(document.referrer);
|
|
32
|
+
if (fromReferrer) return fromReferrer;
|
|
12
33
|
}
|
|
13
|
-
return
|
|
34
|
+
return local;
|
|
14
35
|
};
|
|
15
36
|
const withTimeout = async (promise, ms) => {
|
|
16
37
|
let timeoutId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customDetectBot.js","sourceRoot":"","sources":["../src/customDetectBot.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACN,eAAe,EACf,iCAAiC,EACjC,UAAU,GACV,MAAM,4BAA4B,CAAC;AAOpC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"customDetectBot.js","sourceRoot":"","sources":["../src/customDetectBot.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prosopo/procaptcha-frictionless",
|
|
3
|
-
"version": "2.12.
|
|
3
|
+
"version": "2.12.10",
|
|
4
4
|
"author": "PROSOPO LIMITED <info@prosopo.io>",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -30,15 +30,15 @@
|
|
|
30
30
|
},
|
|
31
31
|
"browserslist": ["> 0.5%, last 2 versions, not dead"],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@prosopo/api": "3.5.
|
|
33
|
+
"@prosopo/api": "3.5.14",
|
|
34
34
|
"@prosopo/common": "3.1.43",
|
|
35
|
-
"@prosopo/detector": "3.5.
|
|
35
|
+
"@prosopo/detector": "3.5.8",
|
|
36
36
|
"@prosopo/locale": "3.2.6",
|
|
37
|
-
"@prosopo/procaptcha-common": "2.11.
|
|
38
|
-
"@prosopo/procaptcha-pow": "2.10.
|
|
39
|
-
"@prosopo/procaptcha-puzzle": "2.10.
|
|
40
|
-
"@prosopo/procaptcha-react": "2.9.
|
|
41
|
-
"@prosopo/types": "4.9.
|
|
37
|
+
"@prosopo/procaptcha-common": "2.11.8",
|
|
38
|
+
"@prosopo/procaptcha-pow": "2.10.14",
|
|
39
|
+
"@prosopo/procaptcha-puzzle": "2.10.29",
|
|
40
|
+
"@prosopo/procaptcha-react": "2.9.87",
|
|
41
|
+
"@prosopo/types": "4.9.7",
|
|
42
42
|
"@prosopo/widget-skeleton": "2.8.4",
|
|
43
43
|
"dotenv": "16.4.5",
|
|
44
44
|
"react": "18.3.1"
|
package/src/customDetectBot.ts
CHANGED
|
@@ -34,15 +34,55 @@ import { DetectorLoader } from "./detectorLoader.js";
|
|
|
34
34
|
// Returns undefined in non-browser contexts (SSR / tests) or for opaque
|
|
35
35
|
// origins; the provider then treats the session as having no page URL and
|
|
36
36
|
// forces an image captcha.
|
|
37
|
+
//
|
|
38
|
+
// When we're loaded inside an iframe (Protect's site-wide embed) the local
|
|
39
|
+
// `window.location` is the iframe URL, which conveys nothing about the page
|
|
40
|
+
// the user is actually on — every session across the tenant ends up
|
|
41
|
+
// reporting the same widget endpoint. Same-origin iframes let us read the
|
|
42
|
+
// top frame directly; cross-origin iframes fall through to `document.referrer`,
|
|
43
|
+
// which the browser fills with the embedding page URL subject to
|
|
44
|
+
// Referrer-Policy. Only when both are unavailable do we fall back to the
|
|
45
|
+
// iframe's own URL, matching the previous behaviour.
|
|
46
|
+
const sanitiseHref = (href: string): string | undefined => {
|
|
47
|
+
try {
|
|
48
|
+
const u = new URL(href);
|
|
49
|
+
if (!u.origin || u.origin === "null") return undefined;
|
|
50
|
+
return `${u.origin}${u.pathname || ""}`;
|
|
51
|
+
} catch {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
37
56
|
const getCurrentPageUrl = (): string | undefined => {
|
|
38
57
|
if (typeof window === "undefined" || !window.location) {
|
|
39
58
|
return undefined;
|
|
40
59
|
}
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
return undefined;
|
|
60
|
+
const local = (() => {
|
|
61
|
+
const { origin, pathname } = window.location;
|
|
62
|
+
if (!origin || origin === "null") return undefined;
|
|
63
|
+
return `${origin}${pathname || ""}`;
|
|
64
|
+
})();
|
|
65
|
+
|
|
66
|
+
// Top window — the iframe path doesn't apply.
|
|
67
|
+
if (window === window.top) return local;
|
|
68
|
+
|
|
69
|
+
// Same-origin iframe — read the top URL directly.
|
|
70
|
+
try {
|
|
71
|
+
const topHref = window.top?.location?.href;
|
|
72
|
+
const sanitised = topHref ? sanitiseHref(topHref) : undefined;
|
|
73
|
+
if (sanitised) return sanitised;
|
|
74
|
+
} catch {
|
|
75
|
+
/* cross-origin — fall through */
|
|
44
76
|
}
|
|
45
|
-
|
|
77
|
+
|
|
78
|
+
// Cross-origin iframe — the embedding page URL comes via referrer,
|
|
79
|
+
// subject to the parent's Referrer-Policy header.
|
|
80
|
+
if (typeof document !== "undefined" && document.referrer) {
|
|
81
|
+
const fromReferrer = sanitiseHref(document.referrer);
|
|
82
|
+
if (fromReferrer) return fromReferrer;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return local;
|
|
46
86
|
};
|
|
47
87
|
|
|
48
88
|
export const withTimeout = async <T>(
|