docs(config): align rate limit settings
This commit is contained in:
parent
e4bff5a2fe
commit
d93ada4037
@ -14,6 +14,10 @@ COSMOS_DATABASE=lysnrai
|
|||||||
|
|
||||||
# ── Auth (platform-service) ─────────────────────────
|
# ── Auth (platform-service) ─────────────────────────
|
||||||
JWT_SECRET=change-me-prototype-jwt-secret
|
JWT_SECRET=change-me-prototype-jwt-secret
|
||||||
|
RATE_LIMIT_STORE_MODE=datastore
|
||||||
|
RATE_LIMIT_CONFIG_JSON=
|
||||||
|
API_KEY_RATE_LIMIT_CONFIG_JSON=
|
||||||
|
API_KEY_PRODUCT_RATE_LIMIT_CONFIG_JSON=
|
||||||
|
|
||||||
# ── Azure Blob Storage (platform-service) ─────────────────────
|
# ── Azure Blob Storage (platform-service) ─────────────────────
|
||||||
STORAGE_PROVIDER=azure
|
STORAGE_PROVIDER=azure
|
||||||
|
|||||||
@ -34,6 +34,15 @@ describe('lib/config', () => {
|
|||||||
vi.stubEnv('NODE_ENV', 'test');
|
vi.stubEnv('NODE_ENV', 'test');
|
||||||
vi.stubEnv('SERVICE_NAME', 'platform-service-test');
|
vi.stubEnv('SERVICE_NAME', 'platform-service-test');
|
||||||
vi.stubEnv('USAGE_WARN_THRESHOLD', '0.9');
|
vi.stubEnv('USAGE_WARN_THRESHOLD', '0.9');
|
||||||
|
vi.stubEnv('RATE_LIMIT_STORE_MODE', 'memory');
|
||||||
|
vi.stubEnv(
|
||||||
|
'API_KEY_RATE_LIMIT_CONFIG_JSON',
|
||||||
|
'{"jobs:read":{"maxRequests":10,"windowSeconds":60}}'
|
||||||
|
);
|
||||||
|
vi.stubEnv(
|
||||||
|
'API_KEY_PRODUCT_RATE_LIMIT_CONFIG_JSON',
|
||||||
|
'{"jobs:read":{"maxRequests":20,"windowSeconds":60}}'
|
||||||
|
);
|
||||||
|
|
||||||
const { config } = await import('./config.js');
|
const { config } = await import('./config.js');
|
||||||
|
|
||||||
@ -41,6 +50,9 @@ describe('lib/config', () => {
|
|||||||
expect(config.NODE_ENV).toBe('test');
|
expect(config.NODE_ENV).toBe('test');
|
||||||
expect(config.SERVICE_NAME).toBe('platform-service-test');
|
expect(config.SERVICE_NAME).toBe('platform-service-test');
|
||||||
expect(config.USAGE_WARN_THRESHOLD).toBe(0.9);
|
expect(config.USAGE_WARN_THRESHOLD).toBe(0.9);
|
||||||
|
expect(config.RATE_LIMIT_STORE_MODE).toBe('memory');
|
||||||
|
expect(config.API_KEY_RATE_LIMIT_CONFIG_JSON).toContain('"jobs:read"');
|
||||||
|
expect(config.API_KEY_PRODUCT_RATE_LIMIT_CONFIG_JSON).toContain('"jobs:read"');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('throws when required env vars are missing', async () => {
|
it('throws when required env vars are missing', async () => {
|
||||||
|
|||||||
@ -14,6 +14,9 @@ const envSchema = z.object({
|
|||||||
AZURE_BLOB_ACCOUNT_NAME: z.string().optional(),
|
AZURE_BLOB_ACCOUNT_NAME: z.string().optional(),
|
||||||
AZURE_BLOB_ACCOUNT_KEY: z.string().optional(),
|
AZURE_BLOB_ACCOUNT_KEY: z.string().optional(),
|
||||||
RATE_LIMIT_CONFIG_JSON: z.string().optional(),
|
RATE_LIMIT_CONFIG_JSON: z.string().optional(),
|
||||||
|
RATE_LIMIT_STORE_MODE: z.enum(['datastore', 'memory']).default('datastore'),
|
||||||
|
API_KEY_RATE_LIMIT_CONFIG_JSON: z.string().optional(),
|
||||||
|
API_KEY_PRODUCT_RATE_LIMIT_CONFIG_JSON: z.string().optional(),
|
||||||
// ── Growth (merged) ──
|
// ── Growth (merged) ──
|
||||||
WEBHOOK_INVITATION_REDEEMED_URL: z.string().optional(),
|
WEBHOOK_INVITATION_REDEEMED_URL: z.string().optional(),
|
||||||
WEBHOOK_REFERRAL_STATUS_URL: z.string().optional(),
|
WEBHOOK_REFERRAL_STATUS_URL: z.string().optional(),
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* Rate limiting types — sliding window limiter with per-product config.
|
* Rate limiting types — sliding window limiter with per-product config.
|
||||||
*
|
*
|
||||||
* Storage: in-memory Map (default) or Redis-backed (when REDIS_URL is set).
|
* Storage: datastore-backed by default, or in-memory when RATE_LIMIT_STORE_MODE=memory.
|
||||||
* Config: per-product rate limit rules loaded from RATE_LIMIT_CONFIG_JSON env
|
* Config: per-product rate limit rules loaded from RATE_LIMIT_CONFIG_JSON env
|
||||||
* or defaults to sensible values.
|
* or defaults to sensible values.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user