@thirdweb-dev/service-utils 0.9.4 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/core/api.js.map +1 -1
- package/dist/cjs/core/rateLimit/index.js +16 -37
- package/dist/cjs/core/rateLimit/index.js.map +1 -1
- package/dist/cjs/core/rateLimit/strategies/shared.js +3 -0
- package/dist/cjs/core/rateLimit/strategies/shared.js.map +1 -0
- package/dist/cjs/core/rateLimit/strategies/sliding-window.js +51 -0
- package/dist/cjs/core/rateLimit/strategies/sliding-window.js.map +1 -0
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/mocks.js +5 -0
- package/dist/cjs/mocks.js.map +1 -1
- package/dist/esm/core/api.js.map +1 -1
- package/dist/esm/core/rateLimit/index.js +16 -37
- package/dist/esm/core/rateLimit/index.js.map +1 -1
- package/dist/esm/core/rateLimit/strategies/shared.js +2 -0
- package/dist/esm/core/rateLimit/strategies/shared.js.map +1 -0
- package/dist/esm/core/rateLimit/strategies/sliding-window.js +48 -0
- package/dist/esm/core/rateLimit/strategies/sliding-window.js.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/mocks.js +5 -0
- package/dist/esm/mocks.js.map +1 -1
- package/dist/types/core/api.d.ts +5 -0
- package/dist/types/core/api.d.ts.map +1 -1
- package/dist/types/core/rateLimit/index.d.ts +1 -6
- package/dist/types/core/rateLimit/index.d.ts.map +1 -1
- package/dist/types/core/rateLimit/strategies/shared.d.ts +11 -0
- package/dist/types/core/rateLimit/strategies/shared.d.ts.map +1 -0
- package/dist/types/core/rateLimit/strategies/sliding-window.d.ts +19 -0
- package/dist/types/core/rateLimit/strategies/sliding-window.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/mocks.d.ts.map +1 -1
- package/package.json +6 -6
package/dist/cjs/core/api.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/core/api.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/core/api.ts"],"names":[],"mappings":";;AAsOA,kDAqDC;AArDM,KAAK,UAAU,mBAAmB,CACvC,QAA4B,EAC5B,MAAyB;IAEzB,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,GAAG,QAAQ,CAAC;IAE7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,IAAI,KAA0B,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpE,mFAAmF;oBACnF,uFAAuF;oBACvF,mBAAmB,EAAE,qBAAqB;wBACxC,CAAC,CAAC,qBAAqB;wBACvB,CAAC,CAAC,aAAa;oBACjB,cAAc,EAAE,kBAAkB;iBACnC;aACF,CAAC,CAAC;YAEH,qGAAqG;YAErG,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CACb,yCAAyC,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,KAAK,GAAG,GAAG,CAAC;YACZ,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC;gBACvB,0DAA0D;gBAC1D,MAAM,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,KAAK,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,GAAW;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CACvD,CAAC;AACJ,CAAC"}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.rateLimit = rateLimit;
|
4
|
+
const sliding_window_js_1 = require("./strategies/sliding-window.js");
|
4
5
|
const SLIDING_WINDOW_SECONDS = 10;
|
5
6
|
/**
|
6
7
|
* Increments the request count for this team and returns whether the team has hit their rate limit.
|
@@ -11,51 +12,29 @@ const SLIDING_WINDOW_SECONDS = 10;
|
|
11
12
|
async function rateLimit(args) {
|
12
13
|
const { team, limitPerSecond, serviceConfig, redis, increment = 1 } = args;
|
13
14
|
const { serviceScope } = serviceConfig;
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
const currentSecond = Math.floor(Date.now() / 1000);
|
24
|
-
const keys = Array.from({ length: SLIDING_WINDOW_SECONDS }, (_, i) => getRequestCountAtSecondCacheKey(serviceScope, team.id, currentSecond - i));
|
25
|
-
const counts = await redis.mget(keys);
|
26
|
-
const totalCount = counts.reduce((sum, count) => sum + (count ? Number.parseInt(count) : 0), 0);
|
27
|
-
const limitPerWindow = limitPerSecond * SLIDING_WINDOW_SECONDS;
|
28
|
-
if (totalCount > limitPerWindow) {
|
15
|
+
const rateLimitResult = await (0, sliding_window_js_1.rateLimitSlidingWindow)({
|
16
|
+
redis,
|
17
|
+
limitPerSecond,
|
18
|
+
key: `rate-limit:${serviceScope}:${team.id}`,
|
19
|
+
increment,
|
20
|
+
windowSeconds: SLIDING_WINDOW_SECONDS,
|
21
|
+
});
|
22
|
+
// if the request is rate limited, return the rate limit result.
|
23
|
+
if (rateLimitResult.rateLimited) {
|
29
24
|
return {
|
30
25
|
rateLimited: true,
|
31
|
-
requestCount:
|
32
|
-
rateLimit:
|
26
|
+
requestCount: rateLimitResult.requestCount,
|
27
|
+
rateLimit: rateLimitResult.rateLimit,
|
33
28
|
status: 429,
|
34
|
-
errorMessage: `You've exceeded your ${serviceScope} rate limit at ${limitPerSecond}
|
29
|
+
errorMessage: `You've exceeded your ${serviceScope} rate limit at ${limitPerSecond} requests per second. Please upgrade your plan to increase your limits: https://thirdweb.com/team/${team.slug}/~/settings/billing`,
|
35
30
|
errorCode: "RATE_LIMIT_EXCEEDED",
|
36
31
|
};
|
37
32
|
}
|
38
|
-
//
|
39
|
-
(async () => {
|
40
|
-
try {
|
41
|
-
const key = getRequestCountAtSecondCacheKey(serviceScope, team.id, currentSecond);
|
42
|
-
await redis.incrby(key, increment);
|
43
|
-
// If this is the first time setting this key, expire it after the sliding window is past.
|
44
|
-
if (counts[0] === null) {
|
45
|
-
await redis.expire(key, SLIDING_WINDOW_SECONDS + 1);
|
46
|
-
}
|
47
|
-
}
|
48
|
-
catch (error) {
|
49
|
-
console.error("Error updating rate limit key:", error);
|
50
|
-
}
|
51
|
-
})();
|
33
|
+
// otherwise, the request is not rate limited.
|
52
34
|
return {
|
53
35
|
rateLimited: false,
|
54
|
-
requestCount:
|
55
|
-
rateLimit:
|
36
|
+
requestCount: rateLimitResult.requestCount,
|
37
|
+
rateLimit: rateLimitResult.rateLimit,
|
56
38
|
};
|
57
39
|
}
|
58
|
-
function getRequestCountAtSecondCacheKey(serviceScope, teamId, second) {
|
59
|
-
return `rate-limit:${serviceScope}:${teamId}:${second}`;
|
60
|
-
}
|
61
40
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/rateLimit/index.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/rateLimit/index.ts"],"names":[],"mappings":";;AAaA,8BAuCC;AAlDD,sEAAwE;AAGxE,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC;;;;;GAKG;AACI,KAAK,UAAU,SAAS,CAAC,IAU/B;IACC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IAC3E,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC;IAEvC,MAAM,eAAe,GAAG,MAAM,IAAA,0CAAsB,EAAC;QACnD,KAAK;QACL,cAAc;QACd,GAAG,EAAE,cAAc,YAAY,IAAI,IAAI,CAAC,EAAE,EAAE;QAC5C,SAAS;QACT,aAAa,EAAE,sBAAsB;KACtC,CAAC,CAAC;IAEH,gEAAgE;IAChE,IAAI,eAAe,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,eAAe,CAAC,YAAY;YAC1C,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,MAAM,EAAE,GAAG;YACX,YAAY,EAAE,wBAAwB,YAAY,kBAAkB,cAAc,qGAAqG,IAAI,CAAC,IAAI,qBAAqB;YACrN,SAAS,EAAE,qBAAqB;SACjC,CAAC;IACJ,CAAC;IACD,8CAA8C;IAC9C,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,eAAe,CAAC,YAAY;QAC1C,SAAS,EAAE,eAAe,CAAC,SAAS;KACrC,CAAC;AACJ,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../src/core/rateLimit/strategies/shared.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.rateLimitSlidingWindow = rateLimitSlidingWindow;
|
4
|
+
async function rateLimitSlidingWindow(options) {
|
5
|
+
const WINDOW_SIZE = options.windowSeconds || 10;
|
6
|
+
const INCREMENT_BY = options.increment || 1;
|
7
|
+
// No rate limit is provided. Assume the request is not rate limited.
|
8
|
+
if (options.limitPerSecond <= 0) {
|
9
|
+
return {
|
10
|
+
rateLimited: false,
|
11
|
+
requestCount: INCREMENT_BY,
|
12
|
+
rateLimit: 0,
|
13
|
+
};
|
14
|
+
}
|
15
|
+
// Enforce rate limit: sum the total requests in the last `SLIDING_WINDOW_SECONDS` seconds.
|
16
|
+
const currentSecond = Math.floor(Date.now() / 1000);
|
17
|
+
const keys = Array.from({ length: WINDOW_SIZE }, (_, i) => getRequestCountAtSecondCacheKey(options.key, currentSecond - i));
|
18
|
+
const counts = await options.redis.mget(keys);
|
19
|
+
const totalCount = counts.reduce((sum, count) => sum + (count ? Number.parseInt(count) : 0), 0);
|
20
|
+
const limitPerWindow = options.limitPerSecond * WINDOW_SIZE;
|
21
|
+
if (totalCount > limitPerWindow) {
|
22
|
+
return {
|
23
|
+
rateLimited: true,
|
24
|
+
requestCount: totalCount,
|
25
|
+
rateLimit: limitPerWindow,
|
26
|
+
};
|
27
|
+
}
|
28
|
+
// Non-blocking: increment the request count for the current second.
|
29
|
+
(async () => {
|
30
|
+
try {
|
31
|
+
const incrKey = getRequestCountAtSecondCacheKey(options.key, currentSecond);
|
32
|
+
await options.redis.incrby(incrKey, INCREMENT_BY);
|
33
|
+
// If this is the first time setting this key, expire it after the sliding window is past.
|
34
|
+
if (counts[0] === null) {
|
35
|
+
await options.redis.expire(incrKey, WINDOW_SIZE + 1);
|
36
|
+
}
|
37
|
+
}
|
38
|
+
catch (error) {
|
39
|
+
console.error("Error updating rate limit key:", error);
|
40
|
+
}
|
41
|
+
})();
|
42
|
+
return {
|
43
|
+
rateLimited: false,
|
44
|
+
requestCount: totalCount + INCREMENT_BY,
|
45
|
+
rateLimit: limitPerWindow,
|
46
|
+
};
|
47
|
+
}
|
48
|
+
function getRequestCountAtSecondCacheKey(key, second) {
|
49
|
+
return `${key}:s_${second}`;
|
50
|
+
}
|
51
|
+
//# sourceMappingURL=sliding-window.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sliding-window.js","sourceRoot":"","sources":["../../../../../src/core/rateLimit/strategies/sliding-window.ts"],"names":[],"mappings":";;AAkBA,wDA0DC;AA1DM,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;IAE5C,qEAAqE;IACrE,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,YAAY;YAC1B,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,2FAA2F;IAC3F,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACxD,+BAA+B,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,CAAC,CAAC,CAChE,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAC9B,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1D,CAAC,CACF,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,WAAW,CAAC;IAE5D,IAAI,UAAU,GAAG,cAAc,EAAE,CAAC;QAChC,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,UAAU;YACxB,SAAS,EAAE,cAAc;SAC1B,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,CAAC,KAAK,IAAI,EAAE;QACV,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,+BAA+B,CAC7C,OAAO,CAAC,GAAG,EACX,aAAa,CACd,CAAC;YACF,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAClD,0FAA0F;YAC1F,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvB,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,UAAU,GAAG,YAAY;QACvC,SAAS,EAAE,cAAc;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CAAC,GAAW,EAAE,MAAc;IAClE,OAAO,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;AAC9B,CAAC"}
|
package/dist/cjs/index.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.authorizeDomain = exports.authorizeBundleId = exports.fetchTeamAndProject = void 0;
|
3
|
+
exports.rateLimit = exports.rateLimitSlidingWindow = exports.authorizeDomain = exports.authorizeBundleId = exports.fetchTeamAndProject = void 0;
|
4
4
|
const tslib_1 = require("tslib");
|
5
5
|
// Exports the public service definitions.
|
6
6
|
tslib_1.__exportStar(require("./core/services.js"), exports);
|
@@ -9,4 +9,8 @@ Object.defineProperty(exports, "fetchTeamAndProject", { enumerable: true, get: f
|
|
9
9
|
var client_js_1 = require("./core/authorize/client.js");
|
10
10
|
Object.defineProperty(exports, "authorizeBundleId", { enumerable: true, get: function () { return client_js_1.authorizeBundleId; } });
|
11
11
|
Object.defineProperty(exports, "authorizeDomain", { enumerable: true, get: function () { return client_js_1.authorizeDomain; } });
|
12
|
+
var sliding_window_js_1 = require("./core/rateLimit/strategies/sliding-window.js");
|
13
|
+
Object.defineProperty(exports, "rateLimitSlidingWindow", { enumerable: true, get: function () { return sliding_window_js_1.rateLimitSlidingWindow; } });
|
14
|
+
var index_js_1 = require("./core/rateLimit/index.js");
|
15
|
+
Object.defineProperty(exports, "rateLimit", { enumerable: true, get: function () { return index_js_1.rateLimit; } });
|
12
16
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,0CAA0C;AAC1C,6DAAmC;AAenC,wCAAoD;AAA3C,6GAAA,mBAAmB,OAAA;AAE5B,wDAGoC;AAFlC,8GAAA,iBAAiB,OAAA;AACjB,4GAAA,eAAe,OAAA"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,0CAA0C;AAC1C,6DAAmC;AAenC,wCAAoD;AAA3C,6GAAA,mBAAmB,OAAA;AAE5B,wDAGoC;AAFlC,8GAAA,iBAAiB,OAAA;AACjB,4GAAA,eAAe,OAAA;AAGjB,mFAAuF;AAA9E,2HAAA,sBAAsB,OAAA;AAC/B,sDAAsD;AAA7C,qGAAA,SAAS,OAAA"}
|
package/dist/cjs/mocks.js
CHANGED
package/dist/cjs/mocks.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../src/mocks.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../src/mocks.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/core/api.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/core/api.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/core/api.ts"],"names":[],"mappings":"AAsOA,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAA4B,EAC5B,MAAyB;IAEzB,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,GAAG,QAAQ,CAAC;IAE7D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,IAAI,KAA0B,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpE,mFAAmF;oBACnF,uFAAuF;oBACvF,mBAAmB,EAAE,qBAAqB;wBACxC,CAAC,CAAC,qBAAqB;wBACvB,CAAC,CAAC,aAAa;oBACjB,cAAc,EAAE,kBAAkB;iBACnC;aACF,CAAC,CAAC;YAEH,qGAAqG;YAErG,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CACb,yCAAyC,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,KAAK,GAAG,GAAG,CAAC;YACZ,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC;gBACvB,0DAA0D;gBAC1D,MAAM,aAAa,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,KAAK,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW,EAAE,GAAW;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CACvD,CAAC;AACJ,CAAC"}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { rateLimitSlidingWindow } from "./strategies/sliding-window.js";
|
1
2
|
const SLIDING_WINDOW_SECONDS = 10;
|
2
3
|
/**
|
3
4
|
* Increments the request count for this team and returns whether the team has hit their rate limit.
|
@@ -8,51 +9,29 @@ const SLIDING_WINDOW_SECONDS = 10;
|
|
8
9
|
export async function rateLimit(args) {
|
9
10
|
const { team, limitPerSecond, serviceConfig, redis, increment = 1 } = args;
|
10
11
|
const { serviceScope } = serviceConfig;
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
const currentSecond = Math.floor(Date.now() / 1000);
|
21
|
-
const keys = Array.from({ length: SLIDING_WINDOW_SECONDS }, (_, i) => getRequestCountAtSecondCacheKey(serviceScope, team.id, currentSecond - i));
|
22
|
-
const counts = await redis.mget(keys);
|
23
|
-
const totalCount = counts.reduce((sum, count) => sum + (count ? Number.parseInt(count) : 0), 0);
|
24
|
-
const limitPerWindow = limitPerSecond * SLIDING_WINDOW_SECONDS;
|
25
|
-
if (totalCount > limitPerWindow) {
|
12
|
+
const rateLimitResult = await rateLimitSlidingWindow({
|
13
|
+
redis,
|
14
|
+
limitPerSecond,
|
15
|
+
key: `rate-limit:${serviceScope}:${team.id}`,
|
16
|
+
increment,
|
17
|
+
windowSeconds: SLIDING_WINDOW_SECONDS,
|
18
|
+
});
|
19
|
+
// if the request is rate limited, return the rate limit result.
|
20
|
+
if (rateLimitResult.rateLimited) {
|
26
21
|
return {
|
27
22
|
rateLimited: true,
|
28
|
-
requestCount:
|
29
|
-
rateLimit:
|
23
|
+
requestCount: rateLimitResult.requestCount,
|
24
|
+
rateLimit: rateLimitResult.rateLimit,
|
30
25
|
status: 429,
|
31
|
-
errorMessage: `You've exceeded your ${serviceScope} rate limit at ${limitPerSecond}
|
26
|
+
errorMessage: `You've exceeded your ${serviceScope} rate limit at ${limitPerSecond} requests per second. Please upgrade your plan to increase your limits: https://thirdweb.com/team/${team.slug}/~/settings/billing`,
|
32
27
|
errorCode: "RATE_LIMIT_EXCEEDED",
|
33
28
|
};
|
34
29
|
}
|
35
|
-
//
|
36
|
-
(async () => {
|
37
|
-
try {
|
38
|
-
const key = getRequestCountAtSecondCacheKey(serviceScope, team.id, currentSecond);
|
39
|
-
await redis.incrby(key, increment);
|
40
|
-
// If this is the first time setting this key, expire it after the sliding window is past.
|
41
|
-
if (counts[0] === null) {
|
42
|
-
await redis.expire(key, SLIDING_WINDOW_SECONDS + 1);
|
43
|
-
}
|
44
|
-
}
|
45
|
-
catch (error) {
|
46
|
-
console.error("Error updating rate limit key:", error);
|
47
|
-
}
|
48
|
-
})();
|
30
|
+
// otherwise, the request is not rate limited.
|
49
31
|
return {
|
50
32
|
rateLimited: false,
|
51
|
-
requestCount:
|
52
|
-
rateLimit:
|
33
|
+
requestCount: rateLimitResult.requestCount,
|
34
|
+
rateLimit: rateLimitResult.rateLimit,
|
53
35
|
};
|
54
36
|
}
|
55
|
-
function getRequestCountAtSecondCacheKey(serviceScope, teamId, second) {
|
56
|
-
return `rate-limit:${serviceScope}:${teamId}:${second}`;
|
57
|
-
}
|
58
37
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/rateLimit/index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/rateLimit/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAGxE,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAU/B;IACC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IAC3E,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC;IAEvC,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC;QACnD,KAAK;QACL,cAAc;QACd,GAAG,EAAE,cAAc,YAAY,IAAI,IAAI,CAAC,EAAE,EAAE;QAC5C,SAAS;QACT,aAAa,EAAE,sBAAsB;KACtC,CAAC,CAAC;IAEH,gEAAgE;IAChE,IAAI,eAAe,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,eAAe,CAAC,YAAY;YAC1C,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,MAAM,EAAE,GAAG;YACX,YAAY,EAAE,wBAAwB,YAAY,kBAAkB,cAAc,qGAAqG,IAAI,CAAC,IAAI,qBAAqB;YACrN,SAAS,EAAE,qBAAqB;SACjC,CAAC;IACJ,CAAC;IACD,8CAA8C;IAC9C,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,eAAe,CAAC,YAAY;QAC1C,SAAS,EAAE,eAAe,CAAC,SAAS;KACrC,CAAC;AACJ,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../src/core/rateLimit/strategies/shared.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
export async function rateLimitSlidingWindow(options) {
|
2
|
+
const WINDOW_SIZE = options.windowSeconds || 10;
|
3
|
+
const INCREMENT_BY = options.increment || 1;
|
4
|
+
// No rate limit is provided. Assume the request is not rate limited.
|
5
|
+
if (options.limitPerSecond <= 0) {
|
6
|
+
return {
|
7
|
+
rateLimited: false,
|
8
|
+
requestCount: INCREMENT_BY,
|
9
|
+
rateLimit: 0,
|
10
|
+
};
|
11
|
+
}
|
12
|
+
// Enforce rate limit: sum the total requests in the last `SLIDING_WINDOW_SECONDS` seconds.
|
13
|
+
const currentSecond = Math.floor(Date.now() / 1000);
|
14
|
+
const keys = Array.from({ length: WINDOW_SIZE }, (_, i) => getRequestCountAtSecondCacheKey(options.key, currentSecond - i));
|
15
|
+
const counts = await options.redis.mget(keys);
|
16
|
+
const totalCount = counts.reduce((sum, count) => sum + (count ? Number.parseInt(count) : 0), 0);
|
17
|
+
const limitPerWindow = options.limitPerSecond * WINDOW_SIZE;
|
18
|
+
if (totalCount > limitPerWindow) {
|
19
|
+
return {
|
20
|
+
rateLimited: true,
|
21
|
+
requestCount: totalCount,
|
22
|
+
rateLimit: limitPerWindow,
|
23
|
+
};
|
24
|
+
}
|
25
|
+
// Non-blocking: increment the request count for the current second.
|
26
|
+
(async () => {
|
27
|
+
try {
|
28
|
+
const incrKey = getRequestCountAtSecondCacheKey(options.key, currentSecond);
|
29
|
+
await options.redis.incrby(incrKey, INCREMENT_BY);
|
30
|
+
// If this is the first time setting this key, expire it after the sliding window is past.
|
31
|
+
if (counts[0] === null) {
|
32
|
+
await options.redis.expire(incrKey, WINDOW_SIZE + 1);
|
33
|
+
}
|
34
|
+
}
|
35
|
+
catch (error) {
|
36
|
+
console.error("Error updating rate limit key:", error);
|
37
|
+
}
|
38
|
+
})();
|
39
|
+
return {
|
40
|
+
rateLimited: false,
|
41
|
+
requestCount: totalCount + INCREMENT_BY,
|
42
|
+
rateLimit: limitPerWindow,
|
43
|
+
};
|
44
|
+
}
|
45
|
+
function getRequestCountAtSecondCacheKey(key, second) {
|
46
|
+
return `${key}:s_${second}`;
|
47
|
+
}
|
48
|
+
//# sourceMappingURL=sliding-window.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sliding-window.js","sourceRoot":"","sources":["../../../../../src/core/rateLimit/strategies/sliding-window.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAsC;IAEtC,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;IAChD,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;IAE5C,qEAAqE;IACrE,IAAI,OAAO,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,WAAW,EAAE,KAAK;YAClB,YAAY,EAAE,YAAY;YAC1B,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,2FAA2F;IAC3F,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACxD,+BAA+B,CAAC,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,CAAC,CAAC,CAChE,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAC9B,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1D,CAAC,CACF,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,WAAW,CAAC;IAE5D,IAAI,UAAU,GAAG,cAAc,EAAE,CAAC;QAChC,OAAO;YACL,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,UAAU;YACxB,SAAS,EAAE,cAAc;SAC1B,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,CAAC,KAAK,IAAI,EAAE;QACV,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,+BAA+B,CAC7C,OAAO,CAAC,GAAG,EACX,aAAa,CACd,CAAC;YACF,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAClD,0FAA0F;YAC1F,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvB,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,YAAY,EAAE,UAAU,GAAG,YAAY;QACvC,SAAS,EAAE,cAAc;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CAAC,GAAW,EAAE,MAAc;IAClE,OAAO,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;AAC9B,CAAC"}
|
package/dist/esm/index.js
CHANGED
@@ -2,4 +2,6 @@
|
|
2
2
|
export * from "./core/services.js";
|
3
3
|
export { fetchTeamAndProject } from "./core/api.js";
|
4
4
|
export { authorizeBundleId, authorizeDomain, } from "./core/authorize/client.js";
|
5
|
+
export { rateLimitSlidingWindow } from "./core/rateLimit/strategies/sliding-window.js";
|
6
|
+
export { rateLimit } from "./core/rateLimit/index.js";
|
5
7
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,cAAc,oBAAoB,CAAC;AAenC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,4BAA4B,CAAC"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,cAAc,oBAAoB,CAAC;AAenC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/esm/mocks.js
CHANGED
package/dist/esm/mocks.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../src/mocks.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"mocks.js","sourceRoot":"","sources":["../../src/mocks.ts"],"names":[],"mappings":"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"}
|
package/dist/types/core/api.d.ts
CHANGED
@@ -72,6 +72,11 @@ type TeamCapabilities = {
|
|
72
72
|
customAuth: boolean;
|
73
73
|
customBranding: boolean;
|
74
74
|
};
|
75
|
+
engineCloud: {
|
76
|
+
enabled: boolean;
|
77
|
+
mainnetEnabled: boolean;
|
78
|
+
rateLimit: number;
|
79
|
+
};
|
75
80
|
};
|
76
81
|
type TeamPlan = "free" | "starter" | "starter_legacy" | "growth_legacy" | "growth" | "accelerate" | "scale" | "pro";
|
77
82
|
export type TeamResponse = {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/core/api.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/core/api.ts"],"names":[],"mappings":"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"}
|
@@ -1,10 +1,6 @@
|
|
1
1
|
import type { CoreServiceConfig, TeamResponse } from "../api.js";
|
2
|
+
import type { IRedis } from "./strategies/shared.js";
|
2
3
|
import type { RateLimitResult } from "./types.js";
|
3
|
-
type IRedis = {
|
4
|
-
incrby(key: string, value: number): Promise<number>;
|
5
|
-
mget(keys: string[]): Promise<(string | null)[]>;
|
6
|
-
expire(key: string, seconds: number): Promise<number>;
|
7
|
-
};
|
8
4
|
/**
|
9
5
|
* Increments the request count for this team and returns whether the team has hit their rate limit.
|
10
6
|
* Uses a sliding 10 second window.
|
@@ -22,5 +18,4 @@ export declare function rateLimit(args: {
|
|
22
18
|
*/
|
23
19
|
increment?: number;
|
24
20
|
}): Promise<RateLimitResult>;
|
25
|
-
export {};
|
26
21
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/rateLimit/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/rateLimit/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,iBAAiB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,eAAe,CAAC,CA6B3B"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
export type IRedis = {
|
2
|
+
incrby(key: string, value: number): Promise<number>;
|
3
|
+
mget(keys: string[]): Promise<(string | null)[]>;
|
4
|
+
expire(key: string, seconds: number): Promise<number>;
|
5
|
+
};
|
6
|
+
export type CoreRateLimitResult = {
|
7
|
+
rateLimited: boolean;
|
8
|
+
requestCount: number;
|
9
|
+
rateLimit: number;
|
10
|
+
};
|
11
|
+
//# sourceMappingURL=shared.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../../src/core/rateLimit/strategies/shared.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,MAAM,GAAG;IACnB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import type { CoreRateLimitResult, IRedis } from "./shared.js";
|
2
|
+
type RateLimitSlidingWindowOptions = {
|
3
|
+
redis: IRedis;
|
4
|
+
limitPerSecond: number;
|
5
|
+
key: string;
|
6
|
+
/**
|
7
|
+
* The number of requests to increment by.
|
8
|
+
* @default 1
|
9
|
+
*/
|
10
|
+
increment?: number;
|
11
|
+
/**
|
12
|
+
* The number of seconds to look back for the sliding window.
|
13
|
+
* @default 10
|
14
|
+
*/
|
15
|
+
windowSeconds?: number;
|
16
|
+
};
|
17
|
+
export declare function rateLimitSlidingWindow(options: RateLimitSlidingWindowOptions): Promise<CoreRateLimitResult>;
|
18
|
+
export {};
|
19
|
+
//# sourceMappingURL=sliding-window.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sliding-window.d.ts","sourceRoot":"","sources":["../../../../../src/core/rateLimit/strategies/sliding-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE/D,KAAK,6BAA6B,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,mBAAmB,CAAC,CAwD9B"}
|
package/dist/types/index.d.ts
CHANGED
@@ -2,4 +2,6 @@ export * from "./core/services.js";
|
|
2
2
|
export type { ApiResponse, CoreServiceConfig, PolicyResult, UserOpData, ProjectResponse, ProjectSecretKey, ProjectBundlerService, ProjectService, TeamAndProjectResponse, TeamResponse, ProjectEmbeddedWalletsService, } from "./core/api.js";
|
3
3
|
export { fetchTeamAndProject } from "./core/api.js";
|
4
4
|
export { authorizeBundleId, authorizeDomain, } from "./core/authorize/client.js";
|
5
|
+
export { rateLimitSlidingWindow } from "./core/rateLimit/strategies/sliding-window.js";
|
6
|
+
export { rateLimit } from "./core/rateLimit/index.js";
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,oBAAoB,CAAC;AACnC,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,4BAA4B,CAAC"}
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,oBAAoB,CAAC;AACnC,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,YAAY,EACZ,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACb,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,oBAAoB,EAAE,eAoClC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,
|
1
|
+
{"version":3,"file":"mocks.d.ts","sourceRoot":"","sources":["../../src/mocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACb,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,oBAAoB,EAAE,eAoClC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,YAuD/B,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,sBAIzC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,iBAKhC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,iBAIvC,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@thirdweb-dev/service-utils",
|
3
|
-
"version": "0.9.
|
3
|
+
"version": "0.9.5",
|
4
4
|
"type": "module",
|
5
5
|
"main": "dist/cjs/index.js",
|
6
6
|
"module": "dist/esm/index.js",
|
@@ -45,15 +45,15 @@
|
|
45
45
|
],
|
46
46
|
"sideEffects": false,
|
47
47
|
"dependencies": {
|
48
|
-
"@confluentinc/kafka-javascript": "
|
48
|
+
"@confluentinc/kafka-javascript": "1.3.0",
|
49
49
|
"aws4fetch": "1.0.20",
|
50
|
-
"zod": "3.24.
|
50
|
+
"zod": "3.24.3"
|
51
51
|
},
|
52
52
|
"devDependencies": {
|
53
|
-
"@cloudflare/workers-types": "4.
|
54
|
-
"@types/node": "22.14.
|
53
|
+
"@cloudflare/workers-types": "4.20250421.0",
|
54
|
+
"@types/node": "22.14.1",
|
55
55
|
"typescript": "5.8.3",
|
56
|
-
"vitest": "3.1.
|
56
|
+
"vitest": "3.1.2"
|
57
57
|
},
|
58
58
|
"scripts": {
|
59
59
|
"format": "biome format ./src --write",
|