Skip to content

Commit ecec761

Browse files
Merge pull request #9 from Crowdhandler/improvement/validateRequest-custom-parameters
Improvement/validate request custom parameters
2 parents 81a0aa9 + 5e57fa6 commit ecec761

21 files changed

Lines changed: 383 additions & 96 deletions

README.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,18 +130,32 @@ await gatekeeper.recordPerformance();
130130

131131
## Core Methods
132132

133-
### gatekeeper.validateRequest()
133+
### gatekeeper.validateRequest(params?)
134134

135135
The primary method for validating requests against CrowdHandler's queue system. This method determines whether a user should be granted access to your protected resource or sent to a waiting room.
136136

137137
```javascript
138+
// Basic usage
138139
const result = await gatekeeper.validateRequest();
140+
141+
// With custom parameters
142+
const result = await gatekeeper.validateRequest({
143+
custom: {
144+
code: 'ABC123',
145+
captcha: 'xK9mN2pQ5vL8wR3tY6uZ1aS4dF7gH0j'
146+
}
147+
});
139148
```
140149

150+
**Parameters:**
151+
152+
- `params` (optional) - Object containing custom parameters
153+
- `custom` - Object with any key-value pairs to send to the CrowdHandler API
154+
141155
**How it works:**
142156

143157
1. **Token Check**: First checks for an existing CrowdHandler session token in cookies
144-
2. **API Validation**: Sends the token (or generates a new one) to CrowdHandler's API
158+
2. **API Validation**: Sends the token (or generates a new one) to CrowdHandler's API, including any custom parameters
145159
3. **Queue Position**: Determines if the user is promoted based on current capacity
146160
4. **Response**: Returns instructions on how to handle the request
147161

dist/client/resource.js

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,28 @@ var __extends = (this && this.__extends) || (function () {
1414
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
1515
};
1616
})();
17+
var __assign = (this && this.__assign) || function () {
18+
__assign = Object.assign || function(t) {
19+
for (var s, i = 1, n = arguments.length; i < n; i++) {
20+
s = arguments[i];
21+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22+
t[p] = s[p];
23+
}
24+
return t;
25+
};
26+
return __assign.apply(this, arguments);
27+
};
28+
var __rest = (this && this.__rest) || function (s, e) {
29+
var t = {};
30+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
31+
t[p] = s[p];
32+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
33+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
34+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
35+
t[p[i]] = s[p[i]];
36+
}
37+
return t;
38+
};
1739
Object.defineProperty(exports, "__esModule", { value: true });
1840
exports.Resource = void 0;
1941
var base_client_1 = require("./base_client");
@@ -44,11 +66,19 @@ var Resource = /** @class */ (function (_super) {
4466
id = "";
4567
}
4668
this.path = this.formatPath(this.path, id);
47-
return _super.prototype.httpGET.call(this, this.path, params);
69+
// Extract custom parameters and spread them with other params
70+
var _a = params || {}, custom = _a.custom, standardParams = __rest(_a, ["custom"]);
71+
var requestParams = __assign(__assign({}, standardParams), custom // Spread custom parameters at the root level
72+
);
73+
return _super.prototype.httpGET.call(this, this.path, requestParams);
4874
};
4975
Resource.prototype.post = function (body) {
5076
this.path = this.formatPath(this.path, "");
51-
return _super.prototype.httpPOST.call(this, this.path, body);
77+
// Extract custom parameters and spread them with other body params
78+
var _a = body || {}, custom = _a.custom, standardBody = __rest(_a, ["custom"]);
79+
var requestBody = __assign(__assign({}, standardBody), custom // Spread custom parameters at the root level
80+
);
81+
return _super.prototype.httpPOST.call(this, this.path, requestBody);
5282
};
5383
Resource.prototype.put = function (id, body) {
5484
this.path = this.formatPath(this.path, id);

dist/common/types.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use strict";
22
Object.defineProperty(exports, "__esModule", { value: true });
3-
exports.Modes = exports.RecordPerformanceOptions = exports.SessionStatusWrapper = exports.HttpErrorWrapper = exports.ValidateRequestObject = 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.QueryObject = exports.GatekeeperKeyPair = exports.GatekeeperOptions = exports.RoomsConfig = exports.RoomConfig = void 0;
3+
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.QueryObject = exports.GatekeeperKeyPair = exports.GatekeeperOptions = exports.RoomsConfig = exports.RoomConfig = void 0;
44
var zod_1 = require("zod");
55
// Lite Validator types
66
exports.RoomConfig = zod_1.z.object({
@@ -52,6 +52,8 @@ exports.SessionRequestConfig = zod_1.z.object({
5252
lang: zod_1.z.string().optional(),
5353
url: zod_1.z.string().optional(),
5454
slug: zod_1.z.string().optional(),
55+
// Allow custom parameters to be passed through
56+
custom: zod_1.z.record(zod_1.z.any()).optional(),
5557
});
5658
exports.ProcessURLResultObject = zod_1.z.object({
5759
targetURL: zod_1.z.string(),
@@ -123,6 +125,10 @@ exports.TokenObjectConstructor = zod_1.z.object({
123125
tokenSignatures: zod_1.z.array(zod_1.z.any()),
124126
tokenValue: zod_1.z.string(),
125127
});
128+
// Custom parameters that can be passed to validateRequest
129+
exports.ValidateRequestParams = zod_1.z.object({
130+
custom: zod_1.z.record(zod_1.z.any()).optional(),
131+
});
126132
exports.ValidateRequestObject = zod_1.z.object({
127133
promoted: zod_1.z.boolean(),
128134
stripParams: zod_1.z.boolean(),

dist/crowdhandler.cjs.js

Lines changed: 61 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/crowdhandler.cjs.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)