@hazeljs/gateway 0.7.9 → 0.8.1

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/README.md CHANGED
@@ -126,7 +126,15 @@ USER_SVC_RATE_LIMIT_MAX=500
126
126
  Decorators remain available for quick prototypes and when you prefer co-located configuration:
127
127
 
128
128
  ```typescript
129
- import { Gateway, Route, ServiceRoute, Canary, GatewayCircuitBreaker, GatewayRateLimit, GatewayServer } from '@hazeljs/gateway';
129
+ import {
130
+ Gateway,
131
+ Route,
132
+ ServiceRoute,
133
+ Canary,
134
+ GatewayCircuitBreaker,
135
+ GatewayRateLimit,
136
+ GatewayServer,
137
+ } from '@hazeljs/gateway';
130
138
 
131
139
  @Gateway({
132
140
  resilience: { defaultCircuitBreaker: { failureThreshold: 5 } },
@@ -194,12 +202,12 @@ gateway.on('canary:complete', (data) => {
194
202
 
195
203
  ## Version Routing Strategies
196
204
 
197
- | Strategy | How It Works | Example |
198
- |----------|-------------|---------|
199
- | Header | Client sends `X-API-Version: v2` | Opt-in for specific clients |
200
- | URI | Path prefix `/v2/api/users` | RESTful versioning |
201
- | Query | `?version=v2` | Quick testing |
202
- | Weighted | Percentage-based random | A/B testing, canary |
205
+ | Strategy | How It Works | Example |
206
+ | -------- | -------------------------------- | --------------------------- |
207
+ | Header | Client sends `X-API-Version: v2` | Opt-in for specific clients |
208
+ | URI | Path prefix `/v2/api/users` | RESTful versioning |
209
+ | Query | `?version=v2` | Quick testing |
210
+ | Weighted | Percentage-based random | A/B testing, canary |
203
211
 
204
212
  ## HazelJS Core Integration
205
213
 
@@ -242,13 +250,13 @@ const response = await gateway.handleRequest({
242
250
 
243
251
  ## Environment Variable Convention
244
252
 
245
- | Prefix | Scope | Example |
246
- |--------|-------|---------|
247
- | `GATEWAY_*` | Global gateway settings | `GATEWAY_DEFAULT_TIMEOUT=5000` |
248
- | `GATEWAY_CB_*` | Default circuit breaker | `GATEWAY_CB_THRESHOLD=5` |
249
- | `<SERVICE>_SVC_*` | Per-service overrides | `USER_SVC_RATE_LIMIT_MAX=100` |
250
- | `<SERVICE>_CANARY_*` | Canary deployment | `ORDER_CANARY_ERROR_THRESHOLD=5` |
251
- | `<SERVICE>_VERSION_*` | Version routing | `PAYMENT_DEFAULT_VERSION=v1` |
253
+ | Prefix | Scope | Example |
254
+ | --------------------- | ----------------------- | -------------------------------- |
255
+ | `GATEWAY_*` | Global gateway settings | `GATEWAY_DEFAULT_TIMEOUT=5000` |
256
+ | `GATEWAY_CB_*` | Default circuit breaker | `GATEWAY_CB_THRESHOLD=5` |
257
+ | `<SERVICE>_SVC_*` | Per-service overrides | `USER_SVC_RATE_LIMIT_MAX=100` |
258
+ | `<SERVICE>_CANARY_*` | Canary deployment | `ORDER_CANARY_ERROR_THRESHOLD=5` |
259
+ | `<SERVICE>_VERSION_*` | Version routing | `PAYMENT_DEFAULT_VERSION=v1` |
252
260
 
253
261
  ## License
254
262
 
@@ -1 +1 @@
1
- {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EAGd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAa3D,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,eAAe;IAQ5D;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,aAAa;IAQtF;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,YAAY,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EACjD,OAAO,CAAC,EAAE,eAAe,GACxB,aAAa;IAuBhB;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI;IA8ClD;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IA6FlE;;OAEG;IACH,aAAa,IAAI,IAAI;IAQrB;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;IACH,UAAU,IAAI,cAAc;IAI5B;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,kBAAkB,IAAI,eAAe;IAMrC,OAAO,CAAC,WAAW;YAUL,mBAAmB;YAoCnB,sBAAsB;IAgCpC,OAAO,CAAC,kBAAkB;CA2B3B"}
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EAGd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAa3D,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,eAAe;IAQ5D;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,aAAa;IAQtF;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,YAAY,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EACjD,OAAO,CAAC,EAAE,eAAe,GACxB,aAAa;IAuBhB;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,sBAAsB,GAAG,IAAI;IA8ClD;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAgGlE;;OAEG;IACH,aAAa,IAAI,IAAI;IAQrB;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;IACH,UAAU,IAAI,cAAc;IAI5B;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI5D;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,kBAAkB,IAAI,eAAe;IAMrC,OAAO,CAAC,WAAW;YAUL,mBAAmB;YAoCnB,sBAAsB;IAgCpC,OAAO,CAAC,kBAAkB;CA2B3B"}
package/dist/gateway.js CHANGED
@@ -163,13 +163,16 @@ class GatewayServer extends events_1.EventEmitter {
163
163
  });
164
164
  // Return 429 for rate limit exceeded (RFC 6585)
165
165
  if (error instanceof resilience_1.RateLimitError) {
166
- const retryAfterSec = error.retryAfterMs ? Math.ceil(error.retryAfterMs / 1000) : 60;
166
+ const rateLimitErr = error;
167
+ const retryAfterSec = rateLimitErr.retryAfterMs
168
+ ? Math.ceil(rateLimitErr.retryAfterMs / 1000)
169
+ : 60;
167
170
  return {
168
171
  status: 429,
169
172
  headers: { 'Retry-After': String(retryAfterSec) },
170
173
  body: {
171
174
  error: 'Too Many Requests',
172
- message: error.message,
175
+ message: rateLimitErr.message,
173
176
  retryAfter: retryAfterSec,
174
177
  },
175
178
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hazeljs/gateway",
3
- "version": "0.7.9",
3
+ "version": "0.8.1",
4
4
  "description": "Intelligent API Gateway for HazelJS - Version routing, canary deployments, circuit breaking, and traffic management",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,9 +18,9 @@
18
18
  "clean": "rm -rf dist"
19
19
  },
20
20
  "dependencies": {
21
- "@hazeljs/core": "^0.7.9",
22
- "@hazeljs/discovery": "^0.7.9",
23
- "@hazeljs/resilience": "^0.7.9",
21
+ "@hazeljs/core": "^0.8.1",
22
+ "@hazeljs/discovery": "^0.8.1",
23
+ "@hazeljs/resilience": "^0.8.1",
24
24
  "axios": "^1.14.0",
25
25
  "reflect-metadata": "^0.2.2"
26
26
  },
@@ -38,7 +38,10 @@
38
38
  "typescript": "^5.9.3"
39
39
  },
40
40
  "peerDependencies": {
41
- "@hazeljs/config": "*"
41
+ "@hazeljs/config": "*",
42
+ "@hazeljs/core": ">=0.2.0-beta.0",
43
+ "@hazeljs/discovery": ">=0.2.0-beta.0",
44
+ "@hazeljs/resilience": ">=0.2.0-beta.0"
42
45
  },
43
46
  "peerDependenciesMeta": {
44
47
  "@hazeljs/config": {
@@ -70,5 +73,5 @@
70
73
  "url": "https://github.com/hazeljs/hazel-js/issues"
71
74
  },
72
75
  "homepage": "https://hazeljs.ai",
73
- "gitHead": "28c21c509aeca3bf2d0878fbee737d906b654c67"
76
+ "gitHead": "8b7685d1250c4622f25d83992f58e13a59bb3dba"
74
77
  }