@redacto.io/consent-sdk-react 10.1.0 → 10.2.0-beta.1

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.
@@ -0,0 +1,93 @@
1
+ // src/shared/idempotency.ts
2
+ var HEADER = "Idempotency-Key";
3
+ var pending = /* @__PURE__ */ new Map();
4
+ var MAX_PENDING = 16;
5
+ var mintKey = () => {
6
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
7
+ return crypto.randomUUID();
8
+ }
9
+ return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 14)}-${Math.random().toString(36).slice(2, 14)}`;
10
+ };
11
+ var statusOf = (outcome) => {
12
+ if (typeof Response !== "undefined" && outcome instanceof Response) {
13
+ return outcome.status;
14
+ }
15
+ if (outcome && typeof outcome === "object" && "status" in outcome) {
16
+ const status = outcome.status;
17
+ if (typeof status === "number") return status;
18
+ }
19
+ return void 0;
20
+ };
21
+ var settledOnResolve = (result) => {
22
+ const status = statusOf(result);
23
+ return status === void 0 || status < 500;
24
+ };
25
+ var settledOnReject = (error) => {
26
+ const status = statusOf(error);
27
+ return status !== void 0 && status < 500;
28
+ };
29
+ var withIdempotencyKey = async (url, body, send) => {
30
+ const signature = `${url}
31
+ ${body}`;
32
+ let entry = pending.get(signature);
33
+ if (!entry) {
34
+ entry = { key: mintKey(), inFlight: 0, keep: false };
35
+ if (pending.size >= MAX_PENDING) {
36
+ const oldest = pending.keys().next().value;
37
+ if (oldest !== void 0) pending.delete(oldest);
38
+ }
39
+ pending.set(signature, entry);
40
+ } else if (entry.inFlight === 0) {
41
+ entry.keep = false;
42
+ }
43
+ entry.inFlight += 1;
44
+ const settle = (settled) => {
45
+ entry.inFlight -= 1;
46
+ if (!settled) entry.keep = true;
47
+ if (entry.inFlight === 0 && !entry.keep) pending.delete(signature);
48
+ };
49
+ try {
50
+ const result = await send({ [HEADER]: entry.key });
51
+ settle(settledOnResolve(result));
52
+ return result;
53
+ } catch (error) {
54
+ settle(settledOnReject(error));
55
+ throw error;
56
+ }
57
+ };
58
+
59
+ // src/RedactoNoticeConsent/useMediaQuery.ts
60
+ import { useState, useEffect } from "react";
61
+ var useMediaQuery = (query) => {
62
+ const getMatches = () => typeof window !== "undefined" ? window.matchMedia(query).matches : false;
63
+ const [matches, setMatches] = useState(getMatches);
64
+ useEffect(() => {
65
+ if (typeof window === "undefined") return;
66
+ const media = window.matchMedia(query);
67
+ const listener = (e) => {
68
+ setMatches(e.matches);
69
+ };
70
+ if (media.addEventListener) {
71
+ media.addEventListener("change", listener);
72
+ } else {
73
+ media.addListener(listener);
74
+ }
75
+ return () => {
76
+ if (media.removeEventListener) {
77
+ media.removeEventListener("change", listener);
78
+ } else {
79
+ media.removeListener(listener);
80
+ }
81
+ };
82
+ }, [query]);
83
+ return matches;
84
+ };
85
+
86
+ // src/shared/sandbox.ts
87
+ var SANDBOX_TOKEN_HEADER = "X-Consent-Token";
88
+
89
+ export {
90
+ SANDBOX_TOKEN_HEADER,
91
+ withIdempotencyKey,
92
+ useMediaQuery
93
+ };