@levrbet/shared 0.3.20 → 0.3.22
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/core/socket.io/events.d.ts +12 -2
- package/dist/core/socket.io/events.js +1 -0
- package/dist/core/socket.io/events.js.map +1 -1
- package/dist/core/types/oracle/market/odds.types.d.ts +15 -0
- package/dist/server/middleware/rateLimit.middleware.d.ts +12 -2
- package/dist/server/middleware/rateLimit.middleware.js +25 -8
- package/dist/server/middleware/rateLimit.middleware.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { GamePhase, Odds, Scores } from "@prisma/client";
|
|
2
|
-
import { LevrFixtureId } from "../types";
|
|
2
|
+
import { GeneralMarketOddsUpdate, LevrFixtureId } from "../types";
|
|
3
3
|
export declare enum RoomEvent {
|
|
4
4
|
JoinRoom = "joinRoom",
|
|
5
5
|
LeaveRoom = "leaveRoom"
|
|
6
6
|
}
|
|
7
7
|
export declare enum GameEvent {
|
|
8
8
|
ScoreUpdate = "gameScoreUpdate",
|
|
9
|
-
PhaseUpdate = "gamePhaseUpdate"
|
|
9
|
+
PhaseUpdate = "gamePhaseUpdate",
|
|
10
|
+
GameTimeUpdate = "gameTimeUpdate"
|
|
10
11
|
}
|
|
11
12
|
export type GameScoreUpdate = Scores;
|
|
12
13
|
export type GamePhaseUpdate = {
|
|
@@ -14,7 +15,16 @@ export type GamePhaseUpdate = {
|
|
|
14
15
|
levrFixtureId: LevrFixtureId;
|
|
15
16
|
phase: GamePhase;
|
|
16
17
|
};
|
|
18
|
+
export type GameTimeUpdate = {
|
|
19
|
+
chainId: number;
|
|
20
|
+
gameObjectId: string;
|
|
21
|
+
levrFixtureId: LevrFixtureId;
|
|
22
|
+
gameClock: string;
|
|
23
|
+
gamePeriod: number;
|
|
24
|
+
gameProgress: number;
|
|
25
|
+
};
|
|
17
26
|
export declare enum MarketEvent {
|
|
18
27
|
OddsUpdate = "marketOddsUpdate"
|
|
19
28
|
}
|
|
20
29
|
export type MarketOddsUpdate = Odds;
|
|
30
|
+
export type GlobalMarketOddsUpdate = GeneralMarketOddsUpdate;
|
|
@@ -11,6 +11,7 @@ var GameEvent;
|
|
|
11
11
|
(function (GameEvent) {
|
|
12
12
|
GameEvent["ScoreUpdate"] = "gameScoreUpdate";
|
|
13
13
|
GameEvent["PhaseUpdate"] = "gamePhaseUpdate";
|
|
14
|
+
GameEvent["GameTimeUpdate"] = "gameTimeUpdate";
|
|
14
15
|
})(GameEvent || (exports.GameEvent = GameEvent = {}));
|
|
15
16
|
// MARKET EVENTS AND TYPES
|
|
16
17
|
var MarketEvent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/core/socket.io/events.ts"],"names":[],"mappings":";;;AAGA,IAAY,SAGX;AAHD,WAAY,SAAS;IACjB,kCAAqB,CAAA;IACrB,oCAAuB,CAAA;AAC3B,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,wBAAwB;AACxB,IAAY,
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/core/socket.io/events.ts"],"names":[],"mappings":";;;AAGA,IAAY,SAGX;AAHD,WAAY,SAAS;IACjB,kCAAqB,CAAA;IACrB,oCAAuB,CAAA;AAC3B,CAAC,EAHW,SAAS,yBAAT,SAAS,QAGpB;AAED,wBAAwB;AACxB,IAAY,SAIX;AAJD,WAAY,SAAS;IACjB,4CAA+B,CAAA;IAC/B,4CAA+B,CAAA;IAC/B,8CAAiC,CAAA;AACrC,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB;AAgBD,0BAA0B;AAC1B,IAAY,WAEX;AAFD,WAAY,WAAW;IACnB,8CAA+B,CAAA;AACnC,CAAC,EAFW,WAAW,2BAAX,WAAW,QAEtB"}
|
|
@@ -8,3 +8,18 @@ export interface PriceData {
|
|
|
8
8
|
priceB: number;
|
|
9
9
|
priceC: number | null;
|
|
10
10
|
}
|
|
11
|
+
export interface MarketOdd {
|
|
12
|
+
home: string;
|
|
13
|
+
away: string;
|
|
14
|
+
draw: string;
|
|
15
|
+
}
|
|
16
|
+
export interface MarketOdds {
|
|
17
|
+
american: MarketOdd;
|
|
18
|
+
european: MarketOdd;
|
|
19
|
+
tokenPrice: MarketOdd;
|
|
20
|
+
}
|
|
21
|
+
export interface GeneralMarketOddsUpdate extends MarketOdds {
|
|
22
|
+
gameClock: string;
|
|
23
|
+
gamePeriod: number;
|
|
24
|
+
gameProgress: number;
|
|
25
|
+
}
|
|
@@ -1,2 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { RateLimitRequestHandler } from "express-rate-limit";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a rate limiter middleware that lazily initializes the Redis store.
|
|
4
|
+
* This handles the case where Redis isn't initialized when routes are defined.
|
|
5
|
+
*
|
|
6
|
+
* The rate limiter is created on first request and then cached.
|
|
7
|
+
*/
|
|
8
|
+
export declare const rateLimiter: (requestsWindow: number, maxRequests: number) => RateLimitRequestHandler;
|
|
9
|
+
/**
|
|
10
|
+
* Alias for rateLimiter for explicit naming
|
|
11
|
+
*/
|
|
12
|
+
export declare const createRateLimiter: (requestsWindow: number, maxRequests: number) => RateLimitRequestHandler;
|
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.rateLimiter = void 0;
|
|
3
|
+
exports.createRateLimiter = exports.rateLimiter = void 0;
|
|
4
4
|
const express_rate_limit_1 = require("express-rate-limit");
|
|
5
5
|
const rate_limit_redis_1 = require("rate-limit-redis");
|
|
6
6
|
const config_1 = require("../config");
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
// Cache for rate limiters keyed by their configuration
|
|
8
|
+
const limiterCache = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* Creates a rate limiter middleware that lazily initializes the Redis store.
|
|
11
|
+
* This handles the case where Redis isn't initialized when routes are defined.
|
|
12
|
+
*
|
|
13
|
+
* The rate limiter is created on first request and then cached.
|
|
14
|
+
*/
|
|
9
15
|
const rateLimiter = (requestsWindow, maxRequests) => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
const cacheKey = `${requestsWindow}:${maxRequests}`;
|
|
17
|
+
// Return a middleware that lazily creates/uses the rate limiter
|
|
18
|
+
const middleware = (req, res, next) => {
|
|
19
|
+
let limiter = limiterCache.get(cacheKey);
|
|
20
|
+
if (!limiter) {
|
|
21
|
+
limiter = (0, express_rate_limit_1.rateLimit)({
|
|
14
22
|
windowMs: requestsWindow,
|
|
15
23
|
max: maxRequests,
|
|
16
24
|
standardHeaders: true,
|
|
@@ -20,10 +28,19 @@ const rateLimiter = (requestsWindow, maxRequests) => {
|
|
|
20
28
|
return config_1.redisClientManager.primaryClient.call(command, ...args);
|
|
21
29
|
},
|
|
22
30
|
}),
|
|
31
|
+
// Disable the validation that causes ERR_ERL_CREATED_IN_REQUEST_HANDLER
|
|
32
|
+
validate: { creationStack: false },
|
|
23
33
|
});
|
|
34
|
+
limiterCache.set(cacheKey, limiter);
|
|
24
35
|
}
|
|
25
|
-
return
|
|
36
|
+
return limiter(req, res, next);
|
|
26
37
|
};
|
|
38
|
+
// Return the middleware function typed as RateLimitRequestHandler
|
|
39
|
+
return middleware;
|
|
27
40
|
};
|
|
28
41
|
exports.rateLimiter = rateLimiter;
|
|
42
|
+
/**
|
|
43
|
+
* Alias for rateLimiter for explicit naming
|
|
44
|
+
*/
|
|
45
|
+
exports.createRateLimiter = exports.rateLimiter;
|
|
29
46
|
//# sourceMappingURL=rateLimit.middleware.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimit.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/rateLimit.middleware.ts"],"names":[],"mappings":";;;AACA,2DAAuE;AACvE,uDAAyD;AACzD,sCAA8C;AAE9C,
|
|
1
|
+
{"version":3,"file":"rateLimit.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/rateLimit.middleware.ts"],"names":[],"mappings":";;;AACA,2DAAuE;AACvE,uDAAyD;AACzD,sCAA8C;AAE9C,uDAAuD;AACvD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAmC,CAAA;AAE/D;;;;;GAKG;AACI,MAAM,WAAW,GAAG,CAAC,cAAsB,EAAE,WAAmB,EAA2B,EAAE;IAChG,MAAM,QAAQ,GAAG,GAAG,cAAc,IAAI,WAAW,EAAE,CAAA;IAEnD,gEAAgE;IAChE,MAAM,UAAU,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACnE,IAAI,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAExC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,GAAG,IAAA,8BAAS,EAAC;gBAChB,QAAQ,EAAE,cAAc;gBACxB,GAAG,EAAE,WAAW;gBAChB,eAAe,EAAE,IAAI;gBACrB,aAAa,EAAE,KAAK;gBACpB,KAAK,EAAE,IAAI,6BAAU,CAAC;oBAClB,WAAW,EAAE,CAAC,OAAe,EAAE,GAAG,IAAc,EAAE,EAAE;wBAChD,OAAO,2BAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAwB,CAAA;oBACzF,CAAC;iBACJ,CAAC;gBACF,wEAAwE;gBACxE,QAAQ,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE;aACrC,CAAC,CAAA;YACF,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAClC,CAAC,CAAA;IAED,kEAAkE;IAClE,OAAO,UAAgD,CAAA;AAC3D,CAAC,CAAA;AA7BY,QAAA,WAAW,eA6BvB;AAED;;GAEG;AACU,QAAA,iBAAiB,GAAG,mBAAW,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@levrbet/shared",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.22",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"scripts"
|
|
32
32
|
],
|
|
33
33
|
"bin": {
|
|
34
|
-
"levrbet-prisma-setup": "
|
|
34
|
+
"levrbet-prisma-setup": "scripts/setup-prisma.js"
|
|
35
35
|
},
|
|
36
36
|
"sideEffects": false,
|
|
37
37
|
"scripts": {
|