@golocalinteractive/golocal-cloud-wrapper 1.0.54 → 1.0.56
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/dist/golocal-cloud-wrapper.css +2 -1
- package/dist/golocal-cloud-wrapper.es.js +88 -17632
- package/dist/golocal-cloud-wrapper.es10.js +66 -0
- package/dist/golocal-cloud-wrapper.es100.js +4 -0
- package/dist/golocal-cloud-wrapper.es101.js +62 -0
- package/dist/golocal-cloud-wrapper.es102.js +77 -0
- package/dist/golocal-cloud-wrapper.es103.js +4 -0
- package/dist/golocal-cloud-wrapper.es104.js +41 -0
- package/dist/golocal-cloud-wrapper.es105.js +4 -0
- package/dist/golocal-cloud-wrapper.es106.js +106 -0
- package/dist/golocal-cloud-wrapper.es107.js +148 -0
- package/dist/golocal-cloud-wrapper.es108.js +28 -0
- package/dist/golocal-cloud-wrapper.es109.js +51 -0
- package/dist/golocal-cloud-wrapper.es11.js +233 -0
- package/dist/golocal-cloud-wrapper.es110.js +25 -0
- package/dist/golocal-cloud-wrapper.es111.js +30 -0
- package/dist/golocal-cloud-wrapper.es112.js +82 -0
- package/dist/golocal-cloud-wrapper.es113.js +125 -0
- package/dist/golocal-cloud-wrapper.es114.js +39 -0
- package/dist/golocal-cloud-wrapper.es115.js +38 -0
- package/dist/golocal-cloud-wrapper.es116.js +7 -0
- package/dist/golocal-cloud-wrapper.es117.js +4 -0
- package/dist/golocal-cloud-wrapper.es118.js +4 -0
- package/dist/golocal-cloud-wrapper.es119.js +4 -0
- package/dist/golocal-cloud-wrapper.es12.js +23 -0
- package/dist/golocal-cloud-wrapper.es120.js +208 -0
- package/dist/golocal-cloud-wrapper.es121.js +145 -0
- package/dist/golocal-cloud-wrapper.es122.js +58 -0
- package/dist/golocal-cloud-wrapper.es123.js +34 -0
- package/dist/golocal-cloud-wrapper.es124.js +4 -0
- package/dist/golocal-cloud-wrapper.es125.js +39 -0
- package/dist/golocal-cloud-wrapper.es126.js +4 -0
- package/dist/golocal-cloud-wrapper.es127.js +4 -0
- package/dist/golocal-cloud-wrapper.es128.js +224 -0
- package/dist/golocal-cloud-wrapper.es129.js +4 -0
- package/dist/golocal-cloud-wrapper.es13.js +24 -0
- package/dist/golocal-cloud-wrapper.es130.js +4 -0
- package/dist/golocal-cloud-wrapper.es131.js +35 -0
- package/dist/golocal-cloud-wrapper.es132.js +4 -0
- package/dist/golocal-cloud-wrapper.es133.js +23 -0
- package/dist/golocal-cloud-wrapper.es134.js +123 -0
- package/dist/golocal-cloud-wrapper.es135.js +469 -0
- package/dist/golocal-cloud-wrapper.es136.js +46 -0
- package/dist/golocal-cloud-wrapper.es137.js +71 -0
- package/dist/golocal-cloud-wrapper.es138.js +66 -0
- package/dist/golocal-cloud-wrapper.es139.js +4 -0
- package/dist/golocal-cloud-wrapper.es14.js +115 -0
- package/dist/golocal-cloud-wrapper.es140.js +27 -0
- package/dist/golocal-cloud-wrapper.es141.js +66 -0
- package/dist/golocal-cloud-wrapper.es142.js +27 -0
- package/dist/golocal-cloud-wrapper.es143.js +5 -0
- package/dist/golocal-cloud-wrapper.es144.js +650 -0
- package/dist/golocal-cloud-wrapper.es145.js +301 -0
- package/dist/golocal-cloud-wrapper.es146.js +90 -0
- package/dist/golocal-cloud-wrapper.es147.js +83 -0
- package/dist/golocal-cloud-wrapper.es148.js +65 -0
- package/dist/golocal-cloud-wrapper.es149.js +1230 -0
- package/dist/golocal-cloud-wrapper.es15.js +641 -0
- package/dist/golocal-cloud-wrapper.es150.js +8 -0
- package/dist/golocal-cloud-wrapper.es151.js +15 -0
- package/dist/golocal-cloud-wrapper.es152.js +139 -0
- package/dist/golocal-cloud-wrapper.es153.js +23 -0
- package/dist/golocal-cloud-wrapper.es154.js +132 -0
- package/dist/golocal-cloud-wrapper.es155.js +19 -0
- package/dist/golocal-cloud-wrapper.es156.js +37 -0
- package/dist/golocal-cloud-wrapper.es157.js +49 -0
- package/dist/golocal-cloud-wrapper.es158.js +10 -0
- package/dist/golocal-cloud-wrapper.es159.js +5 -0
- package/dist/golocal-cloud-wrapper.es16.js +17 -0
- package/dist/golocal-cloud-wrapper.es160.js +35 -0
- package/dist/golocal-cloud-wrapper.es161.js +174 -0
- package/dist/golocal-cloud-wrapper.es162.js +21 -0
- package/dist/golocal-cloud-wrapper.es163.js +4 -0
- package/dist/golocal-cloud-wrapper.es164.js +330 -0
- package/dist/golocal-cloud-wrapper.es165.js +4 -0
- package/dist/golocal-cloud-wrapper.es166.js +34 -0
- package/dist/golocal-cloud-wrapper.es167.js +40 -0
- package/dist/golocal-cloud-wrapper.es168.js +30 -0
- package/dist/golocal-cloud-wrapper.es169.js +62 -0
- package/dist/golocal-cloud-wrapper.es17.js +26 -0
- package/dist/golocal-cloud-wrapper.es170.js +4 -0
- package/dist/golocal-cloud-wrapper.es171.js +340 -0
- package/dist/golocal-cloud-wrapper.es172.js +4 -0
- package/dist/golocal-cloud-wrapper.es173.js +4 -0
- package/dist/golocal-cloud-wrapper.es174.js +4 -0
- package/dist/golocal-cloud-wrapper.es175.js +4 -0
- package/dist/golocal-cloud-wrapper.es176.js +4 -0
- package/dist/golocal-cloud-wrapper.es177.js +24 -0
- package/dist/golocal-cloud-wrapper.es178.js +4 -0
- package/dist/golocal-cloud-wrapper.es179.js +24 -0
- package/dist/golocal-cloud-wrapper.es18.js +5 -0
- package/dist/golocal-cloud-wrapper.es180.js +98 -0
- package/dist/golocal-cloud-wrapper.es181.js +4 -0
- package/dist/golocal-cloud-wrapper.es182.js +46 -0
- package/dist/golocal-cloud-wrapper.es183.js +35 -0
- package/dist/golocal-cloud-wrapper.es184.js +61 -0
- package/dist/golocal-cloud-wrapper.es185.js +4 -0
- package/dist/golocal-cloud-wrapper.es186.js +4 -0
- package/dist/golocal-cloud-wrapper.es187.js +4 -0
- package/dist/golocal-cloud-wrapper.es188.js +23 -0
- package/dist/golocal-cloud-wrapper.es189.js +4 -0
- package/dist/golocal-cloud-wrapper.es19.js +110 -0
- package/dist/golocal-cloud-wrapper.es190.js +4 -0
- package/dist/golocal-cloud-wrapper.es191.js +720 -0
- package/dist/golocal-cloud-wrapper.es192.js +153 -0
- package/dist/golocal-cloud-wrapper.es193.js +166 -0
- package/dist/golocal-cloud-wrapper.es194.js +49 -0
- package/dist/golocal-cloud-wrapper.es195.js +71 -0
- package/dist/golocal-cloud-wrapper.es196.js +25 -0
- package/dist/golocal-cloud-wrapper.es197.js +5 -0
- package/dist/golocal-cloud-wrapper.es198.js +118 -0
- package/dist/golocal-cloud-wrapper.es199.js +16 -0
- package/dist/golocal-cloud-wrapper.es20.js +12 -0
- package/dist/golocal-cloud-wrapper.es200.js +4 -0
- package/dist/golocal-cloud-wrapper.es201.js +429 -0
- package/dist/golocal-cloud-wrapper.es202.js +335 -0
- package/dist/golocal-cloud-wrapper.es203.js +235 -0
- package/dist/golocal-cloud-wrapper.es204.js +38 -0
- package/dist/golocal-cloud-wrapper.es205.js +88 -0
- package/dist/golocal-cloud-wrapper.es206.js +47 -0
- package/dist/golocal-cloud-wrapper.es207.js +13 -0
- package/dist/golocal-cloud-wrapper.es208.js +19 -0
- package/dist/golocal-cloud-wrapper.es209.js +102 -0
- package/dist/golocal-cloud-wrapper.es21.js +185 -0
- package/dist/golocal-cloud-wrapper.es210.js +4 -0
- package/dist/golocal-cloud-wrapper.es211.js +4 -0
- package/dist/golocal-cloud-wrapper.es212.js +24 -0
- package/dist/golocal-cloud-wrapper.es213.js +30 -0
- package/dist/golocal-cloud-wrapper.es214.js +30 -0
- package/dist/golocal-cloud-wrapper.es215.js +34 -0
- package/dist/golocal-cloud-wrapper.es216.js +4 -0
- package/dist/golocal-cloud-wrapper.es217.js +4 -0
- package/dist/golocal-cloud-wrapper.es218.js +48 -0
- package/dist/golocal-cloud-wrapper.es219.js +33 -0
- package/dist/golocal-cloud-wrapper.es22.js +23 -0
- package/dist/golocal-cloud-wrapper.es220.js +30 -0
- package/dist/golocal-cloud-wrapper.es221.js +4 -0
- package/dist/golocal-cloud-wrapper.es222.js +4 -0
- package/dist/golocal-cloud-wrapper.es223.js +78 -0
- package/dist/golocal-cloud-wrapper.es224.js +4 -0
- package/dist/golocal-cloud-wrapper.es225.js +4 -0
- package/dist/golocal-cloud-wrapper.es226.js +4 -0
- package/dist/golocal-cloud-wrapper.es227.js +4 -0
- package/dist/golocal-cloud-wrapper.es228.js +4 -0
- package/dist/golocal-cloud-wrapper.es229.js +24 -0
- package/dist/golocal-cloud-wrapper.es23.js +38 -0
- package/dist/golocal-cloud-wrapper.es230.js +4 -0
- package/dist/golocal-cloud-wrapper.es231.js +4 -0
- package/dist/golocal-cloud-wrapper.es232.js +202 -0
- package/dist/golocal-cloud-wrapper.es233.js +97 -0
- package/dist/golocal-cloud-wrapper.es234.js +4 -0
- package/dist/golocal-cloud-wrapper.es235.js +173 -0
- package/dist/golocal-cloud-wrapper.es236.js +4 -0
- package/dist/golocal-cloud-wrapper.es237.js +21 -0
- package/dist/golocal-cloud-wrapper.es238.js +30 -0
- package/dist/golocal-cloud-wrapper.es239.js +154 -0
- package/dist/golocal-cloud-wrapper.es24.js +16 -0
- package/dist/golocal-cloud-wrapper.es240.js +131 -0
- package/dist/golocal-cloud-wrapper.es241.js +61 -0
- package/dist/golocal-cloud-wrapper.es242.js +42 -0
- package/dist/golocal-cloud-wrapper.es243.js +89 -0
- package/dist/golocal-cloud-wrapper.es244.js +24 -0
- package/dist/golocal-cloud-wrapper.es245.js +19 -0
- package/dist/golocal-cloud-wrapper.es246.js +127 -0
- package/dist/golocal-cloud-wrapper.es247.js +24 -0
- package/dist/golocal-cloud-wrapper.es248.js +33 -0
- package/dist/golocal-cloud-wrapper.es249.js +12 -0
- package/dist/golocal-cloud-wrapper.es25.js +17 -0
- package/dist/golocal-cloud-wrapper.es250.js +24 -0
- package/dist/golocal-cloud-wrapper.es251.js +17 -0
- package/dist/golocal-cloud-wrapper.es252.js +78 -0
- package/dist/golocal-cloud-wrapper.es253.js +19 -0
- package/dist/golocal-cloud-wrapper.es254.js +102 -0
- package/dist/golocal-cloud-wrapper.es255.js +29 -0
- package/dist/golocal-cloud-wrapper.es256.js +151 -0
- package/dist/golocal-cloud-wrapper.es257.js +4 -0
- package/dist/golocal-cloud-wrapper.es258.js +76 -0
- package/dist/golocal-cloud-wrapper.es259.js +92 -0
- package/dist/golocal-cloud-wrapper.es26.js +102 -0
- package/dist/golocal-cloud-wrapper.es260.js +71 -0
- package/dist/golocal-cloud-wrapper.es261.js +124 -0
- package/dist/golocal-cloud-wrapper.es262.js +35 -0
- package/dist/golocal-cloud-wrapper.es263.js +7 -0
- package/dist/golocal-cloud-wrapper.es264.js +23 -0
- package/dist/golocal-cloud-wrapper.es265.js +102 -0
- package/dist/golocal-cloud-wrapper.es266.js +106 -0
- package/dist/golocal-cloud-wrapper.es267.js +4 -0
- package/dist/golocal-cloud-wrapper.es268.js +4 -0
- package/dist/golocal-cloud-wrapper.es269.js +38 -0
- package/dist/golocal-cloud-wrapper.es27.js +45 -0
- package/dist/golocal-cloud-wrapper.es270.js +4 -0
- package/dist/golocal-cloud-wrapper.es271.js +4 -0
- package/dist/golocal-cloud-wrapper.es272.js +4 -0
- package/dist/golocal-cloud-wrapper.es273.js +4 -0
- package/dist/golocal-cloud-wrapper.es274.js +4 -0
- package/dist/golocal-cloud-wrapper.es275.js +4 -0
- package/dist/golocal-cloud-wrapper.es276.js +4 -0
- package/dist/golocal-cloud-wrapper.es277.js +11 -0
- package/dist/golocal-cloud-wrapper.es278.js +29 -0
- package/dist/golocal-cloud-wrapper.es279.js +4 -0
- package/dist/golocal-cloud-wrapper.es28.js +8 -0
- package/dist/golocal-cloud-wrapper.es280.js +4 -0
- package/dist/golocal-cloud-wrapper.es281.js +4 -0
- package/dist/golocal-cloud-wrapper.es282.js +4 -0
- package/dist/golocal-cloud-wrapper.es283.js +5 -0
- package/dist/golocal-cloud-wrapper.es284.js +36 -0
- package/dist/golocal-cloud-wrapper.es285.js +46 -0
- package/dist/golocal-cloud-wrapper.es286.js +55 -0
- package/dist/golocal-cloud-wrapper.es287.js +41 -0
- package/dist/golocal-cloud-wrapper.es288.js +70 -0
- package/dist/golocal-cloud-wrapper.es289.js +20 -0
- package/dist/golocal-cloud-wrapper.es29.js +13 -0
- package/dist/golocal-cloud-wrapper.es290.js +8 -0
- package/dist/golocal-cloud-wrapper.es291.js +4 -0
- package/dist/golocal-cloud-wrapper.es292.js +58 -0
- package/dist/golocal-cloud-wrapper.es293.js +31 -0
- package/dist/golocal-cloud-wrapper.es294.js +6 -0
- package/dist/golocal-cloud-wrapper.es295.js +11 -0
- package/dist/golocal-cloud-wrapper.es296.js +24 -0
- package/dist/golocal-cloud-wrapper.es297.js +32 -0
- package/dist/golocal-cloud-wrapper.es298.js +12 -0
- package/dist/golocal-cloud-wrapper.es299.js +10 -0
- package/dist/golocal-cloud-wrapper.es3.js +22 -0
- package/dist/golocal-cloud-wrapper.es30.js +13 -0
- package/dist/golocal-cloud-wrapper.es300.js +10 -0
- package/dist/golocal-cloud-wrapper.es301.js +159 -0
- package/dist/golocal-cloud-wrapper.es302.js +24 -0
- package/dist/golocal-cloud-wrapper.es303.js +21 -0
- package/dist/golocal-cloud-wrapper.es304.js +16 -0
- package/dist/golocal-cloud-wrapper.es305.js +48 -0
- package/dist/golocal-cloud-wrapper.es306.js +9 -0
- package/dist/golocal-cloud-wrapper.es307.js +37 -0
- package/dist/golocal-cloud-wrapper.es308.js +8 -0
- package/dist/golocal-cloud-wrapper.es309.js +9 -0
- package/dist/golocal-cloud-wrapper.es31.js +299 -0
- package/dist/golocal-cloud-wrapper.es310.js +15 -0
- package/dist/golocal-cloud-wrapper.es32.js +13 -0
- package/dist/golocal-cloud-wrapper.es33.js +13 -0
- package/dist/golocal-cloud-wrapper.es34.js +30 -0
- package/dist/golocal-cloud-wrapper.es35.js +342 -0
- package/dist/golocal-cloud-wrapper.es36.js +16 -0
- package/dist/golocal-cloud-wrapper.es37.js +16 -0
- package/dist/golocal-cloud-wrapper.es38.js +16 -0
- package/dist/golocal-cloud-wrapper.es39.js +491 -0
- package/dist/golocal-cloud-wrapper.es4.js +20 -0
- package/dist/golocal-cloud-wrapper.es40.js +17 -0
- package/dist/golocal-cloud-wrapper.es41.js +4 -0
- package/dist/golocal-cloud-wrapper.es42.js +41 -0
- package/dist/golocal-cloud-wrapper.es43.js +274 -0
- package/dist/golocal-cloud-wrapper.es44.js +4 -0
- package/dist/golocal-cloud-wrapper.es45.js +30 -0
- package/dist/golocal-cloud-wrapper.es46.js +22 -0
- package/dist/golocal-cloud-wrapper.es47.js +16 -0
- package/dist/golocal-cloud-wrapper.es48.js +18 -0
- package/dist/golocal-cloud-wrapper.es49.js +22 -0
- package/dist/golocal-cloud-wrapper.es5.js +12 -0
- package/dist/golocal-cloud-wrapper.es50.js +22 -0
- package/dist/golocal-cloud-wrapper.es51.js +26 -0
- package/dist/golocal-cloud-wrapper.es52.js +22 -0
- package/dist/golocal-cloud-wrapper.es53.js +17 -0
- package/dist/golocal-cloud-wrapper.es54.js +4 -0
- package/dist/golocal-cloud-wrapper.es55.js +4 -0
- package/dist/golocal-cloud-wrapper.es56.js +39 -0
- package/dist/golocal-cloud-wrapper.es57.js +17 -0
- package/dist/golocal-cloud-wrapper.es58.js +2959 -0
- package/dist/golocal-cloud-wrapper.es59.js +417 -0
- package/dist/golocal-cloud-wrapper.es6.js +68 -0
- package/dist/golocal-cloud-wrapper.es60.js +25 -0
- package/dist/golocal-cloud-wrapper.es61.js +28 -0
- package/dist/golocal-cloud-wrapper.es62.js +32 -0
- package/dist/golocal-cloud-wrapper.es63.js +41 -0
- package/dist/golocal-cloud-wrapper.es64.js +20 -0
- package/dist/golocal-cloud-wrapper.es65.js +11 -0
- package/dist/golocal-cloud-wrapper.es66.js +81 -0
- package/dist/golocal-cloud-wrapper.es67.js +14 -0
- package/dist/golocal-cloud-wrapper.es68.js +71 -0
- package/dist/golocal-cloud-wrapper.es69.js +212 -0
- package/dist/golocal-cloud-wrapper.es7.js +16 -0
- package/dist/golocal-cloud-wrapper.es70.js +208 -0
- package/dist/golocal-cloud-wrapper.es71.js +18 -0
- package/dist/golocal-cloud-wrapper.es72.js +129 -0
- package/dist/golocal-cloud-wrapper.es73.js +43 -0
- package/dist/golocal-cloud-wrapper.es74.js +29 -0
- package/dist/golocal-cloud-wrapper.es75.js +11 -0
- package/dist/golocal-cloud-wrapper.es76.js +122 -0
- package/dist/golocal-cloud-wrapper.es77.js +880 -0
- package/dist/golocal-cloud-wrapper.es78.js +288 -0
- package/dist/golocal-cloud-wrapper.es79.js +36 -0
- package/dist/golocal-cloud-wrapper.es8.js +48 -0
- package/dist/golocal-cloud-wrapper.es80.js +12 -0
- package/dist/golocal-cloud-wrapper.es81.js +334 -0
- package/dist/golocal-cloud-wrapper.es82.js +5 -0
- package/dist/golocal-cloud-wrapper.es83.js +8 -0
- package/dist/golocal-cloud-wrapper.es84.js +58 -0
- package/dist/golocal-cloud-wrapper.es85.js +5 -0
- package/dist/golocal-cloud-wrapper.es86.js +104 -0
- package/dist/golocal-cloud-wrapper.es87.js +468 -0
- package/dist/golocal-cloud-wrapper.es88.js +10 -0
- package/dist/golocal-cloud-wrapper.es89.js +6 -0
- package/dist/golocal-cloud-wrapper.es9.js +90 -0
- package/dist/golocal-cloud-wrapper.es90.js +14 -0
- package/dist/golocal-cloud-wrapper.es91.js +17 -0
- package/dist/golocal-cloud-wrapper.es92.js +70 -0
- package/dist/golocal-cloud-wrapper.es93.js +10 -0
- package/dist/golocal-cloud-wrapper.es94.js +227 -0
- package/dist/golocal-cloud-wrapper.es95.js +297 -0
- package/dist/golocal-cloud-wrapper.es96.js +25 -0
- package/dist/golocal-cloud-wrapper.es97.js +39 -0
- package/dist/golocal-cloud-wrapper.es98.js +616 -0
- package/dist/golocal-cloud-wrapper.es99.js +17 -0
- package/package.json +1 -1
- package/dist/golocal-cloud-wrapper.umd.js +0 -197
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
function stringifyCookie(c) {
|
|
2
|
+
var _a;
|
|
3
|
+
const attrs = [
|
|
4
|
+
"path" in c && c.path && `Path=${c.path}`,
|
|
5
|
+
"expires" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === "number" ? new Date(c.expires) : c.expires).toUTCString()}`,
|
|
6
|
+
"maxAge" in c && typeof c.maxAge === "number" && `Max-Age=${c.maxAge}`,
|
|
7
|
+
"domain" in c && c.domain && `Domain=${c.domain}`,
|
|
8
|
+
"secure" in c && c.secure && "Secure",
|
|
9
|
+
"httpOnly" in c && c.httpOnly && "HttpOnly",
|
|
10
|
+
"sameSite" in c && c.sameSite && `SameSite=${c.sameSite}`,
|
|
11
|
+
"partitioned" in c && c.partitioned && "Partitioned",
|
|
12
|
+
"priority" in c && c.priority && `Priority=${c.priority}`
|
|
13
|
+
].filter(Boolean);
|
|
14
|
+
const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : "")}`;
|
|
15
|
+
return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join("; ")}`;
|
|
16
|
+
}
|
|
17
|
+
function parseCookie(cookie) {
|
|
18
|
+
const map = /* @__PURE__ */ new Map();
|
|
19
|
+
for (const pair of cookie.split(/; */)) {
|
|
20
|
+
if (!pair)
|
|
21
|
+
continue;
|
|
22
|
+
const splitAt = pair.indexOf("=");
|
|
23
|
+
if (splitAt === -1) {
|
|
24
|
+
map.set(pair, "true");
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const [key, value] = [pair.slice(0, splitAt), pair.slice(splitAt + 1)];
|
|
28
|
+
try {
|
|
29
|
+
map.set(key, decodeURIComponent(value != null ? value : "true"));
|
|
30
|
+
} catch {
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return map;
|
|
34
|
+
}
|
|
35
|
+
function parseSetCookie(setCookie) {
|
|
36
|
+
if (!setCookie) {
|
|
37
|
+
return void 0;
|
|
38
|
+
}
|
|
39
|
+
const [[name, value], ...attributes] = parseCookie(setCookie);
|
|
40
|
+
const {
|
|
41
|
+
domain,
|
|
42
|
+
expires,
|
|
43
|
+
httponly,
|
|
44
|
+
maxage,
|
|
45
|
+
path,
|
|
46
|
+
samesite,
|
|
47
|
+
secure,
|
|
48
|
+
partitioned,
|
|
49
|
+
priority
|
|
50
|
+
} = Object.fromEntries(
|
|
51
|
+
attributes.map(([key, value2]) => [
|
|
52
|
+
key.toLowerCase().replace(/-/g, ""),
|
|
53
|
+
value2
|
|
54
|
+
])
|
|
55
|
+
);
|
|
56
|
+
const cookie = {
|
|
57
|
+
name,
|
|
58
|
+
value: decodeURIComponent(value),
|
|
59
|
+
domain,
|
|
60
|
+
...expires && { expires: new Date(expires) },
|
|
61
|
+
...httponly && { httpOnly: true },
|
|
62
|
+
...typeof maxage === "string" && { maxAge: Number(maxage) },
|
|
63
|
+
path,
|
|
64
|
+
...samesite && { sameSite: parseSameSite(samesite) },
|
|
65
|
+
...secure && { secure: true },
|
|
66
|
+
...priority && { priority: parsePriority(priority) },
|
|
67
|
+
...partitioned && { partitioned: true }
|
|
68
|
+
};
|
|
69
|
+
return compact(cookie);
|
|
70
|
+
}
|
|
71
|
+
function compact(t) {
|
|
72
|
+
const newT = {};
|
|
73
|
+
for (const key in t) {
|
|
74
|
+
if (t[key]) {
|
|
75
|
+
newT[key] = t[key];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return newT;
|
|
79
|
+
}
|
|
80
|
+
var SAME_SITE = ["strict", "lax", "none"];
|
|
81
|
+
function parseSameSite(string) {
|
|
82
|
+
string = string.toLowerCase();
|
|
83
|
+
return SAME_SITE.includes(string) ? string : void 0;
|
|
84
|
+
}
|
|
85
|
+
var PRIORITY = ["low", "medium", "high"];
|
|
86
|
+
function parsePriority(string) {
|
|
87
|
+
string = string.toLowerCase();
|
|
88
|
+
return PRIORITY.includes(string) ? string : void 0;
|
|
89
|
+
}
|
|
90
|
+
function splitCookiesString(cookiesString) {
|
|
91
|
+
if (!cookiesString)
|
|
92
|
+
return [];
|
|
93
|
+
var cookiesStrings = [];
|
|
94
|
+
var pos = 0;
|
|
95
|
+
var start;
|
|
96
|
+
var ch;
|
|
97
|
+
var lastComma;
|
|
98
|
+
var nextStart;
|
|
99
|
+
var cookiesSeparatorFound;
|
|
100
|
+
function skipWhitespace() {
|
|
101
|
+
while (pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))) {
|
|
102
|
+
pos += 1;
|
|
103
|
+
}
|
|
104
|
+
return pos < cookiesString.length;
|
|
105
|
+
}
|
|
106
|
+
function notSpecialChar() {
|
|
107
|
+
ch = cookiesString.charAt(pos);
|
|
108
|
+
return ch !== "=" && ch !== ";" && ch !== ",";
|
|
109
|
+
}
|
|
110
|
+
while (pos < cookiesString.length) {
|
|
111
|
+
start = pos;
|
|
112
|
+
cookiesSeparatorFound = false;
|
|
113
|
+
while (skipWhitespace()) {
|
|
114
|
+
ch = cookiesString.charAt(pos);
|
|
115
|
+
if (ch === ",") {
|
|
116
|
+
lastComma = pos;
|
|
117
|
+
pos += 1;
|
|
118
|
+
skipWhitespace();
|
|
119
|
+
nextStart = pos;
|
|
120
|
+
while (pos < cookiesString.length && notSpecialChar()) {
|
|
121
|
+
pos += 1;
|
|
122
|
+
}
|
|
123
|
+
if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") {
|
|
124
|
+
cookiesSeparatorFound = true;
|
|
125
|
+
pos = nextStart;
|
|
126
|
+
cookiesStrings.push(cookiesString.substring(start, lastComma));
|
|
127
|
+
start = pos;
|
|
128
|
+
} else {
|
|
129
|
+
pos = lastComma + 1;
|
|
130
|
+
}
|
|
131
|
+
} else {
|
|
132
|
+
pos += 1;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (!cookiesSeparatorFound || pos >= cookiesString.length) {
|
|
136
|
+
cookiesStrings.push(cookiesString.substring(start, cookiesString.length));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return cookiesStrings;
|
|
140
|
+
}
|
|
141
|
+
var RequestCookies = class {
|
|
142
|
+
constructor(requestHeaders) {
|
|
143
|
+
this._parsed = /* @__PURE__ */ new Map();
|
|
144
|
+
this._headers = requestHeaders;
|
|
145
|
+
const header = requestHeaders.get("cookie");
|
|
146
|
+
if (header) {
|
|
147
|
+
const parsed = parseCookie(header);
|
|
148
|
+
for (const [name, value] of parsed) {
|
|
149
|
+
this._parsed.set(name, { name, value });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
[Symbol.iterator]() {
|
|
154
|
+
return this._parsed[Symbol.iterator]();
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* The amount of cookies received from the client
|
|
158
|
+
*/
|
|
159
|
+
get size() {
|
|
160
|
+
return this._parsed.size;
|
|
161
|
+
}
|
|
162
|
+
get(...args) {
|
|
163
|
+
const name = typeof args[0] === "string" ? args[0] : args[0].name;
|
|
164
|
+
return this._parsed.get(name);
|
|
165
|
+
}
|
|
166
|
+
getAll(...args) {
|
|
167
|
+
var _a;
|
|
168
|
+
const all = Array.from(this._parsed);
|
|
169
|
+
if (!args.length) {
|
|
170
|
+
return all.map(([_, value]) => value);
|
|
171
|
+
}
|
|
172
|
+
const name = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;
|
|
173
|
+
return all.filter(([n]) => n === name).map(([_, value]) => value);
|
|
174
|
+
}
|
|
175
|
+
has(name) {
|
|
176
|
+
return this._parsed.has(name);
|
|
177
|
+
}
|
|
178
|
+
set(...args) {
|
|
179
|
+
const [name, value] = args.length === 1 ? [args[0].name, args[0].value] : args;
|
|
180
|
+
const map = this._parsed;
|
|
181
|
+
map.set(name, { name, value });
|
|
182
|
+
this._headers.set(
|
|
183
|
+
"cookie",
|
|
184
|
+
Array.from(map).map(([_, value2]) => stringifyCookie(value2)).join("; ")
|
|
185
|
+
);
|
|
186
|
+
return this;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Delete the cookies matching the passed name or names in the request.
|
|
190
|
+
*/
|
|
191
|
+
delete(names) {
|
|
192
|
+
const map = this._parsed;
|
|
193
|
+
const result = !Array.isArray(names) ? map.delete(names) : names.map((name) => map.delete(name));
|
|
194
|
+
this._headers.set(
|
|
195
|
+
"cookie",
|
|
196
|
+
Array.from(map).map(([_, value]) => stringifyCookie(value)).join("; ")
|
|
197
|
+
);
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Delete all the cookies in the cookies in the request.
|
|
202
|
+
*/
|
|
203
|
+
clear() {
|
|
204
|
+
this.delete(Array.from(this._parsed.keys()));
|
|
205
|
+
return this;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Format the cookies in the request as a string for logging
|
|
209
|
+
*/
|
|
210
|
+
[Symbol.for("edge-runtime.inspect.custom")]() {
|
|
211
|
+
return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;
|
|
212
|
+
}
|
|
213
|
+
toString() {
|
|
214
|
+
return [...this._parsed.values()].map((v) => `${v.name}=${encodeURIComponent(v.value)}`).join("; ");
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
var ResponseCookies = class {
|
|
218
|
+
constructor(responseHeaders) {
|
|
219
|
+
this._parsed = /* @__PURE__ */ new Map();
|
|
220
|
+
var _a, _b, _c;
|
|
221
|
+
this._headers = responseHeaders;
|
|
222
|
+
const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get("set-cookie")) != null ? _c : [];
|
|
223
|
+
const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);
|
|
224
|
+
for (const cookieString of cookieStrings) {
|
|
225
|
+
const parsed = parseSetCookie(cookieString);
|
|
226
|
+
if (parsed)
|
|
227
|
+
this._parsed.set(parsed.name, parsed);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.
|
|
232
|
+
*/
|
|
233
|
+
get(...args) {
|
|
234
|
+
const key = typeof args[0] === "string" ? args[0] : args[0].name;
|
|
235
|
+
return this._parsed.get(key);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.
|
|
239
|
+
*/
|
|
240
|
+
getAll(...args) {
|
|
241
|
+
var _a;
|
|
242
|
+
const all = Array.from(this._parsed.values());
|
|
243
|
+
if (!args.length) {
|
|
244
|
+
return all;
|
|
245
|
+
}
|
|
246
|
+
const key = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;
|
|
247
|
+
return all.filter((c) => c.name === key);
|
|
248
|
+
}
|
|
249
|
+
has(name) {
|
|
250
|
+
return this._parsed.has(name);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.
|
|
254
|
+
*/
|
|
255
|
+
set(...args) {
|
|
256
|
+
const [name, value, cookie] = args.length === 1 ? [args[0].name, args[0].value, args[0]] : args;
|
|
257
|
+
const map = this._parsed;
|
|
258
|
+
map.set(name, normalizeCookie({ name, value, ...cookie }));
|
|
259
|
+
replace(map, this._headers);
|
|
260
|
+
return this;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.
|
|
264
|
+
*/
|
|
265
|
+
delete(...args) {
|
|
266
|
+
const [name, options] = typeof args[0] === "string" ? [args[0]] : [args[0].name, args[0]];
|
|
267
|
+
return this.set({ ...options, name, value: "", expires: /* @__PURE__ */ new Date(0) });
|
|
268
|
+
}
|
|
269
|
+
[Symbol.for("edge-runtime.inspect.custom")]() {
|
|
270
|
+
return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;
|
|
271
|
+
}
|
|
272
|
+
toString() {
|
|
273
|
+
return [...this._parsed.values()].map(stringifyCookie).join("; ");
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
function replace(bag, headers) {
|
|
277
|
+
headers.delete("set-cookie");
|
|
278
|
+
for (const [, value] of bag) {
|
|
279
|
+
const serialized = stringifyCookie(value);
|
|
280
|
+
headers.append("set-cookie", serialized);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
function normalizeCookie(cookie = { name: "", value: "" }) {
|
|
284
|
+
if (typeof cookie.expires === "number") {
|
|
285
|
+
cookie.expires = new Date(cookie.expires);
|
|
286
|
+
}
|
|
287
|
+
if (cookie.maxAge) {
|
|
288
|
+
cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);
|
|
289
|
+
}
|
|
290
|
+
if (cookie.path === null || cookie.path === void 0) {
|
|
291
|
+
cookie.path = "/";
|
|
292
|
+
}
|
|
293
|
+
return cookie;
|
|
294
|
+
}
|
|
295
|
+
export {
|
|
296
|
+
RequestCookies,
|
|
297
|
+
ResponseCookies,
|
|
298
|
+
parseCookie,
|
|
299
|
+
parseSetCookie,
|
|
300
|
+
stringifyCookie
|
|
301
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { decrypt, verifySigned, encrypt } from "./golocal-cloud-wrapper.es152.js";
|
|
2
|
+
import { AbstractSessionStore } from "./golocal-cloud-wrapper.es157.js";
|
|
3
|
+
import { LEGACY_COOKIE_NAME, normalizeStatefulSession } from "./golocal-cloud-wrapper.es204.js";
|
|
4
|
+
const generateId = () => {
|
|
5
|
+
const bytes = new Uint8Array(16);
|
|
6
|
+
crypto.getRandomValues(bytes);
|
|
7
|
+
return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
8
|
+
};
|
|
9
|
+
class StatefulSessionStore extends AbstractSessionStore {
|
|
10
|
+
constructor({ secret, store, rolling, absoluteDuration, inactivityDuration, cookieOptions }) {
|
|
11
|
+
super({
|
|
12
|
+
secret,
|
|
13
|
+
rolling,
|
|
14
|
+
absoluteDuration,
|
|
15
|
+
inactivityDuration,
|
|
16
|
+
cookieOptions
|
|
17
|
+
});
|
|
18
|
+
this.store = store;
|
|
19
|
+
}
|
|
20
|
+
async get(reqCookies) {
|
|
21
|
+
const cookie = reqCookies.get(this.sessionCookieName) || reqCookies.get(LEGACY_COOKIE_NAME);
|
|
22
|
+
if (!cookie || !cookie.value) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
let sessionId = null;
|
|
26
|
+
try {
|
|
27
|
+
const { payload: sessionCookie } = await decrypt(cookie.value, this.secret);
|
|
28
|
+
sessionId = sessionCookie.id;
|
|
29
|
+
} catch (e) {
|
|
30
|
+
if (e.code === "ERR_JWE_INVALID") {
|
|
31
|
+
const legacySessionId = await verifySigned(cookie.name, cookie.value, this.secret);
|
|
32
|
+
if (!legacySessionId) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
sessionId = legacySessionId;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (!sessionId) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
const session = await this.store.get(sessionId);
|
|
42
|
+
if (!session) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return normalizeStatefulSession(session);
|
|
46
|
+
}
|
|
47
|
+
async set(reqCookies, resCookies, session, isNew = false) {
|
|
48
|
+
var _a;
|
|
49
|
+
let sessionId = null;
|
|
50
|
+
const cookieValue = (_a = reqCookies.get(this.sessionCookieName)) == null ? void 0 : _a.value;
|
|
51
|
+
if (cookieValue) {
|
|
52
|
+
const { payload: sessionCookie } = await decrypt(cookieValue, this.secret);
|
|
53
|
+
sessionId = sessionCookie.id;
|
|
54
|
+
}
|
|
55
|
+
if (sessionId && isNew) {
|
|
56
|
+
await this.store.delete(sessionId);
|
|
57
|
+
sessionId = generateId();
|
|
58
|
+
}
|
|
59
|
+
if (!sessionId) {
|
|
60
|
+
sessionId = generateId();
|
|
61
|
+
}
|
|
62
|
+
const maxAge = this.calculateMaxAge(session.internal.createdAt);
|
|
63
|
+
const expiration = Date.now() / 1e3 + maxAge;
|
|
64
|
+
const jwe = await encrypt({
|
|
65
|
+
id: sessionId
|
|
66
|
+
}, this.secret, expiration);
|
|
67
|
+
resCookies.set(this.sessionCookieName, jwe.toString(), {
|
|
68
|
+
...this.cookieConfig,
|
|
69
|
+
maxAge
|
|
70
|
+
});
|
|
71
|
+
await this.store.set(sessionId, session);
|
|
72
|
+
reqCookies.set(this.sessionCookieName, jwe.toString());
|
|
73
|
+
if (this.sessionCookieName !== LEGACY_COOKIE_NAME && reqCookies.has(LEGACY_COOKIE_NAME)) {
|
|
74
|
+
resCookies.delete(LEGACY_COOKIE_NAME);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async delete(reqCookies, resCookies) {
|
|
78
|
+
var _a;
|
|
79
|
+
const cookieValue = (_a = reqCookies.get(this.sessionCookieName)) == null ? void 0 : _a.value;
|
|
80
|
+
await resCookies.delete(this.sessionCookieName);
|
|
81
|
+
if (!cookieValue) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const { payload: session } = await decrypt(cookieValue, this.secret);
|
|
85
|
+
await this.store.delete(session.id);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export {
|
|
89
|
+
StatefulSessionStore
|
|
90
|
+
};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { getChunkedCookie, decrypt, encrypt, setChunkedCookie, deleteChunkedCookie } from "./golocal-cloud-wrapper.es152.js";
|
|
2
|
+
import { AbstractSessionStore } from "./golocal-cloud-wrapper.es157.js";
|
|
3
|
+
import { normalizeStatelessSession, LEGACY_COOKIE_NAME } from "./golocal-cloud-wrapper.es204.js";
|
|
4
|
+
import { ResponseCookies } from "./golocal-cloud-wrapper.es145.js";
|
|
5
|
+
class StatelessSessionStore extends AbstractSessionStore {
|
|
6
|
+
constructor({ secret, rolling, absoluteDuration, inactivityDuration, cookieOptions }) {
|
|
7
|
+
super({
|
|
8
|
+
secret,
|
|
9
|
+
rolling,
|
|
10
|
+
absoluteDuration,
|
|
11
|
+
inactivityDuration,
|
|
12
|
+
cookieOptions
|
|
13
|
+
});
|
|
14
|
+
this.connectionTokenSetsCookieName = "__FC";
|
|
15
|
+
}
|
|
16
|
+
async get(reqCookies) {
|
|
17
|
+
const cookieValue = getChunkedCookie(this.sessionCookieName, reqCookies) ?? getChunkedCookie(LEGACY_COOKIE_NAME, reqCookies, true);
|
|
18
|
+
if (!cookieValue) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const originalSession = await decrypt(cookieValue, this.secret);
|
|
22
|
+
const normalizedStatelessSession = normalizeStatelessSession(originalSession);
|
|
23
|
+
const connectionTokenSets = await Promise.all(this.getConnectionTokenSetsCookies(reqCookies).map((cookie) => decrypt(cookie.value, this.secret)));
|
|
24
|
+
return {
|
|
25
|
+
...normalizedStatelessSession,
|
|
26
|
+
// Ensure that when there are no connection token sets, we omit the property.
|
|
27
|
+
...connectionTokenSets.length ? {
|
|
28
|
+
connectionTokenSets: connectionTokenSets.map((tokenSet) => tokenSet.payload)
|
|
29
|
+
} : {}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* save adds the encrypted session cookie as a `Set-Cookie` header.
|
|
34
|
+
*/
|
|
35
|
+
async set(reqCookies, resCookies, session) {
|
|
36
|
+
const { connectionTokenSets, ...originalSession } = session;
|
|
37
|
+
const maxAge = this.calculateMaxAge(session.internal.createdAt);
|
|
38
|
+
const expiration = Math.floor(Date.now() / 1e3) + maxAge;
|
|
39
|
+
const jwe = await encrypt(originalSession, this.secret, expiration);
|
|
40
|
+
const cookieValue = jwe.toString();
|
|
41
|
+
const options = {
|
|
42
|
+
...this.cookieConfig,
|
|
43
|
+
maxAge
|
|
44
|
+
};
|
|
45
|
+
setChunkedCookie(this.sessionCookieName, cookieValue, options, reqCookies, resCookies);
|
|
46
|
+
if (connectionTokenSets == null ? void 0 : connectionTokenSets.length) {
|
|
47
|
+
await Promise.all(connectionTokenSets.map((connectionTokenSet, index) => this.storeInCookie(reqCookies, resCookies, connectionTokenSet, `${this.connectionTokenSetsCookieName}_${index}`, maxAge)));
|
|
48
|
+
}
|
|
49
|
+
deleteChunkedCookie(LEGACY_COOKIE_NAME, reqCookies, resCookies, true);
|
|
50
|
+
}
|
|
51
|
+
async delete(reqCookies, resCookies) {
|
|
52
|
+
deleteChunkedCookie(this.sessionCookieName, reqCookies, resCookies);
|
|
53
|
+
this.getConnectionTokenSetsCookies(reqCookies).forEach((cookie) => resCookies.delete(cookie.name));
|
|
54
|
+
}
|
|
55
|
+
async storeInCookie(reqCookies, resCookies, session, cookieName, maxAge) {
|
|
56
|
+
const expiration = Math.floor(Date.now() / 1e3 + maxAge);
|
|
57
|
+
const jwe = await encrypt(session, this.secret, expiration);
|
|
58
|
+
const cookieValue = jwe.toString();
|
|
59
|
+
resCookies.set(cookieName, jwe.toString(), {
|
|
60
|
+
...this.cookieConfig,
|
|
61
|
+
maxAge
|
|
62
|
+
});
|
|
63
|
+
reqCookies.set(cookieName, cookieValue);
|
|
64
|
+
const cookieJarSizeTest = new ResponseCookies(new Headers());
|
|
65
|
+
cookieJarSizeTest.set(cookieName, cookieValue, {
|
|
66
|
+
...this.cookieConfig,
|
|
67
|
+
maxAge
|
|
68
|
+
});
|
|
69
|
+
if (new TextEncoder().encode(cookieJarSizeTest.toString()).length >= 4096) {
|
|
70
|
+
if (cookieName === this.sessionCookieName) {
|
|
71
|
+
console.warn(`The ${cookieName} cookie size exceeds 4096 bytes, which may cause issues in some browsers. Consider removing any unnecessary custom claims from the access token or the user profile. Alternatively, you can use a stateful session implementation to store the session data in a data store.`);
|
|
72
|
+
} else {
|
|
73
|
+
console.warn(`The ${cookieName} cookie size exceeds 4096 bytes, which may cause issues in some browsers. You can use a stateful session implementation to store the session data in a data store.`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
getConnectionTokenSetsCookies(cookies) {
|
|
78
|
+
return cookies.getAll().filter((cookie) => cookie.name.startsWith(this.connectionTokenSetsCookieName));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
StatelessSessionStore
|
|
83
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { encrypt, decrypt } from "./golocal-cloud-wrapper.es152.js";
|
|
2
|
+
const TRANSACTION_COOKIE_PREFIX = "__txn_";
|
|
3
|
+
class TransactionStore {
|
|
4
|
+
constructor({ secret, cookieOptions }) {
|
|
5
|
+
this.secret = secret;
|
|
6
|
+
this.transactionCookiePrefix = (cookieOptions == null ? void 0 : cookieOptions.prefix) ?? TRANSACTION_COOKIE_PREFIX;
|
|
7
|
+
this.cookieConfig = {
|
|
8
|
+
httpOnly: true,
|
|
9
|
+
sameSite: (cookieOptions == null ? void 0 : cookieOptions.sameSite) ?? "lax",
|
|
10
|
+
// required to allow the cookie to be sent on the callback request
|
|
11
|
+
secure: (cookieOptions == null ? void 0 : cookieOptions.secure) ?? false,
|
|
12
|
+
path: (cookieOptions == null ? void 0 : cookieOptions.path) ?? "/",
|
|
13
|
+
maxAge: 60 * 60
|
|
14
|
+
// 1 hour in seconds
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Returns the name of the cookie used to store the transaction state.
|
|
19
|
+
* The cookie name is derived from the state parameter to prevent collisions
|
|
20
|
+
* between different transactions.
|
|
21
|
+
*/
|
|
22
|
+
getTransactionCookieName(state) {
|
|
23
|
+
return `${this.transactionCookiePrefix}${state}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Returns the configured prefix for transaction cookies.
|
|
27
|
+
*/
|
|
28
|
+
getCookiePrefix() {
|
|
29
|
+
return this.transactionCookiePrefix;
|
|
30
|
+
}
|
|
31
|
+
async save(resCookies, transactionState) {
|
|
32
|
+
const expiration = Math.floor(Date.now() / 1e3 + this.cookieConfig.maxAge);
|
|
33
|
+
const jwe = await encrypt(transactionState, this.secret, expiration);
|
|
34
|
+
if (!transactionState.state) {
|
|
35
|
+
throw new Error("Transaction state is required");
|
|
36
|
+
}
|
|
37
|
+
resCookies.set(this.getTransactionCookieName(transactionState.state), jwe.toString(), this.cookieConfig);
|
|
38
|
+
}
|
|
39
|
+
async get(reqCookies, state) {
|
|
40
|
+
var _a;
|
|
41
|
+
const cookieName = this.getTransactionCookieName(state);
|
|
42
|
+
const cookieValue = (_a = reqCookies.get(cookieName)) == null ? void 0 : _a.value;
|
|
43
|
+
if (!cookieValue) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
return decrypt(cookieValue, this.secret);
|
|
47
|
+
}
|
|
48
|
+
async delete(resCookies, state) {
|
|
49
|
+
await resCookies.delete(this.getTransactionCookieName(state));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Deletes all transaction cookies based on the configured prefix.
|
|
53
|
+
*/
|
|
54
|
+
async deleteAll(reqCookies, resCookies) {
|
|
55
|
+
const txnPrefix = this.getCookiePrefix();
|
|
56
|
+
reqCookies.getAll().forEach((cookie) => {
|
|
57
|
+
if (cookie.name.startsWith(txnPrefix)) {
|
|
58
|
+
resCookies.delete(cookie.name);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
TransactionStore
|
|
65
|
+
};
|