diff --git a/README.md b/README.md
index fa7deb5..82a4e04 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@ The official JavaScript SDK for [CrowdHandler](https://www.crowdhandler.com) wai
## Features
- 🚀 **Easy Integration** - Add queue management to any JavaScript application with a single function call
-- 🌐 **Flexible Deployment** - Works in Node.js servers, browsers, serverless functions, and CDN edge locations
+- 🌐 **Flexible Deployment** - Works in Node.js servers, browsers, Lambda@Edge, Cloudflare Workers, and other edge runtimes
- ⚡ **Performance Options** - Choose between real-time API validation or local signature validation based on your needs
- 🔄 **Queue Continuity** - Maintains user position across page refreshes and sessions
- 📘 **TypeScript Support** - Full type definitions for better development experience
@@ -29,7 +29,7 @@ npm install crowdhandler-sdk
-
+
```
### Module Formats
@@ -135,6 +135,45 @@ console.log('User granted access');
await gatekeeper.recordPerformance();
```
+### Cloudflare Workers
+
+```javascript
+import { init } from 'crowdhandler-sdk';
+
+export default {
+ async fetch(request, env, ctx) {
+ const { gatekeeper } = init({
+ publicKey: env.CROWDHANDLER_PUBLIC_KEY,
+ cloudflareWorkersRequest: request
+ });
+
+ const result = await gatekeeper.validateRequest();
+
+ // Workers have no mutable response object — build the outgoing
+ // Response yourself using values from the result.
+ if (!result.promoted) {
+ return new Response(null, {
+ status: 302,
+ headers: { Location: result.targetURL }
+ });
+ }
+
+ const originResponse = await fetch(request);
+ const response = new Response(originResponse.body, originResponse);
+
+ if (result.setCookie) {
+ response.headers.append(
+ 'set-cookie',
+ `crowdhandler=${result.cookieValue}; path=/; Secure`
+ );
+ }
+
+ ctx.waitUntil(gatekeeper.recordPerformance());
+ return response;
+ }
+};
+```
+
## Core Methods
### gatekeeper.validateRequest(params?)
@@ -257,8 +296,10 @@ await gatekeeper.recordPerformance();
// With custom options
await gatekeeper.recordPerformance({
- sample: 0.2, // Sample 20% of requests
- factor: 100 // Custom timing factor
+ sample: 1, // Record 100% of requests (default 0.2)
+ statusCode: 200, // HTTP status code (default 200)
+ overrideElapsed: 1234, // Custom timing in ms
+ timeout: 1500 // Per-call API timeout in ms (default 1500)
});
```
@@ -284,10 +325,11 @@ const instance = crowdhandler.init({
privateKey: 'YOUR_PRIVATE_KEY', // Required for private API methods
// Request context (choose one based on your environment)
- request: req, // Express/Node.js request
- response: res, // Express/Node.js response
- lambdaEdgeEvent: event, // Lambda@Edge event
- // (none) // Browser environment (auto-detected)
+ request: req, // Express/Node.js request
+ response: res, // Express/Node.js response
+ lambdaEdgeEvent: event, // Lambda@Edge event
+ cloudflareWorkersRequest: request, // Cloudflare Workers Request
+ // (none) // Browser environment (auto-detected)
// Options
options: {
@@ -566,6 +608,69 @@ exports.handler = async (event) => {
};
```
+### Cloudflare Workers
+
+The SDK ships with native support for the Cloudflare Workers (workerd) runtime — no Node polyfills required. Pass the Workers `Request` object via `cloudflareWorkersRequest` and the SDK uses native `fetch` internally for all API calls.
+
+```javascript
+import { init } from 'crowdhandler-sdk';
+
+export default {
+ async fetch(request, env, ctx) {
+ const { gatekeeper } = init({
+ publicKey: env.CROWDHANDLER_PUBLIC_KEY,
+ cloudflareWorkersRequest: request
+ });
+
+ const result = await gatekeeper.validateRequest();
+
+ if (result.error) {
+ console.error(`API Error ${result.error.statusCode}: ${result.error.message}`);
+ }
+
+ // Strip CrowdHandler params from a freshly promoted URL
+ if (result.stripParams) {
+ return new Response(null, {
+ status: 302,
+ headers: {
+ Location: decodeURIComponent(result.targetURL),
+ 'Set-Cookie': `crowdhandler=${result.cookieValue}; path=/; Secure`
+ }
+ });
+ }
+
+ // Send unpromoted users to the waiting room
+ if (!result.promoted) {
+ return new Response(null, {
+ status: 302,
+ headers: { Location: result.targetURL }
+ });
+ }
+
+ // Promoted: fetch the origin and attach the session cookie if needed
+ const originResponse = await fetch(request);
+ const response = new Response(originResponse.body, originResponse);
+
+ if (result.setCookie) {
+ response.headers.append(
+ 'set-cookie',
+ `crowdhandler=${result.cookieValue}; path=/; Secure`
+ );
+ }
+
+ // Performance recording continues after the response is returned
+ ctx.waitUntil(gatekeeper.recordPerformance());
+ return response;
+ }
+};
+```
+
+**Workers vs. Express/Lambda — what's different:**
+
+- Workers have no mutable response object. Build the outgoing `Response` yourself using values from `result` (`cookieValue`, `targetURL`, `setCookie`) rather than relying on helper methods that mutate a response in place.
+- Use `ctx.waitUntil()` for `recordPerformance()` so the metric call doesn't delay the user's response. On Workers the SDK awaits the underlying API call internally (so it actually flushes inside `ctx.waitUntil`); the put is capped at 1500ms by default — pass `{ timeout: }` to tune.
+- Default `mode: 'full'` (used above) only needs the public key. Hybrid mode is supported but requires shipping your private key as a Worker secret — only do this if you've assessed the trade-off.
+
### React / Next.js
```javascript
@@ -636,7 +741,8 @@ await gatekeeper.recordPerformance();
await gatekeeper.recordPerformance({
sample: 1.0, // Record 100% of requests (default 0.2)
statusCode: 200, // HTTP status code
- overrideElapsed: 1234 // Custom timing in ms
+ overrideElapsed: 1234, // Custom timing in ms
+ timeout: 1500 // Per-call API timeout in ms (default 1500, overrides global SDK timeout)
});
```
diff --git a/dist/client/base_client.js b/dist/client/base_client.js
index 6b7aaff..cd3ced8 100644
--- a/dist/client/base_client.js
+++ b/dist/client/base_client.js
@@ -55,6 +55,11 @@ var axios_1 = __importDefault(require("axios"));
var zod_1 = require("zod");
var logger_1 = require("../common/logger");
var errors_1 = require("../common/errors");
+var runtime_1 = require("../common/runtime");
+// axios 0.27.2 has no fetch adapter and requires Node's http module, so it
+// crashes inside Workers. When isCloudflareWorkers is true we route HTTP
+// through native fetch instead — preserved error shape so errorHandler keeps
+// working.
var APIResponse = zod_1.z.object({}).catchall(zod_1.z.any());
var APIErrorResponse = zod_1.z
.object({
@@ -70,8 +75,125 @@ var BaseClient = /** @class */ (function () {
this.apiUrl = options.apiUrl || apiUrl;
this.key = key;
this.timeout = options.timeout || 5000;
- axios_1.default.defaults.timeout = this.timeout;
+ if (!runtime_1.isCloudflareWorkers) {
+ // axios.defaults is process-global state and is meaningless in Workers
+ // (we don't use axios there). Skip in Workers to avoid touching axios's
+ // internal config which can drag in Node-only deps during import.
+ axios_1.default.defaults.timeout = this.timeout;
+ }
}
+ /**
+ * Issue an HTTP request. Routes through axios in Node/Lambda environments
+ * and native fetch in Cloudflare Workers. Both paths return / throw
+ * axios-compatible shapes so errorHandler() and the response.data parsing
+ * downstream work unchanged.
+ */
+ BaseClient.prototype.httpRequest = function (method, url, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return __awaiter(this, void 0, void 0, function () {
+ var requestTimeout, response_1, finalUrl, search, _i, _b, _c, k, v, init, hasContentType, controller, timeoutId, response, err_1, wrapped, contentType, data, _d, text, headersObj_1, wrapped, headersObj;
+ return __generator(this, function (_e) {
+ switch (_e.label) {
+ case 0:
+ requestTimeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : this.timeout;
+ if (!!runtime_1.isCloudflareWorkers) return [3 /*break*/, 2];
+ return [4 /*yield*/, axios_1.default.request({
+ method: method,
+ url: url,
+ params: options.params,
+ data: options.body,
+ headers: options.headers,
+ timeout: requestTimeout,
+ })];
+ case 1:
+ response_1 = _e.sent();
+ return [2 /*return*/, { data: response_1.data, status: response_1.status, headers: response_1.headers }];
+ case 2:
+ finalUrl = url;
+ if (options.params && Object.keys(options.params).length > 0) {
+ search = new URLSearchParams();
+ for (_i = 0, _b = Object.entries(options.params); _i < _b.length; _i++) {
+ _c = _b[_i], k = _c[0], v = _c[1];
+ if (v !== undefined && v !== null)
+ search.append(k, String(v));
+ }
+ finalUrl += (finalUrl.includes("?") ? "&" : "?") + search.toString();
+ }
+ init = {
+ method: method,
+ headers: options.headers,
+ };
+ if (options.body !== undefined && method !== "GET" && method !== "DELETE") {
+ init.body = typeof options.body === "string" ? options.body : JSON.stringify(options.body);
+ hasContentType = options.headers && Object.keys(options.headers)
+ .some(function (h) { return h.toLowerCase() === "content-type"; });
+ if (!hasContentType) {
+ init.headers = __assign(__assign({}, (options.headers || {})), { "content-type": "application/json" });
+ }
+ }
+ controller = new AbortController();
+ timeoutId = setTimeout(function () { return controller.abort(); }, requestTimeout);
+ init.signal = controller.signal;
+ _e.label = 3;
+ case 3:
+ _e.trys.push([3, 5, , 6]);
+ return [4 /*yield*/, fetch(finalUrl, init)];
+ case 4:
+ response = _e.sent();
+ return [3 /*break*/, 6];
+ case 5:
+ err_1 = _e.sent();
+ clearTimeout(timeoutId);
+ wrapped = new Error((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) || "Network request failed");
+ if (controller.signal.aborted || (err_1 === null || err_1 === void 0 ? void 0 : err_1.name) === "AbortError") {
+ wrapped.code = "ECONNABORTED";
+ }
+ wrapped.request = { url: finalUrl, method: method };
+ wrapped.config = { url: finalUrl, method: method };
+ throw wrapped;
+ case 6:
+ clearTimeout(timeoutId);
+ contentType = response.headers.get("content-type") || "";
+ if (!contentType.includes("application/json")) return [3 /*break*/, 11];
+ _e.label = 7;
+ case 7:
+ _e.trys.push([7, 9, , 10]);
+ return [4 /*yield*/, response.json()];
+ case 8:
+ data = _e.sent();
+ return [3 /*break*/, 10];
+ case 9:
+ _d = _e.sent();
+ data = null;
+ return [3 /*break*/, 10];
+ case 10: return [3 /*break*/, 13];
+ case 11: return [4 /*yield*/, response.text()];
+ case 12:
+ text = _e.sent();
+ try {
+ data = JSON.parse(text);
+ }
+ catch (_f) {
+ data = text;
+ }
+ _e.label = 13;
+ case 13:
+ if (response.status < 200 || response.status >= 300) {
+ headersObj_1 = {};
+ response.headers.forEach(function (v, k) { headersObj_1[k] = v; });
+ wrapped = new Error("Request failed with status ".concat(response.status));
+ wrapped.response = { status: response.status, data: data, headers: headersObj_1 };
+ wrapped.config = { url: finalUrl, method: method };
+ throw wrapped;
+ }
+ headersObj = {};
+ response.headers.forEach(function (v, k) { headersObj[k] = v; });
+ return [2 /*return*/, { data: data, status: response.status, headers: headersObj }];
+ }
+ });
+ });
+ };
/**
* Wraps any error into a CrowdHandlerError
*/
@@ -168,7 +290,7 @@ var BaseClient = /** @class */ (function () {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 4]);
- return [4 /*yield*/, axios_1.default.delete(this.apiUrl + path, {
+ return [4 /*yield*/, this.httpRequest("DELETE", this.apiUrl + path, {
headers: {
"x-api-key": this.key,
},
@@ -200,7 +322,7 @@ var BaseClient = /** @class */ (function () {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 4]);
- return [4 /*yield*/, axios_1.default.get(this.apiUrl + path, {
+ return [4 /*yield*/, this.httpRequest("GET", this.apiUrl + path, {
params: params,
headers: {
"x-api-key": this.key,
@@ -234,7 +356,8 @@ var BaseClient = /** @class */ (function () {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 4]);
- return [4 /*yield*/, axios_1.default.post(this.apiUrl + path, body, {
+ return [4 /*yield*/, this.httpRequest("POST", this.apiUrl + path, {
+ body: body,
headers: __assign({ "x-api-key": this.key }, headers),
})];
case 1:
@@ -257,17 +380,19 @@ var BaseClient = /** @class */ (function () {
});
});
};
- BaseClient.prototype.httpPUT = function (path, body) {
+ BaseClient.prototype.httpPUT = function (path, body, options) {
return __awaiter(this, void 0, void 0, function () {
var response, error_4;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
- return [4 /*yield*/, axios_1.default.put(this.apiUrl + path, body, {
+ return [4 /*yield*/, this.httpRequest("PUT", this.apiUrl + path, {
+ body: body,
headers: {
"x-api-key": this.key,
},
+ timeout: options === null || options === void 0 ? void 0 : options.timeout,
})];
case 1:
response = _a.sent();
diff --git a/dist/client/resource.js b/dist/client/resource.js
index af8bd45..fea0678 100644
--- a/dist/client/resource.js
+++ b/dist/client/resource.js
@@ -80,9 +80,9 @@ var Resource = /** @class */ (function (_super) {
);
return _super.prototype.httpPOST.call(this, this.path, requestBody);
};
- Resource.prototype.put = function (id, body) {
+ Resource.prototype.put = function (id, body, options) {
this.path = this.formatPath(this.path, id);
- return _super.prototype.httpPUT.call(this, this.path, body);
+ return _super.prototype.httpPUT.call(this, this.path, body, options);
};
return Resource;
}(base_client_1.BaseClient));
diff --git a/dist/common/processURL.js b/dist/common/processURL.js
index 9218be6..a7d0ffb 100644
--- a/dist/common/processURL.js
+++ b/dist/common/processURL.js
@@ -1,6 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ProcessURL = void 0;
+var types_1 = require("./types");
var logger_1 = require("./logger");
var ProcessURL = /** @class */ (function () {
function ProcessURL(request, debug) {
@@ -110,20 +111,11 @@ var ProcessURL = /** @class */ (function () {
ProcessURL.prototype.removeChParams = function (queryString) {
if (!queryString)
return "";
- // List of ch-* parameters to remove
- var chParams = [
- "ch-code",
- "ch-fresh",
- "ch-id",
- "ch-id-signature",
- "ch-public-key",
- "ch-requested",
- ];
// Split into individual params, filter out ch-* params, rejoin
var params = queryString.split("&");
var filteredParams = params.filter(function (param) {
var key = param.split("=")[0];
- return !chParams.includes(key.toLowerCase());
+ return !types_1.CH_PARAM_KEYS.includes(key.toLowerCase());
});
return filteredParams.join("&");
};
diff --git a/dist/common/runtime.js b/dist/common/runtime.js
new file mode 100644
index 0000000..56dea2a
--- /dev/null
+++ b/dist/common/runtime.js
@@ -0,0 +1,11 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.isCloudflareWorkers = void 0;
+/**
+ * Detect if we're running in the Cloudflare Workers (workerd) runtime.
+ * Workers sets navigator.userAgent to "Cloudflare-Workers" — this is the
+ * documented and stable detection signal:
+ * https://developers.cloudflare.com/workers/runtime-apis/web-standards/
+ */
+exports.isCloudflareWorkers = typeof navigator !== "undefined" &&
+ navigator.userAgent === "Cloudflare-Workers";
diff --git a/dist/common/types.js b/dist/common/types.js
index 8afe379..2297f33 100644
--- a/dist/common/types.js
+++ b/dist/common/types.js
@@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.Modes = exports.RecordPerformanceOptions = exports.SessionStatusWrapper = exports.HttpErrorWrapper = exports.ValidateRequestObject = exports.ValidateRequestParams = exports.TokenObjectConstructor = exports.TokenObject = exports.ExtractTokenOptions = exports.SignatureSourceObject = exports.SignatureResponseObject = exports.SignatureObject = exports.RoomMetaObject = exports.LocalStorageOptions = exports.LocalStorageObject = exports.CookieObject = exports.RequestObject = exports.ProcessURLResultObject = exports.SessionRequestConfig = exports.SpecialParametersObject = exports.GatekeeperKeyPair = exports.GatekeeperOptions = exports.RoomsConfig = exports.RoomConfig = void 0;
+exports.Modes = exports.RecordPerformanceOptions = exports.SessionStatusWrapper = exports.HttpErrorWrapper = exports.ValidateRequestObject = exports.ValidateRequestParams = exports.TokenObjectConstructor = exports.TokenObject = exports.ExtractTokenOptions = exports.SignatureSourceObject = exports.SignatureResponseObject = exports.SignatureObject = exports.RoomMetaObject = exports.LocalStorageOptions = exports.LocalStorageObject = exports.CookieObject = exports.RequestObject = exports.ProcessURLResultObject = exports.SessionRequestConfig = exports.SpecialParametersObject = exports.CH_PARAM_KEYS = exports.GatekeeperKeyPair = exports.GatekeeperOptions = exports.RoomsConfig = exports.RoomConfig = void 0;
var zod_1 = require("zod");
// Lite Validator types
exports.RoomConfig = zod_1.z.object({
@@ -32,6 +32,16 @@ exports.GatekeeperKeyPair = zod_1.z.object({
publicKey: zod_1.z.string(),
privateKey: zod_1.z.string().optional(),
});
+// Centralised list of CrowdHandler query-string parameter keys.
+// Used wherever ch-* params need to be detected or stripped.
+exports.CH_PARAM_KEYS = [
+ 'ch-code',
+ 'ch-fresh',
+ 'ch-id',
+ 'ch-id-signature',
+ 'ch-public-key',
+ 'ch-requested',
+];
exports.SpecialParametersObject = zod_1.z.object({
chCode: zod_1.z.string(),
chID: zod_1.z.string(),
@@ -170,6 +180,7 @@ exports.RecordPerformanceOptions = zod_1.z.object({
sample: zod_1.z.number().optional().default(0.2),
overrideElapsed: zod_1.z.number().optional(),
responseID: zod_1.z.string().optional(),
+ timeout: zod_1.z.number().optional(),
});
// Mode constants
exports.Modes = {
diff --git a/dist/crowdhandler.cjs.js b/dist/crowdhandler.cjs.js
index bc7b1da..107ea85 100644
--- a/dist/crowdhandler.cjs.js
+++ b/dist/crowdhandler.cjs.js
@@ -1,5 +1,5 @@
/**
- * CrowdHandler JavaScript SDK v2.3.1
+ * CrowdHandler JavaScript SDK v2.4.0
* (c) 2026 CrowdHandler
* @license ISC
*/
@@ -1039,6 +1039,19 @@ var createError = {
}
};
+/**
+ * Detect if we're running in the Cloudflare Workers (workerd) runtime.
+ * Workers sets navigator.userAgent to "Cloudflare-Workers" — this is the
+ * documented and stable detection signal:
+ * https://developers.cloudflare.com/workers/runtime-apis/web-standards/
+ */
+var isCloudflareWorkers = typeof navigator !== "undefined" &&
+ navigator.userAgent === "Cloudflare-Workers";
+
+// axios 0.27.2 has no fetch adapter and requires Node's http module, so it
+// crashes inside Workers. When isCloudflareWorkers is true we route HTTP
+// through native fetch instead — preserved error shape so errorHandler keeps
+// working.
var APIResponse = zod.z.object({}).catchall(zod.z.any());
zod.z
.object({
@@ -1054,8 +1067,125 @@ var BaseClient = /** @class */ (function () {
this.apiUrl = options.apiUrl || apiUrl;
this.key = key;
this.timeout = options.timeout || 5000;
- axios__default["default"].defaults.timeout = this.timeout;
+ if (!isCloudflareWorkers) {
+ // axios.defaults is process-global state and is meaningless in Workers
+ // (we don't use axios there). Skip in Workers to avoid touching axios's
+ // internal config which can drag in Node-only deps during import.
+ axios__default["default"].defaults.timeout = this.timeout;
+ }
}
+ /**
+ * Issue an HTTP request. Routes through axios in Node/Lambda environments
+ * and native fetch in Cloudflare Workers. Both paths return / throw
+ * axios-compatible shapes so errorHandler() and the response.data parsing
+ * downstream work unchanged.
+ */
+ BaseClient.prototype.httpRequest = function (method, url, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return __awaiter(this, void 0, void 0, function () {
+ var requestTimeout, response_1, finalUrl, search, _i, _b, _c, k, v, init, hasContentType, controller, timeoutId, response, err_1, wrapped, contentType, data, text, headersObj_1, wrapped, headersObj;
+ return __generator(this, function (_e) {
+ switch (_e.label) {
+ case 0:
+ requestTimeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : this.timeout;
+ if (!!isCloudflareWorkers) return [3 /*break*/, 2];
+ return [4 /*yield*/, axios__default["default"].request({
+ method: method,
+ url: url,
+ params: options.params,
+ data: options.body,
+ headers: options.headers,
+ timeout: requestTimeout,
+ })];
+ case 1:
+ response_1 = _e.sent();
+ return [2 /*return*/, { data: response_1.data, status: response_1.status, headers: response_1.headers }];
+ case 2:
+ finalUrl = url;
+ if (options.params && Object.keys(options.params).length > 0) {
+ search = new URLSearchParams();
+ for (_i = 0, _b = Object.entries(options.params); _i < _b.length; _i++) {
+ _c = _b[_i], k = _c[0], v = _c[1];
+ if (v !== undefined && v !== null)
+ search.append(k, String(v));
+ }
+ finalUrl += (finalUrl.includes("?") ? "&" : "?") + search.toString();
+ }
+ init = {
+ method: method,
+ headers: options.headers,
+ };
+ if (options.body !== undefined && method !== "GET" && method !== "DELETE") {
+ init.body = typeof options.body === "string" ? options.body : JSON.stringify(options.body);
+ hasContentType = options.headers && Object.keys(options.headers)
+ .some(function (h) { return h.toLowerCase() === "content-type"; });
+ if (!hasContentType) {
+ init.headers = __assign(__assign({}, (options.headers || {})), { "content-type": "application/json" });
+ }
+ }
+ controller = new AbortController();
+ timeoutId = setTimeout(function () { return controller.abort(); }, requestTimeout);
+ init.signal = controller.signal;
+ _e.label = 3;
+ case 3:
+ _e.trys.push([3, 5, , 6]);
+ return [4 /*yield*/, fetch(finalUrl, init)];
+ case 4:
+ response = _e.sent();
+ return [3 /*break*/, 6];
+ case 5:
+ err_1 = _e.sent();
+ clearTimeout(timeoutId);
+ wrapped = new Error((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) || "Network request failed");
+ if (controller.signal.aborted || (err_1 === null || err_1 === void 0 ? void 0 : err_1.name) === "AbortError") {
+ wrapped.code = "ECONNABORTED";
+ }
+ wrapped.request = { url: finalUrl, method: method };
+ wrapped.config = { url: finalUrl, method: method };
+ throw wrapped;
+ case 6:
+ clearTimeout(timeoutId);
+ contentType = response.headers.get("content-type") || "";
+ if (!contentType.includes("application/json")) return [3 /*break*/, 11];
+ _e.label = 7;
+ case 7:
+ _e.trys.push([7, 9, , 10]);
+ return [4 /*yield*/, response.json()];
+ case 8:
+ data = _e.sent();
+ return [3 /*break*/, 10];
+ case 9:
+ _e.sent();
+ data = null;
+ return [3 /*break*/, 10];
+ case 10: return [3 /*break*/, 13];
+ case 11: return [4 /*yield*/, response.text()];
+ case 12:
+ text = _e.sent();
+ try {
+ data = JSON.parse(text);
+ }
+ catch (_f) {
+ data = text;
+ }
+ _e.label = 13;
+ case 13:
+ if (response.status < 200 || response.status >= 300) {
+ headersObj_1 = {};
+ response.headers.forEach(function (v, k) { headersObj_1[k] = v; });
+ wrapped = new Error("Request failed with status ".concat(response.status));
+ wrapped.response = { status: response.status, data: data, headers: headersObj_1 };
+ wrapped.config = { url: finalUrl, method: method };
+ throw wrapped;
+ }
+ headersObj = {};
+ response.headers.forEach(function (v, k) { headersObj[k] = v; });
+ return [2 /*return*/, { data: data, status: response.status, headers: headersObj }];
+ }
+ });
+ });
+ };
/**
* Wraps any error into a CrowdHandlerError
*/
@@ -1151,7 +1281,7 @@ var BaseClient = /** @class */ (function () {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 4]);
- return [4 /*yield*/, axios__default["default"].delete(this.apiUrl + path, {
+ return [4 /*yield*/, this.httpRequest("DELETE", this.apiUrl + path, {
headers: {
"x-api-key": this.key,
},
@@ -1183,7 +1313,7 @@ var BaseClient = /** @class */ (function () {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 4]);
- return [4 /*yield*/, axios__default["default"].get(this.apiUrl + path, {
+ return [4 /*yield*/, this.httpRequest("GET", this.apiUrl + path, {
params: params,
headers: {
"x-api-key": this.key,
@@ -1217,7 +1347,8 @@ var BaseClient = /** @class */ (function () {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 4]);
- return [4 /*yield*/, axios__default["default"].post(this.apiUrl + path, body, {
+ return [4 /*yield*/, this.httpRequest("POST", this.apiUrl + path, {
+ body: body,
headers: __assign({ "x-api-key": this.key }, headers),
})];
case 1:
@@ -1240,17 +1371,19 @@ var BaseClient = /** @class */ (function () {
});
});
};
- BaseClient.prototype.httpPUT = function (path, body) {
+ BaseClient.prototype.httpPUT = function (path, body, options) {
return __awaiter(this, void 0, void 0, function () {
var response, error_4;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
- return [4 /*yield*/, axios__default["default"].put(this.apiUrl + path, body, {
+ return [4 /*yield*/, this.httpRequest("PUT", this.apiUrl + path, {
+ body: body,
headers: {
"x-api-key": this.key,
},
+ timeout: options === null || options === void 0 ? void 0 : options.timeout,
})];
case 1:
response = _a.sent();
@@ -1307,9 +1440,9 @@ var Resource = /** @class */ (function (_super) {
);
return _super.prototype.httpPOST.call(this, this.path, requestBody);
};
- Resource.prototype.put = function (id, body) {
+ Resource.prototype.put = function (id, body, options) {
this.path = this.formatPath(this.path, id);
- return _super.prototype.httpPUT.call(this, this.path, body);
+ return _super.prototype.httpPUT.call(this, this.path, body, options);
};
return Resource;
}(BaseClient));
@@ -1707,6 +1840,78 @@ var BrowserHandler = /** @class */ (function () {
return BrowserHandler;
}());
+/**
+ * Handler for Cloudflare Workers (workerd) runtime.
+ *
+ * Mirrors the shape of LambdaRequestHandler — the Worker model is request-in /
+ * response-out (no mutable response object), so:
+ * - read methods source from the Workers-native Request
+ * - redirect() returns a Workers Response (caller returns it from fetch)
+ * - setCookie() returns the Set-Cookie header value (caller appends it
+ * to the outgoing Response)
+ *
+ * Cookie format and no-cache redirect headers mirror the existing
+ * crowdhandler-cloudflare-integration Worker so behaviour stays consistent
+ * across both deployment styles.
+ */
+var CloudflareWorkersHandler = /** @class */ (function () {
+ function CloudflareWorkersHandler(request) {
+ this.request = request;
+ this.url = new URL(request.url);
+ }
+ CloudflareWorkersHandler.prototype.getHeader = function (name) {
+ return this.request.headers.get(name) || "";
+ };
+ CloudflareWorkersHandler.prototype.getCookies = function () {
+ return this.request.headers.get("cookie") || "";
+ };
+ CloudflareWorkersHandler.prototype.getHost = function () {
+ // URL.host includes port when non-standard — matches Host header
+ // semantics used by the other handlers (Lambda/NodeJS/Browser).
+ return this.url.host;
+ };
+ CloudflareWorkersHandler.prototype.getProtocol = function () {
+ // URL.protocol includes the trailing ":" — strip it so the value matches
+ // the other handlers (which return "https" / "http").
+ return this.url.protocol.replace(/:$/, "");
+ };
+ CloudflareWorkersHandler.prototype.getPath = function () {
+ return this.url.pathname + this.url.search;
+ };
+ CloudflareWorkersHandler.prototype.getAbsoluteUri = function () {
+ return this.request.url;
+ };
+ CloudflareWorkersHandler.prototype.getUserHostAddress = function () {
+ // CF-Connecting-IP is the canonical client IP header on Workers
+ // (matches crowdhandler-cloudflare-integration/index.js).
+ return this.request.headers.get("cf-connecting-ip") || "";
+ };
+ CloudflareWorkersHandler.prototype.setCookie = function (value, cookieName, domain) {
+ if (cookieName === void 0) { cookieName = "crowdhandler"; }
+ // Returns the Set-Cookie header value — caller appends it to their
+ // outgoing Response. Format mirrors the existing CF integration.
+ var parts = ["".concat(cookieName, "=").concat(value), "path=/", "Secure"];
+ if (domain) {
+ parts.push("domain=".concat(domain));
+ }
+ return parts.join("; ");
+ };
+ CloudflareWorkersHandler.prototype.redirect = function (url) {
+ // Header casing and values mirror helpers.noCacheHeaders in
+ // crowdhandler-cloudflare-integration/helpers/misc.js.
+ return new Response(null, {
+ status: 302,
+ headers: {
+ Location: url,
+ "Cache-Control": "no-cache, no-store, must-revalidate",
+ Expires: "Fri, 01 Jan 1970 00:00:00 GMT",
+ Pragma: "no-cache",
+ },
+ });
+ };
+ return CloudflareWorkersHandler;
+}());
+
var LambdaRequestHandler = /** @class */ (function () {
function LambdaRequestHandler(event /*context: any, callback: any*/) {
this.request = event;
@@ -1925,6 +2130,10 @@ var RequestContext = /** @class */ (function () {
var responseEvent = params.lambdaEvent;
return new LambdaResponseHandler(responseEvent.Records[0].cf.request, responseEvent.Records[0].cf.response);
}
+ //Cloudflare Workers Request
+ }
+ else if (params && params.cloudflareWorkersRequest) {
+ return new CloudflareWorkersHandler(params.cloudflareWorkersRequest);
//NodeJS HTTP request
}
else if (params && params.request && params.response) {
@@ -1974,6 +2183,16 @@ zod.z.object({
publicKey: zod.z.string(),
privateKey: zod.z.string().optional(),
});
+// Centralised list of CrowdHandler query-string parameter keys.
+// Used wherever ch-* params need to be detected or stripped.
+var CH_PARAM_KEYS = [
+ 'ch-code',
+ 'ch-fresh',
+ 'ch-id',
+ 'ch-id-signature',
+ 'ch-public-key',
+ 'ch-requested',
+];
var SpecialParametersObject = zod.z.object({
chCode: zod.z.string(),
chID: zod.z.string(),
@@ -2112,6 +2331,7 @@ var RecordPerformanceOptions = zod.z.object({
sample: zod.z.number().optional().default(0.2),
overrideElapsed: zod.z.number().optional(),
responseID: zod.z.string().optional(),
+ timeout: zod.z.number().optional(),
});
// Mode constants
var Modes = {
@@ -2288,20 +2508,11 @@ var ProcessURL = /** @class */ (function () {
ProcessURL.prototype.removeChParams = function (queryString) {
if (!queryString)
return "";
- // List of ch-* parameters to remove
- var chParams = [
- "ch-code",
- "ch-fresh",
- "ch-id",
- "ch-id-signature",
- "ch-public-key",
- "ch-requested",
- ];
// Split into individual params, filter out ch-* params, rejoin
var params = queryString.split("&");
var filteredParams = params.filter(function (param) {
var key = param.split("=")[0];
- return !chParams.includes(key.toLowerCase());
+ return !CH_PARAM_KEYS.includes(key.toLowerCase());
});
return filteredParams.join("&");
};
@@ -3074,34 +3285,38 @@ var Gatekeeper = /** @class */ (function () {
}
// Decode once to get the actual URL
var decodedURL = decodeURIComponent(destinationUrl);
- // Parse URL to handle parameters properly
- var urlParts = decodedURL.split('?');
- var baseUrl = urlParts[0];
- var queryString = urlParts[1] || '';
- // Parse existing parameters while preserving their values
+ // Build new CrowdHandler parameters
+ var chParams = [
+ "ch-id=".concat(encodeURIComponent(this.token || '')),
+ "ch-id-signature=".concat(encodeURIComponent(((_d = (_c = this.sessionStatus) === null || _c === void 0 ? void 0 : _c.result) === null || _d === void 0 ? void 0 : _d.hash) || '')),
+ "ch-requested=".concat(encodeURIComponent(((_f = (_e = this.sessionStatus) === null || _e === void 0 ? void 0 : _e.result) === null || _f === void 0 ? void 0 : _f.requested) || this.requested || this.specialParameters.chRequested || '')),
+ "ch-code=".concat(encodeURIComponent(this.specialParameters.chCode || '')),
+ "ch-fresh=true"
+ ];
+ // Separate hash fragment before parsing query params. This ensures
+ // ch-* params are placed in the real query string (window.location.search)
+ // rather than inside the hash fragment where host-domain scripts cannot
+ // read them via URLSearchParams.
+ var hashIndex = decodedURL.indexOf('#');
+ var urlWithoutHash = hashIndex !== -1 ? decodedURL.substring(0, hashIndex) : decodedURL;
+ var hashPart = hashIndex !== -1 ? decodedURL.substring(hashIndex) : '';
+ // Parse existing query string, stripping any existing ch-* params
+ var _g = urlWithoutHash.split('?'), baseUrl = _g[0], queryParts = _g.slice(1);
+ var queryString = queryParts.join('?');
var existingParams = [];
if (queryString) {
var params = queryString.split('&');
for (var _i = 0, params_1 = params; _i < params_1.length; _i++) {
var param = params_1[_i];
var key = param.split('=')[0];
- // Skip CrowdHandler parameters
- if (!['ch-id', 'ch-id-signature', 'ch-requested', 'ch-code', 'ch-fresh'].includes(key)) {
+ if (!CH_PARAM_KEYS.includes(key)) {
existingParams.push(param);
}
}
}
- // Build new CrowdHandler parameters
- var chParams = [
- "ch-id=".concat(encodeURIComponent(this.token || '')),
- "ch-id-signature=".concat(encodeURIComponent(((_d = (_c = this.sessionStatus) === null || _c === void 0 ? void 0 : _c.result) === null || _d === void 0 ? void 0 : _d.hash) || '')),
- "ch-requested=".concat(encodeURIComponent(((_f = (_e = this.sessionStatus) === null || _e === void 0 ? void 0 : _e.result) === null || _f === void 0 ? void 0 : _f.requested) || this.requested || this.specialParameters.chRequested || '')),
- "ch-code=".concat(encodeURIComponent(this.specialParameters.chCode || '')),
- "ch-fresh=true"
- ];
- // Construct final URL
+ // Construct final URL with ch-* params before any hash fragment
var allParams = existingParams.concat(chParams);
- var finalUrl = baseUrl + (allParams.length > 0 ? '?' + allParams.join('&') : '');
+ var finalUrl = baseUrl + (allParams.length > 0 ? '?' + allParams.join('&') : '') + hashPart;
logger(this.options.debug, "info", "[WaitingRoom] Redirecting promoted user to: ".concat(finalUrl));
return this.REQUEST.redirect(finalUrl);
}
@@ -3298,12 +3513,23 @@ var Gatekeeper = /** @class */ (function () {
*
* @param {string} value - The cookie value to set (from result.cookieValue)
* @param {string} domain - Optional domain pattern to determine cookie domain scope
- * @returns {boolean} True if the cookie was successfully set, false otherwise
+ * @returns {boolean | string} In Node.js/Lambda/browser environments returns true on success
+ * or false on failure. In Cloudflare Workers returns the Set-Cookie header string that
+ * must be applied to the outgoing Response by the caller.
*
* @example
+ * // Node.js / Lambda
* if (result.setCookie) {
* gatekeeper.setCookie(result.cookieValue, result.domain);
* }
+ *
+ * @example
+ * // Cloudflare Workers
+ * if (result.setCookie) {
+ * const setCookieHeader = gatekeeper.setCookie(result.cookieValue, result.domain);
+ * // setCookieHeader is the Set-Cookie header value — apply it to the Response:
+ * // response.headers.append('Set-Cookie', setCookieHeader as string);
+ * }
*/
Gatekeeper.prototype.setCookie = function (value, domain) {
try {
@@ -3316,9 +3542,12 @@ var Gatekeeper = /** @class */ (function () {
logger(this.options.debug, "info", "Setting cookie with domain: ".concat(cookieDomain));
}
}
- // Set the cookie with the provided value and options
- this.REQUEST.setCookie(value, this.STORAGE_NAME, cookieDomain);
- return true;
+ // Set the cookie with the provided value and options.
+ // CloudflareWorkersHandler returns the Set-Cookie header string because
+ // Workers are response-out and the caller must apply the header manually.
+ // All other handlers set the cookie as a side-effect and return void.
+ var result = this.REQUEST.setCookie(value, this.STORAGE_NAME, cookieDomain);
+ return typeof result === 'string' ? result : true;
}
catch (error) {
logger(this.options.debug, "error", error);
@@ -3396,35 +3625,42 @@ var Gatekeeper = /** @class */ (function () {
*/
Gatekeeper.prototype.recordPerformance = function (options) {
return __awaiter(this, void 0, void 0, function () {
- var validatedOptions, statusCode, sample, overrideElapsed, responseID, lottery, currentResponseID, elapsed;
+ var validatedOptions, statusCode, sample, overrideElapsed, responseID, timeout, lottery, currentResponseID, elapsed, sampleRate, putPromise, error_3;
return __generator(this, function (_a) {
- try {
- validatedOptions = options
- ? RecordPerformanceOptions.parse(options)
- : {
- statusCode: 200,
- sample: 0.2,
- overrideElapsed: undefined,
- responseID: undefined, // no responseID
- };
- statusCode = validatedOptions.statusCode, sample = validatedOptions.sample, overrideElapsed = validatedOptions.overrideElapsed, responseID = validatedOptions.responseID;
- lottery = Math.random();
- currentResponseID = responseID || this.responseID;
- // If there's no responseID or if the random number is higher than the sample rate, return early
- if (!currentResponseID || lottery >= sample) {
- return [2 /*return*/];
- }
- elapsed = overrideElapsed !== undefined ? overrideElapsed : this.timer.elapsed();
- // Asynchronously send the performance data to CrowdHandler, no need to await the promise
- this.PublicClient.responses().put(currentResponseID, {
- httpCode: statusCode,
- time: elapsed,
- });
- }
- catch (error) {
- logger(this.options.debug, "Error recording performance:", error);
+ switch (_a.label) {
+ case 0:
+ _a.trys.push([0, 3, , 4]);
+ validatedOptions = options
+ ? RecordPerformanceOptions.parse(options)
+ : {
+ statusCode: 200,
+ sample: 0.2,
+ overrideElapsed: undefined,
+ responseID: undefined,
+ timeout: undefined, // no per-call timeout override
+ };
+ statusCode = validatedOptions.statusCode, sample = validatedOptions.sample, overrideElapsed = validatedOptions.overrideElapsed, responseID = validatedOptions.responseID, timeout = validatedOptions.timeout;
+ lottery = Math.random();
+ currentResponseID = responseID || this.responseID;
+ // If there's no responseID or if the random number is higher than the sample rate, return early
+ if (!currentResponseID || lottery >= sample) {
+ return [2 /*return*/];
+ }
+ elapsed = overrideElapsed !== undefined ? overrideElapsed : this.timer.elapsed();
+ sampleRate = Math.max(1, Math.round(1 / sample));
+ putPromise = this.PublicClient.responses().put(currentResponseID, { httpCode: statusCode, sampleRate: sampleRate, time: elapsed }, { timeout: timeout !== null && timeout !== void 0 ? timeout : 1500 });
+ if (!isCloudflareWorkers) return [3 /*break*/, 2];
+ return [4 /*yield*/, putPromise];
+ case 1:
+ _a.sent();
+ _a.label = 2;
+ case 2: return [3 /*break*/, 4];
+ case 3:
+ error_3 = _a.sent();
+ logger(this.options.debug, "Error recording performance:", error_3);
+ return [3 /*break*/, 4];
+ case 4: return [2 /*return*/];
}
- return [2 /*return*/];
});
});
};
@@ -3678,7 +3914,7 @@ var Gatekeeper = /** @class */ (function () {
Gatekeeper.prototype.validateRequestClientSideMode = function (customParams) {
var _a, _b, _c, _d, _e;
return __awaiter(this, void 0, void 0, function () {
- var result, statusCode, errorMessage, liteCheck, mergedParams, sessionStatusType, status_1, errorMessage, _f, promoted, slug, token, responseID, deployment, hash, requested, domain, error_3;
+ var result, statusCode, errorMessage, liteCheck, mergedParams, sessionStatusType, status_1, errorMessage, _f, promoted, slug, token, responseID, deployment, hash, requested, domain, error_4;
return __generator(this, function (_g) {
switch (_g.label) {
case 0:
@@ -3819,9 +4055,9 @@ var Gatekeeper = /** @class */ (function () {
}
return [2 /*return*/, result];
case 3:
- error_3 = _g.sent();
- logger(this.options.debug, "error", "An error occurred during request validation: ".concat(error_3));
- throw error_3;
+ error_4 = _g.sent();
+ logger(this.options.debug, "error", "An error occurred during request validation: ".concat(error_4));
+ throw error_4;
case 4: return [2 /*return*/];
}
});
@@ -3836,7 +4072,7 @@ var Gatekeeper = /** @class */ (function () {
Gatekeeper.prototype.validateRequestFullMode = function (customParams) {
var _a, _b, _c, _d, _e;
return __awaiter(this, void 0, void 0, function () {
- var result, statusCode, errorMessage, liteCheck, mergedParams, sessionStatusType, status_2, errorMessage, _f, promoted, slug, token, responseID, deployment, hash, requested, domain, error_4;
+ var result, statusCode, errorMessage, liteCheck, mergedParams, sessionStatusType, status_2, errorMessage, _f, promoted, slug, token, responseID, deployment, hash, requested, domain, error_5;
return __generator(this, function (_g) {
switch (_g.label) {
case 0:
@@ -3977,9 +4213,9 @@ var Gatekeeper = /** @class */ (function () {
}
return [2 /*return*/, result];
case 3:
- error_4 = _g.sent();
- logger(this.options.debug, "error", "An error occurred during request validation: ".concat(error_4));
- throw error_4;
+ error_5 = _g.sent();
+ logger(this.options.debug, "error", "An error occurred during request validation: ".concat(error_5));
+ throw error_5;
case 4: return [2 /*return*/];
}
});
@@ -3993,7 +4229,7 @@ var Gatekeeper = /** @class */ (function () {
Gatekeeper.prototype.validateRequestHybridMode = function (customParams) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
return __awaiter(this, void 0, void 0, function () {
- var signatures, tokens, freshToken, freshSignature, result, statusCode, errorMessage, liteCheck, configStatusType, status_3, errorMessage, mergedParams, sessionStatusType, status_4, errorMessage, token, hash, error_5, validationResult, mergedParams, sessionStatusType, status_5, errorMessage, hash, token, error_6, _i, _q, item, _r, _s, item;
+ var signatures, tokens, freshToken, freshSignature, result, statusCode, errorMessage, liteCheck, configStatusType, status_3, errorMessage, mergedParams, sessionStatusType, status_4, errorMessage, token, hash, error_6, validationResult, mergedParams, sessionStatusType, status_5, errorMessage, hash, token, error_7, _i, _q, item, _r, _s, item;
var _this = this;
return __generator(this, function (_t) {
switch (_t.label) {
@@ -4188,8 +4424,8 @@ var Gatekeeper = /** @class */ (function () {
}
return [3 /*break*/, 5];
case 4:
- error_5 = _t.sent();
- logger(this.options.debug, "error", error_5);
+ error_6 = _t.sent();
+ logger(this.options.debug, "error", error_6);
return [3 /*break*/, 5];
case 5:
logger(this.options.debug, "info", "Signature and token found. Validating...");
@@ -4264,8 +4500,8 @@ var Gatekeeper = /** @class */ (function () {
}
return [3 /*break*/, 9];
case 8:
- error_6 = _t.sent();
- logger(this.options.debug, "error", error_6);
+ error_7 = _t.sent();
+ logger(this.options.debug, "error", error_7);
return [3 /*break*/, 9];
case 9:
//part 2 here
@@ -4357,7 +4593,8 @@ function init(config) {
// Check if context was provided
var hasContext = !!((config.request && config.response) ||
config.lambdaEdgeEvent ||
- (typeof window !== 'undefined' && !config.request && !config.response && !config.lambdaEdgeEvent));
+ config.cloudflareWorkersRequest ||
+ (typeof window !== 'undefined' && !config.request && !config.response && !config.lambdaEdgeEvent && !config.cloudflareWorkersRequest));
// Create gatekeeper if context provided
var gatekeeper;
if (hasContext) {
@@ -4366,6 +4603,9 @@ function init(config) {
if (config.lambdaEdgeEvent) {
context = new RequestContext({ lambdaEvent: config.lambdaEdgeEvent });
}
+ else if (config.cloudflareWorkersRequest) {
+ context = new RequestContext({ cloudflareWorkersRequest: config.cloudflareWorkersRequest });
+ }
else if (config.request && config.response) {
context = new RequestContext({ request: config.request, response: config.response });
}
@@ -4376,6 +4616,7 @@ function init(config) {
throw new CrowdHandlerError(ErrorCodes.INVALID_CONTEXT, 'Invalid context configuration', 'Provide either:\n' +
'- { request, response } for Express/Node.js\n' +
'- { lambdaEdgeEvent } for Lambda@Edge\n' +
+ '- { cloudflareWorkersRequest } for Cloudflare Workers\n' +
'- Nothing for browser environment');
}
// Auto-detect mode
diff --git a/dist/crowdhandler.cjs.js.map b/dist/crowdhandler.cjs.js.map
index 0ee3e51..03ece9d 100644
--- a/dist/crowdhandler.cjs.js.map
+++ b/dist/crowdhandler.cjs.js.map
@@ -1 +1 @@
-{"version":3,"file":"crowdhandler.cjs.js","sources":["../node_modules/regenerator-runtime/runtime.js","../node_modules/tslib/tslib.es6.js","../src/common/logger.ts","../src/common/errors.ts","../src/client/base_client.ts","../src/client/resource.ts","../src/client/public_client.ts","../src/client/private_client.ts","../src/client/client.ts","../src/request/browserHandler.ts","../src/request/lambdaRequestHandler.ts","../src/request/lambdaResponseHandler.ts","../src/request/nodejsHandler.ts","../src/request/requestContext.ts","../src/common/ignoredPatternsCheck.ts","../src/common/types.ts","../src/gatekeeper/configParse.ts","../src/common/processURL.ts","../src/common/hash.ts","../src/gatekeeper/signature.ts","../src/gatekeeper/tokenObject.ts","../src/common/ipDiscover.ts","../src/common/languageDiscover.ts","../src/common/userAgentDiscover.ts","../src/common/timer.ts","../src/gatekeeper/gatekeeper.ts","../src/init.ts","../src/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per GeneratorResume behavior specified since ES2015:\n // ES2015 spec, step 3: https://262.ecma-international.org/6.0/#sec-generatorresume\n // Latest spec, step 2: https://tc39.es/ecma262/#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next method, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable != null) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n throw new TypeError(typeof iterable + \" is not iterable\");\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","//export a logger function that will be used to log messages\nexport function logger(debug: boolean, level: string, message: string) {\n if (debug) {\n switch (level) {\n case \"info\":\n console.info(message);\n break;\n case \"warn\":\n console.warn(message);\n break;\n case \"error\":\n console.error(message);\n break;\n default:\n console.log(message);\n break;\n }\n }\n}\n","/**\n * Custom error class for CrowdHandler SDK with actionable error messages.\n * All SDK errors are instances of this class, providing consistent error handling.\n * \n * @example\n * try {\n * const { client } = crowdhandler.init({ publicKey: 'invalid' });\n * } catch (error) {\n * // error is always a CrowdHandlerError\n * console.log(error.code); // 'INVALID_API_KEY'\n * console.log(error.message); // Human-readable message\n * console.log(error.suggestion); // Helpful next steps\n * console.log(error.statusCode); // HTTP status if applicable\n * }\n */\nexport class CrowdHandlerError extends Error {\n public code: string;\n public statusCode?: number;\n public suggestion?: string;\n public context?: Record;\n\n constructor(\n code: string,\n message: string,\n suggestion?: string,\n statusCode?: number,\n context?: Record\n ) {\n super(message);\n this.name = 'CrowdHandlerError';\n this.code = code;\n this.statusCode = statusCode;\n this.suggestion = suggestion;\n this.context = context;\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CrowdHandlerError);\n }\n }\n\n /**\n * Returns a formatted error message with all context\n */\n toString(): string {\n let errorMsg = `${this.name} [${this.code}]: ${this.message}`;\n \n if (this.suggestion) {\n errorMsg += `\\n💡 Suggestion: ${this.suggestion}`;\n }\n \n if (this.statusCode) {\n errorMsg += `\\n📊 Status Code: ${this.statusCode}`;\n }\n \n if (this.context && Object.keys(this.context).length > 0) {\n errorMsg += `\\n🔍 Context: ${JSON.stringify(this.context, null, 2)}`;\n }\n \n return errorMsg;\n }\n}\n\n/**\n * Common error codes used throughout the SDK.\n * Use these constants to handle specific error conditions.\n * \n * @example\n * try {\n * await client.domains().get();\n * } catch (error) {\n * if (error.code === ErrorCodes.MISSING_PRIVATE_KEY) {\n * console.log('Need to initialize with private key');\n * }\n * }\n */\nexport const ErrorCodes = {\n // Network errors\n API_CONNECTION_FAILED: 'API_CONNECTION_FAILED',\n API_TIMEOUT: 'API_TIMEOUT',\n API_INVALID_RESPONSE: 'API_INVALID_RESPONSE',\n \n // Authentication errors\n INVALID_PUBLIC_KEY: 'INVALID_PUBLIC_KEY',\n INVALID_PRIVATE_KEY: 'INVALID_PRIVATE_KEY',\n MISSING_PRIVATE_KEY: 'MISSING_PRIVATE_KEY',\n AUTHENTICATION_FAILED: 'AUTHENTICATION_FAILED',\n \n // Configuration errors\n INVALID_CONFIG: 'INVALID_CONFIG',\n INVALID_MODE: 'INVALID_MODE',\n MISSING_CONTEXT: 'MISSING_CONTEXT',\n INVALID_CONTEXT: 'INVALID_CONTEXT',\n \n // Validation errors\n VALIDATION_FAILED: 'VALIDATION_FAILED',\n INVALID_TOKEN: 'INVALID_TOKEN',\n SIGNATURE_MISMATCH: 'SIGNATURE_MISMATCH',\n \n // API response errors\n RATE_LIMITED: 'RATE_LIMITED',\n DOMAIN_NOT_FOUND: 'DOMAIN_NOT_FOUND',\n ROOM_NOT_FOUND: 'ROOM_NOT_FOUND',\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n \n // Runtime errors\n METHOD_NOT_AVAILABLE: 'METHOD_NOT_AVAILABLE',\n BROWSER_ONLY: 'BROWSER_ONLY',\n SERVER_ONLY: 'SERVER_ONLY',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n} as const;\n\n/**\n * Factory functions for creating common CrowdHandler errors.\n * Used internally by the SDK to ensure consistent error messages.\n * @internal\n */\nexport const createError = {\n apiConnection: (originalError: any) => {\n const isTimeout = originalError.code === 'ECONNABORTED' || originalError.code === 'ETIMEDOUT';\n const isRefused = originalError.code === 'ECONNREFUSED';\n \n if (isTimeout) {\n return new CrowdHandlerError(\n ErrorCodes.API_TIMEOUT,\n 'Request to CrowdHandler API timed out',\n 'Try increasing the timeout option or check your network connection',\n undefined,\n { originalError: originalError.message }\n );\n }\n \n if (isRefused) {\n return new CrowdHandlerError(\n ErrorCodes.API_CONNECTION_FAILED,\n 'Could not connect to CrowdHandler API',\n 'Check your internet connection and firewall settings. If the problem persists, check https://status.crowdhandler.com',\n undefined,\n { originalError: originalError.message }\n );\n }\n \n return new CrowdHandlerError(\n ErrorCodes.API_CONNECTION_FAILED,\n `Network error: ${originalError.message}`,\n 'Check your network connection and try again',\n undefined,\n { originalError: originalError.message }\n );\n },\n\n invalidApiKey: (keyType: 'public' | 'private') => {\n const code = keyType === 'public' ? ErrorCodes.INVALID_PUBLIC_KEY : ErrorCodes.INVALID_PRIVATE_KEY;\n \n return new CrowdHandlerError(\n code,\n `Invalid ${keyType} key`,\n `Check your CrowdHandler dashboard for the correct ${keyType} key`,\n 401\n );\n },\n\n missingPrivateKey: (method: string) => {\n return new CrowdHandlerError(\n ErrorCodes.MISSING_PRIVATE_KEY,\n `${method} requires a private key`,\n `Initialize with: crowdhandler.init({ publicKey, privateKey })`,\n 403\n );\n },\n\n missingContext: (method: string) => {\n const example = typeof window !== 'undefined' \n ? 'crowdhandler.init({ publicKey })'\n : 'crowdhandler.init({ publicKey, request: req, response: res })';\n \n return new CrowdHandlerError(\n ErrorCodes.MISSING_CONTEXT,\n `${method} requires request context`,\n `Initialize with: ${example}`,\n 400\n );\n },\n\n invalidResponse: (response: any) => {\n return new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n 'Received invalid response from CrowdHandler API',\n 'This might be a temporary issue. If it persists, contact support@crowdhandler.com',\n 502,\n { response: JSON.stringify(response).substring(0, 200) }\n );\n },\n\n rateLimited: (retryAfter?: string) => {\n return new CrowdHandlerError(\n ErrorCodes.RATE_LIMITED,\n 'API rate limit exceeded',\n retryAfter \n ? `Wait ${retryAfter} seconds before retrying`\n : 'Reduce the frequency of API calls',\n 429,\n { retryAfter }\n );\n },\n\n resourceNotFound: (resourceType: string, resourceId: string) => {\n const errorCode = {\n domain: ErrorCodes.DOMAIN_NOT_FOUND,\n room: ErrorCodes.ROOM_NOT_FOUND,\n session: ErrorCodes.SESSION_NOT_FOUND,\n }[resourceType] || ErrorCodes.API_INVALID_RESPONSE;\n \n return new CrowdHandlerError(\n errorCode,\n `${resourceType} not found: ${resourceId}`,\n `Check that the ${resourceType} ID is correct and that you have access to it`,\n 404,\n { resourceType, resourceId }\n );\n }\n};","import axios, { AxiosInstance } from \"axios\";\nimport { z, ZodError } from \"zod\";\nimport { logger } from \"../common/logger\";\nimport { CrowdHandlerError, createError, ErrorCodes } from \"../common/errors\";\n\nconst APIResponse = z.object({}).catchall(z.any());\n\nconst APIErrorResponse = z\n .object({\n error: z.string().optional(),\n message: z.string().optional(),\n statusCode: z.number().optional(),\n })\n .catchall(z.any());\n\nexport class BaseClient {\n protected debug: boolean;\n protected apiUrl: string;\n protected key: string;\n protected timeout: number;\n\n constructor(\n apiUrl: string,\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n this.debug = options.debug || false;\n this.apiUrl = options.apiUrl || apiUrl;\n this.key = key;\n this.timeout = options.timeout || 5000;\n axios.defaults.timeout = this.timeout;\n }\n\n /**\n * Wraps any error into a CrowdHandlerError\n */\n private wrapError(error: any): CrowdHandlerError {\n // Already a CrowdHandlerError\n if (error instanceof CrowdHandlerError) {\n return error;\n }\n\n // Zod validation error\n if (error.name === 'ZodError') {\n return new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n 'Invalid response format from API',\n 'This might be a temporary issue. If it persists, contact support@crowdhandler.com',\n undefined,\n { parseError: error.message }\n );\n }\n\n // Generic unknown error\n return new CrowdHandlerError(\n ErrorCodes.UNKNOWN_ERROR,\n error.message || 'An unexpected error occurred',\n 'Please try again. If the problem persists, contact support@crowdhandler.com',\n undefined,\n { \n errorType: error.constructor?.name,\n stack: error.stack\n }\n );\n }\n\n /**\n * Provides generic suggestion based on HTTP status code\n */\n private getGenericSuggestion(status: number): string {\n switch (status) {\n case 400: return 'Check your request parameters';\n case 401: return 'Check your authentication credentials';\n case 403: return 'You do not have permission for this action';\n case 404: return 'The requested resource was not found';\n case 429: return 'Too many requests - please slow down';\n case 500: \n case 502:\n case 503:\n case 504:\n return 'Server error - please try again later';\n default: \n return status >= 500 \n ? 'This appears to be a server error. Please try again later or contact support@crowdhandler.com'\n : 'Please check your request parameters and try again';\n }\n }\n\n async errorHandler(error: any): Promise {\n // If it's already a CrowdHandlerError, just re-throw it\n if (error instanceof CrowdHandlerError) {\n throw error;\n }\n if (error.response) {\n // The request was made and the server responded with a status code\n // that falls out of the range of 2xx\n const status = error.response.status;\n const data = error.response.data;\n \n logger(this.debug, \"error\", `API Error - Status: ${status} - ${JSON.stringify(data)}`);\n logger(this.debug, \"error\", `Response headers: ${JSON.stringify(error.response.headers)}`);\n\n // Extract the error message from the API response\n const errorMessage = data?.error || data?.message || `API request failed with status ${status}`;\n \n // Special handling for rate limiting to include retry-after\n if (status === 429) {\n const retryAfter = error.response.headers['retry-after'];\n throw new CrowdHandlerError(\n ErrorCodes.RATE_LIMITED,\n errorMessage,\n retryAfter \n ? `Wait ${retryAfter} seconds before retrying`\n : 'Reduce the frequency of API calls',\n status,\n {\n url: error.config?.url,\n method: error.config?.method,\n apiResponse: data,\n retryAfter\n }\n );\n }\n \n // Pass through the API error with full response data\n throw new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n errorMessage,\n this.getGenericSuggestion(status),\n status,\n { \n url: error.config?.url,\n method: error.config?.method,\n apiResponse: data // Full API response, not truncated\n }\n );\n \n } else if (error.request) {\n // The request was made but no response was received\n logger(this.debug, \"error\", `No response received: ${error.message}`);\n \n throw createError.apiConnection(error);\n \n } else {\n // Something happened in setting up the request\n logger(this.debug, \"error\", `Request setup error: ${error.message}`);\n \n // Use wrapError to ensure we always throw CrowdHandlerError\n throw this.wrapError(error);\n }\n }\n\n async httpDELETE(path: string, body: object) {\n try {\n const response = await axios.delete(this.apiUrl + path, {\n headers: {\n \"x-api-key\": this.key,\n },\n });\n\n try {\n return APIResponse.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error: any) {\n await this.errorHandler(error);\n }\n }\n\n async httpGET(path?: string, params?: object) {\n try {\n const response = await axios.get(this.apiUrl + path, {\n params: params,\n headers: {\n \"x-api-key\": this.key,\n },\n });\n \n try {\n return APIResponse.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error) {\n await this.errorHandler(error);\n }\n }\n\n async httpPOST(\n path: string,\n body?: Record,\n headers?: Record,\n schema: z.Schema = APIResponse\n ) {\n try {\n const response = await axios.post(this.apiUrl + path, body, {\n headers: {\n \"x-api-key\": this.key,\n ...headers,\n },\n });\n \n try {\n return schema.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error) {\n await this.errorHandler(error);\n }\n }\n\n async httpPUT(path: string, body: object) {\n try {\n const response = await axios.put(this.apiUrl + path, body, {\n headers: {\n \"x-api-key\": this.key,\n },\n });\n return APIResponse.parse(response.data);\n } catch (error) {\n return this.errorHandler(error);\n }\n }\n}\n","import { BaseClient } from \"./base_client\";\n\nexport class Resource extends BaseClient {\n path: string;\n constructor(\n key: string,\n path: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const {\n timeout = 5000,\n debug = false,\n apiUrl = \"https://api.crowdhandler.com\",\n } = options ?? {};\n super(apiUrl, key, options);\n this.path = path;\n }\n\n private formatPath(path: string, id: string) {\n // If id is not provided, replace it with an empty string.\n id = id || \"\";\n\n //this.path may contain a placeholder for the id. replace it with the actual id.\n path = path.replace(\"ID_PLACEHOLDER\", id);\n\n return path;\n }\n\n delete(id: string, body: object) {\n this.path = this.formatPath(this.path, id);\n\n return super.httpDELETE(this.path, body);\n }\n\n get(id?: string, params?: any) {\n //Handle id being an optional parameter\n if (!id) {\n id = \"\";\n }\n\n this.path = this.formatPath(this.path, id);\n\n // Extract custom parameters and spread them with other params\n const { custom, ...standardParams } = params || {};\n const requestParams = {\n ...standardParams,\n ...custom // Spread custom parameters at the root level\n };\n\n return super.httpGET(this.path, requestParams);\n }\n\n post(body: any) {\n this.path = this.formatPath(this.path, \"\");\n\n // Extract custom parameters and spread them with other body params\n const { custom, ...standardBody } = body || {};\n const requestBody = {\n ...standardBody,\n ...custom // Spread custom parameters at the root level\n };\n\n return super.httpPOST(this.path, requestBody);\n }\n\n put(id: string, body: object) {\n this.path = this.formatPath(this.path, id);\n\n return super.httpPUT(this.path, body);\n }\n}\n","import { BaseClient } from \"./base_client\";\nimport { Resource } from \"./resource\";\n\nexport class PublicClient extends BaseClient {\n constructor(\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const { timeout = 5000, debug = false, apiUrl = \"https://api.crowdhandler.com\" } =\n options ?? {};\n super(apiUrl, key, options);\n }\n\n requests() {\n return new Resource(this.key, \"/v1/requests/ID_PLACEHOLDER\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n\n responses() {\n return new Resource(this.key, \"/v1/responses/ID_PLACEHOLDER\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n\n rooms() {\n return new Resource(this.key, \"/v1/rooms/\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n}","import { BaseClient } from \"./base_client\";\nimport { Resource } from \"./resource\";\n\nexport class PrivateClient extends BaseClient {\n constructor(\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const {\n timeout = 5000,\n debug = false,\n apiUrl = \"https://api.crowdhandler.com\",\n } = options ?? {};\n super(apiUrl, key, options);\n }\n\n account() {\n return new Resource(this.key, \"/v1/account/\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n accountPlan() {\n return new Resource(this.key, \"/v1/account/plan\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n codes() {\n return new Resource(this.key, \"/v1/codes/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domains() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainIPs() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/ips\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainReports() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/reports\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainRequests() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/requests\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainRooms() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/rooms\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainURLs() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/urls\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groups() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groupBatch() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER/batch\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groupCodes() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER/codes\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n ips() {\n return new Resource(this.key, \"/v1/ips/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n reports() {\n return new Resource(this.key, \"/v1/reports/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n rooms() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n roomReports() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER/reports\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n roomSessions() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER/sessions\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n sessions() {\n return new Resource(this.key, \"/v1/sessions/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n templates() {\n return new Resource(this.key, \"/v1/templates/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n}\n","import { PublicClient } from \"./public_client\";\nimport { PrivateClient } from \"./private_client\";\nimport { createError } from \"../common/errors\";\n\n/**\n * Configuration for the unified Client\n */\ninterface ClientConfig {\n /** Your CrowdHandler public key */\n publicKey: string;\n \n /** Your CrowdHandler private key (required for private API access) */\n privateKey?: string;\n \n /** Additional client options */\n options?: {\n /** API request timeout in milliseconds (default: 5000) */\n timeout?: number;\n \n /** Enable debug logging (default: false) */\n debug?: boolean;\n \n /** Custom API URL (default: https://api.crowdhandler.com) */\n apiUrl?: string;\n };\n}\n\n/**\n * Unified CrowdHandler API client that combines public and private API access.\n * \n * This client provides a single interface to all CrowdHandler API endpoints,\n * with intelligent error messages when attempting to use private endpoints\n * without a private key.\n * \n * @example\n * // Public API only\n * const client = new Client({ publicKey: 'pk_xyz' });\n * const rooms = await client.rooms().get();\n * \n * @example\n * // Public and Private API\n * const client = new Client({ \n * publicKey: 'pk_xyz',\n * privateKey: 'sk_xyz' \n * });\n * const domains = await client.domains().get();\n */\nexport class Client {\n private publicClient: PublicClient;\n private privateClient?: PrivateClient;\n private hasPrivateAccess: boolean;\n\n constructor(config: ClientConfig) {\n this.publicClient = new PublicClient(config.publicKey, config.options);\n this.hasPrivateAccess = !!config.privateKey;\n \n if (config.privateKey) {\n this.privateClient = new PrivateClient(config.privateKey, config.options);\n }\n }\n\n // ===== Public API Methods (always available) =====\n \n /**\n * Access request resources\n * @returns Resource instance for request operations\n * \n * @example\n * const request = await client.requests().get('req_123');\n */\n requests() {\n return this.publicClient.requests();\n }\n\n /**\n * Access response resources\n * @returns Resource instance for response operations\n * \n * @example\n * const response = await client.responses().get('res_123');\n */\n responses() {\n return this.publicClient.responses();\n }\n\n /**\n * Access room resources\n * @returns Resource instance for room operations\n * \n * @example\n * const rooms = await client.rooms().get();\n * const room = await client.rooms().get('room_123');\n */\n rooms() {\n return this.publicClient.rooms();\n }\n\n // ===== Private API Methods (require privateKey) =====\n \n /**\n * Access account information (requires private key)\n * @returns Resource instance for account operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const account = await client.account().get();\n */\n account() {\n this.requirePrivateAccess('account()');\n return this.privateClient!.account();\n }\n\n accountPlan() {\n this.requirePrivateAccess('accountPlan()');\n return this.privateClient!.accountPlan();\n }\n\n codes() {\n this.requirePrivateAccess('codes()');\n return this.privateClient!.codes();\n }\n\n /**\n * Access domain resources (requires private key)\n * @returns Resource instance for domain operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const domains = await client.domains().get();\n * const domain = await client.domains().get('dom_123');\n * const newDomain = await client.domains().post({ domain: 'example.com' });\n */\n domains() {\n this.requirePrivateAccess('domains()');\n return this.privateClient!.domains();\n }\n\n domainIPs() {\n this.requirePrivateAccess('domainIPs()');\n return this.privateClient!.domainIPs();\n }\n\n domainReports() {\n this.requirePrivateAccess('domainReports()');\n return this.privateClient!.domainReports();\n }\n\n domainRequests() {\n this.requirePrivateAccess('domainRequests()');\n return this.privateClient!.domainRequests();\n }\n\n domainRooms() {\n this.requirePrivateAccess('domainRooms()');\n return this.privateClient!.domainRooms();\n }\n\n domainURLs() {\n this.requirePrivateAccess('domainURLs()');\n return this.privateClient!.domainURLs();\n }\n\n groups() {\n this.requirePrivateAccess('groups()');\n return this.privateClient!.groups();\n }\n\n groupBatch() {\n this.requirePrivateAccess('groupBatch()');\n return this.privateClient!.groupBatch();\n }\n\n groupCodes() {\n this.requirePrivateAccess('groupCodes()');\n return this.privateClient!.groupCodes();\n }\n\n ips() {\n this.requirePrivateAccess('ips()');\n return this.privateClient!.ips();\n }\n\n reports() {\n this.requirePrivateAccess('reports()');\n return this.privateClient!.reports();\n }\n\n roomReports() {\n this.requirePrivateAccess('roomReports()');\n return this.privateClient!.roomReports();\n }\n\n roomSessions() {\n this.requirePrivateAccess('roomSessions()');\n return this.privateClient!.roomSessions();\n }\n\n /**\n * Access session resources (requires private key)\n * @returns Resource instance for session operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const sessions = await client.sessions().get();\n * const session = await client.sessions().get('ses_123');\n */\n sessions() {\n this.requirePrivateAccess('sessions()');\n return this.privateClient!.sessions();\n }\n\n templates() {\n this.requirePrivateAccess('templates()');\n return this.privateClient!.templates();\n }\n\n // ===== Internal Methods =====\n \n /**\n * Get the internal PublicClient instance (used by Gatekeeper)\n */\n getPublicClient(): PublicClient {\n return this.publicClient;\n }\n\n /**\n * Check if private API access is available\n */\n hasPrivateAPIAccess(): boolean {\n return this.hasPrivateAccess;\n }\n\n // ===== Helper Methods =====\n private requirePrivateAccess(method: string): void {\n if (!this.hasPrivateAccess) {\n throw createError.missingPrivateKey(method);\n }\n }\n}","export class BrowserHandler {\n constructor() {}\n\n public getCookies() {\n return document.cookie;\n }\n\n public getHost() {\n return window.location.host;\n }\n\n public getProtocol() {\n return window.location.protocol;\n }\n\n public getPath() {\n if (!window.location.search) {\n return window.location.pathname;\n } else {\n return `${window.location.pathname}${window.location.search}`;\n }\n }\n\n public getAbsoluteUri() {\n return window.location.href;\n }\n\n public setCookie(value: string, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n document.cookie = `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`;\n }\n\n public getLocalStorageItem(key: string): string | null {\n return localStorage.getItem(key);\n }\n\n public setLocalStorageItem(key: string, value: string): void {\n localStorage.setItem(key, value);\n }\n\n public redirect(url: string) {\n window.location.href = url;\n }\n}\n","import { CloudFrontRequest } from \"aws-lambda\";\n\nexport class LambdaRequestHandler {\n private request: CloudFrontRequest;\n\n constructor(event: CloudFrontRequest /*context: any, callback: any*/) {\n this.request = event;\n }\n\n public getHeader(headername: string) {\n const headers = this.request.headers;\n const headerValue = headers[headername.toLowerCase()];\n\n if (!headerValue) {\n return \"\";\n }\n\n return headerValue[0].value;\n }\n\n public getCookies() {\n const headers = this.request.headers;\n const cookies = headers.cookie;\n\n if (!cookies) {\n return \"\";\n }\n\n return cookies[0].value;\n }\n\n public getHost() {\n return this.request.headers.host[0].value;\n }\n\n public getProtocol() {\n return this.request.headers[\"cloudfront-forwarded-proto\"][0].value;\n }\n\n public getPath() {\n if (!this.request.querystring) {\n return this.request.uri;\n } else {\n return `${this.request.uri}?${this.request.querystring}`;\n }\n }\n\n public getAbsoluteUri() {\n const protocol = this.getProtocol();\n const host = this.getHost();\n const path = this.getPath();\n\n return `${protocol}://${host}${path}`;\n }\n\n public getUserHostAddress() {\n return this.request.clientIp;\n }\n\n public setHeader(headerName: string, headerValue: string) {\n this.request.headers[headerName] = [\n {\n key: headerName,\n value: headerValue,\n },\n ];\n }\n\n public redirect(url: string) {\n let response = {\n status: \"302\",\n statusDescription: \"Found\",\n headers: {\n location: [\n {\n key: \"Location\",\n value: url,\n },\n ],\n /*\"set-cookie\": [\n {\n key: \"Set-Cookie\",\n value: `crowdhandler=${token}; path=/; Secure; HttpOnly`,\n },\n ],*/\n \"cache-control\": [\n {\n key: \"Cache-Control\",\n value: \"no-cache, no-store, must-revalidate\",\n },\n ],\n expires: [\n {\n key: \"Expires\",\n value: \"Fri, 01 Jan 1970 00:00:00 GMT\",\n },\n ],\n pragma: [\n {\n key: \"Pragma\",\n value: \"no-cache\",\n },\n ],\n },\n };\n return response;\n }\n}\n","import { CloudFrontRequest, CloudFrontResponse } from \"aws-lambda\";\nimport { CookieObject } from \"../common/types\";\nimport { z } from \"zod\";\n\nexport class LambdaResponseHandler {\n private request: CloudFrontRequest;\n private response: CloudFrontResponse;\n\n constructor(\n requestEvent: CloudFrontRequest,\n responseEvent: CloudFrontResponse\n ) {\n // Handle data in a Lambda@Edge environment\n this.request = requestEvent;\n this.response = responseEvent;\n }\n\n public getHeader(headername: string) {\n const headers = this.request.headers;\n const headerValue = headers[headername.toLowerCase()];\n\n if (!headerValue) {\n return \"\";\n }\n\n return headerValue[0].value;\n }\n\n public getHost() {\n return this.request.headers.host[0].value;\n }\n\n public getProtocol() {\n return this.request.headers[\"cloudfront-forwarded-proto\"][0].value;\n }\n\n public getPath() {\n return this.request.uri;\n }\n\n \n\n public setCookie(value: z.infer, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n // Append cookie to response header\n const cookieHeader = `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`;\n\n const setCookieHeader = this.response.headers[\"set-cookie\"] || [];\n setCookieHeader.push({ key: \"Set-Cookie\", value: cookieHeader });\n this.response.headers[\"set-cookie\"] = setCookieHeader;\n\n return this.response;\n }\n}\n","import { CookieObject } from \"../common/types\";\nimport { z } from \"zod\";\n\nexport class NodeJSHandler {\n private request: any;\n private response: any;\n \n constructor(req: any, res: any) {\n // Handle data in a non-Lambda environment\n this.request = req;\n this.response = res;\n }\n \n public getHeader(headername: string) {\n let headerValue = this.request.header(headername);\n \n if (!headerValue) {\n return \"\";\n }\n \n return headerValue;\n }\n \n public getCookies() {\n return this.request.get(\"cookie\");\n }\n \n public getHost() {\n return this.request.get(\"host\");\n }\n \n public getProtocol() {\n return this.request.protocol;\n }\n \n public getPath() {\n return this.request.originalUrl;\n }\n \n public getAbsoluteUri() {\n return (\n this.request.protocol +\n \"://\" +\n this.request.get(\"host\") +\n this.request.originalUrl\n );\n }\n \n public getUserHostAddress() {\n return this.request.ip;\n }\n \n public setCookie(value: z.infer, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n //Append cookie to response header\n return this.response.setHeader(\n \"Set-Cookie\",\n `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`\n );\n }\n \n public redirect(url: string) {\n this.response.setHeader(\"Cache-Control\", \"no-cache, no-store, max-age=0\");\n this.response.setHeader(\"Pragma\", \"no-cache\");\n this.response.setHeader(\"Expires\", 0);\n this.response.setHeader(\"Location\", url);\n this.response.statusCode = 302;\n return this.response.end();\n }\n }","import { CloudFrontRequestEvent, CloudFrontResponseEvent } from \"aws-lambda\";\n\nimport { BrowserHandler } from \"./browserHandler\";\nimport { LambdaRequestHandler } from \"./lambdaRequestHandler\";\nimport { LambdaResponseHandler } from \"./lambdaResponseHandler\";\nimport { NodeJSHandler } from \"./nodejsHandler\";\n\ninterface RequestContextParams {\n lambdaEvent?: any;\n request?: any;\n response?: any;\n}\n\n//Create a base class that will act as a switch depending on the environment\nexport class RequestContext {\n //constructor(event: CloudFrontEvent, req?: any, res?: any) {\n constructor(params: RequestContextParams) {\n //Lambda@Edge event\n if (params && params.lambdaEvent) {\n //Create a switch based on the event type\n switch (params.lambdaEvent?.Records[0].cf.config.eventType) {\n case \"viewer-request\":\n case \"origin-request\":\n //update the event type to be a CloudFrontRequestEvent\n const requestEvent =\n params.lambdaEvent as unknown as CloudFrontRequestEvent;\n return new LambdaRequestHandler(requestEvent.Records[0].cf.request);\n break;\n\n case \"viewer-response\":\n case \"origin-response\":\n //update the event type to be a CloudFrontResponseEvent\n const responseEvent =\n params.lambdaEvent as unknown as CloudFrontResponseEvent;\n return new LambdaResponseHandler(\n responseEvent.Records[0].cf.request,\n responseEvent.Records[0].cf.response\n );\n break;\n }\n //NodeJS HTTP request\n } else if (params && params.request && params.response) {\n return new NodeJSHandler(params.request, params.response);\n //Default to Browser request\n } else {\n return new BrowserHandler();\n }\n }\n}\n","export function ignoredPatternsCheck(path: string, patterns: RegExp) {\n //Handle static file extensions\n let result = patterns.test(path)\n return result\n}","import { z } from \"zod\";\n\n// Lite Validator types\nexport const RoomConfig = z.object({\n domain: z.string(), // Format: \"https://example.com\"\n urlPattern: z.string().optional(),\n patternType: z.enum(['regex', 'contains', 'all']).optional(),\n queueActivatesOn: z.number().optional(),\n slug: z.string(),\n timeout: z.number().optional()\n});\n\nexport const RoomsConfig = z.array(RoomConfig);\n\n//Gatekeeper Options\nexport const GatekeeperOptions = z.object({\n debug: z.boolean().optional(),\n fallbackSlug: z.string().optional(),\n mode: z.string().optional(),\n timeout: z.number().optional(),\n trustOnFail: z.boolean().optional(),\n cookieName: z.string().optional(),\n liteValidator: z.boolean().optional(),\n roomsConfig: RoomsConfig.optional(), // Array of room configs\n waitingRoom: z.boolean().optional(),\n testError: z.object({\n statusCode: z.number(),\n message: z.string().optional(),\n }).optional(), // For testing error handling\n});\n\nexport const GatekeeperKeyPair = z.object({\n publicKey: z.string(),\n privateKey: z.string().optional(),\n});\n\nexport const SpecialParametersObject = z.object({\n chCode: z.string(),\n chID: z.string(),\n chIDSignature: z.string(),\n chPublicKey: z.string(),\n chRequested: z.string(),\n});\n\n// Request configuration for session status API calls\nexport const SessionRequestConfig = z.object({\n agent: z.string().optional(),\n ip: z.string().optional(),\n lang: z.string().optional(),\n url: z.string().optional(),\n slug: z.string().optional(),\n // Allow custom parameters to be passed through\n custom: z.record(z.any()).optional(),\n});\n\nexport const ProcessURLResultObject = z.object({\n targetURL: z.string(),\n specialParameters: SpecialParametersObject,\n});\n\nexport const RequestObject = z\n .object({\n hostname: z.string(),\n path: z.string(),\n })\n .catchall(z.any());\n\n//Cookie object structure validation\nexport const CookieObject = z\n .object({\n tokens: z.array(z.any()),\n deployment: z.string().optional(),\n })\n .catchall(z.any());\n\nexport const LocalStorageObject = z.object({\n countdown: z.record(z.unknown()),\n positions: z.record(z.unknown()),\n token: z.record(z.string()),\n});\n\nexport const LocalStorageOptions = z.object({\n storageName: z.string(),\n localStorageValue: z.string(),\n});\n\n//Response structure validation\nexport const RoomMetaObject = z\n .object({\n domain: z.string().nullable(),\n patternType: z.string().nullable(),\n queueActivatesOn: z.string().nullable(),\n slug: z.string().nullable(),\n status: z.boolean().nullable(),\n timeout: z.number().nullable(),\n })\n .catchall(z.any());\n\nexport const SignatureObject = z.array(\n z.object({\n gen: z.string(),\n sig: z.string(),\n })\n);\n\nexport const SignatureResponseObject = z.object({\n expiration: z.nullable(z.boolean()),\n success: z.nullable(z.boolean()),\n});\n\nexport const SignatureSourceObject = z.object({\n chIDSignature: z.string().optional(),\n crowdhandlerCookieValue: CookieObject.optional(),\n});\n\nexport const ExtractTokenOptions = z.object({\n //object can contain anything and we don't know any of the possible values\n crowdhandlerCookieValue: CookieObject.optional(),\n chID: z.string().optional(),\n localStorageValue: LocalStorageObject.optional(),\n simpleCookieValue: z.string().optional(),\n});\n\nexport const TokenObject = z.object({\n token: z.string(),\n touched: z.number(),\n touchedSig: z.string(),\n signatures: z.array(z.any()),\n});\n\n\nexport const TokenObjectConstructor = z.object({\n tokenDatestamp: z.number(),\n tokenDatestampSignature: z.string(),\n tokenSignature: z.string(),\n tokenSignatureGenerated: z.string(),\n tokenSignatures: z.array(z.any()),\n tokenValue: z.string(),\n});\n\n// Custom parameters that can be passed to validateRequest\nexport const ValidateRequestParams = z.object({\n custom: z.record(z.any()).optional(),\n});\n\nexport const ValidateRequestObject = z.object({\n promoted: z.boolean(),\n stripParams: z.boolean(),\n setCookie: z.boolean(),\n cookieValue: z.string().optional(),\n setLocalStorage: z.boolean(),\n localStorageValue: z.string().optional(),\n responseID: z.string().optional(),\n slug: z.string().optional(),\n targetURL: z.string().optional(),\n deployment: z.string().optional(),\n hash: z.string().nullable().optional(),\n token: z.string().optional(),\n requested: z.string().optional(),\n liteValidatorRedirect: z.boolean().optional(),\n liteValidatorUrl: z.string().optional(),\n domain: z.string().optional(),\n error: z.object({\n message: z.string(),\n statusCode: z.number().optional(),\n code: z.string().optional(),\n }).optional(),\n});\n\nexport const HttpErrorWrapper = z.object({\n result: z.object({\n error: z.string().nullable(),\n status: z.number().nullable(),\n }),\n});\n\nexport const SessionStatusWrapper = z.object({\n result: z\n .object({\n hash: z.string().nullable().optional(),\n promoted: z.number().nullable(),\n status: z.number().nullable(),\n slug: z.string().nullable().optional(),\n token: z.string().nullable().optional(),\n urlRedirect: z.string().nullable().optional(),\n requested: z.string().nullable().optional(),\n })\n .catchall(z.any()),\n});\n\nexport const RecordPerformanceOptions = z.object({\n statusCode: z.number().optional().default(200),\n sample: z.number().optional().default(0.2),\n overrideElapsed: z.number().optional(),\n responseID: z.string().optional(),\n});\n\n// Mode constants\nexport const Modes = {\n FULL: 'full',\n HYBRID: 'hybrid',\n CLIENTSIDE: 'clientside',\n AUTO: 'auto'\n} as const;\n\nexport type Mode = typeof Modes[keyof typeof Modes];\n","import { ignoredPatternsCheck } from \"../common/ignoredPatternsCheck\";\nimport { z } from \"zod\";\nimport { RoomMetaObject } from \"../common/types\";\n\nexport class ConfigParse {\n private roomMeta = {\n domain: null,\n patternType: null,\n queueActivatesOn: null,\n slug: null,\n status: false,\n timeout: null,\n };\n private readonly config: Object[];\n private readonly host: string;\n private readonly path: string;\n private readonly patterns: RegExp;\n\n constructor(config: Object[], host: string, path: string, patterns: RegExp) {\n this.config = config;\n this.host = host;\n this.path = path;\n this.patterns = patterns;\n }\n\n patternEvaulation(item: any) {\n switch (item.patternType) {\n case \"regex\":\n let regex = new RegExp(item.urlPattern);\n return regex.test(this.path);\n break;\n\n case \"contains\":\n let contains = item.urlPattern;\n return this.path.includes(contains);\n break;\n\n case \"all\":\n return true;\n break;\n\n default:\n break;\n }\n }\n\n parse() {\n let staticAsset = ignoredPatternsCheck(this.path, this.patterns);\n\n if (staticAsset) {\n return RoomMetaObject.parse(this.roomMeta);\n }\n\n let filteredResults: any;\n filteredResults = this.config.filter((item: any) => {\n if (item.domain === `https://${this.host}`) {\n return item;\n }\n });\n\n\n for (const item of filteredResults) {\n if (this.patternEvaulation(item) === true) {\n //Populate the roomMeta object.\n //Use slug as a guard to make sure if we've already found a match we don't override it with weaker ones as we loop.\n if (this.roomMeta.slug === null) {\n this.roomMeta.domain = item.domain;\n this.roomMeta.patternType = item.patternType;\n this.roomMeta.queueActivatesOn = item.queueActivatesOn;\n this.roomMeta.slug = item.slug;\n this.roomMeta.status = true;\n this.roomMeta.timeout = item.timeout;\n }\n }\n }\n return RoomMetaObject.parse(this.roomMeta);\n }\n}\n","import { z } from \"zod\";\nimport { RequestObject, SpecialParametersObject } from \"./types\";\nimport { logger } from \"./logger\";\n\nexport class ProcessURL {\n private host: string | undefined;\n private path: string | undefined;\n private rawQueryString: string | undefined;\n private specialParameters!: z.infer;\n private targetURL: string | undefined;\n debug: boolean;\n\n constructor(request: z.infer, debug: boolean = false) {\n this.host = request.getHost();\n this.path = request.getPath();\n this.specialParameters = {\n chCode: \"\",\n chID: \"\",\n chIDSignature: \"\",\n chPublicKey: \"\",\n chRequested: \"\",\n };\n\n this.debug = debug;\n }\n\n public parseURL() {\n if (!this.host) {\n logger(this.debug, \"warn\", \"No host found in request object.\");\n return {\n targetURL: \"\",\n specialParameters: this.specialParameters,\n };\n }\n\n if (!this.path) {\n logger(this.debug, \"warn\", \"No path found in request object.\");\n return {\n targetURL: \"\",\n specialParameters: this.specialParameters,\n };\n }\n\n // Extract raw query string from path (preserving original encoding)\n if (this.path.includes(\"?\")) {\n this.rawQueryString = this.path.split(\"?\")[1];\n }\n\n // Extract ch-* parameter values using regex (decode for actual use)\n const chCode = this.extractParamValue(\"ch-code\");\n const chID = this.extractParamValue(\"ch-id\");\n const chIDSignature = this.extractParamValue(\"ch-id-signature\");\n const chPublicKey = this.extractParamValue(\"ch-public-key\");\n const chRequested = this.extractParamValue(\"ch-requested\");\n\n // Set special parameters (with validation)\n this.specialParameters.chCode = this.sanitizeParam(chCode);\n this.specialParameters.chID = this.sanitizeParam(chID);\n this.specialParameters.chIDSignature = this.sanitizeParam(chIDSignature);\n this.specialParameters.chPublicKey = this.sanitizeParam(chPublicKey);\n this.specialParameters.chRequested = this.sanitizeParam(chRequested);\n\n // Remove ch-* params from query string while preserving everything else\n const processedQueryString = this.removeChParams(this.rawQueryString);\n\n // Extract path without query string\n const cleanPath = this.path.split(\"?\")[0];\n\n // Construct targetURL\n if (processedQueryString) {\n this.targetURL = encodeURIComponent(\n `https://${this.host}${cleanPath}?${processedQueryString}`\n );\n } else {\n this.targetURL = encodeURIComponent(`https://${this.host}${cleanPath}`);\n }\n\n return {\n targetURL: this.targetURL,\n specialParameters: this.specialParameters,\n };\n }\n\n /**\n * Extract a parameter value from the raw query string using regex.\n * Decodes the value for actual use.\n *\n * Treats `+` as a space before percent-decoding — this is the HTML\n * form-encoding convention used by URLSearchParams and the legacy\n * query-string library, and by every other CrowdHandler integration\n * (Cloudflare Worker, CloudFront). `decodeURIComponent` alone does not\n * do this. Keeping it consistent matters for signature validation: any\n * divergence in how the SDK and the edge decode ch-* values produces\n * mismatched signatures.\n */\n private extractParamValue(paramName: string): string {\n if (!this.rawQueryString) return \"\";\n\n // Match the parameter in the query string\n const regex = new RegExp(`(?:^|&)${paramName}=([^&]*)`, \"i\");\n const match = this.rawQueryString.match(regex);\n\n if (match && match[1]) {\n const normalized = match[1].replace(/\\+/g, \"%20\");\n try {\n return decodeURIComponent(normalized);\n } catch {\n // Malformed percent-encoding. Still honour the `+` → space convention\n // on the fallback path so output stays consistent with URLSearchParams.\n return match[1].replace(/\\+/g, \" \");\n }\n }\n return \"\";\n }\n\n /**\n * Sanitize a parameter value - return empty string for unusable values.\n */\n private sanitizeParam(value: string): string {\n if (!value || value === \"undefined\" || value === \"null\") {\n return \"\";\n }\n return value;\n }\n\n /**\n * Remove ch-* parameters from the query string while preserving\n * the original encoding of all other parameters.\n */\n private removeChParams(queryString: string | undefined): string {\n if (!queryString) return \"\";\n\n // List of ch-* parameters to remove\n const chParams = [\n \"ch-code\",\n \"ch-fresh\",\n \"ch-id\",\n \"ch-id-signature\",\n \"ch-public-key\",\n \"ch-requested\",\n ];\n\n // Split into individual params, filter out ch-* params, rejoin\n const params = queryString.split(\"&\");\n const filteredParams = params.filter((param) => {\n const key = param.split(\"=\")[0];\n return !chParams.includes(key.toLowerCase());\n });\n\n return filteredParams.join(\"&\");\n }\n}\n","import { sha256 } from \"js-sha256\";\n\nexport function generateSignature(input: string) {\n const hash = sha256(input);\n return hash;\n}\n","import {\n CookieObject,\n RequestObject,\n RoomMetaObject,\n SignatureObject,\n SignatureResponseObject,\n SpecialParametersObject,\n} from \"../common/types\";\nimport { generateSignature } from \"../common/hash\";\nimport { logger } from \"../common/logger\";\nimport { TypeOf, z } from \"zod\";\n\nexport class Signature {\n private readonly activeConfig: any;\n private hashedPrivateKey: string | undefined;\n private signatureType: string | undefined;\n private complexSignature: z.infer | undefined;\n private simpleSignature: string[];\n private freshSignature: boolean | undefined;\n private matchedSignature: string | undefined;\n private cookie: z.infer | undefined;\n private specialParameters: z.infer;\n private hashCandidates: string[] = [];\n private activeCookie: any;\n private token: string | undefined;\n private requested: string | undefined;\n private validationResponse: z.infer = {\n expiration: null,\n success: null,\n };\n debug: boolean;\n\n constructor(\n activeConfig: z.infer,\n hashedPrivateKey: string | undefined,\n signatureType: string | undefined,\n simpleSignature: string[] = [],\n complexSignature: z.infer | undefined,\n token: string | undefined,\n cookie: z.infer | undefined,\n requested: string | undefined,\n specialParameters: z.infer,\n debug: boolean = false\n ) {\n this.activeConfig = activeConfig;\n this.hashedPrivateKey = hashedPrivateKey;\n this.signatureType = signatureType;\n this.complexSignature = complexSignature;\n this.simpleSignature = simpleSignature;\n this.token = token;\n this.cookie = cookie;\n this.requested = requested;\n this.specialParameters = specialParameters;\n this.debug = debug;\n\n if (this.requested) {\n this.specialParameters.chRequested = this.requested;\n }\n\n if (this.specialParameters.chRequested) {\n this.freshSignature = true;\n } else {\n this.freshSignature = false;\n }\n }\n\n private getHashCandidates() {\n let generatedHistory = [];\n\n //Check that the cookie is in a format that we can work with\n try {\n if (this.cookie) {\n CookieObject.parse(this.cookie);\n\n if (!this.freshSignature && this.cookie) {\n this.activeCookie = this.cookie.tokens[this.cookie.tokens.length - 1];\n }\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n }\n\n if (this.simpleSignature && this.simpleSignature.length > 0) {\n this.hashCandidates.unshift(\n `${this.hashedPrivateKey}${this.activeConfig.slug}${this.activeConfig.queueActivatesOn}${this.token}${this.specialParameters.chRequested}`\n );\n } else if (this.complexSignature && this.complexSignature.length > 0) {\n //If we have a signature that is active, we can use that to generate the hash\n for (const item of this.complexSignature) {\n generatedHistory.unshift(item.gen);\n }\n\n //Generate possible hash candidates\n for (const item of generatedHistory) {\n this.hashCandidates.push(\n `${this.hashedPrivateKey}${this.activeConfig.slug}${this.activeConfig.queueActivatesOn}${this.token}${item}`\n );\n }\n } else {\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return;\n }\n }\n\n private hashValidation() {\n let requiredHash;\n if (this.freshSignature) {\n let requiredHash = generateSignature(this.hashCandidates[0]);\n if (this.simpleSignature.some((item) => item === requiredHash) === true) {\n this.matchedSignature = requiredHash;\n }\n } else if (this.complexSignature && this.complexSignature.length > 0) {\n for (const hash of this.hashCandidates) {\n let requiredHash = generateSignature(hash);\n if (\n this.complexSignature.some((item) => item.sig === requiredHash) ===\n true\n ) {\n this.matchedSignature = requiredHash;\n break;\n }\n }\n }\n\n //No signature matches found. Validation failed.\n if (!this.matchedSignature) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return;\n }\n }\n\n private hashExpiration() {\n function minutesSinceTokenCreated(datestamp: number) {\n //UTC\n const currentDatestamp = new Date().getTime();\n\n //Time passed since creation time in minutes\n let minutesPassed = (currentDatestamp - datestamp) / 1000 / 60;\n //One decimal place\n minutesPassed = Math.round(minutesPassed * 10) / 10;\n return minutesPassed;\n }\n\n //This will only be true if we're dealing with a request that has recently been promoted from the waiting room or lite-validator.\n if (this.freshSignature && this.specialParameters.chRequested) {\n if (\n minutesSinceTokenCreated(\n Date.parse(this.specialParameters.chRequested)\n ) < this.activeConfig.timeout\n ) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = true;\n return;\n }\n } else if (\n this.activeCookie &&\n this.activeCookie.touchedSig ===\n generateSignature(\n `${this.hashedPrivateKey}${this.activeCookie.touched}`\n ) &&\n minutesSinceTokenCreated(this.activeCookie.touched) <\n this.activeConfig.timeout\n ) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = true;\n return;\n } else {\n //catch all\n this.validationResponse.expiration = true;\n this.validationResponse.success = false;\n return;\n }\n }\n\n public validateSignature() {\n try {\n this.getHashCandidates();\n\n if (this.validationResponse.success !== null) {\n return this.validationResponse;\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n\n try {\n this.hashValidation();\n\n if (this.validationResponse.success !== null) {\n return this.validationResponse;\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n\n try {\n this.hashExpiration();\n\n return this.validationResponse;\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n }\n}\n","import { z } from \"zod\";\nimport {\n SignatureObject,\n TokenObjectConstructor,\n TokenObject,\n} from \"../common/types\";\n\nexport class GenerateCookieObject {\n private tokenDatestamp: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenDatestamp\"];\n private tokenDatestampSignature: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenDatestampSignature\"];\n private tokenSignature: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignature\"];\n private tokenSignatureGenerated: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignatureGenerated\"];\n private tokenSignatures: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignatures\"];\n private tokenValue: z.infer[\"tokenValue\"];\n\n constructor(tokenObjectProperties: z.infer) {\n this.tokenDatestamp = tokenObjectProperties.tokenDatestamp;\n this.tokenDatestampSignature =\n tokenObjectProperties.tokenDatestampSignature;\n this.tokenSignature = tokenObjectProperties.tokenSignature;\n this.tokenSignatureGenerated =\n tokenObjectProperties.tokenSignatureGenerated;\n this.tokenSignatures = tokenObjectProperties.tokenSignatures;\n this.tokenValue = tokenObjectProperties.tokenValue;\n }\n\n signatureObject() {\n let signatureObj: z.infer[0] = {\n gen: this.tokenSignatureGenerated,\n sig: this.tokenSignature,\n };\n\n return signatureObj;\n }\n\n tokenObject() {\n let tokenObj: z.infer = {\n token: this.tokenValue,\n touched: this.tokenDatestamp,\n touchedSig: this.tokenDatestampSignature,\n signatures: this.tokenSignatures,\n };\n\n return tokenObj;\n }\n}\n","//Get source IP address of the request in node.js\nimport { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getIP(request: any) {\n let ip = request.getHeader(\"x-forwarded-for\") || request.getUserHostAddress();\n if (ip.indexOf(\",\") > -1) {\n // If there are multiple IPs in the x-forwarded-for header,\n // get the client's IP address, not the proxy addresses\n const ips = ip.split(\",\");\n ip = ips[0].trim();\n }\n\n return ip;\n}\n","import { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getLang(request: any) {\n let lang: string | undefined;\n let langStr = request.getHeader(\"accept-language\");\n if (langStr) {\n lang = langStr;\n }\n return lang;\n}\n","import { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getUserAgent(request: any) {\n let userAgent: string | undefined;\n let userAgentStr = request.getHeader(\"user-agent\");\n if (userAgentStr) {\n userAgent = userAgentStr;\n }\n return userAgent;\n}\n","//Create a class that will be used to create a timer\nexport class Timer {\n timer: number;\n //Create a constructor that will be used to initialize the timer\n constructor() {\n //Initialize the timer\n this.timer = Date.now();\n }\n //Create a method that will be used to stop the timer\n elapsed() {\n //Stop the timer\n return Date.now() - this.timer;\n }\n}\n","import { ConfigParse } from \"./configParse\";\nimport { ProcessURL } from \"../common/processURL\";\nimport { Signature } from \"./signature\";\nimport { GenerateCookieObject } from \"./tokenObject\";\nimport { logger } from \"../common/logger\";\nimport { getIP } from \"../common/ipDiscover\";\nimport { getLang } from \"../common/languageDiscover\";\nimport { getUserAgent } from \"../common/userAgentDiscover\";\nimport { Timer } from \"../common/timer\";\nimport { ignoredPatternsCheck } from \"../common/ignoredPatternsCheck\";\nimport \"../common/types\";\nimport { z } from \"zod\";\nimport {\n GatekeeperOptions,\n GatekeeperKeyPair,\n RoomMetaObject,\n CookieObject,\n SignatureObject,\n SpecialParametersObject,\n TokenObject,\n ValidateRequestObject,\n HttpErrorWrapper,\n SessionStatusWrapper,\n RecordPerformanceOptions,\n SignatureSourceObject,\n ExtractTokenOptions,\n LocalStorageObject,\n LocalStorageOptions,\n ProcessURLResultObject,\n RoomConfig,\n SessionRequestConfig,\n} from \"../common/types\";\nimport { generateSignature } from \"../common/hash\";\n\nexport class Gatekeeper {\n public PublicClient;\n private WAIT_URL: string = \"https://wait.crowdhandler.com\";\n public readonly STORAGE_NAME: string;\n public readonly REQUEST: any;\n private ignore: RegExp =\n /^((?!.*\\?).*(\\.(avi|css|eot|gif|ico|jpg|jpeg|js|json|mov|mp4|mpeg|mpg|og[g|v]|pdf|png|svg|ttf|txt|wmv|woff|woff2|xml))$)/;\n private hashedPrivateKey!: string;\n private publicKey: string;\n private readonly privateKey: string | undefined;\n private options: any = {\n debug: false,\n fallbackSlug: \"\",\n mode: \"full\",\n timeout: 5000,\n trustOnFail: true,\n waitingRoom: false,\n };\n public activeConfig!: z.infer;\n public cookies: Array = [];\n public cookieValue: z.infer | undefined;\n public simpleCookieValue: string | undefined;\n public localStorageValue:\n | z.infer\n | null\n | undefined;\n public storageKey: string | undefined;\n //Signature can come in the form of a simple string or as an object /w meta data.\n private cookieSignatureObject: z.infer[0] | undefined;\n private cookieTokenObject: z.infer | undefined;\n private signatureType: string | undefined;\n private simpleSignature: string[] = [];\n private complexSignature: z.infer = [];\n public token!: string;\n public responseID: string | undefined;\n timer: Timer;\n public host!: string;\n public path!: string;\n public agent: string | undefined;\n public ip: string | undefined;\n public lang: string | undefined;\n public slug: string | undefined;\n public sessionStatus: z.infer | undefined;\n private requested: string | undefined;\n private deployment: string | undefined;\n private specialParameters: z.infer = {\n chCode: \"\",\n chID: \"\",\n chIDSignature: \"\",\n chPublicKey: \"\",\n chRequested: \"\",\n };\n public targetURL: string | undefined;\n\n constructor(\n PublicClient: any,\n request: any,\n keyPair: z.infer,\n options: z.infer\n ) {\n this.PublicClient = PublicClient;\n this.REQUEST = request;\n this.publicKey = keyPair.publicKey;\n this.privateKey = keyPair.privateKey;\n //Merge provided options with defaults\n this.options = Object.assign({}, this.options, options);\n \n // Set cookie name from options or use default\n this.STORAGE_NAME = this.options.cookieName || \"crowdhandler\";\n\n //Hash the private key if mode is set to hybrid\n //Check if privateKey is provided when mode is set to \"hybrid\"\n if (\n this.options.mode === \"hybrid\" &&\n (this.privateKey === undefined || this.privateKey === \"\")\n ) {\n throw new Error(\n \"privateKey must be provided when mode is set to 'hybrid'\"\n );\n }\n\n if (this.options.mode === \"hybrid\" && this.privateKey !== undefined) {\n try {\n this.hashedPrivateKey = generateSignature(this.privateKey);\n } catch (error: any) {\n logger(\n this.options.debug,\n \"Error generating private key hash: \",\n error\n );\n }\n }\n\n this.host = this.REQUEST.getHost();\n this.path = this.REQUEST.getPath();\n\n if (this.options.mode === \"full\" || this.options.mode === \"hybrid\") {\n this.ip = getIP(this.REQUEST);\n this.lang = getLang(this.REQUEST);\n this.agent = getUserAgent(this.REQUEST);\n }\n\n //Start the timer\n this.timer = new Timer();\n\n // Extract slug if this is a waiting room implementation\n if (this.options.waitingRoom) {\n this.extractSlugFromPath();\n }\n }\n\n //Set the host using your own method if you're not happy with the default\n /**\n * Override the request host for testing or special routing needs.\n * \n * @param {string} host - The host to use (e.g., 'example.com')\n */\n public overrideHost(host: string) {\n this.host = host;\n }\n\n //Set the path using your own method if you're not happy with the default\n public overridePath(path: string) {\n this.path = path;\n }\n\n //Set the IP using your own method if you're not happy with the default\n public overrideIP(ip: string) {\n this.ip = ip;\n }\n\n //Set the language using your own method if you're not happy with the default\n public overrideLang(lang: string) {\n this.lang = lang;\n }\n\n //Set the user agent using your own method if you're not happy with the default\n public overrideUserAgent(agent: string) {\n this.agent = agent;\n }\n\n //Set the cookie using your own method if you're not happy with the default\n public overrideCookie(cookie: Array) {\n this.cookies = cookie;\n }\n\n /**\n * Overrides the default CrowdHandler waiting room with your custom URL.\n * \n * @param {string} url - The custom waiting room URL\n * \n * @example\n * // Redirect to your custom queue page\n * gatekeeper.overrideWaitingRoomUrl('https://mysite.com/custom-queue');\n */\n public overrideWaitingRoomUrl(url: string) {\n this.WAIT_URL = url;\n }\n\n /* If you have your own regular expression for urls to ignore set it here\n * @param string $regExp Regular Expression\n */\n public setIgnoreUrls(regExp: RegExp) {\n this.ignore = regExp;\n }\n\n /*\n * Fetch the room config feed\n * @return object\n */\n public async getConfig() {\n let response = await this.PublicClient.rooms().get();\n\n let configParse = new ConfigParse(\n response.result,\n this.host,\n this.path,\n this.ignore\n );\n\n let result = configParse.parse();\n this.activeConfig = RoomMetaObject.parse(result);\n }\n\n /**\n * Retrieves the current session status using GET call if a token is available, or POST call otherwise.\n * @param {object} customParams - Optional custom parameters to include in the API request\n * @returns {Promise} A Promise that resolves when the method has completed.\n */\n public async getSessionStatus(customParams?: Record): Promise {\n // Build request config conditionally\n const requestConfig: z.infer = {};\n\n // Always include these if they exist\n if (this.agent) requestConfig.agent = this.agent;\n if (this.ip) requestConfig.ip = this.ip;\n if (this.lang) requestConfig.lang = this.lang;\n\n // Include either slug OR url, but not both\n if (this.slug) {\n requestConfig.slug = this.slug;\n logger(this.options.debug, \"info\", `Using slug in request: ${this.slug}`);\n } else {\n // Only include URL if we don't have a slug\n const url = `https://${this.host}${this.path}`;\n requestConfig.url = url;\n logger(this.options.debug, \"info\", `Using URL in request: ${url}`);\n }\n\n // Include custom parameters if provided\n if (customParams && Object.keys(customParams).length > 0) {\n requestConfig.custom = customParams;\n logger(this.options.debug, \"info\", `Including custom parameters: ${JSON.stringify(customParams)}`);\n }\n\n if (this.token) {\n logger(\n this.options.debug,\n \"info\",\n \"Token found, performing a session GET call.\"\n );\n try {\n this.sessionStatus = await this.PublicClient.requests().get(\n this.token,\n requestConfig\n );\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Session GET call failed with error: ${error}`\n );\n // Set sessionStatus to error wrapper so error handling logic can process it\n this.sessionStatus = {\n result: {\n status: error.statusCode || 500,\n promoted: null,\n error: error.message || 'Unknown error occurred'\n }\n };\n }\n } else {\n logger(\n this.options.debug,\n \"info\",\n \"Token not found, performing a session POST call.\"\n );\n try {\n this.sessionStatus = await this.PublicClient.requests().post(\n requestConfig\n );\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Session POST call failed with error: ${error}`\n );\n // Set sessionStatus to error wrapper so error handling logic can process it\n this.sessionStatus = {\n result: {\n status: error.statusCode || 500,\n promoted: null,\n error: error.message || 'Unknown error occurred'\n }\n };\n }\n }\n }\n\n /**\n * Processes the URL from the request to extract the target URL and any special parameters.\n */\n public processURL(): void {\n try {\n const processURLInstance = new ProcessURL(this.REQUEST);\n const result: z.infer =\n processURLInstance.parseURL();\n if (result) {\n // If this is a waiting room implementation, check for url parameter\n if (this.options.waitingRoom) {\n const urlFromQuery = this.extractUrlFromWaitingRoomQuery();\n if (urlFromQuery) {\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Using url from query parameter: ${urlFromQuery}`\n );\n this.targetURL = urlFromQuery;\n this.specialParameters = result.specialParameters;\n return;\n }\n // If no url param, targetURL will be set from API response urlRedirect\n logger(\n this.options.debug,\n \"info\",\n \"[WaitingRoom] No url query parameter found, will use urlRedirect from API response\"\n );\n this.targetURL = \"\"; // Empty until we get API response\n this.specialParameters = result.specialParameters;\n return;\n }\n \n // Standard behavior - use the current URL as targetURL\n this.targetURL = result.targetURL;\n this.specialParameters = result.specialParameters;\n } else {\n throw new Error(\"Failed to parse URL.\");\n }\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `Error while processing URL: ${error}`\n );\n }\n }\n\n /**\n * Extracts the signature from the given signature source.\n * @param signatureSource - The source from which to extract the signature.\n */\n public getSignature(\n signatureSource: z.infer\n ): void {\n try {\n if (signatureSource.chIDSignature) {\n // Simple signature case\n this.simpleSignature = [signatureSource.chIDSignature];\n this.signatureType = \"simple\";\n } else if (signatureSource.crowdhandlerCookieValue) {\n // Complex signature case\n this.cookieValue = CookieObject.parse(\n signatureSource.crowdhandlerCookieValue\n );\n\n // Assuming that the last token's signatures are needed\n this.complexSignature =\n this.cookieValue.tokens[\n this.cookieValue.tokens.length - 1\n ].signatures;\n this.signatureType = \"complex\";\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", `Failed to get signature: ${error}`);\n }\n }\n\n /**\n * Extracts and sets the token from various sources (URL params, cookies, etc).\n * This is an internal method used during request validation.\n * @param options - The options for extracting the token.\n */\n private extractToken(options?: z.infer): void {\n // Use option values if provided, else fall back to constructor values\n const chID = options?.chID ?? this.specialParameters.chID;\n const crowdhandlerCookieValue =\n options?.crowdhandlerCookieValue ?? this.cookieValue;\n const localStorageValue =\n options?.localStorageValue ?? this.localStorageValue;\n const simpleCookieValue =\n options?.simpleCookieValue ?? this.simpleCookieValue;\n\n if (chID) {\n logger(this.options.debug, \"info\", \"chID parameter found\");\n this.extractTokenFromChID(chID);\n } else if (crowdhandlerCookieValue && this.options.mode === \"hybrid\") {\n logger(this.options.debug, \"info\", \"complex cookie found\");\n this.extractTokenFromComplexCookie(crowdhandlerCookieValue);\n } else if (simpleCookieValue) {\n logger(this.options.debug, \"info\", \"simple cookie found\");\n this.extractTokenFromSimpleCookie(simpleCookieValue);\n } else {\n logger(this.options.debug, \"info\", \"Token not found or invalid format\");\n }\n }\n\n /**\n * Verifies if the given token is valid based on its format.\n * @param token - The token to be validated.\n * @returns True if the token is valid, false otherwise.\n */\n private isValidToken(token: string): boolean {\n const tokenPattern = /^tok.*/;\n return tokenPattern.test(token);\n }\n\n /**\n * Extracts and sets the token from the provided chID if it's valid.\n * @param chID - The chID to extract the token from.\n * @throws {Error} When the token format is invalid.\n */\n private extractTokenFromChID(chID: string): void {\n if (!this.isValidToken(chID)) {\n throw new Error(`Invalid token format: ${chID}`);\n }\n\n this.token = chID;\n }\n\n /**\n * Extracts and sets the token from a complex cookie value if it's valid.\n * @param crowdhandlerCookieValue - The crowdhandler cookie value to extract the token from.\n * @throws {Error} When the token format is invalid.\n */\n private extractTokenFromComplexCookie(\n crowdhandlerCookieValue: z.infer\n ): void {\n try {\n this.cookieValue = CookieObject.parse(crowdhandlerCookieValue);\n\n // Ensure tokens array is not empty\n if (this.cookieValue.tokens.length === 0) {\n throw new Error(\"No tokens found in the cookie value.\");\n }\n\n const extractedToken =\n this.cookieValue.tokens[this.cookieValue.tokens.length - 1].token;\n\n if (!this.isValidToken(extractedToken)) {\n throw new Error(`Invalid token format: ${extractedToken}`);\n }\n\n this.token = extractedToken;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to extract token from complex cookie: ${error}`\n );\n }\n }\n\n /**\n * Extracts and sets the token from a simple cookie value if it's valid.\n * @param simpleCookieValue - The simple cookie value to extract the token from.\n * @throws {Error} When the token format is invalid.\n */\n private extractTokenFromSimpleCookie(simpleCookieValue: string): void {\n try {\n if (!this.isValidToken(simpleCookieValue)) {\n throw new Error(`Invalid token format: ${simpleCookieValue}`);\n }\n\n this.token = simpleCookieValue;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to extract token from simple cookie: ${error}`\n );\n }\n }\n\n /**\n * Extracts the slug from the URL path when in waiting room mode.\n * If the first path segment is 'ch', the slug is in the second segment.\n * Otherwise, the slug is the first path segment.\n */\n private extractSlugFromPath(): void {\n try {\n // Remove leading slash and query string, then split by /\n const pathWithoutQuery = this.path.split('?')[0];\n const cleanPath = pathWithoutQuery.startsWith('/') ? pathWithoutQuery.slice(1) : pathWithoutQuery;\n const segments = cleanPath.split('/').filter(s => s.length > 0);\n \n if (segments.length === 0) {\n logger(this.options.debug, \"info\", \"[WaitingRoom] No path segments found for slug extraction\");\n return;\n }\n \n let slugIndex = 0;\n \n // If first segment is 'ch', slug is in the second segment\n if (segments[0] === 'ch') {\n slugIndex = 1;\n \n if (segments.length <= 1) {\n logger(this.options.debug, \"info\", \"[WaitingRoom] Path starts with /ch/ but no slug segment found\");\n return;\n }\n }\n \n this.slug = segments[slugIndex];\n logger(this.options.debug, \"info\", `[WaitingRoom] Extracted slug from path: ${this.slug}`);\n \n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `[WaitingRoom] Failed to extract slug from path: ${error}`\n );\n }\n }\n\n /**\n * Extracts the target URL from query parameters when in waiting room mode.\n * Returns the encoded URL value if found, otherwise returns empty string.\n */\n private extractUrlFromWaitingRoomQuery(): string {\n try {\n // Get the full URL including query parameters\n const fullPath = this.REQUEST.getPath();\n if (!fullPath || !fullPath.includes('?')) {\n return \"\";\n }\n\n // Extract query string\n const queryString = fullPath.split('?')[1];\n if (!queryString) {\n return \"\";\n }\n\n // Parse query parameters manually to avoid automatic decoding\n // URLSearchParams.get() automatically decodes values, which we don't want\n const urlMatch = queryString.match(/(?:^|&)url=([^&]*)/);\n \n if (urlMatch && urlMatch[1]) {\n const urlParam = urlMatch[1];\n // The URL parameter value is encoded, return as-is without decoding\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Found url parameter (encoded): ${urlParam}`\n );\n return urlParam;\n }\n\n return \"\";\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `[WaitingRoom] Failed to extract url from query: ${error}`\n );\n return \"\";\n }\n }\n\n /**\n * Retrieves the token from local storage if possible.\n * @throws {Error} When the storage key or local storage value is undefined.\n */\n public getTokenFromLocalStorage(): void {\n try {\n if (!this.storageKey) {\n throw new Error(\"Storage key is not defined.\");\n }\n\n if (!this.localStorageValue || !this.localStorageValue.token) {\n throw new Error(\n \"Local storage value is not defined or does not contain a token.\"\n );\n }\n\n const token = this.localStorageValue.token[this.storageKey];\n\n if (!this.isValidToken(token)) {\n throw new Error(`Invalid token format: ${token}`);\n }\n\n this.token = token;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to get token from local storage: ${error}`\n );\n }\n }\n\n /**\n * Validates the signature.\n *\n * @returns the result of signature validation\n */\n public validateSignature(): ReturnType {\n const signature = new Signature(\n this.activeConfig,\n this.hashedPrivateKey,\n this.signatureType,\n this.simpleSignature,\n this.complexSignature,\n this.token,\n this.cookieValue,\n this.requested,\n this.specialParameters,\n this.options.debug\n );\n\n return signature.validateSignature();\n }\n\n /**\n * Convenience method that handles the complete redirect flow for non-promoted users.\n * Automatically manages cookies and redirects.\n * \n * @returns {string} Success message after redirect\n * @throws {Error} If unable to determine redirect URL\n * \n * @example\n * if (!result.promoted) {\n * return gatekeeper.redirectIfNotPromoted();\n * }\n */\n public redirectIfNotPromoted(): string {\n try {\n const redirectUrl = this.getRedirectUrl();\n\n if (!redirectUrl) {\n throw new Error(\"Unable to determine redirect URL\");\n }\n\n return this.REQUEST.redirect(redirectUrl);\n } catch (error: any) {\n logger(this.options.debug, \"error\", `Failed to redirect: ${error}`);\n return `Redirect failed: ${error.message}`;\n }\n }\n\n /**\n * Redirects promoted users from waiting room to target site with fresh CrowdHandler parameters.\n * Used when waitingRoom option is true and user is promoted.\n * \n * @returns {string} Success message after redirect\n * @throws {Error} If unable to determine redirect URL\n * \n * @example\n * if (result.promoted && config.waitingRoom) {\n * return gatekeeper.redirectIfPromoted();\n * }\n */\n public redirectIfPromoted(): string {\n try {\n // Get target URL from either this.targetURL or API response\n let destinationUrl = this.targetURL;\n \n // If no targetURL and we have session status with urlRedirect, use that\n if (!destinationUrl && this.sessionStatus?.result?.urlRedirect) {\n destinationUrl = encodeURIComponent(this.sessionStatus.result.urlRedirect);\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Using urlRedirect from API: ${this.sessionStatus.result.urlRedirect}`\n );\n }\n\n if (!destinationUrl) {\n throw new Error(\"Unable to determine destination URL for promoted redirect\");\n }\n\n // Decode once to get the actual URL\n const decodedURL = decodeURIComponent(destinationUrl);\n\n // Parse URL to handle parameters properly\n const urlParts = decodedURL.split('?');\n const baseUrl = urlParts[0];\n const queryString = urlParts[1] || '';\n\n // Parse existing parameters while preserving their values\n const existingParams: string[] = [];\n if (queryString) {\n const params = queryString.split('&');\n for (const param of params) {\n const [key] = param.split('=');\n // Skip CrowdHandler parameters\n if (!['ch-id', 'ch-id-signature', 'ch-requested', 'ch-code', 'ch-fresh'].includes(key)) {\n existingParams.push(param);\n }\n }\n }\n\n // Build new CrowdHandler parameters\n const chParams = [\n `ch-id=${encodeURIComponent(this.token || '')}`,\n `ch-id-signature=${encodeURIComponent(this.sessionStatus?.result?.hash || '')}`,\n `ch-requested=${encodeURIComponent(this.sessionStatus?.result?.requested || this.requested || this.specialParameters.chRequested || '')}`,\n `ch-code=${encodeURIComponent(this.specialParameters.chCode || '')}`,\n `ch-fresh=true`\n ];\n\n // Construct final URL\n const allParams = existingParams.concat(chParams);\n const finalUrl = baseUrl + (allParams.length > 0 ? '?' + allParams.join('&') : '');\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Redirecting promoted user to: ${finalUrl}`\n );\n\n return this.REQUEST.redirect(finalUrl);\n } catch (error: any) {\n logger(this.options.debug, \"error\", `Failed to redirect promoted user: ${error}`);\n return `Redirect failed: ${error.message}`;\n }\n }\n\n /**\n * Redirects the request to the decoded target URL.\n *\n * @param targetURL The target URL to redirect to.\n * @throws {Error} If decoding or redirecting fails.\n */\n /**\n * Removes CrowdHandler tracking parameters from URLs. Use when result.stripParams is true\n * to keep URLs clean.\n * \n * @param {string} targetURL - The encoded URL to clean and redirect to (from result.targetURL)\n * @throws {Error} If the decoded URL is not a valid HTTP(S) URL\n * \n * @example\n * if (result.stripParams) {\n * return gatekeeper.redirectToCleanUrl(result.targetURL);\n * }\n */\n public redirectToCleanUrl(targetURL: string): void {\n try {\n const decodedUrl = decodeURIComponent(targetURL);\n\n // If decodedUrl is not a valid URL, throw an error.\n if (!/^http[s]?:\\/\\/.*/.test(decodedUrl)) {\n throw new Error(\"Decoded URL is not a valid URL\");\n }\n\n this.REQUEST.redirect(decodedUrl);\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to redirect to clean URL: ${error}`\n );\n throw error;\n }\n }\n\n /**\n * Generates a redirect URL based on multiple fallback conditions.\n *\n * @throws {Error} If targetURL, token, or publicKey is missing or invalid.\n * @returns The generated redirect URL.\n */\n public getRedirectUrl(): string {\n try {\n const slug =\n this.sessionStatus?.result?.slug ||\n this.activeConfig?.slug ||\n this.options.fallbackSlug ||\n \"\";\n\n logger(this.options.debug, \"info\", `Generating redirect URL with slug: ${slug}`);\n logger(this.options.debug, \"info\", `Target URL: ${this.targetURL}`);\n logger(this.options.debug, \"info\", `Token: ${this.token}`);\n logger(this.options.debug, \"info\", `Public Key: ${this.publicKey}`);\n\n const redirectUrl = `${this.WAIT_URL}/${slug}?url=${this.targetURL}&ch-code=&ch-id=${this.token}&ch-public-key=${this.publicKey}`;\n\n logger(this.options.debug, \"info\", `Generated redirect URL: ${redirectUrl}`);\n\n return redirectUrl;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to generate redirect URL: ${error}`\n );\n throw error;\n }\n }\n\n /**\n * Generates token and signature objects for cookies.\n *\n * @throws {Error} If token generation fails.\n */\n private generateCookieObjects(): void {\n try {\n const tokenDatestamp = new Date().getTime();\n let signatureGenerated: string = \"\";\n\n // Prioritise API response data over parameter data.\n signatureGenerated = this.requested || this.specialParameters.chRequested;\n\n const cookieObject = new GenerateCookieObject({\n tokenDatestamp,\n tokenDatestampSignature: generateSignature(\n `${this.hashedPrivateKey}${tokenDatestamp}`\n ),\n tokenSignature: this.simpleSignature[0],\n tokenSignatureGenerated: signatureGenerated,\n tokenSignatures: this.complexSignature,\n tokenValue: this.token,\n });\n\n this.cookieSignatureObject = cookieObject.signatureObject();\n this.cookieTokenObject = cookieObject.tokenObject();\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to generate cookie objects: ${error}`\n );\n throw error;\n }\n }\n\n // //TODO: Convert to an independent class for full local storage functionality\n // /**\n // * Updates the token in the local storage object.\n // * If no local storage object exists, creates a new one.\n // * @param token - The new token to update in local storage.\n // */\n public updateLocalStorageToken(token: string): void {\n try {\n if (this.localStorageValue && this.storageKey) {\n // Update the existing LocalStorageObject token field.\n this.localStorageValue.token[this.storageKey] = token;\n } else if (this.storageKey) {\n // Create a new LocalStorageObject if it doesn't exist.\n this.localStorageValue = {\n countdown: {},\n positions: {},\n token: { [this.storageKey]: token },\n };\n }\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to update local storage token: ${error}`\n );\n }\n }\n\n /**\n * Retrieves and processes cookies from request or override.\n */\n private getCookie(): void {\n try {\n // Get cookies from request or override.\n const cookies =\n this.cookies.length === 0 ? this.REQUEST.getCookies() : this.cookies;\n\n // If no cookies, there is no further processing needed.\n if (!cookies) {\n logger(this.options.debug, \"info\", \"No cookies found.\");\n return;\n }\n\n // Split the cookies string into individual cookie strings.\n const cookieArray = cookies.split(\";\");\n\n for (const cookieStr of cookieArray) {\n const [cookieName, ...cookieValueParts] = cookieStr.trim().split(\"=\");\n const cookieValue = cookieValueParts.join(\"=\");\n\n // If this is the cookie we're interested in, process it.\n if (cookieName === this.STORAGE_NAME) {\n if (this.options.mode === \"hybrid\") {\n let decodedCookie = decodeURIComponent(cookieValue);\n let processedCookie: z.infer | undefined =\n JSON.parse(decodedCookie);\n this.cookieValue = processedCookie;\n } else {\n this.simpleCookieValue = cookieValue;\n }\n }\n }\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to get or process cookies: ${error}`\n );\n }\n }\n\n //TODO: Improve this method alongside refactor of validateRequestHybridMode\n public generateCookie(tokens: any[], deployment?: string) {\n return {\n integration: \"JSDK\",\n tokens: tokens,\n deployment: deployment || \"\",\n };\n }\n\n /**\n * Detects if a domain pattern contains a wildcard and extracts the root domain for cookie setting\n * @param domainPattern - The domain pattern from room config (e.g., \"https://*.example.com\")\n * @returns Object with isWildcard flag and optional rootDomain for cookie\n */\n private detectWildcardAndRoot(domainPattern: string): { isWildcard: boolean; rootDomain?: string } {\n // Check if there's a wildcard after https://\n const match = domainPattern.match(/^https:\\/\\/[^a-z0-9]*\\*[^a-z0-9]*([a-z0-9].*)$/i);\n\n if (!match) {\n return { isWildcard: false };\n }\n\n // match[1] is everything from first alphanumeric onward\n const domainPart = match[1]; // e.g., \"example.com\" or \"example.*\"\n\n // Check if there's a wildcard at the end - can't use wildcard cookies for these\n if (domainPart.includes('*')) {\n logger(this.options.debug, \"info\", \"Domain has trailing wildcard, cannot use root domain cookie\");\n return { isWildcard: false };\n }\n\n // Extract root domain (last two parts for cookie domain)\n const parts = domainPart.split('.');\n const rootDomain = parts.length >= 2\n ? `.${parts.slice(-2).join('.')}`\n : `.${domainPart}`;\n\n return {\n isWildcard: true,\n rootDomain: rootDomain\n };\n }\n\n /**\n * Sets the CrowdHandler session cookie. Always call this when result.setCookie is true\n * to maintain the user's queue position.\n * \n * @param {string} value - The cookie value to set (from result.cookieValue)\n * @param {string} domain - Optional domain pattern to determine cookie domain scope\n * @returns {boolean} True if the cookie was successfully set, false otherwise\n * \n * @example\n * if (result.setCookie) {\n * gatekeeper.setCookie(result.cookieValue, result.domain);\n * }\n */\n public setCookie(value: string, domain?: string): boolean {\n try {\n // Determine cookie domain if domain pattern is provided\n let cookieDomain: string | undefined;\n if (domain) {\n const { isWildcard, rootDomain } = this.detectWildcardAndRoot(domain);\n if (isWildcard && rootDomain) {\n cookieDomain = rootDomain;\n logger(this.options.debug, \"info\", `Setting cookie with domain: ${cookieDomain}`);\n }\n }\n \n // Set the cookie with the provided value and options\n this.REQUEST.setCookie(value, this.STORAGE_NAME, cookieDomain);\n return true;\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n return false;\n }\n }\n\n /**\n * Set a local storage item.\n *\n * @param options - Optional. An object containing the storage name and the local storage value.\n *\n * @throws If an error occurs while setting the local storage item, an Error is thrown and caught, logged with the logger,\n * and the function returns false.\n *\n * @returns True if the local storage item was successfully set, false otherwise.\n */\n public setLocalStorage(\n options?: z.infer\n ): boolean {\n try {\n // determine the name to use\n const nameToUse = options?.storageName || this.STORAGE_NAME;\n\n // determine the value to use\n const valueToUse =\n options?.localStorageValue || JSON.stringify(this.localStorageValue);\n\n // set the local storage item\n this.REQUEST.setLocalStorageItem(nameToUse, valueToUse);\n\n return true;\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n return false;\n }\n }\n\n /**\n * Get a local storage item.\n *\n * @throws If an error occurs while getting or parsing the local storage item,\n * an Error is thrown and caught, logged with the logger, and the function returns null.\n *\n * @returns The value from local storage parsed as a LocalStorageObject, or null if an error occurs or if the item does not exist.\n */\n public getLocalStorage(): z.infer | null {\n try {\n const crowdhandler = localStorage.getItem(this.STORAGE_NAME);\n if (crowdhandler) {\n const localStorageValue = LocalStorageObject.parse(\n JSON.parse(crowdhandler)\n );\n this.localStorageValue = localStorageValue; // still assign it to the class property if you need\n return localStorageValue;\n }\n\n logger(\n this.options.debug,\n \"Info: No data found in local storage for key:\",\n this.STORAGE_NAME\n );\n return null;\n } catch (error: any) {\n logger(this.options.debug, \"Error reading from local storage:\", error);\n return null;\n }\n }\n\n /**\n * Records performance metrics to help CrowdHandler optimize queue flow and capacity.\n * \n * @param {RecordPerformanceOptions} options - Optional performance recording options:\n * - `sample` {number} - Sample rate (0-1). Default: 0.2 (20% of requests)\n * - `statusCode` {number} - HTTP status code. Default: 200\n * - `overrideElapsed` {number} - Override elapsed time in ms\n * - `responseID` {string} - Specific response ID to record\n * \n * @example\n * // Simple usage (recommended)\n * await gatekeeper.recordPerformance();\n * \n * @example\n * // With custom options\n * await gatekeeper.recordPerformance({\n * sample: 0.2, // Sample 20% of requests\n * statusCode: 200\n * });\n */\n public async recordPerformance(\n options?: z.infer\n ) {\n try {\n // Parse and validate options if provided, else use default values\n const validatedOptions = options\n ? RecordPerformanceOptions.parse(options)\n : {\n statusCode: 200, // default HTTP response code\n sample: 0.2, // default sample rate\n overrideElapsed: undefined, // no elapsed time override\n responseID: undefined, // no responseID\n };\n\n const { statusCode, sample, overrideElapsed, responseID } =\n validatedOptions;\n\n // Generate a random number for sampling\n const lottery = Math.random();\n const currentResponseID = responseID || this.responseID;\n\n // If there's no responseID or if the random number is higher than the sample rate, return early\n if (!currentResponseID || lottery >= sample) {\n return;\n }\n\n const elapsed =\n overrideElapsed !== undefined ? overrideElapsed : this.timer.elapsed();\n\n // Asynchronously send the performance data to CrowdHandler, no need to await the promise\n this.PublicClient.responses().put(currentResponseID, {\n httpCode: statusCode,\n time: elapsed,\n });\n } catch (error: any) {\n logger(this.options.debug, \"Error recording performance:\", error);\n }\n }\n\n /**\n * Extracts the creation date from a token's base60 encoded timestamp\n */\n private tokenCreationDate(token: string): number {\n const base60 = \"0123456789ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz\";\n const tok_meta = token.slice(4, 10);\n \n const year = base60.indexOf(tok_meta[0]);\n const month = base60.indexOf(tok_meta[1]) - 1;\n const day = base60.indexOf(tok_meta[2]);\n const hour = base60.indexOf(tok_meta[3]);\n const minute = base60.indexOf(tok_meta[4]);\n const second = base60.indexOf(tok_meta[5]);\n \n return Date.UTC(2000 + year, month, day, hour, minute, second);\n }\n\n /**\n * Checks if a token is older than 12 hours\n */\n private isOldToken(token?: string): boolean {\n logger(this.options.debug, \"info\", `[Lite Validator] Checking token age for: ${token}`);\n \n if (!token || !token.startsWith(\"tok\")) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Token not in a format that we can timestamp.\");\n return false;\n }\n\n // Only handle tok0 format tokens\n if (!token.startsWith(\"tok0\")) {\n logger(this.options.debug, \"info\", `[Lite Validator] Token format '${token.substring(0,4)}' not supported for age checking`);\n return false;\n }\n\n const dateStampUTC = new Date().getTime();\n const tokenCreated = this.tokenCreationDate(token);\n const tokenCreatedDate = new Date(tokenCreated);\n const differenceInHours = (dateStampUTC - tokenCreated) / (1000 * 60 * 60);\n\n logger(this.options.debug, \"info\", `[Lite Validator] Token created: ${tokenCreatedDate.toISOString()}, Age: ${differenceInHours.toFixed(2)} hours`);\n\n if (differenceInHours > 12) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Token is older than 12 hours - will trigger redirect\");\n return true;\n }\n\n logger(this.options.debug, \"info\", \"[Lite Validator] Token is fresh (< 12 hours old)\");\n return false;\n }\n\n /**\n * Checks if the current request matches any configured room patterns\n * Rooms are pre-ordered by precedence (regex → contains → all)\n * First match wins\n */\n private matchRoomConfig(): { status: boolean; room?: any } {\n const roomMeta = {\n domain: null,\n patternType: null,\n queueActivatesOn: null,\n slug: null,\n status: false,\n timeout: null,\n };\n\n if (!this.options.roomsConfig || this.options.roomsConfig.length === 0) {\n logger(this.options.debug, \"info\", \"[Lite Validator] No rooms config provided or empty array\");\n return roomMeta;\n }\n\n const host = this.host;\n // Note: this.path already includes query string from all REQUEST handlers\n const path = this.path;\n const fullDomain = `https://${host}`;\n \n logger(this.options.debug, \"info\", `[Lite Validator] Checking rooms for domain: ${fullDomain}, path: ${path}`);\n logger(this.options.debug, \"info\", `[Lite Validator] Total rooms in config: ${this.options.roomsConfig.length}`);\n \n // Filter rooms by domain\n const filteredResults = this.options.roomsConfig.filter((item: z.infer) => {\n const matches = item.domain === fullDomain;\n if (matches) {\n logger(this.options.debug, \"info\", `[Lite Validator] Domain match found: ${item.slug}`);\n }\n return matches;\n });\n\n logger(this.options.debug, \"info\", `[Lite Validator] Rooms matching domain: ${filteredResults.length}`);\n\n // Find first match - rooms are pre-ordered by precedence\n for (const item of filteredResults) {\n logger(this.options.debug, \"info\", `[Lite Validator] Testing room '${item.slug}' with pattern '${item.urlPattern}' (type: ${item.patternType})`);\n \n if (this.patternCheck(item, path) === true) {\n logger(this.options.debug, \"info\", `[Lite Validator] MATCH FOUND: Room '${item.slug}' matches current path`);\n \n // First match is the best match\n roomMeta.domain = item.domain;\n roomMeta.patternType = item.patternType;\n roomMeta.queueActivatesOn = item.queueActivatesOn;\n roomMeta.slug = item.slug;\n roomMeta.status = true;\n roomMeta.timeout = item.timeout;\n break; // Stop at first match\n }\n }\n\n if (!roomMeta.status) {\n logger(this.options.debug, \"info\", \"[Lite Validator] No matching room found for current path\");\n }\n\n return roomMeta;\n }\n\n /**\n * Pattern checking logic - matches reference implementation\n */\n private patternCheck(item: any, path: string): boolean {\n switch (item.patternType) {\n case \"regex\":\n if (!item.urlPattern) return false;\n const regex = new RegExp(item.urlPattern);\n return regex.test(path);\n\n case \"contains\":\n if (!item.urlPattern) return false;\n return path.includes(item.urlPattern);\n\n case \"all\":\n return true;\n\n default:\n return false;\n }\n }\n\n /**\n * Determines if the request should be redirected to the lite validator\n */\n private shouldRedirectToLiteValidator(): { redirect: boolean; url?: string; domain?: string } {\n logger(this.options.debug, \"info\", \"[Lite Validator] === Starting lite validator check ===\");\n logger(this.options.debug, \"info\", `[Lite Validator] Lite validator enabled: ${this.options.liteValidator}`);\n logger(this.options.debug, \"info\", `[Lite Validator] Rooms config provided: ${!!this.options.roomsConfig}`);\n logger(this.options.debug, \"info\", `[Lite Validator] Current token: ${this.token || 'NO TOKEN'}`);\n \n if (!this.options.liteValidator || !this.options.roomsConfig) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Lite validator disabled or no rooms config - skipping\");\n return { redirect: false };\n }\n\n // Check if current path matches any protected room\n const roomMatch = this.matchRoomConfig();\n if (!roomMatch.status) {\n logger(this.options.debug, \"info\", \"[Lite Validator] No room match - skipping lite validator\");\n return { redirect: false };\n }\n\n logger(this.options.debug, \"info\", `[Lite Validator] Room matched: ${(roomMatch as any).slug || 'match found'}`);\n\n // Check if token is missing or old\n const tokenMissing = !this.token;\n const tokenIsOld = this.token ? this.isOldToken(this.token) : false;\n \n logger(this.options.debug, \"info\", `[Lite Validator] Token missing: ${tokenMissing}, Token old: ${tokenIsOld}`);\n \n if (tokenMissing || tokenIsOld) {\n const redirectUrl = this.buildLiteValidatorUrl();\n logger(this.options.debug, \"info\", `[Lite Validator] REDIRECT REQUIRED to: ${redirectUrl}`);\n return { redirect: true, url: redirectUrl, domain: (roomMatch as any).domain };\n }\n\n logger(this.options.debug, \"info\", \"[Lite Validator] Token is valid - no redirect needed\");\n return { redirect: false, domain: (roomMatch as any).domain };\n }\n\n /**\n * Builds the lite validator redirect URL\n */\n private buildLiteValidatorUrl(): string {\n const apiUrl = (this.PublicClient as any).apiUrl || 'https://api.crowdhandler.com';\n const baseUrl = `${apiUrl}/v1/redirect/requests`;\n // targetURL is already encoded by ProcessURL\n const targetUrl = this.targetURL || '';\n const code = this.specialParameters.chCode || '';\n \n const params = `ch-public-key=${this.publicKey}&url=${targetUrl}&ch-code=${code}`;\n \n return this.token \n ? `${baseUrl}/${this.token}?${params}`\n : `${baseUrl}?${params}`;\n }\n\n /**\n * The primary method for validating requests against CrowdHandler's queue system.\n * Determines whether a user should be granted access to your protected resource or sent to a waiting room.\n * \n * @param {object} params - Optional parameters to customize the validation\n * @param {Record} params.custom - Custom parameters to pass to the CrowdHandler API\n * @returns {Promise} Instructions on how to handle the request:\n * - `promoted` {boolean} - true = grant access, false = send to waiting room\n * - `setCookie` {boolean} - true = update the user's session cookie\n * - `cookieValue` {string} - The session token to store in the cookie\n * - `stripParams` {boolean} - true = remove CrowdHandler URL parameters\n * - `targetURL` {string} - Where to redirect (clean URL or waiting room)\n * - `slug` {string} - The waiting room slug (when not promoted)\n * - `responseID` {string} - Response ID for performance tracking (when promoted)\n * - `deployment` {string} - Deployment identifier from the API\n * - `token` {string} - The session token\n * - `hash` {string | null} - Signature hash for validation (when available)\n * - `liteValidatorRedirect` {boolean} - Whether to redirect for lite validation\n * - `liteValidatorUrl` {string} - URL for lite validator redirect\n * - `error` {object | undefined} - Error information if validation encountered an issue:\n * - `message` {string} - The error message from the API\n * - `statusCode` {number | undefined} - HTTP status code (e.g., 401, 500)\n * - `code` {string | undefined} - Error code for programmatic handling\n * \n * @example\n * const result = await gatekeeper.validateRequest();\n * if (!result.promoted) {\n * return gatekeeper.redirectIfNotPromoted();\n * }\n * \n * @example\n * // With custom parameters\n * const result = await gatekeeper.validateRequest({\n * custom: {\n * userId: 'user123',\n * sessionId: 'session456',\n * customField: 'value'\n * }\n * });\n * \n * @example\n * // Handling errors in the result\n * const result = await gatekeeper.validateRequest();\n * if (result.error) {\n * console.error(`API Error ${result.error.statusCode}: ${result.error.message}`);\n * // Note: promoted is still set based on error type\n * // 4xx errors: promoted = false\n * // 5xx errors: promoted based on trustOnFail setting\n * }\n * \n * @throws {CrowdHandlerError} When SDK configuration fails or network errors occur\n */\n public async validateRequest(params?: { custom?: Record }) {\n switch (this.options.mode) {\n case \"hybrid\":\n return await this.validateRequestHybridMode(params?.custom);\n break;\n case \"full\":\n return await this.validateRequestFullMode(params?.custom);\n break;\n case \"clientside\":\n return await this.validateRequestClientSideMode(params?.custom);\n break;\n default:\n \"full\";\n break;\n }\n }\n\n /**\n * Validate request in a client-side mode.\n *\n * This method checks for a CrowdHandler cookie and gets the session status for the request.\n * It works the same as full mode but runs in browser environments.\n *\n * @param {Record} customParams - Optional custom parameters to include in the API request\n * @return {Promise>} Result of the validation process.\n */\n private async validateRequestClientSideMode(customParams?: Record): Promise<\n z.infer\n > {\n // Process URL early to ensure targetURL is set for all scenarios (errors, redirects, etc.)\n this.processURL();\n \n // Initial result object with default values\n let result: z.infer = {\n promoted: false,\n stripParams: false,\n setCookie: false,\n setLocalStorage: false,\n cookieValue: \"\",\n responseID: \"\",\n slug: \"\",\n targetURL: this.targetURL || \"\",\n deployment: \"\",\n hash: null,\n token: \"\",\n requested: \"\",\n };\n\n // Check for test error simulation (for integrator testing)\n if (this.options.testError) {\n logger(this.options.debug, \"info\", `[TEST MODE] Simulating error with status ${this.options.testError.statusCode}`);\n \n const statusCode = this.options.testError.statusCode;\n const errorMessage = this.options.testError.message || `Simulated error with status ${statusCode}`;\n \n // Apply same logic as real errors\n if (statusCode >= 400 && statusCode < 500) {\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n result.error = {\n message: errorMessage,\n statusCode: statusCode,\n code: statusCode === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n \n return result;\n }\n\n try {\n // Log details for debugging\n logger(this.options.debug, \"info\", `IP: ${this.ip}`);\n logger(this.options.debug, \"info\", `Agent: ${this.agent}`);\n logger(this.options.debug, \"info\", `Host: ${this.host}`);\n logger(this.options.debug, \"info\", `Path: ${this.path}`);\n logger(this.options.debug, \"info\", `Lang: ${this.lang}`);\n\n // Skip paths that match the ignore pattern\n if (ignoredPatternsCheck(this.path, this.ignore)) {\n logger(this.options.debug, \"info\", `Ignored path: ${this.path}`);\n result.promoted = true;\n return result;\n }\n\n // URL already processed at the beginning of method\n this.getCookie();\n this.extractToken();\n \n // Lite validator check - EARLY EXIT\n logger(this.options.debug, \"info\", \"[Lite Validator] Performing lite validator check in validateRequestClientSideMode\");\n const liteCheck = this.shouldRedirectToLiteValidator();\n \n // Store domain from lite validator if available\n if (liteCheck.domain) {\n result.domain = liteCheck.domain;\n }\n \n if (liteCheck.redirect) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Lite validator redirect triggered in clientside mode\");\n result.liteValidatorRedirect = true;\n result.liteValidatorUrl = liteCheck.url;\n result.promoted = false;\n return result;\n }\n logger(this.options.debug, \"info\", \"[Lite Validator] Continuing with normal validation\")\n \n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n // Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n // Handle session status errors\n if (sessionStatusType.success) {\n if (this.sessionStatus?.result.status !== 200) {\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n // Processing based on promotion status\n if (this.sessionStatus) {\n const { promoted, slug, token, responseID, deployment, hash, requested, domain } = this.sessionStatus.result;\n\n result.promoted = promoted === 1;\n \n // Pass domain from API response if available\n if (domain) {\n result.domain = domain;\n }\n result.slug = slug || result.slug;\n this.token = token || this.token;\n result.token = token || result.token;\n result.deployment = deployment || result.deployment;\n result.hash = hash || null;\n result.requested = requested || result.requested;\n \n // Always set cookie if we have a token (for both promoted and non-promoted users)\n if (token) {\n result.setCookie = true;\n result.cookieValue = token;\n }\n \n if (promoted === 1) {\n result.responseID = responseID || result.responseID;\n this.responseID = responseID || \"\";\n \n if (this.specialParameters.chRequested) {\n result.stripParams = true;\n }\n }\n }\n\n return result;\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `An error occurred during request validation: ${error}`\n );\n throw error;\n }\n }\n\n /**\n * Validates the request by making full use of CrowdHandler API.\n * It handles the request and sets the necessary response based on the session status and API response.\n * @param {Record} customParams - Optional custom parameters to include in the API request\n * @return {Promise>} - The resulting status after validating the request.\n */\n private async validateRequestFullMode(customParams?: Record): Promise<\n z.infer\n > {\n // Process URL early to ensure targetURL is set for all scenarios (errors, redirects, etc.)\n this.processURL();\n \n // Default result object\n let result: z.infer = {\n promoted: false,\n stripParams: false,\n setCookie: false,\n setLocalStorage: false,\n cookieValue: \"\",\n responseID: \"\",\n slug: \"\",\n targetURL: this.targetURL || \"\",\n deployment: \"\",\n hash: null,\n token: \"\",\n requested: \"\",\n };\n\n // Check for test error simulation (for integrator testing)\n if (this.options.testError) {\n logger(this.options.debug, \"info\", `[TEST MODE] Simulating error with status ${this.options.testError.statusCode}`);\n \n const statusCode = this.options.testError.statusCode;\n const errorMessage = this.options.testError.message || `Simulated error with status ${statusCode}`;\n \n // Apply same logic as real errors\n if (statusCode >= 400 && statusCode < 500) {\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n result.error = {\n message: errorMessage,\n statusCode: statusCode,\n code: statusCode === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n \n return result;\n }\n\n try {\n // Log details for debugging\n logger(this.options.debug, \"info\", `IP: ${this.ip}`);\n logger(this.options.debug, \"info\", `Agent: ${this.agent}`);\n logger(this.options.debug, \"info\", `Host: ${this.host}`);\n logger(this.options.debug, \"info\", `Path: ${this.path}`);\n logger(this.options.debug, \"info\", `Lang: ${this.lang}`);\n\n // Skip paths that match the ignore pattern\n if (ignoredPatternsCheck(this.path, this.ignore)) {\n logger(this.options.debug, \"info\", `Ignored path: ${this.path}`);\n result.promoted = true;\n return result;\n }\n\n // URL already processed at the beginning of method\n this.getCookie();\n this.extractToken();\n \n // Lite validator check - EARLY EXIT\n logger(this.options.debug, \"info\", \"[Lite Validator] Performing lite validator check in validateRequestClientSideMode\");\n const liteCheck = this.shouldRedirectToLiteValidator();\n \n // Store domain from lite validator if available\n if (liteCheck.domain) {\n result.domain = liteCheck.domain;\n }\n \n if (liteCheck.redirect) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Lite validator redirect triggered in clientside mode\");\n result.liteValidatorRedirect = true;\n result.liteValidatorUrl = liteCheck.url;\n result.promoted = false;\n return result;\n }\n logger(this.options.debug, \"info\", \"[Lite Validator] Continuing with normal validation\")\n \n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n // Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n // Handle session status errors\n if (sessionStatusType.success) {\n if (this.sessionStatus?.result.status !== 200) {\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n // Processing based on promotion status\n if (this.sessionStatus) {\n const { promoted, slug, token, responseID, deployment, hash, requested, domain } = this.sessionStatus.result;\n\n result.promoted = promoted === 1;\n \n // Pass domain from API response if available\n if (domain) {\n result.domain = domain;\n }\n result.slug = slug || result.slug;\n this.token = token || this.token;\n result.token = token || result.token;\n result.deployment = deployment || result.deployment;\n result.hash = hash || null;\n result.requested = requested || result.requested;\n \n // Always set cookie if we have a token (for both promoted and non-promoted users)\n if (token) {\n result.setCookie = true;\n result.cookieValue = token;\n }\n \n if (promoted === 1) {\n result.responseID = responseID || result.responseID;\n this.responseID = responseID || \"\";\n \n if (this.specialParameters.chRequested) {\n result.stripParams = true;\n }\n }\n }\n\n return result;\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `An error occurred during request validation: ${error}`\n );\n throw error;\n }\n }\n\n //TODO: This method is a complex beast and needs refactoring\n /**\n * Validate request using signature and/or Crowdhandler API when required\n * @param {Record} customParams - Optional custom parameters to include in the API request\n */\n private async validateRequestHybridMode(customParams?: Record) {\n let signatures = [];\n let tokens = [];\n let freshToken;\n let freshSignature;\n let processedCookie;\n\n // Process URL early to ensure targetURL is set for all scenarios (errors, redirects, etc.)\n this.processURL();\n\n let result: z.infer = {\n promoted: false,\n stripParams: false,\n setCookie: false,\n setLocalStorage: false,\n cookieValue: \"\",\n responseID: \"\",\n slug: \"\",\n targetURL: this.targetURL || \"\",\n deployment: \"\",\n hash: null,\n token: \"\",\n requested: \"\",\n };\n\n // Check for test error simulation (for integrator testing)\n if (this.options.testError) {\n logger(this.options.debug, \"info\", `[TEST MODE] Simulating error with status ${this.options.testError.statusCode}`);\n \n const statusCode = this.options.testError.statusCode;\n const errorMessage = this.options.testError.message || `Simulated error with status ${statusCode}`;\n \n // Apply same logic as real errors\n if (statusCode >= 400 && statusCode < 500) {\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n result.error = {\n message: errorMessage,\n statusCode: statusCode,\n code: statusCode === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n \n return result;\n }\n\n logger(this.options.debug, \"info\", \"IP: \" + this.ip);\n logger(this.options.debug, \"info\", \"Agent: \" + this.agent);\n logger(this.options.debug, \"info\", \"Host: \" + this.host);\n logger(this.options.debug, \"info\", \"Path: \" + this.path);\n logger(this.options.debug, \"info\", \"Lang: \" + this.lang);\n\n //Bypass paths that match the ignore patterns\n if (ignoredPatternsCheck(this.path, this.ignore)) {\n logger(this.options.debug, \"info\", \"Ignored path: \" + this.path);\n result.promoted = true;\n return result;\n }\n\n // URL already processed at the beginning of method\n this.getCookie();\n this.extractToken();\n \n // Lite validator check - EARLY EXIT\n const liteCheck = this.shouldRedirectToLiteValidator();\n \n // Store domain from lite validator if available\n if (liteCheck.domain) {\n result.domain = liteCheck.domain;\n }\n \n if (liteCheck.redirect) {\n result.liteValidatorRedirect = true;\n result.liteValidatorUrl = liteCheck.url;\n result.promoted = false;\n return result;\n }\n\n await this.getConfig();\n\n //Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let configStatusType = HttpErrorWrapper.safeParse(this.activeConfig);\n\n if (configStatusType.success) {\n if (this.activeConfig && this.activeConfig.result.status !== 200) {\n //Can't process the request but we can trust it if trustOnFail is set to true\n const status = this.activeConfig?.result?.status || 0;\n const errorMessage = this.activeConfig?.result?.error || `API request failed with status ${status}`;\n \n // Config errors should respect trustOnFail (it's a system issue, not user error)\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n //Working with a real config file from here\n if (this.activeConfig.status === false) {\n logger(\n this.options.debug,\n \"info\",\n \"Config succesfully fetched but no check required.\"\n );\n result.promoted = true;\n return result;\n }\n\n //Attempt to retrieve crowdhandler cookie\n this.getCookie();\n\n logger(this.options.debug, \"info\", \"Cookie: \" + this.cookieValue);\n \n // Extract deployment from cookie if available\n if (this.cookieValue && this.cookieValue.deployment) {\n result.deployment = this.cookieValue.deployment;\n }\n\n this.getSignature({\n chIDSignature: this.specialParameters.chIDSignature,\n crowdhandlerCookieValue: this.cookieValue,\n });\n this.extractToken();\n\n logger(this.options.debug, \"info\", \"Signature: \" + this.simpleSignature);\n logger(\n this.options.debug,\n \"info\",\n \"Complex Signature: \" + this.complexSignature\n );\n logger(this.options.debug, \"info\", \"Token: \" + this.token);\n\n //If we don't have a signature or token force a check.\n if (\n (this.simpleSignature.length === 0 ||\n this.complexSignature.length === 0) &&\n !this.token\n ) {\n logger(\n this.options.debug,\n \"info\",\n \"Missing signature and/or token, doing a check.\"\n );\n\n try {\n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n //Handle a failed session status check\n //Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n if (sessionStatusType.success) {\n if (this.sessionStatus && this.sessionStatus.result.status !== 200) {\n //Can't process the request but we can trust it if trustOnFail is set to true\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n let token: string;\n \n // Pass domain from API response if available\n if (this.sessionStatus && this.sessionStatus.result.domain) {\n result.domain = this.sessionStatus.result.domain;\n }\n \n if (this.sessionStatus && this.sessionStatus.result.promoted === 0) {\n if (this.sessionStatus.result.token) {\n token = this.sessionStatus.result.token;\n result.token = token;\n this.extractToken({ chID: token });\n }\n\n result.promoted = false;\n return result;\n } else if (\n this.sessionStatus &&\n this.sessionStatus.result.promoted === 1\n ) {\n result.promoted = true;\n result.setCookie = true;\n\n let hash: string;\n let requested: string;\n\n if (this.sessionStatus.result.requested) {\n this.requested = this.sessionStatus.result.requested;\n }\n\n if (this.sessionStatus.result.deployment) {\n this.deployment = this.sessionStatus.result.deployment;\n result.deployment = this.deployment;\n }\n\n if (this.sessionStatus.result.hash) {\n hash = this.sessionStatus.result.hash;\n result.hash = hash;\n this.getSignature({ chIDSignature: hash });\n }\n\n if (this.sessionStatus.result.token) {\n token = this.sessionStatus.result.token;\n result.token = token;\n this.extractToken({ chID: token });\n }\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n }\n }\n\n logger(\n this.options.debug,\n \"info\",\n \"Signature and token found. Validating...\"\n );\n\n let validationResult = this.validateSignature();\n\n //If the signature is not valid we need to check the user\n if (validationResult.success === false) {\n logger(\n this.options.debug,\n \"info\",\n \"Signature not valid. Checking against API.\"\n );\n\n try {\n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n //Handle a failed session status check\n //Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n if (sessionStatusType.success) {\n if (this.sessionStatus && this.sessionStatus.result.status !== 200) {\n //Can't process the request but we can trust it if trustOnFail is set to true\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n // Pass domain from API response if available\n if (this.sessionStatus && this.sessionStatus.result.domain) {\n result.domain = this.sessionStatus.result.domain;\n }\n \n if (this.sessionStatus && this.sessionStatus.result.promoted === 0) {\n result.promoted = false;\n return result;\n } else if (\n this.sessionStatus &&\n this.sessionStatus.result.promoted === 1\n ) {\n let hash: string;\n let requested: string;\n let token: string;\n\n if (this.sessionStatus.result.requested) {\n this.requested = this.sessionStatus.result.requested;\n }\n\n if (this.sessionStatus.result.deployment) {\n this.deployment = this.sessionStatus.result.deployment;\n result.deployment = this.deployment;\n }\n\n if (this.sessionStatus.result.hash) {\n hash = this.sessionStatus.result.hash;\n result.hash = hash;\n this.getSignature({ chIDSignature: hash });\n }\n\n if (this.sessionStatus.result.token) {\n token = this.sessionStatus.result.token;\n result.token = token;\n this.extractToken({ chID: token });\n }\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n }\n }\n\n //part 2 here\n\n //We've established that we have a valid signature at this point\n logger(this.options.debug, \"info\", \"Signature is valid.\");\n\n try {\n // Only parse cookieValue if it exists\n if (this.cookieValue) {\n this.cookieValue = CookieObject.parse(this.cookieValue);\n\n if (this.cookieValue) {\n for (const item of this.cookieValue.tokens) {\n tokens.push(item);\n }\n }\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n }\n\n //Determine if we're working with a new token or a previously seen one\n if (\n (Array.isArray(tokens) && tokens.length === 0) ||\n (Array.isArray(tokens) && tokens[tokens.length - 1].token !== this.token)\n ) {\n freshToken = true;\n } else {\n freshToken = false;\n\n //We want to work with the most recent array of signatures\n for (const item of tokens[tokens.length - 1].signatures) {\n signatures.push(item);\n }\n }\n\n this.generateCookieObjects();\n\n if (\n this.signatureType === \"simple\" &&\n signatures.some((item) => item.sig === this.simpleSignature) === false\n ) {\n signatures.push(this.cookieSignatureObject);\n freshSignature = true;\n }\n\n if (freshToken) {\n //Reset the array. It's important we don't allow the PMUSER_CREDENTIALS variable exceed the byte limit.\n tokens = [];\n\n if (this.cookieTokenObject) {\n this.cookieTokenObject.signatures = signatures;\n }\n tokens.push(this.cookieTokenObject);\n } else {\n tokens[tokens.length - 1].signatures = signatures;\n tokens[tokens.length - 1].touched = this.cookieTokenObject?.touched;\n tokens[tokens.length - 1].touchedSig = this.cookieTokenObject?.touchedSig;\n }\n try {\n this.cookieValue = this.generateCookie(tokens, this.deployment);\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n // Handle the error as appropriate for your application...\n }\n result.cookieValue = JSON.stringify(this.cookieValue);\n\n if (freshSignature && this.specialParameters.chRequested) {\n result.stripParams = true;\n }\n\n //If we made it all the way here, we can assume the user is promoted and a cookie should be set.\n result.promoted = true;\n result.setCookie = true;\n result.token = this.token;\n\n return result;\n }\n}\n","import { z } from \"zod\";\nimport { Client } from \"./client/client\";\nimport { RequestContext } from \"./request/requestContext\";\nimport { Gatekeeper } from \"./gatekeeper/gatekeeper\";\nimport { GatekeeperOptions, Mode, Modes } from \"./common/types\";\nimport { CrowdHandlerError, createError, ErrorCodes } from \"./common/errors\";\n\n/**\n * Configuration options for initializing CrowdHandler\n */\nexport interface InitConfig {\n /** Your CrowdHandler public key (required) */\n publicKey: string;\n \n /** Your CrowdHandler private key (optional - required for private API access) */\n privateKey?: string;\n \n // Context options - provide one of these\n /** Express/Node.js request object */\n request?: any;\n \n /** Express/Node.js response object */\n response?: any;\n \n /** AWS Lambda@Edge event object */\n lambdaEdgeEvent?: any;\n \n /** Additional configuration options */\n options?: {\n /** \n * Validation mode\n * - 'full': Server-side validation (default for server environments)\n * - 'hybrid': Uses signature method to reduce API calls, offloads non-critical processes to browser\n * - 'clientside': Browser-only validation (default for browser)\n * - 'auto': Automatically detect based on environment\n */\n mode?: Mode;\n \n /** API request timeout in milliseconds (default: 5000) */\n timeout?: number;\n \n /** Enable debug logging (default: false) */\n debug?: boolean;\n \n /** Custom API URL (default: https://api.crowdhandler.com) */\n apiUrl?: string;\n \n /** Trust users on API failure (default: true) */\n trustOnFail?: boolean;\n \n /** Fallback room slug if none matches */\n fallbackSlug?: string;\n \n /** Custom cookie name (default: 'crowdhandler') */\n cookieName?: string;\n \n /** Enable lite validator mode */\n liteValidator?: boolean;\n \n /** Room configuration for lite validator - array of room configs */\n roomsConfig?: Array<{\n domain: string;\n slug: string;\n urlPattern?: string;\n patternType?: 'regex' | 'contains' | 'all';\n queueActivatesOn?: number;\n timeout?: number;\n }>;\n \n /** Whether this is a waiting room implementation (default: false) */\n waitingRoom?: boolean;\n \n /** Test error simulation for integrator testing */\n testError?: {\n statusCode: number;\n message?: string;\n };\n };\n}\n\n/**\n * Result when init is called without context (API-only mode)\n */\nexport interface InitResultWithoutGatekeeper {\n /** Unified API client for making CrowdHandler API calls */\n client: Client;\n \n /** Gatekeeper is not available in API-only mode */\n gatekeeper?: never;\n}\n\n/**\n * Result when init is called with context (protection mode)\n */\nexport interface InitResultWithGatekeeper {\n /** Unified API client for making CrowdHandler API calls */\n client: Client;\n \n /** Gatekeeper instance for request validation */\n gatekeeper: Gatekeeper;\n}\n\n/**\n * Result returned from the init() function\n */\nexport type InitResult = InitResultWithoutGatekeeper | InitResultWithGatekeeper;\n\n/**\n * Initialize CrowdHandler with the provided configuration.\n * Returns a client for API access and optionally a gatekeeper for request validation.\n * \n * @param config - Configuration object containing keys and optional context\n * @returns An object containing the API client and optional gatekeeper\n * \n * @example\n * // API-only usage\n * const { client } = crowdhandler.init({ \n * publicKey: 'pk_xyz' \n * });\n * \n * @example\n * // Full protection with Express\n * const { client, gatekeeper } = crowdhandler.init({\n * publicKey: 'pk_xyz',\n * privateKey: 'sk_xyz',\n * request: req,\n * response: res\n * });\n * \n * @example\n * // Browser usage\n * const { client, gatekeeper } = crowdhandler.init({\n * publicKey: 'pk_xyz',\n * options: { mode: 'clientside' }\n * });\n * \n * @example\n * // Lambda@Edge usage\n * const { client, gatekeeper } = crowdhandler.init({\n * publicKey: 'pk_xyz',\n * privateKey: 'sk_xyz',\n * lambdaEdgeEvent: event\n * });\n * \n * @throws {CrowdHandlerError} When configuration is invalid\n */\n// Function overloads for better type inference\nexport function init(config: InitConfig & { request: any; response: any }): InitResultWithGatekeeper;\nexport function init(config: InitConfig & { lambdaEdgeEvent: any }): InitResultWithGatekeeper;\nexport function init(config: InitConfig): InitResult;\n\n// Implementation\nexport function init(config: InitConfig): InitResult {\n // Validate configuration\n if (!config.publicKey) {\n throw new CrowdHandlerError(\n ErrorCodes.INVALID_CONFIG,\n 'publicKey is required',\n 'Provide your public key from the CrowdHandler dashboard: crowdhandler.init({ publicKey: \"YOUR_KEY\" })'\n );\n }\n \n // Create unified client\n const client = new Client({\n publicKey: config.publicKey,\n privateKey: config.privateKey,\n options: config.options\n });\n \n // Check if context was provided\n const hasContext = !!(\n (config.request && config.response) || \n config.lambdaEdgeEvent || \n (typeof window !== 'undefined' && !config.request && !config.response && !config.lambdaEdgeEvent)\n );\n \n // Create gatekeeper if context provided\n let gatekeeper: Gatekeeper | undefined;\n \n if (hasContext) {\n // Create RequestContext\n let context: RequestContext;\n \n if (config.lambdaEdgeEvent) {\n context = new RequestContext({ lambdaEvent: config.lambdaEdgeEvent });\n } else if (config.request && config.response) {\n context = new RequestContext({ request: config.request, response: config.response });\n } else if (typeof window !== 'undefined') {\n context = new RequestContext({});\n } else {\n throw new CrowdHandlerError(\n ErrorCodes.INVALID_CONTEXT,\n 'Invalid context configuration',\n 'Provide either:\\n' +\n '- { request, response } for Express/Node.js\\n' +\n '- { lambdaEdgeEvent } for Lambda@Edge\\n' +\n '- Nothing for browser environment'\n );\n }\n \n // Auto-detect mode\n const mode = detectMode(config);\n \n // Prepare gatekeeper options\n const gatekeeperOptions: z.infer = {\n mode,\n debug: config.options?.debug,\n timeout: config.options?.timeout,\n ...(config.options?.trustOnFail !== undefined && { trustOnFail: config.options.trustOnFail }),\n fallbackSlug: config.options?.fallbackSlug,\n cookieName: config.options?.cookieName,\n liteValidator: config.options?.liteValidator,\n roomsConfig: config.options?.roomsConfig,\n waitingRoom: config.options?.waitingRoom,\n testError: config.options?.testError\n };\n \n // Create gatekeeper using the public client from our unified client\n gatekeeper = new Gatekeeper(\n client.getPublicClient(),\n context,\n {\n publicKey: config.publicKey,\n privateKey: config.privateKey\n },\n gatekeeperOptions\n );\n }\n \n return { client, gatekeeper };\n}\n\n/**\n * Detect the appropriate mode based on configuration and environment\n */\nfunction detectMode(config: InitConfig): Exclude {\n // Explicit mode takes precedence\n if (config.options?.mode && config.options.mode !== 'auto') {\n // Validate mode requirements\n if (config.options.mode === 'hybrid' && !config.privateKey) {\n throw new CrowdHandlerError(\n ErrorCodes.INVALID_MODE,\n 'Hybrid mode requires a privateKey',\n 'Either provide a privateKey or use \"full\" mode'\n );\n }\n return config.options.mode;\n }\n \n // Auto-detect based on environment\n if (typeof window !== 'undefined') {\n return 'clientside';\n }\n \n // Default to 'full' mode for server environments\n // (hybrid mode must be explicitly chosen)\n return 'full';\n}","/**\n * CrowdHandler JavaScript SDK\n * \n * @packageDocumentation\n */\n\n// Polyfill for async/await in ES5 environments\nimport 'regenerator-runtime/runtime';\n\n// Main API\n/** \n * Initialize CrowdHandler with configuration.\n * This is the main entry point for the SDK.\n */\nexport { init } from './init';\n\n/** \n * Unified API client for all CrowdHandler operations.\n * Usually obtained from init(), but can be instantiated directly.\n */\nexport { Client } from './client/client';\n\n// Error handling\nexport { CrowdHandlerError, ErrorCodes } from './common/errors';\n\n// Export individual error codes for better autocomplete\nexport const CROWDHANDLER_ERRORS = {\n // Configuration errors\n INVALID_CONFIG: 'INVALID_CONFIG',\n INVALID_MODE: 'INVALID_MODE',\n INVALID_CONTEXT: 'INVALID_CONTEXT',\n MISSING_PRIVATE_KEY: 'MISSING_PRIVATE_KEY',\n \n // API errors\n API_CONNECTION_FAILED: 'API_CONNECTION_FAILED',\n API_TIMEOUT: 'API_TIMEOUT',\n API_INVALID_RESPONSE: 'API_INVALID_RESPONSE',\n INVALID_API_KEY: 'INVALID_API_KEY',\n RATE_LIMITED: 'RATE_LIMITED',\n \n // Resource errors\n RESOURCE_NOT_FOUND: 'RESOURCE_NOT_FOUND',\n DOMAIN_NOT_FOUND: 'DOMAIN_NOT_FOUND',\n ROOM_NOT_FOUND: 'ROOM_NOT_FOUND',\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n \n // Generic errors\n UNKNOWN_ERROR: 'UNKNOWN_ERROR'\n} as const;\n\n// Types that users might need\nexport type { \n InitConfig, \n InitResult,\n InitResultWithGatekeeper,\n InitResultWithoutGatekeeper \n} from './init';\n\n// Classes for advanced usage (types only)\nexport type { Gatekeeper } from './gatekeeper/gatekeeper';\nexport type { RequestContext } from './request/requestContext';\n\n// Types for request validation\nexport type {\n ValidateRequestObject,\n ValidateRequestParams,\n RecordPerformanceOptions,\n GatekeeperOptions,\n RoomConfig,\n RoomsConfig,\n} from './common/types';\n\n// Re-export types with better names\nimport { z } from 'zod';\nimport { \n ValidateRequestObject as ValidateRequestSchema,\n ValidateRequestParams as ValidateRequestParamsSchema,\n RecordPerformanceOptions as RecordPerformanceSchema,\n GatekeeperOptions as GatekeeperOptionsSchema,\n RoomConfig as RoomConfigSchema,\n} from './common/types';\n\nexport type ValidateRequestResult = z.infer;\nexport type ValidateRequestParams = z.infer;\nexport type RecordPerformanceOptions = z.infer;\nexport type GatekeeperOptions = z.infer;\nexport type LiteValidatorRoom = z.infer;\n\n// Mode constants for better IntelliSense\nexport { Mode, Modes } from './common/types';\n\n// Common options types\n/**\n * Common options for API client configuration\n */\nexport interface ClientOptions {\n /** API request timeout in milliseconds (default: 5000) */\n timeout?: number;\n \n /** Enable debug logging (default: false) */\n debug?: boolean;\n \n /** Custom API URL (default: https://api.crowdhandler.com) */\n apiUrl?: string;\n}\n\n// Response types from API methods\n\n/**\n * Room resource from the CrowdHandler API\n */\nexport interface Room {\n /** Unique room identifier */\n id: string;\n \n /** URL slug for the room */\n slug: string;\n \n /** Domain associated with the room */\n domain: string;\n \n /** Whether the room is active */\n status: boolean;\n \n /** Additional room properties */\n [key: string]: any;\n}\n\nexport interface Domain {\n id: string;\n domain: string;\n [key: string]: any;\n}\n\nexport interface Session {\n id: string;\n roomId: string;\n status: number;\n promoted: number;\n [key: string]: any;\n}\n\nexport interface Request {\n id: string;\n [key: string]: any;\n}\n\nexport interface Response {\n id: string;\n [key: string]: any;\n}"],"names":["undefined","z","axios","sha256"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,EAAA,IAAI,OAAO,IAAI,UAAU,OAAO,EAAE;;AAGlC,IAAE,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAA;AAC3B,IAAE,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAA;IAC9B,IAAI,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,UAAU,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;IAClG,IAAIA,WAAS,CAAC;IACd,IAAI,OAAO,GAAG,OAAO,MAAM,KAAK,UAAU,GAAG,MAAM,GAAG,EAAE,CAAA;AAC1D,IAAE,IAAI,cAAc,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAA;AACvD,IAAE,IAAI,mBAAmB,GAAG,OAAO,CAAC,aAAa,IAAI,iBAAiB,CAAA;AACtE,IAAE,IAAI,iBAAiB,GAAG,OAAO,CAAC,WAAW,IAAI,eAAe,CAAA;;IAE9D,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;AACnC,MAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE;QAC9B,KAAK,EAAE,KAAK;QACZ,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;AACxB,QAAM,QAAQ,EAAE,IAAA;AAChB,OAAK,CAAC,CAAA;AACN,MAAI,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;AACnB,KAAA;AACA,IAAE,IAAI;AACN;AACA,MAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;KACf,CAAC,OAAO,GAAG,EAAE;MACZ,MAAM,GAAG,SAAS,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;AACvC,QAAM,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;OACxB,CAAA;AACL,KAAA;;IAEE,SAAS,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;AACrD;AACA,MAAI,IAAI,cAAc,GAAG,OAAO,IAAI,OAAO,CAAC,SAAS,YAAY,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;MAC5F,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;MACvD,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAA;;AAEhD;AACA;AACA,MAAI,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;;AAE7F,MAAI,OAAO,SAAS,CAAA;AACpB,KAAA;AACA,IAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAA;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACE,SAAS,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AAClC,MAAI,IAAI;AACR,QAAM,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAA;OAClD,CAAC,OAAO,GAAG,EAAE;QACZ,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;AACxC,OAAA;AACA,KAAA;;IAEE,IAAI,sBAAsB,GAAG,gBAAgB,CAAA;IAC7C,IAAI,sBAAsB,GAAG,gBAAgB,CAAA;IAC7C,IAAI,iBAAiB,GAAG,WAAW,CAAA;IACnC,IAAI,iBAAiB,GAAG,WAAW,CAAA;;AAErC;AACA;IACE,IAAI,gBAAgB,GAAG,EAAE,CAAA;;AAE3B;AACA;AACA;AACA;IACE,SAAS,SAAS,GAAG,EAAA;IACrB,SAAS,iBAAiB,GAAG,EAAA;IAC7B,SAAS,0BAA0B,GAAG,EAAA;;AAExC;AACA;IACE,IAAI,iBAAiB,GAAG,EAAE,CAAA;AAC5B,IAAE,MAAM,CAAC,iBAAiB,EAAE,cAAc,EAAE,YAAY;AACxD,MAAI,OAAO,IAAI,CAAA;AACf,KAAG,CAAC,CAAA;;AAEJ,IAAE,IAAI,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAA;AACtC,IAAE,IAAI,uBAAuB,GAAG,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC1E,IAAE,IAAI,uBAAuB;QACvB,uBAAuB,KAAK,EAAE;QAC9B,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,EAAE;AAC5D;AACA;MACI,iBAAiB,GAAG,uBAAuB,CAAA;AAC/C,KAAA;;AAEA,IAAE,IAAI,EAAE,GAAG,0BAA0B,CAAC,SAAS;MAC3C,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAC1D,IAAE,iBAAiB,CAAC,SAAS,GAAG,0BAA0B,CAAA;AAC1D,IAAE,cAAc,CAAC,EAAE,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAA;AAC9F,IAAE,cAAc;AAChB,MAAI,0BAA0B;AAC9B,MAAI,aAAa;AACjB,MAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAA;KAC/C,CAAA;AACH,IAAE,iBAAiB,CAAC,WAAW,GAAG,MAAM;AACxC,MAAI,0BAA0B;AAC9B,MAAI,iBAAiB;MACjB,mBAAA;KACD,CAAA;;AAEH;AACA;AACA,IAAE,SAAS,qBAAqB,CAAC,SAAS,EAAE;AAC5C,MAAI,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;QACnD,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE;UACtC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AACxC,SAAO,CAAC,CAAA;AACR,OAAK,CAAC,CAAA;AACN,KAAA;;AAEA,IAAE,OAAO,CAAC,mBAAmB,GAAG,SAAS,MAAM,EAAE;MAC7C,IAAI,IAAI,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,WAAW,CAAA;AACjE,MAAI,OAAO,IAAA;UACH,IAAI,KAAK,iBAAiB;AAClC;AACA;UACQ,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,MAAM,mBAAA;AAC5C,UAAQ,KAAK,CAAA;KACV,CAAA;;AAEH,IAAE,OAAO,CAAC,IAAI,GAAG,SAAS,MAAM,EAAE;AAClC,MAAI,IAAI,MAAM,CAAC,cAAc,EAAE;AAC/B,QAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAA;AAC/D,OAAK,MAAM;AACX,QAAM,MAAM,CAAC,SAAS,GAAG,0BAA0B,CAAA;AACnD,QAAM,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,mBAAmB,CAAC,CAAA;AAC5D,OAAA;MACI,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AACxC,MAAI,OAAO,MAAM,CAAA;KACd,CAAA;;AAEH;AACA;AACA;AACA;AACA,IAAE,OAAO,CAAC,KAAK,GAAG,SAAS,GAAG,EAAE;AAChC,MAAI,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAA;KACxB,CAAA;;AAEH,IAAE,SAAS,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE;MAC7C,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE;AAClD,QAAM,IAAI,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAA;AAC9D,QAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACnC,UAAQ,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC1B,SAAO,MAAM;AACb,UAAQ,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;AAC/B,UAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;AAChC,UAAQ,IAAI,KAAK;cACL,OAAO,KAAK,KAAK,QAAQ;cACzB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AAC3C,YAAU,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE;cAC7D,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;aACvC,EAAE,SAAS,GAAG,EAAE;cACf,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AACjD,aAAW,CAAC,CAAA;AACZ,WAAA;;AAEA,UAAQ,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,EAAE;AACnE;AACA;AACA;AACA,YAAU,MAAM,CAAC,KAAK,GAAG,SAAS,CAAA;YACxB,OAAO,CAAC,MAAM,CAAC,CAAA;WAChB,EAAE,SAAS,KAAK,EAAE;AAC3B;AACA;YACU,OAAO,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AACxD,WAAS,CAAC,CAAA;AACV,SAAA;AACA,OAAA;;AAEA,MAAI,IAAI,eAAe,CAAA;;AAEvB,MAAI,SAAS,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE;QAC5B,SAAS,0BAA0B,GAAG;UACpC,OAAO,IAAI,WAAW,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;YAC/C,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC9C,WAAS,CAAC,CAAA;AACV,SAAA;;AAEA,QAAM,OAAO,eAAe;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAQ,eAAe,GAAG,eAAe,CAAC,IAAI;AAC9C,YAAU,0BAA0B;AACpC;AACA;YACU,0BAAA;WACD,GAAG,0BAA0B,EAAE,CAAA;AACxC,OAAA;;AAEA;AACA;MACI,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;AACvD,KAAA;;AAEA,IAAE,qBAAqB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;IAC9C,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,mBAAmB,EAAE,YAAY;AACnE,MAAI,OAAO,IAAI,CAAA;AACf,KAAG,CAAC,CAAA;AACJ,IAAE,OAAO,CAAC,aAAa,GAAG,aAAa,CAAA;;AAEvC;AACA;AACA;AACA,IAAE,OAAO,CAAC,KAAK,GAAG,SAAS,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE;MACzE,IAAI,WAAW,KAAK,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAAA;;AAErD,MAAI,IAAI,IAAI,GAAG,IAAI,aAAa;QAC1B,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC;QACzC,WAAA;OACD,CAAA;;AAEL,MAAI,OAAO,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAA;AAC9C,UAAQ,IAAI;UACJ,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;AAC1C,YAAU,OAAO,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;AACzD,WAAS,CAAC,CAAA;KACP,CAAA;;IAED,SAAS,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;MAChD,IAAI,KAAK,GAAG,sBAAsB,CAAA;;AAEtC,MAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE;AACxC,QAAM,IAAI,KAAK,KAAK,iBAAiB,EAAE;AACvC,UAAQ,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;AACvD,SAAA;;AAEA,QAAM,IAAI,KAAK,KAAK,iBAAiB,EAAE;AACvC,UAAQ,IAAI,MAAM,KAAK,OAAO,EAAE;AAChC,YAAU,MAAM,GAAG,CAAA;AACnB,WAAA;;AAEA;AACA;AACA;UACQ,OAAO,UAAU,EAAE,CAAA;AAC3B,SAAA;;AAEA,QAAM,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;AAC7B,QAAM,OAAO,CAAC,GAAG,GAAG,GAAG,CAAA;;QAEjB,OAAO,IAAI,EAAE;AACnB,UAAQ,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;UAC/B,IAAI,QAAQ,EAAE;YACZ,IAAI,cAAc,GAAG,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC3D,IAAI,cAAc,EAAE;AAC9B,cAAY,IAAI,cAAc,KAAK,gBAAgB,EAAE,SAAA;AACrD,cAAY,OAAO,cAAc,CAAA;AACjC,aAAA;AACA,WAAA;;AAEA,UAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE;AACvC;AACA;YACU,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAA;;AAEpD,WAAS,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;AAC/C,YAAU,IAAI,KAAK,KAAK,sBAAsB,EAAE;cACpC,KAAK,GAAG,iBAAiB,CAAA;cACzB,MAAM,OAAO,CAAC,GAAG,CAAA;AAC7B,aAAA;;AAEA,YAAU,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;;AAEhD,WAAS,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;YACtC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;AAC/C,WAAA;;UAEQ,KAAK,GAAG,iBAAiB,CAAA;;UAEzB,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;AACrD,UAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACtC;AACA;YACU,KAAK,GAAG,OAAO,CAAC,IAAA;gBACZ,iBAAA;AACd,gBAAc,sBAAsB,CAAA;;AAEpC,YAAU,IAAI,MAAM,CAAC,GAAG,KAAK,gBAAgB,EAAE;cACnC,SAAA;AACZ,aAAA;;AAEA,YAAU,OAAO;AACjB,cAAY,KAAK,EAAE,MAAM,CAAC,GAAG;cACjB,IAAI,EAAE,OAAO,CAAC,IAAA;aACf,CAAA;;AAEX,WAAS,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;YAClC,KAAK,GAAG,iBAAiB,CAAA;AACnC;AACA;AACA,YAAU,OAAO,CAAC,MAAM,GAAG,OAAO,CAAA;AAClC,YAAU,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;AAClC,WAAA;AACA,SAAA;OACK,CAAA;AACL,KAAA;;AAEA;AACA;AACA;AACA;AACA,IAAE,SAAS,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE;AAClD,MAAI,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,CAAA;MAC/B,IAAI,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AAC9C,MAAI,IAAI,MAAM,KAAKA,WAAS,EAAE;AAC9B;AACA;AACA;AACA,QAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAA;;AAE7B;QACM,IAAI,UAAU,KAAK,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AACjE;AACA;AACA,UAAQ,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAA;AACjC,UAAQ,OAAO,CAAC,GAAG,GAAGA,WAAS,CAAA;AAC/B,UAAQ,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;;AAE9C,UAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;AACxC;AACA;AACA,YAAU,OAAO,gBAAgB,CAAA;AACjC,WAAA;AACA,SAAA;AACA,QAAM,IAAI,UAAU,KAAK,QAAQ,EAAE;AACnC,UAAQ,OAAO,CAAC,MAAM,GAAG,OAAO,CAAA;AAChC,UAAQ,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS;AACnC,YAAU,mCAAmC,GAAG,UAAU,GAAG,UAAU,CAAC,CAAA;AACxE,SAAA;;AAEA,QAAM,OAAO,gBAAgB,CAAA;AAC7B,OAAA;;AAEA,MAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;;AAEjE,MAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACjC,QAAM,OAAO,CAAC,MAAM,GAAG,OAAO,CAAA;AAC9B,QAAM,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;AAC9B,QAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAA;AAC7B,QAAM,OAAO,gBAAgB,CAAA;AAC7B,OAAA;;AAEA,MAAI,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;;MAErB,IAAI,EAAE,IAAI,EAAE;AAChB,QAAM,OAAO,CAAC,MAAM,GAAG,OAAO,CAAA;QACxB,OAAO,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAA;AACrE,QAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAA;AAC7B,QAAM,OAAO,gBAAgB,CAAA;AAC7B,OAAA;;AAEA,MAAI,IAAI,IAAI,CAAC,IAAI,EAAE;AACnB;AACA;QACM,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAA;;AAE/C;AACA,QAAM,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAA;;AAErC;AACA;AACA;AACA;AACA;AACA;AACA,QAAM,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AACvC,UAAQ,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;AAC/B,UAAQ,OAAO,CAAC,GAAG,GAAGA,WAAS,CAAA;AAC/B,SAAA;;AAEA,OAAK,MAAM;AACX;AACA,QAAM,OAAO,IAAI,CAAA;AACjB,OAAA;;AAEA;AACA;AACA,MAAI,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAA;AAC3B,MAAI,OAAO,gBAAgB,CAAA;AAC3B,KAAA;;AAEA;AACA;IACE,qBAAqB,CAAC,EAAE,CAAC,CAAA;;AAE3B,IAAE,MAAM,CAAC,EAAE,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAA;;AAE5C;AACA;AACA;AACA;AACA;AACA,IAAE,MAAM,CAAC,EAAE,EAAE,cAAc,EAAE,WAAW;AACxC,MAAI,OAAO,IAAI,CAAA;AACf,KAAG,CAAC,CAAA;;AAEJ,IAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,WAAW;AACpC,MAAI,OAAO,oBAAoB,CAAA;AAC/B,KAAG,CAAC,CAAA;;AAEJ,IAAE,SAAS,YAAY,CAAC,IAAI,EAAE;MAC1B,IAAI,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;;AAEnC,MAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACnB,QAAM,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAC9B,OAAA;;AAEA,MAAI,IAAI,CAAC,IAAI,IAAI,EAAE;AACnB,QAAM,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAChC,QAAM,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAC9B,OAAA;;AAEA,MAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAC/B,KAAA;;AAEA,IAAE,SAAS,aAAa,CAAC,KAAK,EAAE;AAChC,MAAI,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAA;AACvC,MAAI,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAA;MACtB,OAAO,MAAM,CAAC,GAAG,CAAA;AACrB,MAAI,KAAK,CAAC,UAAU,GAAG,MAAM,CAAA;AAC7B,KAAA;;AAEA,IAAE,SAAS,OAAO,CAAC,WAAW,EAAE;AAChC;AACA;AACA;MACI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AAC1C,MAAI,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;AAC3C,MAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AACpB,KAAA;;AAEA,IAAE,OAAO,CAAC,IAAI,GAAG,SAAS,GAAG,EAAE;AAC/B,MAAI,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;MACxB,IAAI,IAAI,GAAG,EAAE,CAAA;AACjB,MAAI,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;AAC5B,QAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACpB,OAAA;MACI,IAAI,CAAC,OAAO,EAAE,CAAA;;AAElB;AACA;MACI,OAAO,SAAS,IAAI,GAAG;AAC3B,QAAM,OAAO,IAAI,CAAC,MAAM,EAAE;AAC1B,UAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;AAC5B,UAAQ,IAAI,GAAG,IAAI,MAAM,EAAE;AAC3B,YAAU,IAAI,CAAC,KAAK,GAAG,GAAG,CAAA;AAC1B,YAAU,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;AAC3B,YAAU,OAAO,IAAI,CAAA;AACrB,WAAA;AACA,SAAA;;AAEA;AACA;AACA;AACA,QAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;AACtB,QAAM,OAAO,IAAI,CAAA;OACZ,CAAA;KACF,CAAA;;AAEH,IAAE,SAAS,MAAM,CAAC,QAAQ,EAAE;AAC5B,MAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;AAC1B,QAAM,IAAI,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;QAC7C,IAAI,cAAc,EAAE;AAC1B,UAAQ,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAC5C,SAAA;;AAEA,QAAM,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/C,UAAQ,OAAO,QAAQ,CAAA;AACvB,SAAA;;QAEM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;UAC3B,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,IAAI,GAAG;AAC3C,YAAU,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE;cAC5B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE;AAC1C,gBAAc,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AACtC,gBAAc,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;AAC/B,gBAAc,OAAO,IAAI,CAAA;AACzB,eAAA;AACA,aAAA;;AAEA,YAAU,IAAI,CAAC,KAAK,GAAGA,WAAS,CAAA;AAChC,YAAU,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;;AAE1B,YAAU,OAAO,IAAI,CAAA;WACZ,CAAA;;AAET,UAAQ,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;AAC/B,SAAA;AACA,OAAA;;MAEI,MAAM,IAAI,SAAS,CAAC,OAAO,QAAQ,GAAG,kBAAkB,CAAC,CAAA;AAC7D,KAAA;AACA,IAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;;IAEvB,SAAS,UAAU,GAAG;MACpB,OAAO,EAAE,KAAK,EAAEA,WAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AAC3C,KAAA;;IAEE,OAAO,CAAC,SAAS,GAAG;MAClB,WAAW,EAAE,OAAO;;AAExB,MAAI,KAAK,EAAE,SAAS,aAAa,EAAE;AACnC,QAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;AACnB,QAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;AACnB;AACA;QACM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAGA,WAAS,CAAA;AACxC,QAAM,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;AACvB,QAAM,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;;AAE1B,QAAM,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;AAC1B,QAAM,IAAI,CAAC,GAAG,GAAGA,WAAS,CAAA;;AAE1B,QAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;;QAEtC,IAAI,CAAC,aAAa,EAAE;AAC1B,UAAQ,KAAK,IAAI,IAAI,IAAI,IAAI,EAAE;AAC/B;YACU,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;AACpC,gBAAc,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;gBACvB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AACtC,cAAY,IAAI,CAAC,IAAI,CAAC,GAAGA,WAAS,CAAA;AAClC,aAAA;AACA,WAAA;AACA,SAAA;OACK;;MAED,IAAI,EAAE,WAAW;AACrB,QAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;;QAEhB,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACxC,QAAM,IAAI,UAAU,GAAG,SAAS,CAAC,UAAU,CAAA;AAC3C,QAAM,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,EAAE;UAC/B,MAAM,UAAU,CAAC,GAAG,CAAA;AAC5B,SAAA;;QAEM,OAAO,IAAI,CAAC,IAAI,CAAA;OACjB;;AAEL,MAAI,iBAAiB,EAAE,SAAS,SAAS,EAAE;AAC3C,QAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AACrB,UAAQ,MAAM,SAAS,CAAA;AACvB,SAAA;;QAEM,IAAI,OAAO,GAAG,IAAI,CAAA;AACxB,QAAM,SAAS,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE;AACnC,UAAQ,MAAM,CAAC,IAAI,GAAG,OAAO,CAAA;AAC7B,UAAQ,MAAM,CAAC,GAAG,GAAG,SAAS,CAAA;AAC9B,UAAQ,OAAO,CAAC,IAAI,GAAG,GAAG,CAAA;;UAElB,IAAI,MAAM,EAAE;AACpB;AACA;AACA,YAAU,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;AACjC,YAAU,OAAO,CAAC,GAAG,GAAGA,WAAS,CAAA;AACjC,WAAA;;UAEQ,OAAO,CAAC,EAAE,MAAM,CAAA;AACxB,SAAA;;AAEA,QAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;UACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACtC,UAAQ,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAA;;AAErC,UAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AACrC;AACA;AACA;AACA,YAAU,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AAC9B,WAAA;;UAEQ,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;YAC7B,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;YAC7C,IAAI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;;AAE3D,YAAU,IAAI,QAAQ,IAAI,UAAU,EAAE;cAC1B,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;gBAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;eACpC,MAAM,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;AACrD,gBAAc,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;AAC7C,eAAA;;aAEW,MAAM,IAAI,QAAQ,EAAE;cACnB,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE;gBAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;AACjD,eAAA;;aAEW,MAAM,IAAI,UAAU,EAAE;cACrB,IAAI,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;AAC9C,gBAAc,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;AAC7C,eAAA;;AAEA,aAAW,MAAM;AACjB,cAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;AACrE,aAAA;AACA,WAAA;AACA,SAAA;OACK;;AAEL,MAAI,MAAM,EAAE,SAAS,IAAI,EAAE,GAAG,EAAE;AAChC,QAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;UACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACtC,UAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI;AACrC,cAAY,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC;AAC5C,cAAY,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE;YAChC,IAAI,YAAY,GAAG,KAAK,CAAA;YACxB,MAAA;AACV,WAAA;AACA,SAAA;;AAEA,QAAM,IAAI,YAAY;aACX,IAAI,KAAK,OAAO;aAChB,IAAI,KAAK,UAAU,CAAC;AAC/B,YAAU,YAAY,CAAC,MAAM,IAAI,GAAG;AACpC,YAAU,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE;AAC1C;AACA;UACQ,YAAY,GAAG,IAAI,CAAA;AAC3B,SAAA;;QAEM,IAAI,MAAM,GAAG,YAAY,GAAG,YAAY,CAAC,UAAU,GAAG,EAAE,CAAA;AAC9D,QAAM,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;AACxB,QAAM,MAAM,CAAC,GAAG,GAAG,GAAG,CAAA;;QAEhB,IAAI,YAAY,EAAE;AACxB,UAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;AAC5B,UAAQ,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,UAAU,CAAA;AAC3C,UAAQ,OAAO,gBAAgB,CAAA;AAC/B,SAAA;;AAEA,QAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;OAC7B;;AAEL,MAAI,QAAQ,EAAE,SAAS,MAAM,EAAE,QAAQ,EAAE;AACzC,QAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;UAC3B,MAAM,MAAM,CAAC,GAAG,CAAA;AACxB,SAAA;;AAEA,QAAM,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO;AACjC,YAAU,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE;AACtC,UAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA;AAC9B,SAAO,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;UACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;AACzC,UAAQ,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAA;AAC9B,UAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAA;SAClB,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,EAAE;AACvD,UAAQ,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAA;AAC5B,SAAA;;AAEA,QAAM,OAAO,gBAAgB,CAAA;OACxB;;AAEL,MAAI,MAAM,EAAE,SAAS,UAAU,EAAE;AACjC,QAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;UACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACtC,UAAQ,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE;YACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC/C,aAAa,CAAC,KAAK,CAAC,CAAA;AAC9B,YAAU,OAAO,gBAAgB,CAAA;AACjC,WAAA;AACA,SAAA;OACK;;AAEL,MAAI,OAAO,EAAE,SAAS,MAAM,EAAE;AAC9B,QAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE;UACpD,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACtC,UAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE;AACrC,YAAU,IAAI,MAAM,GAAG,KAAK,CAAC,UAAU,CAAA;AACvC,YAAU,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;AACvC,cAAY,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA;cACvB,aAAa,CAAC,KAAK,CAAC,CAAA;AAChC,aAAA;AACA,YAAU,OAAO,MAAM,CAAA;AACvB,WAAA;AACA,SAAA;;AAEA;AACA;AACA,QAAM,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;OACzC;;MAED,aAAa,EAAE,SAAS,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE;QACrD,IAAI,CAAC,QAAQ,GAAG;AACtB,UAAQ,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;UAC1B,UAAU,EAAE,UAAU;AAC9B,UAAQ,OAAO,EAAE,OAAA;SACV,CAAA;;AAEP,QAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE;AAClC;AACA;AACA,UAAQ,IAAI,CAAC,GAAG,GAAGA,WAAS,CAAA;AAC5B,SAAA;;AAEA,QAAM,OAAO,gBAAgB,CAAA;AAC7B,OAAA;KACG,CAAA;;AAEH;AACA;AACA;AACA;AACA,IAAE,OAAO,OAAO,CAAA;;GAEf;AACD;AACA;AACA;AACA;AACA,IAA+B,MAAM,CAAC,OAAO,CAAG;AAChD,GAAC,CAAC,CAAA;;EAEF,IAAI;IACF,kBAAkB,GAAG,OAAO,CAAA;GAC7B,CAAC,OAAO,oBAAoB,EAAE;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACtC,MAAI,UAAU,CAAC,kBAAkB,GAAG,OAAO,CAAA;AAC3C,KAAG,MAAM;MACL,QAAQ,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAA;AACpD,KAAA;AACA,GAAA;;;;;;;ACxvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG,SAAS,CAAC,EAAE,CAAC,EAAE;AACnC,IAAI,aAAa,GAAG,MAAM,CAAC,cAAc;AACzC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;AACpF,QAAQ,UAAU,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACnF,IAAI,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC;AACF;AACO,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE;AAChC,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,IAAI,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;AAC3C,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AACzF,CAAC;AACD;AACO,IAAI,QAAQ,GAAG,WAAW;AACjC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC,EAAE;AACrD,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7D,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAY,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,SAAS;AACT,QAAQ,OAAO,CAAC,CAAC;AACjB,MAAK;AACL,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3C,EAAC;AACD;AACO,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;AAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AACf,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACvF,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU;AACvE,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChF,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,SAAS;AACT,IAAI,OAAO,CAAC,CAAC;AACb,CAAC;AAgBD;AACO,SAAS,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;AAC7D,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAChH,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE;AAC/D,QAAQ,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACnG,QAAQ,SAAS,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;AACtG,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;AACtH,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,KAAK,CAAC,CAAC;AACP,CAAC;AACD;AACO,SAAS,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE;AAC3C,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACrH,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,MAAM,KAAK,UAAU,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7J,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,UAAU,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;AACtE,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE;AACtB,QAAQ,IAAI,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;AACtE,QAAQ,OAAO,CAAC,EAAE,IAAI;AACtB,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACzK,YAAY,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AACpD,YAAY,QAAQ,EAAE,CAAC,CAAC,CAAC;AACzB,gBAAgB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM;AAC9C,gBAAgB,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACxE,gBAAgB,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;AACjE,gBAAgB,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS;AACjE,gBAAgB;AAChB,oBAAoB,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE;AAChI,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;AAC1G,oBAAoB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;AACzF,oBAAoB,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;AACvF,oBAAoB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC1C,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS;AAC3C,aAAa;AACb,YAAY,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACvC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;AAClE,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzF,KAAK;AACL;;ACvGA;SACgB,MAAM,CAAC,KAAc,EAAE,KAAa,EAAE,OAAe,EAAA;AACnE,IAAA,IAAI,KAAK,EAAE;AACT,QAAA,QAAQ,KAAK;AACX,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM;AACR,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM;AACR,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvB,MAAM;AACR,YAAA;AACE,gBAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrB,MAAM;AACT,SAAA;AACF,KAAA;AACH;;AClBA;;;;;;;;;;;;;;AAcG;AACH,IAAA,iBAAA,kBAAA,UAAA,MAAA,EAAA;IAAuC,SAAK,CAAA,iBAAA,EAAA,MAAA,CAAA,CAAA;IAM1C,SACE,iBAAA,CAAA,IAAY,EACZ,OAAe,EACf,UAAmB,EACnB,UAAmB,EACnB,OAA6B,EAAA;QAL/B,IAOE,KAAA,GAAA,MAAA,CAAA,IAAA,CAAA,IAAA,EAAM,OAAO,CAAC,IAWf,IAAA,CAAA;AAVC,QAAA,KAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;AAChC,QAAA,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,KAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,KAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,QAAA,KAAI,CAAC,OAAO,GAAG,OAAO,CAAC;;QAGvB,IAAI,KAAK,CAAC,iBAAiB,EAAE;AAC3B,YAAA,KAAK,CAAC,iBAAiB,CAAC,KAAI,EAAE,iBAAiB,CAAC,CAAC;AAClD,SAAA;;KACF;AAED;;AAEG;AACH,IAAA,iBAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,YAAA;AACE,QAAA,IAAI,QAAQ,GAAG,EAAG,CAAA,MAAA,CAAA,IAAI,CAAC,IAAI,EAAA,IAAA,CAAA,CAAA,MAAA,CAAK,IAAI,CAAC,IAAI,EAAM,KAAA,CAAA,CAAA,MAAA,CAAA,IAAI,CAAC,OAAO,CAAE,CAAC;QAE9D,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,QAAQ,IAAI,6BAAoB,CAAA,MAAA,CAAA,IAAI,CAAC,UAAU,CAAE,CAAC;AACnD,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,QAAQ,IAAI,8BAAqB,CAAA,MAAA,CAAA,IAAI,CAAC,UAAU,CAAE,CAAC;AACpD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACxD,YAAA,QAAQ,IAAI,0BAAA,CAAA,MAAA,CAAiB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAE,CAAC;AACtE,SAAA;AAED,QAAA,OAAO,QAAQ,CAAC;KACjB,CAAA;IACH,OAAC,iBAAA,CAAA;AAAD,CA9CA,CAAuC,KAAK,CA8C3C,EAAA;AAED;;;;;;;;;;;;AAYG;AACU,IAAA,UAAU,GAAG;;AAExB,IAAA,qBAAqB,EAAE,uBAAuB;AAC9C,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,oBAAoB,EAAE,sBAAsB;;AAG5C,IAAA,kBAAkB,EAAE,oBAAoB;AACxC,IAAA,mBAAmB,EAAE,qBAAqB;AAC1C,IAAA,mBAAmB,EAAE,qBAAqB;AAC1C,IAAA,qBAAqB,EAAE,uBAAuB;;AAG9C,IAAA,cAAc,EAAE,gBAAgB;AAChC,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,eAAe,EAAE,iBAAiB;AAClC,IAAA,eAAe,EAAE,iBAAiB;;AAGlC,IAAA,iBAAiB,EAAE,mBAAmB;AACtC,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,kBAAkB,EAAE,oBAAoB;;AAGxC,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,gBAAgB,EAAE,kBAAkB;AACpC,IAAA,cAAc,EAAE,gBAAgB;AAChC,IAAA,iBAAiB,EAAE,mBAAmB;;AAGtC,IAAA,oBAAoB,EAAE,sBAAsB;AAC5C,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,aAAa,EAAE,eAAe;EACrB;AAEX;;;;AAIG;AACI,IAAM,WAAW,GAAG;IACzB,aAAa,EAAE,UAAC,aAAkB,EAAA;AAChC,QAAA,IAAM,SAAS,GAAG,aAAa,CAAC,IAAI,KAAK,cAAc,IAAI,aAAa,CAAC,IAAI,KAAK,WAAW,CAAC;AAC9F,QAAA,IAAM,SAAS,GAAG,aAAa,CAAC,IAAI,KAAK,cAAc,CAAC;AAExD,QAAA,IAAI,SAAS,EAAE;YACb,OAAO,IAAI,iBAAiB,CAC1B,UAAU,CAAC,WAAW,EACtB,uCAAuC,EACvC,oEAAoE,EACpE,SAAS,EACT,EAAE,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,CACzC,CAAC;AACH,SAAA;AAED,QAAA,IAAI,SAAS,EAAE;YACb,OAAO,IAAI,iBAAiB,CAC1B,UAAU,CAAC,qBAAqB,EAChC,uCAAuC,EACvC,sHAAsH,EACtH,SAAS,EACT,EAAE,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,CACzC,CAAC;AACH,SAAA;QAED,OAAO,IAAI,iBAAiB,CAC1B,UAAU,CAAC,qBAAqB,EAChC,iBAAA,CAAA,MAAA,CAAkB,aAAa,CAAC,OAAO,CAAE,EACzC,6CAA6C,EAC7C,SAAS,EACT,EAAE,aAAa,EAAE,aAAa,CAAC,OAAO,EAAE,CACzC,CAAC;KACH;IAED,aAAa,EAAE,UAAC,OAA6B,EAAA;AAC3C,QAAA,IAAM,IAAI,GAAG,OAAO,KAAK,QAAQ,GAAG,UAAU,CAAC,kBAAkB,GAAG,UAAU,CAAC,mBAAmB,CAAC;AAEnG,QAAA,OAAO,IAAI,iBAAiB,CAC1B,IAAI,EACJ,UAAW,CAAA,MAAA,CAAA,OAAO,EAAM,MAAA,CAAA,EACxB,4DAAqD,OAAO,EAAA,MAAA,CAAM,EAClE,GAAG,CACJ,CAAC;KACH;IAED,iBAAiB,EAAE,UAAC,MAAc,EAAA;AAChC,QAAA,OAAO,IAAI,iBAAiB,CAC1B,UAAU,CAAC,mBAAmB,EAC9B,EAAG,CAAA,MAAA,CAAA,MAAM,4BAAyB,EAClC,+DAA+D,EAC/D,GAAG,CACJ,CAAC;KACH;IAED,cAAc,EAAE,UAAC,MAAc,EAAA;AAC7B,QAAA,IAAM,OAAO,GAAG,OAAO,MAAM,KAAK,WAAW;AAC3C,cAAE,kCAAkC;cAClC,+DAA+D,CAAC;AAEpE,QAAA,OAAO,IAAI,iBAAiB,CAC1B,UAAU,CAAC,eAAe,EAC1B,EAAA,CAAA,MAAA,CAAG,MAAM,EAAA,2BAAA,CAA2B,EACpC,mBAAoB,CAAA,MAAA,CAAA,OAAO,CAAE,EAC7B,GAAG,CACJ,CAAC;KACH;IAED,eAAe,EAAE,UAAC,QAAa,EAAA;AAC7B,QAAA,OAAO,IAAI,iBAAiB,CAC1B,UAAU,CAAC,oBAAoB,EAC/B,iDAAiD,EACjD,mFAAmF,EACnF,GAAG,EACH,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACzD,CAAC;KACH;IAED,WAAW,EAAE,UAAC,UAAmB,EAAA;QAC/B,OAAO,IAAI,iBAAiB,CAC1B,UAAU,CAAC,YAAY,EACvB,yBAAyB,EACzB,UAAU;cACN,OAAQ,CAAA,MAAA,CAAA,UAAU,EAA0B,0BAAA,CAAA;cAC5C,mCAAmC,EACvC,GAAG,EACH,EAAE,UAAU,EAAA,UAAA,EAAE,CACf,CAAC;KACH;AAED,IAAA,gBAAgB,EAAE,UAAC,YAAoB,EAAE,UAAkB,EAAA;AACzD,QAAA,IAAM,SAAS,GAAG;YAChB,MAAM,EAAE,UAAU,CAAC,gBAAgB;YACnC,IAAI,EAAE,UAAU,CAAC,cAAc;YAC/B,OAAO,EAAE,UAAU,CAAC,iBAAiB;AACtC,SAAA,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,oBAAoB,CAAC;QAEnD,OAAO,IAAI,iBAAiB,CAC1B,SAAS,EACT,UAAG,YAAY,EAAA,cAAA,CAAA,CAAA,MAAA,CAAe,UAAU,CAAE,EAC1C,iBAAA,CAAA,MAAA,CAAkB,YAAY,EAA+C,+CAAA,CAAA,EAC7E,GAAG,EACH,EAAE,YAAY,EAAA,YAAA,EAAE,UAAU,EAAA,UAAA,EAAE,CAC7B,CAAC;KACH;CACF;;ACxND,IAAM,WAAW,GAAGC,KAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAE1BA,KAAC;AACvB,KAAA,MAAM,CAAC;AACN,IAAA,KAAK,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC5B,IAAA,OAAO,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC9B,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC;AACD,KAAA,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,EAAE;AAErB,IAAA,UAAA,kBAAA,YAAA;AAME,IAAA,SAAA,UAAA,CACE,MAAc,EACd,GAAW,EACX,OAAoE,EAAA;AAApE,QAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAoE,GAAA,EAAA,CAAA,EAAA;QAEpE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;AACvC,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;QACvCC,yBAAK,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;KACvC;AAED;;AAEG;IACK,UAAS,CAAA,SAAA,CAAA,SAAA,GAAjB,UAAkB,KAAU,EAAA;;;QAE1B,IAAI,KAAK,YAAY,iBAAiB,EAAE;AACtC,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;;AAGD,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;YAC7B,OAAO,IAAI,iBAAiB,CAC1B,UAAU,CAAC,oBAAoB,EAC/B,kCAAkC,EAClC,mFAAmF,EACnF,SAAS,EACT,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,CAC9B,CAAC;AACH,SAAA;;AAGD,QAAA,OAAO,IAAI,iBAAiB,CAC1B,UAAU,CAAC,aAAa,EACxB,KAAK,CAAC,OAAO,IAAI,8BAA8B,EAC/C,6EAA6E,EAC7E,SAAS,EACT;AACE,YAAA,SAAS,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,WAAW,0CAAE,IAAI;YAClC,KAAK,EAAE,KAAK,CAAC,KAAK;AACnB,SAAA,CACF,CAAC;KACH,CAAA;AAED;;AAEG;IACK,UAAoB,CAAA,SAAA,CAAA,oBAAA,GAA5B,UAA6B,MAAc,EAAA;AACzC,QAAA,QAAQ,MAAM;AACZ,YAAA,KAAK,GAAG,EAAE,OAAO,+BAA+B,CAAC;AACjD,YAAA,KAAK,GAAG,EAAE,OAAO,uCAAuC,CAAC;AACzD,YAAA,KAAK,GAAG,EAAE,OAAO,4CAA4C,CAAC;AAC9D,YAAA,KAAK,GAAG,EAAE,OAAO,sCAAsC,CAAC;AACxD,YAAA,KAAK,GAAG,EAAE,OAAO,sCAAsC,CAAC;AACxD,YAAA,KAAK,GAAG,CAAC;AACT,YAAA,KAAK,GAAG,CAAC;AACT,YAAA,KAAK,GAAG,CAAC;AACT,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,uCAAuC,CAAC;AACjD,YAAA;gBACE,OAAO,MAAM,IAAI,GAAG;AAClB,sBAAE,+FAA+F;sBAC/F,oDAAoD,CAAC;AAC5D,SAAA;KACF,CAAA;IAEK,UAAY,CAAA,SAAA,CAAA,YAAA,GAAlB,UAAmB,KAAU,EAAA;;;;;;gBAE3B,IAAI,KAAK,YAAY,iBAAiB,EAAE;AACtC,oBAAA,MAAM,KAAK,CAAC;AACb,iBAAA;gBACD,IAAI,KAAK,CAAC,QAAQ,EAAE;AAGZ,oBAAA,QAAA,GAAS,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/B,oBAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEjC,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,sBAAuB,CAAA,MAAA,CAAA,QAAM,EAAM,KAAA,CAAA,CAAA,MAAA,CAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAE,CAAC,CAAC;oBACvF,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,4BAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAE,CAAC,CAAC;oBAGrF,YAAY,GAAG,CAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,KAAK,MAAI,IAAI,aAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,OAAO,CAAA,IAAI,iCAAA,CAAA,MAAA,CAAkC,QAAM,CAAE,CAAC;;oBAGhG,IAAI,QAAM,KAAK,GAAG,EAAE;wBACZ,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;wBACzD,MAAM,IAAI,iBAAiB,CACzB,UAAU,CAAC,YAAY,EACvB,YAAY,EACZ,UAAU;8BACN,OAAQ,CAAA,MAAA,CAAA,UAAU,EAA0B,0BAAA,CAAA;AAC9C,8BAAE,mCAAmC,EACvC,QAAM,EACN;AACE,4BAAA,GAAG,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,0CAAE,GAAG;AACtB,4BAAA,MAAM,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,0CAAE,MAAM;AAC5B,4BAAA,WAAW,EAAE,IAAI;AACjB,4BAAA,UAAU,EAAA,UAAA;AACX,yBAAA,CACF,CAAC;AACH,qBAAA;;AAGD,oBAAA,MAAM,IAAI,iBAAiB,CACzB,UAAU,CAAC,oBAAoB,EAC/B,YAAY,EACZ,IAAI,CAAC,oBAAoB,CAAC,QAAM,CAAC,EACjC,QAAM,EACN;AACE,wBAAA,GAAG,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,0CAAE,GAAG;AACtB,wBAAA,MAAM,EAAE,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,0CAAE,MAAM;wBAC5B,WAAW,EAAE,IAAI;AAClB,qBAAA,CACF,CAAC;AAEH,iBAAA;qBAAM,IAAI,KAAK,CAAC,OAAO,EAAE;;AAExB,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,wBAAA,CAAA,MAAA,CAAyB,KAAK,CAAC,OAAO,CAAE,CAAC,CAAC;AAEtE,oBAAA,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAExC,iBAAA;AAAM,qBAAA;;AAEL,oBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,uBAAA,CAAA,MAAA,CAAwB,KAAK,CAAC,OAAO,CAAE,CAAC,CAAC;;AAGrE,oBAAA,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7B,iBAAA;;;AACF,KAAA,CAAA;AAEK,IAAA,UAAA,CAAA,SAAA,CAAA,UAAU,GAAhB,UAAiB,IAAY,EAAE,IAAY,EAAA;;;;;;;wBAEtB,OAAM,CAAA,CAAA,YAAAA,yBAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE;AACtD,gCAAA,OAAO,EAAE;oCACP,WAAW,EAAE,IAAI,CAAC,GAAG;AACtB,iCAAA;AACF,6BAAA,CAAC,CAAA,CAAA;;AAJI,wBAAA,QAAQ,GAAG,EAIf,CAAA,IAAA,EAAA,CAAA;wBAEF,IAAI;4BACF,OAAO,CAAA,CAAA,aAAA,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AACzC,yBAAA;AAAC,wBAAA,OAAO,UAAe,EAAE;AACxB,4BAAA,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAClC,yBAAA;;;;AAED,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,YAAY,CAAC,OAAK,CAAC,CAAA,CAAA;;AAA9B,wBAAA,EAAA,CAAA,IAAA,EAA8B,CAAC;;;;;;AAElC,KAAA,CAAA;AAEK,IAAA,UAAA,CAAA,SAAA,CAAA,OAAO,GAAb,UAAc,IAAa,EAAE,MAAe,EAAA;;;;;;;wBAEvB,OAAM,CAAA,CAAA,YAAAA,yBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE;AACnD,gCAAA,MAAM,EAAE,MAAM;AACd,gCAAA,OAAO,EAAE;oCACP,WAAW,EAAE,IAAI,CAAC,GAAG;AACtB,iCAAA;AACF,6BAAA,CAAC,CAAA,CAAA;;AALI,wBAAA,QAAQ,GAAG,EAKf,CAAA,IAAA,EAAA,CAAA;wBAEF,IAAI;4BACF,OAAO,CAAA,CAAA,aAAA,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AACzC,yBAAA;AAAC,wBAAA,OAAO,UAAe,EAAE;AACxB,4BAAA,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAClC,yBAAA;;;;AAED,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,YAAY,CAAC,OAAK,CAAC,CAAA,CAAA;;AAA9B,wBAAA,EAAA,CAAA,IAAA,EAA8B,CAAC;;;;;;AAElC,KAAA,CAAA;IAEK,UAAQ,CAAA,SAAA,CAAA,QAAA,GAAd,UACE,IAAY,EACZ,IAA0B,EAC1B,OAA6B,EAC7B,MAA8B,EAAA;AAA9B,QAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAA8B,GAAA,WAAA,CAAA,EAAA;;;;;;;wBAGX,OAAM,CAAA,CAAA,YAAAA,yBAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE;gCAC1D,OAAO,EAAA,QAAA,CAAA,EACL,WAAW,EAAE,IAAI,CAAC,GAAG,EAAA,EAClB,OAAO,CACX;AACF,6BAAA,CAAC,CAAA,CAAA;;AALI,wBAAA,QAAQ,GAAG,EAKf,CAAA,IAAA,EAAA,CAAA;wBAEF,IAAI;4BACF,OAAO,CAAA,CAAA,aAAA,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;AACpC,yBAAA;AAAC,wBAAA,OAAO,UAAe,EAAE;AACxB,4BAAA,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAClC,yBAAA;;;;AAED,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,YAAY,CAAC,OAAK,CAAC,CAAA,CAAA;;AAA9B,wBAAA,EAAA,CAAA,IAAA,EAA8B,CAAC;;;;;;AAElC,KAAA,CAAA;AAEK,IAAA,UAAA,CAAA,SAAA,CAAA,OAAO,GAAb,UAAc,IAAY,EAAE,IAAY,EAAA;;;;;;;wBAEnB,OAAM,CAAA,CAAA,YAAAA,yBAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE;AACzD,gCAAA,OAAO,EAAE;oCACP,WAAW,EAAE,IAAI,CAAC,GAAG;AACtB,iCAAA;AACF,6BAAA,CAAC,CAAA,CAAA;;AAJI,wBAAA,QAAQ,GAAG,EAIf,CAAA,IAAA,EAAA,CAAA;wBACF,OAAO,CAAA,CAAA,aAAA,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;;;AAExC,wBAAA,OAAA,CAAA,CAAA,aAAO,IAAI,CAAC,YAAY,CAAC,OAAK,CAAC,CAAC,CAAA;;;;;AAEnC,KAAA,CAAA;IACH,OAAC,UAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC/ND,IAAA,QAAA,kBAAA,UAAA,MAAA,EAAA;IAA8B,SAAU,CAAA,QAAA,EAAA,MAAA,CAAA,CAAA;AAEtC,IAAA,SAAA,QAAA,CACE,GAAW,EACX,IAAY,EACZ,OAAoE,EAAA;AAApE,QAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAoE,GAAA,EAAA,CAAA,EAAA;QAHtE,IAYC,KAAA,GAAA,IAAA,CAAA;AAPO,QAAA,IAAA,EAIF,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,OAAO,GAAI,EAAE,CAHf,CAAA,EAAA,CAAA,OAAc,CAAd,CACa,EAAA,CAAA,KAAA,CAAA,KACb,EAAA,GAAA,EAAA,CAAA,MAAuC,CAAvC,CAAA,MAAM,GAAG,EAAA,KAAA,KAAA,CAAA,GAAA,8BAA8B,MACvB;AAClB,QAAA,KAAA,GAAA,MAAA,CAAA,IAAA,CAAA,IAAA,EAAM,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,IAAA,IAAA,CAAA;AAC3B,QAAA,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;KAClB;AAEO,IAAA,QAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,IAAY,EAAE,EAAU,EAAA;;AAEzC,QAAA,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;;QAGd,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;AAE1C,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED,IAAA,QAAA,CAAA,SAAA,CAAA,MAAM,GAAN,UAAO,EAAU,EAAE,IAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAE3C,OAAO,MAAA,CAAA,SAAA,CAAM,UAAU,CAAC,IAAA,CAAA,IAAA,EAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KAC1C,CAAA;AAED,IAAA,QAAA,CAAA,SAAA,CAAA,GAAG,GAAH,UAAI,EAAW,EAAE,MAAY,EAAA;;QAE3B,IAAI,CAAC,EAAE,EAAE;YACP,EAAE,GAAG,EAAE,CAAC;AACT,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;AAG3C,QAAA,IAAM,EAAgC,GAAA,MAAM,IAAI,EAAE,EAA1C,MAAM,GAAA,EAAA,CAAA,MAAA,EAAK,cAAc,GAAA,MAAA,CAAA,EAAA,EAA3B,CAA6B,QAAA,CAAA,CAAe,CAAC;AACnD,QAAA,IAAM,aAAa,GACd,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,cAAc,CACd,EAAA,MAAM;SACV,CAAC;QAEF,OAAO,MAAA,CAAA,SAAA,CAAM,OAAO,CAAC,IAAA,CAAA,IAAA,EAAA,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;KAChD,CAAA;IAED,QAAI,CAAA,SAAA,CAAA,IAAA,GAAJ,UAAK,IAAS,EAAA;AACZ,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;AAG3C,QAAA,IAAM,EAA8B,GAAA,IAAI,IAAI,EAAE,EAAtC,MAAM,GAAA,EAAA,CAAA,MAAA,EAAK,YAAY,GAAA,MAAA,CAAA,EAAA,EAAzB,CAA2B,QAAA,CAAA,CAAa,CAAC;AAC/C,QAAA,IAAM,WAAW,GACZ,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,YAAY,CACZ,EAAA,MAAM;SACV,CAAC;QAEF,OAAO,MAAA,CAAA,SAAA,CAAM,QAAQ,CAAC,IAAA,CAAA,IAAA,EAAA,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;KAC/C,CAAA;AAED,IAAA,QAAA,CAAA,SAAA,CAAA,GAAG,GAAH,UAAI,EAAU,EAAE,IAAY,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAE3C,OAAO,MAAA,CAAA,SAAA,CAAM,OAAO,CAAC,IAAA,CAAA,IAAA,EAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACvC,CAAA;IACH,OAAC,QAAA,CAAA;AAAD,CApEA,CAA8B,UAAU,CAoEvC,CAAA;;ACnED,IAAA,YAAA,kBAAA,UAAA,MAAA,EAAA;IAAkC,SAAU,CAAA,YAAA,EAAA,MAAA,CAAA,CAAA;IAC1C,SACE,YAAA,CAAA,GAAW,EACX,OAAoE,EAAA;AAApE,QAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAoE,GAAA,EAAA,CAAA,EAAA;AAE9D,QAAA,IAAA,EACJ,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,OAAO,GAAI,EAAE,CADP,CAAA,EAAA,CAAA,OAAc,CAAd,CAA6B,EAAA,CAAA,KAAA,CAAA,KAAE,EAAA,GAAA,EAAA,CAAA,MAAuC,CAAvC,CAAA,MAAM,GAAG,EAAA,KAAA,KAAA,CAAA,GAAA,8BAA8B,MAC9D;AAChB,QAAA,OAAA,MAAA,CAAA,IAAA,CAAA,IAAA,EAAM,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,IAAA,IAAA,CAAA;KAC5B;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,YAAA;AACE,QAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,6BAA6B,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACjI,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,SAAS,GAAT,YAAA;AACE,QAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,8BAA8B,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAClI,CAAA;AAED,IAAA,YAAA,CAAA,SAAA,CAAA,KAAK,GAAL,YAAA;AACE,QAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAChH,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CArBA,CAAkC,UAAU,CAqB3C,CAAA;;ACrBD,IAAA,aAAA,kBAAA,UAAA,MAAA,EAAA;IAAmC,SAAU,CAAA,aAAA,EAAA,MAAA,CAAA,CAAA;IAC3C,SACE,aAAA,CAAA,GAAW,EACX,OAAoE,EAAA;AAApE,QAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAAoE,GAAA,EAAA,CAAA,EAAA;AAE9D,QAAA,IAAA,EAIF,GAAA,OAAO,KAAP,IAAA,IAAA,OAAO,KAAP,KAAA,CAAA,GAAA,OAAO,GAAI,EAAE,CAHf,CAAA,EAAA,CAAA,OAAc,CAAd,CACa,EAAA,CAAA,KAAA,CAAA,KACb,EAAA,GAAA,EAAA,CAAA,MAAuC,CAAvC,CAAA,MAAM,GAAG,EAAA,KAAA,KAAA,CAAA,GAAA,8BAA8B,MACvB;AAClB,QAAA,OAAA,MAAA,CAAA,IAAA,CAAA,IAAA,EAAM,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,IAAA,IAAA,CAAA;KAC5B;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE;YAC5C,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,EAAE;YAChD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,KAAK,GAAL,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,0BAA0B,EAAE;YACxD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,4BAA4B,EAAE;YAC1D,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,SAAS,GAAT,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,gCAAgC,EAAE;YAC9D,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,aAAa,GAAb,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,oCAAoC,EAAE;YAClE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,cAAc,GAAd,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,qCAAqC,EAAE;YACnE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,EAAE;YAChE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,iCAAiC,EAAE;YAC/D,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,2BAA2B,EAAE;YACzD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,iCAAiC,EAAE;YAC/D,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,iCAAiC,EAAE;YAC/D,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,GAAG,GAAH,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,EAAE;YACtD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,4BAA4B,EAAE;YAC1D,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,KAAK,GAAL,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,0BAA0B,EAAE;YACxD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,kCAAkC,EAAE;YAChE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,mCAAmC,EAAE;YACjE,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,6BAA6B,EAAE;YAC3D,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,SAAS,GAAT,YAAA;QACE,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,8BAA8B,EAAE;YAC5D,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;AACpB,SAAA,CAAC,CAAC;KACJ,CAAA;IACH,OAAC,aAAA,CAAA;AAAD,CApKA,CAAmC,UAAU,CAoK5C,CAAA;;AC5ID;;;;;;;;;;;;;;;;;;;AAmBG;AACH,IAAA,MAAA,kBAAA,YAAA;AAKE,IAAA,SAAA,MAAA,CAAY,MAAoB,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACvE,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;QAE5C,IAAI,MAAM,CAAC,UAAU,EAAE;AACrB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC3E,SAAA;KACF;;AAID;;;;;;AAMG;AACH,IAAA,MAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KACrC,CAAA;AAED;;;;;;AAMG;AACH,IAAA,MAAA,CAAA,SAAA,CAAA,SAAS,GAAT,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;KACtC,CAAA;AAED;;;;;;;AAOG;AACH,IAAA,MAAA,CAAA,SAAA,CAAA,KAAK,GAAL,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;KAClC,CAAA;;AAID;;;;;;;AAOG;AACH,IAAA,MAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;AACvC,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,OAAO,EAAE,CAAC;KACtC,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;AAC3C,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,WAAW,EAAE,CAAC;KAC1C,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,KAAK,GAAL,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,KAAK,EAAE,CAAC;KACpC,CAAA;AAED;;;;;;;;;AASG;AACH,IAAA,MAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;AACvC,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,OAAO,EAAE,CAAC;KACtC,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,SAAS,GAAT,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,SAAS,EAAE,CAAC;KACxC,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,aAAa,GAAb,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAC7C,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,aAAa,EAAE,CAAC;KAC5C,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,cAAc,GAAd,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;AAC9C,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,cAAc,EAAE,CAAC;KAC7C,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;AAC3C,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,WAAW,EAAE,CAAC;KAC1C,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;AAC1C,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,UAAU,EAAE,CAAC;KACzC,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,MAAM,GAAN,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,MAAM,EAAE,CAAC;KACrC,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;AAC1C,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,UAAU,EAAE,CAAC;KACzC,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;AAC1C,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,UAAU,EAAE,CAAC;KACzC,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,GAAG,GAAH,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,GAAG,EAAE,CAAC;KAClC,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;AACvC,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,OAAO,EAAE,CAAC;KACtC,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;AAC3C,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,WAAW,EAAE,CAAC;KAC1C,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;AAC5C,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,YAAY,EAAE,CAAC;KAC3C,CAAA;AAED;;;;;;;;AAQG;AACH,IAAA,MAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;AACxC,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,QAAQ,EAAE,CAAC;KACvC,CAAA;AAED,IAAA,MAAA,CAAA,SAAA,CAAA,SAAS,GAAT,YAAA;AACE,QAAA,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;AACzC,QAAA,OAAO,IAAI,CAAC,aAAc,CAAC,SAAS,EAAE,CAAC;KACxC,CAAA;;AAID;;AAEG;AACH,IAAA,MAAA,CAAA,SAAA,CAAA,eAAe,GAAf,YAAA;QACE,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B,CAAA;AAED;;AAEG;AACH,IAAA,MAAA,CAAA,SAAA,CAAA,mBAAmB,GAAnB,YAAA;QACE,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAC9B,CAAA;;IAGO,MAAoB,CAAA,SAAA,CAAA,oBAAA,GAA5B,UAA6B,MAAc,EAAA;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,MAAM,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC7C,SAAA;KACF,CAAA;IACH,OAAC,MAAA,CAAA;AAAD,CAAC,EAAA;;AC9OD,IAAA,cAAA,kBAAA,YAAA;AACE,IAAA,SAAA,cAAA,GAAA;KAAgB;AAET,IAAA,cAAA,CAAA,SAAA,CAAA,UAAU,GAAjB,YAAA;QACE,OAAO,QAAQ,CAAC,MAAM,CAAC;KACxB,CAAA;AAEM,IAAA,cAAA,CAAA,SAAA,CAAA,OAAO,GAAd,YAAA;AACE,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC7B,CAAA;AAEM,IAAA,cAAA,CAAA,SAAA,CAAA,WAAW,GAAlB,YAAA;AACE,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;KACjC,CAAA;AAEM,IAAA,cAAA,CAAA,SAAA,CAAA,OAAO,GAAd,YAAA;AACE,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;AAC3B,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACjC,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,EAAG,CAAA,MAAA,CAAA,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAG,CAAA,MAAA,CAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAE,CAAC;AAC/D,SAAA;KACF,CAAA;AAEM,IAAA,cAAA,CAAA,SAAA,CAAA,cAAc,GAArB,YAAA;AACE,QAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC7B,CAAA;AAEM,IAAA,cAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,KAAa,EAAE,UAAmC,EAAE,MAAe,EAAA;AAApD,QAAA,IAAA,UAAA,KAAA,KAAA,CAAA,EAAA,EAAA,UAAmC,GAAA,cAAA,CAAA,EAAA;AACjE,QAAA,IAAM,aAAa,GAAQ;AACzB,YAAA,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,IAAI;SACb,CAAC;;AAGF,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;AAC/B,SAAA;AAED,QAAA,QAAQ,CAAC,MAAM,GAAG,EAAA,CAAA,MAAA,CAAG,UAAU,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,KAAK,EAAA,IAAA,CAAA,CAAA,MAAA,CAAK,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AACpE,aAAA,GAAG,CAAC,UAAC,GAAG,EAAA,EAAK,OAAA,EAAG,CAAA,MAAA,CAAA,GAAG,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,aAAa,CAAC,GAAG,CAAC,CAAE,CAAA,EAAA,CAAC;AAC5C,aAAA,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;KACjB,CAAA;IAEM,cAAmB,CAAA,SAAA,CAAA,mBAAA,GAA1B,UAA2B,GAAW,EAAA;AACpC,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAClC,CAAA;AAEM,IAAA,cAAA,CAAA,SAAA,CAAA,mBAAmB,GAA1B,UAA2B,GAAW,EAAE,KAAa,EAAA;AACnD,QAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KAClC,CAAA;IAEM,cAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,GAAW,EAAA;AACzB,QAAA,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;KAC5B,CAAA;IACH,OAAC,cAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACpDD,IAAA,oBAAA,kBAAA,YAAA;IAGE,SAAY,oBAAA,CAAA,KAAwB,kCAAgC;AAClE,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;IAEM,oBAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,UAAkB,EAAA;AACjC,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACrC,IAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AAED,QAAA,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;KAC7B,CAAA;AAEM,IAAA,oBAAA,CAAA,SAAA,CAAA,UAAU,GAAjB,YAAA;AACE,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACrC,QAAA,IAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAE/B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AAED,QAAA,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;KACzB,CAAA;AAEM,IAAA,oBAAA,CAAA,SAAA,CAAA,OAAO,GAAd,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;KAC3C,CAAA;AAEM,IAAA,oBAAA,CAAA,SAAA,CAAA,WAAW,GAAlB,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;KACpE,CAAA;AAEM,IAAA,oBAAA,CAAA,SAAA,CAAA,OAAO,GAAd,YAAA;AACE,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACzB,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,EAAG,CAAA,MAAA,CAAA,IAAI,CAAC,OAAO,CAAC,GAAG,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAE,CAAC;AAC1D,SAAA;KACF,CAAA;AAEM,IAAA,oBAAA,CAAA,SAAA,CAAA,cAAc,GAArB,YAAA;AACE,QAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AACpC,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAC5B,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAE5B,QAAA,OAAO,UAAG,QAAQ,EAAA,KAAA,CAAA,CAAA,MAAA,CAAM,IAAI,CAAG,CAAA,MAAA,CAAA,IAAI,CAAE,CAAC;KACvC,CAAA;AAEM,IAAA,oBAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;KAC9B,CAAA;AAEM,IAAA,oBAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,UAAkB,EAAE,WAAmB,EAAA;AACtD,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG;AACjC,YAAA;AACE,gBAAA,GAAG,EAAE,UAAU;AACf,gBAAA,KAAK,EAAE,WAAW;AACnB,aAAA;SACF,CAAC;KACH,CAAA;IAEM,oBAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,GAAW,EAAA;AACzB,QAAA,IAAI,QAAQ,GAAG;AACb,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,iBAAiB,EAAE,OAAO;AAC1B,YAAA,OAAO,EAAE;AACP,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,GAAG,EAAE,UAAU;AACf,wBAAA,KAAK,EAAE,GAAG;AACX,qBAAA;AACF,iBAAA;AACD;;;;;AAKM;AACN,gBAAA,eAAe,EAAE;AACf,oBAAA;AACE,wBAAA,GAAG,EAAE,eAAe;AACpB,wBAAA,KAAK,EAAE,qCAAqC;AAC7C,qBAAA;AACF,iBAAA;AACD,gBAAA,OAAO,EAAE;AACP,oBAAA;AACE,wBAAA,GAAG,EAAE,SAAS;AACd,wBAAA,KAAK,EAAE,+BAA+B;AACvC,qBAAA;AACF,iBAAA;AACD,gBAAA,MAAM,EAAE;AACN,oBAAA;AACE,wBAAA,GAAG,EAAE,QAAQ;AACb,wBAAA,KAAK,EAAE,UAAU;AAClB,qBAAA;AACF,iBAAA;AACF,aAAA;SACF,CAAC;AACF,QAAA,OAAO,QAAQ,CAAC;KACjB,CAAA;IACH,OAAC,oBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACvGD,IAAA,qBAAA,kBAAA,YAAA;IAIE,SACE,qBAAA,CAAA,YAA+B,EAC/B,aAAiC,EAAA;;AAGjC,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC;KAC/B;IAEM,qBAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,UAAkB,EAAA;AACjC,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACrC,IAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AAED,QAAA,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;KAC7B,CAAA;AAEM,IAAA,qBAAA,CAAA,SAAA,CAAA,OAAO,GAAd,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;KAC3C,CAAA;AAEM,IAAA,qBAAA,CAAA,SAAA,CAAA,WAAW,GAAlB,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;KACpE,CAAA;AAEM,IAAA,qBAAA,CAAA,SAAA,CAAA,OAAO,GAAd,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;KACzB,CAAA;AAIM,IAAA,qBAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,KAAmC,EAAE,UAAmC,EAAE,MAAe,EAAA;AAApD,QAAA,IAAA,UAAA,KAAA,KAAA,CAAA,EAAA,EAAA,UAAmC,GAAA,cAAA,CAAA,EAAA;AACvF,QAAA,IAAM,aAAa,GAAQ;AACzB,YAAA,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,IAAI;SACb,CAAC;;AAGF,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;AAC/B,SAAA;;AAGD,QAAA,IAAM,YAAY,GAAG,EAAG,CAAA,MAAA,CAAA,UAAU,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,KAAK,EAAK,IAAA,CAAA,CAAA,MAAA,CAAA,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AACvE,aAAA,GAAG,CAAC,UAAC,GAAG,EAAA,EAAK,OAAA,EAAG,CAAA,MAAA,CAAA,GAAG,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,aAAa,CAAC,GAAG,CAAC,CAAE,CAAA,EAAA,CAAC;AAC5C,aAAA,IAAI,CAAC,IAAI,CAAC,CAAE,CAAC;AAEhB,QAAA,IAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAClE,QAAA,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC;QAEtD,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB,CAAA;IACH,OAAC,qBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC7DD,IAAA,aAAA,kBAAA,YAAA;IAII,SAAY,aAAA,CAAA,GAAQ,EAAE,GAAQ,EAAA;;AAE5B,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;KACrB;IAEM,aAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,UAAkB,EAAA;QACjC,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAElD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AAED,QAAA,OAAO,WAAW,CAAC;KACpB,CAAA;AAEM,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAjB,YAAA;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KACnC,CAAA;AAEM,IAAA,aAAA,CAAA,SAAA,CAAA,OAAO,GAAd,YAAA;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;KACjC,CAAA;AAEM,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAlB,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;KAC9B,CAAA;AAEM,IAAA,aAAA,CAAA,SAAA,CAAA,OAAO,GAAd,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;KACjC,CAAA;AAEM,IAAA,aAAA,CAAA,SAAA,CAAA,cAAc,GAArB,YAAA;AACE,QAAA,QACE,IAAI,CAAC,OAAO,CAAC,QAAQ;YACrB,KAAK;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,EACxB;KACH,CAAA;AAEM,IAAA,aAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;KACxB,CAAA;AAEM,IAAA,aAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,KAAmC,EAAE,UAAmC,EAAE,MAAe,EAAA;AAApD,QAAA,IAAA,UAAA,KAAA,KAAA,CAAA,EAAA,EAAA,UAAmC,GAAA,cAAA,CAAA,EAAA;AACvF,QAAA,IAAM,aAAa,GAAQ;AACzB,YAAA,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,IAAI;SACb,CAAC;;AAGF,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;AAC/B,SAAA;;AAGD,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAC5B,YAAY,EACZ,EAAA,CAAA,MAAA,CAAG,UAAU,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,KAAK,EAAK,IAAA,CAAA,CAAA,MAAA,CAAA,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;AAClD,aAAA,GAAG,CAAC,UAAC,GAAG,EAAA,EAAK,OAAA,EAAG,CAAA,MAAA,CAAA,GAAG,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,aAAa,CAAC,GAAG,CAAC,CAAE,CAAA,EAAA,CAAC;AAC5C,aAAA,IAAI,CAAC,IAAI,CAAC,CAAE,CAChB,CAAC;KACH,CAAA;IAEM,aAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,GAAW,EAAA;QACzB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,eAAe,EAAE,+BAA+B,CAAC,CAAC;QAC1E,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACzC,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC;AAC/B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;KAC5B,CAAA;IACH,OAAC,aAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACnEH;AACA,IAAA,cAAA,kBAAA,YAAA;;AAEE,IAAA,SAAA,cAAA,CAAY,MAA4B,EAAA;;;AAEtC,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE;;AAEhC,YAAA,QAAQ,CAAA,EAAA,GAAA,MAAM,CAAC,WAAW,0CAAE,OAAO,CAAC,CAAC,CAAA,CAAE,EAAE,CAAC,MAAM,CAAC,SAAS;AACxD,gBAAA,KAAK,gBAAgB,CAAC;AACtB,gBAAA,KAAK,gBAAgB;;AAEnB,oBAAA,IAAM,YAAY,GAChB,MAAM,CAAC,WAAgD,CAAC;AAC1D,oBAAA,OAAO,IAAI,oBAAoB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAGtE,gBAAA,KAAK,iBAAiB,CAAC;AACvB,gBAAA,KAAK,iBAAiB;;AAEpB,oBAAA,IAAM,aAAa,GACjB,MAAM,CAAC,WAAiD,CAAC;oBAC3D,OAAO,IAAI,qBAAqB,CAC9B,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EACnC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CACrC,CAAC;AAEL,aAAA;;AAEF,SAAA;aAAM,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;YACtD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;;AAE3D,SAAA;AAAM,aAAA;YACL,OAAO,IAAI,cAAc,EAAE,CAAC;AAC7B,SAAA;KACF;IACH,OAAC,cAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AChDe,SAAA,oBAAoB,CAAC,IAAY,EAAE,QAAgB,EAAA;;IAEjE,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAChC,IAAA,OAAO,MAAM,CAAA;AACf;;ACFA;AACO,IAAM,UAAU,GAAGD,KAAC,CAAC,MAAM,CAAC;AACjC,IAAA,MAAM,EAAEA,KAAC,CAAC,MAAM,EAAE;AAClB,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACjC,IAAA,WAAW,EAAEA,KAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;AAC5D,IAAA,gBAAgB,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACvC,IAAA,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE;AAChB,IAAA,OAAO,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC/B,CAAA,CAAC,CAAC;AAEI,IAAM,WAAW,GAAGA,KAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAE/C;AACiCA,KAAC,CAAC,MAAM,CAAC;AACxC,IAAA,KAAK,EAAEA,KAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;AAC7B,IAAA,YAAY,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACnC,IAAA,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC3B,IAAA,OAAO,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC9B,IAAA,WAAW,EAAEA,KAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;AACnC,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACjC,IAAA,aAAa,EAAEA,KAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;AACrC,IAAA,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;AACnC,IAAA,WAAW,EAAEA,KAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;AACnC,IAAA,SAAS,EAAEA,KAAC,CAAC,MAAM,CAAC;AAClB,QAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE;AACtB,QAAA,OAAO,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC/B,KAAA,CAAC,CAAC,QAAQ,EAAE;AACd,CAAA,EAAE;AAE8BA,KAAC,CAAC,MAAM,CAAC;AACxC,IAAA,SAAS,EAAEA,KAAC,CAAC,MAAM,EAAE;AACrB,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAClC,CAAA,EAAE;AAEI,IAAM,uBAAuB,GAAGA,KAAC,CAAC,MAAM,CAAC;AAC9C,IAAA,MAAM,EAAEA,KAAC,CAAC,MAAM,EAAE;AAClB,IAAA,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE;AAChB,IAAA,aAAa,EAAEA,KAAC,CAAC,MAAM,EAAE;AACzB,IAAA,WAAW,EAAEA,KAAC,CAAC,MAAM,EAAE;AACvB,IAAA,WAAW,EAAEA,KAAC,CAAC,MAAM,EAAE;AACxB,CAAA,CAAC,CAAC;AAEH;AACoCA,KAAC,CAAC,MAAM,CAAC;AAC3C,IAAA,KAAK,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC5B,IAAA,EAAE,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACzB,IAAA,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC3B,IAAA,GAAG,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC1B,IAAA,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;;AAE3B,IAAA,MAAM,EAAEA,KAAC,CAAC,MAAM,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;AACrC,CAAA,EAAE;AAEmCA,KAAC,CAAC,MAAM,CAAC;AAC7C,IAAA,SAAS,EAAEA,KAAC,CAAC,MAAM,EAAE;AACrB,IAAA,iBAAiB,EAAE,uBAAuB;AAC3C,CAAA,EAAE;AAE0BA,KAAC;AAC3B,KAAA,MAAM,CAAC;AACN,IAAA,QAAQ,EAAEA,KAAC,CAAC,MAAM,EAAE;AACpB,IAAA,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE;CACjB,CAAC;AACD,KAAA,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,EAAE;AAErB;AACO,IAAM,YAAY,GAAGA,KAAC;AAC1B,KAAA,MAAM,CAAC;IACN,MAAM,EAAEA,KAAC,CAAC,KAAK,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC;AACxB,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC;AACD,KAAA,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAEd,IAAM,kBAAkB,GAAGA,KAAC,CAAC,MAAM,CAAC;IACzC,SAAS,EAAEA,KAAC,CAAC,MAAM,CAACA,KAAC,CAAC,OAAO,EAAE,CAAC;IAChC,SAAS,EAAEA,KAAC,CAAC,MAAM,CAACA,KAAC,CAAC,OAAO,EAAE,CAAC;IAChC,KAAK,EAAEA,KAAC,CAAC,MAAM,CAACA,KAAC,CAAC,MAAM,EAAE,CAAC;AAC5B,CAAA,CAAC,CAAC;AAEgCA,KAAC,CAAC,MAAM,CAAC;AAC1C,IAAA,WAAW,EAAEA,KAAC,CAAC,MAAM,EAAE;AACvB,IAAA,iBAAiB,EAAEA,KAAC,CAAC,MAAM,EAAE;AAC9B,CAAA,EAAE;AAEH;AACO,IAAM,cAAc,GAAGA,KAAC;AAC5B,KAAA,MAAM,CAAC;AACN,IAAA,MAAM,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC7B,IAAA,WAAW,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAClC,IAAA,gBAAgB,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACvC,IAAA,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC3B,IAAA,MAAM,EAAEA,KAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;AAC9B,IAAA,OAAO,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC;AACD,KAAA,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAEUA,KAAC,CAAC,KAAK,CACpCA,KAAC,CAAC,MAAM,CAAC;AACP,IAAA,GAAG,EAAEA,KAAC,CAAC,MAAM,EAAE;AACf,IAAA,GAAG,EAAEA,KAAC,CAAC,MAAM,EAAE;AAChB,CAAA,CAAC,EACF;AAEqCA,KAAC,CAAC,MAAM,CAAC;IAC9C,UAAU,EAAEA,KAAC,CAAC,QAAQ,CAACA,KAAC,CAAC,OAAO,EAAE,CAAC;IACnC,OAAO,EAAEA,KAAC,CAAC,QAAQ,CAACA,KAAC,CAAC,OAAO,EAAE,CAAC;AACjC,CAAA,EAAE;AAEkCA,KAAC,CAAC,MAAM,CAAC;AAC5C,IAAA,aAAa,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACpC,IAAA,uBAAuB,EAAE,YAAY,CAAC,QAAQ,EAAE;AACjD,CAAA,EAAE;AAEgCA,KAAC,CAAC,MAAM,CAAC;;AAE1C,IAAA,uBAAuB,EAAE,YAAY,CAAC,QAAQ,EAAE;AAChD,IAAA,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC3B,IAAA,iBAAiB,EAAE,kBAAkB,CAAC,QAAQ,EAAE;AAChD,IAAA,iBAAiB,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACzC,CAAA,EAAE;AAEwBA,KAAC,CAAC,MAAM,CAAC;AAClC,IAAA,KAAK,EAAEA,KAAC,CAAC,MAAM,EAAE;AACjB,IAAA,OAAO,EAAEA,KAAC,CAAC,MAAM,EAAE;AACnB,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE;IACtB,UAAU,EAAEA,KAAC,CAAC,KAAK,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC;AAC7B,CAAA,EAAE;AAGmCA,KAAC,CAAC,MAAM,CAAC;AAC7C,IAAA,cAAc,EAAEA,KAAC,CAAC,MAAM,EAAE;AAC1B,IAAA,uBAAuB,EAAEA,KAAC,CAAC,MAAM,EAAE;AACnC,IAAA,cAAc,EAAEA,KAAC,CAAC,MAAM,EAAE;AAC1B,IAAA,uBAAuB,EAAEA,KAAC,CAAC,MAAM,EAAE;IACnC,eAAe,EAAEA,KAAC,CAAC,KAAK,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC;AACjC,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE;AACvB,CAAA,EAAE;AAEH;AACqCA,KAAC,CAAC,MAAM,CAAC;AAC5C,IAAA,MAAM,EAAEA,KAAC,CAAC,MAAM,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;AACrC,CAAA,EAAE;AAEkCA,KAAC,CAAC,MAAM,CAAC;AAC5C,IAAA,QAAQ,EAAEA,KAAC,CAAC,OAAO,EAAE;AACrB,IAAA,WAAW,EAAEA,KAAC,CAAC,OAAO,EAAE;AACxB,IAAA,SAAS,EAAEA,KAAC,CAAC,OAAO,EAAE;AACtB,IAAA,WAAW,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAClC,IAAA,eAAe,EAAEA,KAAC,CAAC,OAAO,EAAE;AAC5B,IAAA,iBAAiB,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACxC,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACjC,IAAA,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC3B,IAAA,SAAS,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAChC,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;AACtC,IAAA,KAAK,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC5B,IAAA,SAAS,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAChC,IAAA,qBAAqB,EAAEA,KAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;AAC7C,IAAA,gBAAgB,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACvC,IAAA,MAAM,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC7B,IAAA,KAAK,EAAEA,KAAC,CAAC,MAAM,CAAC;AACd,QAAA,OAAO,EAAEA,KAAC,CAAC,MAAM,EAAE;AACnB,QAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,CAAC,CAAC,QAAQ,EAAE;AACd,CAAA,EAAE;AAEI,IAAM,gBAAgB,GAAGA,KAAC,CAAC,MAAM,CAAC;AACvC,IAAA,MAAM,EAAEA,KAAC,CAAC,MAAM,CAAC;AACf,QAAA,KAAK,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC;AACH,CAAA,CAAC,CAAC;AAEiCA,KAAC,CAAC,MAAM,CAAC;AAC3C,IAAA,MAAM,EAAEA,KAAC;AACN,SAAA,MAAM,CAAC;QACN,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;AACtC,QAAA,QAAQ,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAC/B,QAAA,MAAM,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,IAAI,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACtC,KAAK,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACvC,WAAW,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAC7C,SAAS,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KAC5C,CAAC;AACD,SAAA,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC;AACrB,CAAA,EAAE;AAEI,IAAM,wBAAwB,GAAGA,KAAC,CAAC,MAAM,CAAC;AAC/C,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;AAC9C,IAAA,MAAM,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;AAC1C,IAAA,eAAe,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AACtC,IAAA,UAAU,EAAEA,KAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;AAClC,CAAA,CAAC,CAAC;AAEH;AACa,IAAA,KAAK,GAAG;AACnB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,IAAI,EAAE,MAAM;;;ACtMd,IAAA,WAAA,kBAAA,YAAA;AAcE,IAAA,SAAA,WAAA,CAAY,MAAgB,EAAE,IAAY,EAAE,IAAY,EAAE,QAAgB,EAAA;AAblE,QAAA,IAAA,CAAA,QAAQ,GAAG;AACjB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,IAAI;SACd,CAAC;AAOA,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;KAC1B;IAED,WAAiB,CAAA,SAAA,CAAA,iBAAA,GAAjB,UAAkB,IAAS,EAAA;QACzB,QAAQ,IAAI,CAAC,WAAW;AACtB,YAAA,KAAK,OAAO;gBACV,IAAI,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAG/B,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAGtC,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC;AAKf,SAAA;KACF,CAAA;AAED,IAAA,WAAA,CAAA,SAAA,CAAA,KAAK,GAAL,YAAA;QAAA,IA8BC,KAAA,GAAA,IAAA,CAAA;AA7BC,QAAA,IAAI,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAEjE,QAAA,IAAI,WAAW,EAAE;YACf,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5C,SAAA;AAED,QAAA,IAAI,eAAoB,CAAC;QACzB,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAC,IAAS,EAAA;YAC7C,IAAI,IAAI,CAAC,MAAM,KAAK,kBAAW,KAAI,CAAC,IAAI,CAAE,EAAE;AAC1C,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACH,SAAC,CAAC,CAAC;AAGH,QAAA,KAAmB,UAAe,EAAf,iBAAA,GAAA,eAAe,EAAf,EAAe,GAAA,iBAAA,CAAA,MAAA,EAAf,IAAe,EAAE;AAA/B,YAAA,IAAM,IAAI,GAAA,iBAAA,CAAA,EAAA,CAAA,CAAA;YACb,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;;;AAGzC,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;oBAC/B,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACnC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;oBAC7C,IAAI,CAAC,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;oBACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC/B,oBAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;oBAC5B,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AACtC,iBAAA;AACF,aAAA;AACF,SAAA;QACD,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5C,CAAA;IACH,OAAC,WAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACzED,IAAA,UAAA,kBAAA,YAAA;IAQE,SAAY,UAAA,CAAA,OAAsC,EAAE,KAAsB,EAAA;AAAtB,QAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAsB,GAAA,KAAA,CAAA,EAAA;AACxE,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,iBAAiB,GAAG;AACvB,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,WAAW,EAAE,EAAE;SAChB,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;AAEM,IAAA,UAAA,CAAA,SAAA,CAAA,QAAQ,GAAf,YAAA;AACE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,kCAAkC,CAAC,CAAC;YAC/D,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE;gBACb,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;aAC1C,CAAC;AACH,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,kCAAkC,CAAC,CAAC;YAC/D,OAAO;AACL,gBAAA,SAAS,EAAE,EAAE;gBACb,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;aAC1C,CAAC;AACH,SAAA;;QAGD,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC3B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,SAAA;;QAGD,IAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACjD,IAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;QAChE,IAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;;QAG3D,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,iBAAiB,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACzE,IAAI,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;;QAGrE,IAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;AAGtE,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;AAG1C,QAAA,IAAI,oBAAoB,EAAE;AACxB,YAAA,IAAI,CAAC,SAAS,GAAG,kBAAkB,CACjC,UAAW,CAAA,MAAA,CAAA,IAAI,CAAC,IAAI,SAAG,SAAS,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,oBAAoB,CAAE,CAC3D,CAAC;AACH,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC,UAAA,CAAA,MAAA,CAAW,IAAI,CAAC,IAAI,CAAA,CAAA,MAAA,CAAG,SAAS,CAAE,CAAC,CAAC;AACzE,SAAA;QAED,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;SAC1C,CAAC;KACH,CAAA;AAED;;;;;;;;;;;AAWG;IACK,UAAiB,CAAA,SAAA,CAAA,iBAAA,GAAzB,UAA0B,SAAiB,EAAA;QACzC,IAAI,CAAC,IAAI,CAAC,cAAc;AAAE,YAAA,OAAO,EAAE,CAAC;;QAGpC,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,SAAU,CAAA,MAAA,CAAA,SAAS,EAAU,UAAA,CAAA,EAAE,GAAG,CAAC,CAAC;QAC7D,IAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAE/C,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AACrB,YAAA,IAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAClD,IAAI;AACF,gBAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACvC,aAAA;YAAC,OAAM,EAAA,EAAA;;;gBAGN,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrC,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX,CAAA;AAED;;AAEG;IACK,UAAa,CAAA,SAAA,CAAA,aAAA,GAArB,UAAsB,KAAa,EAAA;QACjC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,MAAM,EAAE;AACvD,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;AAED;;;AAGG;IACK,UAAc,CAAA,SAAA,CAAA,cAAA,GAAtB,UAAuB,WAA+B,EAAA;AACpD,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,EAAE,CAAC;;AAG5B,QAAA,IAAM,QAAQ,GAAG;YACf,SAAS;YACT,UAAU;YACV,OAAO;YACP,iBAAiB;YACjB,eAAe;YACf,cAAc;SACf,CAAC;;QAGF,IAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,QAAA,IAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,UAAC,KAAK,EAAA;YACzC,IAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACjC,CAAA;IACH,OAAC,UAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACrJK,SAAU,iBAAiB,CAAC,KAAa,EAAA;AAC7C,IAAA,IAAM,IAAI,GAAGE,eAAM,CAAC,KAAK,CAAC,CAAC;AAC3B,IAAA,OAAO,IAAI,CAAC;AACd;;ACOA,IAAA,SAAA,kBAAA,YAAA;AAoBE,IAAA,SAAA,SAAA,CACE,YAA4C,EAC5C,gBAAoC,EACpC,aAAiC,EACjC,eAA8B,EAC9B,gBAA6D,EAC7D,KAAyB,EACzB,MAAgD,EAChD,SAA6B,EAC7B,iBAA0D,EAC1D,KAAsB,EAAA;AANtB,QAAA,IAAA,eAAA,KAAA,KAAA,CAAA,EAAA,EAAA,eAA8B,GAAA,EAAA,CAAA,EAAA;AAM9B,QAAA,IAAA,KAAA,KAAA,KAAA,CAAA,EAAA,EAAA,KAAsB,GAAA,KAAA,CAAA,EAAA;QApBhB,IAAc,CAAA,cAAA,GAAa,EAAE,CAAC;AAI9B,QAAA,IAAA,CAAA,kBAAkB,GAA4C;AACpE,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,OAAO,EAAE,IAAI;SACd,CAAC;AAeA,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACzC,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AACnC,QAAA,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;AACzC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,IAAI,CAAC,iBAAiB,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;AACrD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACtC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC5B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC7B,SAAA;KACF;AAEO,IAAA,SAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,YAAA;QACE,IAAI,gBAAgB,GAAG,EAAE,CAAC;;QAG1B,IAAI;YACF,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEhC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,EAAE;AACvC,oBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvE,iBAAA;AACF,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACpC,SAAA;QAED,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CACzB,EAAG,CAAA,MAAA,CAAA,IAAI,CAAC,gBAAgB,CAAG,CAAA,MAAA,CAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAA,CAAA,MAAA,CAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAA,CAAA,MAAA,CAAG,IAAI,CAAC,KAAK,CAAG,CAAA,MAAA,CAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAE,CAC3I,CAAC;AACH,SAAA;aAAM,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;;YAEpE,KAAmB,IAAA,EAAA,GAAA,CAAqB,EAArB,EAAA,GAAA,IAAI,CAAC,gBAAgB,EAArB,EAAA,GAAA,EAAA,CAAA,MAAqB,EAArB,EAAA,EAAqB,EAAE;AAArC,gBAAA,IAAM,IAAI,GAAA,EAAA,CAAA,EAAA,CAAA,CAAA;AACb,gBAAA,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,aAAA;;AAGD,YAAA,KAAmB,UAAgB,EAAhB,kBAAA,GAAA,gBAAgB,EAAhB,EAAgB,GAAA,kBAAA,CAAA,MAAA,EAAhB,IAAgB,EAAE;AAAhC,gBAAA,IAAM,IAAI,GAAA,kBAAA,CAAA,EAAA,CAAA,CAAA;AACb,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CACtB,EAAA,CAAA,MAAA,CAAG,IAAI,CAAC,gBAAgB,CAAA,CAAA,MAAA,CAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAA,CAAA,MAAA,CAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAA,CAAA,MAAA,CAAG,IAAI,CAAC,KAAK,CAAA,CAAA,MAAA,CAAG,IAAI,CAAE,CAC7G,CAAC;AACH,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;YACxC,OAAO;AACR,SAAA;KACF,CAAA;AAEO,IAAA,SAAA,CAAA,SAAA,CAAA,cAAc,GAAtB,YAAA;QAEE,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,cAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,KAAK,cAAY,CAAA,EAAA,CAAC,KAAK,IAAI,EAAE;AACvE,gBAAA,IAAI,CAAC,gBAAgB,GAAG,cAAY,CAAC;AACtC,aAAA;AACF,SAAA;aAAM,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;oCACzD,IAAI,EAAA;AACb,gBAAA,IAAI,cAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAC3C,gBAAA,IACE,OAAK,gBAAgB,CAAC,IAAI,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,GAAG,KAAK,cAAY,CAAA,EAAA,CAAC;AAC/D,oBAAA,IAAI,EACJ;oBACA,MAAK,CAAA,gBAAgB,GAAG,cAAY,CAAC;;AAEtC,iBAAA;;;YARH,KAAmB,IAAA,EAAA,GAAA,CAAmB,EAAnB,EAAA,GAAA,IAAI,CAAC,cAAc,EAAnB,EAAmB,GAAA,EAAA,CAAA,MAAA,EAAnB,EAAmB,EAAA,EAAA;AAAjC,gBAAA,IAAM,IAAI,GAAA,EAAA,CAAA,EAAA,CAAA,CAAA;sCAAJ,IAAI,CAAA,CAAA;;;AASd,aAAA;AACF,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1B,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;YACxC,OAAO;AACR,SAAA;KACF,CAAA;AAEO,IAAA,SAAA,CAAA,SAAA,CAAA,cAAc,GAAtB,YAAA;QACE,SAAS,wBAAwB,CAAC,SAAiB,EAAA;;YAEjD,IAAM,gBAAgB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;;YAG9C,IAAI,aAAa,GAAG,CAAC,gBAAgB,GAAG,SAAS,IAAI,IAAI,GAAG,EAAE,CAAC;;YAE/D,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACpD,YAAA,OAAO,aAAa,CAAC;SACtB;;QAGD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AAC7D,YAAA,IACE,wBAAwB,CACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAC/C,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,EAC7B;AACA,gBAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;gBACvC,OAAO;AACR,aAAA;AACF,SAAA;aAAM,IACL,IAAI,CAAC,YAAY;YACjB,IAAI,CAAC,YAAY,CAAC,UAAU;AAC1B,gBAAA,iBAAiB,CACf,EAAA,CAAA,MAAA,CAAG,IAAI,CAAC,gBAAgB,CAAA,CAAA,MAAA,CAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAE,CACvD;AACH,YAAA,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;AACjD,gBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAC3B;AACA,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YACvC,OAAO;AACR,SAAA;AAAM,aAAA;;AAEL,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,IAAI,CAAC;AAC1C,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;YACxC,OAAO;AACR,SAAA;KACF,CAAA;AAEM,IAAA,SAAA,CAAA,SAAA,CAAA,iBAAiB,GAAxB,YAAA;QACE,IAAI;YACF,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAEzB,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,KAAK,IAAI,EAAE;gBAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC;AAChC,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;YACxC,OAAO,IAAI,CAAC,kBAAkB,CAAC;AAChC,SAAA;QAED,IAAI;YACF,IAAI,CAAC,cAAc,EAAE,CAAC;AAEtB,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,KAAK,IAAI,EAAE;gBAC5C,OAAO,IAAI,CAAC,kBAAkB,CAAC;AAChC,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;YACxC,OAAO,IAAI,CAAC,kBAAkB,CAAC;AAChC,SAAA;QAED,IAAI;YACF,IAAI,CAAC,cAAc,EAAE,CAAC;YAEtB,OAAO,IAAI,CAAC,kBAAkB,CAAC;AAChC,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,KAAK,CAAC;AAC3C,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;YACxC,OAAO,IAAI,CAAC,kBAAkB,CAAC;AAChC,SAAA;KACF,CAAA;IACH,OAAC,SAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AC/MD,IAAA,oBAAA,kBAAA,YAAA;AAkBE,IAAA,SAAA,oBAAA,CAAY,qBAA6D,EAAA;AACvE,QAAA,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,cAAc,CAAC;AAC3D,QAAA,IAAI,CAAC,uBAAuB;YAC1B,qBAAqB,CAAC,uBAAuB,CAAC;AAChD,QAAA,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC,cAAc,CAAC;AAC3D,QAAA,IAAI,CAAC,uBAAuB;YAC1B,qBAAqB,CAAC,uBAAuB,CAAC;AAChD,QAAA,IAAI,CAAC,eAAe,GAAG,qBAAqB,CAAC,eAAe,CAAC;AAC7D,QAAA,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC,UAAU,CAAC;KACpD;AAED,IAAA,oBAAA,CAAA,SAAA,CAAA,eAAe,GAAf,YAAA;AACE,QAAA,IAAI,YAAY,GAAuC;YACrD,GAAG,EAAE,IAAI,CAAC,uBAAuB;YACjC,GAAG,EAAE,IAAI,CAAC,cAAc;SACzB,CAAC;AAEF,QAAA,OAAO,YAAY,CAAC;KACrB,CAAA;AAED,IAAA,oBAAA,CAAA,SAAA,CAAA,WAAW,GAAX,YAAA;AACE,QAAA,IAAI,QAAQ,GAAgC;YAC1C,KAAK,EAAE,IAAI,CAAC,UAAU;YACtB,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,UAAU,EAAE,IAAI,CAAC,uBAAuB;YACxC,UAAU,EAAE,IAAI,CAAC,eAAe;SACjC,CAAC;AAEF,QAAA,OAAO,QAAQ,CAAC;KACjB,CAAA;IACH,OAAC,oBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACvDD;AAGA;AACsBF,KAAC;AACpB,KAAA,MAAM,CAAC;AACN,IAAA,OAAO,EAAEA,KAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC;CACxC,CAAC;AACD,KAAA,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,EAAE;AAEf,SAAU,KAAK,CAAC,OAAY,EAAA;AAChC,IAAA,IAAI,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAC9E,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;;;QAGxB,IAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC1B,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACpB,KAAA;AAED,IAAA,OAAO,EAAE,CAAC;AACZ;;AClBA;AACsBA,KAAC;AACpB,KAAA,MAAM,CAAC;AACN,IAAA,OAAO,EAAEA,KAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC;CACxC,CAAC;AACD,KAAA,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,EAAE;AAEf,SAAU,OAAO,CAAC,OAAY,EAAA;AAClC,IAAA,IAAI,IAAwB,CAAC;IAC7B,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;AACnD,IAAA,IAAI,OAAO,EAAE;QACX,IAAI,GAAG,OAAO,CAAC;AAChB,KAAA;AACD,IAAA,OAAO,IAAI,CAAC;AACd;;ACdA;AACsBA,KAAC;AACpB,KAAA,MAAM,CAAC;AACN,IAAA,OAAO,EAAEA,KAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,CAAC;CACxC,CAAC;AACD,KAAA,QAAQ,CAACA,KAAC,CAAC,GAAG,EAAE,EAAE;AAEf,SAAU,YAAY,CAAC,OAAY,EAAA;AACvC,IAAA,IAAI,SAA6B,CAAC;IAClC,IAAI,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AACnD,IAAA,IAAI,YAAY,EAAE;QAChB,SAAS,GAAG,YAAY,CAAC;AAC1B,KAAA;AACD,IAAA,OAAO,SAAS,CAAC;AACnB;;AChBA;AACA,IAAA,KAAA,kBAAA,YAAA;;AAGE,IAAA,SAAA,KAAA,GAAA;;AAEE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;KACzB;;AAED,IAAA,KAAA,CAAA,SAAA,CAAA,OAAO,GAAP,YAAA;;QAEE,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;KAChC,CAAA;IACH,OAAC,KAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACqBD,IAAA,UAAA,kBAAA,YAAA;AAsDE,IAAA,SAAA,UAAA,CACE,YAAiB,EACjB,OAAY,EACZ,OAA0C,EAC1C,OAA0C,EAAA;QAxDpC,IAAQ,CAAA,QAAA,GAAW,+BAA+B,CAAC;QAGnD,IAAM,CAAA,MAAA,GACZ,0HAA0H,CAAC;AAIrH,QAAA,IAAA,CAAA,OAAO,GAAQ;AACrB,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE,KAAK;SACnB,CAAC;QAEK,IAAO,CAAA,OAAA,GAAkB,EAAE,CAAC;QAY3B,IAAe,CAAA,eAAA,GAAa,EAAE,CAAC;QAC/B,IAAgB,CAAA,gBAAA,GAAoC,EAAE,CAAC;AAavD,QAAA,IAAA,CAAA,iBAAiB,GAA4C;AACnE,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,WAAW,EAAE,EAAE;SAChB,CAAC;AASA,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;;AAErC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;;QAGxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,cAAc,CAAC;;;AAI9D,QAAA,IACE,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;AAC9B,aAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,EACzD;AACA,YAAA,MAAM,IAAI,KAAK,CACb,0DAA0D,CAC3D,CAAC;AACH,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YACnE,IAAI;gBACF,IAAI,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5D,aAAA;AAAC,YAAA,OAAO,KAAU,EAAE;gBACnB,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,qCAAqC,EACrC,KAAK,CACN,CAAC;AACH,aAAA;AACF,SAAA;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAEnC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;YAClE,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,SAAA;;AAGD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;;AAGzB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YAC5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC5B,SAAA;KACF;;AAGD;;;;AAIG;IACI,UAAY,CAAA,SAAA,CAAA,YAAA,GAAnB,UAAoB,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB,CAAA;;IAGM,UAAY,CAAA,SAAA,CAAA,YAAA,GAAnB,UAAoB,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB,CAAA;;IAGM,UAAU,CAAA,SAAA,CAAA,UAAA,GAAjB,UAAkB,EAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;KACd,CAAA;;IAGM,UAAY,CAAA,SAAA,CAAA,YAAA,GAAnB,UAAoB,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB,CAAA;;IAGM,UAAiB,CAAA,SAAA,CAAA,iBAAA,GAAxB,UAAyB,KAAa,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB,CAAA;;IAGM,UAAc,CAAA,SAAA,CAAA,cAAA,GAArB,UAAsB,MAAqB,EAAA;AACzC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;KACvB,CAAA;AAED;;;;;;;;AAQG;IACI,UAAsB,CAAA,SAAA,CAAA,sBAAA,GAA7B,UAA8B,GAAW,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;KACrB,CAAA;AAED;;AAEG;IACI,UAAa,CAAA,SAAA,CAAA,aAAA,GAApB,UAAqB,MAAc,EAAA;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACtB,CAAA;AAED;;;AAGG;AACU,IAAA,UAAA,CAAA,SAAA,CAAA,SAAS,GAAtB,YAAA;;;;;4BACiB,OAAM,CAAA,CAAA,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAA,CAAA;;AAAhD,wBAAA,QAAQ,GAAG,EAAqC,CAAA,IAAA,EAAA,CAAA;wBAEhD,WAAW,GAAG,IAAI,WAAW,CAC/B,QAAQ,CAAC,MAAM,EACf,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CACZ,CAAC;AAEE,wBAAA,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;wBACjC,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;;;;AAClD,KAAA,CAAA;AAED;;;;AAIG;IACU,UAAgB,CAAA,SAAA,CAAA,gBAAA,GAA7B,UAA8B,YAAkC,EAAA;;;;;;wBAExD,aAAa,GAAyC,EAAE,CAAC;;wBAG/D,IAAI,IAAI,CAAC,KAAK;AAAE,4BAAA,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;wBACjD,IAAI,IAAI,CAAC,EAAE;AAAE,4BAAA,aAAa,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;wBACxC,IAAI,IAAI,CAAC,IAAI;AAAE,4BAAA,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;;wBAG9C,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,4BAAA,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC/B,4BAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,iCAA0B,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;AAC3E,yBAAA;AAAM,6BAAA;4BAEC,GAAG,GAAG,UAAW,CAAA,MAAA,CAAA,IAAI,CAAC,IAAI,SAAG,IAAI,CAAC,IAAI,CAAE,CAAC;AAC/C,4BAAA,aAAa,CAAC,GAAG,GAAG,GAAG,CAAC;AACxB,4BAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,wBAAA,CAAA,MAAA,CAAyB,GAAG,CAAE,CAAC,CAAC;AACpE,yBAAA;;AAGD,wBAAA,IAAI,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACxD,4BAAA,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC;AACpC,4BAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,+BAAgC,CAAA,MAAA,CAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAE,CAAC,CAAC;AACpG,yBAAA;6BAEG,IAAI,CAAC,KAAK,EAAV,OAAU,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA;wBACZ,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,6CAA6C,CAC9C,CAAC;;;;AAEA,wBAAA,EAAA,GAAA,IAAI,CAAA;AAAiB,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,CACzD,IAAI,CAAC,KAAK,EACV,aAAa,CACd,CAAA,CAAA;;wBAHD,EAAK,CAAA,aAAa,GAAG,EAAA,CAAA,IAAA,EAGpB,CAAC;;;;AAEF,wBAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,sCAAA,CAAA,MAAA,CAAuC,OAAK,CAAE,CAC/C,CAAC;;wBAEF,IAAI,CAAC,aAAa,GAAG;AACnB,4BAAA,MAAM,EAAE;AACN,gCAAA,MAAM,EAAE,OAAK,CAAC,UAAU,IAAI,GAAG;AAC/B,gCAAA,QAAQ,EAAE,IAAI;AACd,gCAAA,KAAK,EAAE,OAAK,CAAC,OAAO,IAAI,wBAAwB;AACjD,6BAAA;yBACF,CAAC;;;;wBAGJ,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,kDAAkD,CACnD,CAAC;;;;AAEA,wBAAA,EAAA,GAAA,IAAI,CAAA;wBAAiB,OAAM,CAAA,CAAA,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC1D,aAAa,CACd,CAAA,CAAA;;wBAFD,EAAK,CAAA,aAAa,GAAG,EAAA,CAAA,IAAA,EAEpB,CAAC;;;;AAEF,wBAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,uCAAA,CAAA,MAAA,CAAwC,OAAK,CAAE,CAChD,CAAC;;wBAEF,IAAI,CAAC,aAAa,GAAG;AACnB,4BAAA,MAAM,EAAE;AACN,gCAAA,MAAM,EAAE,OAAK,CAAC,UAAU,IAAI,GAAG;AAC/B,gCAAA,QAAQ,EAAE,IAAI;AACd,gCAAA,KAAK,EAAE,OAAK,CAAC,OAAO,IAAI,wBAAwB;AACjD,6BAAA;yBACF,CAAC;;;;;;AAGP,KAAA,CAAA;AAED;;AAEG;AACI,IAAA,UAAA,CAAA,SAAA,CAAA,UAAU,GAAjB,YAAA;QACE,IAAI;YACF,IAAM,kBAAkB,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxD,YAAA,IAAM,MAAM,GACV,kBAAkB,CAAC,QAAQ,EAAE,CAAC;AAChC,YAAA,IAAI,MAAM,EAAE;;AAEV,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AAC5B,oBAAA,IAAM,YAAY,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;AAC3D,oBAAA,IAAI,YAAY,EAAE;AAChB,wBAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,gDAAA,CAAA,MAAA,CAAiD,YAAY,CAAE,CAChE,CAAC;AACF,wBAAA,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;AAC9B,wBAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;wBAClD,OAAO;AACR,qBAAA;;oBAED,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,oFAAoF,CACrF,CAAC;AACF,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,oBAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;oBAClD,OAAO;AACR,iBAAA;;AAGD,gBAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAClC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACnD,aAAA;AAAM,iBAAA;AACL,gBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACzC,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,8BAAA,CAAA,MAAA,CAA+B,KAAK,CAAE,CACvC,CAAC;AACH,SAAA;KACF,CAAA;AAED;;;AAGG;IACI,UAAY,CAAA,SAAA,CAAA,YAAA,GAAnB,UACE,eAAsD,EAAA;QAEtD,IAAI;YACF,IAAI,eAAe,CAAC,aAAa,EAAE;;gBAEjC,IAAI,CAAC,eAAe,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACvD,gBAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;AAC/B,aAAA;iBAAM,IAAI,eAAe,CAAC,uBAAuB,EAAE;;gBAElD,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,KAAK,CACnC,eAAe,CAAC,uBAAuB,CACxC,CAAC;;AAGF,gBAAA,IAAI,CAAC,gBAAgB;AACnB,oBAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CACrB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CACnC,CAAC,UAAU,CAAC;AACf,gBAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAChC,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,2BAAA,CAAA,MAAA,CAA4B,KAAK,CAAE,CAAC,CAAC;AAC1E,SAAA;KACF,CAAA;AAED;;;;AAIG;IACK,UAAY,CAAA,SAAA,CAAA,YAAA,GAApB,UAAqB,OAA6C,EAAA;;;AAEhE,QAAA,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAP,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,OAAO,CAAE,IAAI,mCAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;AAC1D,QAAA,IAAM,uBAAuB,GAC3B,CAAA,EAAA,GAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,uBAAuB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,WAAW,CAAC;AACvD,QACE,CAAA,EAAA,GAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,kBAAkB;AACvD,QAAA,IAAM,iBAAiB,GACrB,CAAA,EAAA,GAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,iBAAiB,CAAC;AAEvD,QAAA,IAAI,IAAI,EAAE;YACR,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;AACjC,SAAA;aAAM,IAAI,uBAAuB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;YACpE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,6BAA6B,CAAC,uBAAuB,CAAC,CAAC;AAC7D,SAAA;AAAM,aAAA,IAAI,iBAAiB,EAAE;YAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;AACtD,SAAA;AAAM,aAAA;YACL,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,mCAAmC,CAAC,CAAC;AACzE,SAAA;KACF,CAAA;AAED;;;;AAIG;IACK,UAAY,CAAA,SAAA,CAAA,YAAA,GAApB,UAAqB,KAAa,EAAA;QAChC,IAAM,YAAY,GAAG,QAAQ,CAAC;AAC9B,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACjC,CAAA;AAED;;;;AAIG;IACK,UAAoB,CAAA,SAAA,CAAA,oBAAA,GAA5B,UAA6B,IAAY,EAAA;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAyB,IAAI,CAAE,CAAC,CAAC;AAClD,SAAA;AAED,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACnB,CAAA;AAED;;;;AAIG;IACK,UAA6B,CAAA,SAAA,CAAA,6BAAA,GAArC,UACE,uBAAqD,EAAA;QAErD,IAAI;YACF,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;;YAG/D,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,gBAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;AACzD,aAAA;YAED,IAAM,cAAc,GAClB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAEpE,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE;AACtC,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAyB,cAAc,CAAE,CAAC,CAAC;AAC5D,aAAA;AAED,YAAA,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC;AAC7B,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,+CAAA,CAAA,MAAA,CAAgD,KAAK,CAAE,CACxD,CAAC;AACH,SAAA;KACF,CAAA;AAED;;;;AAIG;IACK,UAA4B,CAAA,SAAA,CAAA,4BAAA,GAApC,UAAqC,iBAAyB,EAAA;QAC5D,IAAI;AACF,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE;AACzC,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAyB,iBAAiB,CAAE,CAAC,CAAC;AAC/D,aAAA;AAED,YAAA,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC;AAChC,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,8CAAA,CAAA,MAAA,CAA+C,KAAK,CAAE,CACvD,CAAC;AACH,SAAA;KACF,CAAA;AAED;;;;AAIG;AACK,IAAA,UAAA,CAAA,SAAA,CAAA,mBAAmB,GAA3B,YAAA;QACE,IAAI;;AAEF,YAAA,IAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,IAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;YAClG,IAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA,EAAA,CAAC,CAAC;AAEhE,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,0DAA0D,CAAC,CAAC;gBAC/F,OAAO;AACR,aAAA;YAED,IAAI,SAAS,GAAG,CAAC,CAAC;;AAGlB,YAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;gBACxB,SAAS,GAAG,CAAC,CAAC;AAEd,gBAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;oBACxB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,+DAA+D,CAAC,CAAC;oBACpG,OAAO;AACR,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;AAChC,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,kDAA2C,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;AAE5F,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,kDAAA,CAAA,MAAA,CAAmD,KAAK,CAAE,CAC3D,CAAC;AACH,SAAA;KACF,CAAA;AAED;;;AAGG;AACK,IAAA,UAAA,CAAA,SAAA,CAAA,8BAA8B,GAAtC,YAAA;QACE,IAAI;;YAEF,IAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACxC,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;;YAGD,IAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,OAAO,EAAE,CAAC;AACX,aAAA;;;YAID,IAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAEzD,YAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC3B,gBAAA,IAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;AAE7B,gBAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,+CAAA,CAAA,MAAA,CAAgD,QAAQ,CAAE,CAC3D,CAAC;AACF,gBAAA,OAAO,QAAQ,CAAC;AACjB,aAAA;AAED,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,kDAAA,CAAA,MAAA,CAAmD,KAAK,CAAE,CAC3D,CAAC;AACF,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;KACF,CAAA;AAED;;;AAGG;AACI,IAAA,UAAA,CAAA,SAAA,CAAA,wBAAwB,GAA/B,YAAA;QACE,IAAI;AACF,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAChD,aAAA;YAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AAC5D,gBAAA,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;AACH,aAAA;AAED,YAAA,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE5D,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AAC7B,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAyB,KAAK,CAAE,CAAC,CAAC;AACnD,aAAA;AAED,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACpB,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,0CAAA,CAAA,MAAA,CAA2C,KAAK,CAAE,CACnD,CAAC;AACH,SAAA;KACF,CAAA;AAED;;;;AAIG;AACI,IAAA,UAAA,CAAA,SAAA,CAAA,iBAAiB,GAAxB,YAAA;QACE,IAAM,SAAS,GAAG,IAAI,SAAS,CAC7B,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CACnB,CAAC;AAEF,QAAA,OAAO,SAAS,CAAC,iBAAiB,EAAE,CAAC;KACtC,CAAA;AAED;;;;;;;;;;;AAWG;AACI,IAAA,UAAA,CAAA,SAAA,CAAA,qBAAqB,GAA5B,YAAA;QACE,IAAI;AACF,YAAA,IAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACrD,aAAA;YAED,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3C,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,sBAAA,CAAA,MAAA,CAAuB,KAAK,CAAE,CAAC,CAAC;AACpE,YAAA,OAAO,mBAAoB,CAAA,MAAA,CAAA,KAAK,CAAC,OAAO,CAAE,CAAC;AAC5C,SAAA;KACF,CAAA;AAED;;;;;;;;;;;AAWG;AACI,IAAA,UAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;;QACE,IAAI;;AAEF,YAAA,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;;AAGpC,YAAA,IAAI,CAAC,cAAc,KAAI,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,CAAA,EAAE;gBAC9D,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC3E,gBAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,oDAA6C,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,CAAE,CACrF,CAAC;AACH,aAAA;YAED,IAAI,CAAC,cAAc,EAAE;AACnB,gBAAA,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;AAC9E,aAAA;;AAGD,YAAA,IAAM,UAAU,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;;YAGtD,IAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,YAAA,IAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;;YAGtC,IAAM,cAAc,GAAa,EAAE,CAAC;AACpC,YAAA,IAAI,WAAW,EAAE;gBACf,IAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,gBAAA,KAAoB,UAAM,EAAN,QAAA,GAAA,MAAM,EAAN,EAAM,GAAA,QAAA,CAAA,MAAA,EAAN,IAAM,EAAE;AAAvB,oBAAA,IAAM,KAAK,GAAA,QAAA,CAAA,EAAA,CAAA,CAAA;oBACP,IAAA,GAAG,GAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,CAAA,CAApB,CAAqB;;AAE/B,oBAAA,IAAI,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtF,wBAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,qBAAA;AACF,iBAAA;AACF,aAAA;;AAGD,YAAA,IAAM,QAAQ,GAAG;gBACf,QAAS,CAAA,MAAA,CAAA,kBAAkB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAE;AAC/C,gBAAA,kBAAA,CAAA,MAAA,CAAmB,kBAAkB,CAAC,CAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,KAAI,EAAE,CAAC,CAAE;gBAC/E,eAAgB,CAAA,MAAA,CAAA,kBAAkB,CAAC,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,KAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,IAAI,EAAE,CAAC,CAAE;gBACzI,UAAW,CAAA,MAAA,CAAA,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAE;gBACpE,eAAe;aAChB,CAAC;;YAGF,IAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAM,QAAQ,GAAG,OAAO,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AACnF,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,8CAAA,CAAA,MAAA,CAA+C,QAAQ,CAAE,CAC1D,CAAC;YAEF,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACxC,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,oCAAA,CAAA,MAAA,CAAqC,KAAK,CAAE,CAAC,CAAC;AAClF,YAAA,OAAO,mBAAoB,CAAA,MAAA,CAAA,KAAK,CAAC,OAAO,CAAE,CAAC;AAC5C,SAAA;KACF,CAAA;AAED;;;;;AAKG;AACH;;;;;;;;;;;AAWG;IACI,UAAkB,CAAA,SAAA,CAAA,kBAAA,GAAzB,UAA0B,SAAiB,EAAA;QACzC,IAAI;AACF,YAAA,IAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;;AAGjD,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AACxC,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACnD,aAAA;AAED,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACnC,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,mCAAA,CAAA,MAAA,CAAoC,KAAK,CAAE,CAC5C,CAAC;AACF,YAAA,MAAM,KAAK,CAAC;AACb,SAAA;KACF,CAAA;AAED;;;;;AAKG;AACI,IAAA,UAAA,CAAA,SAAA,CAAA,cAAc,GAArB,YAAA;;QACE,IAAI;YACF,IAAM,IAAI,GACR,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI;AAChC,iBAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,IAAI,CAAA;gBACvB,IAAI,CAAC,OAAO,CAAC,YAAY;AACzB,gBAAA,EAAE,CAAC;AAEL,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,qCAAA,CAAA,MAAA,CAAsC,IAAI,CAAE,CAAC,CAAC;AACjF,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAe,IAAI,CAAC,SAAS,CAAE,CAAC,CAAC;AACpE,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAU,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC;AAC3D,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,sBAAe,IAAI,CAAC,SAAS,CAAE,CAAC,CAAC;YAEpE,IAAM,WAAW,GAAG,EAAG,CAAA,MAAA,CAAA,IAAI,CAAC,QAAQ,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,IAAI,EAAQ,OAAA,CAAA,CAAA,MAAA,CAAA,IAAI,CAAC,SAAS,EAAA,kBAAA,CAAA,CAAA,MAAA,CAAmB,IAAI,CAAC,KAAK,4BAAkB,IAAI,CAAC,SAAS,CAAE,CAAC;AAElI,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,0BAAA,CAAA,MAAA,CAA2B,WAAW,CAAE,CAAC,CAAC;AAE7E,YAAA,OAAO,WAAW,CAAC;AACpB,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,mCAAA,CAAA,MAAA,CAAoC,KAAK,CAAE,CAC5C,CAAC;AACF,YAAA,MAAM,KAAK,CAAC;AACb,SAAA;KACF,CAAA;AAED;;;;AAIG;AACK,IAAA,UAAA,CAAA,SAAA,CAAA,qBAAqB,GAA7B,YAAA;QACE,IAAI;YACF,IAAM,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YAC5C,IAAI,kBAAkB,GAAW,EAAE,CAAC;;YAGpC,kBAAkB,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;AAE1E,YAAA,IAAM,YAAY,GAAG,IAAI,oBAAoB,CAAC;AAC5C,gBAAA,cAAc,EAAA,cAAA;gBACd,uBAAuB,EAAE,iBAAiB,CACxC,EAAG,CAAA,MAAA,CAAA,IAAI,CAAC,gBAAgB,CAAA,CAAA,MAAA,CAAG,cAAc,CAAE,CAC5C;AACD,gBAAA,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AACvC,gBAAA,uBAAuB,EAAE,kBAAkB;gBAC3C,eAAe,EAAE,IAAI,CAAC,gBAAgB;gBACtC,UAAU,EAAE,IAAI,CAAC,KAAK;AACvB,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,qBAAqB,GAAG,YAAY,CAAC,eAAe,EAAE,CAAC;AAC5D,YAAA,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;AACrD,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,qCAAA,CAAA,MAAA,CAAsC,KAAK,CAAE,CAC9C,CAAC;AACF,YAAA,MAAM,KAAK,CAAC;AACb,SAAA;KACF,CAAA;;;;;;;IAQM,UAAuB,CAAA,SAAA,CAAA,uBAAA,GAA9B,UAA+B,KAAa,EAAA;;QAC1C,IAAI;AACF,YAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,UAAU,EAAE;;gBAE7C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;AACvD,aAAA;iBAAM,IAAI,IAAI,CAAC,UAAU,EAAE;;gBAE1B,IAAI,CAAC,iBAAiB,GAAG;AACvB,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,KAAK,YAAI,EAAC,CAAA,IAAI,CAAC,UAAU,CAAA,GAAG,KAAK,EAAE,EAAA,CAAA;iBACpC,CAAC;AACH,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,KAAK,EAAE;AACd,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,wCAAA,CAAA,MAAA,CAAyC,KAAK,CAAE,CACjD,CAAC;AACH,SAAA;KACF,CAAA;AAED;;AAEG;AACK,IAAA,UAAA,CAAA,SAAA,CAAA,SAAS,GAAjB,YAAA;QACE,IAAI;;YAEF,IAAM,OAAO,GACX,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;;YAGvE,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;gBACxD,OAAO;AACR,aAAA;;YAGD,IAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEvC,YAAA,KAAwB,UAAW,EAAX,aAAA,GAAA,WAAW,EAAX,EAAW,GAAA,aAAA,CAAA,MAAA,EAAX,IAAW,EAAE;AAAhC,gBAAA,IAAM,SAAS,GAAA,aAAA,CAAA,EAAA,CAAA,CAAA;AACZ,gBAAA,IAAA,KAAoC,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAA9D,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAK,gBAAgB,cAA+B,CAAC;gBACtE,IAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAG/C,gBAAA,IAAI,UAAU,KAAK,IAAI,CAAC,YAAY,EAAE;AACpC,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,wBAAA,IAAI,aAAa,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;wBACpD,IAAI,eAAe,GACjB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AAC5B,wBAAA,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC;AACpC,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;AACtC,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;AACnB,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,oCAAA,CAAA,MAAA,CAAqC,KAAK,CAAE,CAC7C,CAAC;AACH,SAAA;KACF,CAAA;;AAGM,IAAA,UAAA,CAAA,SAAA,CAAA,cAAc,GAArB,UAAsB,MAAa,EAAE,UAAmB,EAAA;QACtD,OAAO;AACL,YAAA,WAAW,EAAE,MAAM;AACnB,YAAA,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,UAAU,IAAI,EAAE;SAC7B,CAAC;KACH,CAAA;AAED;;;;AAIG;IACK,UAAqB,CAAA,SAAA,CAAA,qBAAA,GAA7B,UAA8B,aAAqB,EAAA;;QAEjD,IAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAErF,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC9B,SAAA;;QAGD,IAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;;AAG5B,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,6DAA6D,CAAC,CAAC;AAClG,YAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC9B,SAAA;;QAGD,IAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpC,QAAA,IAAM,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC;AAClC,cAAE,GAAA,CAAA,MAAA,CAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAE;AACjC,cAAE,GAAA,CAAA,MAAA,CAAI,UAAU,CAAE,CAAC;QAErB,OAAO;AACL,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,UAAU,EAAE,UAAU;SACvB,CAAC;KACH,CAAA;AAED;;;;;;;;;;;;AAYG;AACI,IAAA,UAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,KAAa,EAAE,MAAe,EAAA;QAC7C,IAAI;;YAEF,IAAI,YAAY,SAAoB,CAAC;AACrC,YAAA,IAAI,MAAM,EAAE;AACJ,gBAAA,IAAA,EAA6B,GAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAA7D,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,UAAU,gBAAuC,CAAC;gBACtE,IAAI,UAAU,IAAI,UAAU,EAAE;oBAC5B,YAAY,GAAG,UAAU,CAAC;AAC1B,oBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,8BAAA,CAAA,MAAA,CAA+B,YAAY,CAAE,CAAC,CAAC;AACnF,iBAAA;AACF,aAAA;;AAGD,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAC/D,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3C,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF,CAAA;AAED;;;;;;;;;AASG;IACI,UAAe,CAAA,SAAA,CAAA,eAAA,GAAtB,UACE,OAA6C,EAAA;QAE7C,IAAI;;AAEF,YAAA,IAAM,SAAS,GAAG,CAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,WAAW,KAAI,IAAI,CAAC,YAAY,CAAC;;AAG5D,YAAA,IAAM,UAAU,GACd,CAAA,OAAO,KAAP,IAAA,IAAA,OAAO,uBAAP,OAAO,CAAE,iBAAiB,KAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;;YAGvE,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAExD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3C,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;KACF,CAAA;AAED;;;;;;;AAOG;AACI,IAAA,UAAA,CAAA,SAAA,CAAA,eAAe,GAAtB,YAAA;QACE,IAAI;YACF,IAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC7D,YAAA,IAAI,YAAY,EAAE;AAChB,gBAAA,IAAM,iBAAiB,GAAG,kBAAkB,CAAC,KAAK,CAChD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CACzB,CAAC;AACF,gBAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC3C,gBAAA,OAAO,iBAAiB,CAAC;AAC1B,aAAA;AAED,YAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,+CAA+C,EAC/C,IAAI,CAAC,YAAY,CAClB,CAAC;AACF,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAC,QAAA,OAAO,KAAU,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,mCAAmC,EAAE,KAAK,CAAC,CAAC;AACvE,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;KACF,CAAA;AAED;;;;;;;;;;;;;;;;;;;AAmBG;IACU,UAAiB,CAAA,SAAA,CAAA,iBAAA,GAA9B,UACE,OAAkD,EAAA;;;;gBAElD,IAAI;AAEI,oBAAA,gBAAgB,GAAG,OAAO;AAC9B,0BAAE,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC;AACzC,0BAAE;AACE,4BAAA,UAAU,EAAE,GAAG;AACf,4BAAA,MAAM,EAAE,GAAG;AACX,4BAAA,eAAe,EAAE,SAAS;4BAC1B,UAAU,EAAE,SAAS;yBACtB,CAAC;AAEE,oBAAA,UAAU,GAChB,gBAAgB,CAAA,UADA,EAAE,MAAM,GACxB,gBAAgB,CADQ,MAAA,EAAE,eAAe,GACzC,gBAAgB,CADyB,eAAA,EAAE,UAAU,GACrD,gBAAgB,WADqC,CACpC;AAGb,oBAAA,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACxB,oBAAA,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;;AAGxD,oBAAA,IAAI,CAAC,iBAAiB,IAAI,OAAO,IAAI,MAAM,EAAE;wBAC3C,OAAO,CAAA,CAAA,YAAA,CAAA;AACR,qBAAA;AAEK,oBAAA,OAAO,GACX,eAAe,KAAK,SAAS,GAAG,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;;oBAGzE,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,iBAAiB,EAAE;AACnD,wBAAA,QAAQ,EAAE,UAAU;AACpB,wBAAA,IAAI,EAAE,OAAO;AACd,qBAAA,CAAC,CAAC;AACJ,iBAAA;AAAC,gBAAA,OAAO,KAAU,EAAE;oBACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,8BAA8B,EAAE,KAAK,CAAC,CAAC;AACnE,iBAAA;;;;AACF,KAAA,CAAA;AAED;;AAEG;IACK,UAAiB,CAAA,SAAA,CAAA,iBAAA,GAAzB,UAA0B,KAAa,EAAA;QACrC,IAAM,MAAM,GAAG,8DAA8D,CAAC;QAC9E,IAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEpC,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,IAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,IAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3C,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAChE,CAAA;AAED;;AAEG;IACK,UAAU,CAAA,SAAA,CAAA,UAAA,GAAlB,UAAmB,KAAc,EAAA;AAC/B,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,2CAAA,CAAA,MAAA,CAA4C,KAAK,CAAE,CAAC,CAAC;QAExF,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;YACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,+DAA+D,CAAC,CAAC;AACpG,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;;AAGD,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,iCAAA,CAAA,MAAA,CAAkC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAC,CAAC,CAAC,EAAA,kCAAA,CAAkC,CAAC,CAAC;AAC7H,YAAA,OAAO,KAAK,CAAC;AACd,SAAA;QAED,IAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACnD,QAAA,IAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;AAChD,QAAA,IAAM,iBAAiB,GAAG,CAAC,YAAY,GAAG,YAAY,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAE3E,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,kCAAmC,CAAA,MAAA,CAAA,gBAAgB,CAAC,WAAW,EAAE,EAAU,SAAA,CAAA,CAAA,MAAA,CAAA,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAQ,QAAA,CAAA,CAAC,CAAC;QAEpJ,IAAI,iBAAiB,GAAG,EAAE,EAAE;YAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,uEAAuE,CAAC,CAAC;AAC5G,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,kDAAkD,CAAC,CAAC;AACvF,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;AAED;;;;AAIG;AACK,IAAA,UAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,YAAA;QAAA,IAyDC,KAAA,GAAA,IAAA,CAAA;AAxDC,QAAA,IAAM,QAAQ,GAAG;AACf,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,IAAI;SACd,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YACtE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,0DAA0D,CAAC,CAAC;AAC/F,YAAA,OAAO,QAAQ,CAAC;AACjB,SAAA;AAED,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;;AAEvB,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACvB,QAAA,IAAM,UAAU,GAAG,UAAW,CAAA,MAAA,CAAA,IAAI,CAAE,CAAC;AAErC,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,sDAA+C,UAAU,EAAA,UAAA,CAAA,CAAA,MAAA,CAAW,IAAI,CAAE,CAAC,CAAC;AAC/G,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,kDAA2C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAE,CAAC,CAAC;;QAGjH,IAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,UAAC,IAAgC,EAAA;AACvF,YAAA,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC;AAC3C,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,CAAC,KAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,+CAAwC,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;AACzF,aAAA;AACD,YAAA,OAAO,OAAO,CAAC;AACjB,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,kDAA2C,eAAe,CAAC,MAAM,CAAE,CAAC,CAAC;;AAGxG,QAAA,KAAmB,UAAe,EAAf,iBAAA,GAAA,eAAe,EAAf,EAAe,GAAA,iBAAA,CAAA,MAAA,EAAf,IAAe,EAAE;AAA/B,YAAA,IAAM,IAAI,GAAA,iBAAA,CAAA,EAAA,CAAA,CAAA;YACb,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,iCAAkC,CAAA,MAAA,CAAA,IAAI,CAAC,IAAI,EAAA,kBAAA,CAAA,CAAA,MAAA,CAAmB,IAAI,CAAC,UAAU,EAAA,WAAA,CAAA,CAAA,MAAA,CAAY,IAAI,CAAC,WAAW,EAAG,GAAA,CAAA,CAAC,CAAC;YAEjJ,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;AAC1C,gBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,8CAAuC,IAAI,CAAC,IAAI,EAAA,wBAAA,CAAwB,CAAC,CAAC;;AAG7G,gBAAA,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAC9B,gBAAA,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACxC,gBAAA,QAAQ,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAClD,gBAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC1B,gBAAA,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB,gBAAA,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAChC,gBAAA,MAAM;AACP,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACpB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,0DAA0D,CAAC,CAAC;AAChG,SAAA;AAED,QAAA,OAAO,QAAQ,CAAC;KACjB,CAAA;AAED;;AAEG;AACK,IAAA,UAAA,CAAA,SAAA,CAAA,YAAY,GAApB,UAAqB,IAAS,EAAE,IAAY,EAAA;QAC1C,QAAQ,IAAI,CAAC,WAAW;AACtB,YAAA,KAAK,OAAO;gBACV,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,oBAAA,OAAO,KAAK,CAAC;gBACnC,IAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,gBAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE1B,YAAA,KAAK,UAAU;gBACb,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,oBAAA,OAAO,KAAK,CAAC;gBACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAExC,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC;AAEd,YAAA;AACE,gBAAA,OAAO,KAAK,CAAC;AAChB,SAAA;KACF,CAAA;AAED;;AAEG;AACK,IAAA,UAAA,CAAA,SAAA,CAAA,6BAA6B,GAArC,YAAA;QACE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,wDAAwD,CAAC,CAAC;AAC7F,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,2CAAA,CAAA,MAAA,CAA4C,IAAI,CAAC,OAAO,CAAC,aAAa,CAAE,CAAC,CAAC;AAC7G,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,kDAA2C,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAE,CAAC,CAAC;AAC5G,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,kCAAA,CAAA,MAAA,CAAmC,IAAI,CAAC,KAAK,IAAI,UAAU,CAAE,CAAC,CAAC;AAElG,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;YAC5D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,wEAAwE,CAAC,CAAC;AAC7G,YAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5B,SAAA;;AAGD,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;YACrB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,0DAA0D,CAAC,CAAC;AAC/F,YAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5B,SAAA;AAED,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,iCAAA,CAAA,MAAA,CAAmC,SAAiB,CAAC,IAAI,IAAI,aAAa,CAAE,CAAC,CAAC;;AAGjH,QAAA,IAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAEpE,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,0CAAmC,YAAY,EAAA,eAAA,CAAA,CAAA,MAAA,CAAgB,UAAU,CAAE,CAAC,CAAC;QAEhH,IAAI,YAAY,IAAI,UAAU,EAAE;AAC9B,YAAA,IAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AACjD,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,yCAAA,CAAA,MAAA,CAA0C,WAAW,CAAE,CAAC,CAAC;AAC5F,YAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,EAAG,SAAiB,CAAC,MAAM,EAAE,CAAC;AAChF,SAAA;QAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,sDAAsD,CAAC,CAAC;QAC3F,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAG,SAAiB,CAAC,MAAM,EAAE,CAAC;KAC/D,CAAA;AAED;;AAEG;AACK,IAAA,UAAA,CAAA,SAAA,CAAA,qBAAqB,GAA7B,YAAA;QACE,IAAM,MAAM,GAAI,IAAI,CAAC,YAAoB,CAAC,MAAM,IAAI,8BAA8B,CAAC;AACnF,QAAA,IAAM,OAAO,GAAG,EAAG,CAAA,MAAA,CAAA,MAAM,0BAAuB,CAAC;;AAEjD,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACvC,IAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,EAAE,CAAC;QAEjD,IAAM,MAAM,GAAG,gBAAA,CAAA,MAAA,CAAiB,IAAI,CAAC,SAAS,EAAA,OAAA,CAAA,CAAA,MAAA,CAAQ,SAAS,EAAA,WAAA,CAAA,CAAA,MAAA,CAAY,IAAI,CAAE,CAAC;QAElF,OAAO,IAAI,CAAC,KAAK;cACb,UAAG,OAAO,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,IAAI,CAAC,KAAK,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,MAAM,CAAE;AACtC,cAAE,EAAG,CAAA,MAAA,CAAA,OAAO,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,MAAM,CAAE,CAAC;KAC5B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDG;IACU,UAAe,CAAA,SAAA,CAAA,eAAA,GAA5B,UAA6B,MAAyC,EAAA;;;;;;AAC5D,wBAAA,EAAA,GAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;;iCAClB,QAAQ,EAAR,OAAQ,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA;iCAGR,MAAM,EAAN,OAAM,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA;iCAGN,YAAY,EAAZ,OAAY,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA;;;AALR,oBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,MAAM,CAAC,CAAA,CAAA;AAA3D,oBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,aAAO,SAAoD,CAAC,CAAA;AAGrD,oBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,MAAM,CAAC,CAAA,CAAA;AAAzD,oBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,aAAO,SAAkD,CAAC,CAAA;AAGnD,oBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,6BAA6B,CAAC,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAN,MAAM,CAAE,MAAM,CAAC,CAAA,CAAA;AAA/D,oBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,aAAO,SAAwD,CAAC,CAAA;;wBAIhE,OAAM,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA;;;;;AAEX,KAAA,CAAA;AAED;;;;;;;;AAQG;IACW,UAA6B,CAAA,SAAA,CAAA,6BAAA,GAA3C,UAA4C,YAAkC,EAAA;;;;;;;;wBAI5E,IAAI,CAAC,UAAU,EAAE,CAAC;AAGd,wBAAA,MAAM,GAA0C;AAClD,4BAAA,QAAQ,EAAE,KAAK;AACf,4BAAA,WAAW,EAAE,KAAK;AAClB,4BAAA,SAAS,EAAE,KAAK;AAChB,4BAAA,eAAe,EAAE,KAAK;AACtB,4BAAA,WAAW,EAAE,EAAE;AACf,4BAAA,UAAU,EAAE,EAAE;AACd,4BAAA,IAAI,EAAE,EAAE;AACR,4BAAA,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;AAC/B,4BAAA,UAAU,EAAE,EAAE;AACd,4BAAA,IAAI,EAAE,IAAI;AACV,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,SAAS,EAAE,EAAE;yBACd,CAAC;;AAGF,wBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1B,4BAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,mDAA4C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAE,CAAC,CAAC;4BAE9G,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;AAC/C,4BAAA,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,8BAAA,CAAA,MAAA,CAA+B,UAAU,CAAE,CAAC;;AAGnG,4BAAA,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE;AACzC,gCAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,gCAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;oCAC7B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,iCAAA;AACF,6BAAA;AAAM,iCAAA;gCACL,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC3C,gCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;oCAC1D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,iCAAA;AACF,6BAAA;4BAED,MAAM,CAAC,KAAK,GAAG;AACb,gCAAA,OAAO,EAAE,YAAY;AACrB,gCAAA,UAAU,EAAE,UAAU;gCACtB,IAAI,EAAE,UAAU,KAAK,GAAG,GAAG,cAAc,GAAG,sBAAsB;6BACnE,CAAC;AAEF,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;;;;;AAIC,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,cAAO,IAAI,CAAC,EAAE,CAAE,CAAC,CAAC;AACrD,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAU,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC;AAC3D,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAS,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;AACzD,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAS,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;AACzD,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAS,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;;wBAGzD,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AAChD,4BAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,wBAAiB,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;AACjE,4BAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;;wBAGD,IAAI,CAAC,SAAS,EAAE,CAAC;wBACjB,IAAI,CAAC,YAAY,EAAE,CAAC;;wBAGpB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,mFAAmF,CAAC,CAAC;AAClH,wBAAA,SAAS,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;;wBAGvD,IAAI,SAAS,CAAC,MAAM,EAAE;AACpB,4BAAA,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAClC,yBAAA;wBAED,IAAI,SAAS,CAAC,QAAQ,EAAE;4BACtB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,uEAAuE,CAAC,CAAC;AAC5G,4BAAA,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC;AACpC,4BAAA,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC;AACxC,4BAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;wBACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,oDAAoD,CAAC,CAAA;wBAGlF,YAAY,GAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACb,YAAY,CACZ,GAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAC7E,CAAC;AACF,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA,CAAA;;AAAzC,wBAAA,EAAA,CAAA,IAAA,EAAyC,CAAC;wBAGtC,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;wBAGvE,IAAI,iBAAiB,CAAC,OAAO,EAAE;4BAC7B,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,MAAM,MAAK,GAAG,EAAE;AACvC,gCAAA,QAAA,GAAS,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,CAAC;AACjD,gCAAA,YAAY,GAAG,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,0CAAE,KAAK,KAAI,iCAAkC,CAAA,MAAA,CAAA,QAAM,CAAE,CAAC;;gCAGrG,IAAI,QAAM,IAAI,QAAM,IAAI,GAAG,IAAI,QAAM,GAAG,GAAG,EAAE;;AAE3C,oCAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,oCAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;wCAC7B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,qCAAA;AACF,iCAAA;AAAM,qCAAA;;oCAEL,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC3C,oCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;wCAC1D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,qCAAA;AACF,iCAAA;;gCAGD,MAAM,CAAC,KAAK,GAAG;AACb,oCAAA,OAAO,EAAE,YAAY;oCACrB,UAAU,EAAE,QAAM,IAAI,SAAS;oCAC/B,IAAI,EAAE,QAAM,KAAK,GAAG,GAAG,cAAc,GAAG,sBAAsB;iCAC/D,CAAC;AAEF,gCAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,6BAAA;AACF,yBAAA;;wBAGD,IAAI,IAAI,CAAC,aAAa,EAAE;AAChB,4BAAA,EAAA,GAA6E,IAAI,CAAC,aAAa,CAAC,MAAM,EAApG,QAAQ,GAAA,EAAA,CAAA,QAAA,EAAE,IAAI,GAAA,EAAA,CAAA,IAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,IAAI,GAAA,EAAA,CAAA,IAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,MAAM,YAAA,CAA+B;AAE7G,4BAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ,KAAK,CAAC,CAAC;;AAGjC,4BAAA,IAAI,MAAM,EAAE;AACV,gCAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AACxB,6BAAA;4BACD,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;4BAClC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;4BACjC,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;4BACrC,MAAM,CAAC,UAAU,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;AACpD,4BAAA,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;4BAC3B,MAAM,CAAC,SAAS,GAAG,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;;AAGjD,4BAAA,IAAI,KAAK,EAAE;AACT,gCAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;AACxB,gCAAA,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;AAC5B,6BAAA;4BAED,IAAI,QAAQ,KAAK,CAAC,EAAE;gCAClB,MAAM,CAAC,UAAU,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;AACpD,gCAAA,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;AAEnC,gCAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACtC,oCAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;AAC3B,iCAAA;AACF,6BAAA;AACF,yBAAA;AAED,wBAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;;;AAEd,wBAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,+CAAA,CAAA,MAAA,CAAgD,OAAK,CAAE,CACxD,CAAC;AACF,wBAAA,MAAM,OAAK,CAAC;;;;;AAEf,KAAA,CAAA;AAED;;;;;AAKG;IACW,UAAuB,CAAA,SAAA,CAAA,uBAAA,GAArC,UAAsC,YAAkC,EAAA;;;;;;;;wBAItE,IAAI,CAAC,UAAU,EAAE,CAAC;AAGd,wBAAA,MAAM,GAA0C;AAClD,4BAAA,QAAQ,EAAE,KAAK;AACf,4BAAA,WAAW,EAAE,KAAK;AAClB,4BAAA,SAAS,EAAE,KAAK;AAChB,4BAAA,eAAe,EAAE,KAAK;AACtB,4BAAA,WAAW,EAAE,EAAE;AACf,4BAAA,UAAU,EAAE,EAAE;AACd,4BAAA,IAAI,EAAE,EAAE;AACR,4BAAA,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;AAC/B,4BAAA,UAAU,EAAE,EAAE;AACd,4BAAA,IAAI,EAAE,IAAI;AACV,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,SAAS,EAAE,EAAE;yBACd,CAAC;;AAGF,wBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1B,4BAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,mDAA4C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAE,CAAC,CAAC;4BAE9G,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;AAC/C,4BAAA,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,8BAAA,CAAA,MAAA,CAA+B,UAAU,CAAE,CAAC;;AAGnG,4BAAA,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE;AACzC,gCAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,gCAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;oCAC7B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,iCAAA;AACF,6BAAA;AAAM,iCAAA;gCACL,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC3C,gCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;oCAC1D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,iCAAA;AACF,6BAAA;4BAED,MAAM,CAAC,KAAK,GAAG;AACb,gCAAA,OAAO,EAAE,YAAY;AACrB,gCAAA,UAAU,EAAE,UAAU;gCACtB,IAAI,EAAE,UAAU,KAAK,GAAG,GAAG,cAAc,GAAG,sBAAsB;6BACnE,CAAC;AAEF,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;;;;;AAIC,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,cAAO,IAAI,CAAC,EAAE,CAAE,CAAC,CAAC;AACrD,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,iBAAU,IAAI,CAAC,KAAK,CAAE,CAAC,CAAC;AAC3D,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAS,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;AACzD,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAS,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;AACzD,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAS,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;;wBAGzD,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AAChD,4BAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,wBAAiB,IAAI,CAAC,IAAI,CAAE,CAAC,CAAC;AACjE,4BAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;;wBAGD,IAAI,CAAC,SAAS,EAAE,CAAC;wBACjB,IAAI,CAAC,YAAY,EAAE,CAAC;;wBAGpB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,mFAAmF,CAAC,CAAC;AAClH,wBAAA,SAAS,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;;wBAGvD,IAAI,SAAS,CAAC,MAAM,EAAE;AACpB,4BAAA,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAClC,yBAAA;wBAED,IAAI,SAAS,CAAC,QAAQ,EAAE;4BACtB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,uEAAuE,CAAC,CAAC;AAC5G,4BAAA,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC;AACpC,4BAAA,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC;AACxC,4BAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;wBACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,oDAAoD,CAAC,CAAA;wBAGlF,YAAY,GAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACb,YAAY,CACZ,GAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAC7E,CAAC;AACF,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA,CAAA;;AAAzC,wBAAA,EAAA,CAAA,IAAA,EAAyC,CAAC;wBAGtC,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;wBAGvE,IAAI,iBAAiB,CAAC,OAAO,EAAE;4BAC7B,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,MAAM,MAAK,GAAG,EAAE;AACvC,gCAAA,QAAA,GAAS,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,CAAC;AACjD,gCAAA,YAAY,GAAG,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,0CAAE,KAAK,KAAI,iCAAkC,CAAA,MAAA,CAAA,QAAM,CAAE,CAAC;;gCAGrG,IAAI,QAAM,IAAI,QAAM,IAAI,GAAG,IAAI,QAAM,GAAG,GAAG,EAAE;;AAE3C,oCAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,oCAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;wCAC7B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,qCAAA;AACF,iCAAA;AAAM,qCAAA;;oCAEL,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC3C,oCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;wCAC1D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,qCAAA;AACF,iCAAA;;gCAGD,MAAM,CAAC,KAAK,GAAG;AACb,oCAAA,OAAO,EAAE,YAAY;oCACrB,UAAU,EAAE,QAAM,IAAI,SAAS;oCAC/B,IAAI,EAAE,QAAM,KAAK,GAAG,GAAG,cAAc,GAAG,sBAAsB;iCAC/D,CAAC;AAEF,gCAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,6BAAA;AACF,yBAAA;;wBAGD,IAAI,IAAI,CAAC,aAAa,EAAE;AAChB,4BAAA,EAAA,GAA6E,IAAI,CAAC,aAAa,CAAC,MAAM,EAApG,QAAQ,GAAA,EAAA,CAAA,QAAA,EAAE,IAAI,GAAA,EAAA,CAAA,IAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,IAAI,GAAA,EAAA,CAAA,IAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,MAAM,YAAA,CAA+B;AAE7G,4BAAA,MAAM,CAAC,QAAQ,GAAG,QAAQ,KAAK,CAAC,CAAC;;AAGjC,4BAAA,IAAI,MAAM,EAAE;AACV,gCAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AACxB,6BAAA;4BACD,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;4BAClC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;4BACjC,MAAM,CAAC,KAAK,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;4BACrC,MAAM,CAAC,UAAU,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;AACpD,4BAAA,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;4BAC3B,MAAM,CAAC,SAAS,GAAG,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;;AAGjD,4BAAA,IAAI,KAAK,EAAE;AACT,gCAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;AACxB,gCAAA,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;AAC5B,6BAAA;4BAED,IAAI,QAAQ,KAAK,CAAC,EAAE;gCAClB,MAAM,CAAC,UAAU,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;AACpD,gCAAA,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;AAEnC,gCAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACtC,oCAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;AAC3B,iCAAA;AACF,6BAAA;AACF,yBAAA;AAED,wBAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;;;AAEd,wBAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,OAAO,EACP,+CAAA,CAAA,MAAA,CAAgD,OAAK,CAAE,CACxD,CAAC;AACF,wBAAA,MAAM,OAAK,CAAC;;;;;AAEf,KAAA,CAAA;;AAGD;;;AAGG;IACW,UAAyB,CAAA,SAAA,CAAA,yBAAA,GAAvC,UAAwC,YAAkC,EAAA;;;;;;;;wBACpE,UAAU,GAAG,EAAE,CAAC;wBAChB,MAAM,GAAG,EAAE,CAAC;;wBAMhB,IAAI,CAAC,UAAU,EAAE,CAAC;AAEd,wBAAA,MAAM,GAA0C;AAClD,4BAAA,QAAQ,EAAE,KAAK;AACf,4BAAA,WAAW,EAAE,KAAK;AAClB,4BAAA,SAAS,EAAE,KAAK;AAChB,4BAAA,eAAe,EAAE,KAAK;AACtB,4BAAA,WAAW,EAAE,EAAE;AACf,4BAAA,UAAU,EAAE,EAAE;AACd,4BAAA,IAAI,EAAE,EAAE;AACR,4BAAA,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;AAC/B,4BAAA,UAAU,EAAE,EAAE;AACd,4BAAA,IAAI,EAAE,IAAI;AACV,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,SAAS,EAAE,EAAE;yBACd,CAAC;;AAGF,wBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAC1B,4BAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,mDAA4C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAE,CAAC,CAAC;4BAE9G,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC;AAC/C,4BAAA,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,IAAI,8BAAA,CAAA,MAAA,CAA+B,UAAU,CAAE,CAAC;;AAGnG,4BAAA,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG,EAAE;AACzC,gCAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,gCAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;oCAC7B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,iCAAA;AACF,6BAAA;AAAM,iCAAA;gCACL,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC3C,gCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;oCAC1D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,iCAAA;AACF,6BAAA;4BAED,MAAM,CAAC,KAAK,GAAG;AACb,gCAAA,OAAO,EAAE,YAAY;AACrB,gCAAA,UAAU,EAAE,UAAU;gCACtB,IAAI,EAAE,UAAU,KAAK,GAAG,GAAG,cAAc,GAAG,sBAAsB;6BACnE,CAAC;AAEF,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;AAED,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AACrD,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3D,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;;wBAGzD,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;AAChD,4BAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,4BAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;;wBAGD,IAAI,CAAC,SAAS,EAAE,CAAC;wBACjB,IAAI,CAAC,YAAY,EAAE,CAAC;AAGd,wBAAA,SAAS,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;;wBAGvD,IAAI,SAAS,CAAC,MAAM,EAAE;AACpB,4BAAA,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAClC,yBAAA;wBAED,IAAI,SAAS,CAAC,QAAQ,EAAE;AACtB,4BAAA,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC;AACpC,4BAAA,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,CAAC;AACxC,4BAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;AAED,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,SAAS,EAAE,CAAA,CAAA;;AAAtB,wBAAA,EAAA,CAAA,IAAA,EAAsB,CAAC;wBAGnB,gBAAgB,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBAErE,IAAI,gBAAgB,CAAC,OAAO,EAAE;AAC5B,4BAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;AAE1D,gCAAA,QAAA,GAAS,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,CAAC;AAChD,gCAAA,YAAY,GAAG,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,0CAAE,KAAK,KAAI,iCAAkC,CAAA,MAAA,CAAA,QAAM,CAAE,CAAC;;gCAGpG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC3C,gCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;oCAC1D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,iCAAA;;gCAGD,MAAM,CAAC,KAAK,GAAG;AACb,oCAAA,OAAO,EAAE,YAAY;oCACrB,UAAU,EAAE,QAAM,IAAI,SAAS;AAC/B,oCAAA,IAAI,EAAE,sBAAsB;iCAC7B,CAAC;AAEF,gCAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,6BAAA;AACF,yBAAA;;AAGD,wBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,KAAK,EAAE;4BACtC,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,mDAAmD,CACpD,CAAC;AACF,4BAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;;wBAGD,IAAI,CAAC,SAAS,EAAE,CAAC;AAEjB,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;;wBAGlE,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;4BACnD,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AACjD,yBAAA;wBAED,IAAI,CAAC,YAAY,CAAC;AAChB,4BAAA,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa;4BACnD,uBAAuB,EAAE,IAAI,CAAC,WAAW;AAC1C,yBAAA,CAAC,CAAC;wBACH,IAAI,CAAC,YAAY,EAAE,CAAC;AAEpB,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;AACzE,wBAAA,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAC9C,CAAC;AACF,wBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAIzD,wBAAA,IAAA,EAAA,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;AAChC,4BAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC;AACpC,4BAAA,CAAC,IAAI,CAAC,KAAK,CAAA,EAFX,OAEW,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA;wBAEX,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,gDAAgD,CACjD,CAAC;;;;wBAII,YAAY,GAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACb,YAAY,CACZ,GAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAC7E,CAAC;AACF,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA,CAAA;;AAAzC,wBAAA,EAAA,CAAA,IAAA,EAAyC,CAAC;wBAIpC,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBAEvE,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAC7B,4BAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;AAE5D,gCAAA,QAAA,GAAS,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,CAAC;AACjD,gCAAA,YAAY,GAAG,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,0CAAE,KAAK,KAAI,iCAAkC,CAAA,MAAA,CAAA,QAAM,CAAE,CAAC;;gCAGrG,IAAI,QAAM,IAAI,QAAM,IAAI,GAAG,IAAI,QAAM,GAAG,GAAG,EAAE;;AAE3C,oCAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,oCAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;wCAC7B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,qCAAA;AACF,iCAAA;AAAM,qCAAA;;oCAEL,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC3C,oCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;wCAC1D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,qCAAA;AACF,iCAAA;;gCAGD,MAAM,CAAC,KAAK,GAAG;AACb,oCAAA,OAAO,EAAE,YAAY;oCACrB,UAAU,EAAE,QAAM,IAAI,SAAS;oCAC/B,IAAI,EAAE,QAAM,KAAK,GAAG,GAAG,cAAc,GAAG,sBAAsB;iCAC/D,CAAC;AAEF,gCAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,6BAAA;AACF,yBAAA;AAEG,wBAAA,KAAK,SAAQ,CAAC;;wBAGlB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE;4BAC1D,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;AAClD,yBAAA;AAED,wBAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE;AAClE,4BAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE;gCACnC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,gCAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gCACrB,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACpC,6BAAA;AAED,4BAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;6BAAM,IACL,IAAI,CAAC,aAAa;4BAClB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,EACxC;AACA,4BAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,4BAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;AAEpB,4BAAA,IAAI,SAAQ,CAAC;AAGjB,4BAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE;gCACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;AACtD,6BAAA;AAED,4BAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE;gCACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC;AACvD,gCAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACrC,6BAAA;AAED,4BAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE;gCAClC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;AACtC,gCAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;gCACnB,IAAI,CAAC,YAAY,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,6BAAA;AAED,4BAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE;gCACnC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,gCAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gCACrB,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACpC,6BAAA;AACF,yBAAA;;;;wBAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAK,CAAC,CAAC;;;wBAI/C,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,0CAA0C,CAC3C,CAAC;AAEE,wBAAA,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAG5C,wBAAA,IAAA,EAAA,gBAAgB,CAAC,OAAO,KAAK,KAAK,CAAA,EAAlC,OAAkC,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA;wBACpC,MAAM,CACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAClB,MAAM,EACN,4CAA4C,CAC7C,CAAC;;;;wBAII,YAAY,GAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACb,YAAY,CACZ,GAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,EAC7E,CAAC;AACF,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAA,CAAA;;AAAzC,wBAAA,EAAA,CAAA,IAAA,EAAyC,CAAC;wBAIpC,iBAAiB,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;wBAEvE,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAC7B,4BAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE;AAE5D,gCAAA,QAAA,GAAS,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,CAAC;AACjD,gCAAA,YAAY,GAAG,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,aAAa,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,0CAAE,KAAK,KAAI,iCAAkC,CAAA,MAAA,CAAA,QAAM,CAAE,CAAC;;gCAGrG,IAAI,QAAM,IAAI,QAAM,IAAI,GAAG,IAAI,QAAM,GAAG,GAAG,EAAE;;AAE3C,oCAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,oCAAA,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;wCAC7B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,qCAAA;AACF,iCAAA;AAAM,qCAAA;;oCAEL,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC3C,oCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;wCAC1D,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;AACzC,qCAAA;AACF,iCAAA;;gCAGD,MAAM,CAAC,KAAK,GAAG;AACb,oCAAA,OAAO,EAAE,YAAY;oCACrB,UAAU,EAAE,QAAM,IAAI,SAAS;oCAC/B,IAAI,EAAE,QAAM,KAAK,GAAG,GAAG,cAAc,GAAG,sBAAsB;iCAC/D,CAAC;AAEF,gCAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,6BAAA;AACF,yBAAA;;wBAGD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE;4BAC1D,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;AAClD,yBAAA;AAED,wBAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE;AAClE,4BAAA,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC;AACxB,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;AACf,yBAAA;6BAAM,IACL,IAAI,CAAC,aAAa;4BAClB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,EACxC;AACI,4BAAA,IAAI,SAAQ,CAAC;AAEb,4BAAA,KAAK,SAAQ,CAAC;AAElB,4BAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE;gCACvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;AACtD,6BAAA;AAED,4BAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE;gCACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC;AACvD,gCAAA,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACrC,6BAAA;AAED,4BAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE;gCAClC,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;AACtC,gCAAA,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;gCACnB,IAAI,CAAC,YAAY,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5C,6BAAA;AAED,4BAAA,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE;gCACnC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,gCAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;gCACrB,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACpC,6BAAA;AACF,yBAAA;;;;wBAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAK,CAAC,CAAC;;;;;wBAO/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;wBAE1D,IAAI;;4BAEF,IAAI,IAAI,CAAC,WAAW,EAAE;gCACpB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gCAExD,IAAI,IAAI,CAAC,WAAW,EAAE;oCACpB,KAA0C,EAAA,GAAA,CAAA,EAAvB,EAAA,GAAA,IAAI,CAAC,WAAW,CAAC,MAAM,EAAvB,EAAA,GAAA,EAAA,CAAA,MAAuB,EAAvB,EAAA,EAAuB,EAAE;wCAAjC,IAAI,GAAA,EAAA,CAAA,EAAA,CAAA,CAAA;AACb,wCAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AAAC,wBAAA,OAAO,KAAU,EAAE;4BACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC5C,yBAAA;;AAGD,wBAAA,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;6BAC5C,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,EACzE;4BACA,UAAU,GAAG,IAAI,CAAC;AACnB,yBAAA;AAAM,6BAAA;4BACL,UAAU,GAAG,KAAK,CAAC;;AAGnB,4BAAA,KAAA,EAAA,GAAA,CAAuD,EAApC,EAAA,GAAA,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,EAApC,EAAoC,GAAA,EAAA,CAAA,MAAA,EAApC,IAAoC,EAAE;gCAA9C,IAAI,GAAA,EAAA,CAAA,EAAA,CAAA,CAAA;AACb,gCAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,6BAAA;AACF,yBAAA;wBAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAE7B,wBAAA,IACE,IAAI,CAAC,aAAa,KAAK,QAAQ;AAC/B,4BAAA,UAAU,CAAC,IAAI,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,GAAG,KAAK,KAAI,CAAC,eAAe,CAAA,EAAA,CAAC,KAAK,KAAK,EACtE;AACA,4BAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;4BAC5C,cAAc,GAAG,IAAI,CAAC;AACvB,yBAAA;AAED,wBAAA,IAAI,UAAU,EAAE;;4BAEd,MAAM,GAAG,EAAE,CAAC;4BAEZ,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,gCAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,GAAG,UAAU,CAAC;AAChD,6BAAA;AACD,4BAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACrC,yBAAA;AAAM,6BAAA;4BACL,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC;AAClD,4BAAA,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,MAAA,IAAI,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,CAAC;AACpE,4BAAA,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,MAAA,IAAI,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,UAAU,CAAC;AAC3E,yBAAA;wBACD,IAAI;AACF,4BAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACjE,yBAAA;AAAC,wBAAA,OAAO,KAAU,EAAE;4BACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;;AAE5C,yBAAA;wBACD,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAEtD,wBAAA,IAAI,cAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACxD,4BAAA,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;AAC3B,yBAAA;;AAGD,wBAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,wBAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;AACxB,wBAAA,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAE1B,wBAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAC,CAAA;;;;AACf,KAAA,CAAA;IACH,OAAC,UAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACr+DD;AACM,SAAU,IAAI,CAAC,MAAkB,EAAA;;;AAErC,IAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QACrB,MAAM,IAAI,iBAAiB,CACzB,UAAU,CAAC,cAAc,EACzB,uBAAuB,EACvB,uGAAuG,CACxG,CAAC;AACH,KAAA;;AAGD,IAAA,IAAM,MAAM,GAAG,IAAI,MAAM,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;AACxB,KAAA,CAAC,CAAC;;AAGH,IAAA,IAAM,UAAU,GAAG,CAAC,EAClB,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ;AAClC,QAAA,MAAM,CAAC,eAAe;SACrB,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAClG,CAAC;;AAGF,IAAA,IAAI,UAAkC,CAAC;AAEvC,IAAA,IAAI,UAAU,EAAE;;QAEd,IAAI,OAAO,SAAgB,CAAC;QAE5B,IAAI,MAAM,CAAC,eAAe,EAAE;AAC1B,YAAA,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;AACvE,SAAA;AAAM,aAAA,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE;AAC5C,YAAA,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtF,SAAA;AAAM,aAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACxC,YAAA,OAAO,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;AAClC,SAAA;AAAM,aAAA;YACL,MAAM,IAAI,iBAAiB,CACzB,UAAU,CAAC,eAAe,EAC1B,+BAA+B,EAC/B,mBAAmB;gBACnB,+CAA+C;gBAC/C,yCAAyC;AACzC,gBAAA,mCAAmC,CACpC,CAAC;AACH,SAAA;;AAGD,QAAA,IAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;;QAGhC,IAAM,iBAAiB,uBACrB,IAAI,EAAA,IAAA,EACJ,KAAK,EAAE,MAAA,MAAM,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,EAC5B,OAAO,EAAE,MAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,OAAO,EAAA,GAC5B,CAAA,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,0CAAE,WAAW,MAAK,SAAS,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAC,EAAA,EAC7F,YAAY,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,YAAY,EAC1C,UAAU,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAU,EACtC,aAAa,EAAE,MAAA,MAAM,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAa,EAC5C,WAAW,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,0CAAE,WAAW,EACxC,WAAW,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,WAAW,EACxC,SAAS,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,EAAA,CACrC,CAAC;;QAGF,UAAU,GAAG,IAAI,UAAU,CACzB,MAAM,CAAC,eAAe,EAAE,EACxB,OAAO,EACP;YACE,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,EACD,iBAAiB,CAClB,CAAC;AACH,KAAA;AAED,IAAA,OAAO,EAAE,MAAM,EAAA,MAAA,EAAE,UAAU,EAAA,UAAA,EAAE,CAAC;AAChC,CAAC;AAED;;AAEG;AACH,SAAS,UAAU,CAAC,MAAkB,EAAA;;;AAEpC,IAAA,IAAI,CAAA,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAI,KAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;;AAE1D,QAAA,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;YAC1D,MAAM,IAAI,iBAAiB,CACzB,UAAU,CAAC,YAAY,EACvB,mCAAmC,EACnC,gDAAgD,CACjD,CAAC;AACH,SAAA;AACD,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;AAC5B,KAAA;;AAGD,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,YAAY,CAAC;AACrB,KAAA;;;AAID,IAAA,OAAO,MAAM,CAAC;AAChB;;ACjQA;;;;AAIG;AAqBH;AACa,IAAA,mBAAmB,GAAG;;AAEjC,IAAA,cAAc,EAAE,gBAAgB;AAChC,IAAA,YAAY,EAAE,cAAc;AAC5B,IAAA,eAAe,EAAE,iBAAiB;AAClC,IAAA,mBAAmB,EAAE,qBAAqB;;AAG1C,IAAA,qBAAqB,EAAE,uBAAuB;AAC9C,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,oBAAoB,EAAE,sBAAsB;AAC5C,IAAA,eAAe,EAAE,iBAAiB;AAClC,IAAA,YAAY,EAAE,cAAc;;AAG5B,IAAA,kBAAkB,EAAE,oBAAoB;AACxC,IAAA,gBAAgB,EAAE,kBAAkB;AACpC,IAAA,cAAc,EAAE,gBAAgB;AAChC,IAAA,iBAAiB,EAAE,mBAAmB;;AAGtC,IAAA,aAAa,EAAE,eAAe;;;;;;;;;;"}
\ No newline at end of file
+{"version":3,"file":"crowdhandler.cjs.js","sources":["../node_modules/regenerator-runtime/runtime.js","../node_modules/tslib/tslib.es6.js","../src/common/logger.ts","../src/common/errors.ts","../src/common/runtime.ts","../src/client/base_client.ts","../src/client/resource.ts","../src/client/public_client.ts","../src/client/private_client.ts","../src/client/client.ts","../src/request/browserHandler.ts","../src/request/cloudflareWorkersHandler.ts","../src/request/lambdaRequestHandler.ts","../src/request/lambdaResponseHandler.ts","../src/request/nodejsHandler.ts","../src/request/requestContext.ts","../src/common/ignoredPatternsCheck.ts","../src/common/types.ts","../src/gatekeeper/configParse.ts","../src/common/processURL.ts","../src/common/hash.ts","../src/gatekeeper/signature.ts","../src/gatekeeper/tokenObject.ts","../src/common/ipDiscover.ts","../src/common/languageDiscover.ts","../src/common/userAgentDiscover.ts","../src/common/timer.ts","../src/gatekeeper/gatekeeper.ts","../src/init.ts","../src/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per GeneratorResume behavior specified since ES2015:\n // ES2015 spec, step 3: https://262.ecma-international.org/6.0/#sec-generatorresume\n // Latest spec, step 2: https://tc39.es/ecma262/#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next method, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable != null) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n throw new TypeError(typeof iterable + \" is not iterable\");\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","//export a logger function that will be used to log messages\nexport function logger(debug: boolean, level: string, message: string) {\n if (debug) {\n switch (level) {\n case \"info\":\n console.info(message);\n break;\n case \"warn\":\n console.warn(message);\n break;\n case \"error\":\n console.error(message);\n break;\n default:\n console.log(message);\n break;\n }\n }\n}\n","/**\n * Custom error class for CrowdHandler SDK with actionable error messages.\n * All SDK errors are instances of this class, providing consistent error handling.\n * \n * @example\n * try {\n * const { client } = crowdhandler.init({ publicKey: 'invalid' });\n * } catch (error) {\n * // error is always a CrowdHandlerError\n * console.log(error.code); // 'INVALID_API_KEY'\n * console.log(error.message); // Human-readable message\n * console.log(error.suggestion); // Helpful next steps\n * console.log(error.statusCode); // HTTP status if applicable\n * }\n */\nexport class CrowdHandlerError extends Error {\n public code: string;\n public statusCode?: number;\n public suggestion?: string;\n public context?: Record;\n\n constructor(\n code: string,\n message: string,\n suggestion?: string,\n statusCode?: number,\n context?: Record\n ) {\n super(message);\n this.name = 'CrowdHandlerError';\n this.code = code;\n this.statusCode = statusCode;\n this.suggestion = suggestion;\n this.context = context;\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CrowdHandlerError);\n }\n }\n\n /**\n * Returns a formatted error message with all context\n */\n toString(): string {\n let errorMsg = `${this.name} [${this.code}]: ${this.message}`;\n \n if (this.suggestion) {\n errorMsg += `\\n💡 Suggestion: ${this.suggestion}`;\n }\n \n if (this.statusCode) {\n errorMsg += `\\n📊 Status Code: ${this.statusCode}`;\n }\n \n if (this.context && Object.keys(this.context).length > 0) {\n errorMsg += `\\n🔍 Context: ${JSON.stringify(this.context, null, 2)}`;\n }\n \n return errorMsg;\n }\n}\n\n/**\n * Common error codes used throughout the SDK.\n * Use these constants to handle specific error conditions.\n * \n * @example\n * try {\n * await client.domains().get();\n * } catch (error) {\n * if (error.code === ErrorCodes.MISSING_PRIVATE_KEY) {\n * console.log('Need to initialize with private key');\n * }\n * }\n */\nexport const ErrorCodes = {\n // Network errors\n API_CONNECTION_FAILED: 'API_CONNECTION_FAILED',\n API_TIMEOUT: 'API_TIMEOUT',\n API_INVALID_RESPONSE: 'API_INVALID_RESPONSE',\n \n // Authentication errors\n INVALID_PUBLIC_KEY: 'INVALID_PUBLIC_KEY',\n INVALID_PRIVATE_KEY: 'INVALID_PRIVATE_KEY',\n MISSING_PRIVATE_KEY: 'MISSING_PRIVATE_KEY',\n AUTHENTICATION_FAILED: 'AUTHENTICATION_FAILED',\n \n // Configuration errors\n INVALID_CONFIG: 'INVALID_CONFIG',\n INVALID_MODE: 'INVALID_MODE',\n MISSING_CONTEXT: 'MISSING_CONTEXT',\n INVALID_CONTEXT: 'INVALID_CONTEXT',\n \n // Validation errors\n VALIDATION_FAILED: 'VALIDATION_FAILED',\n INVALID_TOKEN: 'INVALID_TOKEN',\n SIGNATURE_MISMATCH: 'SIGNATURE_MISMATCH',\n \n // API response errors\n RATE_LIMITED: 'RATE_LIMITED',\n DOMAIN_NOT_FOUND: 'DOMAIN_NOT_FOUND',\n ROOM_NOT_FOUND: 'ROOM_NOT_FOUND',\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n \n // Runtime errors\n METHOD_NOT_AVAILABLE: 'METHOD_NOT_AVAILABLE',\n BROWSER_ONLY: 'BROWSER_ONLY',\n SERVER_ONLY: 'SERVER_ONLY',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n} as const;\n\n/**\n * Factory functions for creating common CrowdHandler errors.\n * Used internally by the SDK to ensure consistent error messages.\n * @internal\n */\nexport const createError = {\n apiConnection: (originalError: any) => {\n const isTimeout = originalError.code === 'ECONNABORTED' || originalError.code === 'ETIMEDOUT';\n const isRefused = originalError.code === 'ECONNREFUSED';\n \n if (isTimeout) {\n return new CrowdHandlerError(\n ErrorCodes.API_TIMEOUT,\n 'Request to CrowdHandler API timed out',\n 'Try increasing the timeout option or check your network connection',\n undefined,\n { originalError: originalError.message }\n );\n }\n \n if (isRefused) {\n return new CrowdHandlerError(\n ErrorCodes.API_CONNECTION_FAILED,\n 'Could not connect to CrowdHandler API',\n 'Check your internet connection and firewall settings. If the problem persists, check https://status.crowdhandler.com',\n undefined,\n { originalError: originalError.message }\n );\n }\n \n return new CrowdHandlerError(\n ErrorCodes.API_CONNECTION_FAILED,\n `Network error: ${originalError.message}`,\n 'Check your network connection and try again',\n undefined,\n { originalError: originalError.message }\n );\n },\n\n invalidApiKey: (keyType: 'public' | 'private') => {\n const code = keyType === 'public' ? ErrorCodes.INVALID_PUBLIC_KEY : ErrorCodes.INVALID_PRIVATE_KEY;\n \n return new CrowdHandlerError(\n code,\n `Invalid ${keyType} key`,\n `Check your CrowdHandler dashboard for the correct ${keyType} key`,\n 401\n );\n },\n\n missingPrivateKey: (method: string) => {\n return new CrowdHandlerError(\n ErrorCodes.MISSING_PRIVATE_KEY,\n `${method} requires a private key`,\n `Initialize with: crowdhandler.init({ publicKey, privateKey })`,\n 403\n );\n },\n\n missingContext: (method: string) => {\n const example = typeof window !== 'undefined' \n ? 'crowdhandler.init({ publicKey })'\n : 'crowdhandler.init({ publicKey, request: req, response: res })';\n \n return new CrowdHandlerError(\n ErrorCodes.MISSING_CONTEXT,\n `${method} requires request context`,\n `Initialize with: ${example}`,\n 400\n );\n },\n\n invalidResponse: (response: any) => {\n return new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n 'Received invalid response from CrowdHandler API',\n 'This might be a temporary issue. If it persists, contact support@crowdhandler.com',\n 502,\n { response: JSON.stringify(response).substring(0, 200) }\n );\n },\n\n rateLimited: (retryAfter?: string) => {\n return new CrowdHandlerError(\n ErrorCodes.RATE_LIMITED,\n 'API rate limit exceeded',\n retryAfter \n ? `Wait ${retryAfter} seconds before retrying`\n : 'Reduce the frequency of API calls',\n 429,\n { retryAfter }\n );\n },\n\n resourceNotFound: (resourceType: string, resourceId: string) => {\n const errorCode = {\n domain: ErrorCodes.DOMAIN_NOT_FOUND,\n room: ErrorCodes.ROOM_NOT_FOUND,\n session: ErrorCodes.SESSION_NOT_FOUND,\n }[resourceType] || ErrorCodes.API_INVALID_RESPONSE;\n \n return new CrowdHandlerError(\n errorCode,\n `${resourceType} not found: ${resourceId}`,\n `Check that the ${resourceType} ID is correct and that you have access to it`,\n 404,\n { resourceType, resourceId }\n );\n }\n};","/**\n * Detect if we're running in the Cloudflare Workers (workerd) runtime.\n * Workers sets navigator.userAgent to \"Cloudflare-Workers\" — this is the\n * documented and stable detection signal:\n * https://developers.cloudflare.com/workers/runtime-apis/web-standards/\n */\nexport const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n (navigator as any).userAgent === \"Cloudflare-Workers\";\n","import axios, { AxiosInstance } from \"axios\";\nimport { z, ZodError } from \"zod\";\nimport { logger } from \"../common/logger\";\nimport { CrowdHandlerError, createError, ErrorCodes } from \"../common/errors\";\nimport { isCloudflareWorkers } from \"../common/runtime\";\n\n// axios 0.27.2 has no fetch adapter and requires Node's http module, so it\n// crashes inside Workers. When isCloudflareWorkers is true we route HTTP\n// through native fetch instead — preserved error shape so errorHandler keeps\n// working.\n\nconst APIResponse = z.object({}).catchall(z.any());\n\nconst APIErrorResponse = z\n .object({\n error: z.string().optional(),\n message: z.string().optional(),\n statusCode: z.number().optional(),\n })\n .catchall(z.any());\n\nexport class BaseClient {\n protected debug: boolean;\n protected apiUrl: string;\n protected key: string;\n protected timeout: number;\n\n constructor(\n apiUrl: string,\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n this.debug = options.debug || false;\n this.apiUrl = options.apiUrl || apiUrl;\n this.key = key;\n this.timeout = options.timeout || 5000;\n if (!isCloudflareWorkers) {\n // axios.defaults is process-global state and is meaningless in Workers\n // (we don't use axios there). Skip in Workers to avoid touching axios's\n // internal config which can drag in Node-only deps during import.\n axios.defaults.timeout = this.timeout;\n }\n }\n\n /**\n * Issue an HTTP request. Routes through axios in Node/Lambda environments\n * and native fetch in Cloudflare Workers. Both paths return / throw\n * axios-compatible shapes so errorHandler() and the response.data parsing\n * downstream work unchanged.\n */\n private async httpRequest(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n url: string,\n options: {\n params?: Record;\n body?: any;\n headers?: Record;\n timeout?: number;\n } = {}\n ): Promise<{ data: any; status: number; headers: any }> {\n const requestTimeout = options.timeout ?? this.timeout;\n if (!isCloudflareWorkers) {\n // Node/Lambda path — preserve existing axios behaviour exactly.\n const response = await axios.request({\n method,\n url,\n params: options.params,\n data: options.body,\n headers: options.headers,\n timeout: requestTimeout,\n });\n return { data: response.data, status: response.status, headers: response.headers };\n }\n\n // Workers path — native fetch with a manual timeout via AbortController.\n let finalUrl = url;\n if (options.params && Object.keys(options.params).length > 0) {\n const search = new URLSearchParams();\n for (const [k, v] of Object.entries(options.params)) {\n if (v !== undefined && v !== null) search.append(k, String(v));\n }\n finalUrl += (finalUrl.includes(\"?\") ? \"&\" : \"?\") + search.toString();\n }\n\n const init: RequestInit = {\n method,\n headers: options.headers as any,\n };\n\n if (options.body !== undefined && method !== \"GET\" && method !== \"DELETE\") {\n init.body = typeof options.body === \"string\" ? options.body : JSON.stringify(options.body);\n const hasContentType = options.headers && Object.keys(options.headers)\n .some((h) => h.toLowerCase() === \"content-type\");\n if (!hasContentType) {\n init.headers = { ...(options.headers || {}), \"content-type\": \"application/json\" };\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), requestTimeout);\n init.signal = controller.signal;\n\n let response: Response;\n try {\n response = await fetch(finalUrl, init);\n } catch (err: any) {\n clearTimeout(timeoutId);\n // Mirror axios's \"no response received\" error shape so errorHandler's\n // `else if (error.request)` branch fires.\n const wrapped: any = new Error(err?.message || \"Network request failed\");\n if (controller.signal.aborted || err?.name === \"AbortError\") {\n wrapped.code = \"ECONNABORTED\";\n }\n wrapped.request = { url: finalUrl, method };\n wrapped.config = { url: finalUrl, method };\n throw wrapped;\n }\n clearTimeout(timeoutId);\n\n // Read body — try JSON first, fall back to text.\n const contentType = response.headers.get(\"content-type\") || \"\";\n let data: any;\n if (contentType.includes(\"application/json\")) {\n try { data = await response.json(); } catch { data = null; }\n } else {\n const text = await response.text();\n try { data = JSON.parse(text); } catch { data = text; }\n }\n\n if (response.status < 200 || response.status >= 300) {\n // Mirror axios's error.response shape so errorHandler's\n // `if (error.response)` branch fires unchanged.\n const headersObj: Record = {};\n response.headers.forEach((v, k) => { headersObj[k] = v; });\n const wrapped: any = new Error(`Request failed with status ${response.status}`);\n wrapped.response = { status: response.status, data, headers: headersObj };\n wrapped.config = { url: finalUrl, method };\n throw wrapped;\n }\n\n const headersObj: Record = {};\n response.headers.forEach((v, k) => { headersObj[k] = v; });\n return { data, status: response.status, headers: headersObj };\n }\n\n /**\n * Wraps any error into a CrowdHandlerError\n */\n private wrapError(error: any): CrowdHandlerError {\n // Already a CrowdHandlerError\n if (error instanceof CrowdHandlerError) {\n return error;\n }\n\n // Zod validation error\n if (error.name === 'ZodError') {\n return new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n 'Invalid response format from API',\n 'This might be a temporary issue. If it persists, contact support@crowdhandler.com',\n undefined,\n { parseError: error.message }\n );\n }\n\n // Generic unknown error\n return new CrowdHandlerError(\n ErrorCodes.UNKNOWN_ERROR,\n error.message || 'An unexpected error occurred',\n 'Please try again. If the problem persists, contact support@crowdhandler.com',\n undefined,\n { \n errorType: error.constructor?.name,\n stack: error.stack\n }\n );\n }\n\n /**\n * Provides generic suggestion based on HTTP status code\n */\n private getGenericSuggestion(status: number): string {\n switch (status) {\n case 400: return 'Check your request parameters';\n case 401: return 'Check your authentication credentials';\n case 403: return 'You do not have permission for this action';\n case 404: return 'The requested resource was not found';\n case 429: return 'Too many requests - please slow down';\n case 500: \n case 502:\n case 503:\n case 504:\n return 'Server error - please try again later';\n default: \n return status >= 500 \n ? 'This appears to be a server error. Please try again later or contact support@crowdhandler.com'\n : 'Please check your request parameters and try again';\n }\n }\n\n async errorHandler(error: any): Promise {\n // If it's already a CrowdHandlerError, just re-throw it\n if (error instanceof CrowdHandlerError) {\n throw error;\n }\n if (error.response) {\n // The request was made and the server responded with a status code\n // that falls out of the range of 2xx\n const status = error.response.status;\n const data = error.response.data;\n \n logger(this.debug, \"error\", `API Error - Status: ${status} - ${JSON.stringify(data)}`);\n logger(this.debug, \"error\", `Response headers: ${JSON.stringify(error.response.headers)}`);\n\n // Extract the error message from the API response\n const errorMessage = data?.error || data?.message || `API request failed with status ${status}`;\n \n // Special handling for rate limiting to include retry-after\n if (status === 429) {\n const retryAfter = error.response.headers['retry-after'];\n throw new CrowdHandlerError(\n ErrorCodes.RATE_LIMITED,\n errorMessage,\n retryAfter \n ? `Wait ${retryAfter} seconds before retrying`\n : 'Reduce the frequency of API calls',\n status,\n {\n url: error.config?.url,\n method: error.config?.method,\n apiResponse: data,\n retryAfter\n }\n );\n }\n \n // Pass through the API error with full response data\n throw new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n errorMessage,\n this.getGenericSuggestion(status),\n status,\n { \n url: error.config?.url,\n method: error.config?.method,\n apiResponse: data // Full API response, not truncated\n }\n );\n \n } else if (error.request) {\n // The request was made but no response was received\n logger(this.debug, \"error\", `No response received: ${error.message}`);\n \n throw createError.apiConnection(error);\n \n } else {\n // Something happened in setting up the request\n logger(this.debug, \"error\", `Request setup error: ${error.message}`);\n \n // Use wrapError to ensure we always throw CrowdHandlerError\n throw this.wrapError(error);\n }\n }\n\n async httpDELETE(path: string, body: object) {\n try {\n const response = await this.httpRequest(\"DELETE\", this.apiUrl + path, {\n headers: {\n \"x-api-key\": this.key,\n },\n });\n\n try {\n return APIResponse.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error: any) {\n await this.errorHandler(error);\n }\n }\n\n async httpGET(path?: string, params?: object) {\n try {\n const response = await this.httpRequest(\"GET\", this.apiUrl + path, {\n params: params as Record,\n headers: {\n \"x-api-key\": this.key,\n },\n });\n\n try {\n return APIResponse.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error) {\n await this.errorHandler(error);\n }\n }\n\n async httpPOST(\n path: string,\n body?: Record,\n headers?: Record,\n schema: z.Schema = APIResponse\n ) {\n try {\n const response = await this.httpRequest(\"POST\", this.apiUrl + path, {\n body,\n headers: {\n \"x-api-key\": this.key,\n ...headers,\n },\n });\n\n try {\n return schema.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error) {\n await this.errorHandler(error);\n }\n }\n\n async httpPUT(path: string, body: object, options?: { timeout?: number }) {\n try {\n const response = await this.httpRequest(\"PUT\", this.apiUrl + path, {\n body,\n headers: {\n \"x-api-key\": this.key,\n },\n timeout: options?.timeout,\n });\n return APIResponse.parse(response.data);\n } catch (error) {\n return this.errorHandler(error);\n }\n }\n}\n","import { BaseClient } from \"./base_client\";\n\nexport class Resource extends BaseClient {\n path: string;\n constructor(\n key: string,\n path: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const {\n timeout = 5000,\n debug = false,\n apiUrl = \"https://api.crowdhandler.com\",\n } = options ?? {};\n super(apiUrl, key, options);\n this.path = path;\n }\n\n private formatPath(path: string, id: string) {\n // If id is not provided, replace it with an empty string.\n id = id || \"\";\n\n //this.path may contain a placeholder for the id. replace it with the actual id.\n path = path.replace(\"ID_PLACEHOLDER\", id);\n\n return path;\n }\n\n delete(id: string, body: object) {\n this.path = this.formatPath(this.path, id);\n\n return super.httpDELETE(this.path, body);\n }\n\n get(id?: string, params?: any) {\n //Handle id being an optional parameter\n if (!id) {\n id = \"\";\n }\n\n this.path = this.formatPath(this.path, id);\n\n // Extract custom parameters and spread them with other params\n const { custom, ...standardParams } = params || {};\n const requestParams = {\n ...standardParams,\n ...custom // Spread custom parameters at the root level\n };\n\n return super.httpGET(this.path, requestParams);\n }\n\n post(body: any) {\n this.path = this.formatPath(this.path, \"\");\n\n // Extract custom parameters and spread them with other body params\n const { custom, ...standardBody } = body || {};\n const requestBody = {\n ...standardBody,\n ...custom // Spread custom parameters at the root level\n };\n\n return super.httpPOST(this.path, requestBody);\n }\n\n put(id: string, body: object, options?: { timeout?: number }) {\n this.path = this.formatPath(this.path, id);\n\n return super.httpPUT(this.path, body, options);\n }\n}\n","import { BaseClient } from \"./base_client\";\nimport { Resource } from \"./resource\";\n\nexport class PublicClient extends BaseClient {\n constructor(\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const { timeout = 5000, debug = false, apiUrl = \"https://api.crowdhandler.com\" } =\n options ?? {};\n super(apiUrl, key, options);\n }\n\n requests() {\n return new Resource(this.key, \"/v1/requests/ID_PLACEHOLDER\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n\n responses() {\n return new Resource(this.key, \"/v1/responses/ID_PLACEHOLDER\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n\n rooms() {\n return new Resource(this.key, \"/v1/rooms/\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n}","import { BaseClient } from \"./base_client\";\nimport { Resource } from \"./resource\";\n\nexport class PrivateClient extends BaseClient {\n constructor(\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const {\n timeout = 5000,\n debug = false,\n apiUrl = \"https://api.crowdhandler.com\",\n } = options ?? {};\n super(apiUrl, key, options);\n }\n\n account() {\n return new Resource(this.key, \"/v1/account/\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n accountPlan() {\n return new Resource(this.key, \"/v1/account/plan\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n codes() {\n return new Resource(this.key, \"/v1/codes/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domains() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainIPs() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/ips\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainReports() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/reports\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainRequests() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/requests\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainRooms() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/rooms\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainURLs() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/urls\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groups() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groupBatch() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER/batch\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groupCodes() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER/codes\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n ips() {\n return new Resource(this.key, \"/v1/ips/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n reports() {\n return new Resource(this.key, \"/v1/reports/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n rooms() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n roomReports() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER/reports\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n roomSessions() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER/sessions\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n sessions() {\n return new Resource(this.key, \"/v1/sessions/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n templates() {\n return new Resource(this.key, \"/v1/templates/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n}\n","import { PublicClient } from \"./public_client\";\nimport { PrivateClient } from \"./private_client\";\nimport { createError } from \"../common/errors\";\n\n/**\n * Configuration for the unified Client\n */\ninterface ClientConfig {\n /** Your CrowdHandler public key */\n publicKey: string;\n \n /** Your CrowdHandler private key (required for private API access) */\n privateKey?: string;\n \n /** Additional client options */\n options?: {\n /** API request timeout in milliseconds (default: 5000) */\n timeout?: number;\n \n /** Enable debug logging (default: false) */\n debug?: boolean;\n \n /** Custom API URL (default: https://api.crowdhandler.com) */\n apiUrl?: string;\n };\n}\n\n/**\n * Unified CrowdHandler API client that combines public and private API access.\n * \n * This client provides a single interface to all CrowdHandler API endpoints,\n * with intelligent error messages when attempting to use private endpoints\n * without a private key.\n * \n * @example\n * // Public API only\n * const client = new Client({ publicKey: 'pk_xyz' });\n * const rooms = await client.rooms().get();\n * \n * @example\n * // Public and Private API\n * const client = new Client({ \n * publicKey: 'pk_xyz',\n * privateKey: 'sk_xyz' \n * });\n * const domains = await client.domains().get();\n */\nexport class Client {\n private publicClient: PublicClient;\n private privateClient?: PrivateClient;\n private hasPrivateAccess: boolean;\n\n constructor(config: ClientConfig) {\n this.publicClient = new PublicClient(config.publicKey, config.options);\n this.hasPrivateAccess = !!config.privateKey;\n \n if (config.privateKey) {\n this.privateClient = new PrivateClient(config.privateKey, config.options);\n }\n }\n\n // ===== Public API Methods (always available) =====\n \n /**\n * Access request resources\n * @returns Resource instance for request operations\n * \n * @example\n * const request = await client.requests().get('req_123');\n */\n requests() {\n return this.publicClient.requests();\n }\n\n /**\n * Access response resources\n * @returns Resource instance for response operations\n * \n * @example\n * const response = await client.responses().get('res_123');\n */\n responses() {\n return this.publicClient.responses();\n }\n\n /**\n * Access room resources\n * @returns Resource instance for room operations\n * \n * @example\n * const rooms = await client.rooms().get();\n * const room = await client.rooms().get('room_123');\n */\n rooms() {\n return this.publicClient.rooms();\n }\n\n // ===== Private API Methods (require privateKey) =====\n \n /**\n * Access account information (requires private key)\n * @returns Resource instance for account operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const account = await client.account().get();\n */\n account() {\n this.requirePrivateAccess('account()');\n return this.privateClient!.account();\n }\n\n accountPlan() {\n this.requirePrivateAccess('accountPlan()');\n return this.privateClient!.accountPlan();\n }\n\n codes() {\n this.requirePrivateAccess('codes()');\n return this.privateClient!.codes();\n }\n\n /**\n * Access domain resources (requires private key)\n * @returns Resource instance for domain operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const domains = await client.domains().get();\n * const domain = await client.domains().get('dom_123');\n * const newDomain = await client.domains().post({ domain: 'example.com' });\n */\n domains() {\n this.requirePrivateAccess('domains()');\n return this.privateClient!.domains();\n }\n\n domainIPs() {\n this.requirePrivateAccess('domainIPs()');\n return this.privateClient!.domainIPs();\n }\n\n domainReports() {\n this.requirePrivateAccess('domainReports()');\n return this.privateClient!.domainReports();\n }\n\n domainRequests() {\n this.requirePrivateAccess('domainRequests()');\n return this.privateClient!.domainRequests();\n }\n\n domainRooms() {\n this.requirePrivateAccess('domainRooms()');\n return this.privateClient!.domainRooms();\n }\n\n domainURLs() {\n this.requirePrivateAccess('domainURLs()');\n return this.privateClient!.domainURLs();\n }\n\n groups() {\n this.requirePrivateAccess('groups()');\n return this.privateClient!.groups();\n }\n\n groupBatch() {\n this.requirePrivateAccess('groupBatch()');\n return this.privateClient!.groupBatch();\n }\n\n groupCodes() {\n this.requirePrivateAccess('groupCodes()');\n return this.privateClient!.groupCodes();\n }\n\n ips() {\n this.requirePrivateAccess('ips()');\n return this.privateClient!.ips();\n }\n\n reports() {\n this.requirePrivateAccess('reports()');\n return this.privateClient!.reports();\n }\n\n roomReports() {\n this.requirePrivateAccess('roomReports()');\n return this.privateClient!.roomReports();\n }\n\n roomSessions() {\n this.requirePrivateAccess('roomSessions()');\n return this.privateClient!.roomSessions();\n }\n\n /**\n * Access session resources (requires private key)\n * @returns Resource instance for session operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const sessions = await client.sessions().get();\n * const session = await client.sessions().get('ses_123');\n */\n sessions() {\n this.requirePrivateAccess('sessions()');\n return this.privateClient!.sessions();\n }\n\n templates() {\n this.requirePrivateAccess('templates()');\n return this.privateClient!.templates();\n }\n\n // ===== Internal Methods =====\n \n /**\n * Get the internal PublicClient instance (used by Gatekeeper)\n */\n getPublicClient(): PublicClient {\n return this.publicClient;\n }\n\n /**\n * Check if private API access is available\n */\n hasPrivateAPIAccess(): boolean {\n return this.hasPrivateAccess;\n }\n\n // ===== Helper Methods =====\n private requirePrivateAccess(method: string): void {\n if (!this.hasPrivateAccess) {\n throw createError.missingPrivateKey(method);\n }\n }\n}","export class BrowserHandler {\n constructor() {}\n\n public getCookies() {\n return document.cookie;\n }\n\n public getHost() {\n return window.location.host;\n }\n\n public getProtocol() {\n return window.location.protocol;\n }\n\n public getPath() {\n if (!window.location.search) {\n return window.location.pathname;\n } else {\n return `${window.location.pathname}${window.location.search}`;\n }\n }\n\n public getAbsoluteUri() {\n return window.location.href;\n }\n\n public setCookie(value: string, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n document.cookie = `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`;\n }\n\n public getLocalStorageItem(key: string): string | null {\n return localStorage.getItem(key);\n }\n\n public setLocalStorageItem(key: string, value: string): void {\n localStorage.setItem(key, value);\n }\n\n public redirect(url: string) {\n window.location.href = url;\n }\n}\n","/**\n * Handler for Cloudflare Workers (workerd) runtime.\n *\n * Mirrors the shape of LambdaRequestHandler — the Worker model is request-in /\n * response-out (no mutable response object), so:\n * - read methods source from the Workers-native Request\n * - redirect() returns a Workers Response (caller returns it from fetch)\n * - setCookie() returns the Set-Cookie header value (caller appends it\n * to the outgoing Response)\n *\n * Cookie format and no-cache redirect headers mirror the existing\n * crowdhandler-cloudflare-integration Worker so behaviour stays consistent\n * across both deployment styles.\n */\nexport class CloudflareWorkersHandler {\n private request: Request;\n private url: URL;\n\n constructor(request: Request) {\n this.request = request;\n this.url = new URL(request.url);\n }\n\n public getHeader(name: string): string {\n return this.request.headers.get(name) || \"\";\n }\n\n public getCookies(): string {\n return this.request.headers.get(\"cookie\") || \"\";\n }\n\n public getHost(): string {\n // URL.host includes port when non-standard — matches Host header\n // semantics used by the other handlers (Lambda/NodeJS/Browser).\n return this.url.host;\n }\n\n public getProtocol(): string {\n // URL.protocol includes the trailing \":\" — strip it so the value matches\n // the other handlers (which return \"https\" / \"http\").\n return this.url.protocol.replace(/:$/, \"\");\n }\n\n public getPath(): string {\n return this.url.pathname + this.url.search;\n }\n\n public getAbsoluteUri(): string {\n return this.request.url;\n }\n\n public getUserHostAddress(): string {\n // CF-Connecting-IP is the canonical client IP header on Workers\n // (matches crowdhandler-cloudflare-integration/index.js).\n return this.request.headers.get(\"cf-connecting-ip\") || \"\";\n }\n\n public setCookie(\n value: string,\n cookieName: string = \"crowdhandler\",\n domain?: string\n ): string {\n // Returns the Set-Cookie header value — caller appends it to their\n // outgoing Response. Format mirrors the existing CF integration.\n const parts = [`${cookieName}=${value}`, \"path=/\", \"Secure\"];\n if (domain) {\n parts.push(`domain=${domain}`);\n }\n return parts.join(\"; \");\n }\n\n public redirect(url: string): Response {\n // Header casing and values mirror helpers.noCacheHeaders in\n // crowdhandler-cloudflare-integration/helpers/misc.js.\n return new Response(null, {\n status: 302,\n headers: {\n Location: url,\n \"Cache-Control\": \"no-cache, no-store, must-revalidate\",\n Expires: \"Fri, 01 Jan 1970 00:00:00 GMT\",\n Pragma: \"no-cache\",\n },\n });\n }\n}\n","import { CloudFrontRequest } from \"aws-lambda\";\n\nexport class LambdaRequestHandler {\n private request: CloudFrontRequest;\n\n constructor(event: CloudFrontRequest /*context: any, callback: any*/) {\n this.request = event;\n }\n\n public getHeader(headername: string) {\n const headers = this.request.headers;\n const headerValue = headers[headername.toLowerCase()];\n\n if (!headerValue) {\n return \"\";\n }\n\n return headerValue[0].value;\n }\n\n public getCookies() {\n const headers = this.request.headers;\n const cookies = headers.cookie;\n\n if (!cookies) {\n return \"\";\n }\n\n return cookies[0].value;\n }\n\n public getHost() {\n return this.request.headers.host[0].value;\n }\n\n public getProtocol() {\n return this.request.headers[\"cloudfront-forwarded-proto\"][0].value;\n }\n\n public getPath() {\n if (!this.request.querystring) {\n return this.request.uri;\n } else {\n return `${this.request.uri}?${this.request.querystring}`;\n }\n }\n\n public getAbsoluteUri() {\n const protocol = this.getProtocol();\n const host = this.getHost();\n const path = this.getPath();\n\n return `${protocol}://${host}${path}`;\n }\n\n public getUserHostAddress() {\n return this.request.clientIp;\n }\n\n public setHeader(headerName: string, headerValue: string) {\n this.request.headers[headerName] = [\n {\n key: headerName,\n value: headerValue,\n },\n ];\n }\n\n public redirect(url: string) {\n let response = {\n status: \"302\",\n statusDescription: \"Found\",\n headers: {\n location: [\n {\n key: \"Location\",\n value: url,\n },\n ],\n /*\"set-cookie\": [\n {\n key: \"Set-Cookie\",\n value: `crowdhandler=${token}; path=/; Secure; HttpOnly`,\n },\n ],*/\n \"cache-control\": [\n {\n key: \"Cache-Control\",\n value: \"no-cache, no-store, must-revalidate\",\n },\n ],\n expires: [\n {\n key: \"Expires\",\n value: \"Fri, 01 Jan 1970 00:00:00 GMT\",\n },\n ],\n pragma: [\n {\n key: \"Pragma\",\n value: \"no-cache\",\n },\n ],\n },\n };\n return response;\n }\n}\n","import { CloudFrontRequest, CloudFrontResponse } from \"aws-lambda\";\nimport { CookieObject } from \"../common/types\";\nimport { z } from \"zod\";\n\nexport class LambdaResponseHandler {\n private request: CloudFrontRequest;\n private response: CloudFrontResponse;\n\n constructor(\n requestEvent: CloudFrontRequest,\n responseEvent: CloudFrontResponse\n ) {\n // Handle data in a Lambda@Edge environment\n this.request = requestEvent;\n this.response = responseEvent;\n }\n\n public getHeader(headername: string) {\n const headers = this.request.headers;\n const headerValue = headers[headername.toLowerCase()];\n\n if (!headerValue) {\n return \"\";\n }\n\n return headerValue[0].value;\n }\n\n public getHost() {\n return this.request.headers.host[0].value;\n }\n\n public getProtocol() {\n return this.request.headers[\"cloudfront-forwarded-proto\"][0].value;\n }\n\n public getPath() {\n return this.request.uri;\n }\n\n \n\n public setCookie(value: z.infer, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n // Append cookie to response header\n const cookieHeader = `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`;\n\n const setCookieHeader = this.response.headers[\"set-cookie\"] || [];\n setCookieHeader.push({ key: \"Set-Cookie\", value: cookieHeader });\n this.response.headers[\"set-cookie\"] = setCookieHeader;\n\n return this.response;\n }\n}\n","import { CookieObject } from \"../common/types\";\nimport { z } from \"zod\";\n\nexport class NodeJSHandler {\n private request: any;\n private response: any;\n \n constructor(req: any, res: any) {\n // Handle data in a non-Lambda environment\n this.request = req;\n this.response = res;\n }\n \n public getHeader(headername: string) {\n let headerValue = this.request.header(headername);\n \n if (!headerValue) {\n return \"\";\n }\n \n return headerValue;\n }\n \n public getCookies() {\n return this.request.get(\"cookie\");\n }\n \n public getHost() {\n return this.request.get(\"host\");\n }\n \n public getProtocol() {\n return this.request.protocol;\n }\n \n public getPath() {\n return this.request.originalUrl;\n }\n \n public getAbsoluteUri() {\n return (\n this.request.protocol +\n \"://\" +\n this.request.get(\"host\") +\n this.request.originalUrl\n );\n }\n \n public getUserHostAddress() {\n return this.request.ip;\n }\n \n public setCookie(value: z.infer, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n //Append cookie to response header\n return this.response.setHeader(\n \"Set-Cookie\",\n `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`\n );\n }\n \n public redirect(url: string) {\n this.response.setHeader(\"Cache-Control\", \"no-cache, no-store, max-age=0\");\n this.response.setHeader(\"Pragma\", \"no-cache\");\n this.response.setHeader(\"Expires\", 0);\n this.response.setHeader(\"Location\", url);\n this.response.statusCode = 302;\n return this.response.end();\n }\n }","import { CloudFrontRequestEvent, CloudFrontResponseEvent } from \"aws-lambda\";\n\nimport { BrowserHandler } from \"./browserHandler\";\nimport { CloudflareWorkersHandler } from \"./cloudflareWorkersHandler\";\nimport { LambdaRequestHandler } from \"./lambdaRequestHandler\";\nimport { LambdaResponseHandler } from \"./lambdaResponseHandler\";\nimport { NodeJSHandler } from \"./nodejsHandler\";\n\ninterface RequestContextParams {\n lambdaEvent?: any;\n request?: any;\n response?: any;\n cloudflareWorkersRequest?: any;\n}\n\n//Create a base class that will act as a switch depending on the environment\nexport class RequestContext {\n //constructor(event: CloudFrontEvent, req?: any, res?: any) {\n constructor(params: RequestContextParams) {\n //Lambda@Edge event\n if (params && params.lambdaEvent) {\n //Create a switch based on the event type\n switch (params.lambdaEvent?.Records[0].cf.config.eventType) {\n case \"viewer-request\":\n case \"origin-request\":\n //update the event type to be a CloudFrontRequestEvent\n const requestEvent =\n params.lambdaEvent as unknown as CloudFrontRequestEvent;\n return new LambdaRequestHandler(requestEvent.Records[0].cf.request);\n break;\n\n case \"viewer-response\":\n case \"origin-response\":\n //update the event type to be a CloudFrontResponseEvent\n const responseEvent =\n params.lambdaEvent as unknown as CloudFrontResponseEvent;\n return new LambdaResponseHandler(\n responseEvent.Records[0].cf.request,\n responseEvent.Records[0].cf.response\n );\n break;\n }\n //Cloudflare Workers Request\n } else if (params && params.cloudflareWorkersRequest) {\n return new CloudflareWorkersHandler(params.cloudflareWorkersRequest);\n //NodeJS HTTP request\n } else if (params && params.request && params.response) {\n return new NodeJSHandler(params.request, params.response);\n //Default to Browser request\n } else {\n return new BrowserHandler();\n }\n }\n}\n","export function ignoredPatternsCheck(path: string, patterns: RegExp) {\n //Handle static file extensions\n let result = patterns.test(path)\n return result\n}","import { z } from \"zod\";\n\n// Lite Validator types\nexport const RoomConfig = z.object({\n domain: z.string(), // Format: \"https://example.com\"\n urlPattern: z.string().optional(),\n patternType: z.enum(['regex', 'contains', 'all']).optional(),\n queueActivatesOn: z.number().optional(),\n slug: z.string(),\n timeout: z.number().optional()\n});\n\nexport const RoomsConfig = z.array(RoomConfig);\n\n//Gatekeeper Options\nexport const GatekeeperOptions = z.object({\n debug: z.boolean().optional(),\n fallbackSlug: z.string().optional(),\n mode: z.string().optional(),\n timeout: z.number().optional(),\n trustOnFail: z.boolean().optional(),\n cookieName: z.string().optional(),\n liteValidator: z.boolean().optional(),\n roomsConfig: RoomsConfig.optional(), // Array of room configs\n waitingRoom: z.boolean().optional(),\n testError: z.object({\n statusCode: z.number(),\n message: z.string().optional(),\n }).optional(), // For testing error handling\n});\n\nexport const GatekeeperKeyPair = z.object({\n publicKey: z.string(),\n privateKey: z.string().optional(),\n});\n\n// Centralised list of CrowdHandler query-string parameter keys.\n// Used wherever ch-* params need to be detected or stripped.\nexport const CH_PARAM_KEYS: readonly string[] = [\n 'ch-code',\n 'ch-fresh',\n 'ch-id',\n 'ch-id-signature',\n 'ch-public-key',\n 'ch-requested',\n];\n\nexport const SpecialParametersObject = z.object({\n chCode: z.string(),\n chID: z.string(),\n chIDSignature: z.string(),\n chPublicKey: z.string(),\n chRequested: z.string(),\n});\n\n// Request configuration for session status API calls\nexport const SessionRequestConfig = z.object({\n agent: z.string().optional(),\n ip: z.string().optional(),\n lang: z.string().optional(),\n url: z.string().optional(),\n slug: z.string().optional(),\n // Allow custom parameters to be passed through\n custom: z.record(z.any()).optional(),\n});\n\nexport const ProcessURLResultObject = z.object({\n targetURL: z.string(),\n specialParameters: SpecialParametersObject,\n});\n\nexport const RequestObject = z\n .object({\n hostname: z.string(),\n path: z.string(),\n })\n .catchall(z.any());\n\n//Cookie object structure validation\nexport const CookieObject = z\n .object({\n tokens: z.array(z.any()),\n deployment: z.string().optional(),\n })\n .catchall(z.any());\n\nexport const LocalStorageObject = z.object({\n countdown: z.record(z.unknown()),\n positions: z.record(z.unknown()),\n token: z.record(z.string()),\n});\n\nexport const LocalStorageOptions = z.object({\n storageName: z.string(),\n localStorageValue: z.string(),\n});\n\n//Response structure validation\nexport const RoomMetaObject = z\n .object({\n domain: z.string().nullable(),\n patternType: z.string().nullable(),\n queueActivatesOn: z.string().nullable(),\n slug: z.string().nullable(),\n status: z.boolean().nullable(),\n timeout: z.number().nullable(),\n })\n .catchall(z.any());\n\nexport const SignatureObject = z.array(\n z.object({\n gen: z.string(),\n sig: z.string(),\n })\n);\n\nexport const SignatureResponseObject = z.object({\n expiration: z.nullable(z.boolean()),\n success: z.nullable(z.boolean()),\n});\n\nexport const SignatureSourceObject = z.object({\n chIDSignature: z.string().optional(),\n crowdhandlerCookieValue: CookieObject.optional(),\n});\n\nexport const ExtractTokenOptions = z.object({\n //object can contain anything and we don't know any of the possible values\n crowdhandlerCookieValue: CookieObject.optional(),\n chID: z.string().optional(),\n localStorageValue: LocalStorageObject.optional(),\n simpleCookieValue: z.string().optional(),\n});\n\nexport const TokenObject = z.object({\n token: z.string(),\n touched: z.number(),\n touchedSig: z.string(),\n signatures: z.array(z.any()),\n});\n\n\nexport const TokenObjectConstructor = z.object({\n tokenDatestamp: z.number(),\n tokenDatestampSignature: z.string(),\n tokenSignature: z.string(),\n tokenSignatureGenerated: z.string(),\n tokenSignatures: z.array(z.any()),\n tokenValue: z.string(),\n});\n\n// Custom parameters that can be passed to validateRequest\nexport const ValidateRequestParams = z.object({\n custom: z.record(z.any()).optional(),\n});\n\nexport const ValidateRequestObject = z.object({\n promoted: z.boolean(),\n stripParams: z.boolean(),\n setCookie: z.boolean(),\n cookieValue: z.string().optional(),\n setLocalStorage: z.boolean(),\n localStorageValue: z.string().optional(),\n responseID: z.string().optional(),\n slug: z.string().optional(),\n targetURL: z.string().optional(),\n deployment: z.string().optional(),\n hash: z.string().nullable().optional(),\n token: z.string().optional(),\n requested: z.string().optional(),\n liteValidatorRedirect: z.boolean().optional(),\n liteValidatorUrl: z.string().optional(),\n domain: z.string().optional(),\n error: z.object({\n message: z.string(),\n statusCode: z.number().optional(),\n code: z.string().optional(),\n }).optional(),\n});\n\nexport const HttpErrorWrapper = z.object({\n result: z.object({\n error: z.string().nullable(),\n status: z.number().nullable(),\n }),\n});\n\nexport const SessionStatusWrapper = z.object({\n result: z\n .object({\n hash: z.string().nullable().optional(),\n promoted: z.number().nullable(),\n status: z.number().nullable(),\n slug: z.string().nullable().optional(),\n token: z.string().nullable().optional(),\n urlRedirect: z.string().nullable().optional(),\n requested: z.string().nullable().optional(),\n })\n .catchall(z.any()),\n});\n\nexport const RecordPerformanceOptions = z.object({\n statusCode: z.number().optional().default(200),\n sample: z.number().optional().default(0.2),\n overrideElapsed: z.number().optional(),\n responseID: z.string().optional(),\n timeout: z.number().optional(),\n});\n\n// Mode constants\nexport const Modes = {\n FULL: 'full',\n HYBRID: 'hybrid',\n CLIENTSIDE: 'clientside',\n AUTO: 'auto'\n} as const;\n\nexport type Mode = typeof Modes[keyof typeof Modes];\n","import { ignoredPatternsCheck } from \"../common/ignoredPatternsCheck\";\nimport { z } from \"zod\";\nimport { RoomMetaObject } from \"../common/types\";\n\nexport class ConfigParse {\n private roomMeta = {\n domain: null,\n patternType: null,\n queueActivatesOn: null,\n slug: null,\n status: false,\n timeout: null,\n };\n private readonly config: Object[];\n private readonly host: string;\n private readonly path: string;\n private readonly patterns: RegExp;\n\n constructor(config: Object[], host: string, path: string, patterns: RegExp) {\n this.config = config;\n this.host = host;\n this.path = path;\n this.patterns = patterns;\n }\n\n patternEvaulation(item: any) {\n switch (item.patternType) {\n case \"regex\":\n let regex = new RegExp(item.urlPattern);\n return regex.test(this.path);\n break;\n\n case \"contains\":\n let contains = item.urlPattern;\n return this.path.includes(contains);\n break;\n\n case \"all\":\n return true;\n break;\n\n default:\n break;\n }\n }\n\n parse() {\n let staticAsset = ignoredPatternsCheck(this.path, this.patterns);\n\n if (staticAsset) {\n return RoomMetaObject.parse(this.roomMeta);\n }\n\n let filteredResults: any;\n filteredResults = this.config.filter((item: any) => {\n if (item.domain === `https://${this.host}`) {\n return item;\n }\n });\n\n\n for (const item of filteredResults) {\n if (this.patternEvaulation(item) === true) {\n //Populate the roomMeta object.\n //Use slug as a guard to make sure if we've already found a match we don't override it with weaker ones as we loop.\n if (this.roomMeta.slug === null) {\n this.roomMeta.domain = item.domain;\n this.roomMeta.patternType = item.patternType;\n this.roomMeta.queueActivatesOn = item.queueActivatesOn;\n this.roomMeta.slug = item.slug;\n this.roomMeta.status = true;\n this.roomMeta.timeout = item.timeout;\n }\n }\n }\n return RoomMetaObject.parse(this.roomMeta);\n }\n}\n","import { z } from \"zod\";\nimport { CH_PARAM_KEYS, RequestObject, SpecialParametersObject } from \"./types\";\nimport { logger } from \"./logger\";\n\nexport class ProcessURL {\n private host: string | undefined;\n private path: string | undefined;\n private rawQueryString: string | undefined;\n private specialParameters!: z.infer;\n private targetURL: string | undefined;\n debug: boolean;\n\n constructor(request: z.infer, debug: boolean = false) {\n this.host = request.getHost();\n this.path = request.getPath();\n this.specialParameters = {\n chCode: \"\",\n chID: \"\",\n chIDSignature: \"\",\n chPublicKey: \"\",\n chRequested: \"\",\n };\n\n this.debug = debug;\n }\n\n public parseURL() {\n if (!this.host) {\n logger(this.debug, \"warn\", \"No host found in request object.\");\n return {\n targetURL: \"\",\n specialParameters: this.specialParameters,\n };\n }\n\n if (!this.path) {\n logger(this.debug, \"warn\", \"No path found in request object.\");\n return {\n targetURL: \"\",\n specialParameters: this.specialParameters,\n };\n }\n\n // Extract raw query string from path (preserving original encoding)\n if (this.path.includes(\"?\")) {\n this.rawQueryString = this.path.split(\"?\")[1];\n }\n\n // Extract ch-* parameter values using regex (decode for actual use)\n const chCode = this.extractParamValue(\"ch-code\");\n const chID = this.extractParamValue(\"ch-id\");\n const chIDSignature = this.extractParamValue(\"ch-id-signature\");\n const chPublicKey = this.extractParamValue(\"ch-public-key\");\n const chRequested = this.extractParamValue(\"ch-requested\");\n\n // Set special parameters (with validation)\n this.specialParameters.chCode = this.sanitizeParam(chCode);\n this.specialParameters.chID = this.sanitizeParam(chID);\n this.specialParameters.chIDSignature = this.sanitizeParam(chIDSignature);\n this.specialParameters.chPublicKey = this.sanitizeParam(chPublicKey);\n this.specialParameters.chRequested = this.sanitizeParam(chRequested);\n\n // Remove ch-* params from query string while preserving everything else\n const processedQueryString = this.removeChParams(this.rawQueryString);\n\n // Extract path without query string\n const cleanPath = this.path.split(\"?\")[0];\n\n // Construct targetURL\n if (processedQueryString) {\n this.targetURL = encodeURIComponent(\n `https://${this.host}${cleanPath}?${processedQueryString}`\n );\n } else {\n this.targetURL = encodeURIComponent(`https://${this.host}${cleanPath}`);\n }\n\n return {\n targetURL: this.targetURL,\n specialParameters: this.specialParameters,\n };\n }\n\n /**\n * Extract a parameter value from the raw query string using regex.\n * Decodes the value for actual use.\n *\n * Treats `+` as a space before percent-decoding — this is the HTML\n * form-encoding convention used by URLSearchParams and the legacy\n * query-string library, and by every other CrowdHandler integration\n * (Cloudflare Worker, CloudFront). `decodeURIComponent` alone does not\n * do this. Keeping it consistent matters for signature validation: any\n * divergence in how the SDK and the edge decode ch-* values produces\n * mismatched signatures.\n */\n private extractParamValue(paramName: string): string {\n if (!this.rawQueryString) return \"\";\n\n // Match the parameter in the query string\n const regex = new RegExp(`(?:^|&)${paramName}=([^&]*)`, \"i\");\n const match = this.rawQueryString.match(regex);\n\n if (match && match[1]) {\n const normalized = match[1].replace(/\\+/g, \"%20\");\n try {\n return decodeURIComponent(normalized);\n } catch {\n // Malformed percent-encoding. Still honour the `+` → space convention\n // on the fallback path so output stays consistent with URLSearchParams.\n return match[1].replace(/\\+/g, \" \");\n }\n }\n return \"\";\n }\n\n /**\n * Sanitize a parameter value - return empty string for unusable values.\n */\n private sanitizeParam(value: string): string {\n if (!value || value === \"undefined\" || value === \"null\") {\n return \"\";\n }\n return value;\n }\n\n /**\n * Remove ch-* parameters from the query string while preserving\n * the original encoding of all other parameters.\n */\n private removeChParams(queryString: string | undefined): string {\n if (!queryString) return \"\";\n\n // Split into individual params, filter out ch-* params, rejoin\n const params = queryString.split(\"&\");\n const filteredParams = params.filter((param) => {\n const key = param.split(\"=\")[0];\n return !CH_PARAM_KEYS.includes(key.toLowerCase());\n });\n\n return filteredParams.join(\"&\");\n }\n}\n","import { sha256 } from \"js-sha256\";\n\nexport function generateSignature(input: string) {\n const hash = sha256(input);\n return hash;\n}\n","import {\n CookieObject,\n RequestObject,\n RoomMetaObject,\n SignatureObject,\n SignatureResponseObject,\n SpecialParametersObject,\n} from \"../common/types\";\nimport { generateSignature } from \"../common/hash\";\nimport { logger } from \"../common/logger\";\nimport { TypeOf, z } from \"zod\";\n\nexport class Signature {\n private readonly activeConfig: any;\n private hashedPrivateKey: string | undefined;\n private signatureType: string | undefined;\n private complexSignature: z.infer | undefined;\n private simpleSignature: string[];\n private freshSignature: boolean | undefined;\n private matchedSignature: string | undefined;\n private cookie: z.infer | undefined;\n private specialParameters: z.infer;\n private hashCandidates: string[] = [];\n private activeCookie: any;\n private token: string | undefined;\n private requested: string | undefined;\n private validationResponse: z.infer = {\n expiration: null,\n success: null,\n };\n debug: boolean;\n\n constructor(\n activeConfig: z.infer,\n hashedPrivateKey: string | undefined,\n signatureType: string | undefined,\n simpleSignature: string[] = [],\n complexSignature: z.infer | undefined,\n token: string | undefined,\n cookie: z.infer | undefined,\n requested: string | undefined,\n specialParameters: z.infer,\n debug: boolean = false\n ) {\n this.activeConfig = activeConfig;\n this.hashedPrivateKey = hashedPrivateKey;\n this.signatureType = signatureType;\n this.complexSignature = complexSignature;\n this.simpleSignature = simpleSignature;\n this.token = token;\n this.cookie = cookie;\n this.requested = requested;\n this.specialParameters = specialParameters;\n this.debug = debug;\n\n if (this.requested) {\n this.specialParameters.chRequested = this.requested;\n }\n\n if (this.specialParameters.chRequested) {\n this.freshSignature = true;\n } else {\n this.freshSignature = false;\n }\n }\n\n private getHashCandidates() {\n let generatedHistory = [];\n\n //Check that the cookie is in a format that we can work with\n try {\n if (this.cookie) {\n CookieObject.parse(this.cookie);\n\n if (!this.freshSignature && this.cookie) {\n this.activeCookie = this.cookie.tokens[this.cookie.tokens.length - 1];\n }\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n }\n\n if (this.simpleSignature && this.simpleSignature.length > 0) {\n this.hashCandidates.unshift(\n `${this.hashedPrivateKey}${this.activeConfig.slug}${this.activeConfig.queueActivatesOn}${this.token}${this.specialParameters.chRequested}`\n );\n } else if (this.complexSignature && this.complexSignature.length > 0) {\n //If we have a signature that is active, we can use that to generate the hash\n for (const item of this.complexSignature) {\n generatedHistory.unshift(item.gen);\n }\n\n //Generate possible hash candidates\n for (const item of generatedHistory) {\n this.hashCandidates.push(\n `${this.hashedPrivateKey}${this.activeConfig.slug}${this.activeConfig.queueActivatesOn}${this.token}${item}`\n );\n }\n } else {\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return;\n }\n }\n\n private hashValidation() {\n let requiredHash;\n if (this.freshSignature) {\n let requiredHash = generateSignature(this.hashCandidates[0]);\n if (this.simpleSignature.some((item) => item === requiredHash) === true) {\n this.matchedSignature = requiredHash;\n }\n } else if (this.complexSignature && this.complexSignature.length > 0) {\n for (const hash of this.hashCandidates) {\n let requiredHash = generateSignature(hash);\n if (\n this.complexSignature.some((item) => item.sig === requiredHash) ===\n true\n ) {\n this.matchedSignature = requiredHash;\n break;\n }\n }\n }\n\n //No signature matches found. Validation failed.\n if (!this.matchedSignature) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return;\n }\n }\n\n private hashExpiration() {\n function minutesSinceTokenCreated(datestamp: number) {\n //UTC\n const currentDatestamp = new Date().getTime();\n\n //Time passed since creation time in minutes\n let minutesPassed = (currentDatestamp - datestamp) / 1000 / 60;\n //One decimal place\n minutesPassed = Math.round(minutesPassed * 10) / 10;\n return minutesPassed;\n }\n\n //This will only be true if we're dealing with a request that has recently been promoted from the waiting room or lite-validator.\n if (this.freshSignature && this.specialParameters.chRequested) {\n if (\n minutesSinceTokenCreated(\n Date.parse(this.specialParameters.chRequested)\n ) < this.activeConfig.timeout\n ) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = true;\n return;\n }\n } else if (\n this.activeCookie &&\n this.activeCookie.touchedSig ===\n generateSignature(\n `${this.hashedPrivateKey}${this.activeCookie.touched}`\n ) &&\n minutesSinceTokenCreated(this.activeCookie.touched) <\n this.activeConfig.timeout\n ) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = true;\n return;\n } else {\n //catch all\n this.validationResponse.expiration = true;\n this.validationResponse.success = false;\n return;\n }\n }\n\n public validateSignature() {\n try {\n this.getHashCandidates();\n\n if (this.validationResponse.success !== null) {\n return this.validationResponse;\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n\n try {\n this.hashValidation();\n\n if (this.validationResponse.success !== null) {\n return this.validationResponse;\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n\n try {\n this.hashExpiration();\n\n return this.validationResponse;\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n }\n}\n","import { z } from \"zod\";\nimport {\n SignatureObject,\n TokenObjectConstructor,\n TokenObject,\n} from \"../common/types\";\n\nexport class GenerateCookieObject {\n private tokenDatestamp: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenDatestamp\"];\n private tokenDatestampSignature: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenDatestampSignature\"];\n private tokenSignature: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignature\"];\n private tokenSignatureGenerated: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignatureGenerated\"];\n private tokenSignatures: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignatures\"];\n private tokenValue: z.infer[\"tokenValue\"];\n\n constructor(tokenObjectProperties: z.infer) {\n this.tokenDatestamp = tokenObjectProperties.tokenDatestamp;\n this.tokenDatestampSignature =\n tokenObjectProperties.tokenDatestampSignature;\n this.tokenSignature = tokenObjectProperties.tokenSignature;\n this.tokenSignatureGenerated =\n tokenObjectProperties.tokenSignatureGenerated;\n this.tokenSignatures = tokenObjectProperties.tokenSignatures;\n this.tokenValue = tokenObjectProperties.tokenValue;\n }\n\n signatureObject() {\n let signatureObj: z.infer[0] = {\n gen: this.tokenSignatureGenerated,\n sig: this.tokenSignature,\n };\n\n return signatureObj;\n }\n\n tokenObject() {\n let tokenObj: z.infer = {\n token: this.tokenValue,\n touched: this.tokenDatestamp,\n touchedSig: this.tokenDatestampSignature,\n signatures: this.tokenSignatures,\n };\n\n return tokenObj;\n }\n}\n","//Get source IP address of the request in node.js\nimport { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getIP(request: any) {\n let ip = request.getHeader(\"x-forwarded-for\") || request.getUserHostAddress();\n if (ip.indexOf(\",\") > -1) {\n // If there are multiple IPs in the x-forwarded-for header,\n // get the client's IP address, not the proxy addresses\n const ips = ip.split(\",\");\n ip = ips[0].trim();\n }\n\n return ip;\n}\n","import { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getLang(request: any) {\n let lang: string | undefined;\n let langStr = request.getHeader(\"accept-language\");\n if (langStr) {\n lang = langStr;\n }\n return lang;\n}\n","import { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getUserAgent(request: any) {\n let userAgent: string | undefined;\n let userAgentStr = request.getHeader(\"user-agent\");\n if (userAgentStr) {\n userAgent = userAgentStr;\n }\n return userAgent;\n}\n","//Create a class that will be used to create a timer\nexport class Timer {\n timer: number;\n //Create a constructor that will be used to initialize the timer\n constructor() {\n //Initialize the timer\n this.timer = Date.now();\n }\n //Create a method that will be used to stop the timer\n elapsed() {\n //Stop the timer\n return Date.now() - this.timer;\n }\n}\n","import { ConfigParse } from \"./configParse\";\nimport { ProcessURL } from \"../common/processURL\";\nimport { Signature } from \"./signature\";\nimport { GenerateCookieObject } from \"./tokenObject\";\nimport { logger } from \"../common/logger\";\nimport { getIP } from \"../common/ipDiscover\";\nimport { getLang } from \"../common/languageDiscover\";\nimport { getUserAgent } from \"../common/userAgentDiscover\";\nimport { Timer } from \"../common/timer\";\nimport { ignoredPatternsCheck } from \"../common/ignoredPatternsCheck\";\nimport { isCloudflareWorkers } from \"../common/runtime\";\nimport \"../common/types\";\nimport { z } from \"zod\";\nimport {\n GatekeeperOptions,\n GatekeeperKeyPair,\n RoomMetaObject,\n CookieObject,\n SignatureObject,\n SpecialParametersObject,\n TokenObject,\n ValidateRequestObject,\n HttpErrorWrapper,\n SessionStatusWrapper,\n RecordPerformanceOptions,\n SignatureSourceObject,\n ExtractTokenOptions,\n LocalStorageObject,\n LocalStorageOptions,\n ProcessURLResultObject,\n RoomConfig,\n SessionRequestConfig,\n CH_PARAM_KEYS,\n} from \"../common/types\";\nimport { generateSignature } from \"../common/hash\";\n\nexport class Gatekeeper {\n public PublicClient;\n private WAIT_URL: string = \"https://wait.crowdhandler.com\";\n public readonly STORAGE_NAME: string;\n public readonly REQUEST: any;\n private ignore: RegExp =\n /^((?!.*\\?).*(\\.(avi|css|eot|gif|ico|jpg|jpeg|js|json|mov|mp4|mpeg|mpg|og[g|v]|pdf|png|svg|ttf|txt|wmv|woff|woff2|xml))$)/;\n private hashedPrivateKey!: string;\n private publicKey: string;\n private readonly privateKey: string | undefined;\n private options: any = {\n debug: false,\n fallbackSlug: \"\",\n mode: \"full\",\n timeout: 5000,\n trustOnFail: true,\n waitingRoom: false,\n };\n public activeConfig!: z.infer;\n public cookies: Array = [];\n public cookieValue: z.infer | undefined;\n public simpleCookieValue: string | undefined;\n public localStorageValue:\n | z.infer\n | null\n | undefined;\n public storageKey: string | undefined;\n //Signature can come in the form of a simple string or as an object /w meta data.\n private cookieSignatureObject: z.infer[0] | undefined;\n private cookieTokenObject: z.infer | undefined;\n private signatureType: string | undefined;\n private simpleSignature: string[] = [];\n private complexSignature: z.infer = [];\n public token!: string;\n public responseID: string | undefined;\n timer: Timer;\n public host!: string;\n public path!: string;\n public agent: string | undefined;\n public ip: string | undefined;\n public lang: string | undefined;\n public slug: string | undefined;\n public sessionStatus: z.infer | undefined;\n private requested: string | undefined;\n private deployment: string | undefined;\n private specialParameters: z.infer = {\n chCode: \"\",\n chID: \"\",\n chIDSignature: \"\",\n chPublicKey: \"\",\n chRequested: \"\",\n };\n public targetURL: string | undefined;\n\n constructor(\n PublicClient: any,\n request: any,\n keyPair: z.infer,\n options: z.infer\n ) {\n this.PublicClient = PublicClient;\n this.REQUEST = request;\n this.publicKey = keyPair.publicKey;\n this.privateKey = keyPair.privateKey;\n //Merge provided options with defaults\n this.options = Object.assign({}, this.options, options);\n \n // Set cookie name from options or use default\n this.STORAGE_NAME = this.options.cookieName || \"crowdhandler\";\n\n //Hash the private key if mode is set to hybrid\n //Check if privateKey is provided when mode is set to \"hybrid\"\n if (\n this.options.mode === \"hybrid\" &&\n (this.privateKey === undefined || this.privateKey === \"\")\n ) {\n throw new Error(\n \"privateKey must be provided when mode is set to 'hybrid'\"\n );\n }\n\n if (this.options.mode === \"hybrid\" && this.privateKey !== undefined) {\n try {\n this.hashedPrivateKey = generateSignature(this.privateKey);\n } catch (error: any) {\n logger(\n this.options.debug,\n \"Error generating private key hash: \",\n error\n );\n }\n }\n\n this.host = this.REQUEST.getHost();\n this.path = this.REQUEST.getPath();\n\n if (this.options.mode === \"full\" || this.options.mode === \"hybrid\") {\n this.ip = getIP(this.REQUEST);\n this.lang = getLang(this.REQUEST);\n this.agent = getUserAgent(this.REQUEST);\n }\n\n //Start the timer\n this.timer = new Timer();\n\n // Extract slug if this is a waiting room implementation\n if (this.options.waitingRoom) {\n this.extractSlugFromPath();\n }\n }\n\n //Set the host using your own method if you're not happy with the default\n /**\n * Override the request host for testing or special routing needs.\n * \n * @param {string} host - The host to use (e.g., 'example.com')\n */\n public overrideHost(host: string) {\n this.host = host;\n }\n\n //Set the path using your own method if you're not happy with the default\n public overridePath(path: string) {\n this.path = path;\n }\n\n //Set the IP using your own method if you're not happy with the default\n public overrideIP(ip: string) {\n this.ip = ip;\n }\n\n //Set the language using your own method if you're not happy with the default\n public overrideLang(lang: string) {\n this.lang = lang;\n }\n\n //Set the user agent using your own method if you're not happy with the default\n public overrideUserAgent(agent: string) {\n this.agent = agent;\n }\n\n //Set the cookie using your own method if you're not happy with the default\n public overrideCookie(cookie: Array) {\n this.cookies = cookie;\n }\n\n /**\n * Overrides the default CrowdHandler waiting room with your custom URL.\n * \n * @param {string} url - The custom waiting room URL\n * \n * @example\n * // Redirect to your custom queue page\n * gatekeeper.overrideWaitingRoomUrl('https://mysite.com/custom-queue');\n */\n public overrideWaitingRoomUrl(url: string) {\n this.WAIT_URL = url;\n }\n\n /* If you have your own regular expression for urls to ignore set it here\n * @param string $regExp Regular Expression\n */\n public setIgnoreUrls(regExp: RegExp) {\n this.ignore = regExp;\n }\n\n /*\n * Fetch the room config feed\n * @return object\n */\n public async getConfig() {\n let response = await this.PublicClient.rooms().get();\n\n let configParse = new ConfigParse(\n response.result,\n this.host,\n this.path,\n this.ignore\n );\n\n let result = configParse.parse();\n this.activeConfig = RoomMetaObject.parse(result);\n }\n\n /**\n * Retrieves the current session status using GET call if a token is available, or POST call otherwise.\n * @param {object} customParams - Optional custom parameters to include in the API request\n * @returns {Promise} A Promise that resolves when the method has completed.\n */\n public async getSessionStatus(customParams?: Record): Promise {\n // Build request config conditionally\n const requestConfig: z.infer = {};\n\n // Always include these if they exist\n if (this.agent) requestConfig.agent = this.agent;\n if (this.ip) requestConfig.ip = this.ip;\n if (this.lang) requestConfig.lang = this.lang;\n\n // Include either slug OR url, but not both\n if (this.slug) {\n requestConfig.slug = this.slug;\n logger(this.options.debug, \"info\", `Using slug in request: ${this.slug}`);\n } else {\n // Only include URL if we don't have a slug\n const url = `https://${this.host}${this.path}`;\n requestConfig.url = url;\n logger(this.options.debug, \"info\", `Using URL in request: ${url}`);\n }\n\n // Include custom parameters if provided\n if (customParams && Object.keys(customParams).length > 0) {\n requestConfig.custom = customParams;\n logger(this.options.debug, \"info\", `Including custom parameters: ${JSON.stringify(customParams)}`);\n }\n\n if (this.token) {\n logger(\n this.options.debug,\n \"info\",\n \"Token found, performing a session GET call.\"\n );\n try {\n this.sessionStatus = await this.PublicClient.requests().get(\n this.token,\n requestConfig\n );\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Session GET call failed with error: ${error}`\n );\n // Set sessionStatus to error wrapper so error handling logic can process it\n this.sessionStatus = {\n result: {\n status: error.statusCode || 500,\n promoted: null,\n error: error.message || 'Unknown error occurred'\n }\n };\n }\n } else {\n logger(\n this.options.debug,\n \"info\",\n \"Token not found, performing a session POST call.\"\n );\n try {\n this.sessionStatus = await this.PublicClient.requests().post(\n requestConfig\n );\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Session POST call failed with error: ${error}`\n );\n // Set sessionStatus to error wrapper so error handling logic can process it\n this.sessionStatus = {\n result: {\n status: error.statusCode || 500,\n promoted: null,\n error: error.message || 'Unknown error occurred'\n }\n };\n }\n }\n }\n\n /**\n * Processes the URL from the request to extract the target URL and any special parameters.\n */\n public processURL(): void {\n try {\n const processURLInstance = new ProcessURL(this.REQUEST);\n const result: z.infer =\n processURLInstance.parseURL();\n if (result) {\n // If this is a waiting room implementation, check for url parameter\n if (this.options.waitingRoom) {\n const urlFromQuery = this.extractUrlFromWaitingRoomQuery();\n if (urlFromQuery) {\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Using url from query parameter: ${urlFromQuery}`\n );\n this.targetURL = urlFromQuery;\n this.specialParameters = result.specialParameters;\n return;\n }\n // If no url param, targetURL will be set from API response urlRedirect\n logger(\n this.options.debug,\n \"info\",\n \"[WaitingRoom] No url query parameter found, will use urlRedirect from API response\"\n );\n this.targetURL = \"\"; // Empty until we get API response\n this.specialParameters = result.specialParameters;\n return;\n }\n \n // Standard behavior - use the current URL as targetURL\n this.targetURL = result.targetURL;\n this.specialParameters = result.specialParameters;\n } else {\n throw new Error(\"Failed to parse URL.\");\n }\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `Error while processing URL: ${error}`\n );\n }\n }\n\n /**\n * Extracts the signature from the given signature source.\n * @param signatureSource - The source from which to extract the signature.\n */\n public getSignature(\n signatureSource: z.infer\n ): void {\n try {\n if (signatureSource.chIDSignature) {\n // Simple signature case\n this.simpleSignature = [signatureSource.chIDSignature];\n this.signatureType = \"simple\";\n } else if (signatureSource.crowdhandlerCookieValue) {\n // Complex signature case\n this.cookieValue = CookieObject.parse(\n signatureSource.crowdhandlerCookieValue\n );\n\n // Assuming that the last token's signatures are needed\n this.complexSignature =\n this.cookieValue.tokens[\n this.cookieValue.tokens.length - 1\n ].signatures;\n this.signatureType = \"complex\";\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", `Failed to get signature: ${error}`);\n }\n }\n\n /**\n * Extracts and sets the token from various sources (URL params, cookies, etc).\n * This is an internal method used during request validation.\n * @param options - The options for extracting the token.\n */\n private extractToken(options?: z.infer): void {\n // Use option values if provided, else fall back to constructor values\n const chID = options?.chID ?? this.specialParameters.chID;\n const crowdhandlerCookieValue =\n options?.crowdhandlerCookieValue ?? this.cookieValue;\n const localStorageValue =\n options?.localStorageValue ?? this.localStorageValue;\n const simpleCookieValue =\n options?.simpleCookieValue ?? this.simpleCookieValue;\n\n if (chID) {\n logger(this.options.debug, \"info\", \"chID parameter found\");\n this.extractTokenFromChID(chID);\n } else if (crowdhandlerCookieValue && this.options.mode === \"hybrid\") {\n logger(this.options.debug, \"info\", \"complex cookie found\");\n this.extractTokenFromComplexCookie(crowdhandlerCookieValue);\n } else if (simpleCookieValue) {\n logger(this.options.debug, \"info\", \"simple cookie found\");\n this.extractTokenFromSimpleCookie(simpleCookieValue);\n } else {\n logger(this.options.debug, \"info\", \"Token not found or invalid format\");\n }\n }\n\n /**\n * Verifies if the given token is valid based on its format.\n * @param token - The token to be validated.\n * @returns True if the token is valid, false otherwise.\n */\n private isValidToken(token: string): boolean {\n const tokenPattern = /^tok.*/;\n return tokenPattern.test(token);\n }\n\n /**\n * Extracts and sets the token from the provided chID if it's valid.\n * @param chID - The chID to extract the token from.\n * @throws {Error} When the token format is invalid.\n */\n private extractTokenFromChID(chID: string): void {\n if (!this.isValidToken(chID)) {\n throw new Error(`Invalid token format: ${chID}`);\n }\n\n this.token = chID;\n }\n\n /**\n * Extracts and sets the token from a complex cookie value if it's valid.\n * @param crowdhandlerCookieValue - The crowdhandler cookie value to extract the token from.\n * @throws {Error} When the token format is invalid.\n */\n private extractTokenFromComplexCookie(\n crowdhandlerCookieValue: z.infer\n ): void {\n try {\n this.cookieValue = CookieObject.parse(crowdhandlerCookieValue);\n\n // Ensure tokens array is not empty\n if (this.cookieValue.tokens.length === 0) {\n throw new Error(\"No tokens found in the cookie value.\");\n }\n\n const extractedToken =\n this.cookieValue.tokens[this.cookieValue.tokens.length - 1].token;\n\n if (!this.isValidToken(extractedToken)) {\n throw new Error(`Invalid token format: ${extractedToken}`);\n }\n\n this.token = extractedToken;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to extract token from complex cookie: ${error}`\n );\n }\n }\n\n /**\n * Extracts and sets the token from a simple cookie value if it's valid.\n * @param simpleCookieValue - The simple cookie value to extract the token from.\n * @throws {Error} When the token format is invalid.\n */\n private extractTokenFromSimpleCookie(simpleCookieValue: string): void {\n try {\n if (!this.isValidToken(simpleCookieValue)) {\n throw new Error(`Invalid token format: ${simpleCookieValue}`);\n }\n\n this.token = simpleCookieValue;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to extract token from simple cookie: ${error}`\n );\n }\n }\n\n /**\n * Extracts the slug from the URL path when in waiting room mode.\n * If the first path segment is 'ch', the slug is in the second segment.\n * Otherwise, the slug is the first path segment.\n */\n private extractSlugFromPath(): void {\n try {\n // Remove leading slash and query string, then split by /\n const pathWithoutQuery = this.path.split('?')[0];\n const cleanPath = pathWithoutQuery.startsWith('/') ? pathWithoutQuery.slice(1) : pathWithoutQuery;\n const segments = cleanPath.split('/').filter(s => s.length > 0);\n \n if (segments.length === 0) {\n logger(this.options.debug, \"info\", \"[WaitingRoom] No path segments found for slug extraction\");\n return;\n }\n \n let slugIndex = 0;\n \n // If first segment is 'ch', slug is in the second segment\n if (segments[0] === 'ch') {\n slugIndex = 1;\n \n if (segments.length <= 1) {\n logger(this.options.debug, \"info\", \"[WaitingRoom] Path starts with /ch/ but no slug segment found\");\n return;\n }\n }\n \n this.slug = segments[slugIndex];\n logger(this.options.debug, \"info\", `[WaitingRoom] Extracted slug from path: ${this.slug}`);\n \n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `[WaitingRoom] Failed to extract slug from path: ${error}`\n );\n }\n }\n\n /**\n * Extracts the target URL from query parameters when in waiting room mode.\n * Returns the encoded URL value if found, otherwise returns empty string.\n */\n private extractUrlFromWaitingRoomQuery(): string {\n try {\n // Get the full URL including query parameters\n const fullPath = this.REQUEST.getPath();\n if (!fullPath || !fullPath.includes('?')) {\n return \"\";\n }\n\n // Extract query string\n const queryString = fullPath.split('?')[1];\n if (!queryString) {\n return \"\";\n }\n\n // Parse query parameters manually to avoid automatic decoding\n // URLSearchParams.get() automatically decodes values, which we don't want\n const urlMatch = queryString.match(/(?:^|&)url=([^&]*)/);\n \n if (urlMatch && urlMatch[1]) {\n const urlParam = urlMatch[1];\n // The URL parameter value is encoded, return as-is without decoding\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Found url parameter (encoded): ${urlParam}`\n );\n return urlParam;\n }\n\n return \"\";\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `[WaitingRoom] Failed to extract url from query: ${error}`\n );\n return \"\";\n }\n }\n\n /**\n * Retrieves the token from local storage if possible.\n * @throws {Error} When the storage key or local storage value is undefined.\n */\n public getTokenFromLocalStorage(): void {\n try {\n if (!this.storageKey) {\n throw new Error(\"Storage key is not defined.\");\n }\n\n if (!this.localStorageValue || !this.localStorageValue.token) {\n throw new Error(\n \"Local storage value is not defined or does not contain a token.\"\n );\n }\n\n const token = this.localStorageValue.token[this.storageKey];\n\n if (!this.isValidToken(token)) {\n throw new Error(`Invalid token format: ${token}`);\n }\n\n this.token = token;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to get token from local storage: ${error}`\n );\n }\n }\n\n /**\n * Validates the signature.\n *\n * @returns the result of signature validation\n */\n public validateSignature(): ReturnType {\n const signature = new Signature(\n this.activeConfig,\n this.hashedPrivateKey,\n this.signatureType,\n this.simpleSignature,\n this.complexSignature,\n this.token,\n this.cookieValue,\n this.requested,\n this.specialParameters,\n this.options.debug\n );\n\n return signature.validateSignature();\n }\n\n /**\n * Convenience method that handles the complete redirect flow for non-promoted users.\n * Automatically manages cookies and redirects.\n * \n * @returns {string} Success message after redirect\n * @throws {Error} If unable to determine redirect URL\n * \n * @example\n * if (!result.promoted) {\n * return gatekeeper.redirectIfNotPromoted();\n * }\n */\n public redirectIfNotPromoted(): string {\n try {\n const redirectUrl = this.getRedirectUrl();\n\n if (!redirectUrl) {\n throw new Error(\"Unable to determine redirect URL\");\n }\n\n return this.REQUEST.redirect(redirectUrl);\n } catch (error: any) {\n logger(this.options.debug, \"error\", `Failed to redirect: ${error}`);\n return `Redirect failed: ${error.message}`;\n }\n }\n\n /**\n * Redirects promoted users from waiting room to target site with fresh CrowdHandler parameters.\n * Used when waitingRoom option is true and user is promoted.\n * \n * @returns {string} Success message after redirect\n * @throws {Error} If unable to determine redirect URL\n * \n * @example\n * if (result.promoted && config.waitingRoom) {\n * return gatekeeper.redirectIfPromoted();\n * }\n */\n public redirectIfPromoted(): string {\n try {\n // Get target URL from either this.targetURL or API response\n let destinationUrl = this.targetURL;\n \n // If no targetURL and we have session status with urlRedirect, use that\n if (!destinationUrl && this.sessionStatus?.result?.urlRedirect) {\n destinationUrl = encodeURIComponent(this.sessionStatus.result.urlRedirect);\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Using urlRedirect from API: ${this.sessionStatus.result.urlRedirect}`\n );\n }\n\n if (!destinationUrl) {\n throw new Error(\"Unable to determine destination URL for promoted redirect\");\n }\n\n // Decode once to get the actual URL\n const decodedURL = decodeURIComponent(destinationUrl);\n\n // Build new CrowdHandler parameters\n const chParams = [\n `ch-id=${encodeURIComponent(this.token || '')}`,\n `ch-id-signature=${encodeURIComponent(this.sessionStatus?.result?.hash || '')}`,\n `ch-requested=${encodeURIComponent(this.sessionStatus?.result?.requested || this.requested || this.specialParameters.chRequested || '')}`,\n `ch-code=${encodeURIComponent(this.specialParameters.chCode || '')}`,\n `ch-fresh=true`\n ];\n\n // Separate hash fragment before parsing query params. This ensures\n // ch-* params are placed in the real query string (window.location.search)\n // rather than inside the hash fragment where host-domain scripts cannot\n // read them via URLSearchParams.\n const hashIndex = decodedURL.indexOf('#');\n const urlWithoutHash = hashIndex !== -1 ? decodedURL.substring(0, hashIndex) : decodedURL;\n const hashPart = hashIndex !== -1 ? decodedURL.substring(hashIndex) : '';\n\n // Parse existing query string, stripping any existing ch-* params\n const [baseUrl, ...queryParts] = urlWithoutHash.split('?');\n const queryString = queryParts.join('?');\n const existingParams: string[] = [];\n if (queryString) {\n const params = queryString.split('&');\n for (const param of params) {\n const [key] = param.split('=');\n if (!CH_PARAM_KEYS.includes(key)) {\n existingParams.push(param);\n }\n }\n }\n\n // Construct final URL with ch-* params before any hash fragment\n const allParams = existingParams.concat(chParams);\n const finalUrl = baseUrl + (allParams.length > 0 ? '?' + allParams.join('&') : '') + hashPart;\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Redirecting promoted user to: ${finalUrl}`\n );\n\n return this.REQUEST.redirect(finalUrl);\n } catch (error: any) {\n logger(this.options.debug, \"error\", `Failed to redirect promoted user: ${error}`);\n return `Redirect failed: ${error.message}`;\n }\n }\n\n /**\n * Redirects the request to the decoded target URL.\n *\n * @param targetURL The target URL to redirect to.\n * @throws {Error} If decoding or redirecting fails.\n */\n /**\n * Removes CrowdHandler tracking parameters from URLs. Use when result.stripParams is true\n * to keep URLs clean.\n * \n * @param {string} targetURL - The encoded URL to clean and redirect to (from result.targetURL)\n * @throws {Error} If the decoded URL is not a valid HTTP(S) URL\n * \n * @example\n * if (result.stripParams) {\n * return gatekeeper.redirectToCleanUrl(result.targetURL);\n * }\n */\n public redirectToCleanUrl(targetURL: string): void {\n try {\n const decodedUrl = decodeURIComponent(targetURL);\n\n // If decodedUrl is not a valid URL, throw an error.\n if (!/^http[s]?:\\/\\/.*/.test(decodedUrl)) {\n throw new Error(\"Decoded URL is not a valid URL\");\n }\n\n this.REQUEST.redirect(decodedUrl);\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to redirect to clean URL: ${error}`\n );\n throw error;\n }\n }\n\n /**\n * Generates a redirect URL based on multiple fallback conditions.\n *\n * @throws {Error} If targetURL, token, or publicKey is missing or invalid.\n * @returns The generated redirect URL.\n */\n public getRedirectUrl(): string {\n try {\n const slug =\n this.sessionStatus?.result?.slug ||\n this.activeConfig?.slug ||\n this.options.fallbackSlug ||\n \"\";\n\n logger(this.options.debug, \"info\", `Generating redirect URL with slug: ${slug}`);\n logger(this.options.debug, \"info\", `Target URL: ${this.targetURL}`);\n logger(this.options.debug, \"info\", `Token: ${this.token}`);\n logger(this.options.debug, \"info\", `Public Key: ${this.publicKey}`);\n\n const redirectUrl = `${this.WAIT_URL}/${slug}?url=${this.targetURL}&ch-code=&ch-id=${this.token}&ch-public-key=${this.publicKey}`;\n\n logger(this.options.debug, \"info\", `Generated redirect URL: ${redirectUrl}`);\n\n return redirectUrl;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to generate redirect URL: ${error}`\n );\n throw error;\n }\n }\n\n /**\n * Generates token and signature objects for cookies.\n *\n * @throws {Error} If token generation fails.\n */\n private generateCookieObjects(): void {\n try {\n const tokenDatestamp = new Date().getTime();\n let signatureGenerated: string = \"\";\n\n // Prioritise API response data over parameter data.\n signatureGenerated = this.requested || this.specialParameters.chRequested;\n\n const cookieObject = new GenerateCookieObject({\n tokenDatestamp,\n tokenDatestampSignature: generateSignature(\n `${this.hashedPrivateKey}${tokenDatestamp}`\n ),\n tokenSignature: this.simpleSignature[0],\n tokenSignatureGenerated: signatureGenerated,\n tokenSignatures: this.complexSignature,\n tokenValue: this.token,\n });\n\n this.cookieSignatureObject = cookieObject.signatureObject();\n this.cookieTokenObject = cookieObject.tokenObject();\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to generate cookie objects: ${error}`\n );\n throw error;\n }\n }\n\n // //TODO: Convert to an independent class for full local storage functionality\n // /**\n // * Updates the token in the local storage object.\n // * If no local storage object exists, creates a new one.\n // * @param token - The new token to update in local storage.\n // */\n public updateLocalStorageToken(token: string): void {\n try {\n if (this.localStorageValue && this.storageKey) {\n // Update the existing LocalStorageObject token field.\n this.localStorageValue.token[this.storageKey] = token;\n } else if (this.storageKey) {\n // Create a new LocalStorageObject if it doesn't exist.\n this.localStorageValue = {\n countdown: {},\n positions: {},\n token: { [this.storageKey]: token },\n };\n }\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to update local storage token: ${error}`\n );\n }\n }\n\n /**\n * Retrieves and processes cookies from request or override.\n */\n private getCookie(): void {\n try {\n // Get cookies from request or override.\n const cookies =\n this.cookies.length === 0 ? this.REQUEST.getCookies() : this.cookies;\n\n // If no cookies, there is no further processing needed.\n if (!cookies) {\n logger(this.options.debug, \"info\", \"No cookies found.\");\n return;\n }\n\n // Split the cookies string into individual cookie strings.\n const cookieArray = cookies.split(\";\");\n\n for (const cookieStr of cookieArray) {\n const [cookieName, ...cookieValueParts] = cookieStr.trim().split(\"=\");\n const cookieValue = cookieValueParts.join(\"=\");\n\n // If this is the cookie we're interested in, process it.\n if (cookieName === this.STORAGE_NAME) {\n if (this.options.mode === \"hybrid\") {\n let decodedCookie = decodeURIComponent(cookieValue);\n let processedCookie: z.infer | undefined =\n JSON.parse(decodedCookie);\n this.cookieValue = processedCookie;\n } else {\n this.simpleCookieValue = cookieValue;\n }\n }\n }\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to get or process cookies: ${error}`\n );\n }\n }\n\n //TODO: Improve this method alongside refactor of validateRequestHybridMode\n public generateCookie(tokens: any[], deployment?: string) {\n return {\n integration: \"JSDK\",\n tokens: tokens,\n deployment: deployment || \"\",\n };\n }\n\n /**\n * Detects if a domain pattern contains a wildcard and extracts the root domain for cookie setting\n * @param domainPattern - The domain pattern from room config (e.g., \"https://*.example.com\")\n * @returns Object with isWildcard flag and optional rootDomain for cookie\n */\n private detectWildcardAndRoot(domainPattern: string): { isWildcard: boolean; rootDomain?: string } {\n // Check if there's a wildcard after https://\n const match = domainPattern.match(/^https:\\/\\/[^a-z0-9]*\\*[^a-z0-9]*([a-z0-9].*)$/i);\n\n if (!match) {\n return { isWildcard: false };\n }\n\n // match[1] is everything from first alphanumeric onward\n const domainPart = match[1]; // e.g., \"example.com\" or \"example.*\"\n\n // Check if there's a wildcard at the end - can't use wildcard cookies for these\n if (domainPart.includes('*')) {\n logger(this.options.debug, \"info\", \"Domain has trailing wildcard, cannot use root domain cookie\");\n return { isWildcard: false };\n }\n\n // Extract root domain (last two parts for cookie domain)\n const parts = domainPart.split('.');\n const rootDomain = parts.length >= 2\n ? `.${parts.slice(-2).join('.')}`\n : `.${domainPart}`;\n\n return {\n isWildcard: true,\n rootDomain: rootDomain\n };\n }\n\n /**\n * Sets the CrowdHandler session cookie. Always call this when result.setCookie is true\n * to maintain the user's queue position.\n * \n * @param {string} value - The cookie value to set (from result.cookieValue)\n * @param {string} domain - Optional domain pattern to determine cookie domain scope\n * @returns {boolean | string} In Node.js/Lambda/browser environments returns true on success\n * or false on failure. In Cloudflare Workers returns the Set-Cookie header string that\n * must be applied to the outgoing Response by the caller.\n * \n * @example\n * // Node.js / Lambda\n * if (result.setCookie) {\n * gatekeeper.setCookie(result.cookieValue, result.domain);\n * }\n * \n * @example\n * // Cloudflare Workers\n * if (result.setCookie) {\n * const setCookieHeader = gatekeeper.setCookie(result.cookieValue, result.domain);\n * // setCookieHeader is the Set-Cookie header value — apply it to the Response:\n * // response.headers.append('Set-Cookie', setCookieHeader as string);\n * }\n */\n public setCookie(value: string, domain?: string): boolean | string {\n try {\n // Determine cookie domain if domain pattern is provided\n let cookieDomain: string | undefined;\n if (domain) {\n const { isWildcard, rootDomain } = this.detectWildcardAndRoot(domain);\n if (isWildcard && rootDomain) {\n cookieDomain = rootDomain;\n logger(this.options.debug, \"info\", `Setting cookie with domain: ${cookieDomain}`);\n }\n }\n \n // Set the cookie with the provided value and options.\n // CloudflareWorkersHandler returns the Set-Cookie header string because\n // Workers are response-out and the caller must apply the header manually.\n // All other handlers set the cookie as a side-effect and return void.\n const result = this.REQUEST.setCookie(value, this.STORAGE_NAME, cookieDomain);\n return typeof result === 'string' ? result : true;\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n return false;\n }\n }\n\n /**\n * Set a local storage item.\n *\n * @param options - Optional. An object containing the storage name and the local storage value.\n *\n * @throws If an error occurs while setting the local storage item, an Error is thrown and caught, logged with the logger,\n * and the function returns false.\n *\n * @returns True if the local storage item was successfully set, false otherwise.\n */\n public setLocalStorage(\n options?: z.infer\n ): boolean {\n try {\n // determine the name to use\n const nameToUse = options?.storageName || this.STORAGE_NAME;\n\n // determine the value to use\n const valueToUse =\n options?.localStorageValue || JSON.stringify(this.localStorageValue);\n\n // set the local storage item\n this.REQUEST.setLocalStorageItem(nameToUse, valueToUse);\n\n return true;\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n return false;\n }\n }\n\n /**\n * Get a local storage item.\n *\n * @throws If an error occurs while getting or parsing the local storage item,\n * an Error is thrown and caught, logged with the logger, and the function returns null.\n *\n * @returns The value from local storage parsed as a LocalStorageObject, or null if an error occurs or if the item does not exist.\n */\n public getLocalStorage(): z.infer | null {\n try {\n const crowdhandler = localStorage.getItem(this.STORAGE_NAME);\n if (crowdhandler) {\n const localStorageValue = LocalStorageObject.parse(\n JSON.parse(crowdhandler)\n );\n this.localStorageValue = localStorageValue; // still assign it to the class property if you need\n return localStorageValue;\n }\n\n logger(\n this.options.debug,\n \"Info: No data found in local storage for key:\",\n this.STORAGE_NAME\n );\n return null;\n } catch (error: any) {\n logger(this.options.debug, \"Error reading from local storage:\", error);\n return null;\n }\n }\n\n /**\n * Records performance metrics to help CrowdHandler optimize queue flow and capacity.\n * \n * @param {RecordPerformanceOptions} options - Optional performance recording options:\n * - `sample` {number} - Sample rate (0-1). Default: 0.2 (20% of requests)\n * - `statusCode` {number} - HTTP status code. Default: 200\n * - `overrideElapsed` {number} - Override elapsed time in ms\n * - `responseID` {string} - Specific response ID to record\n * \n * @example\n * // Simple usage (recommended)\n * await gatekeeper.recordPerformance();\n * \n * @example\n * // With custom options\n * await gatekeeper.recordPerformance({\n * sample: 0.2, // Sample 20% of requests\n * statusCode: 200\n * });\n */\n public async recordPerformance(\n options?: z.infer\n ) {\n try {\n // Parse and validate options if provided, else use default values\n const validatedOptions = options\n ? RecordPerformanceOptions.parse(options)\n : {\n statusCode: 200, // default HTTP response code\n sample: 0.2, // default sample rate\n overrideElapsed: undefined, // no elapsed time override\n responseID: undefined, // no responseID\n timeout: undefined, // no per-call timeout override\n };\n\n const { statusCode, sample, overrideElapsed, responseID, timeout } =\n validatedOptions;\n\n // Generate a random number for sampling\n const lottery = Math.random();\n const currentResponseID = responseID || this.responseID;\n\n // If there's no responseID or if the random number is higher than the sample rate, return early\n if (!currentResponseID || lottery >= sample) {\n return;\n }\n\n const elapsed =\n overrideElapsed !== undefined ? overrideElapsed : this.timer.elapsed();\n\n // sampleRate tells the server how many real events each row represents,\n // and bypasses the server's default 33% gating (which only kicks in when\n // sampleRate is null). For sample=1 this is 1; for sample=0.2 this is 5.\n const sampleRate = Math.max(1, Math.round(1 / sample));\n\n // Default 1500ms — recordPerformance is fire-after-response observability,\n // we don't want a slow API to hold the worker isolate longer than needed\n // when called from inside ctx.waitUntil(). Caller can override via opts.\n const putPromise = this.PublicClient.responses().put(\n currentResponseID,\n { httpCode: statusCode, sampleRate, time: elapsed },\n { timeout: timeout ?? 1500 },\n );\n\n // Fire-and-forget on Node/Lambda/Browser (non-critical, no need to\n // delay the caller). On Workers, await — ctx.waitUntil(recordPerformance(...))\n // only extends the request lifetime until the awaited Promise chain\n // resolves, so without this the runtime cancels the orphaned fetch.\n if (isCloudflareWorkers) {\n await putPromise;\n }\n } catch (error: any) {\n logger(this.options.debug, \"Error recording performance:\", error);\n }\n }\n\n /**\n * Extracts the creation date from a token's base60 encoded timestamp\n */\n private tokenCreationDate(token: string): number {\n const base60 = \"0123456789ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz\";\n const tok_meta = token.slice(4, 10);\n \n const year = base60.indexOf(tok_meta[0]);\n const month = base60.indexOf(tok_meta[1]) - 1;\n const day = base60.indexOf(tok_meta[2]);\n const hour = base60.indexOf(tok_meta[3]);\n const minute = base60.indexOf(tok_meta[4]);\n const second = base60.indexOf(tok_meta[5]);\n \n return Date.UTC(2000 + year, month, day, hour, minute, second);\n }\n\n /**\n * Checks if a token is older than 12 hours\n */\n private isOldToken(token?: string): boolean {\n logger(this.options.debug, \"info\", `[Lite Validator] Checking token age for: ${token}`);\n \n if (!token || !token.startsWith(\"tok\")) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Token not in a format that we can timestamp.\");\n return false;\n }\n\n // Only handle tok0 format tokens\n if (!token.startsWith(\"tok0\")) {\n logger(this.options.debug, \"info\", `[Lite Validator] Token format '${token.substring(0,4)}' not supported for age checking`);\n return false;\n }\n\n const dateStampUTC = new Date().getTime();\n const tokenCreated = this.tokenCreationDate(token);\n const tokenCreatedDate = new Date(tokenCreated);\n const differenceInHours = (dateStampUTC - tokenCreated) / (1000 * 60 * 60);\n\n logger(this.options.debug, \"info\", `[Lite Validator] Token created: ${tokenCreatedDate.toISOString()}, Age: ${differenceInHours.toFixed(2)} hours`);\n\n if (differenceInHours > 12) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Token is older than 12 hours - will trigger redirect\");\n return true;\n }\n\n logger(this.options.debug, \"info\", \"[Lite Validator] Token is fresh (< 12 hours old)\");\n return false;\n }\n\n /**\n * Checks if the current request matches any configured room patterns\n * Rooms are pre-ordered by precedence (regex → contains → all)\n * First match wins\n */\n private matchRoomConfig(): { status: boolean; room?: any } {\n const roomMeta = {\n domain: null,\n patternType: null,\n queueActivatesOn: null,\n slug: null,\n status: false,\n timeout: null,\n };\n\n if (!this.options.roomsConfig || this.options.roomsConfig.length === 0) {\n logger(this.options.debug, \"info\", \"[Lite Validator] No rooms config provided or empty array\");\n return roomMeta;\n }\n\n const host = this.host;\n // Note: this.path already includes query string from all REQUEST handlers\n const path = this.path;\n const fullDomain = `https://${host}`;\n \n logger(this.options.debug, \"info\", `[Lite Validator] Checking rooms for domain: ${fullDomain}, path: ${path}`);\n logger(this.options.debug, \"info\", `[Lite Validator] Total rooms in config: ${this.options.roomsConfig.length}`);\n \n // Filter rooms by domain\n const filteredResults = this.options.roomsConfig.filter((item: z.infer) => {\n const matches = item.domain === fullDomain;\n if (matches) {\n logger(this.options.debug, \"info\", `[Lite Validator] Domain match found: ${item.slug}`);\n }\n return matches;\n });\n\n logger(this.options.debug, \"info\", `[Lite Validator] Rooms matching domain: ${filteredResults.length}`);\n\n // Find first match - rooms are pre-ordered by precedence\n for (const item of filteredResults) {\n logger(this.options.debug, \"info\", `[Lite Validator] Testing room '${item.slug}' with pattern '${item.urlPattern}' (type: ${item.patternType})`);\n \n if (this.patternCheck(item, path) === true) {\n logger(this.options.debug, \"info\", `[Lite Validator] MATCH FOUND: Room '${item.slug}' matches current path`);\n \n // First match is the best match\n roomMeta.domain = item.domain;\n roomMeta.patternType = item.patternType;\n roomMeta.queueActivatesOn = item.queueActivatesOn;\n roomMeta.slug = item.slug;\n roomMeta.status = true;\n roomMeta.timeout = item.timeout;\n break; // Stop at first match\n }\n }\n\n if (!roomMeta.status) {\n logger(this.options.debug, \"info\", \"[Lite Validator] No matching room found for current path\");\n }\n\n return roomMeta;\n }\n\n /**\n * Pattern checking logic - matches reference implementation\n */\n private patternCheck(item: any, path: string): boolean {\n switch (item.patternType) {\n case \"regex\":\n if (!item.urlPattern) return false;\n const regex = new RegExp(item.urlPattern);\n return regex.test(path);\n\n case \"contains\":\n if (!item.urlPattern) return false;\n return path.includes(item.urlPattern);\n\n case \"all\":\n return true;\n\n default:\n return false;\n }\n }\n\n /**\n * Determines if the request should be redirected to the lite validator\n */\n private shouldRedirectToLiteValidator(): { redirect: boolean; url?: string; domain?: string } {\n logger(this.options.debug, \"info\", \"[Lite Validator] === Starting lite validator check ===\");\n logger(this.options.debug, \"info\", `[Lite Validator] Lite validator enabled: ${this.options.liteValidator}`);\n logger(this.options.debug, \"info\", `[Lite Validator] Rooms config provided: ${!!this.options.roomsConfig}`);\n logger(this.options.debug, \"info\", `[Lite Validator] Current token: ${this.token || 'NO TOKEN'}`);\n \n if (!this.options.liteValidator || !this.options.roomsConfig) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Lite validator disabled or no rooms config - skipping\");\n return { redirect: false };\n }\n\n // Check if current path matches any protected room\n const roomMatch = this.matchRoomConfig();\n if (!roomMatch.status) {\n logger(this.options.debug, \"info\", \"[Lite Validator] No room match - skipping lite validator\");\n return { redirect: false };\n }\n\n logger(this.options.debug, \"info\", `[Lite Validator] Room matched: ${(roomMatch as any).slug || 'match found'}`);\n\n // Check if token is missing or old\n const tokenMissing = !this.token;\n const tokenIsOld = this.token ? this.isOldToken(this.token) : false;\n \n logger(this.options.debug, \"info\", `[Lite Validator] Token missing: ${tokenMissing}, Token old: ${tokenIsOld}`);\n \n if (tokenMissing || tokenIsOld) {\n const redirectUrl = this.buildLiteValidatorUrl();\n logger(this.options.debug, \"info\", `[Lite Validator] REDIRECT REQUIRED to: ${redirectUrl}`);\n return { redirect: true, url: redirectUrl, domain: (roomMatch as any).domain };\n }\n\n logger(this.options.debug, \"info\", \"[Lite Validator] Token is valid - no redirect needed\");\n return { redirect: false, domain: (roomMatch as any).domain };\n }\n\n /**\n * Builds the lite validator redirect URL\n */\n private buildLiteValidatorUrl(): string {\n const apiUrl = (this.PublicClient as any).apiUrl || 'https://api.crowdhandler.com';\n const baseUrl = `${apiUrl}/v1/redirect/requests`;\n // targetURL is already encoded by ProcessURL\n const targetUrl = this.targetURL || '';\n const code = this.specialParameters.chCode || '';\n \n const params = `ch-public-key=${this.publicKey}&url=${targetUrl}&ch-code=${code}`;\n \n return this.token \n ? `${baseUrl}/${this.token}?${params}`\n : `${baseUrl}?${params}`;\n }\n\n /**\n * The primary method for validating requests against CrowdHandler's queue system.\n * Determines whether a user should be granted access to your protected resource or sent to a waiting room.\n * \n * @param {object} params - Optional parameters to customize the validation\n * @param {Record} params.custom - Custom parameters to pass to the CrowdHandler API\n * @returns {Promise} Instructions on how to handle the request:\n * - `promoted` {boolean} - true = grant access, false = send to waiting room\n * - `setCookie` {boolean} - true = update the user's session cookie\n * - `cookieValue` {string} - The session token to store in the cookie\n * - `stripParams` {boolean} - true = remove CrowdHandler URL parameters\n * - `targetURL` {string} - Where to redirect (clean URL or waiting room)\n * - `slug` {string} - The waiting room slug (when not promoted)\n * - `responseID` {string} - Response ID for performance tracking (when promoted)\n * - `deployment` {string} - Deployment identifier from the API\n * - `token` {string} - The session token\n * - `hash` {string | null} - Signature hash for validation (when available)\n * - `liteValidatorRedirect` {boolean} - Whether to redirect for lite validation\n * - `liteValidatorUrl` {string} - URL for lite validator redirect\n * - `error` {object | undefined} - Error information if validation encountered an issue:\n * - `message` {string} - The error message from the API\n * - `statusCode` {number | undefined} - HTTP status code (e.g., 401, 500)\n * - `code` {string | undefined} - Error code for programmatic handling\n * \n * @example\n * const result = await gatekeeper.validateRequest();\n * if (!result.promoted) {\n * return gatekeeper.redirectIfNotPromoted();\n * }\n * \n * @example\n * // With custom parameters\n * const result = await gatekeeper.validateRequest({\n * custom: {\n * userId: 'user123',\n * sessionId: 'session456',\n * customField: 'value'\n * }\n * });\n * \n * @example\n * // Handling errors in the result\n * const result = await gatekeeper.validateRequest();\n * if (result.error) {\n * console.error(`API Error ${result.error.statusCode}: ${result.error.message}`);\n * // Note: promoted is still set based on error type\n * // 4xx errors: promoted = false\n * // 5xx errors: promoted based on trustOnFail setting\n * }\n * \n * @throws {CrowdHandlerError} When SDK configuration fails or network errors occur\n */\n public async validateRequest(params?: { custom?: Record }) {\n switch (this.options.mode) {\n case \"hybrid\":\n return await this.validateRequestHybridMode(params?.custom);\n break;\n case \"full\":\n return await this.validateRequestFullMode(params?.custom);\n break;\n case \"clientside\":\n return await this.validateRequestClientSideMode(params?.custom);\n break;\n default:\n \"full\";\n break;\n }\n }\n\n /**\n * Validate request in a client-side mode.\n *\n * This method checks for a CrowdHandler cookie and gets the session status for the request.\n * It works the same as full mode but runs in browser environments.\n *\n * @param {Record} customParams - Optional custom parameters to include in the API request\n * @return {Promise>} Result of the validation process.\n */\n private async validateRequestClientSideMode(customParams?: Record): Promise<\n z.infer\n > {\n // Process URL early to ensure targetURL is set for all scenarios (errors, redirects, etc.)\n this.processURL();\n \n // Initial result object with default values\n let result: z.infer = {\n promoted: false,\n stripParams: false,\n setCookie: false,\n setLocalStorage: false,\n cookieValue: \"\",\n responseID: \"\",\n slug: \"\",\n targetURL: this.targetURL || \"\",\n deployment: \"\",\n hash: null,\n token: \"\",\n requested: \"\",\n };\n\n // Check for test error simulation (for integrator testing)\n if (this.options.testError) {\n logger(this.options.debug, \"info\", `[TEST MODE] Simulating error with status ${this.options.testError.statusCode}`);\n \n const statusCode = this.options.testError.statusCode;\n const errorMessage = this.options.testError.message || `Simulated error with status ${statusCode}`;\n \n // Apply same logic as real errors\n if (statusCode >= 400 && statusCode < 500) {\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n result.error = {\n message: errorMessage,\n statusCode: statusCode,\n code: statusCode === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n \n return result;\n }\n\n try {\n // Log details for debugging\n logger(this.options.debug, \"info\", `IP: ${this.ip}`);\n logger(this.options.debug, \"info\", `Agent: ${this.agent}`);\n logger(this.options.debug, \"info\", `Host: ${this.host}`);\n logger(this.options.debug, \"info\", `Path: ${this.path}`);\n logger(this.options.debug, \"info\", `Lang: ${this.lang}`);\n\n // Skip paths that match the ignore pattern\n if (ignoredPatternsCheck(this.path, this.ignore)) {\n logger(this.options.debug, \"info\", `Ignored path: ${this.path}`);\n result.promoted = true;\n return result;\n }\n\n // URL already processed at the beginning of method\n this.getCookie();\n this.extractToken();\n \n // Lite validator check - EARLY EXIT\n logger(this.options.debug, \"info\", \"[Lite Validator] Performing lite validator check in validateRequestClientSideMode\");\n const liteCheck = this.shouldRedirectToLiteValidator();\n \n // Store domain from lite validator if available\n if (liteCheck.domain) {\n result.domain = liteCheck.domain;\n }\n \n if (liteCheck.redirect) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Lite validator redirect triggered in clientside mode\");\n result.liteValidatorRedirect = true;\n result.liteValidatorUrl = liteCheck.url;\n result.promoted = false;\n return result;\n }\n logger(this.options.debug, \"info\", \"[Lite Validator] Continuing with normal validation\")\n \n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n // Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n // Handle session status errors\n if (sessionStatusType.success) {\n if (this.sessionStatus?.result.status !== 200) {\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n // Processing based on promotion status\n if (this.sessionStatus) {\n const { promoted, slug, token, responseID, deployment, hash, requested, domain } = this.sessionStatus.result;\n\n result.promoted = promoted === 1;\n \n // Pass domain from API response if available\n if (domain) {\n result.domain = domain;\n }\n result.slug = slug || result.slug;\n this.token = token || this.token;\n result.token = token || result.token;\n result.deployment = deployment || result.deployment;\n result.hash = hash || null;\n result.requested = requested || result.requested;\n \n // Always set cookie if we have a token (for both promoted and non-promoted users)\n if (token) {\n result.setCookie = true;\n result.cookieValue = token;\n }\n \n if (promoted === 1) {\n result.responseID = responseID || result.responseID;\n this.responseID = responseID || \"\";\n \n if (this.specialParameters.chRequested) {\n result.stripParams = true;\n }\n }\n }\n\n return result;\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `An error occurred during request validation: ${error}`\n );\n throw error;\n }\n }\n\n /**\n * Validates the request by making full use of CrowdHandler API.\n * It handles the request and sets the necessary response based on the session status and API response.\n * @param {Record} customParams - Optional custom parameters to include in the API request\n * @return {Promise>} - The resulting status after validating the request.\n */\n private async validateRequestFullMode(customParams?: Record): Promise<\n z.infer\n > {\n // Process URL early to ensure targetURL is set for all scenarios (errors, redirects, etc.)\n this.processURL();\n \n // Default result object\n let result: z.infer = {\n promoted: false,\n stripParams: false,\n setCookie: false,\n setLocalStorage: false,\n cookieValue: \"\",\n responseID: \"\",\n slug: \"\",\n targetURL: this.targetURL || \"\",\n deployment: \"\",\n hash: null,\n token: \"\",\n requested: \"\",\n };\n\n // Check for test error simulation (for integrator testing)\n if (this.options.testError) {\n logger(this.options.debug, \"info\", `[TEST MODE] Simulating error with status ${this.options.testError.statusCode}`);\n \n const statusCode = this.options.testError.statusCode;\n const errorMessage = this.options.testError.message || `Simulated error with status ${statusCode}`;\n \n // Apply same logic as real errors\n if (statusCode >= 400 && statusCode < 500) {\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n result.error = {\n message: errorMessage,\n statusCode: statusCode,\n code: statusCode === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n \n return result;\n }\n\n try {\n // Log details for debugging\n logger(this.options.debug, \"info\", `IP: ${this.ip}`);\n logger(this.options.debug, \"info\", `Agent: ${this.agent}`);\n logger(this.options.debug, \"info\", `Host: ${this.host}`);\n logger(this.options.debug, \"info\", `Path: ${this.path}`);\n logger(this.options.debug, \"info\", `Lang: ${this.lang}`);\n\n // Skip paths that match the ignore pattern\n if (ignoredPatternsCheck(this.path, this.ignore)) {\n logger(this.options.debug, \"info\", `Ignored path: ${this.path}`);\n result.promoted = true;\n return result;\n }\n\n // URL already processed at the beginning of method\n this.getCookie();\n this.extractToken();\n \n // Lite validator check - EARLY EXIT\n logger(this.options.debug, \"info\", \"[Lite Validator] Performing lite validator check in validateRequestClientSideMode\");\n const liteCheck = this.shouldRedirectToLiteValidator();\n \n // Store domain from lite validator if available\n if (liteCheck.domain) {\n result.domain = liteCheck.domain;\n }\n \n if (liteCheck.redirect) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Lite validator redirect triggered in clientside mode\");\n result.liteValidatorRedirect = true;\n result.liteValidatorUrl = liteCheck.url;\n result.promoted = false;\n return result;\n }\n logger(this.options.debug, \"info\", \"[Lite Validator] Continuing with normal validation\")\n \n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n // Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n // Handle session status errors\n if (sessionStatusType.success) {\n if (this.sessionStatus?.result.status !== 200) {\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n // Processing based on promotion status\n if (this.sessionStatus) {\n const { promoted, slug, token, responseID, deployment, hash, requested, domain } = this.sessionStatus.result;\n\n result.promoted = promoted === 1;\n \n // Pass domain from API response if available\n if (domain) {\n result.domain = domain;\n }\n result.slug = slug || result.slug;\n this.token = token || this.token;\n result.token = token || result.token;\n result.deployment = deployment || result.deployment;\n result.hash = hash || null;\n result.requested = requested || result.requested;\n \n // Always set cookie if we have a token (for both promoted and non-promoted users)\n if (token) {\n result.setCookie = true;\n result.cookieValue = token;\n }\n \n if (promoted === 1) {\n result.responseID = responseID || result.responseID;\n this.responseID = responseID || \"\";\n \n if (this.specialParameters.chRequested) {\n result.stripParams = true;\n }\n }\n }\n\n return result;\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `An error occurred during request validation: ${error}`\n );\n throw error;\n }\n }\n\n //TODO: This method is a complex beast and needs refactoring\n /**\n * Validate request using signature and/or Crowdhandler API when required\n * @param {Record} customParams - Optional custom parameters to include in the API request\n */\n private async validateRequestHybridMode(customParams?: Record) {\n let signatures = [];\n let tokens = [];\n let freshToken;\n let freshSignature;\n let processedCookie;\n\n // Process URL early to ensure targetURL is set for all scenarios (errors, redirects, etc.)\n this.processURL();\n\n let result: z.infer = {\n promoted: false,\n stripParams: false,\n setCookie: false,\n setLocalStorage: false,\n cookieValue: \"\",\n responseID: \"\",\n slug: \"\",\n targetURL: this.targetURL || \"\",\n deployment: \"\",\n hash: null,\n token: \"\",\n requested: \"\",\n };\n\n // Check for test error simulation (for integrator testing)\n if (this.options.testError) {\n logger(this.options.debug, \"info\", `[TEST MODE] Simulating error with status ${this.options.testError.statusCode}`);\n \n const statusCode = this.options.testError.statusCode;\n const errorMessage = this.options.testError.message || `Simulated error with status ${statusCode}`;\n \n // Apply same logic as real errors\n if (statusCode >= 400 && statusCode < 500) {\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n result.error = {\n message: errorMessage,\n statusCode: statusCode,\n code: statusCode === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n \n return result;\n }\n\n logger(this.options.debug, \"info\", \"IP: \" + this.ip);\n logger(this.options.debug, \"info\", \"Agent: \" + this.agent);\n logger(this.options.debug, \"info\", \"Host: \" + this.host);\n logger(this.options.debug, \"info\", \"Path: \" + this.path);\n logger(this.options.debug, \"info\", \"Lang: \" + this.lang);\n\n //Bypass paths that match the ignore patterns\n if (ignoredPatternsCheck(this.path, this.ignore)) {\n logger(this.options.debug, \"info\", \"Ignored path: \" + this.path);\n result.promoted = true;\n return result;\n }\n\n // URL already processed at the beginning of method\n this.getCookie();\n this.extractToken();\n \n // Lite validator check - EARLY EXIT\n const liteCheck = this.shouldRedirectToLiteValidator();\n \n // Store domain from lite validator if available\n if (liteCheck.domain) {\n result.domain = liteCheck.domain;\n }\n \n if (liteCheck.redirect) {\n result.liteValidatorRedirect = true;\n result.liteValidatorUrl = liteCheck.url;\n result.promoted = false;\n return result;\n }\n\n await this.getConfig();\n\n //Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let configStatusType = HttpErrorWrapper.safeParse(this.activeConfig);\n\n if (configStatusType.success) {\n if (this.activeConfig && this.activeConfig.result.status !== 200) {\n //Can't process the request but we can trust it if trustOnFail is set to true\n const status = this.activeConfig?.result?.status || 0;\n const errorMessage = this.activeConfig?.result?.error || `API request failed with status ${status}`;\n \n // Config errors should respect trustOnFail (it's a system issue, not user error)\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n //Working with a real config file from here\n if (this.activeConfig.status === false) {\n logger(\n this.options.debug,\n \"info\",\n \"Config succesfully fetched but no check required.\"\n );\n result.promoted = true;\n return result;\n }\n\n //Attempt to retrieve crowdhandler cookie\n this.getCookie();\n\n logger(this.options.debug, \"info\", \"Cookie: \" + this.cookieValue);\n \n // Extract deployment from cookie if available\n if (this.cookieValue && this.cookieValue.deployment) {\n result.deployment = this.cookieValue.deployment;\n }\n\n this.getSignature({\n chIDSignature: this.specialParameters.chIDSignature,\n crowdhandlerCookieValue: this.cookieValue,\n });\n this.extractToken();\n\n logger(this.options.debug, \"info\", \"Signature: \" + this.simpleSignature);\n logger(\n this.options.debug,\n \"info\",\n \"Complex Signature: \" + this.complexSignature\n );\n logger(this.options.debug, \"info\", \"Token: \" + this.token);\n\n //If we don't have a signature or token force a check.\n if (\n (this.simpleSignature.length === 0 ||\n this.complexSignature.length === 0) &&\n !this.token\n ) {\n logger(\n this.options.debug,\n \"info\",\n \"Missing signature and/or token, doing a check.\"\n );\n\n try {\n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n //Handle a failed session status check\n //Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n if (sessionStatusType.success) {\n if (this.sessionStatus && this.sessionStatus.result.status !== 200) {\n //Can't process the request but we can trust it if trustOnFail is set to true\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n let token: string;\n \n // Pass domain from API response if available\n if (this.sessionStatus && this.sessionStatus.result.domain) {\n result.domain = this.sessionStatus.result.domain;\n }\n \n if (this.sessionStatus && this.sessionStatus.result.promoted === 0) {\n if (this.sessionStatus.result.token) {\n token = this.sessionStatus.result.token;\n result.token = token;\n this.extractToken({ chID: token });\n }\n\n result.promoted = false;\n return result;\n } else if (\n this.sessionStatus &&\n this.sessionStatus.result.promoted === 1\n ) {\n result.promoted = true;\n result.setCookie = true;\n\n let hash: string;\n let requested: string;\n\n if (this.sessionStatus.result.requested) {\n this.requested = this.sessionStatus.result.requested;\n }\n\n if (this.sessionStatus.result.deployment) {\n this.deployment = this.sessionStatus.result.deployment;\n result.deployment = this.deployment;\n }\n\n if (this.sessionStatus.result.hash) {\n hash = this.sessionStatus.result.hash;\n result.hash = hash;\n this.getSignature({ chIDSignature: hash });\n }\n\n if (this.sessionStatus.result.token) {\n token = this.sessionStatus.result.token;\n result.token = token;\n this.extractToken({ chID: token });\n }\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n }\n }\n\n logger(\n this.options.debug,\n \"info\",\n \"Signature and token found. Validating...\"\n );\n\n let validationResult = this.validateSignature();\n\n //If the signature is not valid we need to check the user\n if (validationResult.success === false) {\n logger(\n this.options.debug,\n \"info\",\n \"Signature not valid. Checking against API.\"\n );\n\n try {\n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n //Handle a failed session status check\n //Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n if (sessionStatusType.success) {\n if (this.sessionStatus && this.sessionStatus.result.status !== 200) {\n //Can't process the request but we can trust it if trustOnFail is set to true\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n // Pass domain from API response if available\n if (this.sessionStatus && this.sessionStatus.result.domain) {\n result.domain = this.sessionStatus.result.domain;\n }\n \n if (this.sessionStatus && this.sessionStatus.result.promoted === 0) {\n result.promoted = false;\n return result;\n } else if (\n this.sessionStatus &&\n this.sessionStatus.result.promoted === 1\n ) {\n let hash: string;\n let requested: string;\n let token: string;\n\n if (this.sessionStatus.result.requested) {\n this.requested = this.sessionStatus.result.requested;\n }\n\n if (this.sessionStatus.result.deployment) {\n this.deployment = this.sessionStatus.result.deployment;\n result.deployment = this.deployment;\n }\n\n if (this.sessionStatus.result.hash) {\n hash = this.sessionStatus.result.hash;\n result.hash = hash;\n this.getSignature({ chIDSignature: hash });\n }\n\n if (this.sessionStatus.result.token) {\n token = this.sessionStatus.result.token;\n result.token = token;\n this.extractToken({ chID: token });\n }\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n }\n }\n\n //part 2 here\n\n //We've established that we have a valid signature at this point\n logger(this.options.debug, \"info\", \"Signature is valid.\");\n\n try {\n // Only parse cookieValue if it exists\n if (this.cookieValue) {\n this.cookieValue = CookieObject.parse(this.cookieValue);\n\n if (this.cookieValue) {\n for (const item of this.cookieValue.tokens) {\n tokens.push(item);\n }\n }\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n }\n\n //Determine if we're working with a new token or a previously seen one\n if (\n (Array.isArray(tokens) && tokens.length === 0) ||\n (Array.isArray(tokens) && tokens[tokens.length - 1].token !== this.token)\n ) {\n freshToken = true;\n } else {\n freshToken = false;\n\n //We want to work with the most recent array of signatures\n for (const item of tokens[tokens.length - 1].signatures) {\n signatures.push(item);\n }\n }\n\n this.generateCookieObjects();\n\n if (\n this.signatureType === \"simple\" &&\n signatures.some((item) => item.sig === this.simpleSignature) === false\n ) {\n signatures.push(this.cookieSignatureObject);\n freshSignature = true;\n }\n\n if (freshToken) {\n //Reset the array. It's important we don't allow the PMUSER_CREDENTIALS variable exceed the byte limit.\n tokens = [];\n\n if (this.cookieTokenObject) {\n this.cookieTokenObject.signatures = signatures;\n }\n tokens.push(this.cookieTokenObject);\n } else {\n tokens[tokens.length - 1].signatures = signatures;\n tokens[tokens.length - 1].touched = this.cookieTokenObject?.touched;\n tokens[tokens.length - 1].touchedSig = this.cookieTokenObject?.touchedSig;\n }\n try {\n this.cookieValue = this.generateCookie(tokens, this.deployment);\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n // Handle the error as appropriate for your application...\n }\n result.cookieValue = JSON.stringify(this.cookieValue);\n\n if (freshSignature && this.specialParameters.chRequested) {\n result.stripParams = true;\n }\n\n //If we made it all the way here, we can assume the user is promoted and a cookie should be set.\n result.promoted = true;\n result.setCookie = true;\n result.token = this.token;\n\n return result;\n }\n}\n","import { z } from \"zod\";\nimport { Client } from \"./client/client\";\nimport { RequestContext } from \"./request/requestContext\";\nimport { Gatekeeper } from \"./gatekeeper/gatekeeper\";\nimport { GatekeeperOptions, Mode, Modes } from \"./common/types\";\nimport { CrowdHandlerError, createError, ErrorCodes } from \"./common/errors\";\n\n/**\n * Configuration options for initializing CrowdHandler\n */\nexport interface InitConfig {\n /** Your CrowdHandler public key (required) */\n publicKey: string;\n \n /** Your CrowdHandler private key (optional - required for private API access) */\n privateKey?: string;\n \n // Context options - provide one of these\n /** Express/Node.js request object */\n request?: any;\n \n /** Express/Node.js response object */\n response?: any;\n \n /** AWS Lambda@Edge event object */\n lambdaEdgeEvent?: any;\n\n /** Cloudflare Workers Request object (workerd runtime) */\n cloudflareWorkersRequest?: any;\n\n /** Additional configuration options */\n options?: {\n /** \n * Validation mode\n * - 'full': Server-side validation (default for server environments)\n * - 'hybrid': Uses signature method to reduce API calls, offloads non-critical processes to browser\n * - 'clientside': Browser-only validation (default for browser)\n * - 'auto': Automatically detect based on environment\n */\n mode?: Mode;\n \n /** API request timeout in milliseconds (default: 5000) */\n timeout?: number;\n \n /** Enable debug logging (default: false) */\n debug?: boolean;\n \n /** Custom API URL (default: https://api.crowdhandler.com) */\n apiUrl?: string;\n \n /** Trust users on API failure (default: true) */\n trustOnFail?: boolean;\n \n /** Fallback room slug if none matches */\n fallbackSlug?: string;\n \n /** Custom cookie name (default: 'crowdhandler') */\n cookieName?: string;\n \n /** Enable lite validator mode */\n liteValidator?: boolean;\n \n /** Room configuration for lite validator - array of room configs */\n roomsConfig?: Array<{\n domain: string;\n slug: string;\n urlPattern?: string;\n patternType?: 'regex' | 'contains' | 'all';\n queueActivatesOn?: number;\n timeout?: number;\n }>;\n \n /** Whether this is a waiting room implementation (default: false) */\n waitingRoom?: boolean;\n \n /** Test error simulation for integrator testing */\n testError?: {\n statusCode: number;\n message?: string;\n };\n };\n}\n\n/**\n * Result when init is called without context (API-only mode)\n */\nexport interface InitResultWithoutGatekeeper {\n /** Unified API client for making CrowdHandler API calls */\n client: Client;\n \n /** Gatekeeper is not available in API-only mode */\n gatekeeper?: never;\n}\n\n/**\n * Result when init is called with context (protection mode)\n */\nexport interface InitResultWithGatekeeper {\n /** Unified API client for making CrowdHandler API calls */\n client: Client;\n \n /** Gatekeeper instance for request validation */\n gatekeeper: Gatekeeper;\n}\n\n/**\n * Result returned from the init() function\n */\nexport type InitResult = InitResultWithoutGatekeeper | InitResultWithGatekeeper;\n\n/**\n * Initialize CrowdHandler with the provided configuration.\n * Returns a client for API access and optionally a gatekeeper for request validation.\n * \n * @param config - Configuration object containing keys and optional context\n * @returns An object containing the API client and optional gatekeeper\n * \n * @example\n * // API-only usage\n * const { client } = crowdhandler.init({ \n * publicKey: 'pk_xyz' \n * });\n * \n * @example\n * // Full protection with Express\n * const { client, gatekeeper } = crowdhandler.init({\n * publicKey: 'pk_xyz',\n * privateKey: 'sk_xyz',\n * request: req,\n * response: res\n * });\n * \n * @example\n * // Browser usage\n * const { client, gatekeeper } = crowdhandler.init({\n * publicKey: 'pk_xyz',\n * options: { mode: 'clientside' }\n * });\n * \n * @example\n * // Lambda@Edge usage\n * const { client, gatekeeper } = crowdhandler.init({\n * publicKey: 'pk_xyz',\n * privateKey: 'sk_xyz',\n * lambdaEdgeEvent: event\n * });\n * \n * @throws {CrowdHandlerError} When configuration is invalid\n */\n// Function overloads for better type inference\nexport function init(config: InitConfig & { request: any; response: any }): InitResultWithGatekeeper;\nexport function init(config: InitConfig & { lambdaEdgeEvent: any }): InitResultWithGatekeeper;\nexport function init(config: InitConfig & { cloudflareWorkersRequest: any }): InitResultWithGatekeeper;\nexport function init(config: InitConfig): InitResult;\n\n// Implementation\nexport function init(config: InitConfig): InitResult {\n // Validate configuration\n if (!config.publicKey) {\n throw new CrowdHandlerError(\n ErrorCodes.INVALID_CONFIG,\n 'publicKey is required',\n 'Provide your public key from the CrowdHandler dashboard: crowdhandler.init({ publicKey: \"YOUR_KEY\" })'\n );\n }\n \n // Create unified client\n const client = new Client({\n publicKey: config.publicKey,\n privateKey: config.privateKey,\n options: config.options\n });\n \n // Check if context was provided\n const hasContext = !!(\n (config.request && config.response) ||\n config.lambdaEdgeEvent ||\n config.cloudflareWorkersRequest ||\n (typeof window !== 'undefined' && !config.request && !config.response && !config.lambdaEdgeEvent && !config.cloudflareWorkersRequest)\n );\n \n // Create gatekeeper if context provided\n let gatekeeper: Gatekeeper | undefined;\n \n if (hasContext) {\n // Create RequestContext\n let context: RequestContext;\n \n if (config.lambdaEdgeEvent) {\n context = new RequestContext({ lambdaEvent: config.lambdaEdgeEvent });\n } else if (config.cloudflareWorkersRequest) {\n context = new RequestContext({ cloudflareWorkersRequest: config.cloudflareWorkersRequest });\n } else if (config.request && config.response) {\n context = new RequestContext({ request: config.request, response: config.response });\n } else if (typeof window !== 'undefined') {\n context = new RequestContext({});\n } else {\n throw new CrowdHandlerError(\n ErrorCodes.INVALID_CONTEXT,\n 'Invalid context configuration',\n 'Provide either:\\n' +\n '- { request, response } for Express/Node.js\\n' +\n '- { lambdaEdgeEvent } for Lambda@Edge\\n' +\n '- { cloudflareWorkersRequest } for Cloudflare Workers\\n' +\n '- Nothing for browser environment'\n );\n }\n \n // Auto-detect mode\n const mode = detectMode(config);\n \n // Prepare gatekeeper options\n const gatekeeperOptions: z.infer = {\n mode,\n debug: config.options?.debug,\n timeout: config.options?.timeout,\n ...(config.options?.trustOnFail !== undefined && { trustOnFail: config.options.trustOnFail }),\n fallbackSlug: config.options?.fallbackSlug,\n cookieName: config.options?.cookieName,\n liteValidator: config.options?.liteValidator,\n roomsConfig: config.options?.roomsConfig,\n waitingRoom: config.options?.waitingRoom,\n testError: config.options?.testError\n };\n \n // Create gatekeeper using the public client from our unified client\n gatekeeper = new Gatekeeper(\n client.getPublicClient(),\n context,\n {\n publicKey: config.publicKey,\n privateKey: config.privateKey\n },\n gatekeeperOptions\n );\n }\n \n return { client, gatekeeper };\n}\n\n/**\n * Detect the appropriate mode based on configuration and environment\n */\nfunction detectMode(config: InitConfig): Exclude {\n // Explicit mode takes precedence\n if (config.options?.mode && config.options.mode !== 'auto') {\n // Validate mode requirements\n if (config.options.mode === 'hybrid' && !config.privateKey) {\n throw new CrowdHandlerError(\n ErrorCodes.INVALID_MODE,\n 'Hybrid mode requires a privateKey',\n 'Either provide a privateKey or use \"full\" mode'\n );\n }\n return config.options.mode;\n }\n \n // Auto-detect based on environment\n if (typeof window !== 'undefined') {\n return 'clientside';\n }\n \n // Default to 'full' mode for server environments\n // (hybrid mode must be explicitly chosen)\n return 'full';\n}","/**\n * CrowdHandler JavaScript SDK\n * \n * @packageDocumentation\n */\n\n// Polyfill for async/await in ES5 environments\nimport 'regenerator-runtime/runtime';\n\n// Main API\n/** \n * Initialize CrowdHandler with configuration.\n * This is the main entry point for the SDK.\n */\nexport { init } from './init';\n\n/** \n * Unified API client for all CrowdHandler operations.\n * Usually obtained from init(), but can be instantiated directly.\n */\nexport { Client } from './client/client';\n\n// Error handling\nexport { CrowdHandlerError, ErrorCodes } from './common/errors';\n\n// Export individual error codes for better autocomplete\nexport const CROWDHANDLER_ERRORS = {\n // Configuration errors\n INVALID_CONFIG: 'INVALID_CONFIG',\n INVALID_MODE: 'INVALID_MODE',\n INVALID_CONTEXT: 'INVALID_CONTEXT',\n MISSING_PRIVATE_KEY: 'MISSING_PRIVATE_KEY',\n \n // API errors\n API_CONNECTION_FAILED: 'API_CONNECTION_FAILED',\n API_TIMEOUT: 'API_TIMEOUT',\n API_INVALID_RESPONSE: 'API_INVALID_RESPONSE',\n INVALID_API_KEY: 'INVALID_API_KEY',\n RATE_LIMITED: 'RATE_LIMITED',\n \n // Resource errors\n RESOURCE_NOT_FOUND: 'RESOURCE_NOT_FOUND',\n DOMAIN_NOT_FOUND: 'DOMAIN_NOT_FOUND',\n ROOM_NOT_FOUND: 'ROOM_NOT_FOUND',\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n \n // Generic errors\n UNKNOWN_ERROR: 'UNKNOWN_ERROR'\n} as const;\n\n// Types that users might need\nexport type { \n InitConfig, \n InitResult,\n InitResultWithGatekeeper,\n InitResultWithoutGatekeeper \n} from './init';\n\n// Classes for advanced usage (types only)\nexport type { Gatekeeper } from './gatekeeper/gatekeeper';\nexport type { RequestContext } from './request/requestContext';\n\n// Types for request validation\nexport type {\n ValidateRequestObject,\n ValidateRequestParams,\n RecordPerformanceOptions,\n GatekeeperOptions,\n RoomConfig,\n RoomsConfig,\n} from './common/types';\n\n// Re-export types with better names\nimport { z } from 'zod';\nimport { \n ValidateRequestObject as ValidateRequestSchema,\n ValidateRequestParams as ValidateRequestParamsSchema,\n RecordPerformanceOptions as RecordPerformanceSchema,\n GatekeeperOptions as GatekeeperOptionsSchema,\n RoomConfig as RoomConfigSchema,\n} from './common/types';\n\nexport type ValidateRequestResult = z.infer;\nexport type ValidateRequestParams = z.infer;\nexport type RecordPerformanceOptions = z.infer;\nexport type GatekeeperOptions = z.infer;\nexport type LiteValidatorRoom = z.infer;\n\n// Mode constants for better IntelliSense\nexport { Mode, Modes } from './common/types';\n\n// Common options types\n/**\n * Common options for API client configuration\n */\nexport interface ClientOptions {\n /** API request timeout in milliseconds (default: 5000) */\n timeout?: number;\n \n /** Enable debug logging (default: false) */\n debug?: boolean;\n \n /** Custom API URL (default: https://api.crowdhandler.com) */\n apiUrl?: string;\n}\n\n// Response types from API methods\n\n/**\n * Room resource from the CrowdHandler API\n */\nexport interface Room {\n /** Unique room identifier */\n id: string;\n \n /** URL slug for the room */\n slug: string;\n \n /** Domain associated with the room */\n domain: string;\n \n /** Whether the room is active */\n status: boolean;\n \n /** Additional room properties */\n [key: string]: any;\n}\n\nexport interface Domain {\n id: string;\n domain: string;\n [key: string]: any;\n}\n\nexport interface Session {\n id: string;\n roomId: string;\n status: number;\n promoted: number;\n [key: string]: any;\n}\n\nexport interface Request {\n id: string;\n [key: string]: any;\n}\n\nexport interface Response {\n id: string;\n [key: string]: any;\n}"],"names":["undefined","z","axios","sha256"],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/crowdhandler.esm.js b/dist/crowdhandler.esm.js
index 0dc476c..73f85b8 100644
--- a/dist/crowdhandler.esm.js
+++ b/dist/crowdhandler.esm.js
@@ -1,5 +1,5 @@
/**
- * CrowdHandler JavaScript SDK v2.3.1
+ * CrowdHandler JavaScript SDK v2.4.0
* (c) 2026 CrowdHandler
* @license ISC
*/
@@ -1031,6 +1031,19 @@ var createError = {
}
};
+/**
+ * Detect if we're running in the Cloudflare Workers (workerd) runtime.
+ * Workers sets navigator.userAgent to "Cloudflare-Workers" — this is the
+ * documented and stable detection signal:
+ * https://developers.cloudflare.com/workers/runtime-apis/web-standards/
+ */
+var isCloudflareWorkers = typeof navigator !== "undefined" &&
+ navigator.userAgent === "Cloudflare-Workers";
+
+// axios 0.27.2 has no fetch adapter and requires Node's http module, so it
+// crashes inside Workers. When isCloudflareWorkers is true we route HTTP
+// through native fetch instead — preserved error shape so errorHandler keeps
+// working.
var APIResponse = z.object({}).catchall(z.any());
z
.object({
@@ -1046,8 +1059,125 @@ var BaseClient = /** @class */ (function () {
this.apiUrl = options.apiUrl || apiUrl;
this.key = key;
this.timeout = options.timeout || 5000;
- axios.defaults.timeout = this.timeout;
+ if (!isCloudflareWorkers) {
+ // axios.defaults is process-global state and is meaningless in Workers
+ // (we don't use axios there). Skip in Workers to avoid touching axios's
+ // internal config which can drag in Node-only deps during import.
+ axios.defaults.timeout = this.timeout;
+ }
}
+ /**
+ * Issue an HTTP request. Routes through axios in Node/Lambda environments
+ * and native fetch in Cloudflare Workers. Both paths return / throw
+ * axios-compatible shapes so errorHandler() and the response.data parsing
+ * downstream work unchanged.
+ */
+ BaseClient.prototype.httpRequest = function (method, url, options) {
+ var _a;
+ if (options === void 0) { options = {}; }
+ return __awaiter(this, void 0, void 0, function () {
+ var requestTimeout, response_1, finalUrl, search, _i, _b, _c, k, v, init, hasContentType, controller, timeoutId, response, err_1, wrapped, contentType, data, text, headersObj_1, wrapped, headersObj;
+ return __generator(this, function (_e) {
+ switch (_e.label) {
+ case 0:
+ requestTimeout = (_a = options.timeout) !== null && _a !== void 0 ? _a : this.timeout;
+ if (!!isCloudflareWorkers) return [3 /*break*/, 2];
+ return [4 /*yield*/, axios.request({
+ method: method,
+ url: url,
+ params: options.params,
+ data: options.body,
+ headers: options.headers,
+ timeout: requestTimeout,
+ })];
+ case 1:
+ response_1 = _e.sent();
+ return [2 /*return*/, { data: response_1.data, status: response_1.status, headers: response_1.headers }];
+ case 2:
+ finalUrl = url;
+ if (options.params && Object.keys(options.params).length > 0) {
+ search = new URLSearchParams();
+ for (_i = 0, _b = Object.entries(options.params); _i < _b.length; _i++) {
+ _c = _b[_i], k = _c[0], v = _c[1];
+ if (v !== undefined && v !== null)
+ search.append(k, String(v));
+ }
+ finalUrl += (finalUrl.includes("?") ? "&" : "?") + search.toString();
+ }
+ init = {
+ method: method,
+ headers: options.headers,
+ };
+ if (options.body !== undefined && method !== "GET" && method !== "DELETE") {
+ init.body = typeof options.body === "string" ? options.body : JSON.stringify(options.body);
+ hasContentType = options.headers && Object.keys(options.headers)
+ .some(function (h) { return h.toLowerCase() === "content-type"; });
+ if (!hasContentType) {
+ init.headers = __assign(__assign({}, (options.headers || {})), { "content-type": "application/json" });
+ }
+ }
+ controller = new AbortController();
+ timeoutId = setTimeout(function () { return controller.abort(); }, requestTimeout);
+ init.signal = controller.signal;
+ _e.label = 3;
+ case 3:
+ _e.trys.push([3, 5, , 6]);
+ return [4 /*yield*/, fetch(finalUrl, init)];
+ case 4:
+ response = _e.sent();
+ return [3 /*break*/, 6];
+ case 5:
+ err_1 = _e.sent();
+ clearTimeout(timeoutId);
+ wrapped = new Error((err_1 === null || err_1 === void 0 ? void 0 : err_1.message) || "Network request failed");
+ if (controller.signal.aborted || (err_1 === null || err_1 === void 0 ? void 0 : err_1.name) === "AbortError") {
+ wrapped.code = "ECONNABORTED";
+ }
+ wrapped.request = { url: finalUrl, method: method };
+ wrapped.config = { url: finalUrl, method: method };
+ throw wrapped;
+ case 6:
+ clearTimeout(timeoutId);
+ contentType = response.headers.get("content-type") || "";
+ if (!contentType.includes("application/json")) return [3 /*break*/, 11];
+ _e.label = 7;
+ case 7:
+ _e.trys.push([7, 9, , 10]);
+ return [4 /*yield*/, response.json()];
+ case 8:
+ data = _e.sent();
+ return [3 /*break*/, 10];
+ case 9:
+ _e.sent();
+ data = null;
+ return [3 /*break*/, 10];
+ case 10: return [3 /*break*/, 13];
+ case 11: return [4 /*yield*/, response.text()];
+ case 12:
+ text = _e.sent();
+ try {
+ data = JSON.parse(text);
+ }
+ catch (_f) {
+ data = text;
+ }
+ _e.label = 13;
+ case 13:
+ if (response.status < 200 || response.status >= 300) {
+ headersObj_1 = {};
+ response.headers.forEach(function (v, k) { headersObj_1[k] = v; });
+ wrapped = new Error("Request failed with status ".concat(response.status));
+ wrapped.response = { status: response.status, data: data, headers: headersObj_1 };
+ wrapped.config = { url: finalUrl, method: method };
+ throw wrapped;
+ }
+ headersObj = {};
+ response.headers.forEach(function (v, k) { headersObj[k] = v; });
+ return [2 /*return*/, { data: data, status: response.status, headers: headersObj }];
+ }
+ });
+ });
+ };
/**
* Wraps any error into a CrowdHandlerError
*/
@@ -1143,7 +1273,7 @@ var BaseClient = /** @class */ (function () {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 4]);
- return [4 /*yield*/, axios.delete(this.apiUrl + path, {
+ return [4 /*yield*/, this.httpRequest("DELETE", this.apiUrl + path, {
headers: {
"x-api-key": this.key,
},
@@ -1175,7 +1305,7 @@ var BaseClient = /** @class */ (function () {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 4]);
- return [4 /*yield*/, axios.get(this.apiUrl + path, {
+ return [4 /*yield*/, this.httpRequest("GET", this.apiUrl + path, {
params: params,
headers: {
"x-api-key": this.key,
@@ -1209,7 +1339,8 @@ var BaseClient = /** @class */ (function () {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 4]);
- return [4 /*yield*/, axios.post(this.apiUrl + path, body, {
+ return [4 /*yield*/, this.httpRequest("POST", this.apiUrl + path, {
+ body: body,
headers: __assign({ "x-api-key": this.key }, headers),
})];
case 1:
@@ -1232,17 +1363,19 @@ var BaseClient = /** @class */ (function () {
});
});
};
- BaseClient.prototype.httpPUT = function (path, body) {
+ BaseClient.prototype.httpPUT = function (path, body, options) {
return __awaiter(this, void 0, void 0, function () {
var response, error_4;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
- return [4 /*yield*/, axios.put(this.apiUrl + path, body, {
+ return [4 /*yield*/, this.httpRequest("PUT", this.apiUrl + path, {
+ body: body,
headers: {
"x-api-key": this.key,
},
+ timeout: options === null || options === void 0 ? void 0 : options.timeout,
})];
case 1:
response = _a.sent();
@@ -1299,9 +1432,9 @@ var Resource = /** @class */ (function (_super) {
);
return _super.prototype.httpPOST.call(this, this.path, requestBody);
};
- Resource.prototype.put = function (id, body) {
+ Resource.prototype.put = function (id, body, options) {
this.path = this.formatPath(this.path, id);
- return _super.prototype.httpPUT.call(this, this.path, body);
+ return _super.prototype.httpPUT.call(this, this.path, body, options);
};
return Resource;
}(BaseClient));
@@ -1699,6 +1832,78 @@ var BrowserHandler = /** @class */ (function () {
return BrowserHandler;
}());
+/**
+ * Handler for Cloudflare Workers (workerd) runtime.
+ *
+ * Mirrors the shape of LambdaRequestHandler — the Worker model is request-in /
+ * response-out (no mutable response object), so:
+ * - read methods source from the Workers-native Request
+ * - redirect() returns a Workers Response (caller returns it from fetch)
+ * - setCookie() returns the Set-Cookie header value (caller appends it
+ * to the outgoing Response)
+ *
+ * Cookie format and no-cache redirect headers mirror the existing
+ * crowdhandler-cloudflare-integration Worker so behaviour stays consistent
+ * across both deployment styles.
+ */
+var CloudflareWorkersHandler = /** @class */ (function () {
+ function CloudflareWorkersHandler(request) {
+ this.request = request;
+ this.url = new URL(request.url);
+ }
+ CloudflareWorkersHandler.prototype.getHeader = function (name) {
+ return this.request.headers.get(name) || "";
+ };
+ CloudflareWorkersHandler.prototype.getCookies = function () {
+ return this.request.headers.get("cookie") || "";
+ };
+ CloudflareWorkersHandler.prototype.getHost = function () {
+ // URL.host includes port when non-standard — matches Host header
+ // semantics used by the other handlers (Lambda/NodeJS/Browser).
+ return this.url.host;
+ };
+ CloudflareWorkersHandler.prototype.getProtocol = function () {
+ // URL.protocol includes the trailing ":" — strip it so the value matches
+ // the other handlers (which return "https" / "http").
+ return this.url.protocol.replace(/:$/, "");
+ };
+ CloudflareWorkersHandler.prototype.getPath = function () {
+ return this.url.pathname + this.url.search;
+ };
+ CloudflareWorkersHandler.prototype.getAbsoluteUri = function () {
+ return this.request.url;
+ };
+ CloudflareWorkersHandler.prototype.getUserHostAddress = function () {
+ // CF-Connecting-IP is the canonical client IP header on Workers
+ // (matches crowdhandler-cloudflare-integration/index.js).
+ return this.request.headers.get("cf-connecting-ip") || "";
+ };
+ CloudflareWorkersHandler.prototype.setCookie = function (value, cookieName, domain) {
+ if (cookieName === void 0) { cookieName = "crowdhandler"; }
+ // Returns the Set-Cookie header value — caller appends it to their
+ // outgoing Response. Format mirrors the existing CF integration.
+ var parts = ["".concat(cookieName, "=").concat(value), "path=/", "Secure"];
+ if (domain) {
+ parts.push("domain=".concat(domain));
+ }
+ return parts.join("; ");
+ };
+ CloudflareWorkersHandler.prototype.redirect = function (url) {
+ // Header casing and values mirror helpers.noCacheHeaders in
+ // crowdhandler-cloudflare-integration/helpers/misc.js.
+ return new Response(null, {
+ status: 302,
+ headers: {
+ Location: url,
+ "Cache-Control": "no-cache, no-store, must-revalidate",
+ Expires: "Fri, 01 Jan 1970 00:00:00 GMT",
+ Pragma: "no-cache",
+ },
+ });
+ };
+ return CloudflareWorkersHandler;
+}());
+
var LambdaRequestHandler = /** @class */ (function () {
function LambdaRequestHandler(event /*context: any, callback: any*/) {
this.request = event;
@@ -1917,6 +2122,10 @@ var RequestContext = /** @class */ (function () {
var responseEvent = params.lambdaEvent;
return new LambdaResponseHandler(responseEvent.Records[0].cf.request, responseEvent.Records[0].cf.response);
}
+ //Cloudflare Workers Request
+ }
+ else if (params && params.cloudflareWorkersRequest) {
+ return new CloudflareWorkersHandler(params.cloudflareWorkersRequest);
//NodeJS HTTP request
}
else if (params && params.request && params.response) {
@@ -1966,6 +2175,16 @@ z.object({
publicKey: z.string(),
privateKey: z.string().optional(),
});
+// Centralised list of CrowdHandler query-string parameter keys.
+// Used wherever ch-* params need to be detected or stripped.
+var CH_PARAM_KEYS = [
+ 'ch-code',
+ 'ch-fresh',
+ 'ch-id',
+ 'ch-id-signature',
+ 'ch-public-key',
+ 'ch-requested',
+];
var SpecialParametersObject = z.object({
chCode: z.string(),
chID: z.string(),
@@ -2104,6 +2323,7 @@ var RecordPerformanceOptions = z.object({
sample: z.number().optional().default(0.2),
overrideElapsed: z.number().optional(),
responseID: z.string().optional(),
+ timeout: z.number().optional(),
});
// Mode constants
var Modes = {
@@ -2280,20 +2500,11 @@ var ProcessURL = /** @class */ (function () {
ProcessURL.prototype.removeChParams = function (queryString) {
if (!queryString)
return "";
- // List of ch-* parameters to remove
- var chParams = [
- "ch-code",
- "ch-fresh",
- "ch-id",
- "ch-id-signature",
- "ch-public-key",
- "ch-requested",
- ];
// Split into individual params, filter out ch-* params, rejoin
var params = queryString.split("&");
var filteredParams = params.filter(function (param) {
var key = param.split("=")[0];
- return !chParams.includes(key.toLowerCase());
+ return !CH_PARAM_KEYS.includes(key.toLowerCase());
});
return filteredParams.join("&");
};
@@ -3066,34 +3277,38 @@ var Gatekeeper = /** @class */ (function () {
}
// Decode once to get the actual URL
var decodedURL = decodeURIComponent(destinationUrl);
- // Parse URL to handle parameters properly
- var urlParts = decodedURL.split('?');
- var baseUrl = urlParts[0];
- var queryString = urlParts[1] || '';
- // Parse existing parameters while preserving their values
+ // Build new CrowdHandler parameters
+ var chParams = [
+ "ch-id=".concat(encodeURIComponent(this.token || '')),
+ "ch-id-signature=".concat(encodeURIComponent(((_d = (_c = this.sessionStatus) === null || _c === void 0 ? void 0 : _c.result) === null || _d === void 0 ? void 0 : _d.hash) || '')),
+ "ch-requested=".concat(encodeURIComponent(((_f = (_e = this.sessionStatus) === null || _e === void 0 ? void 0 : _e.result) === null || _f === void 0 ? void 0 : _f.requested) || this.requested || this.specialParameters.chRequested || '')),
+ "ch-code=".concat(encodeURIComponent(this.specialParameters.chCode || '')),
+ "ch-fresh=true"
+ ];
+ // Separate hash fragment before parsing query params. This ensures
+ // ch-* params are placed in the real query string (window.location.search)
+ // rather than inside the hash fragment where host-domain scripts cannot
+ // read them via URLSearchParams.
+ var hashIndex = decodedURL.indexOf('#');
+ var urlWithoutHash = hashIndex !== -1 ? decodedURL.substring(0, hashIndex) : decodedURL;
+ var hashPart = hashIndex !== -1 ? decodedURL.substring(hashIndex) : '';
+ // Parse existing query string, stripping any existing ch-* params
+ var _g = urlWithoutHash.split('?'), baseUrl = _g[0], queryParts = _g.slice(1);
+ var queryString = queryParts.join('?');
var existingParams = [];
if (queryString) {
var params = queryString.split('&');
for (var _i = 0, params_1 = params; _i < params_1.length; _i++) {
var param = params_1[_i];
var key = param.split('=')[0];
- // Skip CrowdHandler parameters
- if (!['ch-id', 'ch-id-signature', 'ch-requested', 'ch-code', 'ch-fresh'].includes(key)) {
+ if (!CH_PARAM_KEYS.includes(key)) {
existingParams.push(param);
}
}
}
- // Build new CrowdHandler parameters
- var chParams = [
- "ch-id=".concat(encodeURIComponent(this.token || '')),
- "ch-id-signature=".concat(encodeURIComponent(((_d = (_c = this.sessionStatus) === null || _c === void 0 ? void 0 : _c.result) === null || _d === void 0 ? void 0 : _d.hash) || '')),
- "ch-requested=".concat(encodeURIComponent(((_f = (_e = this.sessionStatus) === null || _e === void 0 ? void 0 : _e.result) === null || _f === void 0 ? void 0 : _f.requested) || this.requested || this.specialParameters.chRequested || '')),
- "ch-code=".concat(encodeURIComponent(this.specialParameters.chCode || '')),
- "ch-fresh=true"
- ];
- // Construct final URL
+ // Construct final URL with ch-* params before any hash fragment
var allParams = existingParams.concat(chParams);
- var finalUrl = baseUrl + (allParams.length > 0 ? '?' + allParams.join('&') : '');
+ var finalUrl = baseUrl + (allParams.length > 0 ? '?' + allParams.join('&') : '') + hashPart;
logger(this.options.debug, "info", "[WaitingRoom] Redirecting promoted user to: ".concat(finalUrl));
return this.REQUEST.redirect(finalUrl);
}
@@ -3290,12 +3505,23 @@ var Gatekeeper = /** @class */ (function () {
*
* @param {string} value - The cookie value to set (from result.cookieValue)
* @param {string} domain - Optional domain pattern to determine cookie domain scope
- * @returns {boolean} True if the cookie was successfully set, false otherwise
+ * @returns {boolean | string} In Node.js/Lambda/browser environments returns true on success
+ * or false on failure. In Cloudflare Workers returns the Set-Cookie header string that
+ * must be applied to the outgoing Response by the caller.
*
* @example
+ * // Node.js / Lambda
* if (result.setCookie) {
* gatekeeper.setCookie(result.cookieValue, result.domain);
* }
+ *
+ * @example
+ * // Cloudflare Workers
+ * if (result.setCookie) {
+ * const setCookieHeader = gatekeeper.setCookie(result.cookieValue, result.domain);
+ * // setCookieHeader is the Set-Cookie header value — apply it to the Response:
+ * // response.headers.append('Set-Cookie', setCookieHeader as string);
+ * }
*/
Gatekeeper.prototype.setCookie = function (value, domain) {
try {
@@ -3308,9 +3534,12 @@ var Gatekeeper = /** @class */ (function () {
logger(this.options.debug, "info", "Setting cookie with domain: ".concat(cookieDomain));
}
}
- // Set the cookie with the provided value and options
- this.REQUEST.setCookie(value, this.STORAGE_NAME, cookieDomain);
- return true;
+ // Set the cookie with the provided value and options.
+ // CloudflareWorkersHandler returns the Set-Cookie header string because
+ // Workers are response-out and the caller must apply the header manually.
+ // All other handlers set the cookie as a side-effect and return void.
+ var result = this.REQUEST.setCookie(value, this.STORAGE_NAME, cookieDomain);
+ return typeof result === 'string' ? result : true;
}
catch (error) {
logger(this.options.debug, "error", error);
@@ -3388,35 +3617,42 @@ var Gatekeeper = /** @class */ (function () {
*/
Gatekeeper.prototype.recordPerformance = function (options) {
return __awaiter(this, void 0, void 0, function () {
- var validatedOptions, statusCode, sample, overrideElapsed, responseID, lottery, currentResponseID, elapsed;
+ var validatedOptions, statusCode, sample, overrideElapsed, responseID, timeout, lottery, currentResponseID, elapsed, sampleRate, putPromise, error_3;
return __generator(this, function (_a) {
- try {
- validatedOptions = options
- ? RecordPerformanceOptions.parse(options)
- : {
- statusCode: 200,
- sample: 0.2,
- overrideElapsed: undefined,
- responseID: undefined, // no responseID
- };
- statusCode = validatedOptions.statusCode, sample = validatedOptions.sample, overrideElapsed = validatedOptions.overrideElapsed, responseID = validatedOptions.responseID;
- lottery = Math.random();
- currentResponseID = responseID || this.responseID;
- // If there's no responseID or if the random number is higher than the sample rate, return early
- if (!currentResponseID || lottery >= sample) {
- return [2 /*return*/];
- }
- elapsed = overrideElapsed !== undefined ? overrideElapsed : this.timer.elapsed();
- // Asynchronously send the performance data to CrowdHandler, no need to await the promise
- this.PublicClient.responses().put(currentResponseID, {
- httpCode: statusCode,
- time: elapsed,
- });
- }
- catch (error) {
- logger(this.options.debug, "Error recording performance:", error);
+ switch (_a.label) {
+ case 0:
+ _a.trys.push([0, 3, , 4]);
+ validatedOptions = options
+ ? RecordPerformanceOptions.parse(options)
+ : {
+ statusCode: 200,
+ sample: 0.2,
+ overrideElapsed: undefined,
+ responseID: undefined,
+ timeout: undefined, // no per-call timeout override
+ };
+ statusCode = validatedOptions.statusCode, sample = validatedOptions.sample, overrideElapsed = validatedOptions.overrideElapsed, responseID = validatedOptions.responseID, timeout = validatedOptions.timeout;
+ lottery = Math.random();
+ currentResponseID = responseID || this.responseID;
+ // If there's no responseID or if the random number is higher than the sample rate, return early
+ if (!currentResponseID || lottery >= sample) {
+ return [2 /*return*/];
+ }
+ elapsed = overrideElapsed !== undefined ? overrideElapsed : this.timer.elapsed();
+ sampleRate = Math.max(1, Math.round(1 / sample));
+ putPromise = this.PublicClient.responses().put(currentResponseID, { httpCode: statusCode, sampleRate: sampleRate, time: elapsed }, { timeout: timeout !== null && timeout !== void 0 ? timeout : 1500 });
+ if (!isCloudflareWorkers) return [3 /*break*/, 2];
+ return [4 /*yield*/, putPromise];
+ case 1:
+ _a.sent();
+ _a.label = 2;
+ case 2: return [3 /*break*/, 4];
+ case 3:
+ error_3 = _a.sent();
+ logger(this.options.debug, "Error recording performance:", error_3);
+ return [3 /*break*/, 4];
+ case 4: return [2 /*return*/];
}
- return [2 /*return*/];
});
});
};
@@ -3670,7 +3906,7 @@ var Gatekeeper = /** @class */ (function () {
Gatekeeper.prototype.validateRequestClientSideMode = function (customParams) {
var _a, _b, _c, _d, _e;
return __awaiter(this, void 0, void 0, function () {
- var result, statusCode, errorMessage, liteCheck, mergedParams, sessionStatusType, status_1, errorMessage, _f, promoted, slug, token, responseID, deployment, hash, requested, domain, error_3;
+ var result, statusCode, errorMessage, liteCheck, mergedParams, sessionStatusType, status_1, errorMessage, _f, promoted, slug, token, responseID, deployment, hash, requested, domain, error_4;
return __generator(this, function (_g) {
switch (_g.label) {
case 0:
@@ -3811,9 +4047,9 @@ var Gatekeeper = /** @class */ (function () {
}
return [2 /*return*/, result];
case 3:
- error_3 = _g.sent();
- logger(this.options.debug, "error", "An error occurred during request validation: ".concat(error_3));
- throw error_3;
+ error_4 = _g.sent();
+ logger(this.options.debug, "error", "An error occurred during request validation: ".concat(error_4));
+ throw error_4;
case 4: return [2 /*return*/];
}
});
@@ -3828,7 +4064,7 @@ var Gatekeeper = /** @class */ (function () {
Gatekeeper.prototype.validateRequestFullMode = function (customParams) {
var _a, _b, _c, _d, _e;
return __awaiter(this, void 0, void 0, function () {
- var result, statusCode, errorMessage, liteCheck, mergedParams, sessionStatusType, status_2, errorMessage, _f, promoted, slug, token, responseID, deployment, hash, requested, domain, error_4;
+ var result, statusCode, errorMessage, liteCheck, mergedParams, sessionStatusType, status_2, errorMessage, _f, promoted, slug, token, responseID, deployment, hash, requested, domain, error_5;
return __generator(this, function (_g) {
switch (_g.label) {
case 0:
@@ -3969,9 +4205,9 @@ var Gatekeeper = /** @class */ (function () {
}
return [2 /*return*/, result];
case 3:
- error_4 = _g.sent();
- logger(this.options.debug, "error", "An error occurred during request validation: ".concat(error_4));
- throw error_4;
+ error_5 = _g.sent();
+ logger(this.options.debug, "error", "An error occurred during request validation: ".concat(error_5));
+ throw error_5;
case 4: return [2 /*return*/];
}
});
@@ -3985,7 +4221,7 @@ var Gatekeeper = /** @class */ (function () {
Gatekeeper.prototype.validateRequestHybridMode = function (customParams) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
return __awaiter(this, void 0, void 0, function () {
- var signatures, tokens, freshToken, freshSignature, result, statusCode, errorMessage, liteCheck, configStatusType, status_3, errorMessage, mergedParams, sessionStatusType, status_4, errorMessage, token, hash, error_5, validationResult, mergedParams, sessionStatusType, status_5, errorMessage, hash, token, error_6, _i, _q, item, _r, _s, item;
+ var signatures, tokens, freshToken, freshSignature, result, statusCode, errorMessage, liteCheck, configStatusType, status_3, errorMessage, mergedParams, sessionStatusType, status_4, errorMessage, token, hash, error_6, validationResult, mergedParams, sessionStatusType, status_5, errorMessage, hash, token, error_7, _i, _q, item, _r, _s, item;
var _this = this;
return __generator(this, function (_t) {
switch (_t.label) {
@@ -4180,8 +4416,8 @@ var Gatekeeper = /** @class */ (function () {
}
return [3 /*break*/, 5];
case 4:
- error_5 = _t.sent();
- logger(this.options.debug, "error", error_5);
+ error_6 = _t.sent();
+ logger(this.options.debug, "error", error_6);
return [3 /*break*/, 5];
case 5:
logger(this.options.debug, "info", "Signature and token found. Validating...");
@@ -4256,8 +4492,8 @@ var Gatekeeper = /** @class */ (function () {
}
return [3 /*break*/, 9];
case 8:
- error_6 = _t.sent();
- logger(this.options.debug, "error", error_6);
+ error_7 = _t.sent();
+ logger(this.options.debug, "error", error_7);
return [3 /*break*/, 9];
case 9:
//part 2 here
@@ -4349,7 +4585,8 @@ function init(config) {
// Check if context was provided
var hasContext = !!((config.request && config.response) ||
config.lambdaEdgeEvent ||
- (typeof window !== 'undefined' && !config.request && !config.response && !config.lambdaEdgeEvent));
+ config.cloudflareWorkersRequest ||
+ (typeof window !== 'undefined' && !config.request && !config.response && !config.lambdaEdgeEvent && !config.cloudflareWorkersRequest));
// Create gatekeeper if context provided
var gatekeeper;
if (hasContext) {
@@ -4358,6 +4595,9 @@ function init(config) {
if (config.lambdaEdgeEvent) {
context = new RequestContext({ lambdaEvent: config.lambdaEdgeEvent });
}
+ else if (config.cloudflareWorkersRequest) {
+ context = new RequestContext({ cloudflareWorkersRequest: config.cloudflareWorkersRequest });
+ }
else if (config.request && config.response) {
context = new RequestContext({ request: config.request, response: config.response });
}
@@ -4368,6 +4608,7 @@ function init(config) {
throw new CrowdHandlerError(ErrorCodes.INVALID_CONTEXT, 'Invalid context configuration', 'Provide either:\n' +
'- { request, response } for Express/Node.js\n' +
'- { lambdaEdgeEvent } for Lambda@Edge\n' +
+ '- { cloudflareWorkersRequest } for Cloudflare Workers\n' +
'- Nothing for browser environment');
}
// Auto-detect mode
diff --git a/dist/crowdhandler.esm.js.map b/dist/crowdhandler.esm.js.map
index ad14be7..a7ea702 100644
--- a/dist/crowdhandler.esm.js.map
+++ b/dist/crowdhandler.esm.js.map
@@ -1 +1 @@
-{"version":3,"file":"crowdhandler.esm.js","sources":["../node_modules/regenerator-runtime/runtime.js","../node_modules/tslib/tslib.es6.js","../src/common/logger.ts","../src/common/errors.ts","../src/client/base_client.ts","../src/client/resource.ts","../src/client/public_client.ts","../src/client/private_client.ts","../src/client/client.ts","../src/request/browserHandler.ts","../src/request/lambdaRequestHandler.ts","../src/request/lambdaResponseHandler.ts","../src/request/nodejsHandler.ts","../src/request/requestContext.ts","../src/common/ignoredPatternsCheck.ts","../src/common/types.ts","../src/gatekeeper/configParse.ts","../src/common/processURL.ts","../src/common/hash.ts","../src/gatekeeper/signature.ts","../src/gatekeeper/tokenObject.ts","../src/common/ipDiscover.ts","../src/common/languageDiscover.ts","../src/common/userAgentDiscover.ts","../src/common/timer.ts","../src/gatekeeper/gatekeeper.ts","../src/init.ts","../src/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per GeneratorResume behavior specified since ES2015:\n // ES2015 spec, step 3: https://262.ecma-international.org/6.0/#sec-generatorresume\n // Latest spec, step 2: https://tc39.es/ecma262/#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next method, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable != null) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n throw new TypeError(typeof iterable + \" is not iterable\");\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","//export a logger function that will be used to log messages\nexport function logger(debug: boolean, level: string, message: string) {\n if (debug) {\n switch (level) {\n case \"info\":\n console.info(message);\n break;\n case \"warn\":\n console.warn(message);\n break;\n case \"error\":\n console.error(message);\n break;\n default:\n console.log(message);\n break;\n }\n }\n}\n","/**\n * Custom error class for CrowdHandler SDK with actionable error messages.\n * All SDK errors are instances of this class, providing consistent error handling.\n * \n * @example\n * try {\n * const { client } = crowdhandler.init({ publicKey: 'invalid' });\n * } catch (error) {\n * // error is always a CrowdHandlerError\n * console.log(error.code); // 'INVALID_API_KEY'\n * console.log(error.message); // Human-readable message\n * console.log(error.suggestion); // Helpful next steps\n * console.log(error.statusCode); // HTTP status if applicable\n * }\n */\nexport class CrowdHandlerError extends Error {\n public code: string;\n public statusCode?: number;\n public suggestion?: string;\n public context?: Record;\n\n constructor(\n code: string,\n message: string,\n suggestion?: string,\n statusCode?: number,\n context?: Record\n ) {\n super(message);\n this.name = 'CrowdHandlerError';\n this.code = code;\n this.statusCode = statusCode;\n this.suggestion = suggestion;\n this.context = context;\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CrowdHandlerError);\n }\n }\n\n /**\n * Returns a formatted error message with all context\n */\n toString(): string {\n let errorMsg = `${this.name} [${this.code}]: ${this.message}`;\n \n if (this.suggestion) {\n errorMsg += `\\n💡 Suggestion: ${this.suggestion}`;\n }\n \n if (this.statusCode) {\n errorMsg += `\\n📊 Status Code: ${this.statusCode}`;\n }\n \n if (this.context && Object.keys(this.context).length > 0) {\n errorMsg += `\\n🔍 Context: ${JSON.stringify(this.context, null, 2)}`;\n }\n \n return errorMsg;\n }\n}\n\n/**\n * Common error codes used throughout the SDK.\n * Use these constants to handle specific error conditions.\n * \n * @example\n * try {\n * await client.domains().get();\n * } catch (error) {\n * if (error.code === ErrorCodes.MISSING_PRIVATE_KEY) {\n * console.log('Need to initialize with private key');\n * }\n * }\n */\nexport const ErrorCodes = {\n // Network errors\n API_CONNECTION_FAILED: 'API_CONNECTION_FAILED',\n API_TIMEOUT: 'API_TIMEOUT',\n API_INVALID_RESPONSE: 'API_INVALID_RESPONSE',\n \n // Authentication errors\n INVALID_PUBLIC_KEY: 'INVALID_PUBLIC_KEY',\n INVALID_PRIVATE_KEY: 'INVALID_PRIVATE_KEY',\n MISSING_PRIVATE_KEY: 'MISSING_PRIVATE_KEY',\n AUTHENTICATION_FAILED: 'AUTHENTICATION_FAILED',\n \n // Configuration errors\n INVALID_CONFIG: 'INVALID_CONFIG',\n INVALID_MODE: 'INVALID_MODE',\n MISSING_CONTEXT: 'MISSING_CONTEXT',\n INVALID_CONTEXT: 'INVALID_CONTEXT',\n \n // Validation errors\n VALIDATION_FAILED: 'VALIDATION_FAILED',\n INVALID_TOKEN: 'INVALID_TOKEN',\n SIGNATURE_MISMATCH: 'SIGNATURE_MISMATCH',\n \n // API response errors\n RATE_LIMITED: 'RATE_LIMITED',\n DOMAIN_NOT_FOUND: 'DOMAIN_NOT_FOUND',\n ROOM_NOT_FOUND: 'ROOM_NOT_FOUND',\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n \n // Runtime errors\n METHOD_NOT_AVAILABLE: 'METHOD_NOT_AVAILABLE',\n BROWSER_ONLY: 'BROWSER_ONLY',\n SERVER_ONLY: 'SERVER_ONLY',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n} as const;\n\n/**\n * Factory functions for creating common CrowdHandler errors.\n * Used internally by the SDK to ensure consistent error messages.\n * @internal\n */\nexport const createError = {\n apiConnection: (originalError: any) => {\n const isTimeout = originalError.code === 'ECONNABORTED' || originalError.code === 'ETIMEDOUT';\n const isRefused = originalError.code === 'ECONNREFUSED';\n \n if (isTimeout) {\n return new CrowdHandlerError(\n ErrorCodes.API_TIMEOUT,\n 'Request to CrowdHandler API timed out',\n 'Try increasing the timeout option or check your network connection',\n undefined,\n { originalError: originalError.message }\n );\n }\n \n if (isRefused) {\n return new CrowdHandlerError(\n ErrorCodes.API_CONNECTION_FAILED,\n 'Could not connect to CrowdHandler API',\n 'Check your internet connection and firewall settings. If the problem persists, check https://status.crowdhandler.com',\n undefined,\n { originalError: originalError.message }\n );\n }\n \n return new CrowdHandlerError(\n ErrorCodes.API_CONNECTION_FAILED,\n `Network error: ${originalError.message}`,\n 'Check your network connection and try again',\n undefined,\n { originalError: originalError.message }\n );\n },\n\n invalidApiKey: (keyType: 'public' | 'private') => {\n const code = keyType === 'public' ? ErrorCodes.INVALID_PUBLIC_KEY : ErrorCodes.INVALID_PRIVATE_KEY;\n \n return new CrowdHandlerError(\n code,\n `Invalid ${keyType} key`,\n `Check your CrowdHandler dashboard for the correct ${keyType} key`,\n 401\n );\n },\n\n missingPrivateKey: (method: string) => {\n return new CrowdHandlerError(\n ErrorCodes.MISSING_PRIVATE_KEY,\n `${method} requires a private key`,\n `Initialize with: crowdhandler.init({ publicKey, privateKey })`,\n 403\n );\n },\n\n missingContext: (method: string) => {\n const example = typeof window !== 'undefined' \n ? 'crowdhandler.init({ publicKey })'\n : 'crowdhandler.init({ publicKey, request: req, response: res })';\n \n return new CrowdHandlerError(\n ErrorCodes.MISSING_CONTEXT,\n `${method} requires request context`,\n `Initialize with: ${example}`,\n 400\n );\n },\n\n invalidResponse: (response: any) => {\n return new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n 'Received invalid response from CrowdHandler API',\n 'This might be a temporary issue. If it persists, contact support@crowdhandler.com',\n 502,\n { response: JSON.stringify(response).substring(0, 200) }\n );\n },\n\n rateLimited: (retryAfter?: string) => {\n return new CrowdHandlerError(\n ErrorCodes.RATE_LIMITED,\n 'API rate limit exceeded',\n retryAfter \n ? `Wait ${retryAfter} seconds before retrying`\n : 'Reduce the frequency of API calls',\n 429,\n { retryAfter }\n );\n },\n\n resourceNotFound: (resourceType: string, resourceId: string) => {\n const errorCode = {\n domain: ErrorCodes.DOMAIN_NOT_FOUND,\n room: ErrorCodes.ROOM_NOT_FOUND,\n session: ErrorCodes.SESSION_NOT_FOUND,\n }[resourceType] || ErrorCodes.API_INVALID_RESPONSE;\n \n return new CrowdHandlerError(\n errorCode,\n `${resourceType} not found: ${resourceId}`,\n `Check that the ${resourceType} ID is correct and that you have access to it`,\n 404,\n { resourceType, resourceId }\n );\n }\n};","import axios, { AxiosInstance } from \"axios\";\nimport { z, ZodError } from \"zod\";\nimport { logger } from \"../common/logger\";\nimport { CrowdHandlerError, createError, ErrorCodes } from \"../common/errors\";\n\nconst APIResponse = z.object({}).catchall(z.any());\n\nconst APIErrorResponse = z\n .object({\n error: z.string().optional(),\n message: z.string().optional(),\n statusCode: z.number().optional(),\n })\n .catchall(z.any());\n\nexport class BaseClient {\n protected debug: boolean;\n protected apiUrl: string;\n protected key: string;\n protected timeout: number;\n\n constructor(\n apiUrl: string,\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n this.debug = options.debug || false;\n this.apiUrl = options.apiUrl || apiUrl;\n this.key = key;\n this.timeout = options.timeout || 5000;\n axios.defaults.timeout = this.timeout;\n }\n\n /**\n * Wraps any error into a CrowdHandlerError\n */\n private wrapError(error: any): CrowdHandlerError {\n // Already a CrowdHandlerError\n if (error instanceof CrowdHandlerError) {\n return error;\n }\n\n // Zod validation error\n if (error.name === 'ZodError') {\n return new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n 'Invalid response format from API',\n 'This might be a temporary issue. If it persists, contact support@crowdhandler.com',\n undefined,\n { parseError: error.message }\n );\n }\n\n // Generic unknown error\n return new CrowdHandlerError(\n ErrorCodes.UNKNOWN_ERROR,\n error.message || 'An unexpected error occurred',\n 'Please try again. If the problem persists, contact support@crowdhandler.com',\n undefined,\n { \n errorType: error.constructor?.name,\n stack: error.stack\n }\n );\n }\n\n /**\n * Provides generic suggestion based on HTTP status code\n */\n private getGenericSuggestion(status: number): string {\n switch (status) {\n case 400: return 'Check your request parameters';\n case 401: return 'Check your authentication credentials';\n case 403: return 'You do not have permission for this action';\n case 404: return 'The requested resource was not found';\n case 429: return 'Too many requests - please slow down';\n case 500: \n case 502:\n case 503:\n case 504:\n return 'Server error - please try again later';\n default: \n return status >= 500 \n ? 'This appears to be a server error. Please try again later or contact support@crowdhandler.com'\n : 'Please check your request parameters and try again';\n }\n }\n\n async errorHandler(error: any): Promise {\n // If it's already a CrowdHandlerError, just re-throw it\n if (error instanceof CrowdHandlerError) {\n throw error;\n }\n if (error.response) {\n // The request was made and the server responded with a status code\n // that falls out of the range of 2xx\n const status = error.response.status;\n const data = error.response.data;\n \n logger(this.debug, \"error\", `API Error - Status: ${status} - ${JSON.stringify(data)}`);\n logger(this.debug, \"error\", `Response headers: ${JSON.stringify(error.response.headers)}`);\n\n // Extract the error message from the API response\n const errorMessage = data?.error || data?.message || `API request failed with status ${status}`;\n \n // Special handling for rate limiting to include retry-after\n if (status === 429) {\n const retryAfter = error.response.headers['retry-after'];\n throw new CrowdHandlerError(\n ErrorCodes.RATE_LIMITED,\n errorMessage,\n retryAfter \n ? `Wait ${retryAfter} seconds before retrying`\n : 'Reduce the frequency of API calls',\n status,\n {\n url: error.config?.url,\n method: error.config?.method,\n apiResponse: data,\n retryAfter\n }\n );\n }\n \n // Pass through the API error with full response data\n throw new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n errorMessage,\n this.getGenericSuggestion(status),\n status,\n { \n url: error.config?.url,\n method: error.config?.method,\n apiResponse: data // Full API response, not truncated\n }\n );\n \n } else if (error.request) {\n // The request was made but no response was received\n logger(this.debug, \"error\", `No response received: ${error.message}`);\n \n throw createError.apiConnection(error);\n \n } else {\n // Something happened in setting up the request\n logger(this.debug, \"error\", `Request setup error: ${error.message}`);\n \n // Use wrapError to ensure we always throw CrowdHandlerError\n throw this.wrapError(error);\n }\n }\n\n async httpDELETE(path: string, body: object) {\n try {\n const response = await axios.delete(this.apiUrl + path, {\n headers: {\n \"x-api-key\": this.key,\n },\n });\n\n try {\n return APIResponse.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error: any) {\n await this.errorHandler(error);\n }\n }\n\n async httpGET(path?: string, params?: object) {\n try {\n const response = await axios.get(this.apiUrl + path, {\n params: params,\n headers: {\n \"x-api-key\": this.key,\n },\n });\n \n try {\n return APIResponse.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error) {\n await this.errorHandler(error);\n }\n }\n\n async httpPOST(\n path: string,\n body?: Record,\n headers?: Record,\n schema: z.Schema = APIResponse\n ) {\n try {\n const response = await axios.post(this.apiUrl + path, body, {\n headers: {\n \"x-api-key\": this.key,\n ...headers,\n },\n });\n \n try {\n return schema.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error) {\n await this.errorHandler(error);\n }\n }\n\n async httpPUT(path: string, body: object) {\n try {\n const response = await axios.put(this.apiUrl + path, body, {\n headers: {\n \"x-api-key\": this.key,\n },\n });\n return APIResponse.parse(response.data);\n } catch (error) {\n return this.errorHandler(error);\n }\n }\n}\n","import { BaseClient } from \"./base_client\";\n\nexport class Resource extends BaseClient {\n path: string;\n constructor(\n key: string,\n path: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const {\n timeout = 5000,\n debug = false,\n apiUrl = \"https://api.crowdhandler.com\",\n } = options ?? {};\n super(apiUrl, key, options);\n this.path = path;\n }\n\n private formatPath(path: string, id: string) {\n // If id is not provided, replace it with an empty string.\n id = id || \"\";\n\n //this.path may contain a placeholder for the id. replace it with the actual id.\n path = path.replace(\"ID_PLACEHOLDER\", id);\n\n return path;\n }\n\n delete(id: string, body: object) {\n this.path = this.formatPath(this.path, id);\n\n return super.httpDELETE(this.path, body);\n }\n\n get(id?: string, params?: any) {\n //Handle id being an optional parameter\n if (!id) {\n id = \"\";\n }\n\n this.path = this.formatPath(this.path, id);\n\n // Extract custom parameters and spread them with other params\n const { custom, ...standardParams } = params || {};\n const requestParams = {\n ...standardParams,\n ...custom // Spread custom parameters at the root level\n };\n\n return super.httpGET(this.path, requestParams);\n }\n\n post(body: any) {\n this.path = this.formatPath(this.path, \"\");\n\n // Extract custom parameters and spread them with other body params\n const { custom, ...standardBody } = body || {};\n const requestBody = {\n ...standardBody,\n ...custom // Spread custom parameters at the root level\n };\n\n return super.httpPOST(this.path, requestBody);\n }\n\n put(id: string, body: object) {\n this.path = this.formatPath(this.path, id);\n\n return super.httpPUT(this.path, body);\n }\n}\n","import { BaseClient } from \"./base_client\";\nimport { Resource } from \"./resource\";\n\nexport class PublicClient extends BaseClient {\n constructor(\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const { timeout = 5000, debug = false, apiUrl = \"https://api.crowdhandler.com\" } =\n options ?? {};\n super(apiUrl, key, options);\n }\n\n requests() {\n return new Resource(this.key, \"/v1/requests/ID_PLACEHOLDER\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n\n responses() {\n return new Resource(this.key, \"/v1/responses/ID_PLACEHOLDER\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n\n rooms() {\n return new Resource(this.key, \"/v1/rooms/\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n}","import { BaseClient } from \"./base_client\";\nimport { Resource } from \"./resource\";\n\nexport class PrivateClient extends BaseClient {\n constructor(\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const {\n timeout = 5000,\n debug = false,\n apiUrl = \"https://api.crowdhandler.com\",\n } = options ?? {};\n super(apiUrl, key, options);\n }\n\n account() {\n return new Resource(this.key, \"/v1/account/\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n accountPlan() {\n return new Resource(this.key, \"/v1/account/plan\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n codes() {\n return new Resource(this.key, \"/v1/codes/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domains() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainIPs() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/ips\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainReports() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/reports\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainRequests() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/requests\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainRooms() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/rooms\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainURLs() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/urls\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groups() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groupBatch() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER/batch\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groupCodes() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER/codes\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n ips() {\n return new Resource(this.key, \"/v1/ips/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n reports() {\n return new Resource(this.key, \"/v1/reports/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n rooms() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n roomReports() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER/reports\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n roomSessions() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER/sessions\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n sessions() {\n return new Resource(this.key, \"/v1/sessions/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n templates() {\n return new Resource(this.key, \"/v1/templates/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n}\n","import { PublicClient } from \"./public_client\";\nimport { PrivateClient } from \"./private_client\";\nimport { createError } from \"../common/errors\";\n\n/**\n * Configuration for the unified Client\n */\ninterface ClientConfig {\n /** Your CrowdHandler public key */\n publicKey: string;\n \n /** Your CrowdHandler private key (required for private API access) */\n privateKey?: string;\n \n /** Additional client options */\n options?: {\n /** API request timeout in milliseconds (default: 5000) */\n timeout?: number;\n \n /** Enable debug logging (default: false) */\n debug?: boolean;\n \n /** Custom API URL (default: https://api.crowdhandler.com) */\n apiUrl?: string;\n };\n}\n\n/**\n * Unified CrowdHandler API client that combines public and private API access.\n * \n * This client provides a single interface to all CrowdHandler API endpoints,\n * with intelligent error messages when attempting to use private endpoints\n * without a private key.\n * \n * @example\n * // Public API only\n * const client = new Client({ publicKey: 'pk_xyz' });\n * const rooms = await client.rooms().get();\n * \n * @example\n * // Public and Private API\n * const client = new Client({ \n * publicKey: 'pk_xyz',\n * privateKey: 'sk_xyz' \n * });\n * const domains = await client.domains().get();\n */\nexport class Client {\n private publicClient: PublicClient;\n private privateClient?: PrivateClient;\n private hasPrivateAccess: boolean;\n\n constructor(config: ClientConfig) {\n this.publicClient = new PublicClient(config.publicKey, config.options);\n this.hasPrivateAccess = !!config.privateKey;\n \n if (config.privateKey) {\n this.privateClient = new PrivateClient(config.privateKey, config.options);\n }\n }\n\n // ===== Public API Methods (always available) =====\n \n /**\n * Access request resources\n * @returns Resource instance for request operations\n * \n * @example\n * const request = await client.requests().get('req_123');\n */\n requests() {\n return this.publicClient.requests();\n }\n\n /**\n * Access response resources\n * @returns Resource instance for response operations\n * \n * @example\n * const response = await client.responses().get('res_123');\n */\n responses() {\n return this.publicClient.responses();\n }\n\n /**\n * Access room resources\n * @returns Resource instance for room operations\n * \n * @example\n * const rooms = await client.rooms().get();\n * const room = await client.rooms().get('room_123');\n */\n rooms() {\n return this.publicClient.rooms();\n }\n\n // ===== Private API Methods (require privateKey) =====\n \n /**\n * Access account information (requires private key)\n * @returns Resource instance for account operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const account = await client.account().get();\n */\n account() {\n this.requirePrivateAccess('account()');\n return this.privateClient!.account();\n }\n\n accountPlan() {\n this.requirePrivateAccess('accountPlan()');\n return this.privateClient!.accountPlan();\n }\n\n codes() {\n this.requirePrivateAccess('codes()');\n return this.privateClient!.codes();\n }\n\n /**\n * Access domain resources (requires private key)\n * @returns Resource instance for domain operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const domains = await client.domains().get();\n * const domain = await client.domains().get('dom_123');\n * const newDomain = await client.domains().post({ domain: 'example.com' });\n */\n domains() {\n this.requirePrivateAccess('domains()');\n return this.privateClient!.domains();\n }\n\n domainIPs() {\n this.requirePrivateAccess('domainIPs()');\n return this.privateClient!.domainIPs();\n }\n\n domainReports() {\n this.requirePrivateAccess('domainReports()');\n return this.privateClient!.domainReports();\n }\n\n domainRequests() {\n this.requirePrivateAccess('domainRequests()');\n return this.privateClient!.domainRequests();\n }\n\n domainRooms() {\n this.requirePrivateAccess('domainRooms()');\n return this.privateClient!.domainRooms();\n }\n\n domainURLs() {\n this.requirePrivateAccess('domainURLs()');\n return this.privateClient!.domainURLs();\n }\n\n groups() {\n this.requirePrivateAccess('groups()');\n return this.privateClient!.groups();\n }\n\n groupBatch() {\n this.requirePrivateAccess('groupBatch()');\n return this.privateClient!.groupBatch();\n }\n\n groupCodes() {\n this.requirePrivateAccess('groupCodes()');\n return this.privateClient!.groupCodes();\n }\n\n ips() {\n this.requirePrivateAccess('ips()');\n return this.privateClient!.ips();\n }\n\n reports() {\n this.requirePrivateAccess('reports()');\n return this.privateClient!.reports();\n }\n\n roomReports() {\n this.requirePrivateAccess('roomReports()');\n return this.privateClient!.roomReports();\n }\n\n roomSessions() {\n this.requirePrivateAccess('roomSessions()');\n return this.privateClient!.roomSessions();\n }\n\n /**\n * Access session resources (requires private key)\n * @returns Resource instance for session operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const sessions = await client.sessions().get();\n * const session = await client.sessions().get('ses_123');\n */\n sessions() {\n this.requirePrivateAccess('sessions()');\n return this.privateClient!.sessions();\n }\n\n templates() {\n this.requirePrivateAccess('templates()');\n return this.privateClient!.templates();\n }\n\n // ===== Internal Methods =====\n \n /**\n * Get the internal PublicClient instance (used by Gatekeeper)\n */\n getPublicClient(): PublicClient {\n return this.publicClient;\n }\n\n /**\n * Check if private API access is available\n */\n hasPrivateAPIAccess(): boolean {\n return this.hasPrivateAccess;\n }\n\n // ===== Helper Methods =====\n private requirePrivateAccess(method: string): void {\n if (!this.hasPrivateAccess) {\n throw createError.missingPrivateKey(method);\n }\n }\n}","export class BrowserHandler {\n constructor() {}\n\n public getCookies() {\n return document.cookie;\n }\n\n public getHost() {\n return window.location.host;\n }\n\n public getProtocol() {\n return window.location.protocol;\n }\n\n public getPath() {\n if (!window.location.search) {\n return window.location.pathname;\n } else {\n return `${window.location.pathname}${window.location.search}`;\n }\n }\n\n public getAbsoluteUri() {\n return window.location.href;\n }\n\n public setCookie(value: string, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n document.cookie = `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`;\n }\n\n public getLocalStorageItem(key: string): string | null {\n return localStorage.getItem(key);\n }\n\n public setLocalStorageItem(key: string, value: string): void {\n localStorage.setItem(key, value);\n }\n\n public redirect(url: string) {\n window.location.href = url;\n }\n}\n","import { CloudFrontRequest } from \"aws-lambda\";\n\nexport class LambdaRequestHandler {\n private request: CloudFrontRequest;\n\n constructor(event: CloudFrontRequest /*context: any, callback: any*/) {\n this.request = event;\n }\n\n public getHeader(headername: string) {\n const headers = this.request.headers;\n const headerValue = headers[headername.toLowerCase()];\n\n if (!headerValue) {\n return \"\";\n }\n\n return headerValue[0].value;\n }\n\n public getCookies() {\n const headers = this.request.headers;\n const cookies = headers.cookie;\n\n if (!cookies) {\n return \"\";\n }\n\n return cookies[0].value;\n }\n\n public getHost() {\n return this.request.headers.host[0].value;\n }\n\n public getProtocol() {\n return this.request.headers[\"cloudfront-forwarded-proto\"][0].value;\n }\n\n public getPath() {\n if (!this.request.querystring) {\n return this.request.uri;\n } else {\n return `${this.request.uri}?${this.request.querystring}`;\n }\n }\n\n public getAbsoluteUri() {\n const protocol = this.getProtocol();\n const host = this.getHost();\n const path = this.getPath();\n\n return `${protocol}://${host}${path}`;\n }\n\n public getUserHostAddress() {\n return this.request.clientIp;\n }\n\n public setHeader(headerName: string, headerValue: string) {\n this.request.headers[headerName] = [\n {\n key: headerName,\n value: headerValue,\n },\n ];\n }\n\n public redirect(url: string) {\n let response = {\n status: \"302\",\n statusDescription: \"Found\",\n headers: {\n location: [\n {\n key: \"Location\",\n value: url,\n },\n ],\n /*\"set-cookie\": [\n {\n key: \"Set-Cookie\",\n value: `crowdhandler=${token}; path=/; Secure; HttpOnly`,\n },\n ],*/\n \"cache-control\": [\n {\n key: \"Cache-Control\",\n value: \"no-cache, no-store, must-revalidate\",\n },\n ],\n expires: [\n {\n key: \"Expires\",\n value: \"Fri, 01 Jan 1970 00:00:00 GMT\",\n },\n ],\n pragma: [\n {\n key: \"Pragma\",\n value: \"no-cache\",\n },\n ],\n },\n };\n return response;\n }\n}\n","import { CloudFrontRequest, CloudFrontResponse } from \"aws-lambda\";\nimport { CookieObject } from \"../common/types\";\nimport { z } from \"zod\";\n\nexport class LambdaResponseHandler {\n private request: CloudFrontRequest;\n private response: CloudFrontResponse;\n\n constructor(\n requestEvent: CloudFrontRequest,\n responseEvent: CloudFrontResponse\n ) {\n // Handle data in a Lambda@Edge environment\n this.request = requestEvent;\n this.response = responseEvent;\n }\n\n public getHeader(headername: string) {\n const headers = this.request.headers;\n const headerValue = headers[headername.toLowerCase()];\n\n if (!headerValue) {\n return \"\";\n }\n\n return headerValue[0].value;\n }\n\n public getHost() {\n return this.request.headers.host[0].value;\n }\n\n public getProtocol() {\n return this.request.headers[\"cloudfront-forwarded-proto\"][0].value;\n }\n\n public getPath() {\n return this.request.uri;\n }\n\n \n\n public setCookie(value: z.infer, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n // Append cookie to response header\n const cookieHeader = `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`;\n\n const setCookieHeader = this.response.headers[\"set-cookie\"] || [];\n setCookieHeader.push({ key: \"Set-Cookie\", value: cookieHeader });\n this.response.headers[\"set-cookie\"] = setCookieHeader;\n\n return this.response;\n }\n}\n","import { CookieObject } from \"../common/types\";\nimport { z } from \"zod\";\n\nexport class NodeJSHandler {\n private request: any;\n private response: any;\n \n constructor(req: any, res: any) {\n // Handle data in a non-Lambda environment\n this.request = req;\n this.response = res;\n }\n \n public getHeader(headername: string) {\n let headerValue = this.request.header(headername);\n \n if (!headerValue) {\n return \"\";\n }\n \n return headerValue;\n }\n \n public getCookies() {\n return this.request.get(\"cookie\");\n }\n \n public getHost() {\n return this.request.get(\"host\");\n }\n \n public getProtocol() {\n return this.request.protocol;\n }\n \n public getPath() {\n return this.request.originalUrl;\n }\n \n public getAbsoluteUri() {\n return (\n this.request.protocol +\n \"://\" +\n this.request.get(\"host\") +\n this.request.originalUrl\n );\n }\n \n public getUserHostAddress() {\n return this.request.ip;\n }\n \n public setCookie(value: z.infer, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n //Append cookie to response header\n return this.response.setHeader(\n \"Set-Cookie\",\n `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`\n );\n }\n \n public redirect(url: string) {\n this.response.setHeader(\"Cache-Control\", \"no-cache, no-store, max-age=0\");\n this.response.setHeader(\"Pragma\", \"no-cache\");\n this.response.setHeader(\"Expires\", 0);\n this.response.setHeader(\"Location\", url);\n this.response.statusCode = 302;\n return this.response.end();\n }\n }","import { CloudFrontRequestEvent, CloudFrontResponseEvent } from \"aws-lambda\";\n\nimport { BrowserHandler } from \"./browserHandler\";\nimport { LambdaRequestHandler } from \"./lambdaRequestHandler\";\nimport { LambdaResponseHandler } from \"./lambdaResponseHandler\";\nimport { NodeJSHandler } from \"./nodejsHandler\";\n\ninterface RequestContextParams {\n lambdaEvent?: any;\n request?: any;\n response?: any;\n}\n\n//Create a base class that will act as a switch depending on the environment\nexport class RequestContext {\n //constructor(event: CloudFrontEvent, req?: any, res?: any) {\n constructor(params: RequestContextParams) {\n //Lambda@Edge event\n if (params && params.lambdaEvent) {\n //Create a switch based on the event type\n switch (params.lambdaEvent?.Records[0].cf.config.eventType) {\n case \"viewer-request\":\n case \"origin-request\":\n //update the event type to be a CloudFrontRequestEvent\n const requestEvent =\n params.lambdaEvent as unknown as CloudFrontRequestEvent;\n return new LambdaRequestHandler(requestEvent.Records[0].cf.request);\n break;\n\n case \"viewer-response\":\n case \"origin-response\":\n //update the event type to be a CloudFrontResponseEvent\n const responseEvent =\n params.lambdaEvent as unknown as CloudFrontResponseEvent;\n return new LambdaResponseHandler(\n responseEvent.Records[0].cf.request,\n responseEvent.Records[0].cf.response\n );\n break;\n }\n //NodeJS HTTP request\n } else if (params && params.request && params.response) {\n return new NodeJSHandler(params.request, params.response);\n //Default to Browser request\n } else {\n return new BrowserHandler();\n }\n }\n}\n","export function ignoredPatternsCheck(path: string, patterns: RegExp) {\n //Handle static file extensions\n let result = patterns.test(path)\n return result\n}","import { z } from \"zod\";\n\n// Lite Validator types\nexport const RoomConfig = z.object({\n domain: z.string(), // Format: \"https://example.com\"\n urlPattern: z.string().optional(),\n patternType: z.enum(['regex', 'contains', 'all']).optional(),\n queueActivatesOn: z.number().optional(),\n slug: z.string(),\n timeout: z.number().optional()\n});\n\nexport const RoomsConfig = z.array(RoomConfig);\n\n//Gatekeeper Options\nexport const GatekeeperOptions = z.object({\n debug: z.boolean().optional(),\n fallbackSlug: z.string().optional(),\n mode: z.string().optional(),\n timeout: z.number().optional(),\n trustOnFail: z.boolean().optional(),\n cookieName: z.string().optional(),\n liteValidator: z.boolean().optional(),\n roomsConfig: RoomsConfig.optional(), // Array of room configs\n waitingRoom: z.boolean().optional(),\n testError: z.object({\n statusCode: z.number(),\n message: z.string().optional(),\n }).optional(), // For testing error handling\n});\n\nexport const GatekeeperKeyPair = z.object({\n publicKey: z.string(),\n privateKey: z.string().optional(),\n});\n\nexport const SpecialParametersObject = z.object({\n chCode: z.string(),\n chID: z.string(),\n chIDSignature: z.string(),\n chPublicKey: z.string(),\n chRequested: z.string(),\n});\n\n// Request configuration for session status API calls\nexport const SessionRequestConfig = z.object({\n agent: z.string().optional(),\n ip: z.string().optional(),\n lang: z.string().optional(),\n url: z.string().optional(),\n slug: z.string().optional(),\n // Allow custom parameters to be passed through\n custom: z.record(z.any()).optional(),\n});\n\nexport const ProcessURLResultObject = z.object({\n targetURL: z.string(),\n specialParameters: SpecialParametersObject,\n});\n\nexport const RequestObject = z\n .object({\n hostname: z.string(),\n path: z.string(),\n })\n .catchall(z.any());\n\n//Cookie object structure validation\nexport const CookieObject = z\n .object({\n tokens: z.array(z.any()),\n deployment: z.string().optional(),\n })\n .catchall(z.any());\n\nexport const LocalStorageObject = z.object({\n countdown: z.record(z.unknown()),\n positions: z.record(z.unknown()),\n token: z.record(z.string()),\n});\n\nexport const LocalStorageOptions = z.object({\n storageName: z.string(),\n localStorageValue: z.string(),\n});\n\n//Response structure validation\nexport const RoomMetaObject = z\n .object({\n domain: z.string().nullable(),\n patternType: z.string().nullable(),\n queueActivatesOn: z.string().nullable(),\n slug: z.string().nullable(),\n status: z.boolean().nullable(),\n timeout: z.number().nullable(),\n })\n .catchall(z.any());\n\nexport const SignatureObject = z.array(\n z.object({\n gen: z.string(),\n sig: z.string(),\n })\n);\n\nexport const SignatureResponseObject = z.object({\n expiration: z.nullable(z.boolean()),\n success: z.nullable(z.boolean()),\n});\n\nexport const SignatureSourceObject = z.object({\n chIDSignature: z.string().optional(),\n crowdhandlerCookieValue: CookieObject.optional(),\n});\n\nexport const ExtractTokenOptions = z.object({\n //object can contain anything and we don't know any of the possible values\n crowdhandlerCookieValue: CookieObject.optional(),\n chID: z.string().optional(),\n localStorageValue: LocalStorageObject.optional(),\n simpleCookieValue: z.string().optional(),\n});\n\nexport const TokenObject = z.object({\n token: z.string(),\n touched: z.number(),\n touchedSig: z.string(),\n signatures: z.array(z.any()),\n});\n\n\nexport const TokenObjectConstructor = z.object({\n tokenDatestamp: z.number(),\n tokenDatestampSignature: z.string(),\n tokenSignature: z.string(),\n tokenSignatureGenerated: z.string(),\n tokenSignatures: z.array(z.any()),\n tokenValue: z.string(),\n});\n\n// Custom parameters that can be passed to validateRequest\nexport const ValidateRequestParams = z.object({\n custom: z.record(z.any()).optional(),\n});\n\nexport const ValidateRequestObject = z.object({\n promoted: z.boolean(),\n stripParams: z.boolean(),\n setCookie: z.boolean(),\n cookieValue: z.string().optional(),\n setLocalStorage: z.boolean(),\n localStorageValue: z.string().optional(),\n responseID: z.string().optional(),\n slug: z.string().optional(),\n targetURL: z.string().optional(),\n deployment: z.string().optional(),\n hash: z.string().nullable().optional(),\n token: z.string().optional(),\n requested: z.string().optional(),\n liteValidatorRedirect: z.boolean().optional(),\n liteValidatorUrl: z.string().optional(),\n domain: z.string().optional(),\n error: z.object({\n message: z.string(),\n statusCode: z.number().optional(),\n code: z.string().optional(),\n }).optional(),\n});\n\nexport const HttpErrorWrapper = z.object({\n result: z.object({\n error: z.string().nullable(),\n status: z.number().nullable(),\n }),\n});\n\nexport const SessionStatusWrapper = z.object({\n result: z\n .object({\n hash: z.string().nullable().optional(),\n promoted: z.number().nullable(),\n status: z.number().nullable(),\n slug: z.string().nullable().optional(),\n token: z.string().nullable().optional(),\n urlRedirect: z.string().nullable().optional(),\n requested: z.string().nullable().optional(),\n })\n .catchall(z.any()),\n});\n\nexport const RecordPerformanceOptions = z.object({\n statusCode: z.number().optional().default(200),\n sample: z.number().optional().default(0.2),\n overrideElapsed: z.number().optional(),\n responseID: z.string().optional(),\n});\n\n// Mode constants\nexport const Modes = {\n FULL: 'full',\n HYBRID: 'hybrid',\n CLIENTSIDE: 'clientside',\n AUTO: 'auto'\n} as const;\n\nexport type Mode = typeof Modes[keyof typeof Modes];\n","import { ignoredPatternsCheck } from \"../common/ignoredPatternsCheck\";\nimport { z } from \"zod\";\nimport { RoomMetaObject } from \"../common/types\";\n\nexport class ConfigParse {\n private roomMeta = {\n domain: null,\n patternType: null,\n queueActivatesOn: null,\n slug: null,\n status: false,\n timeout: null,\n };\n private readonly config: Object[];\n private readonly host: string;\n private readonly path: string;\n private readonly patterns: RegExp;\n\n constructor(config: Object[], host: string, path: string, patterns: RegExp) {\n this.config = config;\n this.host = host;\n this.path = path;\n this.patterns = patterns;\n }\n\n patternEvaulation(item: any) {\n switch (item.patternType) {\n case \"regex\":\n let regex = new RegExp(item.urlPattern);\n return regex.test(this.path);\n break;\n\n case \"contains\":\n let contains = item.urlPattern;\n return this.path.includes(contains);\n break;\n\n case \"all\":\n return true;\n break;\n\n default:\n break;\n }\n }\n\n parse() {\n let staticAsset = ignoredPatternsCheck(this.path, this.patterns);\n\n if (staticAsset) {\n return RoomMetaObject.parse(this.roomMeta);\n }\n\n let filteredResults: any;\n filteredResults = this.config.filter((item: any) => {\n if (item.domain === `https://${this.host}`) {\n return item;\n }\n });\n\n\n for (const item of filteredResults) {\n if (this.patternEvaulation(item) === true) {\n //Populate the roomMeta object.\n //Use slug as a guard to make sure if we've already found a match we don't override it with weaker ones as we loop.\n if (this.roomMeta.slug === null) {\n this.roomMeta.domain = item.domain;\n this.roomMeta.patternType = item.patternType;\n this.roomMeta.queueActivatesOn = item.queueActivatesOn;\n this.roomMeta.slug = item.slug;\n this.roomMeta.status = true;\n this.roomMeta.timeout = item.timeout;\n }\n }\n }\n return RoomMetaObject.parse(this.roomMeta);\n }\n}\n","import { z } from \"zod\";\nimport { RequestObject, SpecialParametersObject } from \"./types\";\nimport { logger } from \"./logger\";\n\nexport class ProcessURL {\n private host: string | undefined;\n private path: string | undefined;\n private rawQueryString: string | undefined;\n private specialParameters!: z.infer;\n private targetURL: string | undefined;\n debug: boolean;\n\n constructor(request: z.infer, debug: boolean = false) {\n this.host = request.getHost();\n this.path = request.getPath();\n this.specialParameters = {\n chCode: \"\",\n chID: \"\",\n chIDSignature: \"\",\n chPublicKey: \"\",\n chRequested: \"\",\n };\n\n this.debug = debug;\n }\n\n public parseURL() {\n if (!this.host) {\n logger(this.debug, \"warn\", \"No host found in request object.\");\n return {\n targetURL: \"\",\n specialParameters: this.specialParameters,\n };\n }\n\n if (!this.path) {\n logger(this.debug, \"warn\", \"No path found in request object.\");\n return {\n targetURL: \"\",\n specialParameters: this.specialParameters,\n };\n }\n\n // Extract raw query string from path (preserving original encoding)\n if (this.path.includes(\"?\")) {\n this.rawQueryString = this.path.split(\"?\")[1];\n }\n\n // Extract ch-* parameter values using regex (decode for actual use)\n const chCode = this.extractParamValue(\"ch-code\");\n const chID = this.extractParamValue(\"ch-id\");\n const chIDSignature = this.extractParamValue(\"ch-id-signature\");\n const chPublicKey = this.extractParamValue(\"ch-public-key\");\n const chRequested = this.extractParamValue(\"ch-requested\");\n\n // Set special parameters (with validation)\n this.specialParameters.chCode = this.sanitizeParam(chCode);\n this.specialParameters.chID = this.sanitizeParam(chID);\n this.specialParameters.chIDSignature = this.sanitizeParam(chIDSignature);\n this.specialParameters.chPublicKey = this.sanitizeParam(chPublicKey);\n this.specialParameters.chRequested = this.sanitizeParam(chRequested);\n\n // Remove ch-* params from query string while preserving everything else\n const processedQueryString = this.removeChParams(this.rawQueryString);\n\n // Extract path without query string\n const cleanPath = this.path.split(\"?\")[0];\n\n // Construct targetURL\n if (processedQueryString) {\n this.targetURL = encodeURIComponent(\n `https://${this.host}${cleanPath}?${processedQueryString}`\n );\n } else {\n this.targetURL = encodeURIComponent(`https://${this.host}${cleanPath}`);\n }\n\n return {\n targetURL: this.targetURL,\n specialParameters: this.specialParameters,\n };\n }\n\n /**\n * Extract a parameter value from the raw query string using regex.\n * Decodes the value for actual use.\n *\n * Treats `+` as a space before percent-decoding — this is the HTML\n * form-encoding convention used by URLSearchParams and the legacy\n * query-string library, and by every other CrowdHandler integration\n * (Cloudflare Worker, CloudFront). `decodeURIComponent` alone does not\n * do this. Keeping it consistent matters for signature validation: any\n * divergence in how the SDK and the edge decode ch-* values produces\n * mismatched signatures.\n */\n private extractParamValue(paramName: string): string {\n if (!this.rawQueryString) return \"\";\n\n // Match the parameter in the query string\n const regex = new RegExp(`(?:^|&)${paramName}=([^&]*)`, \"i\");\n const match = this.rawQueryString.match(regex);\n\n if (match && match[1]) {\n const normalized = match[1].replace(/\\+/g, \"%20\");\n try {\n return decodeURIComponent(normalized);\n } catch {\n // Malformed percent-encoding. Still honour the `+` → space convention\n // on the fallback path so output stays consistent with URLSearchParams.\n return match[1].replace(/\\+/g, \" \");\n }\n }\n return \"\";\n }\n\n /**\n * Sanitize a parameter value - return empty string for unusable values.\n */\n private sanitizeParam(value: string): string {\n if (!value || value === \"undefined\" || value === \"null\") {\n return \"\";\n }\n return value;\n }\n\n /**\n * Remove ch-* parameters from the query string while preserving\n * the original encoding of all other parameters.\n */\n private removeChParams(queryString: string | undefined): string {\n if (!queryString) return \"\";\n\n // List of ch-* parameters to remove\n const chParams = [\n \"ch-code\",\n \"ch-fresh\",\n \"ch-id\",\n \"ch-id-signature\",\n \"ch-public-key\",\n \"ch-requested\",\n ];\n\n // Split into individual params, filter out ch-* params, rejoin\n const params = queryString.split(\"&\");\n const filteredParams = params.filter((param) => {\n const key = param.split(\"=\")[0];\n return !chParams.includes(key.toLowerCase());\n });\n\n return filteredParams.join(\"&\");\n }\n}\n","import { sha256 } from \"js-sha256\";\n\nexport function generateSignature(input: string) {\n const hash = sha256(input);\n return hash;\n}\n","import {\n CookieObject,\n RequestObject,\n RoomMetaObject,\n SignatureObject,\n SignatureResponseObject,\n SpecialParametersObject,\n} from \"../common/types\";\nimport { generateSignature } from \"../common/hash\";\nimport { logger } from \"../common/logger\";\nimport { TypeOf, z } from \"zod\";\n\nexport class Signature {\n private readonly activeConfig: any;\n private hashedPrivateKey: string | undefined;\n private signatureType: string | undefined;\n private complexSignature: z.infer | undefined;\n private simpleSignature: string[];\n private freshSignature: boolean | undefined;\n private matchedSignature: string | undefined;\n private cookie: z.infer | undefined;\n private specialParameters: z.infer;\n private hashCandidates: string[] = [];\n private activeCookie: any;\n private token: string | undefined;\n private requested: string | undefined;\n private validationResponse: z.infer = {\n expiration: null,\n success: null,\n };\n debug: boolean;\n\n constructor(\n activeConfig: z.infer,\n hashedPrivateKey: string | undefined,\n signatureType: string | undefined,\n simpleSignature: string[] = [],\n complexSignature: z.infer | undefined,\n token: string | undefined,\n cookie: z.infer | undefined,\n requested: string | undefined,\n specialParameters: z.infer,\n debug: boolean = false\n ) {\n this.activeConfig = activeConfig;\n this.hashedPrivateKey = hashedPrivateKey;\n this.signatureType = signatureType;\n this.complexSignature = complexSignature;\n this.simpleSignature = simpleSignature;\n this.token = token;\n this.cookie = cookie;\n this.requested = requested;\n this.specialParameters = specialParameters;\n this.debug = debug;\n\n if (this.requested) {\n this.specialParameters.chRequested = this.requested;\n }\n\n if (this.specialParameters.chRequested) {\n this.freshSignature = true;\n } else {\n this.freshSignature = false;\n }\n }\n\n private getHashCandidates() {\n let generatedHistory = [];\n\n //Check that the cookie is in a format that we can work with\n try {\n if (this.cookie) {\n CookieObject.parse(this.cookie);\n\n if (!this.freshSignature && this.cookie) {\n this.activeCookie = this.cookie.tokens[this.cookie.tokens.length - 1];\n }\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n }\n\n if (this.simpleSignature && this.simpleSignature.length > 0) {\n this.hashCandidates.unshift(\n `${this.hashedPrivateKey}${this.activeConfig.slug}${this.activeConfig.queueActivatesOn}${this.token}${this.specialParameters.chRequested}`\n );\n } else if (this.complexSignature && this.complexSignature.length > 0) {\n //If we have a signature that is active, we can use that to generate the hash\n for (const item of this.complexSignature) {\n generatedHistory.unshift(item.gen);\n }\n\n //Generate possible hash candidates\n for (const item of generatedHistory) {\n this.hashCandidates.push(\n `${this.hashedPrivateKey}${this.activeConfig.slug}${this.activeConfig.queueActivatesOn}${this.token}${item}`\n );\n }\n } else {\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return;\n }\n }\n\n private hashValidation() {\n let requiredHash;\n if (this.freshSignature) {\n let requiredHash = generateSignature(this.hashCandidates[0]);\n if (this.simpleSignature.some((item) => item === requiredHash) === true) {\n this.matchedSignature = requiredHash;\n }\n } else if (this.complexSignature && this.complexSignature.length > 0) {\n for (const hash of this.hashCandidates) {\n let requiredHash = generateSignature(hash);\n if (\n this.complexSignature.some((item) => item.sig === requiredHash) ===\n true\n ) {\n this.matchedSignature = requiredHash;\n break;\n }\n }\n }\n\n //No signature matches found. Validation failed.\n if (!this.matchedSignature) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return;\n }\n }\n\n private hashExpiration() {\n function minutesSinceTokenCreated(datestamp: number) {\n //UTC\n const currentDatestamp = new Date().getTime();\n\n //Time passed since creation time in minutes\n let minutesPassed = (currentDatestamp - datestamp) / 1000 / 60;\n //One decimal place\n minutesPassed = Math.round(minutesPassed * 10) / 10;\n return minutesPassed;\n }\n\n //This will only be true if we're dealing with a request that has recently been promoted from the waiting room or lite-validator.\n if (this.freshSignature && this.specialParameters.chRequested) {\n if (\n minutesSinceTokenCreated(\n Date.parse(this.specialParameters.chRequested)\n ) < this.activeConfig.timeout\n ) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = true;\n return;\n }\n } else if (\n this.activeCookie &&\n this.activeCookie.touchedSig ===\n generateSignature(\n `${this.hashedPrivateKey}${this.activeCookie.touched}`\n ) &&\n minutesSinceTokenCreated(this.activeCookie.touched) <\n this.activeConfig.timeout\n ) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = true;\n return;\n } else {\n //catch all\n this.validationResponse.expiration = true;\n this.validationResponse.success = false;\n return;\n }\n }\n\n public validateSignature() {\n try {\n this.getHashCandidates();\n\n if (this.validationResponse.success !== null) {\n return this.validationResponse;\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n\n try {\n this.hashValidation();\n\n if (this.validationResponse.success !== null) {\n return this.validationResponse;\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n\n try {\n this.hashExpiration();\n\n return this.validationResponse;\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n }\n}\n","import { z } from \"zod\";\nimport {\n SignatureObject,\n TokenObjectConstructor,\n TokenObject,\n} from \"../common/types\";\n\nexport class GenerateCookieObject {\n private tokenDatestamp: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenDatestamp\"];\n private tokenDatestampSignature: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenDatestampSignature\"];\n private tokenSignature: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignature\"];\n private tokenSignatureGenerated: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignatureGenerated\"];\n private tokenSignatures: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignatures\"];\n private tokenValue: z.infer[\"tokenValue\"];\n\n constructor(tokenObjectProperties: z.infer) {\n this.tokenDatestamp = tokenObjectProperties.tokenDatestamp;\n this.tokenDatestampSignature =\n tokenObjectProperties.tokenDatestampSignature;\n this.tokenSignature = tokenObjectProperties.tokenSignature;\n this.tokenSignatureGenerated =\n tokenObjectProperties.tokenSignatureGenerated;\n this.tokenSignatures = tokenObjectProperties.tokenSignatures;\n this.tokenValue = tokenObjectProperties.tokenValue;\n }\n\n signatureObject() {\n let signatureObj: z.infer[0] = {\n gen: this.tokenSignatureGenerated,\n sig: this.tokenSignature,\n };\n\n return signatureObj;\n }\n\n tokenObject() {\n let tokenObj: z.infer = {\n token: this.tokenValue,\n touched: this.tokenDatestamp,\n touchedSig: this.tokenDatestampSignature,\n signatures: this.tokenSignatures,\n };\n\n return tokenObj;\n }\n}\n","//Get source IP address of the request in node.js\nimport { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getIP(request: any) {\n let ip = request.getHeader(\"x-forwarded-for\") || request.getUserHostAddress();\n if (ip.indexOf(\",\") > -1) {\n // If there are multiple IPs in the x-forwarded-for header,\n // get the client's IP address, not the proxy addresses\n const ips = ip.split(\",\");\n ip = ips[0].trim();\n }\n\n return ip;\n}\n","import { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getLang(request: any) {\n let lang: string | undefined;\n let langStr = request.getHeader(\"accept-language\");\n if (langStr) {\n lang = langStr;\n }\n return lang;\n}\n","import { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getUserAgent(request: any) {\n let userAgent: string | undefined;\n let userAgentStr = request.getHeader(\"user-agent\");\n if (userAgentStr) {\n userAgent = userAgentStr;\n }\n return userAgent;\n}\n","//Create a class that will be used to create a timer\nexport class Timer {\n timer: number;\n //Create a constructor that will be used to initialize the timer\n constructor() {\n //Initialize the timer\n this.timer = Date.now();\n }\n //Create a method that will be used to stop the timer\n elapsed() {\n //Stop the timer\n return Date.now() - this.timer;\n }\n}\n","import { ConfigParse } from \"./configParse\";\nimport { ProcessURL } from \"../common/processURL\";\nimport { Signature } from \"./signature\";\nimport { GenerateCookieObject } from \"./tokenObject\";\nimport { logger } from \"../common/logger\";\nimport { getIP } from \"../common/ipDiscover\";\nimport { getLang } from \"../common/languageDiscover\";\nimport { getUserAgent } from \"../common/userAgentDiscover\";\nimport { Timer } from \"../common/timer\";\nimport { ignoredPatternsCheck } from \"../common/ignoredPatternsCheck\";\nimport \"../common/types\";\nimport { z } from \"zod\";\nimport {\n GatekeeperOptions,\n GatekeeperKeyPair,\n RoomMetaObject,\n CookieObject,\n SignatureObject,\n SpecialParametersObject,\n TokenObject,\n ValidateRequestObject,\n HttpErrorWrapper,\n SessionStatusWrapper,\n RecordPerformanceOptions,\n SignatureSourceObject,\n ExtractTokenOptions,\n LocalStorageObject,\n LocalStorageOptions,\n ProcessURLResultObject,\n RoomConfig,\n SessionRequestConfig,\n} from \"../common/types\";\nimport { generateSignature } from \"../common/hash\";\n\nexport class Gatekeeper {\n public PublicClient;\n private WAIT_URL: string = \"https://wait.crowdhandler.com\";\n public readonly STORAGE_NAME: string;\n public readonly REQUEST: any;\n private ignore: RegExp =\n /^((?!.*\\?).*(\\.(avi|css|eot|gif|ico|jpg|jpeg|js|json|mov|mp4|mpeg|mpg|og[g|v]|pdf|png|svg|ttf|txt|wmv|woff|woff2|xml))$)/;\n private hashedPrivateKey!: string;\n private publicKey: string;\n private readonly privateKey: string | undefined;\n private options: any = {\n debug: false,\n fallbackSlug: \"\",\n mode: \"full\",\n timeout: 5000,\n trustOnFail: true,\n waitingRoom: false,\n };\n public activeConfig!: z.infer;\n public cookies: Array = [];\n public cookieValue: z.infer | undefined;\n public simpleCookieValue: string | undefined;\n public localStorageValue:\n | z.infer\n | null\n | undefined;\n public storageKey: string | undefined;\n //Signature can come in the form of a simple string or as an object /w meta data.\n private cookieSignatureObject: z.infer[0] | undefined;\n private cookieTokenObject: z.infer | undefined;\n private signatureType: string | undefined;\n private simpleSignature: string[] = [];\n private complexSignature: z.infer = [];\n public token!: string;\n public responseID: string | undefined;\n timer: Timer;\n public host!: string;\n public path!: string;\n public agent: string | undefined;\n public ip: string | undefined;\n public lang: string | undefined;\n public slug: string | undefined;\n public sessionStatus: z.infer | undefined;\n private requested: string | undefined;\n private deployment: string | undefined;\n private specialParameters: z.infer = {\n chCode: \"\",\n chID: \"\",\n chIDSignature: \"\",\n chPublicKey: \"\",\n chRequested: \"\",\n };\n public targetURL: string | undefined;\n\n constructor(\n PublicClient: any,\n request: any,\n keyPair: z.infer,\n options: z.infer\n ) {\n this.PublicClient = PublicClient;\n this.REQUEST = request;\n this.publicKey = keyPair.publicKey;\n this.privateKey = keyPair.privateKey;\n //Merge provided options with defaults\n this.options = Object.assign({}, this.options, options);\n \n // Set cookie name from options or use default\n this.STORAGE_NAME = this.options.cookieName || \"crowdhandler\";\n\n //Hash the private key if mode is set to hybrid\n //Check if privateKey is provided when mode is set to \"hybrid\"\n if (\n this.options.mode === \"hybrid\" &&\n (this.privateKey === undefined || this.privateKey === \"\")\n ) {\n throw new Error(\n \"privateKey must be provided when mode is set to 'hybrid'\"\n );\n }\n\n if (this.options.mode === \"hybrid\" && this.privateKey !== undefined) {\n try {\n this.hashedPrivateKey = generateSignature(this.privateKey);\n } catch (error: any) {\n logger(\n this.options.debug,\n \"Error generating private key hash: \",\n error\n );\n }\n }\n\n this.host = this.REQUEST.getHost();\n this.path = this.REQUEST.getPath();\n\n if (this.options.mode === \"full\" || this.options.mode === \"hybrid\") {\n this.ip = getIP(this.REQUEST);\n this.lang = getLang(this.REQUEST);\n this.agent = getUserAgent(this.REQUEST);\n }\n\n //Start the timer\n this.timer = new Timer();\n\n // Extract slug if this is a waiting room implementation\n if (this.options.waitingRoom) {\n this.extractSlugFromPath();\n }\n }\n\n //Set the host using your own method if you're not happy with the default\n /**\n * Override the request host for testing or special routing needs.\n * \n * @param {string} host - The host to use (e.g., 'example.com')\n */\n public overrideHost(host: string) {\n this.host = host;\n }\n\n //Set the path using your own method if you're not happy with the default\n public overridePath(path: string) {\n this.path = path;\n }\n\n //Set the IP using your own method if you're not happy with the default\n public overrideIP(ip: string) {\n this.ip = ip;\n }\n\n //Set the language using your own method if you're not happy with the default\n public overrideLang(lang: string) {\n this.lang = lang;\n }\n\n //Set the user agent using your own method if you're not happy with the default\n public overrideUserAgent(agent: string) {\n this.agent = agent;\n }\n\n //Set the cookie using your own method if you're not happy with the default\n public overrideCookie(cookie: Array) {\n this.cookies = cookie;\n }\n\n /**\n * Overrides the default CrowdHandler waiting room with your custom URL.\n * \n * @param {string} url - The custom waiting room URL\n * \n * @example\n * // Redirect to your custom queue page\n * gatekeeper.overrideWaitingRoomUrl('https://mysite.com/custom-queue');\n */\n public overrideWaitingRoomUrl(url: string) {\n this.WAIT_URL = url;\n }\n\n /* If you have your own regular expression for urls to ignore set it here\n * @param string $regExp Regular Expression\n */\n public setIgnoreUrls(regExp: RegExp) {\n this.ignore = regExp;\n }\n\n /*\n * Fetch the room config feed\n * @return object\n */\n public async getConfig() {\n let response = await this.PublicClient.rooms().get();\n\n let configParse = new ConfigParse(\n response.result,\n this.host,\n this.path,\n this.ignore\n );\n\n let result = configParse.parse();\n this.activeConfig = RoomMetaObject.parse(result);\n }\n\n /**\n * Retrieves the current session status using GET call if a token is available, or POST call otherwise.\n * @param {object} customParams - Optional custom parameters to include in the API request\n * @returns {Promise} A Promise that resolves when the method has completed.\n */\n public async getSessionStatus(customParams?: Record): Promise {\n // Build request config conditionally\n const requestConfig: z.infer = {};\n\n // Always include these if they exist\n if (this.agent) requestConfig.agent = this.agent;\n if (this.ip) requestConfig.ip = this.ip;\n if (this.lang) requestConfig.lang = this.lang;\n\n // Include either slug OR url, but not both\n if (this.slug) {\n requestConfig.slug = this.slug;\n logger(this.options.debug, \"info\", `Using slug in request: ${this.slug}`);\n } else {\n // Only include URL if we don't have a slug\n const url = `https://${this.host}${this.path}`;\n requestConfig.url = url;\n logger(this.options.debug, \"info\", `Using URL in request: ${url}`);\n }\n\n // Include custom parameters if provided\n if (customParams && Object.keys(customParams).length > 0) {\n requestConfig.custom = customParams;\n logger(this.options.debug, \"info\", `Including custom parameters: ${JSON.stringify(customParams)}`);\n }\n\n if (this.token) {\n logger(\n this.options.debug,\n \"info\",\n \"Token found, performing a session GET call.\"\n );\n try {\n this.sessionStatus = await this.PublicClient.requests().get(\n this.token,\n requestConfig\n );\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Session GET call failed with error: ${error}`\n );\n // Set sessionStatus to error wrapper so error handling logic can process it\n this.sessionStatus = {\n result: {\n status: error.statusCode || 500,\n promoted: null,\n error: error.message || 'Unknown error occurred'\n }\n };\n }\n } else {\n logger(\n this.options.debug,\n \"info\",\n \"Token not found, performing a session POST call.\"\n );\n try {\n this.sessionStatus = await this.PublicClient.requests().post(\n requestConfig\n );\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Session POST call failed with error: ${error}`\n );\n // Set sessionStatus to error wrapper so error handling logic can process it\n this.sessionStatus = {\n result: {\n status: error.statusCode || 500,\n promoted: null,\n error: error.message || 'Unknown error occurred'\n }\n };\n }\n }\n }\n\n /**\n * Processes the URL from the request to extract the target URL and any special parameters.\n */\n public processURL(): void {\n try {\n const processURLInstance = new ProcessURL(this.REQUEST);\n const result: z.infer =\n processURLInstance.parseURL();\n if (result) {\n // If this is a waiting room implementation, check for url parameter\n if (this.options.waitingRoom) {\n const urlFromQuery = this.extractUrlFromWaitingRoomQuery();\n if (urlFromQuery) {\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Using url from query parameter: ${urlFromQuery}`\n );\n this.targetURL = urlFromQuery;\n this.specialParameters = result.specialParameters;\n return;\n }\n // If no url param, targetURL will be set from API response urlRedirect\n logger(\n this.options.debug,\n \"info\",\n \"[WaitingRoom] No url query parameter found, will use urlRedirect from API response\"\n );\n this.targetURL = \"\"; // Empty until we get API response\n this.specialParameters = result.specialParameters;\n return;\n }\n \n // Standard behavior - use the current URL as targetURL\n this.targetURL = result.targetURL;\n this.specialParameters = result.specialParameters;\n } else {\n throw new Error(\"Failed to parse URL.\");\n }\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `Error while processing URL: ${error}`\n );\n }\n }\n\n /**\n * Extracts the signature from the given signature source.\n * @param signatureSource - The source from which to extract the signature.\n */\n public getSignature(\n signatureSource: z.infer\n ): void {\n try {\n if (signatureSource.chIDSignature) {\n // Simple signature case\n this.simpleSignature = [signatureSource.chIDSignature];\n this.signatureType = \"simple\";\n } else if (signatureSource.crowdhandlerCookieValue) {\n // Complex signature case\n this.cookieValue = CookieObject.parse(\n signatureSource.crowdhandlerCookieValue\n );\n\n // Assuming that the last token's signatures are needed\n this.complexSignature =\n this.cookieValue.tokens[\n this.cookieValue.tokens.length - 1\n ].signatures;\n this.signatureType = \"complex\";\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", `Failed to get signature: ${error}`);\n }\n }\n\n /**\n * Extracts and sets the token from various sources (URL params, cookies, etc).\n * This is an internal method used during request validation.\n * @param options - The options for extracting the token.\n */\n private extractToken(options?: z.infer): void {\n // Use option values if provided, else fall back to constructor values\n const chID = options?.chID ?? this.specialParameters.chID;\n const crowdhandlerCookieValue =\n options?.crowdhandlerCookieValue ?? this.cookieValue;\n const localStorageValue =\n options?.localStorageValue ?? this.localStorageValue;\n const simpleCookieValue =\n options?.simpleCookieValue ?? this.simpleCookieValue;\n\n if (chID) {\n logger(this.options.debug, \"info\", \"chID parameter found\");\n this.extractTokenFromChID(chID);\n } else if (crowdhandlerCookieValue && this.options.mode === \"hybrid\") {\n logger(this.options.debug, \"info\", \"complex cookie found\");\n this.extractTokenFromComplexCookie(crowdhandlerCookieValue);\n } else if (simpleCookieValue) {\n logger(this.options.debug, \"info\", \"simple cookie found\");\n this.extractTokenFromSimpleCookie(simpleCookieValue);\n } else {\n logger(this.options.debug, \"info\", \"Token not found or invalid format\");\n }\n }\n\n /**\n * Verifies if the given token is valid based on its format.\n * @param token - The token to be validated.\n * @returns True if the token is valid, false otherwise.\n */\n private isValidToken(token: string): boolean {\n const tokenPattern = /^tok.*/;\n return tokenPattern.test(token);\n }\n\n /**\n * Extracts and sets the token from the provided chID if it's valid.\n * @param chID - The chID to extract the token from.\n * @throws {Error} When the token format is invalid.\n */\n private extractTokenFromChID(chID: string): void {\n if (!this.isValidToken(chID)) {\n throw new Error(`Invalid token format: ${chID}`);\n }\n\n this.token = chID;\n }\n\n /**\n * Extracts and sets the token from a complex cookie value if it's valid.\n * @param crowdhandlerCookieValue - The crowdhandler cookie value to extract the token from.\n * @throws {Error} When the token format is invalid.\n */\n private extractTokenFromComplexCookie(\n crowdhandlerCookieValue: z.infer\n ): void {\n try {\n this.cookieValue = CookieObject.parse(crowdhandlerCookieValue);\n\n // Ensure tokens array is not empty\n if (this.cookieValue.tokens.length === 0) {\n throw new Error(\"No tokens found in the cookie value.\");\n }\n\n const extractedToken =\n this.cookieValue.tokens[this.cookieValue.tokens.length - 1].token;\n\n if (!this.isValidToken(extractedToken)) {\n throw new Error(`Invalid token format: ${extractedToken}`);\n }\n\n this.token = extractedToken;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to extract token from complex cookie: ${error}`\n );\n }\n }\n\n /**\n * Extracts and sets the token from a simple cookie value if it's valid.\n * @param simpleCookieValue - The simple cookie value to extract the token from.\n * @throws {Error} When the token format is invalid.\n */\n private extractTokenFromSimpleCookie(simpleCookieValue: string): void {\n try {\n if (!this.isValidToken(simpleCookieValue)) {\n throw new Error(`Invalid token format: ${simpleCookieValue}`);\n }\n\n this.token = simpleCookieValue;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to extract token from simple cookie: ${error}`\n );\n }\n }\n\n /**\n * Extracts the slug from the URL path when in waiting room mode.\n * If the first path segment is 'ch', the slug is in the second segment.\n * Otherwise, the slug is the first path segment.\n */\n private extractSlugFromPath(): void {\n try {\n // Remove leading slash and query string, then split by /\n const pathWithoutQuery = this.path.split('?')[0];\n const cleanPath = pathWithoutQuery.startsWith('/') ? pathWithoutQuery.slice(1) : pathWithoutQuery;\n const segments = cleanPath.split('/').filter(s => s.length > 0);\n \n if (segments.length === 0) {\n logger(this.options.debug, \"info\", \"[WaitingRoom] No path segments found for slug extraction\");\n return;\n }\n \n let slugIndex = 0;\n \n // If first segment is 'ch', slug is in the second segment\n if (segments[0] === 'ch') {\n slugIndex = 1;\n \n if (segments.length <= 1) {\n logger(this.options.debug, \"info\", \"[WaitingRoom] Path starts with /ch/ but no slug segment found\");\n return;\n }\n }\n \n this.slug = segments[slugIndex];\n logger(this.options.debug, \"info\", `[WaitingRoom] Extracted slug from path: ${this.slug}`);\n \n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `[WaitingRoom] Failed to extract slug from path: ${error}`\n );\n }\n }\n\n /**\n * Extracts the target URL from query parameters when in waiting room mode.\n * Returns the encoded URL value if found, otherwise returns empty string.\n */\n private extractUrlFromWaitingRoomQuery(): string {\n try {\n // Get the full URL including query parameters\n const fullPath = this.REQUEST.getPath();\n if (!fullPath || !fullPath.includes('?')) {\n return \"\";\n }\n\n // Extract query string\n const queryString = fullPath.split('?')[1];\n if (!queryString) {\n return \"\";\n }\n\n // Parse query parameters manually to avoid automatic decoding\n // URLSearchParams.get() automatically decodes values, which we don't want\n const urlMatch = queryString.match(/(?:^|&)url=([^&]*)/);\n \n if (urlMatch && urlMatch[1]) {\n const urlParam = urlMatch[1];\n // The URL parameter value is encoded, return as-is without decoding\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Found url parameter (encoded): ${urlParam}`\n );\n return urlParam;\n }\n\n return \"\";\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `[WaitingRoom] Failed to extract url from query: ${error}`\n );\n return \"\";\n }\n }\n\n /**\n * Retrieves the token from local storage if possible.\n * @throws {Error} When the storage key or local storage value is undefined.\n */\n public getTokenFromLocalStorage(): void {\n try {\n if (!this.storageKey) {\n throw new Error(\"Storage key is not defined.\");\n }\n\n if (!this.localStorageValue || !this.localStorageValue.token) {\n throw new Error(\n \"Local storage value is not defined or does not contain a token.\"\n );\n }\n\n const token = this.localStorageValue.token[this.storageKey];\n\n if (!this.isValidToken(token)) {\n throw new Error(`Invalid token format: ${token}`);\n }\n\n this.token = token;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to get token from local storage: ${error}`\n );\n }\n }\n\n /**\n * Validates the signature.\n *\n * @returns the result of signature validation\n */\n public validateSignature(): ReturnType {\n const signature = new Signature(\n this.activeConfig,\n this.hashedPrivateKey,\n this.signatureType,\n this.simpleSignature,\n this.complexSignature,\n this.token,\n this.cookieValue,\n this.requested,\n this.specialParameters,\n this.options.debug\n );\n\n return signature.validateSignature();\n }\n\n /**\n * Convenience method that handles the complete redirect flow for non-promoted users.\n * Automatically manages cookies and redirects.\n * \n * @returns {string} Success message after redirect\n * @throws {Error} If unable to determine redirect URL\n * \n * @example\n * if (!result.promoted) {\n * return gatekeeper.redirectIfNotPromoted();\n * }\n */\n public redirectIfNotPromoted(): string {\n try {\n const redirectUrl = this.getRedirectUrl();\n\n if (!redirectUrl) {\n throw new Error(\"Unable to determine redirect URL\");\n }\n\n return this.REQUEST.redirect(redirectUrl);\n } catch (error: any) {\n logger(this.options.debug, \"error\", `Failed to redirect: ${error}`);\n return `Redirect failed: ${error.message}`;\n }\n }\n\n /**\n * Redirects promoted users from waiting room to target site with fresh CrowdHandler parameters.\n * Used when waitingRoom option is true and user is promoted.\n * \n * @returns {string} Success message after redirect\n * @throws {Error} If unable to determine redirect URL\n * \n * @example\n * if (result.promoted && config.waitingRoom) {\n * return gatekeeper.redirectIfPromoted();\n * }\n */\n public redirectIfPromoted(): string {\n try {\n // Get target URL from either this.targetURL or API response\n let destinationUrl = this.targetURL;\n \n // If no targetURL and we have session status with urlRedirect, use that\n if (!destinationUrl && this.sessionStatus?.result?.urlRedirect) {\n destinationUrl = encodeURIComponent(this.sessionStatus.result.urlRedirect);\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Using urlRedirect from API: ${this.sessionStatus.result.urlRedirect}`\n );\n }\n\n if (!destinationUrl) {\n throw new Error(\"Unable to determine destination URL for promoted redirect\");\n }\n\n // Decode once to get the actual URL\n const decodedURL = decodeURIComponent(destinationUrl);\n\n // Parse URL to handle parameters properly\n const urlParts = decodedURL.split('?');\n const baseUrl = urlParts[0];\n const queryString = urlParts[1] || '';\n\n // Parse existing parameters while preserving their values\n const existingParams: string[] = [];\n if (queryString) {\n const params = queryString.split('&');\n for (const param of params) {\n const [key] = param.split('=');\n // Skip CrowdHandler parameters\n if (!['ch-id', 'ch-id-signature', 'ch-requested', 'ch-code', 'ch-fresh'].includes(key)) {\n existingParams.push(param);\n }\n }\n }\n\n // Build new CrowdHandler parameters\n const chParams = [\n `ch-id=${encodeURIComponent(this.token || '')}`,\n `ch-id-signature=${encodeURIComponent(this.sessionStatus?.result?.hash || '')}`,\n `ch-requested=${encodeURIComponent(this.sessionStatus?.result?.requested || this.requested || this.specialParameters.chRequested || '')}`,\n `ch-code=${encodeURIComponent(this.specialParameters.chCode || '')}`,\n `ch-fresh=true`\n ];\n\n // Construct final URL\n const allParams = existingParams.concat(chParams);\n const finalUrl = baseUrl + (allParams.length > 0 ? '?' + allParams.join('&') : '');\n logger(\n this.options.debug,\n \"info\",\n `[WaitingRoom] Redirecting promoted user to: ${finalUrl}`\n );\n\n return this.REQUEST.redirect(finalUrl);\n } catch (error: any) {\n logger(this.options.debug, \"error\", `Failed to redirect promoted user: ${error}`);\n return `Redirect failed: ${error.message}`;\n }\n }\n\n /**\n * Redirects the request to the decoded target URL.\n *\n * @param targetURL The target URL to redirect to.\n * @throws {Error} If decoding or redirecting fails.\n */\n /**\n * Removes CrowdHandler tracking parameters from URLs. Use when result.stripParams is true\n * to keep URLs clean.\n * \n * @param {string} targetURL - The encoded URL to clean and redirect to (from result.targetURL)\n * @throws {Error} If the decoded URL is not a valid HTTP(S) URL\n * \n * @example\n * if (result.stripParams) {\n * return gatekeeper.redirectToCleanUrl(result.targetURL);\n * }\n */\n public redirectToCleanUrl(targetURL: string): void {\n try {\n const decodedUrl = decodeURIComponent(targetURL);\n\n // If decodedUrl is not a valid URL, throw an error.\n if (!/^http[s]?:\\/\\/.*/.test(decodedUrl)) {\n throw new Error(\"Decoded URL is not a valid URL\");\n }\n\n this.REQUEST.redirect(decodedUrl);\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to redirect to clean URL: ${error}`\n );\n throw error;\n }\n }\n\n /**\n * Generates a redirect URL based on multiple fallback conditions.\n *\n * @throws {Error} If targetURL, token, or publicKey is missing or invalid.\n * @returns The generated redirect URL.\n */\n public getRedirectUrl(): string {\n try {\n const slug =\n this.sessionStatus?.result?.slug ||\n this.activeConfig?.slug ||\n this.options.fallbackSlug ||\n \"\";\n\n logger(this.options.debug, \"info\", `Generating redirect URL with slug: ${slug}`);\n logger(this.options.debug, \"info\", `Target URL: ${this.targetURL}`);\n logger(this.options.debug, \"info\", `Token: ${this.token}`);\n logger(this.options.debug, \"info\", `Public Key: ${this.publicKey}`);\n\n const redirectUrl = `${this.WAIT_URL}/${slug}?url=${this.targetURL}&ch-code=&ch-id=${this.token}&ch-public-key=${this.publicKey}`;\n\n logger(this.options.debug, \"info\", `Generated redirect URL: ${redirectUrl}`);\n\n return redirectUrl;\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to generate redirect URL: ${error}`\n );\n throw error;\n }\n }\n\n /**\n * Generates token and signature objects for cookies.\n *\n * @throws {Error} If token generation fails.\n */\n private generateCookieObjects(): void {\n try {\n const tokenDatestamp = new Date().getTime();\n let signatureGenerated: string = \"\";\n\n // Prioritise API response data over parameter data.\n signatureGenerated = this.requested || this.specialParameters.chRequested;\n\n const cookieObject = new GenerateCookieObject({\n tokenDatestamp,\n tokenDatestampSignature: generateSignature(\n `${this.hashedPrivateKey}${tokenDatestamp}`\n ),\n tokenSignature: this.simpleSignature[0],\n tokenSignatureGenerated: signatureGenerated,\n tokenSignatures: this.complexSignature,\n tokenValue: this.token,\n });\n\n this.cookieSignatureObject = cookieObject.signatureObject();\n this.cookieTokenObject = cookieObject.tokenObject();\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to generate cookie objects: ${error}`\n );\n throw error;\n }\n }\n\n // //TODO: Convert to an independent class for full local storage functionality\n // /**\n // * Updates the token in the local storage object.\n // * If no local storage object exists, creates a new one.\n // * @param token - The new token to update in local storage.\n // */\n public updateLocalStorageToken(token: string): void {\n try {\n if (this.localStorageValue && this.storageKey) {\n // Update the existing LocalStorageObject token field.\n this.localStorageValue.token[this.storageKey] = token;\n } else if (this.storageKey) {\n // Create a new LocalStorageObject if it doesn't exist.\n this.localStorageValue = {\n countdown: {},\n positions: {},\n token: { [this.storageKey]: token },\n };\n }\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to update local storage token: ${error}`\n );\n }\n }\n\n /**\n * Retrieves and processes cookies from request or override.\n */\n private getCookie(): void {\n try {\n // Get cookies from request or override.\n const cookies =\n this.cookies.length === 0 ? this.REQUEST.getCookies() : this.cookies;\n\n // If no cookies, there is no further processing needed.\n if (!cookies) {\n logger(this.options.debug, \"info\", \"No cookies found.\");\n return;\n }\n\n // Split the cookies string into individual cookie strings.\n const cookieArray = cookies.split(\";\");\n\n for (const cookieStr of cookieArray) {\n const [cookieName, ...cookieValueParts] = cookieStr.trim().split(\"=\");\n const cookieValue = cookieValueParts.join(\"=\");\n\n // If this is the cookie we're interested in, process it.\n if (cookieName === this.STORAGE_NAME) {\n if (this.options.mode === \"hybrid\") {\n let decodedCookie = decodeURIComponent(cookieValue);\n let processedCookie: z.infer | undefined =\n JSON.parse(decodedCookie);\n this.cookieValue = processedCookie;\n } else {\n this.simpleCookieValue = cookieValue;\n }\n }\n }\n } catch (error: any) {\n logger(\n this.options.debug,\n \"error\",\n `Failed to get or process cookies: ${error}`\n );\n }\n }\n\n //TODO: Improve this method alongside refactor of validateRequestHybridMode\n public generateCookie(tokens: any[], deployment?: string) {\n return {\n integration: \"JSDK\",\n tokens: tokens,\n deployment: deployment || \"\",\n };\n }\n\n /**\n * Detects if a domain pattern contains a wildcard and extracts the root domain for cookie setting\n * @param domainPattern - The domain pattern from room config (e.g., \"https://*.example.com\")\n * @returns Object with isWildcard flag and optional rootDomain for cookie\n */\n private detectWildcardAndRoot(domainPattern: string): { isWildcard: boolean; rootDomain?: string } {\n // Check if there's a wildcard after https://\n const match = domainPattern.match(/^https:\\/\\/[^a-z0-9]*\\*[^a-z0-9]*([a-z0-9].*)$/i);\n\n if (!match) {\n return { isWildcard: false };\n }\n\n // match[1] is everything from first alphanumeric onward\n const domainPart = match[1]; // e.g., \"example.com\" or \"example.*\"\n\n // Check if there's a wildcard at the end - can't use wildcard cookies for these\n if (domainPart.includes('*')) {\n logger(this.options.debug, \"info\", \"Domain has trailing wildcard, cannot use root domain cookie\");\n return { isWildcard: false };\n }\n\n // Extract root domain (last two parts for cookie domain)\n const parts = domainPart.split('.');\n const rootDomain = parts.length >= 2\n ? `.${parts.slice(-2).join('.')}`\n : `.${domainPart}`;\n\n return {\n isWildcard: true,\n rootDomain: rootDomain\n };\n }\n\n /**\n * Sets the CrowdHandler session cookie. Always call this when result.setCookie is true\n * to maintain the user's queue position.\n * \n * @param {string} value - The cookie value to set (from result.cookieValue)\n * @param {string} domain - Optional domain pattern to determine cookie domain scope\n * @returns {boolean} True if the cookie was successfully set, false otherwise\n * \n * @example\n * if (result.setCookie) {\n * gatekeeper.setCookie(result.cookieValue, result.domain);\n * }\n */\n public setCookie(value: string, domain?: string): boolean {\n try {\n // Determine cookie domain if domain pattern is provided\n let cookieDomain: string | undefined;\n if (domain) {\n const { isWildcard, rootDomain } = this.detectWildcardAndRoot(domain);\n if (isWildcard && rootDomain) {\n cookieDomain = rootDomain;\n logger(this.options.debug, \"info\", `Setting cookie with domain: ${cookieDomain}`);\n }\n }\n \n // Set the cookie with the provided value and options\n this.REQUEST.setCookie(value, this.STORAGE_NAME, cookieDomain);\n return true;\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n return false;\n }\n }\n\n /**\n * Set a local storage item.\n *\n * @param options - Optional. An object containing the storage name and the local storage value.\n *\n * @throws If an error occurs while setting the local storage item, an Error is thrown and caught, logged with the logger,\n * and the function returns false.\n *\n * @returns True if the local storage item was successfully set, false otherwise.\n */\n public setLocalStorage(\n options?: z.infer\n ): boolean {\n try {\n // determine the name to use\n const nameToUse = options?.storageName || this.STORAGE_NAME;\n\n // determine the value to use\n const valueToUse =\n options?.localStorageValue || JSON.stringify(this.localStorageValue);\n\n // set the local storage item\n this.REQUEST.setLocalStorageItem(nameToUse, valueToUse);\n\n return true;\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n return false;\n }\n }\n\n /**\n * Get a local storage item.\n *\n * @throws If an error occurs while getting or parsing the local storage item,\n * an Error is thrown and caught, logged with the logger, and the function returns null.\n *\n * @returns The value from local storage parsed as a LocalStorageObject, or null if an error occurs or if the item does not exist.\n */\n public getLocalStorage(): z.infer | null {\n try {\n const crowdhandler = localStorage.getItem(this.STORAGE_NAME);\n if (crowdhandler) {\n const localStorageValue = LocalStorageObject.parse(\n JSON.parse(crowdhandler)\n );\n this.localStorageValue = localStorageValue; // still assign it to the class property if you need\n return localStorageValue;\n }\n\n logger(\n this.options.debug,\n \"Info: No data found in local storage for key:\",\n this.STORAGE_NAME\n );\n return null;\n } catch (error: any) {\n logger(this.options.debug, \"Error reading from local storage:\", error);\n return null;\n }\n }\n\n /**\n * Records performance metrics to help CrowdHandler optimize queue flow and capacity.\n * \n * @param {RecordPerformanceOptions} options - Optional performance recording options:\n * - `sample` {number} - Sample rate (0-1). Default: 0.2 (20% of requests)\n * - `statusCode` {number} - HTTP status code. Default: 200\n * - `overrideElapsed` {number} - Override elapsed time in ms\n * - `responseID` {string} - Specific response ID to record\n * \n * @example\n * // Simple usage (recommended)\n * await gatekeeper.recordPerformance();\n * \n * @example\n * // With custom options\n * await gatekeeper.recordPerformance({\n * sample: 0.2, // Sample 20% of requests\n * statusCode: 200\n * });\n */\n public async recordPerformance(\n options?: z.infer\n ) {\n try {\n // Parse and validate options if provided, else use default values\n const validatedOptions = options\n ? RecordPerformanceOptions.parse(options)\n : {\n statusCode: 200, // default HTTP response code\n sample: 0.2, // default sample rate\n overrideElapsed: undefined, // no elapsed time override\n responseID: undefined, // no responseID\n };\n\n const { statusCode, sample, overrideElapsed, responseID } =\n validatedOptions;\n\n // Generate a random number for sampling\n const lottery = Math.random();\n const currentResponseID = responseID || this.responseID;\n\n // If there's no responseID or if the random number is higher than the sample rate, return early\n if (!currentResponseID || lottery >= sample) {\n return;\n }\n\n const elapsed =\n overrideElapsed !== undefined ? overrideElapsed : this.timer.elapsed();\n\n // Asynchronously send the performance data to CrowdHandler, no need to await the promise\n this.PublicClient.responses().put(currentResponseID, {\n httpCode: statusCode,\n time: elapsed,\n });\n } catch (error: any) {\n logger(this.options.debug, \"Error recording performance:\", error);\n }\n }\n\n /**\n * Extracts the creation date from a token's base60 encoded timestamp\n */\n private tokenCreationDate(token: string): number {\n const base60 = \"0123456789ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz\";\n const tok_meta = token.slice(4, 10);\n \n const year = base60.indexOf(tok_meta[0]);\n const month = base60.indexOf(tok_meta[1]) - 1;\n const day = base60.indexOf(tok_meta[2]);\n const hour = base60.indexOf(tok_meta[3]);\n const minute = base60.indexOf(tok_meta[4]);\n const second = base60.indexOf(tok_meta[5]);\n \n return Date.UTC(2000 + year, month, day, hour, minute, second);\n }\n\n /**\n * Checks if a token is older than 12 hours\n */\n private isOldToken(token?: string): boolean {\n logger(this.options.debug, \"info\", `[Lite Validator] Checking token age for: ${token}`);\n \n if (!token || !token.startsWith(\"tok\")) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Token not in a format that we can timestamp.\");\n return false;\n }\n\n // Only handle tok0 format tokens\n if (!token.startsWith(\"tok0\")) {\n logger(this.options.debug, \"info\", `[Lite Validator] Token format '${token.substring(0,4)}' not supported for age checking`);\n return false;\n }\n\n const dateStampUTC = new Date().getTime();\n const tokenCreated = this.tokenCreationDate(token);\n const tokenCreatedDate = new Date(tokenCreated);\n const differenceInHours = (dateStampUTC - tokenCreated) / (1000 * 60 * 60);\n\n logger(this.options.debug, \"info\", `[Lite Validator] Token created: ${tokenCreatedDate.toISOString()}, Age: ${differenceInHours.toFixed(2)} hours`);\n\n if (differenceInHours > 12) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Token is older than 12 hours - will trigger redirect\");\n return true;\n }\n\n logger(this.options.debug, \"info\", \"[Lite Validator] Token is fresh (< 12 hours old)\");\n return false;\n }\n\n /**\n * Checks if the current request matches any configured room patterns\n * Rooms are pre-ordered by precedence (regex → contains → all)\n * First match wins\n */\n private matchRoomConfig(): { status: boolean; room?: any } {\n const roomMeta = {\n domain: null,\n patternType: null,\n queueActivatesOn: null,\n slug: null,\n status: false,\n timeout: null,\n };\n\n if (!this.options.roomsConfig || this.options.roomsConfig.length === 0) {\n logger(this.options.debug, \"info\", \"[Lite Validator] No rooms config provided or empty array\");\n return roomMeta;\n }\n\n const host = this.host;\n // Note: this.path already includes query string from all REQUEST handlers\n const path = this.path;\n const fullDomain = `https://${host}`;\n \n logger(this.options.debug, \"info\", `[Lite Validator] Checking rooms for domain: ${fullDomain}, path: ${path}`);\n logger(this.options.debug, \"info\", `[Lite Validator] Total rooms in config: ${this.options.roomsConfig.length}`);\n \n // Filter rooms by domain\n const filteredResults = this.options.roomsConfig.filter((item: z.infer) => {\n const matches = item.domain === fullDomain;\n if (matches) {\n logger(this.options.debug, \"info\", `[Lite Validator] Domain match found: ${item.slug}`);\n }\n return matches;\n });\n\n logger(this.options.debug, \"info\", `[Lite Validator] Rooms matching domain: ${filteredResults.length}`);\n\n // Find first match - rooms are pre-ordered by precedence\n for (const item of filteredResults) {\n logger(this.options.debug, \"info\", `[Lite Validator] Testing room '${item.slug}' with pattern '${item.urlPattern}' (type: ${item.patternType})`);\n \n if (this.patternCheck(item, path) === true) {\n logger(this.options.debug, \"info\", `[Lite Validator] MATCH FOUND: Room '${item.slug}' matches current path`);\n \n // First match is the best match\n roomMeta.domain = item.domain;\n roomMeta.patternType = item.patternType;\n roomMeta.queueActivatesOn = item.queueActivatesOn;\n roomMeta.slug = item.slug;\n roomMeta.status = true;\n roomMeta.timeout = item.timeout;\n break; // Stop at first match\n }\n }\n\n if (!roomMeta.status) {\n logger(this.options.debug, \"info\", \"[Lite Validator] No matching room found for current path\");\n }\n\n return roomMeta;\n }\n\n /**\n * Pattern checking logic - matches reference implementation\n */\n private patternCheck(item: any, path: string): boolean {\n switch (item.patternType) {\n case \"regex\":\n if (!item.urlPattern) return false;\n const regex = new RegExp(item.urlPattern);\n return regex.test(path);\n\n case \"contains\":\n if (!item.urlPattern) return false;\n return path.includes(item.urlPattern);\n\n case \"all\":\n return true;\n\n default:\n return false;\n }\n }\n\n /**\n * Determines if the request should be redirected to the lite validator\n */\n private shouldRedirectToLiteValidator(): { redirect: boolean; url?: string; domain?: string } {\n logger(this.options.debug, \"info\", \"[Lite Validator] === Starting lite validator check ===\");\n logger(this.options.debug, \"info\", `[Lite Validator] Lite validator enabled: ${this.options.liteValidator}`);\n logger(this.options.debug, \"info\", `[Lite Validator] Rooms config provided: ${!!this.options.roomsConfig}`);\n logger(this.options.debug, \"info\", `[Lite Validator] Current token: ${this.token || 'NO TOKEN'}`);\n \n if (!this.options.liteValidator || !this.options.roomsConfig) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Lite validator disabled or no rooms config - skipping\");\n return { redirect: false };\n }\n\n // Check if current path matches any protected room\n const roomMatch = this.matchRoomConfig();\n if (!roomMatch.status) {\n logger(this.options.debug, \"info\", \"[Lite Validator] No room match - skipping lite validator\");\n return { redirect: false };\n }\n\n logger(this.options.debug, \"info\", `[Lite Validator] Room matched: ${(roomMatch as any).slug || 'match found'}`);\n\n // Check if token is missing or old\n const tokenMissing = !this.token;\n const tokenIsOld = this.token ? this.isOldToken(this.token) : false;\n \n logger(this.options.debug, \"info\", `[Lite Validator] Token missing: ${tokenMissing}, Token old: ${tokenIsOld}`);\n \n if (tokenMissing || tokenIsOld) {\n const redirectUrl = this.buildLiteValidatorUrl();\n logger(this.options.debug, \"info\", `[Lite Validator] REDIRECT REQUIRED to: ${redirectUrl}`);\n return { redirect: true, url: redirectUrl, domain: (roomMatch as any).domain };\n }\n\n logger(this.options.debug, \"info\", \"[Lite Validator] Token is valid - no redirect needed\");\n return { redirect: false, domain: (roomMatch as any).domain };\n }\n\n /**\n * Builds the lite validator redirect URL\n */\n private buildLiteValidatorUrl(): string {\n const apiUrl = (this.PublicClient as any).apiUrl || 'https://api.crowdhandler.com';\n const baseUrl = `${apiUrl}/v1/redirect/requests`;\n // targetURL is already encoded by ProcessURL\n const targetUrl = this.targetURL || '';\n const code = this.specialParameters.chCode || '';\n \n const params = `ch-public-key=${this.publicKey}&url=${targetUrl}&ch-code=${code}`;\n \n return this.token \n ? `${baseUrl}/${this.token}?${params}`\n : `${baseUrl}?${params}`;\n }\n\n /**\n * The primary method for validating requests against CrowdHandler's queue system.\n * Determines whether a user should be granted access to your protected resource or sent to a waiting room.\n * \n * @param {object} params - Optional parameters to customize the validation\n * @param {Record} params.custom - Custom parameters to pass to the CrowdHandler API\n * @returns {Promise} Instructions on how to handle the request:\n * - `promoted` {boolean} - true = grant access, false = send to waiting room\n * - `setCookie` {boolean} - true = update the user's session cookie\n * - `cookieValue` {string} - The session token to store in the cookie\n * - `stripParams` {boolean} - true = remove CrowdHandler URL parameters\n * - `targetURL` {string} - Where to redirect (clean URL or waiting room)\n * - `slug` {string} - The waiting room slug (when not promoted)\n * - `responseID` {string} - Response ID for performance tracking (when promoted)\n * - `deployment` {string} - Deployment identifier from the API\n * - `token` {string} - The session token\n * - `hash` {string | null} - Signature hash for validation (when available)\n * - `liteValidatorRedirect` {boolean} - Whether to redirect for lite validation\n * - `liteValidatorUrl` {string} - URL for lite validator redirect\n * - `error` {object | undefined} - Error information if validation encountered an issue:\n * - `message` {string} - The error message from the API\n * - `statusCode` {number | undefined} - HTTP status code (e.g., 401, 500)\n * - `code` {string | undefined} - Error code for programmatic handling\n * \n * @example\n * const result = await gatekeeper.validateRequest();\n * if (!result.promoted) {\n * return gatekeeper.redirectIfNotPromoted();\n * }\n * \n * @example\n * // With custom parameters\n * const result = await gatekeeper.validateRequest({\n * custom: {\n * userId: 'user123',\n * sessionId: 'session456',\n * customField: 'value'\n * }\n * });\n * \n * @example\n * // Handling errors in the result\n * const result = await gatekeeper.validateRequest();\n * if (result.error) {\n * console.error(`API Error ${result.error.statusCode}: ${result.error.message}`);\n * // Note: promoted is still set based on error type\n * // 4xx errors: promoted = false\n * // 5xx errors: promoted based on trustOnFail setting\n * }\n * \n * @throws {CrowdHandlerError} When SDK configuration fails or network errors occur\n */\n public async validateRequest(params?: { custom?: Record }) {\n switch (this.options.mode) {\n case \"hybrid\":\n return await this.validateRequestHybridMode(params?.custom);\n break;\n case \"full\":\n return await this.validateRequestFullMode(params?.custom);\n break;\n case \"clientside\":\n return await this.validateRequestClientSideMode(params?.custom);\n break;\n default:\n \"full\";\n break;\n }\n }\n\n /**\n * Validate request in a client-side mode.\n *\n * This method checks for a CrowdHandler cookie and gets the session status for the request.\n * It works the same as full mode but runs in browser environments.\n *\n * @param {Record} customParams - Optional custom parameters to include in the API request\n * @return {Promise>} Result of the validation process.\n */\n private async validateRequestClientSideMode(customParams?: Record): Promise<\n z.infer\n > {\n // Process URL early to ensure targetURL is set for all scenarios (errors, redirects, etc.)\n this.processURL();\n \n // Initial result object with default values\n let result: z.infer = {\n promoted: false,\n stripParams: false,\n setCookie: false,\n setLocalStorage: false,\n cookieValue: \"\",\n responseID: \"\",\n slug: \"\",\n targetURL: this.targetURL || \"\",\n deployment: \"\",\n hash: null,\n token: \"\",\n requested: \"\",\n };\n\n // Check for test error simulation (for integrator testing)\n if (this.options.testError) {\n logger(this.options.debug, \"info\", `[TEST MODE] Simulating error with status ${this.options.testError.statusCode}`);\n \n const statusCode = this.options.testError.statusCode;\n const errorMessage = this.options.testError.message || `Simulated error with status ${statusCode}`;\n \n // Apply same logic as real errors\n if (statusCode >= 400 && statusCode < 500) {\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n result.error = {\n message: errorMessage,\n statusCode: statusCode,\n code: statusCode === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n \n return result;\n }\n\n try {\n // Log details for debugging\n logger(this.options.debug, \"info\", `IP: ${this.ip}`);\n logger(this.options.debug, \"info\", `Agent: ${this.agent}`);\n logger(this.options.debug, \"info\", `Host: ${this.host}`);\n logger(this.options.debug, \"info\", `Path: ${this.path}`);\n logger(this.options.debug, \"info\", `Lang: ${this.lang}`);\n\n // Skip paths that match the ignore pattern\n if (ignoredPatternsCheck(this.path, this.ignore)) {\n logger(this.options.debug, \"info\", `Ignored path: ${this.path}`);\n result.promoted = true;\n return result;\n }\n\n // URL already processed at the beginning of method\n this.getCookie();\n this.extractToken();\n \n // Lite validator check - EARLY EXIT\n logger(this.options.debug, \"info\", \"[Lite Validator] Performing lite validator check in validateRequestClientSideMode\");\n const liteCheck = this.shouldRedirectToLiteValidator();\n \n // Store domain from lite validator if available\n if (liteCheck.domain) {\n result.domain = liteCheck.domain;\n }\n \n if (liteCheck.redirect) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Lite validator redirect triggered in clientside mode\");\n result.liteValidatorRedirect = true;\n result.liteValidatorUrl = liteCheck.url;\n result.promoted = false;\n return result;\n }\n logger(this.options.debug, \"info\", \"[Lite Validator] Continuing with normal validation\")\n \n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n // Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n // Handle session status errors\n if (sessionStatusType.success) {\n if (this.sessionStatus?.result.status !== 200) {\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n // Processing based on promotion status\n if (this.sessionStatus) {\n const { promoted, slug, token, responseID, deployment, hash, requested, domain } = this.sessionStatus.result;\n\n result.promoted = promoted === 1;\n \n // Pass domain from API response if available\n if (domain) {\n result.domain = domain;\n }\n result.slug = slug || result.slug;\n this.token = token || this.token;\n result.token = token || result.token;\n result.deployment = deployment || result.deployment;\n result.hash = hash || null;\n result.requested = requested || result.requested;\n \n // Always set cookie if we have a token (for both promoted and non-promoted users)\n if (token) {\n result.setCookie = true;\n result.cookieValue = token;\n }\n \n if (promoted === 1) {\n result.responseID = responseID || result.responseID;\n this.responseID = responseID || \"\";\n \n if (this.specialParameters.chRequested) {\n result.stripParams = true;\n }\n }\n }\n\n return result;\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `An error occurred during request validation: ${error}`\n );\n throw error;\n }\n }\n\n /**\n * Validates the request by making full use of CrowdHandler API.\n * It handles the request and sets the necessary response based on the session status and API response.\n * @param {Record} customParams - Optional custom parameters to include in the API request\n * @return {Promise>} - The resulting status after validating the request.\n */\n private async validateRequestFullMode(customParams?: Record): Promise<\n z.infer\n > {\n // Process URL early to ensure targetURL is set for all scenarios (errors, redirects, etc.)\n this.processURL();\n \n // Default result object\n let result: z.infer = {\n promoted: false,\n stripParams: false,\n setCookie: false,\n setLocalStorage: false,\n cookieValue: \"\",\n responseID: \"\",\n slug: \"\",\n targetURL: this.targetURL || \"\",\n deployment: \"\",\n hash: null,\n token: \"\",\n requested: \"\",\n };\n\n // Check for test error simulation (for integrator testing)\n if (this.options.testError) {\n logger(this.options.debug, \"info\", `[TEST MODE] Simulating error with status ${this.options.testError.statusCode}`);\n \n const statusCode = this.options.testError.statusCode;\n const errorMessage = this.options.testError.message || `Simulated error with status ${statusCode}`;\n \n // Apply same logic as real errors\n if (statusCode >= 400 && statusCode < 500) {\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n result.error = {\n message: errorMessage,\n statusCode: statusCode,\n code: statusCode === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n \n return result;\n }\n\n try {\n // Log details for debugging\n logger(this.options.debug, \"info\", `IP: ${this.ip}`);\n logger(this.options.debug, \"info\", `Agent: ${this.agent}`);\n logger(this.options.debug, \"info\", `Host: ${this.host}`);\n logger(this.options.debug, \"info\", `Path: ${this.path}`);\n logger(this.options.debug, \"info\", `Lang: ${this.lang}`);\n\n // Skip paths that match the ignore pattern\n if (ignoredPatternsCheck(this.path, this.ignore)) {\n logger(this.options.debug, \"info\", `Ignored path: ${this.path}`);\n result.promoted = true;\n return result;\n }\n\n // URL already processed at the beginning of method\n this.getCookie();\n this.extractToken();\n \n // Lite validator check - EARLY EXIT\n logger(this.options.debug, \"info\", \"[Lite Validator] Performing lite validator check in validateRequestClientSideMode\");\n const liteCheck = this.shouldRedirectToLiteValidator();\n \n // Store domain from lite validator if available\n if (liteCheck.domain) {\n result.domain = liteCheck.domain;\n }\n \n if (liteCheck.redirect) {\n logger(this.options.debug, \"info\", \"[Lite Validator] Lite validator redirect triggered in clientside mode\");\n result.liteValidatorRedirect = true;\n result.liteValidatorUrl = liteCheck.url;\n result.promoted = false;\n return result;\n }\n logger(this.options.debug, \"info\", \"[Lite Validator] Continuing with normal validation\")\n \n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n // Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n // Handle session status errors\n if (sessionStatusType.success) {\n if (this.sessionStatus?.result.status !== 200) {\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n // Processing based on promotion status\n if (this.sessionStatus) {\n const { promoted, slug, token, responseID, deployment, hash, requested, domain } = this.sessionStatus.result;\n\n result.promoted = promoted === 1;\n \n // Pass domain from API response if available\n if (domain) {\n result.domain = domain;\n }\n result.slug = slug || result.slug;\n this.token = token || this.token;\n result.token = token || result.token;\n result.deployment = deployment || result.deployment;\n result.hash = hash || null;\n result.requested = requested || result.requested;\n \n // Always set cookie if we have a token (for both promoted and non-promoted users)\n if (token) {\n result.setCookie = true;\n result.cookieValue = token;\n }\n \n if (promoted === 1) {\n result.responseID = responseID || result.responseID;\n this.responseID = responseID || \"\";\n \n if (this.specialParameters.chRequested) {\n result.stripParams = true;\n }\n }\n }\n\n return result;\n } catch (error) {\n logger(\n this.options.debug,\n \"error\",\n `An error occurred during request validation: ${error}`\n );\n throw error;\n }\n }\n\n //TODO: This method is a complex beast and needs refactoring\n /**\n * Validate request using signature and/or Crowdhandler API when required\n * @param {Record} customParams - Optional custom parameters to include in the API request\n */\n private async validateRequestHybridMode(customParams?: Record) {\n let signatures = [];\n let tokens = [];\n let freshToken;\n let freshSignature;\n let processedCookie;\n\n // Process URL early to ensure targetURL is set for all scenarios (errors, redirects, etc.)\n this.processURL();\n\n let result: z.infer = {\n promoted: false,\n stripParams: false,\n setCookie: false,\n setLocalStorage: false,\n cookieValue: \"\",\n responseID: \"\",\n slug: \"\",\n targetURL: this.targetURL || \"\",\n deployment: \"\",\n hash: null,\n token: \"\",\n requested: \"\",\n };\n\n // Check for test error simulation (for integrator testing)\n if (this.options.testError) {\n logger(this.options.debug, \"info\", `[TEST MODE] Simulating error with status ${this.options.testError.statusCode}`);\n \n const statusCode = this.options.testError.statusCode;\n const errorMessage = this.options.testError.message || `Simulated error with status ${statusCode}`;\n \n // Apply same logic as real errors\n if (statusCode >= 400 && statusCode < 500) {\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n result.error = {\n message: errorMessage,\n statusCode: statusCode,\n code: statusCode === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n \n return result;\n }\n\n logger(this.options.debug, \"info\", \"IP: \" + this.ip);\n logger(this.options.debug, \"info\", \"Agent: \" + this.agent);\n logger(this.options.debug, \"info\", \"Host: \" + this.host);\n logger(this.options.debug, \"info\", \"Path: \" + this.path);\n logger(this.options.debug, \"info\", \"Lang: \" + this.lang);\n\n //Bypass paths that match the ignore patterns\n if (ignoredPatternsCheck(this.path, this.ignore)) {\n logger(this.options.debug, \"info\", \"Ignored path: \" + this.path);\n result.promoted = true;\n return result;\n }\n\n // URL already processed at the beginning of method\n this.getCookie();\n this.extractToken();\n \n // Lite validator check - EARLY EXIT\n const liteCheck = this.shouldRedirectToLiteValidator();\n \n // Store domain from lite validator if available\n if (liteCheck.domain) {\n result.domain = liteCheck.domain;\n }\n \n if (liteCheck.redirect) {\n result.liteValidatorRedirect = true;\n result.liteValidatorUrl = liteCheck.url;\n result.promoted = false;\n return result;\n }\n\n await this.getConfig();\n\n //Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let configStatusType = HttpErrorWrapper.safeParse(this.activeConfig);\n\n if (configStatusType.success) {\n if (this.activeConfig && this.activeConfig.result.status !== 200) {\n //Can't process the request but we can trust it if trustOnFail is set to true\n const status = this.activeConfig?.result?.status || 0;\n const errorMessage = this.activeConfig?.result?.error || `API request failed with status ${status}`;\n \n // Config errors should respect trustOnFail (it's a system issue, not user error)\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n //Working with a real config file from here\n if (this.activeConfig.status === false) {\n logger(\n this.options.debug,\n \"info\",\n \"Config succesfully fetched but no check required.\"\n );\n result.promoted = true;\n return result;\n }\n\n //Attempt to retrieve crowdhandler cookie\n this.getCookie();\n\n logger(this.options.debug, \"info\", \"Cookie: \" + this.cookieValue);\n \n // Extract deployment from cookie if available\n if (this.cookieValue && this.cookieValue.deployment) {\n result.deployment = this.cookieValue.deployment;\n }\n\n this.getSignature({\n chIDSignature: this.specialParameters.chIDSignature,\n crowdhandlerCookieValue: this.cookieValue,\n });\n this.extractToken();\n\n logger(this.options.debug, \"info\", \"Signature: \" + this.simpleSignature);\n logger(\n this.options.debug,\n \"info\",\n \"Complex Signature: \" + this.complexSignature\n );\n logger(this.options.debug, \"info\", \"Token: \" + this.token);\n\n //If we don't have a signature or token force a check.\n if (\n (this.simpleSignature.length === 0 ||\n this.complexSignature.length === 0) &&\n !this.token\n ) {\n logger(\n this.options.debug,\n \"info\",\n \"Missing signature and/or token, doing a check.\"\n );\n\n try {\n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n //Handle a failed session status check\n //Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n if (sessionStatusType.success) {\n if (this.sessionStatus && this.sessionStatus.result.status !== 200) {\n //Can't process the request but we can trust it if trustOnFail is set to true\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n let token: string;\n \n // Pass domain from API response if available\n if (this.sessionStatus && this.sessionStatus.result.domain) {\n result.domain = this.sessionStatus.result.domain;\n }\n \n if (this.sessionStatus && this.sessionStatus.result.promoted === 0) {\n if (this.sessionStatus.result.token) {\n token = this.sessionStatus.result.token;\n result.token = token;\n this.extractToken({ chID: token });\n }\n\n result.promoted = false;\n return result;\n } else if (\n this.sessionStatus &&\n this.sessionStatus.result.promoted === 1\n ) {\n result.promoted = true;\n result.setCookie = true;\n\n let hash: string;\n let requested: string;\n\n if (this.sessionStatus.result.requested) {\n this.requested = this.sessionStatus.result.requested;\n }\n\n if (this.sessionStatus.result.deployment) {\n this.deployment = this.sessionStatus.result.deployment;\n result.deployment = this.deployment;\n }\n\n if (this.sessionStatus.result.hash) {\n hash = this.sessionStatus.result.hash;\n result.hash = hash;\n this.getSignature({ chIDSignature: hash });\n }\n\n if (this.sessionStatus.result.token) {\n token = this.sessionStatus.result.token;\n result.token = token;\n this.extractToken({ chID: token });\n }\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n }\n }\n\n logger(\n this.options.debug,\n \"info\",\n \"Signature and token found. Validating...\"\n );\n\n let validationResult = this.validateSignature();\n\n //If the signature is not valid we need to check the user\n if (validationResult.success === false) {\n logger(\n this.options.debug,\n \"info\",\n \"Signature not valid. Checking against API.\"\n );\n\n try {\n // Merge ch-code from query string with custom params if present\n const mergedParams = {\n ...customParams,\n ...(this.specialParameters.chCode && { code: this.specialParameters.chCode })\n };\n await this.getSessionStatus(mergedParams);\n\n //Handle a failed session status check\n //Use zod safeparse to check that we're working with the SessionStatusErrorWrapper type\n let sessionStatusType = HttpErrorWrapper.safeParse(this.sessionStatus);\n\n if (sessionStatusType.success) {\n if (this.sessionStatus && this.sessionStatus.result.status !== 200) {\n //Can't process the request but we can trust it if trustOnFail is set to true\n const status = this.sessionStatus?.result?.status || 0;\n const errorMessage = this.sessionStatus?.result?.error || `API request failed with status ${status}`;\n \n // Determine promoted based on error type\n if (status && status >= 400 && status < 500) {\n // Client errors (4xx) - never promote\n result.promoted = false;\n if (this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n } else {\n // Server errors (5xx) or other errors - respect trustOnFail\n result.promoted = this.options.trustOnFail;\n if (!this.options.trustOnFail && this.options.fallbackSlug) {\n result.slug = this.options.fallbackSlug;\n }\n }\n \n // Always populate error information\n result.error = {\n message: errorMessage,\n statusCode: status || undefined,\n code: status === 429 ? 'RATE_LIMITED' : 'API_INVALID_RESPONSE'\n };\n\n return result;\n }\n }\n\n // Pass domain from API response if available\n if (this.sessionStatus && this.sessionStatus.result.domain) {\n result.domain = this.sessionStatus.result.domain;\n }\n \n if (this.sessionStatus && this.sessionStatus.result.promoted === 0) {\n result.promoted = false;\n return result;\n } else if (\n this.sessionStatus &&\n this.sessionStatus.result.promoted === 1\n ) {\n let hash: string;\n let requested: string;\n let token: string;\n\n if (this.sessionStatus.result.requested) {\n this.requested = this.sessionStatus.result.requested;\n }\n\n if (this.sessionStatus.result.deployment) {\n this.deployment = this.sessionStatus.result.deployment;\n result.deployment = this.deployment;\n }\n\n if (this.sessionStatus.result.hash) {\n hash = this.sessionStatus.result.hash;\n result.hash = hash;\n this.getSignature({ chIDSignature: hash });\n }\n\n if (this.sessionStatus.result.token) {\n token = this.sessionStatus.result.token;\n result.token = token;\n this.extractToken({ chID: token });\n }\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n }\n }\n\n //part 2 here\n\n //We've established that we have a valid signature at this point\n logger(this.options.debug, \"info\", \"Signature is valid.\");\n\n try {\n // Only parse cookieValue if it exists\n if (this.cookieValue) {\n this.cookieValue = CookieObject.parse(this.cookieValue);\n\n if (this.cookieValue) {\n for (const item of this.cookieValue.tokens) {\n tokens.push(item);\n }\n }\n }\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n }\n\n //Determine if we're working with a new token or a previously seen one\n if (\n (Array.isArray(tokens) && tokens.length === 0) ||\n (Array.isArray(tokens) && tokens[tokens.length - 1].token !== this.token)\n ) {\n freshToken = true;\n } else {\n freshToken = false;\n\n //We want to work with the most recent array of signatures\n for (const item of tokens[tokens.length - 1].signatures) {\n signatures.push(item);\n }\n }\n\n this.generateCookieObjects();\n\n if (\n this.signatureType === \"simple\" &&\n signatures.some((item) => item.sig === this.simpleSignature) === false\n ) {\n signatures.push(this.cookieSignatureObject);\n freshSignature = true;\n }\n\n if (freshToken) {\n //Reset the array. It's important we don't allow the PMUSER_CREDENTIALS variable exceed the byte limit.\n tokens = [];\n\n if (this.cookieTokenObject) {\n this.cookieTokenObject.signatures = signatures;\n }\n tokens.push(this.cookieTokenObject);\n } else {\n tokens[tokens.length - 1].signatures = signatures;\n tokens[tokens.length - 1].touched = this.cookieTokenObject?.touched;\n tokens[tokens.length - 1].touchedSig = this.cookieTokenObject?.touchedSig;\n }\n try {\n this.cookieValue = this.generateCookie(tokens, this.deployment);\n } catch (error: any) {\n logger(this.options.debug, \"error\", error);\n // Handle the error as appropriate for your application...\n }\n result.cookieValue = JSON.stringify(this.cookieValue);\n\n if (freshSignature && this.specialParameters.chRequested) {\n result.stripParams = true;\n }\n\n //If we made it all the way here, we can assume the user is promoted and a cookie should be set.\n result.promoted = true;\n result.setCookie = true;\n result.token = this.token;\n\n return result;\n }\n}\n","import { z } from \"zod\";\nimport { Client } from \"./client/client\";\nimport { RequestContext } from \"./request/requestContext\";\nimport { Gatekeeper } from \"./gatekeeper/gatekeeper\";\nimport { GatekeeperOptions, Mode, Modes } from \"./common/types\";\nimport { CrowdHandlerError, createError, ErrorCodes } from \"./common/errors\";\n\n/**\n * Configuration options for initializing CrowdHandler\n */\nexport interface InitConfig {\n /** Your CrowdHandler public key (required) */\n publicKey: string;\n \n /** Your CrowdHandler private key (optional - required for private API access) */\n privateKey?: string;\n \n // Context options - provide one of these\n /** Express/Node.js request object */\n request?: any;\n \n /** Express/Node.js response object */\n response?: any;\n \n /** AWS Lambda@Edge event object */\n lambdaEdgeEvent?: any;\n \n /** Additional configuration options */\n options?: {\n /** \n * Validation mode\n * - 'full': Server-side validation (default for server environments)\n * - 'hybrid': Uses signature method to reduce API calls, offloads non-critical processes to browser\n * - 'clientside': Browser-only validation (default for browser)\n * - 'auto': Automatically detect based on environment\n */\n mode?: Mode;\n \n /** API request timeout in milliseconds (default: 5000) */\n timeout?: number;\n \n /** Enable debug logging (default: false) */\n debug?: boolean;\n \n /** Custom API URL (default: https://api.crowdhandler.com) */\n apiUrl?: string;\n \n /** Trust users on API failure (default: true) */\n trustOnFail?: boolean;\n \n /** Fallback room slug if none matches */\n fallbackSlug?: string;\n \n /** Custom cookie name (default: 'crowdhandler') */\n cookieName?: string;\n \n /** Enable lite validator mode */\n liteValidator?: boolean;\n \n /** Room configuration for lite validator - array of room configs */\n roomsConfig?: Array<{\n domain: string;\n slug: string;\n urlPattern?: string;\n patternType?: 'regex' | 'contains' | 'all';\n queueActivatesOn?: number;\n timeout?: number;\n }>;\n \n /** Whether this is a waiting room implementation (default: false) */\n waitingRoom?: boolean;\n \n /** Test error simulation for integrator testing */\n testError?: {\n statusCode: number;\n message?: string;\n };\n };\n}\n\n/**\n * Result when init is called without context (API-only mode)\n */\nexport interface InitResultWithoutGatekeeper {\n /** Unified API client for making CrowdHandler API calls */\n client: Client;\n \n /** Gatekeeper is not available in API-only mode */\n gatekeeper?: never;\n}\n\n/**\n * Result when init is called with context (protection mode)\n */\nexport interface InitResultWithGatekeeper {\n /** Unified API client for making CrowdHandler API calls */\n client: Client;\n \n /** Gatekeeper instance for request validation */\n gatekeeper: Gatekeeper;\n}\n\n/**\n * Result returned from the init() function\n */\nexport type InitResult = InitResultWithoutGatekeeper | InitResultWithGatekeeper;\n\n/**\n * Initialize CrowdHandler with the provided configuration.\n * Returns a client for API access and optionally a gatekeeper for request validation.\n * \n * @param config - Configuration object containing keys and optional context\n * @returns An object containing the API client and optional gatekeeper\n * \n * @example\n * // API-only usage\n * const { client } = crowdhandler.init({ \n * publicKey: 'pk_xyz' \n * });\n * \n * @example\n * // Full protection with Express\n * const { client, gatekeeper } = crowdhandler.init({\n * publicKey: 'pk_xyz',\n * privateKey: 'sk_xyz',\n * request: req,\n * response: res\n * });\n * \n * @example\n * // Browser usage\n * const { client, gatekeeper } = crowdhandler.init({\n * publicKey: 'pk_xyz',\n * options: { mode: 'clientside' }\n * });\n * \n * @example\n * // Lambda@Edge usage\n * const { client, gatekeeper } = crowdhandler.init({\n * publicKey: 'pk_xyz',\n * privateKey: 'sk_xyz',\n * lambdaEdgeEvent: event\n * });\n * \n * @throws {CrowdHandlerError} When configuration is invalid\n */\n// Function overloads for better type inference\nexport function init(config: InitConfig & { request: any; response: any }): InitResultWithGatekeeper;\nexport function init(config: InitConfig & { lambdaEdgeEvent: any }): InitResultWithGatekeeper;\nexport function init(config: InitConfig): InitResult;\n\n// Implementation\nexport function init(config: InitConfig): InitResult {\n // Validate configuration\n if (!config.publicKey) {\n throw new CrowdHandlerError(\n ErrorCodes.INVALID_CONFIG,\n 'publicKey is required',\n 'Provide your public key from the CrowdHandler dashboard: crowdhandler.init({ publicKey: \"YOUR_KEY\" })'\n );\n }\n \n // Create unified client\n const client = new Client({\n publicKey: config.publicKey,\n privateKey: config.privateKey,\n options: config.options\n });\n \n // Check if context was provided\n const hasContext = !!(\n (config.request && config.response) || \n config.lambdaEdgeEvent || \n (typeof window !== 'undefined' && !config.request && !config.response && !config.lambdaEdgeEvent)\n );\n \n // Create gatekeeper if context provided\n let gatekeeper: Gatekeeper | undefined;\n \n if (hasContext) {\n // Create RequestContext\n let context: RequestContext;\n \n if (config.lambdaEdgeEvent) {\n context = new RequestContext({ lambdaEvent: config.lambdaEdgeEvent });\n } else if (config.request && config.response) {\n context = new RequestContext({ request: config.request, response: config.response });\n } else if (typeof window !== 'undefined') {\n context = new RequestContext({});\n } else {\n throw new CrowdHandlerError(\n ErrorCodes.INVALID_CONTEXT,\n 'Invalid context configuration',\n 'Provide either:\\n' +\n '- { request, response } for Express/Node.js\\n' +\n '- { lambdaEdgeEvent } for Lambda@Edge\\n' +\n '- Nothing for browser environment'\n );\n }\n \n // Auto-detect mode\n const mode = detectMode(config);\n \n // Prepare gatekeeper options\n const gatekeeperOptions: z.infer = {\n mode,\n debug: config.options?.debug,\n timeout: config.options?.timeout,\n ...(config.options?.trustOnFail !== undefined && { trustOnFail: config.options.trustOnFail }),\n fallbackSlug: config.options?.fallbackSlug,\n cookieName: config.options?.cookieName,\n liteValidator: config.options?.liteValidator,\n roomsConfig: config.options?.roomsConfig,\n waitingRoom: config.options?.waitingRoom,\n testError: config.options?.testError\n };\n \n // Create gatekeeper using the public client from our unified client\n gatekeeper = new Gatekeeper(\n client.getPublicClient(),\n context,\n {\n publicKey: config.publicKey,\n privateKey: config.privateKey\n },\n gatekeeperOptions\n );\n }\n \n return { client, gatekeeper };\n}\n\n/**\n * Detect the appropriate mode based on configuration and environment\n */\nfunction detectMode(config: InitConfig): Exclude {\n // Explicit mode takes precedence\n if (config.options?.mode && config.options.mode !== 'auto') {\n // Validate mode requirements\n if (config.options.mode === 'hybrid' && !config.privateKey) {\n throw new CrowdHandlerError(\n ErrorCodes.INVALID_MODE,\n 'Hybrid mode requires a privateKey',\n 'Either provide a privateKey or use \"full\" mode'\n );\n }\n return config.options.mode;\n }\n \n // Auto-detect based on environment\n if (typeof window !== 'undefined') {\n return 'clientside';\n }\n \n // Default to 'full' mode for server environments\n // (hybrid mode must be explicitly chosen)\n return 'full';\n}","/**\n * CrowdHandler JavaScript SDK\n * \n * @packageDocumentation\n */\n\n// Polyfill for async/await in ES5 environments\nimport 'regenerator-runtime/runtime';\n\n// Main API\n/** \n * Initialize CrowdHandler with configuration.\n * This is the main entry point for the SDK.\n */\nexport { init } from './init';\n\n/** \n * Unified API client for all CrowdHandler operations.\n * Usually obtained from init(), but can be instantiated directly.\n */\nexport { Client } from './client/client';\n\n// Error handling\nexport { CrowdHandlerError, ErrorCodes } from './common/errors';\n\n// Export individual error codes for better autocomplete\nexport const CROWDHANDLER_ERRORS = {\n // Configuration errors\n INVALID_CONFIG: 'INVALID_CONFIG',\n INVALID_MODE: 'INVALID_MODE',\n INVALID_CONTEXT: 'INVALID_CONTEXT',\n MISSING_PRIVATE_KEY: 'MISSING_PRIVATE_KEY',\n \n // API errors\n API_CONNECTION_FAILED: 'API_CONNECTION_FAILED',\n API_TIMEOUT: 'API_TIMEOUT',\n API_INVALID_RESPONSE: 'API_INVALID_RESPONSE',\n INVALID_API_KEY: 'INVALID_API_KEY',\n RATE_LIMITED: 'RATE_LIMITED',\n \n // Resource errors\n RESOURCE_NOT_FOUND: 'RESOURCE_NOT_FOUND',\n DOMAIN_NOT_FOUND: 'DOMAIN_NOT_FOUND',\n ROOM_NOT_FOUND: 'ROOM_NOT_FOUND',\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n \n // Generic errors\n UNKNOWN_ERROR: 'UNKNOWN_ERROR'\n} as const;\n\n// Types that users might need\nexport type { \n InitConfig, \n InitResult,\n InitResultWithGatekeeper,\n InitResultWithoutGatekeeper \n} from './init';\n\n// Classes for advanced usage (types only)\nexport type { Gatekeeper } from './gatekeeper/gatekeeper';\nexport type { RequestContext } from './request/requestContext';\n\n// Types for request validation\nexport type {\n ValidateRequestObject,\n ValidateRequestParams,\n RecordPerformanceOptions,\n GatekeeperOptions,\n RoomConfig,\n RoomsConfig,\n} from './common/types';\n\n// Re-export types with better names\nimport { z } from 'zod';\nimport { \n ValidateRequestObject as ValidateRequestSchema,\n ValidateRequestParams as ValidateRequestParamsSchema,\n RecordPerformanceOptions as RecordPerformanceSchema,\n GatekeeperOptions as GatekeeperOptionsSchema,\n RoomConfig as RoomConfigSchema,\n} from './common/types';\n\nexport type ValidateRequestResult = z.infer;\nexport type ValidateRequestParams = z.infer;\nexport type RecordPerformanceOptions = z.infer;\nexport type GatekeeperOptions = z.infer;\nexport type LiteValidatorRoom = z.infer;\n\n// Mode constants for better IntelliSense\nexport { Mode, Modes } from './common/types';\n\n// Common options types\n/**\n * Common options for API client configuration\n */\nexport interface ClientOptions {\n /** API request timeout in milliseconds (default: 5000) */\n timeout?: number;\n \n /** Enable debug logging (default: false) */\n debug?: boolean;\n \n /** Custom API URL (default: https://api.crowdhandler.com) */\n apiUrl?: string;\n}\n\n// Response types from API methods\n\n/**\n * Room resource from the CrowdHandler API\n */\nexport interface Room {\n /** Unique room identifier */\n id: string;\n \n /** URL slug for the room */\n slug: string;\n \n /** Domain associated with the room */\n domain: string;\n \n /** Whether the room is active */\n status: boolean;\n \n /** Additional room properties */\n [key: string]: any;\n}\n\nexport interface Domain {\n id: string;\n domain: string;\n [key: string]: any;\n}\n\nexport interface Session {\n id: string;\n roomId: string;\n status: number;\n promoted: number;\n [key: string]: any;\n}\n\nexport interface Request {\n id: string;\n [key: string]: any;\n}\n\nexport interface Response {\n id: string;\n [key: string]: any;\n}"],"names":["undefined"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"crowdhandler.esm.js","sources":["../node_modules/regenerator-runtime/runtime.js","../node_modules/tslib/tslib.es6.js","../src/common/logger.ts","../src/common/errors.ts","../src/common/runtime.ts","../src/client/base_client.ts","../src/client/resource.ts","../src/client/public_client.ts","../src/client/private_client.ts","../src/client/client.ts","../src/request/browserHandler.ts","../src/request/cloudflareWorkersHandler.ts","../src/request/lambdaRequestHandler.ts","../src/request/lambdaResponseHandler.ts","../src/request/nodejsHandler.ts","../src/request/requestContext.ts","../src/common/ignoredPatternsCheck.ts","../src/common/types.ts","../src/gatekeeper/configParse.ts","../src/common/processURL.ts","../src/common/hash.ts","../src/gatekeeper/signature.ts","../src/gatekeeper/tokenObject.ts","../src/common/ipDiscover.ts","../src/common/languageDiscover.ts","../src/common/userAgentDiscover.ts","../src/common/timer.ts","../src/gatekeeper/gatekeeper.ts","../src/init.ts","../src/index.ts"],"sourcesContent":["/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; };\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n defineProperty(generator, \"_invoke\", { value: makeInvokeMethod(innerFn, self, context) });\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n defineProperty(Gp, \"constructor\", { value: GeneratorFunctionPrototype, configurable: true });\n defineProperty(\n GeneratorFunctionPrototype,\n \"constructor\",\n { value: GeneratorFunction, configurable: true }\n );\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n defineProperty(this, \"_invoke\", { value: enqueue });\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per GeneratorResume behavior specified since ES2015:\n // ES2015 spec, step 3: https://262.ecma-international.org/6.0/#sec-generatorresume\n // Latest spec, step 2: https://tc39.es/ecma262/#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var methodName = context.method;\n var method = delegate.iterator[methodName];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method, or a missing .next method, always terminate the\n // yield* loop.\n context.delegate = null;\n\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (methodName === \"throw\" && delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n if (methodName !== \"return\") {\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a '\" + methodName + \"' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(val) {\n var object = Object(val);\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable != null) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n throw new TypeError(typeof iterable + \" is not iterable\");\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","//export a logger function that will be used to log messages\nexport function logger(debug: boolean, level: string, message: string) {\n if (debug) {\n switch (level) {\n case \"info\":\n console.info(message);\n break;\n case \"warn\":\n console.warn(message);\n break;\n case \"error\":\n console.error(message);\n break;\n default:\n console.log(message);\n break;\n }\n }\n}\n","/**\n * Custom error class for CrowdHandler SDK with actionable error messages.\n * All SDK errors are instances of this class, providing consistent error handling.\n * \n * @example\n * try {\n * const { client } = crowdhandler.init({ publicKey: 'invalid' });\n * } catch (error) {\n * // error is always a CrowdHandlerError\n * console.log(error.code); // 'INVALID_API_KEY'\n * console.log(error.message); // Human-readable message\n * console.log(error.suggestion); // Helpful next steps\n * console.log(error.statusCode); // HTTP status if applicable\n * }\n */\nexport class CrowdHandlerError extends Error {\n public code: string;\n public statusCode?: number;\n public suggestion?: string;\n public context?: Record;\n\n constructor(\n code: string,\n message: string,\n suggestion?: string,\n statusCode?: number,\n context?: Record\n ) {\n super(message);\n this.name = 'CrowdHandlerError';\n this.code = code;\n this.statusCode = statusCode;\n this.suggestion = suggestion;\n this.context = context;\n\n // Maintains proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CrowdHandlerError);\n }\n }\n\n /**\n * Returns a formatted error message with all context\n */\n toString(): string {\n let errorMsg = `${this.name} [${this.code}]: ${this.message}`;\n \n if (this.suggestion) {\n errorMsg += `\\n💡 Suggestion: ${this.suggestion}`;\n }\n \n if (this.statusCode) {\n errorMsg += `\\n📊 Status Code: ${this.statusCode}`;\n }\n \n if (this.context && Object.keys(this.context).length > 0) {\n errorMsg += `\\n🔍 Context: ${JSON.stringify(this.context, null, 2)}`;\n }\n \n return errorMsg;\n }\n}\n\n/**\n * Common error codes used throughout the SDK.\n * Use these constants to handle specific error conditions.\n * \n * @example\n * try {\n * await client.domains().get();\n * } catch (error) {\n * if (error.code === ErrorCodes.MISSING_PRIVATE_KEY) {\n * console.log('Need to initialize with private key');\n * }\n * }\n */\nexport const ErrorCodes = {\n // Network errors\n API_CONNECTION_FAILED: 'API_CONNECTION_FAILED',\n API_TIMEOUT: 'API_TIMEOUT',\n API_INVALID_RESPONSE: 'API_INVALID_RESPONSE',\n \n // Authentication errors\n INVALID_PUBLIC_KEY: 'INVALID_PUBLIC_KEY',\n INVALID_PRIVATE_KEY: 'INVALID_PRIVATE_KEY',\n MISSING_PRIVATE_KEY: 'MISSING_PRIVATE_KEY',\n AUTHENTICATION_FAILED: 'AUTHENTICATION_FAILED',\n \n // Configuration errors\n INVALID_CONFIG: 'INVALID_CONFIG',\n INVALID_MODE: 'INVALID_MODE',\n MISSING_CONTEXT: 'MISSING_CONTEXT',\n INVALID_CONTEXT: 'INVALID_CONTEXT',\n \n // Validation errors\n VALIDATION_FAILED: 'VALIDATION_FAILED',\n INVALID_TOKEN: 'INVALID_TOKEN',\n SIGNATURE_MISMATCH: 'SIGNATURE_MISMATCH',\n \n // API response errors\n RATE_LIMITED: 'RATE_LIMITED',\n DOMAIN_NOT_FOUND: 'DOMAIN_NOT_FOUND',\n ROOM_NOT_FOUND: 'ROOM_NOT_FOUND',\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\n \n // Runtime errors\n METHOD_NOT_AVAILABLE: 'METHOD_NOT_AVAILABLE',\n BROWSER_ONLY: 'BROWSER_ONLY',\n SERVER_ONLY: 'SERVER_ONLY',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n} as const;\n\n/**\n * Factory functions for creating common CrowdHandler errors.\n * Used internally by the SDK to ensure consistent error messages.\n * @internal\n */\nexport const createError = {\n apiConnection: (originalError: any) => {\n const isTimeout = originalError.code === 'ECONNABORTED' || originalError.code === 'ETIMEDOUT';\n const isRefused = originalError.code === 'ECONNREFUSED';\n \n if (isTimeout) {\n return new CrowdHandlerError(\n ErrorCodes.API_TIMEOUT,\n 'Request to CrowdHandler API timed out',\n 'Try increasing the timeout option or check your network connection',\n undefined,\n { originalError: originalError.message }\n );\n }\n \n if (isRefused) {\n return new CrowdHandlerError(\n ErrorCodes.API_CONNECTION_FAILED,\n 'Could not connect to CrowdHandler API',\n 'Check your internet connection and firewall settings. If the problem persists, check https://status.crowdhandler.com',\n undefined,\n { originalError: originalError.message }\n );\n }\n \n return new CrowdHandlerError(\n ErrorCodes.API_CONNECTION_FAILED,\n `Network error: ${originalError.message}`,\n 'Check your network connection and try again',\n undefined,\n { originalError: originalError.message }\n );\n },\n\n invalidApiKey: (keyType: 'public' | 'private') => {\n const code = keyType === 'public' ? ErrorCodes.INVALID_PUBLIC_KEY : ErrorCodes.INVALID_PRIVATE_KEY;\n \n return new CrowdHandlerError(\n code,\n `Invalid ${keyType} key`,\n `Check your CrowdHandler dashboard for the correct ${keyType} key`,\n 401\n );\n },\n\n missingPrivateKey: (method: string) => {\n return new CrowdHandlerError(\n ErrorCodes.MISSING_PRIVATE_KEY,\n `${method} requires a private key`,\n `Initialize with: crowdhandler.init({ publicKey, privateKey })`,\n 403\n );\n },\n\n missingContext: (method: string) => {\n const example = typeof window !== 'undefined' \n ? 'crowdhandler.init({ publicKey })'\n : 'crowdhandler.init({ publicKey, request: req, response: res })';\n \n return new CrowdHandlerError(\n ErrorCodes.MISSING_CONTEXT,\n `${method} requires request context`,\n `Initialize with: ${example}`,\n 400\n );\n },\n\n invalidResponse: (response: any) => {\n return new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n 'Received invalid response from CrowdHandler API',\n 'This might be a temporary issue. If it persists, contact support@crowdhandler.com',\n 502,\n { response: JSON.stringify(response).substring(0, 200) }\n );\n },\n\n rateLimited: (retryAfter?: string) => {\n return new CrowdHandlerError(\n ErrorCodes.RATE_LIMITED,\n 'API rate limit exceeded',\n retryAfter \n ? `Wait ${retryAfter} seconds before retrying`\n : 'Reduce the frequency of API calls',\n 429,\n { retryAfter }\n );\n },\n\n resourceNotFound: (resourceType: string, resourceId: string) => {\n const errorCode = {\n domain: ErrorCodes.DOMAIN_NOT_FOUND,\n room: ErrorCodes.ROOM_NOT_FOUND,\n session: ErrorCodes.SESSION_NOT_FOUND,\n }[resourceType] || ErrorCodes.API_INVALID_RESPONSE;\n \n return new CrowdHandlerError(\n errorCode,\n `${resourceType} not found: ${resourceId}`,\n `Check that the ${resourceType} ID is correct and that you have access to it`,\n 404,\n { resourceType, resourceId }\n );\n }\n};","/**\n * Detect if we're running in the Cloudflare Workers (workerd) runtime.\n * Workers sets navigator.userAgent to \"Cloudflare-Workers\" — this is the\n * documented and stable detection signal:\n * https://developers.cloudflare.com/workers/runtime-apis/web-standards/\n */\nexport const isCloudflareWorkers =\n typeof navigator !== \"undefined\" &&\n (navigator as any).userAgent === \"Cloudflare-Workers\";\n","import axios, { AxiosInstance } from \"axios\";\nimport { z, ZodError } from \"zod\";\nimport { logger } from \"../common/logger\";\nimport { CrowdHandlerError, createError, ErrorCodes } from \"../common/errors\";\nimport { isCloudflareWorkers } from \"../common/runtime\";\n\n// axios 0.27.2 has no fetch adapter and requires Node's http module, so it\n// crashes inside Workers. When isCloudflareWorkers is true we route HTTP\n// through native fetch instead — preserved error shape so errorHandler keeps\n// working.\n\nconst APIResponse = z.object({}).catchall(z.any());\n\nconst APIErrorResponse = z\n .object({\n error: z.string().optional(),\n message: z.string().optional(),\n statusCode: z.number().optional(),\n })\n .catchall(z.any());\n\nexport class BaseClient {\n protected debug: boolean;\n protected apiUrl: string;\n protected key: string;\n protected timeout: number;\n\n constructor(\n apiUrl: string,\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n this.debug = options.debug || false;\n this.apiUrl = options.apiUrl || apiUrl;\n this.key = key;\n this.timeout = options.timeout || 5000;\n if (!isCloudflareWorkers) {\n // axios.defaults is process-global state and is meaningless in Workers\n // (we don't use axios there). Skip in Workers to avoid touching axios's\n // internal config which can drag in Node-only deps during import.\n axios.defaults.timeout = this.timeout;\n }\n }\n\n /**\n * Issue an HTTP request. Routes through axios in Node/Lambda environments\n * and native fetch in Cloudflare Workers. Both paths return / throw\n * axios-compatible shapes so errorHandler() and the response.data parsing\n * downstream work unchanged.\n */\n private async httpRequest(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\",\n url: string,\n options: {\n params?: Record;\n body?: any;\n headers?: Record;\n timeout?: number;\n } = {}\n ): Promise<{ data: any; status: number; headers: any }> {\n const requestTimeout = options.timeout ?? this.timeout;\n if (!isCloudflareWorkers) {\n // Node/Lambda path — preserve existing axios behaviour exactly.\n const response = await axios.request({\n method,\n url,\n params: options.params,\n data: options.body,\n headers: options.headers,\n timeout: requestTimeout,\n });\n return { data: response.data, status: response.status, headers: response.headers };\n }\n\n // Workers path — native fetch with a manual timeout via AbortController.\n let finalUrl = url;\n if (options.params && Object.keys(options.params).length > 0) {\n const search = new URLSearchParams();\n for (const [k, v] of Object.entries(options.params)) {\n if (v !== undefined && v !== null) search.append(k, String(v));\n }\n finalUrl += (finalUrl.includes(\"?\") ? \"&\" : \"?\") + search.toString();\n }\n\n const init: RequestInit = {\n method,\n headers: options.headers as any,\n };\n\n if (options.body !== undefined && method !== \"GET\" && method !== \"DELETE\") {\n init.body = typeof options.body === \"string\" ? options.body : JSON.stringify(options.body);\n const hasContentType = options.headers && Object.keys(options.headers)\n .some((h) => h.toLowerCase() === \"content-type\");\n if (!hasContentType) {\n init.headers = { ...(options.headers || {}), \"content-type\": \"application/json\" };\n }\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), requestTimeout);\n init.signal = controller.signal;\n\n let response: Response;\n try {\n response = await fetch(finalUrl, init);\n } catch (err: any) {\n clearTimeout(timeoutId);\n // Mirror axios's \"no response received\" error shape so errorHandler's\n // `else if (error.request)` branch fires.\n const wrapped: any = new Error(err?.message || \"Network request failed\");\n if (controller.signal.aborted || err?.name === \"AbortError\") {\n wrapped.code = \"ECONNABORTED\";\n }\n wrapped.request = { url: finalUrl, method };\n wrapped.config = { url: finalUrl, method };\n throw wrapped;\n }\n clearTimeout(timeoutId);\n\n // Read body — try JSON first, fall back to text.\n const contentType = response.headers.get(\"content-type\") || \"\";\n let data: any;\n if (contentType.includes(\"application/json\")) {\n try { data = await response.json(); } catch { data = null; }\n } else {\n const text = await response.text();\n try { data = JSON.parse(text); } catch { data = text; }\n }\n\n if (response.status < 200 || response.status >= 300) {\n // Mirror axios's error.response shape so errorHandler's\n // `if (error.response)` branch fires unchanged.\n const headersObj: Record = {};\n response.headers.forEach((v, k) => { headersObj[k] = v; });\n const wrapped: any = new Error(`Request failed with status ${response.status}`);\n wrapped.response = { status: response.status, data, headers: headersObj };\n wrapped.config = { url: finalUrl, method };\n throw wrapped;\n }\n\n const headersObj: Record = {};\n response.headers.forEach((v, k) => { headersObj[k] = v; });\n return { data, status: response.status, headers: headersObj };\n }\n\n /**\n * Wraps any error into a CrowdHandlerError\n */\n private wrapError(error: any): CrowdHandlerError {\n // Already a CrowdHandlerError\n if (error instanceof CrowdHandlerError) {\n return error;\n }\n\n // Zod validation error\n if (error.name === 'ZodError') {\n return new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n 'Invalid response format from API',\n 'This might be a temporary issue. If it persists, contact support@crowdhandler.com',\n undefined,\n { parseError: error.message }\n );\n }\n\n // Generic unknown error\n return new CrowdHandlerError(\n ErrorCodes.UNKNOWN_ERROR,\n error.message || 'An unexpected error occurred',\n 'Please try again. If the problem persists, contact support@crowdhandler.com',\n undefined,\n { \n errorType: error.constructor?.name,\n stack: error.stack\n }\n );\n }\n\n /**\n * Provides generic suggestion based on HTTP status code\n */\n private getGenericSuggestion(status: number): string {\n switch (status) {\n case 400: return 'Check your request parameters';\n case 401: return 'Check your authentication credentials';\n case 403: return 'You do not have permission for this action';\n case 404: return 'The requested resource was not found';\n case 429: return 'Too many requests - please slow down';\n case 500: \n case 502:\n case 503:\n case 504:\n return 'Server error - please try again later';\n default: \n return status >= 500 \n ? 'This appears to be a server error. Please try again later or contact support@crowdhandler.com'\n : 'Please check your request parameters and try again';\n }\n }\n\n async errorHandler(error: any): Promise {\n // If it's already a CrowdHandlerError, just re-throw it\n if (error instanceof CrowdHandlerError) {\n throw error;\n }\n if (error.response) {\n // The request was made and the server responded with a status code\n // that falls out of the range of 2xx\n const status = error.response.status;\n const data = error.response.data;\n \n logger(this.debug, \"error\", `API Error - Status: ${status} - ${JSON.stringify(data)}`);\n logger(this.debug, \"error\", `Response headers: ${JSON.stringify(error.response.headers)}`);\n\n // Extract the error message from the API response\n const errorMessage = data?.error || data?.message || `API request failed with status ${status}`;\n \n // Special handling for rate limiting to include retry-after\n if (status === 429) {\n const retryAfter = error.response.headers['retry-after'];\n throw new CrowdHandlerError(\n ErrorCodes.RATE_LIMITED,\n errorMessage,\n retryAfter \n ? `Wait ${retryAfter} seconds before retrying`\n : 'Reduce the frequency of API calls',\n status,\n {\n url: error.config?.url,\n method: error.config?.method,\n apiResponse: data,\n retryAfter\n }\n );\n }\n \n // Pass through the API error with full response data\n throw new CrowdHandlerError(\n ErrorCodes.API_INVALID_RESPONSE,\n errorMessage,\n this.getGenericSuggestion(status),\n status,\n { \n url: error.config?.url,\n method: error.config?.method,\n apiResponse: data // Full API response, not truncated\n }\n );\n \n } else if (error.request) {\n // The request was made but no response was received\n logger(this.debug, \"error\", `No response received: ${error.message}`);\n \n throw createError.apiConnection(error);\n \n } else {\n // Something happened in setting up the request\n logger(this.debug, \"error\", `Request setup error: ${error.message}`);\n \n // Use wrapError to ensure we always throw CrowdHandlerError\n throw this.wrapError(error);\n }\n }\n\n async httpDELETE(path: string, body: object) {\n try {\n const response = await this.httpRequest(\"DELETE\", this.apiUrl + path, {\n headers: {\n \"x-api-key\": this.key,\n },\n });\n\n try {\n return APIResponse.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error: any) {\n await this.errorHandler(error);\n }\n }\n\n async httpGET(path?: string, params?: object) {\n try {\n const response = await this.httpRequest(\"GET\", this.apiUrl + path, {\n params: params as Record,\n headers: {\n \"x-api-key\": this.key,\n },\n });\n\n try {\n return APIResponse.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error) {\n await this.errorHandler(error);\n }\n }\n\n async httpPOST(\n path: string,\n body?: Record,\n headers?: Record,\n schema: z.Schema = APIResponse\n ) {\n try {\n const response = await this.httpRequest(\"POST\", this.apiUrl + path, {\n body,\n headers: {\n \"x-api-key\": this.key,\n ...headers,\n },\n });\n\n try {\n return schema.parse(response.data);\n } catch (parseError: any) {\n throw this.wrapError(parseError);\n }\n } catch (error) {\n await this.errorHandler(error);\n }\n }\n\n async httpPUT(path: string, body: object, options?: { timeout?: number }) {\n try {\n const response = await this.httpRequest(\"PUT\", this.apiUrl + path, {\n body,\n headers: {\n \"x-api-key\": this.key,\n },\n timeout: options?.timeout,\n });\n return APIResponse.parse(response.data);\n } catch (error) {\n return this.errorHandler(error);\n }\n }\n}\n","import { BaseClient } from \"./base_client\";\n\nexport class Resource extends BaseClient {\n path: string;\n constructor(\n key: string,\n path: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const {\n timeout = 5000,\n debug = false,\n apiUrl = \"https://api.crowdhandler.com\",\n } = options ?? {};\n super(apiUrl, key, options);\n this.path = path;\n }\n\n private formatPath(path: string, id: string) {\n // If id is not provided, replace it with an empty string.\n id = id || \"\";\n\n //this.path may contain a placeholder for the id. replace it with the actual id.\n path = path.replace(\"ID_PLACEHOLDER\", id);\n\n return path;\n }\n\n delete(id: string, body: object) {\n this.path = this.formatPath(this.path, id);\n\n return super.httpDELETE(this.path, body);\n }\n\n get(id?: string, params?: any) {\n //Handle id being an optional parameter\n if (!id) {\n id = \"\";\n }\n\n this.path = this.formatPath(this.path, id);\n\n // Extract custom parameters and spread them with other params\n const { custom, ...standardParams } = params || {};\n const requestParams = {\n ...standardParams,\n ...custom // Spread custom parameters at the root level\n };\n\n return super.httpGET(this.path, requestParams);\n }\n\n post(body: any) {\n this.path = this.formatPath(this.path, \"\");\n\n // Extract custom parameters and spread them with other body params\n const { custom, ...standardBody } = body || {};\n const requestBody = {\n ...standardBody,\n ...custom // Spread custom parameters at the root level\n };\n\n return super.httpPOST(this.path, requestBody);\n }\n\n put(id: string, body: object, options?: { timeout?: number }) {\n this.path = this.formatPath(this.path, id);\n\n return super.httpPUT(this.path, body, options);\n }\n}\n","import { BaseClient } from \"./base_client\";\nimport { Resource } from \"./resource\";\n\nexport class PublicClient extends BaseClient {\n constructor(\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const { timeout = 5000, debug = false, apiUrl = \"https://api.crowdhandler.com\" } =\n options ?? {};\n super(apiUrl, key, options);\n }\n\n requests() {\n return new Resource(this.key, \"/v1/requests/ID_PLACEHOLDER\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n\n responses() {\n return new Resource(this.key, \"/v1/responses/ID_PLACEHOLDER\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n\n rooms() {\n return new Resource(this.key, \"/v1/rooms/\", { timeout: this.timeout, debug: this.debug, apiUrl: this.apiUrl });\n }\n}","import { BaseClient } from \"./base_client\";\nimport { Resource } from \"./resource\";\n\nexport class PrivateClient extends BaseClient {\n constructor(\n key: string,\n options: { timeout?: number; debug?: boolean; apiUrl?: string } = {}\n ) {\n const {\n timeout = 5000,\n debug = false,\n apiUrl = \"https://api.crowdhandler.com\",\n } = options ?? {};\n super(apiUrl, key, options);\n }\n\n account() {\n return new Resource(this.key, \"/v1/account/\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n accountPlan() {\n return new Resource(this.key, \"/v1/account/plan\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n codes() {\n return new Resource(this.key, \"/v1/codes/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domains() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainIPs() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/ips\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainReports() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/reports\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainRequests() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/requests\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainRooms() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/rooms\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n domainURLs() {\n return new Resource(this.key, \"/v1/domains/ID_PLACEHOLDER/urls\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groups() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groupBatch() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER/batch\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n groupCodes() {\n return new Resource(this.key, \"/v1/groups/ID_PLACEHOLDER/codes\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n ips() {\n return new Resource(this.key, \"/v1/ips/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n reports() {\n return new Resource(this.key, \"/v1/reports/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n rooms() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n roomReports() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER/reports\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n roomSessions() {\n return new Resource(this.key, \"/v1/rooms/ID_PLACEHOLDER/sessions\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n sessions() {\n return new Resource(this.key, \"/v1/sessions/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n\n templates() {\n return new Resource(this.key, \"/v1/templates/ID_PLACEHOLDER\", {\n timeout: this.timeout,\n debug: this.debug,\n apiUrl: this.apiUrl,\n });\n }\n}\n","import { PublicClient } from \"./public_client\";\nimport { PrivateClient } from \"./private_client\";\nimport { createError } from \"../common/errors\";\n\n/**\n * Configuration for the unified Client\n */\ninterface ClientConfig {\n /** Your CrowdHandler public key */\n publicKey: string;\n \n /** Your CrowdHandler private key (required for private API access) */\n privateKey?: string;\n \n /** Additional client options */\n options?: {\n /** API request timeout in milliseconds (default: 5000) */\n timeout?: number;\n \n /** Enable debug logging (default: false) */\n debug?: boolean;\n \n /** Custom API URL (default: https://api.crowdhandler.com) */\n apiUrl?: string;\n };\n}\n\n/**\n * Unified CrowdHandler API client that combines public and private API access.\n * \n * This client provides a single interface to all CrowdHandler API endpoints,\n * with intelligent error messages when attempting to use private endpoints\n * without a private key.\n * \n * @example\n * // Public API only\n * const client = new Client({ publicKey: 'pk_xyz' });\n * const rooms = await client.rooms().get();\n * \n * @example\n * // Public and Private API\n * const client = new Client({ \n * publicKey: 'pk_xyz',\n * privateKey: 'sk_xyz' \n * });\n * const domains = await client.domains().get();\n */\nexport class Client {\n private publicClient: PublicClient;\n private privateClient?: PrivateClient;\n private hasPrivateAccess: boolean;\n\n constructor(config: ClientConfig) {\n this.publicClient = new PublicClient(config.publicKey, config.options);\n this.hasPrivateAccess = !!config.privateKey;\n \n if (config.privateKey) {\n this.privateClient = new PrivateClient(config.privateKey, config.options);\n }\n }\n\n // ===== Public API Methods (always available) =====\n \n /**\n * Access request resources\n * @returns Resource instance for request operations\n * \n * @example\n * const request = await client.requests().get('req_123');\n */\n requests() {\n return this.publicClient.requests();\n }\n\n /**\n * Access response resources\n * @returns Resource instance for response operations\n * \n * @example\n * const response = await client.responses().get('res_123');\n */\n responses() {\n return this.publicClient.responses();\n }\n\n /**\n * Access room resources\n * @returns Resource instance for room operations\n * \n * @example\n * const rooms = await client.rooms().get();\n * const room = await client.rooms().get('room_123');\n */\n rooms() {\n return this.publicClient.rooms();\n }\n\n // ===== Private API Methods (require privateKey) =====\n \n /**\n * Access account information (requires private key)\n * @returns Resource instance for account operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const account = await client.account().get();\n */\n account() {\n this.requirePrivateAccess('account()');\n return this.privateClient!.account();\n }\n\n accountPlan() {\n this.requirePrivateAccess('accountPlan()');\n return this.privateClient!.accountPlan();\n }\n\n codes() {\n this.requirePrivateAccess('codes()');\n return this.privateClient!.codes();\n }\n\n /**\n * Access domain resources (requires private key)\n * @returns Resource instance for domain operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const domains = await client.domains().get();\n * const domain = await client.domains().get('dom_123');\n * const newDomain = await client.domains().post({ domain: 'example.com' });\n */\n domains() {\n this.requirePrivateAccess('domains()');\n return this.privateClient!.domains();\n }\n\n domainIPs() {\n this.requirePrivateAccess('domainIPs()');\n return this.privateClient!.domainIPs();\n }\n\n domainReports() {\n this.requirePrivateAccess('domainReports()');\n return this.privateClient!.domainReports();\n }\n\n domainRequests() {\n this.requirePrivateAccess('domainRequests()');\n return this.privateClient!.domainRequests();\n }\n\n domainRooms() {\n this.requirePrivateAccess('domainRooms()');\n return this.privateClient!.domainRooms();\n }\n\n domainURLs() {\n this.requirePrivateAccess('domainURLs()');\n return this.privateClient!.domainURLs();\n }\n\n groups() {\n this.requirePrivateAccess('groups()');\n return this.privateClient!.groups();\n }\n\n groupBatch() {\n this.requirePrivateAccess('groupBatch()');\n return this.privateClient!.groupBatch();\n }\n\n groupCodes() {\n this.requirePrivateAccess('groupCodes()');\n return this.privateClient!.groupCodes();\n }\n\n ips() {\n this.requirePrivateAccess('ips()');\n return this.privateClient!.ips();\n }\n\n reports() {\n this.requirePrivateAccess('reports()');\n return this.privateClient!.reports();\n }\n\n roomReports() {\n this.requirePrivateAccess('roomReports()');\n return this.privateClient!.roomReports();\n }\n\n roomSessions() {\n this.requirePrivateAccess('roomSessions()');\n return this.privateClient!.roomSessions();\n }\n\n /**\n * Access session resources (requires private key)\n * @returns Resource instance for session operations\n * @throws {CrowdHandlerError} When no private key is configured\n * \n * @example\n * const sessions = await client.sessions().get();\n * const session = await client.sessions().get('ses_123');\n */\n sessions() {\n this.requirePrivateAccess('sessions()');\n return this.privateClient!.sessions();\n }\n\n templates() {\n this.requirePrivateAccess('templates()');\n return this.privateClient!.templates();\n }\n\n // ===== Internal Methods =====\n \n /**\n * Get the internal PublicClient instance (used by Gatekeeper)\n */\n getPublicClient(): PublicClient {\n return this.publicClient;\n }\n\n /**\n * Check if private API access is available\n */\n hasPrivateAPIAccess(): boolean {\n return this.hasPrivateAccess;\n }\n\n // ===== Helper Methods =====\n private requirePrivateAccess(method: string): void {\n if (!this.hasPrivateAccess) {\n throw createError.missingPrivateKey(method);\n }\n }\n}","export class BrowserHandler {\n constructor() {}\n\n public getCookies() {\n return document.cookie;\n }\n\n public getHost() {\n return window.location.host;\n }\n\n public getProtocol() {\n return window.location.protocol;\n }\n\n public getPath() {\n if (!window.location.search) {\n return window.location.pathname;\n } else {\n return `${window.location.pathname}${window.location.search}`;\n }\n }\n\n public getAbsoluteUri() {\n return window.location.href;\n }\n\n public setCookie(value: string, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n document.cookie = `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`;\n }\n\n public getLocalStorageItem(key: string): string | null {\n return localStorage.getItem(key);\n }\n\n public setLocalStorageItem(key: string, value: string): void {\n localStorage.setItem(key, value);\n }\n\n public redirect(url: string) {\n window.location.href = url;\n }\n}\n","/**\n * Handler for Cloudflare Workers (workerd) runtime.\n *\n * Mirrors the shape of LambdaRequestHandler — the Worker model is request-in /\n * response-out (no mutable response object), so:\n * - read methods source from the Workers-native Request\n * - redirect() returns a Workers Response (caller returns it from fetch)\n * - setCookie() returns the Set-Cookie header value (caller appends it\n * to the outgoing Response)\n *\n * Cookie format and no-cache redirect headers mirror the existing\n * crowdhandler-cloudflare-integration Worker so behaviour stays consistent\n * across both deployment styles.\n */\nexport class CloudflareWorkersHandler {\n private request: Request;\n private url: URL;\n\n constructor(request: Request) {\n this.request = request;\n this.url = new URL(request.url);\n }\n\n public getHeader(name: string): string {\n return this.request.headers.get(name) || \"\";\n }\n\n public getCookies(): string {\n return this.request.headers.get(\"cookie\") || \"\";\n }\n\n public getHost(): string {\n // URL.host includes port when non-standard — matches Host header\n // semantics used by the other handlers (Lambda/NodeJS/Browser).\n return this.url.host;\n }\n\n public getProtocol(): string {\n // URL.protocol includes the trailing \":\" — strip it so the value matches\n // the other handlers (which return \"https\" / \"http\").\n return this.url.protocol.replace(/:$/, \"\");\n }\n\n public getPath(): string {\n return this.url.pathname + this.url.search;\n }\n\n public getAbsoluteUri(): string {\n return this.request.url;\n }\n\n public getUserHostAddress(): string {\n // CF-Connecting-IP is the canonical client IP header on Workers\n // (matches crowdhandler-cloudflare-integration/index.js).\n return this.request.headers.get(\"cf-connecting-ip\") || \"\";\n }\n\n public setCookie(\n value: string,\n cookieName: string = \"crowdhandler\",\n domain?: string\n ): string {\n // Returns the Set-Cookie header value — caller appends it to their\n // outgoing Response. Format mirrors the existing CF integration.\n const parts = [`${cookieName}=${value}`, \"path=/\", \"Secure\"];\n if (domain) {\n parts.push(`domain=${domain}`);\n }\n return parts.join(\"; \");\n }\n\n public redirect(url: string): Response {\n // Header casing and values mirror helpers.noCacheHeaders in\n // crowdhandler-cloudflare-integration/helpers/misc.js.\n return new Response(null, {\n status: 302,\n headers: {\n Location: url,\n \"Cache-Control\": \"no-cache, no-store, must-revalidate\",\n Expires: \"Fri, 01 Jan 1970 00:00:00 GMT\",\n Pragma: \"no-cache\",\n },\n });\n }\n}\n","import { CloudFrontRequest } from \"aws-lambda\";\n\nexport class LambdaRequestHandler {\n private request: CloudFrontRequest;\n\n constructor(event: CloudFrontRequest /*context: any, callback: any*/) {\n this.request = event;\n }\n\n public getHeader(headername: string) {\n const headers = this.request.headers;\n const headerValue = headers[headername.toLowerCase()];\n\n if (!headerValue) {\n return \"\";\n }\n\n return headerValue[0].value;\n }\n\n public getCookies() {\n const headers = this.request.headers;\n const cookies = headers.cookie;\n\n if (!cookies) {\n return \"\";\n }\n\n return cookies[0].value;\n }\n\n public getHost() {\n return this.request.headers.host[0].value;\n }\n\n public getProtocol() {\n return this.request.headers[\"cloudfront-forwarded-proto\"][0].value;\n }\n\n public getPath() {\n if (!this.request.querystring) {\n return this.request.uri;\n } else {\n return `${this.request.uri}?${this.request.querystring}`;\n }\n }\n\n public getAbsoluteUri() {\n const protocol = this.getProtocol();\n const host = this.getHost();\n const path = this.getPath();\n\n return `${protocol}://${host}${path}`;\n }\n\n public getUserHostAddress() {\n return this.request.clientIp;\n }\n\n public setHeader(headerName: string, headerValue: string) {\n this.request.headers[headerName] = [\n {\n key: headerName,\n value: headerValue,\n },\n ];\n }\n\n public redirect(url: string) {\n let response = {\n status: \"302\",\n statusDescription: \"Found\",\n headers: {\n location: [\n {\n key: \"Location\",\n value: url,\n },\n ],\n /*\"set-cookie\": [\n {\n key: \"Set-Cookie\",\n value: `crowdhandler=${token}; path=/; Secure; HttpOnly`,\n },\n ],*/\n \"cache-control\": [\n {\n key: \"Cache-Control\",\n value: \"no-cache, no-store, must-revalidate\",\n },\n ],\n expires: [\n {\n key: \"Expires\",\n value: \"Fri, 01 Jan 1970 00:00:00 GMT\",\n },\n ],\n pragma: [\n {\n key: \"Pragma\",\n value: \"no-cache\",\n },\n ],\n },\n };\n return response;\n }\n}\n","import { CloudFrontRequest, CloudFrontResponse } from \"aws-lambda\";\nimport { CookieObject } from \"../common/types\";\nimport { z } from \"zod\";\n\nexport class LambdaResponseHandler {\n private request: CloudFrontRequest;\n private response: CloudFrontResponse;\n\n constructor(\n requestEvent: CloudFrontRequest,\n responseEvent: CloudFrontResponse\n ) {\n // Handle data in a Lambda@Edge environment\n this.request = requestEvent;\n this.response = responseEvent;\n }\n\n public getHeader(headername: string) {\n const headers = this.request.headers;\n const headerValue = headers[headername.toLowerCase()];\n\n if (!headerValue) {\n return \"\";\n }\n\n return headerValue[0].value;\n }\n\n public getHost() {\n return this.request.headers.host[0].value;\n }\n\n public getProtocol() {\n return this.request.headers[\"cloudfront-forwarded-proto\"][0].value;\n }\n\n public getPath() {\n return this.request.uri;\n }\n\n \n\n public setCookie(value: z.infer, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n // Append cookie to response header\n const cookieHeader = `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`;\n\n const setCookieHeader = this.response.headers[\"set-cookie\"] || [];\n setCookieHeader.push({ key: \"Set-Cookie\", value: cookieHeader });\n this.response.headers[\"set-cookie\"] = setCookieHeader;\n\n return this.response;\n }\n}\n","import { CookieObject } from \"../common/types\";\nimport { z } from \"zod\";\n\nexport class NodeJSHandler {\n private request: any;\n private response: any;\n \n constructor(req: any, res: any) {\n // Handle data in a non-Lambda environment\n this.request = req;\n this.response = res;\n }\n \n public getHeader(headername: string) {\n let headerValue = this.request.header(headername);\n \n if (!headerValue) {\n return \"\";\n }\n \n return headerValue;\n }\n \n public getCookies() {\n return this.request.get(\"cookie\");\n }\n \n public getHost() {\n return this.request.get(\"host\");\n }\n \n public getProtocol() {\n return this.request.protocol;\n }\n \n public getPath() {\n return this.request.originalUrl;\n }\n \n public getAbsoluteUri() {\n return (\n this.request.protocol +\n \"://\" +\n this.request.get(\"host\") +\n this.request.originalUrl\n );\n }\n \n public getUserHostAddress() {\n return this.request.ip;\n }\n \n public setCookie(value: z.infer, cookieName: string = \"crowdhandler\", domain?: string) {\n const cookieOptions: any = {\n path: \"/\",\n secure: true, // cookie will only be sent over HTTPS\n };\n \n // Add domain if provided\n if (domain) {\n cookieOptions.domain = domain;\n }\n \n //Append cookie to response header\n return this.response.setHeader(\n \"Set-Cookie\",\n `${cookieName}=${value}; ${Object.keys(cookieOptions)\n .map((key) => `${key}=${cookieOptions[key]}`)\n .join(\"; \")}`\n );\n }\n \n public redirect(url: string) {\n this.response.setHeader(\"Cache-Control\", \"no-cache, no-store, max-age=0\");\n this.response.setHeader(\"Pragma\", \"no-cache\");\n this.response.setHeader(\"Expires\", 0);\n this.response.setHeader(\"Location\", url);\n this.response.statusCode = 302;\n return this.response.end();\n }\n }","import { CloudFrontRequestEvent, CloudFrontResponseEvent } from \"aws-lambda\";\n\nimport { BrowserHandler } from \"./browserHandler\";\nimport { CloudflareWorkersHandler } from \"./cloudflareWorkersHandler\";\nimport { LambdaRequestHandler } from \"./lambdaRequestHandler\";\nimport { LambdaResponseHandler } from \"./lambdaResponseHandler\";\nimport { NodeJSHandler } from \"./nodejsHandler\";\n\ninterface RequestContextParams {\n lambdaEvent?: any;\n request?: any;\n response?: any;\n cloudflareWorkersRequest?: any;\n}\n\n//Create a base class that will act as a switch depending on the environment\nexport class RequestContext {\n //constructor(event: CloudFrontEvent, req?: any, res?: any) {\n constructor(params: RequestContextParams) {\n //Lambda@Edge event\n if (params && params.lambdaEvent) {\n //Create a switch based on the event type\n switch (params.lambdaEvent?.Records[0].cf.config.eventType) {\n case \"viewer-request\":\n case \"origin-request\":\n //update the event type to be a CloudFrontRequestEvent\n const requestEvent =\n params.lambdaEvent as unknown as CloudFrontRequestEvent;\n return new LambdaRequestHandler(requestEvent.Records[0].cf.request);\n break;\n\n case \"viewer-response\":\n case \"origin-response\":\n //update the event type to be a CloudFrontResponseEvent\n const responseEvent =\n params.lambdaEvent as unknown as CloudFrontResponseEvent;\n return new LambdaResponseHandler(\n responseEvent.Records[0].cf.request,\n responseEvent.Records[0].cf.response\n );\n break;\n }\n //Cloudflare Workers Request\n } else if (params && params.cloudflareWorkersRequest) {\n return new CloudflareWorkersHandler(params.cloudflareWorkersRequest);\n //NodeJS HTTP request\n } else if (params && params.request && params.response) {\n return new NodeJSHandler(params.request, params.response);\n //Default to Browser request\n } else {\n return new BrowserHandler();\n }\n }\n}\n","export function ignoredPatternsCheck(path: string, patterns: RegExp) {\n //Handle static file extensions\n let result = patterns.test(path)\n return result\n}","import { z } from \"zod\";\n\n// Lite Validator types\nexport const RoomConfig = z.object({\n domain: z.string(), // Format: \"https://example.com\"\n urlPattern: z.string().optional(),\n patternType: z.enum(['regex', 'contains', 'all']).optional(),\n queueActivatesOn: z.number().optional(),\n slug: z.string(),\n timeout: z.number().optional()\n});\n\nexport const RoomsConfig = z.array(RoomConfig);\n\n//Gatekeeper Options\nexport const GatekeeperOptions = z.object({\n debug: z.boolean().optional(),\n fallbackSlug: z.string().optional(),\n mode: z.string().optional(),\n timeout: z.number().optional(),\n trustOnFail: z.boolean().optional(),\n cookieName: z.string().optional(),\n liteValidator: z.boolean().optional(),\n roomsConfig: RoomsConfig.optional(), // Array of room configs\n waitingRoom: z.boolean().optional(),\n testError: z.object({\n statusCode: z.number(),\n message: z.string().optional(),\n }).optional(), // For testing error handling\n});\n\nexport const GatekeeperKeyPair = z.object({\n publicKey: z.string(),\n privateKey: z.string().optional(),\n});\n\n// Centralised list of CrowdHandler query-string parameter keys.\n// Used wherever ch-* params need to be detected or stripped.\nexport const CH_PARAM_KEYS: readonly string[] = [\n 'ch-code',\n 'ch-fresh',\n 'ch-id',\n 'ch-id-signature',\n 'ch-public-key',\n 'ch-requested',\n];\n\nexport const SpecialParametersObject = z.object({\n chCode: z.string(),\n chID: z.string(),\n chIDSignature: z.string(),\n chPublicKey: z.string(),\n chRequested: z.string(),\n});\n\n// Request configuration for session status API calls\nexport const SessionRequestConfig = z.object({\n agent: z.string().optional(),\n ip: z.string().optional(),\n lang: z.string().optional(),\n url: z.string().optional(),\n slug: z.string().optional(),\n // Allow custom parameters to be passed through\n custom: z.record(z.any()).optional(),\n});\n\nexport const ProcessURLResultObject = z.object({\n targetURL: z.string(),\n specialParameters: SpecialParametersObject,\n});\n\nexport const RequestObject = z\n .object({\n hostname: z.string(),\n path: z.string(),\n })\n .catchall(z.any());\n\n//Cookie object structure validation\nexport const CookieObject = z\n .object({\n tokens: z.array(z.any()),\n deployment: z.string().optional(),\n })\n .catchall(z.any());\n\nexport const LocalStorageObject = z.object({\n countdown: z.record(z.unknown()),\n positions: z.record(z.unknown()),\n token: z.record(z.string()),\n});\n\nexport const LocalStorageOptions = z.object({\n storageName: z.string(),\n localStorageValue: z.string(),\n});\n\n//Response structure validation\nexport const RoomMetaObject = z\n .object({\n domain: z.string().nullable(),\n patternType: z.string().nullable(),\n queueActivatesOn: z.string().nullable(),\n slug: z.string().nullable(),\n status: z.boolean().nullable(),\n timeout: z.number().nullable(),\n })\n .catchall(z.any());\n\nexport const SignatureObject = z.array(\n z.object({\n gen: z.string(),\n sig: z.string(),\n })\n);\n\nexport const SignatureResponseObject = z.object({\n expiration: z.nullable(z.boolean()),\n success: z.nullable(z.boolean()),\n});\n\nexport const SignatureSourceObject = z.object({\n chIDSignature: z.string().optional(),\n crowdhandlerCookieValue: CookieObject.optional(),\n});\n\nexport const ExtractTokenOptions = z.object({\n //object can contain anything and we don't know any of the possible values\n crowdhandlerCookieValue: CookieObject.optional(),\n chID: z.string().optional(),\n localStorageValue: LocalStorageObject.optional(),\n simpleCookieValue: z.string().optional(),\n});\n\nexport const TokenObject = z.object({\n token: z.string(),\n touched: z.number(),\n touchedSig: z.string(),\n signatures: z.array(z.any()),\n});\n\n\nexport const TokenObjectConstructor = z.object({\n tokenDatestamp: z.number(),\n tokenDatestampSignature: z.string(),\n tokenSignature: z.string(),\n tokenSignatureGenerated: z.string(),\n tokenSignatures: z.array(z.any()),\n tokenValue: z.string(),\n});\n\n// Custom parameters that can be passed to validateRequest\nexport const ValidateRequestParams = z.object({\n custom: z.record(z.any()).optional(),\n});\n\nexport const ValidateRequestObject = z.object({\n promoted: z.boolean(),\n stripParams: z.boolean(),\n setCookie: z.boolean(),\n cookieValue: z.string().optional(),\n setLocalStorage: z.boolean(),\n localStorageValue: z.string().optional(),\n responseID: z.string().optional(),\n slug: z.string().optional(),\n targetURL: z.string().optional(),\n deployment: z.string().optional(),\n hash: z.string().nullable().optional(),\n token: z.string().optional(),\n requested: z.string().optional(),\n liteValidatorRedirect: z.boolean().optional(),\n liteValidatorUrl: z.string().optional(),\n domain: z.string().optional(),\n error: z.object({\n message: z.string(),\n statusCode: z.number().optional(),\n code: z.string().optional(),\n }).optional(),\n});\n\nexport const HttpErrorWrapper = z.object({\n result: z.object({\n error: z.string().nullable(),\n status: z.number().nullable(),\n }),\n});\n\nexport const SessionStatusWrapper = z.object({\n result: z\n .object({\n hash: z.string().nullable().optional(),\n promoted: z.number().nullable(),\n status: z.number().nullable(),\n slug: z.string().nullable().optional(),\n token: z.string().nullable().optional(),\n urlRedirect: z.string().nullable().optional(),\n requested: z.string().nullable().optional(),\n })\n .catchall(z.any()),\n});\n\nexport const RecordPerformanceOptions = z.object({\n statusCode: z.number().optional().default(200),\n sample: z.number().optional().default(0.2),\n overrideElapsed: z.number().optional(),\n responseID: z.string().optional(),\n timeout: z.number().optional(),\n});\n\n// Mode constants\nexport const Modes = {\n FULL: 'full',\n HYBRID: 'hybrid',\n CLIENTSIDE: 'clientside',\n AUTO: 'auto'\n} as const;\n\nexport type Mode = typeof Modes[keyof typeof Modes];\n","import { ignoredPatternsCheck } from \"../common/ignoredPatternsCheck\";\nimport { z } from \"zod\";\nimport { RoomMetaObject } from \"../common/types\";\n\nexport class ConfigParse {\n private roomMeta = {\n domain: null,\n patternType: null,\n queueActivatesOn: null,\n slug: null,\n status: false,\n timeout: null,\n };\n private readonly config: Object[];\n private readonly host: string;\n private readonly path: string;\n private readonly patterns: RegExp;\n\n constructor(config: Object[], host: string, path: string, patterns: RegExp) {\n this.config = config;\n this.host = host;\n this.path = path;\n this.patterns = patterns;\n }\n\n patternEvaulation(item: any) {\n switch (item.patternType) {\n case \"regex\":\n let regex = new RegExp(item.urlPattern);\n return regex.test(this.path);\n break;\n\n case \"contains\":\n let contains = item.urlPattern;\n return this.path.includes(contains);\n break;\n\n case \"all\":\n return true;\n break;\n\n default:\n break;\n }\n }\n\n parse() {\n let staticAsset = ignoredPatternsCheck(this.path, this.patterns);\n\n if (staticAsset) {\n return RoomMetaObject.parse(this.roomMeta);\n }\n\n let filteredResults: any;\n filteredResults = this.config.filter((item: any) => {\n if (item.domain === `https://${this.host}`) {\n return item;\n }\n });\n\n\n for (const item of filteredResults) {\n if (this.patternEvaulation(item) === true) {\n //Populate the roomMeta object.\n //Use slug as a guard to make sure if we've already found a match we don't override it with weaker ones as we loop.\n if (this.roomMeta.slug === null) {\n this.roomMeta.domain = item.domain;\n this.roomMeta.patternType = item.patternType;\n this.roomMeta.queueActivatesOn = item.queueActivatesOn;\n this.roomMeta.slug = item.slug;\n this.roomMeta.status = true;\n this.roomMeta.timeout = item.timeout;\n }\n }\n }\n return RoomMetaObject.parse(this.roomMeta);\n }\n}\n","import { z } from \"zod\";\nimport { CH_PARAM_KEYS, RequestObject, SpecialParametersObject } from \"./types\";\nimport { logger } from \"./logger\";\n\nexport class ProcessURL {\n private host: string | undefined;\n private path: string | undefined;\n private rawQueryString: string | undefined;\n private specialParameters!: z.infer;\n private targetURL: string | undefined;\n debug: boolean;\n\n constructor(request: z.infer, debug: boolean = false) {\n this.host = request.getHost();\n this.path = request.getPath();\n this.specialParameters = {\n chCode: \"\",\n chID: \"\",\n chIDSignature: \"\",\n chPublicKey: \"\",\n chRequested: \"\",\n };\n\n this.debug = debug;\n }\n\n public parseURL() {\n if (!this.host) {\n logger(this.debug, \"warn\", \"No host found in request object.\");\n return {\n targetURL: \"\",\n specialParameters: this.specialParameters,\n };\n }\n\n if (!this.path) {\n logger(this.debug, \"warn\", \"No path found in request object.\");\n return {\n targetURL: \"\",\n specialParameters: this.specialParameters,\n };\n }\n\n // Extract raw query string from path (preserving original encoding)\n if (this.path.includes(\"?\")) {\n this.rawQueryString = this.path.split(\"?\")[1];\n }\n\n // Extract ch-* parameter values using regex (decode for actual use)\n const chCode = this.extractParamValue(\"ch-code\");\n const chID = this.extractParamValue(\"ch-id\");\n const chIDSignature = this.extractParamValue(\"ch-id-signature\");\n const chPublicKey = this.extractParamValue(\"ch-public-key\");\n const chRequested = this.extractParamValue(\"ch-requested\");\n\n // Set special parameters (with validation)\n this.specialParameters.chCode = this.sanitizeParam(chCode);\n this.specialParameters.chID = this.sanitizeParam(chID);\n this.specialParameters.chIDSignature = this.sanitizeParam(chIDSignature);\n this.specialParameters.chPublicKey = this.sanitizeParam(chPublicKey);\n this.specialParameters.chRequested = this.sanitizeParam(chRequested);\n\n // Remove ch-* params from query string while preserving everything else\n const processedQueryString = this.removeChParams(this.rawQueryString);\n\n // Extract path without query string\n const cleanPath = this.path.split(\"?\")[0];\n\n // Construct targetURL\n if (processedQueryString) {\n this.targetURL = encodeURIComponent(\n `https://${this.host}${cleanPath}?${processedQueryString}`\n );\n } else {\n this.targetURL = encodeURIComponent(`https://${this.host}${cleanPath}`);\n }\n\n return {\n targetURL: this.targetURL,\n specialParameters: this.specialParameters,\n };\n }\n\n /**\n * Extract a parameter value from the raw query string using regex.\n * Decodes the value for actual use.\n *\n * Treats `+` as a space before percent-decoding — this is the HTML\n * form-encoding convention used by URLSearchParams and the legacy\n * query-string library, and by every other CrowdHandler integration\n * (Cloudflare Worker, CloudFront). `decodeURIComponent` alone does not\n * do this. Keeping it consistent matters for signature validation: any\n * divergence in how the SDK and the edge decode ch-* values produces\n * mismatched signatures.\n */\n private extractParamValue(paramName: string): string {\n if (!this.rawQueryString) return \"\";\n\n // Match the parameter in the query string\n const regex = new RegExp(`(?:^|&)${paramName}=([^&]*)`, \"i\");\n const match = this.rawQueryString.match(regex);\n\n if (match && match[1]) {\n const normalized = match[1].replace(/\\+/g, \"%20\");\n try {\n return decodeURIComponent(normalized);\n } catch {\n // Malformed percent-encoding. Still honour the `+` → space convention\n // on the fallback path so output stays consistent with URLSearchParams.\n return match[1].replace(/\\+/g, \" \");\n }\n }\n return \"\";\n }\n\n /**\n * Sanitize a parameter value - return empty string for unusable values.\n */\n private sanitizeParam(value: string): string {\n if (!value || value === \"undefined\" || value === \"null\") {\n return \"\";\n }\n return value;\n }\n\n /**\n * Remove ch-* parameters from the query string while preserving\n * the original encoding of all other parameters.\n */\n private removeChParams(queryString: string | undefined): string {\n if (!queryString) return \"\";\n\n // Split into individual params, filter out ch-* params, rejoin\n const params = queryString.split(\"&\");\n const filteredParams = params.filter((param) => {\n const key = param.split(\"=\")[0];\n return !CH_PARAM_KEYS.includes(key.toLowerCase());\n });\n\n return filteredParams.join(\"&\");\n }\n}\n","import { sha256 } from \"js-sha256\";\n\nexport function generateSignature(input: string) {\n const hash = sha256(input);\n return hash;\n}\n","import {\n CookieObject,\n RequestObject,\n RoomMetaObject,\n SignatureObject,\n SignatureResponseObject,\n SpecialParametersObject,\n} from \"../common/types\";\nimport { generateSignature } from \"../common/hash\";\nimport { logger } from \"../common/logger\";\nimport { TypeOf, z } from \"zod\";\n\nexport class Signature {\n private readonly activeConfig: any;\n private hashedPrivateKey: string | undefined;\n private signatureType: string | undefined;\n private complexSignature: z.infer | undefined;\n private simpleSignature: string[];\n private freshSignature: boolean | undefined;\n private matchedSignature: string | undefined;\n private cookie: z.infer | undefined;\n private specialParameters: z.infer;\n private hashCandidates: string[] = [];\n private activeCookie: any;\n private token: string | undefined;\n private requested: string | undefined;\n private validationResponse: z.infer = {\n expiration: null,\n success: null,\n };\n debug: boolean;\n\n constructor(\n activeConfig: z.infer,\n hashedPrivateKey: string | undefined,\n signatureType: string | undefined,\n simpleSignature: string[] = [],\n complexSignature: z.infer | undefined,\n token: string | undefined,\n cookie: z.infer | undefined,\n requested: string | undefined,\n specialParameters: z.infer,\n debug: boolean = false\n ) {\n this.activeConfig = activeConfig;\n this.hashedPrivateKey = hashedPrivateKey;\n this.signatureType = signatureType;\n this.complexSignature = complexSignature;\n this.simpleSignature = simpleSignature;\n this.token = token;\n this.cookie = cookie;\n this.requested = requested;\n this.specialParameters = specialParameters;\n this.debug = debug;\n\n if (this.requested) {\n this.specialParameters.chRequested = this.requested;\n }\n\n if (this.specialParameters.chRequested) {\n this.freshSignature = true;\n } else {\n this.freshSignature = false;\n }\n }\n\n private getHashCandidates() {\n let generatedHistory = [];\n\n //Check that the cookie is in a format that we can work with\n try {\n if (this.cookie) {\n CookieObject.parse(this.cookie);\n\n if (!this.freshSignature && this.cookie) {\n this.activeCookie = this.cookie.tokens[this.cookie.tokens.length - 1];\n }\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n }\n\n if (this.simpleSignature && this.simpleSignature.length > 0) {\n this.hashCandidates.unshift(\n `${this.hashedPrivateKey}${this.activeConfig.slug}${this.activeConfig.queueActivatesOn}${this.token}${this.specialParameters.chRequested}`\n );\n } else if (this.complexSignature && this.complexSignature.length > 0) {\n //If we have a signature that is active, we can use that to generate the hash\n for (const item of this.complexSignature) {\n generatedHistory.unshift(item.gen);\n }\n\n //Generate possible hash candidates\n for (const item of generatedHistory) {\n this.hashCandidates.push(\n `${this.hashedPrivateKey}${this.activeConfig.slug}${this.activeConfig.queueActivatesOn}${this.token}${item}`\n );\n }\n } else {\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return;\n }\n }\n\n private hashValidation() {\n let requiredHash;\n if (this.freshSignature) {\n let requiredHash = generateSignature(this.hashCandidates[0]);\n if (this.simpleSignature.some((item) => item === requiredHash) === true) {\n this.matchedSignature = requiredHash;\n }\n } else if (this.complexSignature && this.complexSignature.length > 0) {\n for (const hash of this.hashCandidates) {\n let requiredHash = generateSignature(hash);\n if (\n this.complexSignature.some((item) => item.sig === requiredHash) ===\n true\n ) {\n this.matchedSignature = requiredHash;\n break;\n }\n }\n }\n\n //No signature matches found. Validation failed.\n if (!this.matchedSignature) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return;\n }\n }\n\n private hashExpiration() {\n function minutesSinceTokenCreated(datestamp: number) {\n //UTC\n const currentDatestamp = new Date().getTime();\n\n //Time passed since creation time in minutes\n let minutesPassed = (currentDatestamp - datestamp) / 1000 / 60;\n //One decimal place\n minutesPassed = Math.round(minutesPassed * 10) / 10;\n return minutesPassed;\n }\n\n //This will only be true if we're dealing with a request that has recently been promoted from the waiting room or lite-validator.\n if (this.freshSignature && this.specialParameters.chRequested) {\n if (\n minutesSinceTokenCreated(\n Date.parse(this.specialParameters.chRequested)\n ) < this.activeConfig.timeout\n ) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = true;\n return;\n }\n } else if (\n this.activeCookie &&\n this.activeCookie.touchedSig ===\n generateSignature(\n `${this.hashedPrivateKey}${this.activeCookie.touched}`\n ) &&\n minutesSinceTokenCreated(this.activeCookie.touched) <\n this.activeConfig.timeout\n ) {\n this.validationResponse.expiration = false;\n this.validationResponse.success = true;\n return;\n } else {\n //catch all\n this.validationResponse.expiration = true;\n this.validationResponse.success = false;\n return;\n }\n }\n\n public validateSignature() {\n try {\n this.getHashCandidates();\n\n if (this.validationResponse.success !== null) {\n return this.validationResponse;\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n\n try {\n this.hashValidation();\n\n if (this.validationResponse.success !== null) {\n return this.validationResponse;\n }\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n\n try {\n this.hashExpiration();\n\n return this.validationResponse;\n } catch (error: any) {\n logger(this.debug, \"error\", error);\n this.validationResponse.expiration = false;\n this.validationResponse.success = false;\n return this.validationResponse;\n }\n }\n}\n","import { z } from \"zod\";\nimport {\n SignatureObject,\n TokenObjectConstructor,\n TokenObject,\n} from \"../common/types\";\n\nexport class GenerateCookieObject {\n private tokenDatestamp: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenDatestamp\"];\n private tokenDatestampSignature: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenDatestampSignature\"];\n private tokenSignature: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignature\"];\n private tokenSignatureGenerated: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignatureGenerated\"];\n private tokenSignatures: z.infer<\n typeof TokenObjectConstructor\n >[\"tokenSignatures\"];\n private tokenValue: z.infer[\"tokenValue\"];\n\n constructor(tokenObjectProperties: z.infer) {\n this.tokenDatestamp = tokenObjectProperties.tokenDatestamp;\n this.tokenDatestampSignature =\n tokenObjectProperties.tokenDatestampSignature;\n this.tokenSignature = tokenObjectProperties.tokenSignature;\n this.tokenSignatureGenerated =\n tokenObjectProperties.tokenSignatureGenerated;\n this.tokenSignatures = tokenObjectProperties.tokenSignatures;\n this.tokenValue = tokenObjectProperties.tokenValue;\n }\n\n signatureObject() {\n let signatureObj: z.infer[0] = {\n gen: this.tokenSignatureGenerated,\n sig: this.tokenSignature,\n };\n\n return signatureObj;\n }\n\n tokenObject() {\n let tokenObj: z.infer = {\n token: this.tokenValue,\n touched: this.tokenDatestamp,\n touchedSig: this.tokenDatestampSignature,\n signatures: this.tokenSignatures,\n };\n\n return tokenObj;\n }\n}\n","//Get source IP address of the request in node.js\nimport { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getIP(request: any) {\n let ip = request.getHeader(\"x-forwarded-for\") || request.getUserHostAddress();\n if (ip.indexOf(\",\") > -1) {\n // If there are multiple IPs in the x-forwarded-for header,\n // get the client's IP address, not the proxy addresses\n const ips = ip.split(\",\");\n ip = ips[0].trim();\n }\n\n return ip;\n}\n","import { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getLang(request: any) {\n let lang: string | undefined;\n let langStr = request.getHeader(\"accept-language\");\n if (langStr) {\n lang = langStr;\n }\n return lang;\n}\n","import { z } from \"zod\";\n\n//Response structure validation\nconst RequestObject = z\n .object({\n headers: z.object({}).catchall(z.any()),\n })\n .catchall(z.any());\n\nexport function getUserAgent(request: any) {\n let userAgent: string | undefined;\n let userAgentStr = request.getHeader(\"user-agent\");\n if (userAgentStr) {\n userAgent = userAgentStr;\n }\n return userAgent;\n}\n","//Create a class that will be used to create a timer\nexport class Timer {\n timer: number;\n //Create a constructor that will be used to initialize the timer\n constructor() {\n //Initialize the timer\n this.timer = Date.now();\n }\n //Create a method that will be used to stop the timer\n elapsed() {\n //Stop the timer\n return Date.now() - this.timer;\n }\n}\n","import { ConfigParse } from \"./configParse\";\nimport { ProcessURL } from \"../common/processURL\";\nimport { Signature } from \"./signature\";\nimport { GenerateCookieObject } from \"./tokenObject\";\nimport { logger } from \"../common/logger\";\nimport { getIP } from \"../common/ipDiscover\";\nimport { getLang } from \"../common/languageDiscover\";\nimport { getUserAgent } from \"../common/userAgentDiscover\";\nimport { Timer } from \"../common/timer\";\nimport { ignoredPatternsCheck } from \"../common/ignoredPatternsCheck\";\nimport { isCloudflareWorkers } from \"../common/runtime\";\nimport \"../common/types\";\nimport { z } from \"zod\";\nimport {\n GatekeeperOptions,\n GatekeeperKeyPair,\n RoomMetaObject,\n CookieObject,\n SignatureObject,\n SpecialParametersObject,\n TokenObject,\n ValidateRequestObject,\n HttpErrorWrapper,\n SessionStatusWrapper,\n RecordPerformanceOptions,\n SignatureSourceObject,\n ExtractTokenOptions,\n LocalStorageObject,\n LocalStorageOptions,\n ProcessURLResultObject,\n RoomConfig,\n SessionRequestConfig,\n CH_PARAM_KEYS,\n} from \"../common/types\";\nimport { generateSignature } from \"../common/hash\";\n\nexport class Gatekeeper {\n public PublicClient;\n private WAIT_URL: string = \"https://wait.crowdhandler.com\";\n public readonly STORAGE_NAME: string;\n public readonly REQUEST: any;\n private ignore: RegExp =\n /^((?!.*\\?).*(\\.(avi|css|eot|gif|ico|jpg|jpeg|js|json|mov|mp4|mpeg|mpg|og[g|v]|pdf|png|svg|ttf|txt|wmv|woff|woff2|xml))$)/;\n private hashedPrivateKey!: string;\n private publicKey: string;\n private readonly privateKey: string | undefined;\n private options: any = {\n debug: false,\n fallbackSlug: \"\",\n mode: \"full\",\n timeout: 5000,\n trustOnFail: true,\n waitingRoom: false,\n };\n public activeConfig!: z.infer;\n public cookies: Array = [];\n public cookieValue: z.infer | undefined;\n public simpleCookieValue: string | undefined;\n public localStorageValue:\n | z.infer\n | null\n | undefined;\n public storageKey: string | undefined;\n //Signature can come in the form of a simple string or as an object /w meta data.\n private cookieSignatureObject: z.infer[0] | undefined;\n private cookieTokenObject: z.infer | undefined;\n private signatureType: string | undefined;\n private simpleSignature: string[] = [];\n private complexSignature: z.infer = [];\n public token!: string;\n public responseID: string | undefined;\n timer: Timer;\n public host!: string;\n public path!: string;\n public agent: string | undefined;\n public ip: string | undefined;\n public lang: string | undefined;\n public slug: string | undefined;\n public sessionStatus: z.infer | undefined;\n private requested: string | undefined;\n private deployment: string | undefined;\n private specialParameters: z.infer = {\n chCode: \"\",\n chID: \"\",\n chIDSignature: \"\",\n chPublicKey: \"\",\n chRequested: \"\",\n };\n public targetURL: string | undefined;\n\n constructor(\n PublicClient: any,\n request: any,\n keyPair: z.infer,\n options: z.infer\n ) {\n this.PublicClient = PublicClient;\n this.REQUEST = request;\n this.publicKey = keyPair.publicKey;\n this.privateKey = keyPair.privateKey;\n //Merge provided options with defaults\n this.options = Object.assign({}, this.options, options);\n \n // Set cookie name from options or use default\n this.STORAGE_NAME = this.options.cookieName || \"crowdhandler\";\n\n //Hash the private key if mode is set to hybrid\n //Check if privateKey is provided when mode is set to \"hybrid\"\n if (\n this.options.mode === \"hybrid\" &&\n (this.privateKey === undefined || this.privateKey === \"\")\n ) {\n throw new Error(\n \"privateKey must be provided when mode is set to 'hybrid'\"\n );\n }\n\n if (this.options.mode === \"hybrid\" && this.privateKey !== undefined) {\n try {\n this.hashedPrivateKey = generateSignature(this.privateKey);\n } catch (error: any) {\n logger(\n this.options.debug,\n \"Error generating private key hash: \",\n error\n );\n }\n }\n\n this.host = this.REQUEST.getHost();\n this.path = this.REQUEST.getPath();\n\n if (this.options.mode === \"full\" || this.options.mode === \"hybrid\") {\n this.ip = getIP(this.REQUEST);\n this.lang = getLang(this.REQUEST);\n this.agent = getUserAgent(this.REQUEST);\n }\n\n //Start the timer\n this.timer = new Timer();\n\n // Extract slug if this is a waiting room implementation\n if (this.options.waitingRoom) {\n this.extractSlugFromPath();\n }\n }\n\n //Set the host using your own method if you're not happy with the default\n /**\n * Override the request host for testing or special routing needs.\n * \n * @param {string} host - The host to use (e.g., 'example.com')\n */\n public overrideHost(host: string) {\n this.host = host;\n }\n\n //Set the path using your own method if you're not happy with the default\n public overridePath(path: string) {\n this.path = path;\n }\n\n //Set the IP using your own method if you're not happy with the default\n public overrideIP(ip: string) {\n this.ip = ip;\n }\n\n //Set the language using your own method if you're not happy with the default\n public overrideLang(lang: string) {\n this.lang = lang;\n }\n\n //Set the user agent using your own method if you're not happy with the default\n public overrideUserAgent(agent: string) {\n this.agent = agent;\n }\n\n //Set the cookie using your own method if you're not happy with the default\n public overrideCookie(cookie: Array) {\n this.cookies = cookie;\n }\n\n /**\n * Overrides the default CrowdHandler waiting room with your custom URL.\n * \n * @param {string} url - The custom waiting room URL\n * \n * @example\n * // Redirect to your custom queue page\n * gatekeeper.overrideWaitingRoomUrl('https://mysite.com/custom-queue');\n */\n public overrideWaitingRoomUrl(url: string) {\n this.WAIT_URL = url;\n }\n\n /* If you have your own regular expression for urls to ignore set it here\n * @param string $regExp Regular Expression\n */\n public setIgnoreUrls(regExp: RegExp) {\n this.ignore = regExp;\n }\n\n /*\n * Fetch the room config feed\n * @return object\n */\n public async getConfig() {\n let response = await this.PublicClient.rooms().get();\n\n let configParse = new ConfigParse(\n response.result,\n this.host,\n this.path,\n this.ignore\n );\n\n let result = configParse.parse();\n this.activeConfig = RoomMetaObject.parse(result);\n }\n\n /**\n * Retrieves the current session status using GET call if a token is available, or POST call otherwise.\n * @param {object} customParams - Optional custom parameters to include in the API request\n * @returns {Promise