@daiso-tech/core
Version:
The library offers flexible, framework-agnostic solutions for modern web applications, built on adaptable components that integrate seamlessly with popular frameworks like Next Js.
45 lines (43 loc) • 1.52 kB
JavaScript
/**
* @module RateLimiter
*/
export const rateLimiterLua = `
-- @template TMetrics
-- @param rateLimiterStorage RateLimiterStorage<AllRateLimiterState<TMetrics>>
-- @param rateLimiterStateManager RateLimiterStateManager<TMetrics>
-- @param currentDate number
-- @return IRateLimiterAdapter
local function RateLimiter(rateLimiterStorage, rateLimiterStateManager, currentDate)
return {
-- @param key string
-- @return IRedisJsonRateLimiterState | null
getState = function(key)
local state = rateLimiterStorage.find(key)
if state == nil or state == cjson.null then
return nil
end
return {
success = state.success,
attempt = state.attempt,
resetTime = state.resetTime
}
end,
-- @param key string
-- @param limit number
-- @return IRedisJsonRateLimiterState
updateState = function(key, limit)
local track = rateLimiterStateManager.track(currentDate)
local updateState = rateLimiterStateManager.updateState(limit, currentDate)
return rateLimiterStorage.atomicUpdate({
key = key,
update = function(prevState)
local newState1 = track(prevState)
local newState2 = updateState(newState1)
return newState2
end
})
end,
}
end
`;
//# sourceMappingURL=rate-limiter-lua.js.map